
<cfset myarray[1] = "empty value"> 
<cfquery name="Agency" datasource="#Application.DataSrc#">
	SELECT agency_id from #Request.prefix_db_lookup#.Agency where status='active' ORDER BY agency_id
</cfquery>

<cfset myarray=arraynew(1)>
<cfloop query="Agency">
    <cfset myarray[CurrentRow]=agency_id>
</cfloop>

<cfset billingSFTP = createObject("component", "components.billing.billing_sftp") />
<!--- Do not delete remote 835 files on stage/dev servers. --->
<cfset isNonProdServer = (
	CGI.SERVER_NAME EQ "127.0.0.1" OR CGI.SERVER_NAME EQ "localhost"
	OR CGI.SERVER_NAME EQ "52.23.186.30" OR CGI.SERVER_NAME EQ "dev.myhomecarebiz.com"
	OR CGI.SERVER_NAME EQ "98.87.35.139" OR CGI.SERVER_NAME EQ "devsecure.myhomecarebiz.com"
	OR CGI.SERVER_NAME EQ "54.175.136.41" OR CGI.SERVER_NAME EQ "stagesecure.myhomecarebiz.com"
) />
<!--- #10476: process all SFTP accounts (hcbserv shared + dedicated e.g. Evergreen 1195) --->
<cfset importConnections = billingSFTP.getImportConnections() />
<cfset reading_filepath = "/var/www/Upload/remits/" />
<cfif NOT directoryExists(reading_filepath)>
	<cfdirectory action="create" directory="#reading_filepath#">
</cfif>
<cfloop array="#importConnections#" index="importConn">
<cftry>
<cfset objFTPProperties = importConn.connection />
<cfset dedicatedAgencyId = importConn.dedicatedAgencyId />
<cfset sftpAccountLabel = objFTPProperties.Username />
<cfftp action="open" connection="objConnection" attributeCollection="#objFTPProperties#" >
<cfftp connection="objConnection" action="listdir" directory="/outgoing/remits/" name="dirlist" stoponerror="Yes"> 
<!---<h3>The current directory is <cfoutput>#dirlist.recordCount#</cfoutput>
 <cfdump var="#dirlist#" > --->
<cfset name2=ArrayNew(1) />
<cfset counts = #dirlist.recordCount# - 1 />
<cfset split_delimiter = "*" >
	<div class="portlet box blue">
				<div class="portlet-title">
					<div class="caption">
						<i class="fa fa-gear"></i>Payment Claims
					</div>
					<div class="tools">
						<a class="collapse" href="javascript:;" data-original-title="" title="">
						</a>
					</div>
				</div>
				<div class="portlet-body flip-scroll">
					<table class="table table-bordered table-striped table-condensed flip-content" border="1">
						<thead class="flip-content" >
							<tr>
								<th>Patient Name </th>
								<th>Date Deposit </th>
								<th>Deposit_Type</th>
								<th>Date Check/ Status </th>
								<th>Remit_No </th>
								<th>Internal Control_number</th>
								<th>Pay Name </th>
								<th>Payer type </th>
								<th>Visit Date</th>
								<th>Revenue Code</th>
								<!--- <th>SVC03</th>
								<th>SVC04</th> --->
								<th>Net Total </th>
								<th>Paid Amount </th>
								<th>Adjustment<br>Amount</th>
								<th>Adjustment<br> Group code</th>
								<th>Adjustment<br>code</th>
								<th>Seq <br>Amount</th>	
								<th>Seq <br>Code</th>	
							</tr>
						</thead>
	                    <tbody style="text-align:center;">                         
                      		<cfoutput> 
							    <cfloop from="1" to="#dirlist.recordCount#" index="k">
							     	<cfset filepath = "/Upload/remits/" />
									<cfset name2 = #dirlist.name[k]# />
									<cfset filepath2 = filepath&name2 >
									<cfif (Right(name2,4) eq  '.835')>
									 	<cfftp action="getfile"  remotefile="/outgoing/remits/#name2#" localfile="#reading_filepath##name2#"
												failIfExists="no" timeout="300" connection="objConnection" />  
							            <cffile action="read"  variable="fileContent" file="#reading_filepath#/#name2#" >
							            <cfset filearray  =ListToArray(#fileContent#,'~')/>
							            <cfset thirdlinearray  =ListToArray(#filearray[3]#,'*')/>   
							            <cfset delete_deposit = 1 >
						                <!--- <cfdump var="#filearray#"> --->
					              		<cfif thirdlinearray[2] EQ '835'>
					              			<cftry>
								              <cfset secondlinearray  =ListToArray(#filearray[2]#,'*')/> 
								              <cfset dateofdeposit =     secondlinearray[5] />
								              <cfset Date_Deposit = createObject("java","java.text.SimpleDateFormat").init("yyyyMMdd").parse(#dateofdeposit#,createObject("java","java.text.ParsePosition").init(0*0)) />
								              <cfset Date_Deposit = #dateformat(Date_Deposit,"yyyy-mm-dd")# />
								             
								              <cfset fourthlinearray  =ListToArray(#filearray[4]#,'*')/> 
								              <cfset Check_Total = fourthlinearray[3] />
								              <cfset Deposit_Type = fourthlinearray[5] />
								              <cfset date_check = fourthlinearray[#ArrayLen(fourthlinearray)#] />
								              <cfset Date_Check = createObject("java","java.text.SimpleDateFormat").init("yyyyMMdd").parse(#date_check#,createObject("java","java.text.ParsePosition").init(0*0)) />             
								              <cfset Date_Check = #dateformat(Date_Check,"yyyy-mm-dd")# />

								              <cfset fifthlinearray  =ListToArray(#filearray[5]#,'*')/> 
								              <cfset Remit_No = fifthlinearray[3] />
								               <cfset Pay_Name = ""/> 
								               <cfloop from="6" to="#arraylen(filearray)#" index="arrayitem">
									                <cfif  Left(Trim(filearray[arrayitem]),6) EQ 'N1*PR*'>
														<cfset payerarray  =ListToArray(#filearray[arrayitem]#,'*')/> 
								              			<cfset Pay_Name = payerarray[3] />								              			
													</cfif>
												</cfloop>							          
								                <cfset strWords = Replace(#fileContent#, "CLP", "<", "all") />
								                <cfset CLPallarray = ListToArray(#strWords#,'<') />


								              	<cfloop from="2" to="#arraylen(CLPallarray)#" index="item">
								             	 	 <cfset  CLP  =ListToArray(#CLPallarray[item]#,'*')/>
								             	 	 <cfset strWords = Replace(#fileContent#, "CLP", "<", "all") />
								             	 	 <cfset  CLPlines  =ListToArray(#CLPallarray[item]#,'~')/>
								             	 	 <cfset HCPCS_ID = 0 />
					             	 	 	 		 <cfset SVC04 = 0 />
					             	 	 	 		 <cfset SVC03 = 0 />
					             	 	 	 		 <cfset Amount_Writeoff = 0 />
					             	 	 	 		 <cfset Visit_Date  = 0 />

								             		<cfset Internal_control_number =  #CLP[1]# />
								             		<cfset claim_type =  #CLP[2]# />
								             		<cfif <!--- claim_type NEQ '22' AND---> claim_type NEQ '4'>
									             		<cfset agencynumber  =ListToArray(Internal_control_number,'-')/> 
									             		<cfset agencyIdFromControl = agencynumber[1] />
									             		<cfset processThisClaim = true />
									             		<cfif len(dedicatedAgencyId) AND agencyIdFromControl NEQ dedicatedAgencyId>
									             			<cfset processThisClaim = false />
									             		</cfif>
									             		<cfif processThisClaim>
									             		<cfif  Internal_control_number contains '-'>
										              	  <cfset Request.prefix_db_agency  = 'agency_'&agencynumber[1] />
										                <cfelse>
										              	  <cfset Request.prefix_db_agency  = 'agency_179' />
										                </cfif>
									             		<cfset agencynumber  =ListToArray(Internal_control_number,'-')/> 
									             		<cfquery name="getinvoices" dataSource="#Application.DataSrc#">
													         SELECT Invoices.Invoice_ID,Invoices.PatientPayer_ID,Invoices.Internal_control_number,
													             Invoices.Patient_ID,pPayer.Output ,pPayer.Pay_Name,
													          pPatients.Pt_Last,pPatients.Pt_First
													          FROM #Request.prefix_db_agency#.Invoices
													          JOIN #Request.prefix_db_agency#.pPatients ON  pPatients.Patient_ID  =  Invoices.Patient_ID  AND pPatients.Status < 2 
													          JOIN #Request.prefix_db_agency#.pPayer ON  pPayer.Pay_ID  =  Invoices.PatientPayer_ID  AND pPayer.Status = 0
													         WHERE Invoices.Internal_control_number IN ('#Internal_control_number#') 
													        <!---  AND Invoices.deleted <> 1  --->
													    </cfquery>

													    <cfset j = 1 >
								             		 	<cfset Adjust_code =  0 />
							              				<cfset Adjust_amount =  0 />
							              				<cfset group_code =  0 />
							             				<cfset Total_amount =  0 />
							             				<cfset Seq_Amount = 0 />
													    <cfif getinvoices.Output EQ 'Medicare'>
													    	<cfset Total_amount =  #CLP[3]# />
													    	<cfset Paid_amount =  #CLP[4]# />
													    	<cfset Adjust_amount2  =  0 />
													    	<cfloop from="1" to="#arraylen(CLPlines)#" index="p">
								              					<cfif LEFT(CLPlines[p],3) EQ 'CAS'>
									              					<cfset CASarray  =ListToArray(#CLPlines[p]#,#split_delimiter#)/>
									              					<cfset group_code = CASarray[2] />
								              						<cfset Adjust_code =  CASarray[3] />
								              						<cfset Adjust_amount =  CASarray[4] />
								              						<cfif ArrayIsDefined(CASarray,6)>
									              						<cfif  CASarray[6] EQ '253'>
									              							<cfset Seq_code =  CASarray[6] />
									              							<cfset Seq_Amount =  CASarray[7] />
									              						<cfelse>
									              							<cfset Seq_code =  CASarray[5] />
									              							<cfset Seq_Amount =  CASarray[6] />
									              						</cfif>
								              						</cfif>
												             		<cfbreak>
									              				</cfif>
							              					</cfloop>
							              					<cfset total_adjustcmount = Adjust_amount2/>
							              					<cfset cas_count = 0/>
							              					<cfloop from="1" to="#arraylen(CLPlines)#" index="m">
								              					<cfif LEFT(CLPlines[m],3) EQ 'CAS'>
									              					<cfset CASarray  =ListToArray(#CLPlines[m]#,#split_delimiter#)/>
								              						<cfset Adjust_amounts =  CASarray[4] />
								              						<cfif cas_count GTE 1 >
								              							<cfset total_adjustcmount = total_adjustcmount + Adjust_amounts />
								              						</cfif>
								              						<cfset cas_count = cas_count  + 1 >
								              						<cfif ArrayIsDefined(CASarray,3)>
									              						<cfif  CASarray[3] EQ '253'>
									              							<cfset Seq_Amount =  CASarray[4] />
									              							<cfset Seq_code = CASarray[3] />
									              						</cfif>
									              					</cfif>		
									              				</cfif>								              				
							              					</cfloop>
							              					<cfset Equations1 = Total_amount - Adjust_amount />
							              					<cfset Equations2 = Equations1 - Paid_amount - total_adjustcmount />
							              					<!---<cfdump var="#Equations1#"><br> 
							              					<cfdump var="#Paid_amount#"><br> 
							              					<cfdump var="#total_adjustcmount#"><br> 
							              					<cfdump var="#Equations2#"><br> <br> ---> 
													    <cfelse>

													    	 <cfset Total_amount =  #CLP[3]# />
										             		 <cfif Sgn(Total_amount) EQ '-1' AND getinvoices.Output NEQ 'Medicare'>
										             		 	<cfset Total_amount = Total_amount * (-1) />
										             		 </cfif>
										             		 <cfset Paid_amount =  #CLP[4]# />
										             		 <cfif Sgn(Paid_amount) EQ '-1'>
										             		 	<cfset Paid_amount = Paid_amount * (-1) />
										             		 </cfif>
										             		 <!--- <cfset Remit_No =  #CLP[6]# />
										             		 <cfif Remit_No EQ 'MA'>
										             		 	<cfset Remit_No =  #CLP[7]# />
										             		 </cfif> --->
										             		 <cfloop from="1" to="#arraylen(CLPlines)#" index="p">
								              					<cfif LEFT(CLPlines[p],3) EQ 'CAS'>
									              					<cfset CASarray  =ListToArray(#CLPlines[p]#,#split_delimiter#)/>
									              					<cfset group_code = CASarray[2] />
								              						<cfset Adjust_code =  CASarray[3] />
								              						<cfset Adjust_amount =  CASarray[4] />
								              						<cfif Sgn(Adjust_amount) EQ '-1'>
												             		 	<cfset Adjust_amount = Adjust_amount * (-1) />
												             		 </cfif>
												             		 <cfif ArrayIsDefined(CASarray,3)>
									              						<cfif  CASarray[3] EQ '253'>
									              							<cfset Seq_Amount =  CASarray[4] />
									              							<cfset Seq_code = CASarray[3] />
									              						</cfif>								              						
						              								</cfif>		
									              				</cfif>
									              				
							              					</cfloop>

													    </cfif>
													    
													    <cfif Seq_Amount NEQ 0 >
					              							<cfquery name="updating_Invoices" dataSource="#Application.DataSrc#">
																UPDATE  #Request.prefix_db_agency#.Invoices
																	SET  
																	Seq_Amount =  '#Seq_Amount#',
																	Seq_code  = '#Seq_code#'
																	<!--- ,Updated_by = '#session.employeeid#' --->
																WHERE Internal_control_number = '#Internal_control_number#'
																AND (IFNULL(Invoice_Lock,0) <> 1)
										    		  		</cfquery>
														</cfif>	
														<cfif delete_deposit EQ 1>
															<cfquery name="updatepDeposit" dataSource="#Application.DataSrc#"> 
																    UPDATE #Request.prefix_db_agency#.pDeposit 
																    	SET Status = 1,
																    	Record_Modified_Date = #now()#
															    	WHERE Remit_No =  '#Remit_No#'
															    	AND status =0 
															</cfquery>
															<cfset delete_deposit = 0 >
														</cfif>	


									             		 								             		
						             	 	 	 		<cfset total_paymentamount = 0 />
														<cfset total_WriteOffAmount = 0 />	
														<!--- <cfset Paid_amount = 0 /> --->
														
									      				<cfloop from="1" to="#arraylen(CLPlines)#" index="i">
									      					<cfset SVC = trim(CLPlines[i]) />
							             	 	 			<cfif LEFT(SVC,3) EQ 'SVC'>
										             	 	 	<cfset  SVCarry  =ListToArray(#CLPlines[i]#,#split_delimiter#)/>
								             	 	 	 		<cfif ArrayIsDefined(SVCarry,2)>
								             	 	 	 			<cfset HCPCSIDs = ListToArray(#SVCarry[2]#,"^") />
								             	 	 	 			<cfif ArrayIsDefined(HCPCSIDs,2)>
								             	 	 	 				<cfset HCPCS_ID =  #HCPCSIDs[2]# />
								             	 	 	 			</cfif>	
								             	 	 	 		</cfif>
								             	 	 	 		<cfif ArrayIsDefined(SVCarry,3)>
								             	 	 	 			<cfset SVC03 = SVCarry[3] />
								             	 	 	 		</cfif>
								             	 	 	 		<cfif ArrayIsDefined(SVCarry,4)>
								             	 	 	 			<cfset SVC04 = SVCarry[4] />
								             	 	 	 		</cfif>
								             	 	 	 		<cfif ArrayIsDefined(SVCarry,5)>
								             	 	 	 				<cfset HCPCS_ID =  #SVCarry[5]# />
								             	 	 	 		</cfif>	
								             	 	 	 		<cfif getinvoices.Output EQ 'Medicare' AND  j GT 1>
								             	 	 	 			<cfset Adjust_amount = 	#SVC03#/>
								             	 	 	 		<cfelseif  getinvoices.Output NEQ 'Medicare' >
								             	 	 	 			<cfset Adjust_amount = 	#SVC03#/>
								             	 	 	 		</cfif>  
								             	 	 	 		<!--- <cfset Paid_amount = #SVC04# /> --->
								             	 	 	 		
								             	 	 	 		<cfset  DTMarry  =ListToArray(#CLPlines[i+1]#,#split_delimiter#)/>
								             	 	 	 		<cfset visitdate = #DTMarry[3]# />
								             	 	 	 		<cfset Visit_Date = createObject("java","java.text.SimpleDateFormat").init("yyyyMMdd").parse(#visitdate#,createObject("java","java.text.ParsePosition").init(0*0)) />             
								              					<cfset Visit_Date = #dateformat(Visit_Date,"yyyy-mm-dd")# />
								              					<cfif getinvoices.Output EQ 'Medicare'>
								              						<cfset CASarry  =ListToArray(#CLPlines[i+2]#,#split_delimiter#)/>
									              					<cfset group_code = CASarry[2] />
								              						<cfset Adjust_code =  CASarry[3] />
								              						<cfset Adjust_amount =  CASarry[4] />
								              												              					
												             	<cfelse>
												             		<cfset CASarry  =ListToArray(#CLPlines[i+2]#,#split_delimiter#)/>
									              					<cfset group_code = CASarry[2] />
								              						<cfset Adjust_code =  CASarry[3] />
								              						<cfset Adjust_amount =  CASarry[4] />
								              						<cfif Sgn(Adjust_amount) EQ '-1'>
												             		 	<cfset Adjust_amount = Adjust_amount * (-1) />
												             		 </cfif>						              								              				
												             	</cfif>	 

												             	<cfif HCPCS_ID EQ  '0551'>
																	<cfset Skill = 'SN'>
																<cfelseif HCPCS_ID EQ  '0421'>
																	<cfset Skill = 'PT'>
																<cfelseif HCPCS_ID EQ  '0431'>
																	<cfset Skill = 'OT'>
																<cfelseif HCPCS_ID EQ  '0440' OR HCPCS_ID EQ  '0441' >
																	<cfset Skill = 'ST'>
																<cfelseif HCPCS_ID EQ  '0561'>
																	<cfset Skill = 'MSW'>
																<cfelseif HCPCS_ID EQ  '0571'>
																	<cfset Skill = 'HHA'>
																<cfelse>
																	<cfset Skill = 'SN'>
																</cfif>

																 <cfquery name="updating_pSchedules" dataSource="#Application.DataSrc#">
															        UPDATE #Request.prefix_db_agency#.pSchedules
																     SET  payment = '#Paid_amount#',
																        write_offamount =  '#Adjust_amount#',
																        write_offcode =  '#group_code#',
																        write_offcodesecond =  '#Adjust_code#',
																        Date_Change = #now()#
																	WHERE Status = 0
																	AND Visit_Date = '#Visit_Date#'
																	AND Skill = '#Skill#'
																	AND Patient_ID = '#getinvoices.Patient_ID#'
																</cfquery> 

								              					<tr>
								              						<td>#getinvoices.Pt_Last#, #getinvoices.Pt_First#</td>
																	<td>#dateformat(Date_Deposit,"yyyy-mm-dd")#</td>
																	<td>#Deposit_Type#</td>
																	<td>#dateformat(Date_Check,"yyyy-mm-dd")#</td>
																	<td>#Remit_No#</td>
																	<td>#Internal_control_number#</td>
																	<td>#Left(getinvoices.Pay_Name,30)#..</td>	
																	<td>#getinvoices.Output#</td>														
																	<td>#Visit_Date#</td>
																	<td>#HCPCS_ID#</td>
																	<!--- <td>#SVC03#</td>
																	<td>#SVC04#</td> --->
																	<td>#Total_amount# </td>
																	<td><cfif total_paymentamount EQ 0 AND getinvoices.Output EQ 'Medicare'>#Paid_amount#</cfif></td>
																	<td>#Adjust_amount#</td>
																	<td>#group_code#</td>
																	<td>#Adjust_code#</td>
																	<td><cfif Seq_Amount NEQ 0 >#Seq_Amount#</cfif></td>
																	<td><cfif Seq_Amount NEQ 0 >#Seq_code#</cfif></td>
																</tr>
																<cfif getinvoices.Output EQ 'Medicare'>
																	<cfset total_paymentamount =  Paid_amount />
																<cfelse>
																	<cfset total_paymentamount = total_paymentamount + Paid_amount />
																</cfif>
											    				<cfset total_WriteOffAmount = total_WriteOffAmount + Adjust_amount />
															</cfif>	

									             	 	</cfloop>
									             		 
									             	 	
									             	 	 <cfset Net_Total = CLP[4] />
												
														<cfset toddaydate = #dateformat(now(),"yyyy-mm-dd")# />
																									
														 <cfquery name="insertpDeposit" dataSource="#Application.DataSrc#">
													         INSERT IGNORE into #Request.prefix_db_agency#.pDeposit
																(Date_Deposit,Payer_ID, Date_Create,Date_Check, Deposit_Type, Check_Total, Remit_No,
																Internal_Control_number,HCPCS,SVC04,SVC03,Writeoff_Amount,Visit_Date,
																Pay_Name, Net_Total,  Record_Created_Date, Record_Modified_Date)
															VALUES 
																('#Date_Deposit#','#getinvoices.PatientPayer_ID#','#toddaydate#','#Date_Check#','#Deposit_Type#', '#Check_Total#','#Remit_No#',
																'#Internal_control_number#','#HCPCS_ID#','#SVC04#','#SVC03#','#Amount_Writeoff#','#Visit_Date#',
																'#Pay_Name#','#Net_Total#', #now()#,#now()#)
														</cfquery> 								              									             
													    <cfset final_amount =   total_paymentamount + total_WriteOffAmount />
													    <cfif getinvoices.Invoice_ID NEQ ''>
													    	<cfquery name="update_payments" dataSource="#Application.DataSrc#"> 
															    	UPDATE #Request.prefix_db_agency#.Payments 
															    	SET Deleted = 1,
															    	Record_Modified_Date = #now()#
														    	WHERE Invoice_ID =  '#getinvoices.Invoice_ID#'
														    	AND EFT_No = '#Remit_No#' 
														    	AND Amount = '#total_paymentamount#'  
														    	AND WriteOffAmount = '#total_WriteOffAmount#'
														    	AND (IFNULL(Payment_Lock,0) <> 1)
															</cfquery>	
															<cfquery name="Insert_Payments" dataSource="#Application.DataSrc#"> 
															    	INSERT INTO #Request.prefix_db_agency#.Payments(
															    		 Invoice_ID, PatientPayer_ID, PaymentDate, Amount, PaymentMethod, EFT_Amount, EFT_No, Claim,
															    		  Comments, WriteOffAmount, WriteOffType, Deleted, Internal_control_number)
																	 VALUES 
																		('#getinvoices.Invoice_ID#','#getinvoices.PatientPayer_ID#','#Date_Deposit#', '#total_paymentamount#','Electronic','#Check_Total#',
																			'#Remit_No#',
																		'#Internal_control_number#','Auto claim payment processing', '#total_WriteOffAmount#','#Adjust_code#',
																		0, '#Internal_control_number#')
															</cfquery>
														</cfif> 
													</cfif>
													</cfif>
										  		</cfloop>
												 <cfcatch>
													<cflog file="cronjob" type="Error" 
													text="Failure of 835 file of #name2#; Error: #cfcatch.Message# #cfcatch.Detail#">
												</cfcatch>
											</cftry>
										<cfelseif thirdlinearray[2] EQ '277'>
											<cfinclude template="cron_277.cfm" />
										</cfif>
									</cfif>
									
		                        </cfloop>
					    	</cfoutput> 
					    </tbody>
					</table>
				</div>
			</div>

			<cfif NOT isNonProdServer>
			    <cfloop from="1" to="#dirlist.recordCount#" index="k">
			     	<cfset filepath = "/Upload/remits/" />
					<cfset name2 = #dirlist.name[k]# />
					<cfset filepath2 = filepath&name2 >
					<cfif (Right(name2,4) eq  '.835')>
						<cfftp Connection="objConnection" Action="Remove" Item="/outgoing/remits/#name2#">  
					</cfif>
			 	</cfloop>
			</cfif>
<cfftp action="close" connection="objConnection" />
<cfcatch type="any">
	<cflog file="cron_835" type="Error" text="835 import failed (#sftpAccountLabel#): #cfcatch.message# #cfcatch.detail#" />
	<cftry><cfftp action="close" connection="objConnection" /><cfcatch></cfcatch></cftry>
</cfcatch>
</cftry>
</cfloop>