<!--- Shared data for progress notes HTML download (web or mobile API). Read-only; no progress note mutations. --->
<cfparam name="url.api_pgnotes_only" default="">
<cfparam name="url.SID" default="0">
<cfparam name="url.AID" default="0">
<cfparam name="url.ID" default="0">
<cfparam name="url.download_label" default="">

<!--- Build table.column lists (no SELECT *) so joined queries never duplicate AMT_PAID / Skill / etc. --->
<cffunction name="pnBuildQualifiedColumnList" access="public" returntype="string" output="false">
  <cfargument name="schemaName" type="string" required="true" />
  <cfargument name="tableName" type="string" required="true" />
  <cfargument name="tableAlias" type="string" required="true" />
  <cfset var colQuery = "" />
  <cfset var parts = "" />
  <cfset var seen = {} />
  <cfset var colKey = "" />
  <cfquery name="colQuery" datasource="#Application.DataSrc#">
    SELECT COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = <cfqueryparam value="#arguments.schemaName#" cfsqltype="cf_sql_varchar">
      AND TABLE_NAME = <cfqueryparam value="#arguments.tableName#" cfsqltype="cf_sql_varchar">
    ORDER BY ORDINAL_POSITION
  </cfquery>
  <cfloop query="colQuery">
    <cfset colKey = uCase(trim(colQuery.COLUMN_NAME)) />
    <cfif NOT len(colKey) OR structKeyExists(seen, colKey)>
      <cfcontinue />
    </cfif>
    <cfset seen[colKey] = true />
    <cfset parts = listAppend(parts, arguments.tableAlias & "." & colQuery.COLUMN_NAME) />
  </cfloop>
  <cfreturn parts />
</cffunction>

<!--- Drop columns that would duplicate when joining another table with the same column name --->
<cffunction name="pnFilterQualifiedColumnList" access="public" returntype="string" output="false">
  <cfargument name="qualifiedList" type="string" required="true" />
  <cfargument name="excludeColumns" type="string" required="false" default="" />
  <cfset var out = "" />
  <cfset var col = "" />
  <cfset var baseName = "" />
  <cfset var colKey = "" />
  <cfset var seen = {} />
  <cfset var excludeUpper = uCase(arguments.excludeColumns) />
  <cfloop list="#arguments.qualifiedList#" index="col">
    <cfset col = trim(col) />
    <cfif NOT len(col)>
      <cfcontinue />
    </cfif>
    <cfset baseName = listLast(col, ".") />
    <cfset colKey = uCase(baseName) />
    <cfif len(arguments.excludeColumns) AND listFindNoCase(excludeUpper, colKey)>
      <cfcontinue />
    </cfif>
    <cfif structKeyExists(seen, colKey)>
      <cfcontinue />
    </cfif>
    <cfset seen[colKey] = true />
    <cfset out = listAppend(out, col) />
  </cfloop>
  <cfreturn out />
</cffunction>

<!--- Remove qualified columns whose base name matches (case-insensitive) --->
<cffunction name="pnRemoveColumnsByBaseNames" access="public" returntype="string" output="false">
  <cfargument name="qualifiedList" type="string" required="true" />
  <cfargument name="baseNames" type="string" required="true" />
  <cfset var out = "" />
  <cfset var col = "" />
  <cfset var baseName = "" />
  <cfset var excludeUpper = uCase(arguments.baseNames) />
  <cfloop list="#arguments.qualifiedList#" index="col">
    <cfset col = trim(col) />
    <cfif NOT len(col)>
      <cfcontinue />
    </cfif>
    <cfset baseName = uCase(listLast(col, ".")) />
    <cfif listFindNoCase(excludeUpper, baseName)>
      <cfcontinue />
    </cfif>
    <cfset out = listAppend(out, col) />
  </cfloop>
  <cfreturn out />
</cffunction>

<!--- Visit progress rows: one row per Progress_ID (avoids pPathway/pCareplan join duplicates) --->
<cffunction name="pnQueryVisitProgressByType" access="public" returntype="void" output="false">
  <cfargument name="queryName" type="string" required="true" />
  <cfargument name="progressTypeList" type="string" required="true" />
  <cfargument name="progressColumnList" type="string" required="true" />
  <cfargument name="assmtId" type="numeric" required="true" />
  <cfargument name="scheduleId" type="numeric" required="true" />
  <cfargument name="skill" type="string" required="true" />
  <cfargument name="agencySchema" type="string" required="true" />
  <cfargument name="lookupSchema" type="string" required="true" />
  <cfargument name="datasource" type="string" required="true" />
  <cfargument name="orderByClause" type="string" required="true" />

  <cfquery name="#arguments.queryName#" datasource="#arguments.datasource#">
    SELECT #arguments.progressColumnList#,
           pProgress.Assmt_ID AS pn_assmt_id,
           MIN(pPathway.Header) AS path_header,
           MIN(pPathway.Header_No) AS path_header_no,
           MIN(pPathway.Order_ID) AS path_order_id,
           MIN(pCareplan.Date_Resolve) AS cp_date_resolve,
           MIN(pCareplan.Date_Target) AS cp_date_target,
           MIN(pCareplan.Notes) AS pnotes
    FROM #arguments.agencySchema#.pProgress
    INNER JOIN #arguments.agencySchema#.pSchedules
      ON pProgress.Schedule_ID = pSchedules.Schedule_ID
     AND pSchedules.status = 0
     AND pSchedules.Skill = <cfqueryparam value="#arguments.skill#" cfsqltype="cf_sql_varchar">
    LEFT OUTER JOIN #arguments.lookupSchema#.pPathway
      ON pPathway.Item_ID = pProgress.Item_ID AND pPathway.Type = pProgress.Type
    LEFT OUTER JOIN #arguments.agencySchema#.pCareplan
      ON pCareplan.Careplan_ID = pProgress.Careplan_ID
     AND pCareplan.Assmt_ID = pProgress.Assmt_ID
     AND (pCareplan.Skill = <cfqueryparam value="#arguments.skill#" cfsqltype="cf_sql_varchar">
          OR (<cfqueryparam value="#arguments.skill#" cfsqltype="cf_sql_varchar"> = 'PTA' AND pCareplan.Skill = 'PT'))
     AND pCareplan.Status = 0
    WHERE pProgress.Assmt_ID = <cfqueryparam value="#arguments.assmtId#" cfsqltype="CF_SQL_INTEGER">
      AND pProgress.Schedule_ID = <cfqueryparam value="#arguments.scheduleId#" cfsqltype="CF_SQL_INTEGER">
      AND pProgress.Status = <cfqueryparam value="0" cfsqltype="CF_SQL_INTEGER">
      AND trim(pProgress.Description) != ''
      AND pProgress.Type IN (<cfqueryparam value="#arguments.progressTypeList#" cfsqltype="cf_sql_varchar" list="true">)
    GROUP BY pProgress.Progress_ID
    ORDER BY #arguments.orderByClause#
  </cfquery>
</cffunction>

<cfif trim(url.api_pgnotes_only) EQ "1">
  <cfset URL.SID = val(url.SID) />
  <cfset URL.AID = val(url.AID) />
  <cfset URL.ID = val(url.ID) />
  <cfif NOT isDefined("request.pat")>
    <cfset request.pat = CreateObject("component", "components.general.patients").init() />
  </cfif>
  <cfset pnProgressSelectList = pnBuildQualifiedColumnList(Request.prefix_db_agency, "pProgress", "pProgress") />
  <cfquery name="GetSched" datasource="#Application.DataSrc#">
    SELECT pSchedules.Schedule_ID,
           pSchedules.Assmt_ID AS sched_assmt_id,
           pSchedules.Patient_ID,
           pSchedules.Emp_ID,
           pSchedules.Skill,
           pSchedules.Visit_Date,
           pSchedules.Status,
           pPatients.Pt_First,
           pPatients.Pt_Last,
           pPatients.Pt_Middle,
           (
             SELECT pAssessments.F310
             FROM #Request.prefix_db_agency#.pAssessments pAssessments
             WHERE pAssessments.Assmt_ID = pSchedules.Assmt_ID
               AND pAssessments.Patient_ID = pSchedules.Patient_ID
               AND pAssessments.Status = <cfqueryparam cfsqltype="cf_sql_integer" value="0">
             LIMIT 1
           ) AS vital_omit
    FROM #Request.prefix_db_agency#.pSchedules pSchedules
    INNER JOIN #Request.prefix_db_agency#.pPatients pPatients
      ON pPatients.Patient_ID = pSchedules.Patient_ID
     AND pPatients.Status IN (0, 1, 4)
    WHERE pSchedules.Schedule_ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#URL.SID#">
      AND pSchedules.Status = 0
    LIMIT 1
  </cfquery>
  <cfif GetSched.recordcount EQ 0>
    <cfthrow type="progressnotes.invalidSchedule" message="Schedule not found" />
  </cfif>
  <cfif URL.AID LTE 0>
    <cfset URL.AID = val(GetSched.sched_assmt_id) />
  </cfif>
  <cfif URL.ID LTE 0>
    <cfset URL.ID = val(GetSched.Patient_ID) />
  </cfif>
  <cfset Getpat = queryNew("") />
  <cfset _patColSeen = {} />
  <cfloop list="#GetSched.columnList#" index="_col">
    <cfset _patColKey = uCase(trim(_col)) />
    <cfif len(_patColKey) AND NOT structKeyExists(_patColSeen, _patColKey)>
      <cfset _patColSeen[_patColKey] = true />
      <cfset queryAddColumn(Getpat, _col, []) />
    </cfif>
  </cfloop>
  <cfset queryAddRow(Getpat) />
  <cfloop list="#Getpat.columnList#" index="_col">
    <cfset querySetCell(Getpat, _col, GetSched[_col][1]) />
  </cfloop>
</cfif>

<cfif URL.SID LTE 0 OR URL.AID LTE 0>
  <cfthrow type="progressnotes.missingContext" message="Schedule_ID and Assmt_ID are required" />
</cfif>

<cfset skilltype = GetSched.Skill />
<cfset careplan_skill = (skilltype EQ "PTA") ? "PT" : skilltype />
<cfif NOT isDefined("pnProgressSelectList") AND isDefined("Request.prefix_db_agency") AND len(trim(Request.prefix_db_agency))>
  <cfset pnProgressSelectList = pnBuildQualifiedColumnList(Request.prefix_db_agency, "pProgress", "pProgress") />
</cfif>
<cfset pnProgressNoAssmt = pnRemoveColumnsByBaseNames(pnProgressSelectList, "ASSMT_ID") />
<cfset pnProgressNoAssmt = pnFilterQualifiedColumnList(pnProgressNoAssmt, "ASSMT_ID") />
<cfset pnPgNoAssmt = replace(pnProgressNoAssmt, "pProgress.", "pg.", "all") />
<cfset pnPgNoAssmt = pnRemoveColumnsByBaseNames(pnPgNoAssmt, "ASSMT_ID,PN_ASSMT_ID") />
<cfif NOT len(trim(pnProgressSelectList))>
  <cfthrow type="progressnotes.schema" message="Could not load pProgress columns for agency schema #Request.prefix_db_agency#" />
</cfif>

<!--- Meds: explicit columns only (medslist() uses SELECT * with joins and can duplicate column names) --->
<cfquery name="GetMd" datasource="#Application.DataSrc#">
  SELECT pPtmeds.Drug_Name,
         pPtmeds.Dose,
         pPtmeds.Route,
         pPtmeds.Freq AS Frequency,
         pPtmeds.status
  FROM #Request.prefix_db_agency#.pPtmeds
  WHERE pPtmeds.Patient_ID = <cfqueryparam value="#URL.ID#" cfsqltype="cf_sql_integer">
    AND pPtmeds.status = <cfqueryparam value="0" cfsqltype="cf_sql_integer">
  ORDER BY pPtmeds.Drug_Name ASC
</cfquery>

<!--- One row per Progress_ID (pPathway join can multiply rows without GROUP BY) --->
<cfquery name="getpgnotes" datasource="#Application.DataSrc#">
  SELECT MIN(pCareplan.Date_Resolve) AS cp_date_resolve,
         #pnPgNoAssmt#,
         MIN(pPathway.Pathway_ID) AS pathway_pathway_id,
         MIN(pPathway.Header) AS path_header,
         MIN(pPathway.Header_No) AS path_header_no,
         MIN(pPathway.Order_ID) AS path_order_id,
         MIN(pPathway.Type_Order) AS path_type_order,
         MIN(pPathway.Param) AS path_param,
         MIN(pPathway.Approved) AS pathway_approved,
         MIN(pPathway.Agency_ID) AS pathway_agency_id,
         MIN(pPathway.Patient_ID) AS pathway_patient_id,
         MIN(pPathway.Description) AS pathway_description,
         MIN(pPathway.Type) AS pathway_type,
         MIN(pPathway.Item_ID) AS pathway_item_id,
         MIN(pPathway.Value) AS pathway_value,
         MIN(IFNULL(pPathway.Value, 0)) AS measurevalue,
         MIN(pCareplan.Param_Lo) AS cp_param_lo,
         MIN(pCareplan.Param_Hi) AS cp_param_hi,
         MIN(pCareplan.Param_other) AS cp_param_other,
         MIN(pCareplan.Date_Target) AS cp_date_target,
         MIN(pCareplan.AutoCareplan_ID) AS cp_autocareplan_id,
         MIN(pCareplan.Skill) AS cp_skill,
         MIN(pCareplan.Notes) AS pnotes,
         MIN(pCareplan.Goal_ID) AS cp_goal_id,
         MAX(pg.schedule_visit_date) AS schedule_visit_date,
         MAX(pg.pn_assmt_id) AS pn_assmt_id
  FROM (
    SELECT #pnProgressNoAssmt#,
           pProgress.Assmt_ID AS pn_assmt_id,
           pSchedules.Visit_Date AS schedule_visit_date
    FROM #Request.prefix_db_agency#.pProgress
    INNER JOIN #Request.prefix_db_agency#.pSchedules
      ON pProgress.Schedule_ID = pSchedules.Schedule_ID
     AND pSchedules.status = 0
     AND pSchedules.Skill = <cfqueryparam value="#skilltype#" cfsqltype="cf_sql_varchar">
    WHERE pProgress.Assmt_ID = <cfqueryparam value="#URL.AID#" cfsqltype="CF_SQL_INTEGER">
      AND pProgress.Schedule_ID = <cfqueryparam value="#URL.SID#" cfsqltype="CF_SQL_INTEGER">
      AND pProgress.Status = <cfqueryparam value="0" cfsqltype="CF_SQL_INTEGER">
      AND trim(pProgress.Description) != ''
      AND pProgress.Type NOT IN (<cfqueryparam value="patient_complaint" cfsqltype="cf_sql_varchar">, <cfqueryparam value="patient_goal" cfsqltype="cf_sql_varchar">)
  ) pg
  LEFT OUTER JOIN #Request.prefix_db_lookup#.pPathway
    ON pPathway.Item_ID = pg.Item_ID AND pPathway.Type = pg.Type
  LEFT OUTER JOIN #Request.prefix_db_agency#.pCareplan
    ON pCareplan.Careplan_ID = pg.Careplan_ID AND pCareplan.Assmt_ID = pg.pn_assmt_id
   AND (pCareplan.Skill = <cfqueryparam value="#skilltype#" cfsqltype="cf_sql_varchar"> OR (<cfqueryparam value="#skilltype#" cfsqltype="cf_sql_varchar"> = 'PTA' AND pCareplan.Skill = 'PT'))
   AND pCareplan.Status = 0
  GROUP BY pg.Progress_ID
  ORDER BY MIN(pPathway.Header_No), MIN(pPathway.Order_ID), pg.Progress_ID ASC
</cfquery>

<cfquery name="getptcomplaint" datasource="#Application.DataSrc#">
  SELECT #pnProgressNoAssmt#,
         pProgress.Assmt_ID AS pn_assmt_id
  FROM #Request.prefix_db_agency#.pProgress
  WHERE pProgress.Assmt_ID = <cfqueryparam value="#URL.AID#" cfsqltype="CF_SQL_INTEGER">
    AND pProgress.Schedule_ID = <cfqueryparam value="#URL.SID#" cfsqltype="CF_SQL_INTEGER">
    AND pProgress.Status = <cfqueryparam value="0" cfsqltype="CF_SQL_INTEGER">
    AND pProgress.Type = <cfqueryparam value="patient_complaint" cfsqltype="cf_sql_varchar">
  GROUP BY pProgress.Progress_ID
</cfquery>

<cfquery name="getwoundsvitals" datasource="#Application.DataSrc#">
  SELECT #pnPgNoAssmt#,
         MAX(pg.pn_assmt_id) AS pn_assmt_id,
         MIN(pWoundsVitals.Param_Lo) AS wound_param_lo,
         MIN(pWoundsVitals.Param_Hi) AS wound_param_hi,
         MIN(pWoundsVitals.Pathway_ID) AS wound_pathway_id,
         MIN(pWoundsVitals.ID) AS woundsid
  FROM (
    SELECT #pnProgressNoAssmt#,
           pProgress.Assmt_ID AS pn_assmt_id
    FROM #Request.prefix_db_agency#.pProgress
    WHERE pProgress.Assmt_ID = <cfqueryparam value="#URL.AID#" cfsqltype="CF_SQL_INTEGER">
      AND pProgress.Schedule_ID = <cfqueryparam value="#URL.SID#" cfsqltype="CF_SQL_INTEGER">
      AND pProgress.Status = 0
  ) pg
  INNER JOIN #Request.prefix_db_agency#.pWoundsVitals
    ON pWoundsVitals.ID = pg.Careplan_ID AND pWoundsVitals.Status = 0
  GROUP BY pg.Progress_ID
  ORDER BY MIN(pg.Item_ID) ASC
</cfquery>

<cfquery name="getvitals" dbtype="query">
  SELECT * FROM getwoundsvitals WHERE Type = 'vital' ORDER BY Item_ID ASC
</cfquery>

<cfquery name="getwunds" datasource="#Application.DataSrc#">
  SELECT *
  FROM #Request.prefix_db_agency#.pWoundsVitals
  WHERE Assmt_ID = <cfqueryparam value="#URL.AID#" cfsqltype="CF_SQL_INTEGER">
    AND Status = 0
  ORDER BY Item_ID ASC
</cfquery>

<cfquery name="getwoundsonly" dbtype="query">
  SELECT * FROM getwunds WHERE VitalOrWound = 'wound' ORDER BY Item_ID ASC
</cfquery>

<cfset _pnLookup = (isDefined("Request.prefix_db_lookup") AND len(trim(Request.prefix_db_lookup))) ? Request.prefix_db_lookup : "hhapowerpath" />

<cfset pnQueryVisitProgressByType(
  queryName = "getstandingorder",
  progressTypeList = "standing_order",
  progressColumnList = pnProgressNoAssmt,
  assmtId = URL.AID,
  scheduleId = URL.SID,
  skill = skilltype,
  agencySchema = Request.prefix_db_agency,
  lookupSchema = _pnLookup,
  datasource = Application.DataSrc,
  orderByClause = "MIN(pProgress.Item_ID), MIN(pPathway.Header_No), MIN(pPathway.Order_ID)"
) />

<cfset pnQueryVisitProgressByType(
  queryName = "getdischargeplan",
  progressTypeList = "discharge_plan",
  progressColumnList = pnProgressNoAssmt,
  assmtId = URL.AID,
  scheduleId = URL.SID,
  skill = skilltype,
  agencySchema = Request.prefix_db_agency,
  lookupSchema = _pnLookup,
  datasource = Application.DataSrc,
  orderByClause = "MIN(pProgress.Item_ID), MIN(pPathway.Header_No), MIN(pPathway.Order_ID)"
) />

<cfset pnQueryVisitProgressByType(
  queryName = "getgoals",
  progressTypeList = "goal",
  progressColumnList = pnProgressNoAssmt,
  assmtId = URL.AID,
  scheduleId = URL.SID,
  skill = skilltype,
  agencySchema = Request.prefix_db_agency,
  lookupSchema = _pnLookup,
  datasource = Application.DataSrc,
  orderByClause = "MAX(pProgress.activate) DESC, MIN(pProgress.YesOrNo), MIN(pProgress.Item_ID), MIN(pPathway.Header_No), MIN(pPathway.Order_ID)"
) />

<cfset pnQueryVisitProgressByType(
  queryName = "getprocedure",
  progressTypeList = "procedure",
  progressColumnList = pnProgressNoAssmt,
  assmtId = URL.AID,
  scheduleId = URL.SID,
  skill = skilltype,
  agencySchema = Request.prefix_db_agency,
  lookupSchema = _pnLookup,
  datasource = Application.DataSrc,
  orderByClause = "MIN(pProgress.Item_ID), MIN(pPathway.Header_No), MIN(pPathway.Order_ID)"
) />

<cfset pnQueryVisitProgressByType(
  queryName = "getallteaching",
  progressTypeList = "teach",
  progressColumnList = pnProgressNoAssmt,
  assmtId = URL.AID,
  scheduleId = URL.SID,
  skill = skilltype,
  agencySchema = Request.prefix_db_agency,
  lookupSchema = _pnLookup,
  datasource = Application.DataSrc,
  orderByClause = "MIN(pProgress.Item_ID), MIN(pPathway.Header_No), MIN(pPathway.Order_ID)"
) />

<cfset pnQueryVisitProgressByType(
  queryName = "pnSymptoms",
  progressTypeList = "symptom,problem",
  progressColumnList = pnProgressNoAssmt,
  assmtId = URL.AID,
  scheduleId = URL.SID,
  skill = skilltype,
  agencySchema = Request.prefix_db_agency,
  lookupSchema = _pnLookup,
  datasource = Application.DataSrc,
  orderByClause = "MIN(pProgress.Item_ID), MIN(pPathway.Header_No), MIN(pPathway.Order_ID)"
) />

<!--- Patient goal on admission (last sections; not in visit skill-filtered set above) --->
<cfquery name="getptgoals" datasource="#Application.DataSrc#">
  SELECT #pnProgressNoAssmt#,
         pProgress.Assmt_ID AS pn_assmt_id,
         MIN(pPathway.Header) AS path_header,
         MIN(pPathway.Header_No) AS path_header_no,
         MIN(pPathway.Order_ID) AS path_order_id
  FROM #Request.prefix_db_agency#.pProgress
  LEFT OUTER JOIN #_pnLookup#.pPathway pPathway
    ON pPathway.Item_ID = pProgress.Item_ID AND pPathway.Type = pProgress.Type
  WHERE pProgress.Assmt_ID = <cfqueryparam value="#URL.AID#" cfsqltype="CF_SQL_INTEGER">
    AND pProgress.Schedule_ID = <cfqueryparam value="#URL.SID#" cfsqltype="CF_SQL_INTEGER">
    AND pProgress.Status = <cfqueryparam value="0" cfsqltype="CF_SQL_INTEGER">
    AND pProgress.Type = <cfqueryparam value="patient_goal" cfsqltype="cf_sql_varchar">
  GROUP BY pProgress.Progress_ID
  ORDER BY MIN(pPathway.Header_No), MIN(pPathway.Order_ID), MIN(pProgress.Item_ID) ASC
</cfquery>

<cfquery name="GetM" dbtype="query">
  SELECT Drug_Name, Dose, Route, Frequency, status FROM GetMd ORDER BY Drug_Name ASC
</cfquery>

<cfquery name="pnWoundCount" datasource="#Application.DataSrc#">
  SELECT COUNT(*) AS CouNt
  FROM #Request.prefix_db_agency#.pWoundsVitals
  WHERE Assmt_ID = <cfqueryparam value="#URL.AID#" cfsqltype="CF_SQL_INTEGER">
    AND VitalOrWound = 'wound'
    AND Status = 0
</cfquery>

<!--- Skill-based section visibility (matches progress_notesnew.cfm) --->
<cfset symp_class = "" />
<cfset meds_class = "" />
<cfset vital_class = "" />
<cfset standing_class = "" />
<cfset procedure_class = "" />
<cfset goals_class = "" />
<cfset discharge_class = "" />
<cfset teaching_class = "" />
<cfset ptcomplaint_class = "" />
<cfset ptgoal_class = "" />
<cfif skilltype EQ "HHA">
  <cfset symp_class = "hide" />
  <cfset meds_class = "hide" />
  <cfset standing_class = "hide" />
  <cfset ptgoal_class = "hide" />
  <cfset goals_class = "hide" />
  <cfset discharge_class = "hide" />
  <cfset teaching_class = "hide" />
  <cfset ptcomplaint_class = "hide" />
  <cfif Getpat.vital_omit EQ 1>
    <cfset vital_class = "hide" />
  </cfif>
</cfif>
<cfif (skilltype EQ "ST" OR skilltype EQ "MSW" OR skilltype EQ "SC" OR skilltype EQ "BV") AND Getpat.vital_omit EQ 1>
  <cfset vital_class = "hide" />
</cfif>

<cfset pnPatientName = Trim(Getpat.Pt_Last & ", " & Getpat.Pt_First) />
<cfif NOT len(pnPatientName)>
  <cfset pnPatientName = "Patient" />
</cfif>
<cfset pnVisitLabel = skilltype & " visit" />
<cfif IsDate(GetSched.Visit_Date)>
  <cfset pnVisitLabel &= " — " & DateFormat(GetSched.Visit_Date, "mm/dd/yyyy") />
</cfif>
