<!---
AJAX handler to get revenue codes filtered by visit date.
Auth/visit skill drives the list (url.skill) — do not replace with employee Skill_1
(#10669: LVN G0300 was hidden when emp skill overwrite / agency exact Visit_Type matched poorly).
--->
<cfsetting showdebugoutput="false">
<cfparam name="url.visit_date" default="">
<cfparam name="url.payer_id" default="0">
<cfparam name="url.agency_id" default="#Session.AgencyID#">
<cfparam name="url.emp_id" default="0">
<cfparam name="url.skill" default="">
<cfparam name="url.is_agency_login" default="0">
<!--- HCPCS from selected authorization; when same_rev_code=1, broaden within nursing family --->
<cfparam name="url.auth_hcpcs" default="">
<cfparam name="url.auth_rev_code" default="">
<cfparam name="url.same_rev_code" default="0">
<cfparam name="url.saved_hcpcs_id" default="0">

<cftry>
	<cfif url.visit_date NEQ "" AND url.payer_id NEQ 0>
		<cfset visitDateParsed = CreateODBCDate(url.visit_date)>
		<!--- Prefer authorization / visit skill from caller; employee Skill_1 must not override (#10669) --->
		<cfset hcpcs_skill = Trim(url.skill)>
		<cfset skillUpper = UCase(hcpcs_skill)>
		<cfset savedHcpcsId = Val(url.saved_hcpcs_id)>
		<cfset sameRevCode = (Val(url.same_rev_code) EQ 1)>
		<cfset isNursingSkill = (
			skillUpper EQ "SN" OR skillUpper EQ "RN"
			OR Left(skillUpper, 3) EQ "LPN" OR Left(skillUpper, 3) EQ "LVN"
		)>

		<cfquery name="getrevenue" datasource="#Application.DataSrc#">
		    SELECT *
		    FROM   #Request.prefix_db_agency#.pRevenue_Code
		    WHERE  Status = <cfqueryparam cfsqltype="cf_sql_integer" value="0">
		    AND Payer_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#url.payer_id#">
		    AND (
		    	<cfif savedHcpcsId GT 0>
		    		Rev_CodeID = <cfqueryparam cfsqltype="cf_sql_integer" value="#savedHcpcsId#">
		    		OR
		    	</cfif>
		    	(
				    <cfif hcpcs_skill NEQ "">
				    	<cfif skillUpper EQ "PT" OR skillUpper EQ "PTA">
				    		Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="PT">
				    	<cfelseif skillUpper EQ "OT" OR skillUpper EQ "COTA">
				    		Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="OT">
				    	<cfelseif skillUpper EQ "ST" OR skillUpper EQ "STA" OR skillUpper EQ "SLPA">
				    		Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="ST">
				    	<cfelseif isNursingSkill>
							(
								Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="SN">
								OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="RN">
								OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="LPN">
								OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="LVN">
								OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="LVN/LPN">
								OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="Skilled Nursing">
								OR HCPCS = <cfqueryparam cfsqltype="cf_sql_varchar" value="G0299">
								OR HCPCS = <cfqueryparam cfsqltype="cf_sql_varchar" value="G0300">
								OR Description LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%LPN%">
								OR Description LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%LVN%">
							)
				    	<cfelseif skillUpper EQ "MSW" OR skillUpper EQ "SW">
				    		(
				    			Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="MSW">
				    			OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="Medical Social Worker">
				    		)
				    	<cfelse>
				    		Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="#hcpcs_skill#">
				    	</cfif>
				    	AND
				    </cfif>
				    (
				        Contract_Rate_Effective_Date IS NULL 
				        OR Contract_Rate_Effective_Date <= <cfqueryparam cfsqltype="cf_sql_date" value="#visitDateParsed#">
				    )
				    AND (
				        Contract_Rate_End_Date IS NULL 
				        OR Contract_Rate_End_Date >= <cfqueryparam cfsqltype="cf_sql_date" value="#visitDateParsed#">
				    )
				    <!--- #10543 / #10669: same Rev_Code, or nursing siblings G0299/G0300 when toggle on --->
				    <cfif sameRevCode AND Len(Trim(url.auth_rev_code)) GT 0>
				        AND (
				        	Rev_Code = <cfqueryparam cfsqltype="cf_sql_varchar" value="#Trim(url.auth_rev_code)#">
				        	<cfif isNursingSkill>
				        		OR HCPCS = <cfqueryparam cfsqltype="cf_sql_varchar" value="G0299">
				        		OR HCPCS = <cfqueryparam cfsqltype="cf_sql_varchar" value="G0300">
				        		OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="LPN">
				        		OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="LVN">
				        		OR Visit_Type = <cfqueryparam cfsqltype="cf_sql_varchar" value="LVN/LPN">
				        	</cfif>
				        )
				    <cfelseif sameRevCode AND isNursingSkill>
				        <!--- Toggle on but auth rev blank: still allow full nursing HCPCS set for payer --->
				        AND (
				        	HCPCS = <cfqueryparam cfsqltype="cf_sql_varchar" value="G0299">
				        	OR HCPCS = <cfqueryparam cfsqltype="cf_sql_varchar" value="G0300">
				        	OR Visit_Type IN (
				        		<cfqueryparam cfsqltype="cf_sql_varchar" value="SN">,
				        		<cfqueryparam cfsqltype="cf_sql_varchar" value="RN">,
				        		<cfqueryparam cfsqltype="cf_sql_varchar" value="LPN">,
				        		<cfqueryparam cfsqltype="cf_sql_varchar" value="LVN">,
				        		<cfqueryparam cfsqltype="cf_sql_varchar" value="LVN/LPN">,
				        		<cfqueryparam cfsqltype="cf_sql_varchar" value="Skilled Nursing">
				        	)
				        )
				    <cfelseif Len(Trim(url.auth_hcpcs)) GT 0>
				        AND HCPCS = <cfqueryparam cfsqltype="cf_sql_varchar" value="#Trim(url.auth_hcpcs)#">
				    </cfif>
		    	)
		    )
		    ORDER BY Visit_Type, HCPCS, Rev_Code
		</cfquery>

		<cfset result = ArrayNew(1)>
		<cfloop query="getrevenue">
			<cfset item = StructNew()>
			<cfset item.Rev_CodeID = getrevenue.Rev_CodeID>
			<cfset item.Visit_Type = Trim(getrevenue.Visit_Type)>
			<cfset item.Rev_Code = Trim(getrevenue.Rev_Code)>
			<cfset item.HCPCS = Trim(getrevenue.HCPCS)>
			<cfset item.Description = Trim(getrevenue.Description)>
			<cfset item.modifier = Trim(getrevenue.modifier)>
			<cfset item.Contract_Rate = getrevenue.Contract_Rate>
			<cfif IsDate(getrevenue.Contract_Rate_Effective_Date)>
				<cfset item.Contract_Rate_Effective_Date = DateFormat(getrevenue.Contract_Rate_Effective_Date, 'mm/dd/yyyy')>
			<cfelse>
				<cfset item.Contract_Rate_Effective_Date = "">
			</cfif>
			<cfif IsDate(getrevenue.Contract_Rate_End_Date)>
				<cfset item.Contract_Rate_End_Date = DateFormat(getrevenue.Contract_Rate_End_Date, 'mm/dd/yyyy')>
			<cfelse>
				<cfset item.Contract_Rate_End_Date = "">
			</cfif>
			<cfset ArrayAppend(result, item)>
		</cfloop>

		<cfcontent type="application/json" reset="true">
		<cfoutput>#SerializeJSON(result)#</cfoutput>
	<cfelse>
		<cfcontent type="application/json" reset="true">
		<cfoutput>[]</cfoutput>
	</cfif>

	<cfcatch type="any">
		<cfcontent type="application/json" reset="true">
		<cfoutput>{"error": "#JSStringFormat(cfcatch.message)#"}</cfoutput>
	</cfcatch>
</cftry>
