<!--- Sync pAssessments.F176 (M0090) to follow-up visit date when scheduling (e.g. replacement recert after missed visit).
	Required Request keys: syncFollowupF176_patientId, syncFollowupF176_visitDate, syncFollowupF176_visitType
	Optional: syncFollowupF176_scheduleAssmtId, syncFollowupF176_excludeScheduleId --->
<cfparam name="Request.syncFollowupF176_excludeScheduleId" default="0" />
<cfif NOT (isDefined("Request.syncFollowupF176_patientId") AND Val(Request.syncFollowupF176_patientId) GT 0
	AND isDefined("Request.syncFollowupF176_visitDate") AND IsDate(Request.syncFollowupF176_visitDate)
	AND isDefined("Request.syncFollowupF176_visitType") AND Len(Trim(Request.syncFollowupF176_visitType)) GT 0)>
	<cfexit />
</cfif>

<cfset syncPatientId = Val(Request.syncFollowupF176_patientId) />
<cfset syncVisitDate = Request.syncFollowupF176_visitDate />
<cfset syncVisitType = Trim(Request.syncFollowupF176_visitType) />
<cfset syncScheduleAssmtId = 0 />
<cfif isDefined("Request.syncFollowupF176_scheduleAssmtId") AND Val(Request.syncFollowupF176_scheduleAssmtId) GT 0>
	<cfset syncScheduleAssmtId = Val(Request.syncFollowupF176_scheduleAssmtId) />
</cfif>
<cfset syncExcludeScheduleId = Val(Request.syncFollowupF176_excludeScheduleId) />

<cfset syncF26 = "" />
<cfset syncF27 = "" />
<cfif syncVisitType EQ "1 - SOC - SN">
	<cfset syncF26 = "1 - Start of care - further visits planned" />
	<cfset syncF27 = "SN" />
<cfelseif syncVisitType EQ "1 - SOC - PT">
	<cfset syncF26 = "1 - Start of care - further visits planned - Physical Therapy" />
	<cfset syncF27 = "PT" />
<cfelseif syncVisitType EQ "1 - SOC - OT">
	<cfset syncF26 = "1 - Start of care - further visits planned - Occupational Therapy" />
	<cfset syncF27 = "OT" />
<cfelseif syncVisitType EQ "3 - ROC - SN" OR syncVisitType EQ "3 - ROC - PT">
	<cfset syncF26 = "3 - Resumption of care (after inpatient stay)" />
	<cfset syncF27 = ListLast(syncVisitType, " ") />
<cfelseif syncVisitType EQ "PT Eval">
	<cfset syncF26 = "PT Adult Evaluation" /><cfset syncF27 = "PT" />
<cfelseif syncVisitType EQ "OT Eval">
	<cfset syncF26 = "OT Adult Evaluation" /><cfset syncF27 = "OT" />
<cfelseif syncVisitType EQ "ST Eval">
	<cfset syncF26 = "ST Adult Evaluation" /><cfset syncF27 = "ST" />
<cfelseif syncVisitType EQ "SN Eval">
	<cfset syncF26 = "SN Adult Evaluation" /><cfset syncF27 = "SN" />
<cfelseif syncVisitType EQ "MSW Eval">
	<cfset syncF26 = "MSW Evaluation" /><cfset syncF27 = "MSW" />
<cfelseif syncVisitType EQ "PT FU Eval">
	<cfset syncF26 = "PT Followup" /><cfset syncF27 = "PT" />
<cfelseif syncVisitType EQ "OT FU Eval">
	<cfset syncF26 = "OT Followup" /><cfset syncF27 = "OT" />
<cfelseif syncVisitType EQ "ST FU Eval">
	<cfset syncF26 = "ST Followup" /><cfset syncF27 = "ST" />
<cfelseif syncVisitType EQ "MSW FU Eval">
	<cfset syncF26 = "MSW Followup" /><cfset syncF27 = "MSW" />
<cfelseif syncVisitType EQ "SN FU Eval">
	<cfset syncF26 = "SN Followup" /><cfset syncF27 = "SN" />
<cfelseif syncVisitType EQ "4 - Recertification">
	<cfset syncF26 = "4 - Recertification (follow-up) reassessment" /><cfset syncF27 = "SN" />
<cfelseif syncVisitType EQ "4 - Recertification PT">
	<cfset syncF26 = "4 - Recertification (follow-up) reassessment - PT" /><cfset syncF27 = "PT" />
<cfelseif syncVisitType EQ "4 - Recertification OT">
	<cfset syncF26 = "4 - Recertification (follow-up) reassessment - OT" /><cfset syncF27 = "OT" />
<cfelseif syncVisitType EQ "5 - Other follow-up">
	<cfset syncF26 = "5 - Other follow-up" /><cfset syncF27 = "SN" />
<cfelseif syncVisitType EQ "6 - Transfer no discharge">
	<cfset syncF26 = "6 - Transferred to an inpatient facility - patient not discharged from agency" /><cfset syncF27 = "SN" />
<cfelseif syncVisitType EQ "7 - Transfer discharged">
	<cfset syncF26 = "7 - Transferred to an inpatient facility - patient discharged from agency" /><cfset syncF27 = "SN" />
<cfelseif syncVisitType EQ "8 - Death">
	<cfset syncF26 = "8 - Death at home" /><cfset syncF27 = "SN" />
<cfelseif syncVisitType EQ "9 - Discharge from agency">
	<cfset syncF26 = "9 - Discharge from agency" /><cfset syncF27 = "SN" />
<cfelse>
	<cfset syncF26 = syncVisitType />
	<cfset syncF27 = "SN" />
</cfif>

<cfif Len(syncF26) EQ 0>
	<cfexit />
</cfif>

<cfset syncIsSOCVisit = (ListFindNoCase("1 - SOC - SN,1 - SOC - PT,1 - SOC - OT", syncVisitType) GT 0 OR Left(syncF26, 1) EQ "1") />
<cfif syncIsSOCVisit>
	<cfexit />
</cfif>

<cfset syncAdmitId = 0 />
<cfset syncLocId = 0 />
<cfif isDefined("session.AgencyId") AND IsNumeric(session.AgencyId)>
	<cfset syncLocId = Val(session.AgencyId) />
</cfif>
<cfif syncScheduleAssmtId GT 0>
	<cfquery name="syncGetAdmitFromAssmt" datasource="#Application.DataSrc#">
		SELECT Admit_ID, Loc_ID
		FROM #Request.prefix_db_agency#.pAssessments
		WHERE Assmt_ID = <cfqueryparam value="#syncScheduleAssmtId#" cfsqltype="cf_sql_integer">
		AND Status = 0
		LIMIT 1
	</cfquery>
	<cfif syncGetAdmitFromAssmt.recordcount GT 0>
		<cfset syncAdmitId = Val(syncGetAdmitFromAssmt.Admit_ID) />
		<cfif Val(syncGetAdmitFromAssmt.Loc_ID) GT 0>
			<cfset syncLocId = Val(syncGetAdmitFromAssmt.Loc_ID) />
		</cfif>
	</cfif>
</cfif>
<cfif syncAdmitId EQ 0>
	<cfquery name="syncGetLatestAdmit" datasource="#Application.DataSrc#">
		SELECT Admit_ID
		FROM #Request.prefix_db_agency#.pAdmit
		WHERE Patient_ID = <cfqueryparam value="#syncPatientId#" cfsqltype="cf_sql_integer">
		AND Status = 0 AND drafts = 0
		ORDER BY Admit_ID DESC
		LIMIT 1
	</cfquery>
	<cfif syncGetLatestAdmit.recordcount GT 0>
		<cfset syncAdmitId = Val(syncGetLatestAdmit.Admit_ID) />
	</cfif>
</cfif>
<cfif syncAdmitId EQ 0>
	<cfexit />
</cfif>

<cfset syncVisitDateSql = DateFormat(syncVisitDate, "yyyy-mm-dd") />
<cfset syncCertStart = syncVisitDateSql />
<cfset syncCertEnd = DateFormat(DateAdd("d", 59, syncVisitDate), "yyyy-mm-dd") />
<cfif Left(syncF26, 1) EQ "4">
	<cfquery name="syncGetPriorCertEnd" datasource="#Application.DataSrc#">
		SELECT F178
		FROM #Request.prefix_db_agency#.pAssessments
		WHERE Admit_ID = <cfqueryparam value="#syncAdmitId#" cfsqltype="cf_sql_integer">
		AND Patient_ID = <cfqueryparam value="#syncPatientId#" cfsqltype="cf_sql_integer">
		AND Status = 0 AND F178 IS NOT NULL AND Left(F26, 1) IN ('1', '4')
		ORDER BY F178 DESC
		LIMIT 1
	</cfquery>
	<cfif syncGetPriorCertEnd.recordcount GT 0 AND IsDate(syncGetPriorCertEnd.F178)>
		<cfset syncCertStart = DateFormat(DateAdd("d", 1, syncGetPriorCertEnd.F178), "yyyy-mm-dd") />
		<cfset syncCertEnd = DateFormat(DateAdd("d", 59, syncCertStart), "yyyy-mm-dd") />
	</cfif>
</cfif>

<cfquery name="syncGetAssmtForVisitDate" datasource="#Application.DataSrc#">
	SELECT Assmt_ID
	FROM #Request.prefix_db_agency#.pAssessments
	WHERE Patient_ID = <cfqueryparam value="#syncPatientId#" cfsqltype="cf_sql_integer">
	AND Admit_ID = <cfqueryparam value="#syncAdmitId#" cfsqltype="cf_sql_integer">
	AND F26 = <cfqueryparam value="#syncF26#" cfsqltype="cf_sql_varchar">
	AND F176 = <cfqueryparam value="#syncVisitDateSql#" cfsqltype="cf_sql_date">
	AND Status = 0
	ORDER BY AutoAssmt_ID DESC
	LIMIT 1
</cfquery>
<cfif syncGetAssmtForVisitDate.recordcount GT 0>
	<cfexit />
</cfif>

<!--- Discipline FU evals (PT/OT/…) may have one per 30-day period; do not steal the first when scheduling a second --->
<cfset syncIsDisciplineFollowupEval = (ListFindNoCase("PT Followup,OT Followup,ST Followup,MSW Followup,SN Followup", syncF26) GT 0) />

<cfset syncTargetAssmtId = 0 />

<!--- Missed FU replacement FIRST: schedule Assmt_ID often points at parent OASIS, so match eval by F26 + F176 = missed Visit_Date --->
<cfquery name="syncGetMissedFollowupAssmt" datasource="#Application.DataSrc#">
	SELECT pAssessments.Assmt_ID, pAssessments.F176, pAssessments.F25, pSchedules.Visit_Date AS Missed_Visit_Date
	FROM #Request.prefix_db_agency#.pSchedules
	INNER JOIN #Request.prefix_db_agency#.pAssessments
		ON pAssessments.Patient_ID = pSchedules.Patient_ID
		AND pAssessments.Admit_ID = <cfqueryparam value="#syncAdmitId#" cfsqltype="cf_sql_integer">
		AND pAssessments.Status = 0
		AND pAssessments.F26 = <cfqueryparam value="#syncF26#" cfsqltype="cf_sql_varchar">
		AND IFNULL(pAssessments.F25, 0) <> 1
		AND (
			pAssessments.Assmt_ID = pSchedules.Assmt_ID
			OR pAssessments.F176 = pSchedules.Visit_Date
		)
	WHERE pSchedules.Patient_ID = <cfqueryparam value="#syncPatientId#" cfsqltype="cf_sql_integer">
		AND pSchedules.Status = 0
		AND pSchedules.Followup_visit = 1
		AND IFNULL(pSchedules.Missed, 0) > 0
		AND pSchedules.Visit_Type = <cfqueryparam value="#syncVisitType#" cfsqltype="cf_sql_varchar">
		<cfif syncExcludeScheduleId GT 0>
			AND pSchedules.Schedule_ID <> <cfqueryparam value="#syncExcludeScheduleId#" cfsqltype="cf_sql_integer">
		</cfif>
	ORDER BY
		CASE WHEN pAssessments.Assmt_ID = pSchedules.Assmt_ID THEN 0 ELSE 1 END,
		CASE WHEN pAssessments.F176 = pSchedules.Visit_Date THEN 0 ELSE 1 END,
		pSchedules.Schedule_ID DESC,
		pAssessments.AutoAssmt_ID DESC
	LIMIT 1
</cfquery>
<cfif syncGetMissedFollowupAssmt.recordcount GT 0>
	<cfset syncTargetAssmtId = Val(syncGetMissedFollowupAssmt.Assmt_ID) />
	<cfquery name="syncUpdateMissedFollowupF176" datasource="#Application.DataSrc#">
		UPDATE #Request.prefix_db_agency#.pAssessments
		SET F176 = <cfqueryparam value="#syncVisitDateSql#" cfsqltype="cf_sql_date">
			<cfif Left(syncF26, 1) EQ "4">
				, F177 = <cfqueryparam value="#syncCertStart#" cfsqltype="cf_sql_date">
				, F178 = <cfqueryparam value="#syncCertEnd#" cfsqltype="cf_sql_date">
			</cfif>
			, Record_Mod_Date = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">
			, Record_Mod_By = <cfqueryparam value="#session.employeeid#" cfsqltype="cf_sql_integer">
		WHERE Assmt_ID = <cfqueryparam value="#syncTargetAssmtId#" cfsqltype="cf_sql_integer">
		AND Status = 0 AND IFNULL(F25, 0) <> 1
	</cfquery>
	<cfexit />
</cfif>

<cfquery name="syncGetIncompleteAssmt" datasource="#Application.DataSrc#">
	SELECT Assmt_ID, F176
	FROM #Request.prefix_db_agency#.pAssessments
	WHERE Patient_ID = <cfqueryparam value="#syncPatientId#" cfsqltype="cf_sql_integer">
	AND Admit_ID = <cfqueryparam value="#syncAdmitId#" cfsqltype="cf_sql_integer">
	AND F26 = <cfqueryparam value="#syncF26#" cfsqltype="cf_sql_varchar">
	AND Status = 0 AND IFNULL(F25, 0) <> 1
	ORDER BY AutoAssmt_ID DESC
	LIMIT 1
</cfquery>

<cfif syncGetIncompleteAssmt.recordcount GT 0>
	<cfset syncOldF176 = syncGetIncompleteAssmt.F176 />
	<cfset syncCanMoveF176 = true />
	<!--- Active (non-missed) FU visit already using this assessment or its M0090 date — keep it; create a new eval instead --->
	<cfquery name="syncBlockingSchedule" datasource="#Application.DataSrc#">
		SELECT Schedule_ID
		FROM #Request.prefix_db_agency#.pSchedules
		WHERE Patient_ID = <cfqueryparam value="#syncPatientId#" cfsqltype="cf_sql_integer">
		AND Status = 0 AND IFNULL(Missed, 0) = 0 AND Followup_visit = 1
		AND Visit_Type = <cfqueryparam value="#syncVisitType#" cfsqltype="cf_sql_varchar">
		AND (
			Assmt_ID = <cfqueryparam value="#Val(syncGetIncompleteAssmt.Assmt_ID)#" cfsqltype="cf_sql_integer">
			<cfif IsDate(syncOldF176)>
				OR Visit_Date = <cfqueryparam value="#DateFormat(syncOldF176, 'yyyy-mm-dd')#" cfsqltype="cf_sql_date">
			</cfif>
		)
		<cfif syncExcludeScheduleId GT 0>
			AND Schedule_ID <> <cfqueryparam value="#syncExcludeScheduleId#" cfsqltype="cf_sql_integer">
		</cfif>
		LIMIT 1
	</cfquery>
	<cfif syncBlockingSchedule.recordcount GT 0>
		<cfset syncCanMoveF176 = false />
	</cfif>
	<cfif syncCanMoveF176>
		<cfset syncTargetAssmtId = Val(syncGetIncompleteAssmt.Assmt_ID) />
		<cfquery name="syncUpdateF176" datasource="#Application.DataSrc#">
			UPDATE #Request.prefix_db_agency#.pAssessments
			SET F176 = <cfqueryparam value="#syncVisitDateSql#" cfsqltype="cf_sql_date">
				<cfif Left(syncF26, 1) EQ "4">
					, F177 = <cfqueryparam value="#syncCertStart#" cfsqltype="cf_sql_date">
					, F178 = <cfqueryparam value="#syncCertEnd#" cfsqltype="cf_sql_date">
				</cfif>
				, Record_Mod_Date = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">
				, Record_Mod_By = <cfqueryparam value="#session.employeeid#" cfsqltype="cf_sql_integer">
			WHERE Assmt_ID = <cfqueryparam value="#syncTargetAssmtId#" cfsqltype="cf_sql_integer">
			AND Status = 0 AND IFNULL(F25, 0) <> 1
		</cfquery>
	</cfif>
</cfif>

<!--- Fallback: schedule Assmt_ID may point directly at the recert OASIS / eval row --->
<cfif syncTargetAssmtId EQ 0 AND syncScheduleAssmtId GT 0>
	<cfquery name="syncGetScheduleLinkedAssmt" datasource="#Application.DataSrc#">
		SELECT Assmt_ID, F176, F25, F26
		FROM #Request.prefix_db_agency#.pAssessments
		WHERE Assmt_ID = <cfqueryparam value="#syncScheduleAssmtId#" cfsqltype="cf_sql_integer">
		AND Patient_ID = <cfqueryparam value="#syncPatientId#" cfsqltype="cf_sql_integer">
		AND Status = 0
		LIMIT 1
	</cfquery>
	<cfif syncGetScheduleLinkedAssmt.recordcount GT 0
		AND syncGetScheduleLinkedAssmt.F26 EQ syncF26
		AND Val(syncGetScheduleLinkedAssmt.F25) NEQ 1
		AND (NOT IsDate(syncGetScheduleLinkedAssmt.F176) OR DateFormat(syncGetScheduleLinkedAssmt.F176, "yyyy-mm-dd") NEQ syncVisitDateSql)>
		<cfquery name="syncBlockingLinkedSchedule" datasource="#Application.DataSrc#">
			SELECT Schedule_ID
			FROM #Request.prefix_db_agency#.pSchedules
			WHERE Patient_ID = <cfqueryparam value="#syncPatientId#" cfsqltype="cf_sql_integer">
			AND Status = 0 AND IFNULL(Missed, 0) = 0 AND Followup_visit = 1
			AND Visit_Type = <cfqueryparam value="#syncVisitType#" cfsqltype="cf_sql_varchar">
			AND Assmt_ID = <cfqueryparam value="#Val(syncGetScheduleLinkedAssmt.Assmt_ID)#" cfsqltype="cf_sql_integer">
			<cfif syncExcludeScheduleId GT 0>
				AND Schedule_ID <> <cfqueryparam value="#syncExcludeScheduleId#" cfsqltype="cf_sql_integer">
			</cfif>
			LIMIT 1
		</cfquery>
		<cfif syncBlockingLinkedSchedule.recordcount EQ 0>
			<cfset syncTargetAssmtId = Val(syncGetScheduleLinkedAssmt.Assmt_ID) />
			<cfquery name="syncUpdateLinkedF176" datasource="#Application.DataSrc#">
				UPDATE #Request.prefix_db_agency#.pAssessments
				SET F176 = <cfqueryparam value="#syncVisitDateSql#" cfsqltype="cf_sql_date">
					<cfif Left(syncF26, 1) EQ "4">
						, F177 = <cfqueryparam value="#syncCertStart#" cfsqltype="cf_sql_date">
						, F178 = <cfqueryparam value="#syncCertEnd#" cfsqltype="cf_sql_date">
					</cfif>
					, Record_Mod_Date = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">
					, Record_Mod_By = <cfqueryparam value="#session.employeeid#" cfsqltype="cf_sql_integer">
				WHERE Assmt_ID = <cfqueryparam value="#syncTargetAssmtId#" cfsqltype="cf_sql_integer">
				AND Status = 0 AND IFNULL(F25, 0) <> 1
			</cfquery>
		</cfif>
	</cfif>
</cfif>

<cfif syncTargetAssmtId GT 0>
	<cfexit />
</cfif>

<!--- Missed FU reuse handled above (before incomplete / insert paths) --->

<!--- Same F26 already exists for this admit.
     Recert/OASIS: still never create a duplicate.
     Discipline FU eval: if another active (non-missed) FU visit owns that assessment, INSERT a new one
     (e.g. 2nd 30-day PT Followup while 1st is still scheduled). --->
<cfquery name="syncExistingSameF26" datasource="#Application.DataSrc#">
	SELECT Assmt_ID, F25, F176
	FROM #Request.prefix_db_agency#.pAssessments
	WHERE Patient_ID = <cfqueryparam value="#syncPatientId#" cfsqltype="cf_sql_integer">
	AND Admit_ID = <cfqueryparam value="#syncAdmitId#" cfsqltype="cf_sql_integer">
	AND F26 = <cfqueryparam value="#syncF26#" cfsqltype="cf_sql_varchar">
	AND Status = 0
	ORDER BY CASE WHEN IFNULL(F25, 0) <> 1 THEN 0 ELSE 1 END, AutoAssmt_ID DESC
	LIMIT 1
</cfquery>
<cfif syncExistingSameF26.recordcount GT 0>
	<cfset syncExistingOwnedByActiveVisit = false />
	<cfif syncIsDisciplineFollowupEval>
		<cfquery name="syncExistingOwnedSchedule" datasource="#Application.DataSrc#">
			SELECT Schedule_ID
			FROM #Request.prefix_db_agency#.pSchedules
			WHERE Patient_ID = <cfqueryparam value="#syncPatientId#" cfsqltype="cf_sql_integer">
			AND Status = 0 AND IFNULL(Missed, 0) = 0 AND Followup_visit = 1
			AND Visit_Type = <cfqueryparam value="#syncVisitType#" cfsqltype="cf_sql_varchar">
			AND (
				Assmt_ID = <cfqueryparam value="#Val(syncExistingSameF26.Assmt_ID)#" cfsqltype="cf_sql_integer">
				<cfif IsDate(syncExistingSameF26.F176)>
					OR Visit_Date = <cfqueryparam value="#DateFormat(syncExistingSameF26.F176, 'yyyy-mm-dd')#" cfsqltype="cf_sql_date">
				</cfif>
			)
			<cfif syncExcludeScheduleId GT 0>
				AND Schedule_ID <> <cfqueryparam value="#syncExcludeScheduleId#" cfsqltype="cf_sql_integer">
			</cfif>
			LIMIT 1
		</cfquery>
		<cfif syncExistingOwnedSchedule.recordcount GT 0>
			<cfset syncExistingOwnedByActiveVisit = true />
		</cfif>
	</cfif>

	<!--- If a missed FU of this type exists, never insert a duplicate — move an unowned incomplete instead --->
	<cfset syncHasMissedFollowupVisit = false />
	<cfif syncIsDisciplineFollowupEval>
		<cfquery name="syncAnyMissedFollowupVisit" datasource="#Application.DataSrc#">
			SELECT Schedule_ID, Visit_Date
			FROM #Request.prefix_db_agency#.pSchedules
			WHERE Patient_ID = <cfqueryparam value="#syncPatientId#" cfsqltype="cf_sql_integer">
			AND Status = 0 AND Followup_visit = 1 AND IFNULL(Missed, 0) > 0
			AND Visit_Type = <cfqueryparam value="#syncVisitType#" cfsqltype="cf_sql_varchar">
			<cfif syncExcludeScheduleId GT 0>
				AND Schedule_ID <> <cfqueryparam value="#syncExcludeScheduleId#" cfsqltype="cf_sql_integer">
			</cfif>
			ORDER BY Schedule_ID DESC
			LIMIT 1
		</cfquery>
		<cfif syncAnyMissedFollowupVisit.recordcount GT 0>
			<cfset syncHasMissedFollowupVisit = true />
		</cfif>
	</cfif>

	<cfif syncIsDisciplineFollowupEval AND syncHasMissedFollowupVisit AND Val(syncExistingSameF26.F25) NEQ 1 AND NOT syncExistingOwnedByActiveVisit>
		<!--- Missed replacement with an available incomplete eval --->
		<cfset syncTargetAssmtId = Val(syncExistingSameF26.Assmt_ID) />
		<cfquery name="syncUpdateExistingForMissed" datasource="#Application.DataSrc#">
			UPDATE #Request.prefix_db_agency#.pAssessments
			SET F176 = <cfqueryparam value="#syncVisitDateSql#" cfsqltype="cf_sql_date">
				<cfif Left(syncF26, 1) EQ "4">
					, F177 = <cfqueryparam value="#syncCertStart#" cfsqltype="cf_sql_date">
					, F178 = <cfqueryparam value="#syncCertEnd#" cfsqltype="cf_sql_date">
				</cfif>
				, Record_Mod_Date = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">
				, Record_Mod_By = <cfqueryparam value="#session.employeeid#" cfsqltype="cf_sql_integer">
			WHERE Assmt_ID = <cfqueryparam value="#syncTargetAssmtId#" cfsqltype="cf_sql_integer">
			AND Status = 0 AND IFNULL(F25, 0) <> 1
		</cfquery>
		<cfexit />
	<cfelseif syncIsDisciplineFollowupEval AND (Val(syncExistingSameF26.F25) EQ 1 OR syncExistingOwnedByActiveVisit) AND NOT syncHasMissedFollowupVisit>
		<!--- Keep existing FU eval; fall through to INSERT a new assessment for this visit --->
	<cfelseif syncIsDisciplineFollowupEval AND syncHasMissedFollowupVisit AND syncExistingOwnedByActiveVisit>
		<!--- Missed replacement but latest incomplete is owned: find another incomplete FU not owned by an active visit --->
		<cfquery name="syncGetUnownedIncompleteAssmt" datasource="#Application.DataSrc#">
			SELECT a.Assmt_ID, a.F176
			FROM #Request.prefix_db_agency#.pAssessments a
			WHERE a.Patient_ID = <cfqueryparam value="#syncPatientId#" cfsqltype="cf_sql_integer">
			AND a.Admit_ID = <cfqueryparam value="#syncAdmitId#" cfsqltype="cf_sql_integer">
			AND a.F26 = <cfqueryparam value="#syncF26#" cfsqltype="cf_sql_varchar">
			AND a.Status = 0 AND IFNULL(a.F25, 0) <> 1
			AND NOT EXISTS (
				SELECT 1 FROM #Request.prefix_db_agency#.pSchedules s
				WHERE s.Patient_ID = a.Patient_ID
				AND s.Status = 0 AND IFNULL(s.Missed, 0) = 0 AND s.Followup_visit = 1
				AND s.Visit_Type = <cfqueryparam value="#syncVisitType#" cfsqltype="cf_sql_varchar">
				AND (
					s.Assmt_ID = a.Assmt_ID
					OR s.Visit_Date = a.F176
				)
				<cfif syncExcludeScheduleId GT 0>
					AND s.Schedule_ID <> <cfqueryparam value="#syncExcludeScheduleId#" cfsqltype="cf_sql_integer">
				</cfif>
			)
			ORDER BY a.AutoAssmt_ID DESC
			LIMIT 1
		</cfquery>
		<cfif syncGetUnownedIncompleteAssmt.recordcount GT 0>
			<cfset syncTargetAssmtId = Val(syncGetUnownedIncompleteAssmt.Assmt_ID) />
			<cfquery name="syncUpdateUnownedForMissed" datasource="#Application.DataSrc#">
				UPDATE #Request.prefix_db_agency#.pAssessments
				SET F176 = <cfqueryparam value="#syncVisitDateSql#" cfsqltype="cf_sql_date">
					<cfif Left(syncF26, 1) EQ "4">
						, F177 = <cfqueryparam value="#syncCertStart#" cfsqltype="cf_sql_date">
						, F178 = <cfqueryparam value="#syncCertEnd#" cfsqltype="cf_sql_date">
					</cfif>
					, Record_Mod_Date = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">
					, Record_Mod_By = <cfqueryparam value="#session.employeeid#" cfsqltype="cf_sql_integer">
				WHERE Assmt_ID = <cfqueryparam value="#syncTargetAssmtId#" cfsqltype="cf_sql_integer">
				AND Status = 0 AND IFNULL(F25, 0) <> 1
			</cfquery>
			<cfexit />
		</cfif>
		<!--- No reusable incomplete left; fall through to INSERT --->
	<cfelse>
		<cfif Val(syncExistingSameF26.F25) NEQ 1>
			<cfset syncTargetAssmtId = Val(syncExistingSameF26.Assmt_ID) />
			<cfquery name="syncUpdateExistingF176" datasource="#Application.DataSrc#">
				UPDATE #Request.prefix_db_agency#.pAssessments
				SET F176 = <cfqueryparam value="#syncVisitDateSql#" cfsqltype="cf_sql_date">
					<cfif Left(syncF26, 1) EQ "4">
						, F177 = <cfqueryparam value="#syncCertStart#" cfsqltype="cf_sql_date">
						, F178 = <cfqueryparam value="#syncCertEnd#" cfsqltype="cf_sql_date">
					</cfif>
					, Record_Mod_Date = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">
					, Record_Mod_By = <cfqueryparam value="#session.employeeid#" cfsqltype="cf_sql_integer">
				WHERE Assmt_ID = <cfqueryparam value="#syncTargetAssmtId#" cfsqltype="cf_sql_integer">
				AND Status = 0 AND IFNULL(F25, 0) <> 1
			</cfquery>
		</cfif>
		<cfexit />
	</cfif>
</cfif>

<cfquery name="syncGetNextAssmtId" datasource="#Application.DataSrc#">
	SELECT IFNULL(MAX(Assmt_ID), 0) + 1 AS Assmt_ID
	FROM #Request.prefix_db_agency#.pAssessments
</cfquery>
<cfset syncTargetAssmtId = Val(syncGetNextAssmtId.Assmt_ID) />
<cfif syncTargetAssmtId EQ 0>
	<cfset syncTargetAssmtId = 1 />
</cfif>

<cfquery name="syncInsertAssmt" datasource="#Application.DataSrc#">
	INSERT INTO #Request.prefix_db_agency#.pAssessments
	(
		Assmt_ID, Admit_ID, Patient_ID, Loc_ID, Status,
		F26, F27, F176, F177, F178,
		Record_Creation_Date, Record_Created_By, Record_Mod_Date, Record_Mod_By
	)
	VALUES
	(
		<cfqueryparam value="#syncTargetAssmtId#" cfsqltype="cf_sql_integer">,
		<cfqueryparam value="#syncAdmitId#" cfsqltype="cf_sql_integer">,
		<cfqueryparam value="#syncPatientId#" cfsqltype="cf_sql_integer">,
		<cfqueryparam value="#syncLocId#" cfsqltype="cf_sql_integer">,
		0,
		<cfqueryparam value="#syncF26#" cfsqltype="cf_sql_varchar">,
		<cfqueryparam value="#syncF27#" cfsqltype="cf_sql_varchar">,
		<cfqueryparam value="#syncVisitDateSql#" cfsqltype="cf_sql_date">,
		<cfqueryparam value="#syncCertStart#" cfsqltype="cf_sql_date">,
		<cfqueryparam value="#syncCertEnd#" cfsqltype="cf_sql_date">,
		<cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">,
		<cfqueryparam value="#session.employeeid#" cfsqltype="cf_sql_integer">,
		<cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">,
		<cfqueryparam value="#session.employeeid#" cfsqltype="cf_sql_integer">
	)
</cfquery>
