<!--- Process eligibility validation with Innovalon --->
<cfset agency_db = 'agency_' & session.AgencyID />

<!--- Get the latest inserted record --->
<cfquery name="GetLatestRecord" datasource="#Application.DataSrc#">
    SELECT * FROM #agency_db#.patients_ai 
    WHERE created_by = #session.EmployeeID#
    ORDER BY pt_ai_id DESC 
    LIMIT 1
</cfquery>

<cfif GetLatestRecord.recordcount gt 0>
    
    <!--- Process each uploaded 270 file --->
    <cfloop from="1" to="4" index="i">
        <cfif uploaded_files[i] neq "">
            
            <!--- Read the 270 file content --->
            <cffile action="read" variable="fileContent" file="#filepath##uploaded_files[i]#">
            
            <!--- Generate control number and filename for Innovalon --->
            <cfset CONTRO = #DateFormat(Now(),"YYMMDDHHMMSS")#>
            <cfset CONTROL = #session.AgencyID#&'-'&#CONTRO#>
            <cfset filename = 'ELG'&#CONTROL#&'.270'>
            
            <!--- Create Innovalon-compatible 270 file --->
            <cfset finaldata = "ISA*00*          *00*          *ZZ*ME077187        *ZZ*14004           *#DateFormat(Now(),"yyMMdd")#*#TimeFormat(Now(),"HHmm")#*^*00501*#CONTRO#*0*P*:~" & chr(13)& chr(10) &
                "GS*HI*ME077187*14004*#DateFormat(Now(),"yyyymmdd")#*#TimeFormat(Now(),"HHmmss")#*#CONTRO#*X*005010X279A1~" & chr(13)& chr(10) &
                "ST*270*0001*005010X279A1~" & chr(13)& chr(10) &
                "BHT*0022*13*#CONTRO#*#DateFormat(Now(),"yyyymmdd")#*#TimeFormat(Now(),"HHmmss")#~" & chr(13)& chr(10) &
                "HL*1**20*1~" & chr(13)& chr(10) &
                "NM1*PR*2*INNOVALON*****PI*14004~" & chr(13)& chr(10) &
                "HL*2*1*21*1~" & chr(13)& chr(10) &
                "NM1*41*2*ME077187*****46*ME077187~" & chr(13)& chr(10) &
                "HL*3*2*22*0~" & chr(13)& chr(10) &
                "NM1*IL*1*#UCase(GetLatestRecord.Pt_Last)#*#UCase(GetLatestRecord.Pt_First)#****MI*#GetLatestRecord.policy_id_no#~" & chr(13)& chr(10) &
                "DMG*D8*#DateFormat(GetLatestRecord.Pt_DOB,"yyyymmdd")#*M~" & chr(13)& chr(10) &
                "DTP*307*RD8*#DateFormat(GetLatestRecord.start_of_care_date,"yyyymmdd")#-#DateFormat(DateAdd('d', 30, GetLatestRecord.start_of_care_date),"yyyymmdd")#~" & chr(13)& chr(10) &
                "EQ*30~" & chr(13)& chr(10) &
                "III*ZZ*12~" & chr(13)& chr(10) &
                "SE*14*0001~" & chr(13)& chr(10) &
                "GE*1*#CONTRO#~" & chr(13)& chr(10) &
                "IEA*1*#CONTRO#~" & chr(13)& chr(10)>
            
            <!--- Write the processed file --->
            <cfset strFilePath = "/var/www/Inovalon_files/Eligibility_upload_files/" />
            <cffile action="write" file="#strFilePath##filename#" output="#finaldata#">
            
            <!--- Upload to Innovalon SFTP --->
            <cftry>
                <cfset billingSFTP = createObject("component", "components.billing.billing_sftp") />
                <cfset objFTPProperties = billingSFTP.getConnectionProperties(session.AgencyID) />
                
                <cfftp action="open" connection="objConnection" attributeCollection="#objFTPProperties#">
                <cfftp action="putfile" localfile="#strFilePath##filename#" remotefile="/incoming/eligibility/#filename#" connection="objConnection">
                <cfftp action="close" connection="objConnection">
                
                <!--- Update the patients_ai record with eligibility status --->
                <cfquery name="UpdateEligibilityStatus" datasource="#Application.DataSrc#">
                    UPDATE #agency_db#.patients_ai 
                    SET eligibility_status = 'PENDING',
                        eligibility_response = <cfqueryparam value="#finaldata#" cfsqltype="cf_sql_longvarchar">,
                        verification_date = <cfqueryparam value="#DateFormat(now(),'yyyy-mm-dd')#" cfsqltype="cf_sql_date">,
                        modified_date = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">,
                        modified_by = <cfqueryparam value="#session.EmployeeID#" cfsqltype="cf_sql_integer">
                    WHERE pt_ai_id = #GetLatestRecord.pt_ai_id#
                </cfquery>
                
                <cfcatch type="any">
                    <!--- Log error and update status --->
                    <cfquery name="UpdateEligibilityError" datasource="#Application.DataSrc#">
                        UPDATE #agency_db#.patients_ai 
                        SET eligibility_status = 'ERROR',
                            error_code = 'UPLOAD_FAILED',
                            error_message = <cfqueryparam value="#cfcatch.message#" cfsqltype="cf_sql_varchar">,
                            modified_date = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">,
                            modified_by = <cfqueryparam value="#session.EmployeeID#" cfsqltype="cf_sql_integer">
                        WHERE pt_ai_id = #GetLatestRecord.pt_ai_id#
                    </cfquery>
                </cfcatch>
            </cftry>
            
        </cfif>
    </cfloop>
    
</cfif>
