
		<cfparam name="form.assessmenttype_list" default="">

		<!-- Parse the assessmenttype_list into an array of structs [{id, type}] -->
		<cfset datasetArray = []>
		<cfif len(trim(form.assessmenttype_list))>
			<cfloop list="#form.assessmenttype_list#" index="pair" delimiters=",">
				<cfset parts = listToArray(pair, ":")>
				<cfif arrayLen(parts) EQ 2>
					<cfset arrayAppend(datasetArray, {id=parts[1], type=parts[2]})>
				</cfif>
			</cfloop>
		</cfif>
		<cfset suppressDatasetDownload = arrayLen(datasetArray) GT 0>
		<cfset generatedDatasetFiles = []>

		<!-- Loop through each selected dataset and process with the correct template -->
		<cfloop array="#datasetArray#" index="ds">
			<!-- Get assessment and related info for this ID -->
			<cfquery name="GetAssessment" datasource="#Application.DataSrc#">
				SELECT * FROM #Request.prefix_db_agency#.pAssessments 
					LEFT OUTER JOIN #Request.prefix_db_agency#.pAdmit ON pAssessments.Admit_ID = pAdmit.Admit_ID
					LEFT OUTER JOIN #Request.prefix_db_agency#.pPatients ON pAssessments.Patient_ID = pPatients.Patient_ID
				WHERE pAssessments.AutoAssmt_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#ds.id#">
					AND pAssessments.status = <cfqueryparam cfsqltype="cf_sql_integer" value="0">
					AND pAdmit.status = 0 AND pPatients.status IN (0,1,4)
				GROUP BY pAssessments.Assmt_ID
				ORDER BY pAssessments.F176 DESC
			</cfquery>

			<cfif GetAssessment.RecordCount>
				<!-- Mark as transmitted -->
				<cfquery name="updateasssements" datasource="#Application.DataSrc#">
					UPDATE #Request.prefix_db_agency#.pAssessments SET
						F197 = <cfqueryparam value="#DateFormat(now(),'yyyy-mm-dd')#" cfsqltype="cf_sql_date">
					WHERE Assmt_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#GetAssessment.Assmt_ID#">
				</cfquery>

				<!-- Reset payer flags for this dataset iteration -->
				<cfset M0150_CPAY_NONE = 0>
				<cfset M0150_CPAY_MCARE_FFS = 0>
				<cfset M0150_CPAY_MCARE_HMO = 0>
				<cfset M0150_CPAY_MCAID_FFS = 0>
				<cfset M0150_CPAY_MCAID_HMO = 0>
				<cfset M0150_CPAY_WRKCOMP = 0>
				<cfset M0150_CPAY_TITLEPGMS = 0>
				<cfset M0150_CPAY_OTH_GOVT = 0>
				<cfset M0150_CPAY_PRIV_INS = 0>
				<cfset M0150_CPAY_PRIV_HMO = 0>
				<cfset M0150_CPAY_SELFPAY = 0>
				<cfset M0150_CPAY_OTHER = 0>
				<cfset M0150_CPAY_UK = 0>

				<cfquery name="getproblem" datasource="#Application.DataSrc#">
					SELECT pProblem.*, vetted_190924.ICD AS ICD
					FROM #Request.prefix_db_agency#.pProblem
					LEFT OUTER JOIN #Request.prefix_db_lookup#.vetted_190924 ON vetted_190924.Diagnosis = pProblem.Description
					WHERE pProblem.Assmt_ID = <cfqueryparam value="#GetAssessment.Assmt_ID#" cfsqltype="CF_SQL_INTEGER">
						AND pProblem.status = <cfqueryparam value="0" cfsqltype="CF_SQL_INTEGER">
						AND M0_No like 'M102%'
						AND Dx_Order IN (1,2,3,4,5,6)
					ORDER BY RIGHT(M0_No, 1) ASC
					LIMIT 0,6
				</cfquery>

				<!-- Query payers for this patient -->
				<cfquery  name="GetPayers" datasource="#Application.DataSrc#">
					SELECT pPtPayer.Sub_HIC,pPayer.M0150, pPayer.Output as POUT FROM #Request.prefix_db_agency#.pPtPayer 
					JOIN #Request.prefix_db_agency#.pPayer ON pPayer.Pay_ID = pPtPayer.Payer_ID
					WHERE pPtPayer.Patient_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#GetAssessment.Patient_ID#">   
					AND pPtPayer.status =  <cfqueryparam cfsqltype="cf_sql_integer" value="0"> 
					AND   Left(pPayer.M0150,1) IN ('1','2','3','4')
				</cfquery>

				<!-- Defensive: If GetPayers is empty, add a blank row so dataset templates still have a query context -->
				<cfif GetPayers.RecordCount EQ 0>
					<cfset GetPayers = QueryNew("Sub_HIC,M0150,POUT", "VarChar,VarChar,VarChar")>
					<cfset QueryAddRow(GetPayers, 1)>
					<cfset QuerySetCell(GetPayers, "Sub_HIC", "", 1)>
					<cfset QuerySetCell(GetPayers, "M0150", "", 1)>
					<cfset QuerySetCell(GetPayers, "POUT", "", 1)>
				</cfif>

				<!-- Query physician for this assessment -->
				<cfset renderPhysID = 0>
				<cfif structKeyExists(GetAssessment, "Render_Phys_ID")>
					<cfset renderPhysID = val(GetAssessment.Render_Phys_ID)>
				</cfif>
				<cfquery  name="GetPhy" datasource="#Application.DataSrc#">
					SELECT * FROM #Request.prefix_db_lookup#.pPhysicians 
					WHERE Phys_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#renderPhysID#"> 
					AND status =  <cfqueryparam cfsqltype="cf_sql_integer" value="0"> 
				</cfquery>

				<!-- Defensive: If GetPhy is empty, set default values to avoid undefined errors -->
				<cfif NOT GetPhy.RecordCount>
					<cfset GetPhy = structNew()>
					<cfset GetPhy.PHYS_NPI = "">
					<cfset GetPhy.Phys_ID = "">
					<cfset GetPhy.Phys_Name = "">
					<!-- Add other fields as needed for your templates -->
				</cfif>

				<cfquery name="medicarepayer" dbtype="query">
					SELECT M0150, Sub_HIC FROM GetPayers
					WHERE M0150 like '1. Medicare (traditional%'
				</cfquery>
				<cfset M0063 = "^" />
				<cfif medicarepayer.RecordCount GT 0>
					<cfset M0063 = medicarepayer.Sub_HIC>
				</cfif>

				<cfquery name="medicaidpayer" dbtype="query">
					SELECT POUT, Sub_HIC FROM GetPayers
					WHERE M0150 like '%Medicaid%'
				</cfquery>
				<cfset M0065 = "^" />
				<cfif medicaidpayer.RecordCount GT 0>
					<cfset M0065 = medicaidpayer.Sub_HIC>
				</cfif>

				<cfset ICD1 = "^"><cfset Severity1 = "^">
				<cfset ICD2 = "^"><cfset Severity2 = "^">
				<cfset ICD3 = "^"><cfset Severity3 = "^">
				<cfset ICD4 = "^"><cfset Severity4 = "^">
				<cfset ICD5 = "^"><cfset Severity5 = "^">
				<cfset ICD6 = "^"><cfset Severity6 = "^">

				<cfset i = 1>
				<cfoutput query="getproblem">
					<cfset finalicd = getproblem.ICD>
					<cfif NOT len(finalicd)>
						<cfset finalicd = "^">
					</cfif>
					<cfloop from="#len(finalicd)#" to="7" index="icds">
						<cfset finalicd = finalicd & '^'>
					</cfloop>
					<cfset "ICD#i#" = finalicd>
					<cfset "Severity#i#" = "0" & getproblem.Severity>
					<cfset i = i + 1>
				</cfoutput>

				<cfset Interpreter = GetAssessment.Interpreter>
				<cfset Pt_Race = GetAssessment.Pt_Race>
				<cfset A1010A = 0><cfset A1010B = 0><cfset A1010C = 0><cfset A1010D = 0>
				<cfset A1010E = 0><cfset A1010F = 0><cfset A1010G = 0><cfset A1010H = 0>
				<cfset A1010I = 0><cfset A1010J = 0><cfset A1010K = 0><cfset A1010L = 0>
				<cfset A1010M = 0><cfset A1010N = 0><cfset A1010X = 0><cfset A1010Y = 0>
				<cfset A1010Z = 0>
				<cfset A1010 = "0">
				<cfif Pt_Race contains 'A. White'><cfset A1010A = 1><cfset A1010 = A1010 + 1></cfif>
				<cfif Pt_Race contains 'B. Black or African American'><cfset A1010B = 1><cfset A1010 = A1010 + 1></cfif>
				<cfif Pt_Race contains 'C. American Indian or Alaska Native'><cfset A1010C = 1><cfset A1010 = A1010 + 1></cfif>
				<cfif Pt_Race contains 'D. Asian Indian'><cfset A1010D = 1><cfset A1010 = A1010 + 1></cfif>
				<cfif Pt_Race contains 'E. Chinese'><cfset A1010E = 1><cfset A1010 = A1010 + 1></cfif>
				<cfif Pt_Race contains 'F. Filipino'><cfset A1010F = 1><cfset A1010 = A1010 + 1></cfif>
				<cfif Pt_Race contains 'G. Japanese'><cfset A1010G = 1><cfset A1010 = A1010 + 1></cfif>
				<cfif Pt_Race contains 'H. Korean'><cfset A1010H = 1><cfset A1010 = A1010 + 1></cfif>
				<cfif Pt_Race contains 'I. Vietnamese'><cfset A1010I = 1><cfset A1010 = A1010 + 1></cfif>
				<cfif Pt_Race contains 'J. Other Asian'><cfset A1010J = 1><cfset A1010 = A1010 + 1></cfif>
				<cfif Pt_Race contains 'K. Native Hawaiian'><cfset A1010K = 1><cfset A1010 = A1010 + 1></cfif>
				<cfif Pt_Race contains 'L. Guamanian or Chamorro'><cfset A1010L = 1><cfset A1010 = A1010 + 1></cfif>
				<cfif Pt_Race contains 'M. Samoan'><cfset A1010M = 1><cfset A1010 = A1010 + 1></cfif>
				<cfif Pt_Race contains 'N. Other Pacific Islander'><cfset A1010N = 1><cfset A1010 = A1010 + 1></cfif>
				<cfif A1010 EQ 0>
					<cfif Pt_Race contains 'X. Patient unable to respond'><cfset A1010X = 1></cfif>
				</cfif>
				<cfif A1010 EQ 0 AND A1010X EQ 0>
					<cfif Pt_Race contains 'Y. Patient declines to respond'>
						<cfset A1010Y = 1>
					<cfelse>
						<cfset A1010Z = 1>
					</cfif>
				</cfif>

				<cfset Pt_language = GetAssessment.Pt_language>
				<cfset Living = GetAssessment.M1100_PTNT_LVG_STUTN>
				<cfset A1005 = "">
				<cfset A1005A = 0><cfset A1005B = 0><cfset A1005C = 0><cfset A1005D = 0>
				<cfset A1005E = 0><cfset A1005X = 0><cfset A1005Y = 0>

				<cfquery name="getprimary" dbtype="query">
					SELECT * FROM getproblem
				</cfquery>

				<!-- Template selection logic -->
				<cfset datasettype = ds.type>
				<cfif datasettype EQ '1'>
					<cfinclude template="SOC_dataset1.cfm" />
				<cfelseif datasettype EQ '3'>
					<cfinclude template="resumption_dataset1.cfm" />
				<cfelseif datasettype EQ '4'>
					<cfif trim(GetAssessment.F26) EQ '4 - Resumption/Recertification'>
						<cfinclude template="resumption_dataset.cfm" />
					<cfelse>
						<cfinclude template="recertification_dataset.cfm" />
					</cfif>
				<cfelseif datasettype EQ '6'>
					<cfinclude template="6_transfer_dataset.cfm" />
				<cfelseif datasettype EQ '7'>
					<cfinclude template="7_transfer_dataset.cfm" />
				<cfelseif datasettype EQ '8'>
					<cfinclude template="death_dataset.cfm" />
				<cfelseif datasettype EQ '9'>
					<cfinclude template="discharge_dataset.cfm" />
				</cfif>

				<cfif suppressDatasetDownload AND structKeyExists(variables, "filenames") AND len(trim(filenames))>
					<cfset arrayAppend(generatedDatasetFiles, "/var/www/xmlfilecreation/" & filenames)>
				</cfif>
			</cfif>
		</cfloop>

		<cfif suppressDatasetDownload AND arrayLen(generatedDatasetFiles) GT 0>
			<cfset zipFileName = "datasets_" & DateFormat(now(), "yyyymmdd") & TimeFormat(now(), "HHmmss") & ".zip">
			<cfset zipFilePath = "/var/www/xmlfilecreation/" & zipFileName>
			<cfzip action="zip" file="#zipFilePath#" overwrite="yes">
				<cfloop array="#generatedDatasetFiles#" index="generatedFilePath">
					<cfif fileExists(generatedFilePath)>
						<cfzipparam source="#generatedFilePath#">
					</cfif>
				</cfloop>
			</cfzip>
			<cfheader name="content-disposition" value="attachment; filename=#zipFileName#">
			<cfcontent type="application/zip" file="#zipFilePath#" deletefile="false">
		</cfif>




