<?xml version="1.0" encoding="UTF-8"?>
<Export generator="Cache" version="25" zv="Cache for Windows (x86-64) 2017.2.2 (Build 865_3_19466U)" ts="2020-07-01 16:55:11">
<Class name="BMW.BSF.SP.AgCheckAndSetSilentSPTAccess">
<Super>%RegisteredObject</Super>
<TimeChanged>63602,62135.147335</TimeChanged>
<TimeCreated>63342,62534.677247</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<UDLText name="T">
<Content><![CDATA[
/* 
	Silently Check And Track Patient Record Access SP: for Scheduling acitons ( Checkin, checkout, noshow, cancel appt etc).
 
*/
]]></Content>
</UDLText>

<Query name="CheckAndSilentTrackPatRecordAccessQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientId:%BigInt,MenuOption:%String="",UserIen:%String,FacilityIen:%String</FormalSpec>
<SqlName>AG_CheckAndSetSilentSPTAccessQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	select ( AG_CheckAndSetSilentSPTAccessM(:PatientId,:MenuOption,:UserIen,:FacilityIen)) as Result</SqlQuery>
</Query>

<Method name="CheckAndSilentTrackPatRecordAccessM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%BigInt,MenuOption:%String="",UserIen:%String,FacilityIen:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_CheckAndSetSilentSPTAccessM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	N ChkSen,RS
	S RS="0",ChkSen=""
	s ChkSen=##class(BMW.BSF.SP.AgCheckSPTAccess).CheckSPTAccessM(PatientId,MenuOption,UserIen,FacilityIen)
	//S RS=ChkSen
	I ((+ChkSen>=2)&&(+ChkSen<=5)) D
	. s RS=##class(BMW.BSF.SP.AgSetSPTAccess).SetSPTAccessM(PatientId,MenuOption,UserIen,FacilityIen)
	Q $G(RS)_"^"_$G(ChkSen)
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.AgCheckAndSE032D</DataLocation>
<DefaultData>AgCheckAndSetSilentSPTAccessDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.AgCheckAndSE032D</IdLocation>
<IndexLocation>^BMW.BSF.SP.AgCheckAndSE032I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.AgCheckAndSE032S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="AgCheckAndSetSilentSPTAccessDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.AgCheckSPTAccess">
<Super>%RegisteredObject</Super>
<TimeChanged>63602,42734.991028</TimeChanged>
<TimeCreated>63340,57173.944403</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="CheckSPTAccessQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientId:%BigInt,MenuOption:%String="",UserIen:%String,FacilityIen:%String</FormalSpec>
<SqlName>AG_CheckSPTAccessQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	select (AG_CheckSPTAccessM(:PatientId,:MenuOption,:UserIen,:FacilityIen)) As Result</SqlQuery>
</Query>

<UDLText name="T">
<Content><![CDATA[
/* BMW_CC_BMA_SP_CheckSPTAccessQ ::	Return values (for Result) = 
				  -1 -RPC/API failed
 ;                  Required variable not defined
 ;                0-No display/action required
 ;                  Not accessing own, employee, or sensitive record
 ;                1-Display warning message
 ;                  Sensitive and DG SENSITIVITY key holder
 ;                  or Employee and DG SECURITY OFFICER key holder
 ;                2-Display warning message/require OK to continue
 ;                  Sensitive and not a DG SENSITIVITY key holder
 ;                  Employee and not a DG SECURITY OFFICER key holder
 ;                3-Access to record denied
 ;                  Accessing own record
 ;                4-Access to Patient (#2) file records denied
 ;                  SSN not defined
 */
]]></Content>
</UDLText>

<Method name="CheckSPTAccessM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%BigInt,MenuOption:%String,UserIen:%String,FacilityIen:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_CheckSPTAccessM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I $G(PatientId)<1,$G(UserIen)<1,$G(FacilityIen)<1 Q "-1"
	//D ..debugUtil("TrackPatRecAccess", PatientId, "Start",FacilityIen,"")
	D ##class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserIen,FacilityIen)		
	
	If $G(DUZ)'=$G(UserIen) Q "-1^Incorrect DUZ value"
	S RS="",MenuOption="BPRM^BPRM"
	D PTSEC^DGSEC4(.RS,PatientId,"",MenuOption)
	//D ..debugUtil("TrackPatRecAccess", PatientId, "Stop",FacilityIen,RS(1)_"^"_$G(RS(2)))
	Q RS(1)_"^"_$G(RS(2))
]]></Implementation>
</Method>

<Method name="debugUtil">
<ClassMethod>1</ClassMethod>
<FormalSpec>module:%Text,PatId:%Text,Mode:%Text,location:%Text,ActionTime:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	
	S Date=$ZDT($NOW(),8,1,3)
	I +$G(PatId)>0 s ^BmwDebug($P(Date," "),$P($E(Date,10,25),":"),$P($E(Date,10,25),":",2),$P($E(Date,10,25),":",3),$J,$G(module),$G(PatId),$G(location),$G(Mode))="UserDuz: "_$G(DUZ)_" ^ActionTime: "_$G(ActionTime)_"^ Facility: "_$G(DUZ(2))
	I +$G(PatId)<1 s ^BmwDebug($P(Date," "),$P($E(Date,10,25),":"),$P($E(Date,10,25),":",2),$P($E(Date,10,25),":",3),$J,$G(module),$G(location),$G(Mode))="UserDuz: "_$G(DUZ)_" ^ActionTime: "_$G(ActionTime)_"^ Facility: "_$G(DUZ(2))
	Q
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.AgCheckSPTAccessD</DataLocation>
<DefaultData>AgCheckSPTAccessDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.AgCheckSPTAccessD</IdLocation>
<IndexLocation>^BMW.BSF.SP.AgCheckSPTAccessI</IndexLocation>
<StreamLocation>^BMW.BSF.SP.AgCheckSPTAccessS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="AgCheckSPTAccessDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.AgGetIncompleteChartStatistics">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,40436.514655</TimeChanged>
<TimeCreated>63340,61589.091212</TimeCreated>

<Query name="IncompleteChartStatisticsQ">
<Type>%SQLQuery</Type>
<FormalSpec>From:%Date,To:%Date,Facility:%Text,Type:%Text</FormalSpec>
<SqlName>AG_GetIncompleteChartStatisticsQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	
	Select AG_GetIncompleteChartErrorsM(:From,:To,1,IEN,:Facility,:Type) As Data from bmw.icd_diagnosis where ien<=(Select AG_GetIncompleteChartErrorsM(:From,:To,0,0,:Facility,:Type))]]></SqlQuery>
</Query>

<Method name="IncompleteChartErrorsM">
<ClassMethod>1</ClassMethod>
<FormalSpec>From:%Date,To:%Date,Flag:%Integer,K:%Integer,Facility:%Text,Type:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_GetIncompleteChartErrorsM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	NEW DATE,TODAY,DFN,IEN,COUNT,VST,VH,MONTH,SUB,ADM,X,LINE,DSC,Y,GBL
	S RPT=Flag ;;if '0' return count of Errors, if '1' return list of Errors 	
 	D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(1,Facility) 	
 	S BDGBM=$$X2FM^ORWCV($G(From))
 	S BDGEM=$$X2FM^ORWCV($G(To))
 	S BDGBM=$E(BDGBM,1,5)_"00",BDGEM=$E(BDGEM,1,5)_"31.24"
 	K ^TMP("BDGICS1",$J),^TMP("BDGICS1A",$J),RTN,I
 	; loop through discharges for date range
 	S DATE=BDGBM,TODAY=DT+.24
 	F  S DATE=$O(^DGPM("AMV3",DATE)) Q:('DATE)!(DATE>BDGEM)!(DATE>TODAY)  D
 	. S MONTH=$E(DATE,1,5)
 	. S DFN=0 F  S DFN=$O(^DGPM("AMV3",DATE,DFN)) Q:'DFN  D
 	.. S IEN=0 F  S IEN=$O(^DGPM("AMV3",DATE,DFN,IEN)) Q:'IEN  D
 	... ;
 	... S ADM=$$GET1^DIQ(405,IEN,.14,"I")                     ;adm ien
 	... I $$LASTSRVN^BDGF1(ADM,DFN)["OBSERVATION" Q           ;inpt only
 	... ;
 	... ;increment # discharged per month
 	... S COUNT(MONTH,"DSC")=$G(COUNT(MONTH,"DSC"))+1
 	... ;
 	... ; check for errors
 	... S VST=$$GET1^DIQ(405,+ADM,.27,"I")                   ;visit ien
 	... I 'VST D ERR^BDGICS1("No Visit linked to ADT Admission",IEN,DATE) Q
 	... I '$D(^AUPNVSIT(VST,0)) D ERR^BDGICS1("Linked Visit doesn't exist.",IEN) Q
 	... I $$GET1^DIQ(9000010,VST,.11)="DELETED" D  Q
 	.... D ERR^BDGICS1("ADT Admission linked to Deleted visit.",IEN,DATE)
 	... ;
 	... S VH=$O(^AUPNVINP("AD",VST,0))      ;v hosp ien
 	... I 'VH D ERR^BDGICS1("No V Hospitalization for Visit",IEN,DATE) Q
 	... I '$D(^AUPNVINP(VH,0)) D ERR^BDGICS1("No V Hospitalization for Visit.",IEN,DATE) Q
 	... ; check if uncoded
 	... I $$GET1^DIQ(9000010.02,VH,.15)="NO" D UNCODED^BDGICS1(DATE,IEN) Q
 	... ;
 	... ; check if exported
 	... S COUNT(MONTH,"COD")=$G(COUNT(MONTH,"COD"))+1
 	... ;I $$GET1^DIQ(9000010,VST,.14)]"" S COUNT(MONTH,"EXP")=$G(COUNT(MONTH,"EXP"))+1  ;cmi/maw 10/20/2008 orig line
 	... I $$GET1^DIQ(9000010,VST,1106)]"" S COUNT(MONTH,"EXP")=$G(COUNT(MONTH,"EXP"))+1  ;cmi/maw 10/20/2008 PATCH 1010 modified for new data export field
 	;
 	; build display array
 	;    monthly counts
 	S (MON,I,RTN)=0 F  S MON=$O(COUNT(MON)) Q:'MON  D
 	. F SUB="DSC","COD","UNC","EXP","ERR" D
 	.. S I=I+1
 	.. I SUB=Type D
 	... S RTN=$G(RTN)+$G(COUNT(MON,SUB))
 	I $G(Type)="ERR" S GBL="E"
 	I $G(Type)="UNC" S GBL="U"
 	S (I,DSC)=0 F  S DSC=$O(^TMP("BDGICS1A",$J,GBL,DSC)) Q:'DSC  D
 	. S IEN=0 F  S IEN=$O(^TMP("BDGICS1A",$J,GBL,DSC,IEN)) Q:'IEN  D
 	.. ;
 	.. S DFN=$$GET1^DIQ(405,IEN,.03,"I")
 	.. S ADM=$$GET1^DIQ(405,IEN,.14,"I") 
 	.. I $G(RPT)="1"  D
 	... I $G(Type)="ERR"  D
 	.... S I=I+1,RTN(I)=$$NUMDATE^BDGF(DSC\1)_"^"_$$GET1^DIQ(405,IEN,.03)_"^"_$$HRCN^BDGF2(DFN,DUZ(2))_"^"_^TMP("BDGICS1A",$J,GBL,DSC,IEN)
 	... I $G(Type)="UNC"  D
 	.... S I=I+1,RTN(I)=$$NUMDATE^BDGF(DSC\1)_"^"_$E($$GET1^DIQ(405,IEN,.03),1,22)_"^"_$$HRCN^BDGF2(DFN,DUZ(2))_"^"_$P($$LASTSRVC^BDGF1(ADM,DFN)," ")_"^"_$$INSUR^BDGF2(DFN,+^DGPM(ADM,0))_"^"_^TMP("BDGICS1A",$J,GBL,DSC,IEN)_"^"_$$NUMDATE^BDGF(+$G(^DGPM(ADM,0))\1)
 	;
 	K ^TMP("BDGICS1A",$J) 
 	K ^TMP("BDGICS1",$J) 	 
 	I RPT=1  Q RTN(K)
 	Q RTN
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.AgGetIncompA567D</DataLocation>
<DefaultData>AgGetIncompleteChartStatisticsDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.AgGetIncompA567D</IdLocation>
<IndexLocation>^BMW.BSF.SP.AgGetIncompA567I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.AgGetIncompA567S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="AgGetIncompleteChartStatisticsDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.AgGetIncompleteChartStatisticsCount">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,40425.385378</TimeChanged>
<TimeCreated>63340,61547.799629</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="IncompleteChartStatisticsCountQ">
<Type>%SQLQuery</Type>
<FormalSpec>From:%Date,To:%Date,Facility:%Text</FormalSpec>
<SqlName>AG_GetIncompleteChartStatisticsCountQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[		
	Select Counts from (Select AG_GetIncompleteChartErrorsSummaryM(:From,:To,IEN,:Facility) As Counts from bmw.state where ien<=12) where Counts is not null]]></SqlQuery>
</Query>

<Method name="IncompleteChartErrorsSummaryM">
<ClassMethod>1</ClassMethod>
<FormalSpec>From:%Date,To:%Date,K:%Integer,Facility:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_GetIncompleteChartErrorsSummaryM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	
	NEW DATE,TODAY,DFN,IEN,COUNT,VST,VH,MONTH,SUB,ADM,X,LINE,DSC,Y
	;S RPT=Flag ;;if '0' return count of Errors, if '1' return list of Errors 	
 	D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(1,Facility) 	
 	;I ($G(RTN(K))'="" & RPT=1)  Q RTN(K)
 	;I ($G(RTN)'="" & RPT=0)  Q RTN 	
 	S BDGBM=$$X2FM^ORWCV($G(From))
 	S BDGEM=$$X2FM^ORWCV($G(To))
 	S BDGBM=$E(BDGBM,1,5)_"00",BDGEM=$E(BDGEM,1,5)_"31.24"
 	K ^TMP("BDGICS1",$J),^TMP("BDGICS1A",$J),RTN,I
 	; loop through discharges for date range
 	S DATE=BDGBM,TODAY=DT+.24
 	F  S DATE=$O(^DGPM("AMV3",DATE)) Q:('DATE)!(DATE>BDGEM)!(DATE>TODAY)  D
 	. S MONTH=$E(DATE,1,5)
 	. S DFN=0 F  S DFN=$O(^DGPM("AMV3",DATE,DFN)) Q:'DFN  D
 	.. S IEN=0 F  S IEN=$O(^DGPM("AMV3",DATE,DFN,IEN)) Q:'IEN  D
 	... ;
 	... S ADM=$$GET1^DIQ(405,IEN,.14,"I")                     ;adm ien
 	... I $$LASTSRVN^BDGF1(ADM,DFN)["OBSERVATION" Q           ;inpt only
 	... ;
 	... ;increment # discharged per month
 	... S COUNT(MONTH,"DSC")=$G(COUNT(MONTH,"DSC"))+1
 	... ;
 	... ; check for errors
 	... S VST=$$GET1^DIQ(405,+ADM,.27,"I")                   ;visit ien
 	... I 'VST D ERR^BDGICS1("No Visit linked to ADT Admission",IEN,DATE) Q
 	... I '$D(^AUPNVSIT(VST,0)) D ERR^BDGICS1("Linked Visit doesn't exist.",IEN) Q
 	... I $$GET1^DIQ(9000010,VST,.11)="DELETED" D  Q
 	.... D ERR^BDGICS1("ADT Admission linked to Deleted visit.",IEN,DATE)
 	... ;
 	... S VH=$O(^AUPNVINP("AD",VST,0))      ;v hosp ien
 	... I 'VH D ERR^BDGICS1("No V Hospitalization for Visit",IEN,DATE) Q
 	... I '$D(^AUPNVINP(VH,0)) D ERR^BDGICS1("No V Hospitalization for Visit.",IEN,DATE) Q
 	... ; check if uncoded
 	... I $$GET1^DIQ(9000010.02,VH,.15)="NO" D UNCODED^BDGICS1(DATE,IEN) Q
 	... ;
 	... ; check if exported
 	... S COUNT(MONTH,"COD")=$G(COUNT(MONTH,"COD"))+1
 	... ;I $$GET1^DIQ(9000010,VST,.14)]"" S COUNT(MONTH,"EXP")=$G(COUNT(MONTH,"EXP"))+1  ;cmi/maw 10/20/2008 orig line
 	... I $$GET1^DIQ(9000010,VST,1106)]"" S COUNT(MONTH,"EXP")=$G(COUNT(MONTH,"EXP"))+1  ;cmi/maw 10/20/2008 PATCH 1010 modified for new data export field
 	;
 	; build display array
 	;    monthly counts
 	S (MON,I,RTN)=0 F  S MON=$O(COUNT(MON)) Q:'MON  D
 	. S I=I+1,RTN(I)=$$FMTE^XLFDT(MON_"00")_"~"_"DSC"_$G(COUNT(MON,"DSC"))_"~"_"COD"_$G(COUNT(MON,"COD"))_"~"_"UNC"_$G(COUNT(MON,"UNC"))_"~"_"EXP"_$G(COUNT(MON,"EXP"))_"~"_"ERR"_$G(COUNT(MON,"ERR"))
 	K ^TMP("BDGICS1A",$J) 
 	K ^TMP("BDGICS1",$J)
 	I K>I Q ""
 	Q RTN(K)
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.AgGetIncomp4272D</DataLocation>
<DefaultData>AgGetIncompleteChartStatisticsCountDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.AgGetIncomp4272D</IdLocation>
<IndexLocation>^BMW.BSF.SP.AgGetIncomp4272I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.AgGetIncomp4272S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="AgGetIncompleteChartStatisticsCountDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.AgGetIncompleteChartStatisticsSum">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,40416.561179</TimeChanged>
<TimeCreated>63340,61885.355677</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="IncompleteChartStatisticsSumQ">
<Type>%SQLQuery</Type>
<FormalSpec>From:%Date,To:%Date,Facility:%Text</FormalSpec>
<SqlName>AG_GetIncompleteChartStatisticsSumQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
	Select AG_GetIncompleteChartStatisticsSumM(:From,:To,1,0,:Facility) AS Counts</SqlQuery>
</Query>

<Method name="IncompleteChartErrorsSumM">
<ClassMethod>1</ClassMethod>
<FormalSpec>From:%Date,To:%Date,Flag:%Integer,K:%Integer,Facility:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_GetIncompleteChartStatisticsSumM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	NEW DATE,TODAY,DFN,IEN,COUNT,VST,VH,MONTH,SUB,ADM,X,LINE,DSC,Y
	S RPT=Flag ;;if '0' return count of Errors, if '1' return list of Errors 	
 	D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(1,Facility) 	
 	;I ($G(RTN(K))'="" & RPT=1)  Q RTN(K)
 	;I ($G(RTN)'="" & RPT=0)  Q RTN 	
 	S BDGBM=$$X2FM^ORWCV($G(From))
 	S BDGEM=$$X2FM^ORWCV($G(To))
 	S BDGBM=$E(BDGBM,1,5)_"00",BDGEM=$E(BDGEM,1,5)_"31.24"
 	K ^TMP("BDGICS1",$J),^TMP("BDGICS1A",$J),RTN,I
 	; loop through discharges for date range
 	S DATE=BDGBM,TODAY=DT+.24
 	F  S DATE=$O(^DGPM("AMV3",DATE)) Q:('DATE)!(DATE>BDGEM)!(DATE>TODAY)  D
 	. S MONTH=$E(DATE,1,5)
 	. S DFN=0 F  S DFN=$O(^DGPM("AMV3",DATE,DFN)) Q:'DFN  D
 	.. S IEN=0 F  S IEN=$O(^DGPM("AMV3",DATE,DFN,IEN)) Q:'IEN  D
 	... ;
 	... S ADM=$$GET1^DIQ(405,IEN,.14,"I")                     ;adm ien
 	... I $$LASTSRVN^BDGF1(ADM,DFN)["OBSERVATION" Q           ;inpt only
 	... ;
 	... ;increment # discharged per month
 	... S COUNT(MONTH,"DSC")=$G(COUNT(MONTH,"DSC"))+1
 	... ;
 	... ; check for errors
 	... S VST=$$GET1^DIQ(405,+ADM,.27,"I")                   ;visit ien
 	... I 'VST D ERR^BDGICS1("No Visit linked to ADT Admission",IEN,DATE) Q
 	... I '$D(^AUPNVSIT(VST,0)) D ERR^BDGICS1("Linked Visit doesn't exist.",IEN) Q
 	... I $$GET1^DIQ(9000010,VST,.11)="DELETED" D  Q
 	.... D ERR^BDGICS1("ADT Admission linked to Deleted visit.",IEN,DATE)
 	... ;
 	... S VH=$O(^AUPNVINP("AD",VST,0))      ;v hosp ien
 	... I 'VH D ERR^BDGICS1("No V Hospitalization for Visit",IEN,DATE) Q
 	... I '$D(^AUPNVINP(VH,0)) D ERR^BDGICS1("No V Hospitalization for Visit.",IEN,DATE) Q
 	... ; check if uncoded
 	... I $$GET1^DIQ(9000010.02,VH,.15)="NO" D UNCODED^BDGICS1(DATE,IEN) Q
 	... ;
 	... ; check if exported
 	... S COUNT(MONTH,"COD")=$G(COUNT(MONTH,"COD"))+1
 	... ;I $$GET1^DIQ(9000010,VST,.14)]"" S COUNT(MONTH,"EXP")=$G(COUNT(MONTH,"EXP"))+1  ;cmi/maw 10/20/2008 orig line
 	... I $$GET1^DIQ(9000010,VST,1106)]"" S COUNT(MONTH,"EXP")=$G(COUNT(MONTH,"EXP"))+1  ;cmi/maw 10/20/2008 PATCH 1010 modified for new data export field
 	;
 	; build display array
 	;    monthly counts
 	S (MON,DSC,UNC,COD,EXP,ERR)=0 F  S MON=$O(COUNT(MON)) Q:'MON  D
 	. S DSC=DSC+$G(COUNT(MON,"DSC"))
 	. S UNC=UNC+$G(COUNT(MON,"COD"))
 	. S COD=COD+$G(COUNT(MON,"UNC"))
 	. S EXP=EXP+$G(COUNT(MON,"EXP"))
 	. S ERR=ERR+$G(COUNT(MON,"ERR"))
 	S RTN="1~DSC"_$G(DSC)_"~"_"COD"_$G(COD)_"~"_"UNC"_$G(UNC)_"~"_"EXP"_$G(EXP)_"~"_"ERR"_$G(ERR)
 	K ^TMP("BDGICS1A",$J) 
 	K ^TMP("BDGICS1",$J) 	  	
 	Q RTN
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.AgGetIncompE3DDD</DataLocation>
<DefaultData>AgGetIncompleteChartStatisticsSumDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.AgGetIncompE3DDD</IdLocation>
<IndexLocation>^BMW.BSF.SP.AgGetIncompE3DDI</IndexLocation>
<StreamLocation>^BMW.BSF.SP.AgGetIncompE3DDS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="AgGetIncompleteChartStatisticsSumDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.AgGetPatientASheetReport">
<Super>%RegisteredObject</Super>
<TimeChanged>64979,51151.665307</TimeChanged>
<TimeCreated>63439,41941.584518</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="PatientRoutingASheetReportQ">
<Type>%SQLQuery</Type>
<FormalSpec>Patient:%Text,Facility:%Text,AdmissionId:%Text,UserId:%Text</FormalSpec>
<SqlName>AG_GetPatientASheetReportQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	
	Select AG_GetPatientASheetReportM(:Patient,IEN,:Facility,:AdmissionId,:UserId) As Data from bmw.icd_diagnosis where ien<=(Select AG_GetPatientASheetReportM(:Patient,0,:Facility,:AdmissionId,:UserId))]]></SqlQuery>
</Query>

<Method name="PatientASheetReportM">
<ClassMethod>1</ClassMethod>
<FormalSpec>Patient:%Text,ITOR:%Integer,Facility:%Text,AdmissionId:%Text,UserId:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_GetPatientASheetReportM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	;call BMW_BSF_SP.AG_GetPatientASheetReportQ('15793','2906','22754','1')
	I $G(Patient)'>0 Q ""
 	I $G(Facility)'>0 Q ""
 	I $G(AdmissionId)'>0 Q ""	
 	I $G(UserId)'>0 Q "" 	 	
	I ITOR=0 D
	. K ^TMP("ASHEETRPT",$J)
	. S DGPMT=1
	. S DGPMCA=AdmissionId
	. S DFN=Patient	
	. S BDGFIN=1
	. S DGQUIET=1
	. S BDGCOP=1
	. S BDGHALF=2
	. S BDGFRM=1
	. D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserId,Facility)
	. D ..Print()
	. S RTN(0)=$O(^TMP("ASHEETRPT",$J,""),-1) 	
	. S INDX=$O(^TMP("ASHEETRPT",$J,""))
	. I +INDX>0 F  D  Q:(+INDX'>0)
	. . S RTN(INDX)=$G(^TMP("ASHEETRPT",$J,INDX))
	. . S INDX=$O(^TMP("ASHEETRPT",$J,INDX)) 	
	. K ^TMP("ASHEETRPT",$J)	
 	Q $G(RTN(ITOR))
]]></Implementation>
</Method>

<Method name="Print">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
 	; REQUIRED:
 	; DFN = patient ien; DGPMCA = admission ien
 	;
 	; DGPMT = transaction type (1=admission, 2=ward transfer, etc.)
 	;
 	; BDGFIN = 0 if not final a sheet, = 1 for a sheet only,
 	;  1      = 2 for a sheet & cpt list, = 3 for a sheet & m/m list
 	;
 	; OPTIONAL:
 	; DGQUIET = if set to 1 no user interaction and all other optional
 	;               variables are set
 	; BDGDEV  = print device if sent by calling routine
 	;           otherwise will look for a sheet printer for ward
 	;
 	; REQUIRED IF DGQUIET IS SET:
 	; BDGHALF = 1 to print bottom half of form, = 0 to leave blank
 	;         = 2 assumes printing of coded data
 	; BDGCOP = number of copies to print
 	;
 	;
 	N myStream,INDX,txt
 	S myStream = ##class(%Stream.GlobalBinary).%New()
 	U $io::("^"_$ZNAME) 	
 	D ##class(%Device).ReDirectIO(1) 	
 	D PRINT^BDGCRB1
 	D ##class(%Device).ReDirectIO(0)
 	D myStream.WriteLine("") 
 	D myStream.WriteLine("ENDOFFILE") 
 	D myStream.Rewind() 
 	K ^TMP("ASHEETRPT",$J)
 	S INDX=0
 	WHILE 1{
	 	S txt=myStream.ReadLine()	 	 	 	
	 	I txt["ENDOFFILE" Q
	 	S INDX=INDX+1
     	S ^TMP("ASHEETRPT",$J,INDX)=txt     	
     	}
  	Q
 
    //Labels that allow for IO redirection
    //Read Character - we don't care about reading
rchr(c)      quit
    //Read a string - we don't care about reading
rstr(sz,to)  quit
    //Write a character - call the output label
wchr(s)      do output($char(s))  quit
    //Write a form feed - call the output label
wff()        do output($char(12))  quit
    //Write a newline - call the output label
wnl()        do output($char(13,10))  quit
    //Write a string - call the output label
wstr(s)      do output(s)  quit
    //Write a tab - call the output label
wtab(s)      do output($char(9))  quit
    //Output label - this is where you would handle what you actually want to do.
    //  in our case, we want to write to myStream
output(s)    do myStream.Write(s)  quit
 
 Q
]]></Implementation>
</Method>
</Class>


<Class name="BMW.BSF.SP.AgGetPatientFaceSheet">
<Super>%RegisteredObject</Super>
<TimeChanged>65463,57108.987883</TimeChanged>
<TimeCreated>63340,58552.600207</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="PatientFaceSheetQ">
<Type>%SQLQuery</Type>
<FormalSpec>Patient:%Text,Facility:%Text,HDR:%Text</FormalSpec>
<SqlName>AG_GetPatientFaceSheetQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	Select AG_GetPatientFaceSheetM(:Patient,IEN,:Facility,:HDR) As Data from bmw.icd_diagnosis where ien<=(Select AG_GetPatientFaceSheetCountM(:Patient,1,:Facility,:HDR))]]></SqlQuery>
</Query>

<Method name="PatientFaceSheetM">
<ClassMethod>1</ClassMethod>
<FormalSpec>Patient:%Text,K:%Integer,Facility:%Text,HDR:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_GetPatientFaceSheetM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	N RTN,INDX
	K RTN,^TMP($J,"FSRPT")	
 	I $G(Patient)'>0 Q ""
 	I $G(Facility)'>0 Q ""
 	D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(1,Facility)
 	I $G(DUZ)'>0 Q ""
 	S DFN=$G(Patient)
	S DA=DFN
	S DUZ(2)=$G(Facility)
	S U="^"
	S IOSL="24"
	S IOST="C"
	S IOST(0)=9
	;S IOM=110
	D ..Start()  
	S INDX=$O(^TMP($J,"FSRPT",""))
	I +INDX>0 F  D  Q:(+INDX'>0)
	. S RTN(INDX)=$G(^TMP($J,"FSRPT",INDX))
	. S INDX=$O(^TMP($J,"FSRPT",INDX))
 	Q RTN(K)
]]></Implementation>
</Method>

<Method name="PatientFaceSheetCountM">
<ClassMethod>1</ClassMethod>
<FormalSpec>Patient:%Text,K:%Integer,Facility:%Text,HDR:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_GetPatientFaceSheetCountM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	N RTN,INDX,INDEX
	K RTN,^TMP($J,"FSRPT")
 	I $G(Patient)'>0 Q ""
 	I $G(Facility)'>0 Q ""
 	D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(1,Facility)
 	I $G(DUZ)'>0 Q ""
 	S DFN=$G(Patient)
	S DA=DFN
	S DUZ(2)=$G(Facility)
	S U="^"
	S IOSL="24"
	S IOST="C"
	S IOST(0)=9
	;S IOM=110
	D ..Start()   
	S INDX=$O(^TMP($J,"FSRPT",""))
	I +INDX>0 F  D  Q:(+INDX'>0)
	. S RTN(INDX)=$G(^TMP($J,"FSRPT",INDX))
	. S INDX=$O(^TMP($J,"FSRPT",INDX))
	. I +INDX>0 S INDEX=INDX
 	Q $G(INDEX)
]]></Implementation>
</Method>

<Method name="Start">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	;START ;PEP - From TaskMan.
	N COUNT
 	S COUNT=0
 	K ^TMP($J,"FSRPT")
 	Q:'$G(DFN)  ;IHS/SD/TPF AG*7.1*1 REPORTED BY FDIH CALL FROM CIA REMOTE
 	;PROCEDURE HAD DFN=0 IM18987
 	Q:'$G(DUZ(2))
 	D ^AGVAR,..Lines(),NOW^AG S AG("LOC")=$P($G(^DIC(4,DUZ(2),0)),U)
 	;S AG("PAGE")=0 D HDR
 	I $G(HDR)=1 D ..Hdr() Q
 	I $G(HDR)=1 Q
 	S DIC=9000001,DR=.02 D ^AGDICLK S COUNT=COUNT+1,(TXT,^TMP($J,"FSRPT",COUNT))="COMPUTER FILE EST: " S:$D(AG("LKPRINT")) (TXT,^TMP($J,"FSRPT",COUNT))=$G(^TMP($J,"FSRPT",COUNT))_AG("LKPRINT") S AG=$P($G(^AUPNPAT(DFN,0)),U,11) I AG,$D(^VA(200,AG,0)) S ^TMP($J,"FSRPT",COUNT)=$G(TXT)_"("_$P(^(0),U,2)_")"
 	S DR=.03,AGLAST="LAST EDIT: " D ^AGDICLK
 	S:$D(AG("LKPRINT")) AGLAST=AGLAST_AG("LKPRINT") S AG=$P($G(^AUPNPAT(DFN,0)),U,12) I AG,$D(^VA(200,AG,0)) S AGLAST=AGLAST_" ("_$P(^(0),U,2)_")" 
 	S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(IOM-$L(AGLAST_$G(^TMP($J,"FSRPT",COUNT))))_AGLAST
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG("-")
 	D ..Alias()
]]></Implementation>
</Method>

<Method name="Alias">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	;ALIAS ;OTHER NAMES
 	I $O(^DPT(DFN,.01,0)) D
 	.S OUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="OTHER NAME(S):"
 	.N I S I=0 F  S I=$O(^DPT(DFN,.01,I)) Q:'I  D
 	..S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="                "_$P(^DPT(DFN,.01,I,0),"^",1)
 	E  S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=""
 	S DR=.09,DIC=2 D ^AGDICLK
 	;I $D(AG("LKPRINT")) W "SSN: ",AG("LKPRINT") D
 	;I $$GET1^DIQ(2,DFN_",",1107.3)'="" W "SSN: ",$$GET1^DIQ(9000001,DFN_",",1107.3) D  ;IHS/SD/TPF AG*7.1*4
 	I $$GET1^DIQ(9000001,DFN_",",1107.3)'="" S TXT="SSN: "_$$GET1^DIQ(9000001,DFN_",",1107.3) D  ;IHS/SD/TPF AG*7.1*5
 	.I $P(^AUPNPAT(DA,0),U,23) S TXT2="SSN STATUS: "_$P(^AUTTSSN($P(^(0),U,23),0),U,2) S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(TXT)_..PutSpace(IOM-$L($G(TXT)_$G(TXT2)))_$G(TXT2)
 	.E  S COUNT=COUNT+1,TXT2="SSN STATUS UNKNOWN",^TMP($J,"FSRPT",COUNT)=$G(TXT)_..PutSpace(IOM-$L($G(TXT)_$G(TXT2)))_$G(TXT2)
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="CLASS: " S DR=1111,DIC=9000001 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_AG("LKPRINT")
 	S DR=.02,DIC=2 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(58-$L($G(^TMP($J,"FSRPT",COUNT))))_"BIRTH SEX: "_AG("LKPRINT")
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="COMMUNITY: " S DR=1118,DIC=9000001 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_AG("LKPRINT") I AGOPT(14)="Y",$D(^AUPNPAT(DFN,11)) S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_" ("_$S($P(^(11),U,21)="Y":"Verified",1:"Unverified")_")"
 	S DR=.03,DIC=2 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(58-$L(^TMP($J,"FSRPT",COUNT)))_"BIRTHDAY: "_AG("LKPRINT")
 	S COUNT=COUNT+1,(TXT,^TMP($J,"FSRPT",COUNT))="   "_"COUNTY: " S DIC=9000001.51,DR=.03,AG("DRENT")=0 D ^AGDICLK I '$D(AG("LKERR")),AG("LKDATA")]"",$D(^AUTTCOM(AG("LKDATA"),0)) S AG=$P(^(0),U,2) I AG,$D(^AUTTCTY(AG,0)) S ^TMP($J,"FSRPT",COUNT)=$G(TXT)_$P(^(0),U)
 	S DR=1102.98,DIC=9000001 D ^AGDICLK I '$D(AG("LKERR")),$D(AG("LKPRINT")),+AG("LKPRINT") S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(58-$L(^TMP($J,"FSRPT",COUNT)))_"AGE: "_AG("LKPRINT")
 	;W !,"HOME ADDRESS:" S DR=.111,DIC=2 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" W !?5,AG("LKPRINT")
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="CURRENT ADDRESS:" S DR=.111,DIC=2 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="     "_AG("LKPRINT")  ;AG*7.1*4
 	F DR=.112,.113 S DIC=2 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="     "_AG("LKPRINT")  ;AG*7.1*7
 	;W:$$GET1^DIQ(2,DFN_",",.112,"E")'="" !?5,$$GET1^DIQ(2,DFN_",",.112,"E")  ;IHS/SD/TPF FOR FOREST COUNTY H5297 NOT APPROVED BY TAG
 	S AG="",DR=.114 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S AG=AG_AG("LKPRINT")_","
 	F DR=.115,.1112 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S AG=AG_" "_AG("LKPRINT")
 	S:AG]"" COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="     "_AG
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="PHONE NUMBERS ---"
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="HOME: " S DR=.131 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_AG("LKPRINT") S DR=.132 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(IOM-$L(^TMP($J,"FSRPT",COUNT)_"WORK: "_AG("LKPRINT")))_"WORK: "_AG("LKPRINT") S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="OTHER PHONE: " S DR=1801 S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_$$GET1^DIQ(9000001,DFN,DR)
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=""
 	N FLG S FLG="0"
 	I $$GET1^DIQ(9009061,DUZ(2)_",",503,"I") D   ;AG*7.1*9 - Added conditional display of RACE
 	.N AGRACE S AGRACE=$$RACE^AGUTL(DFN)
 	.;W "RACE: "_$S(+AGRACE>1:"MULTIPLE RACES SPECIFIED",1:$E($P(AGRACE,"^",2),1,38))
 	.S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="RACE: "_$S(+AGRACE>1:"MULTIPLE RACES SPECIFIED",1:$E($P(AGRACE,"^",2),1,38))
 	.S FLG="1"
 	.;S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$$GET1^DID(2,.06,"","LABEL")_": "_$E($$GET1^DIQ(2,DFN,.06),1,38) ;AG*7.1*7 - Truncated field length
 	;BEGIN NEW CODE AG*7.1*2 ETHNICITY
 	I $$GET1^DIQ(9009061,DUZ(2)_",",501,"I") D
 	.;S ETHNIC=$O(^DPT(DFN,.06,0))
 	.;I ETHNIC S ETHNIC=$$GET1^DIQ(10.2,ETHNIC,.01)
 	.;I FLG="1" S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(IOM-$L(^TMP($J,"FSRPT",COUNT)_"ETHNICITY: "_$G(ETHNIC)))_"ETHNICITY: "_$G(ETHNIC)
 	.;I FLG="0" S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="ETHNICITY: "_$G(ETHNIC)
 	.N AGETHN S AGETHN=$$ETHN^AGUTL(DFN)
 	.I FLG="1" S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(IOM-$L(^TMP($J,"FSRPT",COUNT)_"ETHNICITY: "_$S(+AGETHN>1:"MULTIPLE ETHNICITIES",1:$E($P(AGETHN,"^",2),1,23))))_"ETHNICITY: "_$S(+AGETHN>1:"MULTIPLE ETHNICITIES",1:$E($P(AGETHN,"^",2),1,23))
 	.I FLG="0" S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="ETHNICITY: "_$S(+AGETHN>1:"MULTIPLE ETHNICITIES",1:$E($P(AGETHN,"^",2),1,23))
 	;END NEW CODE
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="PREFERRED LANGUAGE: "_$E($P($P($$CLANG^AGED10B(DFN),U,4),":",2),1,25)_..PutSpace(IOM-$L("PREFERRED LANGUAGE: "_$E($P($P($$CLANG^AGED10B(DFN),U,4),":",2),1,25)_"PREFERRED METHOD: "_$$GET1^DIQ(9000001,DFN,4002)))_"PREFERRED METHOD: "_$$GET1^DIQ(9000001,DFN,4002) ;AG*7.1*9 - Added Preferred Method
 	;NEW CODE FOR EMAIL ADDRESSES AG*7.1*4
 	S:$$GET1^DIQ(9000001,DFN_",",1802)'="" COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="CURRENT EMAIL ADDRESS: "_$$GET1^DIQ(9000001,DFN_",",1802)
 	;END NEW CODE FOR EMAIL ADDRESS
 	I AGOPT(23)="Y" S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$$GET1^DID(9000001,.35,"","LABEL")_": "_$$GET1^DIQ(9000001,DFN,.35)
 	I AGOPT(23)="Y" S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(IOM-$L(^TMP($J,"FSRPT",COUNT)_$$GET1^DID(9000001,.36,"","LABEL")_": "_$$GET1^DIQ(9000001,DFN,.36)_" /  "_$$GET1^DIQ(9000001,DFN_",",8701,"E")))_$$GET1^DID(9000001,.36,"","LABEL")_": "_$$GET1^DIQ(9000001,DFN,.36)_" /  "_$$GET1^DIQ(9000001,DFN_",",8701,"E")
 	I '$D(^AUPNNPP("B",DFN))  D
 	. S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG("-")
 	. S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="*** NO NOTICE OF PRIVACY PRACTICES DATA ON THIS PATIENT ***"
 	I $D(^AUPNNPP("B",DFN))  D
 	.S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG("-") ;,COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=""
 	.S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="NOTICE OF PRIVACY PRACTICES REC'D BY PATIENT :"_"  "_$$GET1^DIQ(9000038,DFN,.02)_"     DATE :"_" "_$$GET1^DIQ(9000038,DFN,.03)
 	.S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="ACKNOWLEDGEMENT OF RECEIPT OF NPP SIGNED :"_"      "_$$GET1^DIQ(9000038,DFN,.04)
 	.I $$GET1^DIQ(9000038,DFN,.05)'=""  D
 	..S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="REASON :"_"           "_$E($$GET1^DIQ(9000038,DFN,.05),1,60)
 	..I $L($$GET1^DIQ(9000038,DFN,.05))>60 S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="" S ^TMP($J,"FSRPT",COUNT)="           "_$E($$GET1^DIQ(9000038,DFN,.05),61,80)
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG("-")
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="TRIBE: " S DR=1108,DIC=9000001 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_AG("LKPRINT") I AGOPT(14)="Y",$D(^AUPNPAT(DFN,11)) S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_" ("_$S($P(^(11),U,19)="Y":"Verified",1:"Unverified")_")"
 	S PUTSPACE=$L(^TMP($J,"FSRPT",COUNT)_"INDIAN QUANTUM: "_$G(AG("LKPRINT")))
 	I PUTSPACE>IOM S PUTSPACE=2
 	S DR=1110 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(IOM-PUTSPACE)_"INDIAN QUANTUM: "_AG("LKPRINT")
 	K AGQUIT
 	D ..BmwAgFs1()
 	D ..BmwAgFs4()
 	D ..BmwAgFs5()
 	D ..BmwAgFs6() 	
 	D ..BmwAgFs7() 
 	D ..BmwAgFs9() 
 	D ..BmwAgFs11()	 	 	
 	;N I F I=1,4,5,6,7,9,11 D  Q:$D(AGQUIT)
 	;.I $D(AGQUIT) Q
 	;.I $Y+6>IOSL D HDR
 	;.I $D(AGQUIT) Q
 	;.D @("^AGFACE"_I)
 	;I $D(AGQUIT) K AGQUIT Q
 	;Write line of "-", Confidential Pat Info, If CPU do end of page
 	K AG,AGIO,AGTIME,G,AGL,AGLAST,AG("LKERR"),AG("LKDATA"),AG("LKPRINT"),AGPCC,X,Y,Z
 	Q
]]></Implementation>
</Method>

<Method name="BmwAgFs1">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
	;BMWAGFS1 ; IHS/ASDS/EFG - FACE SHEET (DEMOGRAPHIC DATA) ; 
	;;7.1;PATIENT REGISTRATION;;AUG 25,2005
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="BIRTHPLACE: " S DIC=2,DA=DFN,DR=.092 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_AG("LKPRINT")_", "
 	S DR=.093 D ^AGDICLK S:$D(AG("LKPRINT"))&(AG("LKPRINT")]"") ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_AG("LKPRINT")
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="RELIGION: " S DR=.08 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_AG("LKPRINT")
 	S DIC=9000001,DR=.07 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(IOM-$L(^TMP($J,"FSRPT",COUNT)_"TRIBE ENROLL #: "_AG("LKPRINT")))_"TRIBE ENROLL #: "_AG("LKPRINT")
 	I $D(^AUPNPAT(DFN,43)),(AGOPT(8)="Y") D
 	.S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG("-")
 	.S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="OTHER TRIBES:"_"                                     "_"QUANTUM:"
 	.;F AG=0:0 S AG=$O(^AUPNPAT(DFN,43,AG)) Q:+AG=0  S DIC=9000001.43,DA=DFN,AG("DRENT1")=AG,DR=.01 D ^AGDICLK I $D(AG("LKPRINT")) S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="     "_AG("LKPRINT") S AG("DRENT1")=AG,DR=.02 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(60-$L(^TMP($J,"FSRPT",COUNT)_AG("LKPRINT")))_AG("LKPRINT")
 	.F AG=0:0 S AG=$O(^AUPNPAT(DFN,43,AG)) Q:+AG=0  S DIC=9000001.43,DA=DFN,AG("DRENT1")=AG,DR=.01 D ^AGDICLK I $D(AG("LKPRINT")) S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="     "_AG("LKPRINT") S AG("DRENT1")=AG,DR=.02 D ^AGDICLK I $D(AG("LKPRINT")) S PUTSPACE=55-$L(^TMP($J,"FSRPT",COUNT)),^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(PUTSPACE)_AG("LKPRINT") ;I $L(^TMP($J,"FSRPT",COUNT)_AG("LKPRINT"))>IOM S PUTSPACE=2
 	D ..BmwAgFs1L2()
]]></Implementation>
</Method>

<Method name="BmwAgFs1L2">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
	S DIC=2 S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG("-") 
 	;IHS/OIT/NKD AG*7.1*11 MU2 - DISPLAY ALL RACES - START NEW CODE
 	I $$GET1^DIQ(9009061,DUZ(2)_",",503,"I") D   ;CONDITIONAL DISPLAY OF RACE
 	.N AGRACE,AGCNT S AGRACE=$$RACE^AGUTL(DFN)
 	.Q:+AGRACE<2   ;IF LESS THAN 2, DO NOT DISPLAY (0 NO DISPLAY, 1 WILL ALREADY DISPLAY ABOVE)
 	.S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="RACES:"
 	.F AGCNT=1:1:+AGRACE S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="     "_$P(AGRACE,U,AGCNT+1)
 	.S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG("-")
 	;IHS/OIT/NKD AG*7.1*11 END NEW CODE
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="FATHER: " S DR=.2401 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_AG("LKPRINT")
 	S DR=2602,DIC=9000001 D ^AGDICLK S:$D(AG("LKPRINT")) TXT=AG("LKPRINT")_" ",^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(40-$L(^TMP($J,"FSRPT",COUNT)))_"     "_"BIRTHPLACE: "_$G(TXT)
 	S DR=2603 D ^AGDICLK I $D(^DIC(5,+$G(AG("LKDATA")),0)) D
 	.S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_$P(^DIC(5,AG("LKDATA"),0),U,2)
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="MOTHER: " S DR=.2403,DIC=2 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_AG("LKPRINT")
 	S DR=2605,DIC=9000001 D ^AGDICLK S:$D(AG("LKPRINT")) TXT=AG("LKPRINT")_" ",^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(40-$L(^TMP($J,"FSRPT",COUNT)))_"     "_"BIRTHPLACE: "_$G(TXT)
 	S DR=2606 D ^AGDICLK I $D(^DIC(5,+$G(AG("LKDATA")),0)) D
 	.S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_$P(^DIC(5,AG("LKDATA"),0),U,2)
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG("-")
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="EM CONTACT: " S DR=.331,DIC=2 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_AG("LKPRINT") S DIC=9000001,DR=3102 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"  ("_AG("LKPRINT")_")"
 	S DR=.339,DIC=2 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(IOM-$L(^TMP($J,"FSRPT",COUNT)_"EM PHONE: "_AG("LKPRINT")))_"EM PHONE: "_AG("LKPRINT") S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="EM ADDRESS:"
 	S DIC=2,DR=.333 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="     "_AG("LKPRINT")
 	S AG="",DR=.336 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S AG="     "_AG_AG("LKPRINT")_","
 	F DR=.337,.338 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S AG=AG_" "_AG("LKPRINT")
 	S:AG]"" COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG
 	Q:'$D(^DPT(DFN,.21))
 	Q:$P(^DPT(DFN,.21),U)=""
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG("-")
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="NEXT-OF-KIN: " S DR=.211,DIC=2 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_AG("LKPRINT") S DIC=9000001,DR=2802 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"  ("_AG("LKPRINT")_")"
 	S DR=.219,DIC=2 D ^AGDICLK S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(IOM-$L(^TMP($J,"FSRPT",COUNT)_"NOK PHONE: "_AG("LKPRINT")))_"NOK PHONE: "_AG("LKPRINT") S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="NOK ADDRESS:"
 	S DIC=2,DR=.213 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="     "_AG("LKPRINT")
 	S AG="",DR=.216 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S AG=AG_AG("LKPRINT")_","
 	F DR=.217,.218 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S AG=AG_" "_AG("LKPRINT")
 	S:AG]"" COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="     "_AG
]]></Implementation>
</Method>

<Method name="BmwAgFs4">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
	;BMWAGFS4 ; IHS/ASDS/EFG - FACE SHEET (3RD PARTY (MEDICARE) ELIGIBILITY) ; 
	;;7.1;PATIENT REGISTRATION;**2,4**;JAN 31, 2007
 	;MOVE LINES SO CAN READ THEM
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-"))
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=..PutSpace((IOM\2+15)-($L("*** THIRD PARTY ELIGIBILITY ***")))_"*** THIRD PARTY ELIGIBILITY ***"
 	Q:'$D(^AUPNMCR(DFN,0))
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="MEDICARE:"
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="TYPE"_"              "_"NUMBER"_"               "_"ELIG. DATE"_"         "_"ELIG. END DATE"
 	;F AG=1:1 S AG("DRENT")=AG,DIC=9000003.11,DA=DFN,DR=.02 D ^AGDICLK Q:$D(AG("LKERR"))  D L3A
 	;IM25256 OLD CODE ASSUMES CONTIGUOUS RECORDS EXIST
 	N IENS,COVTYP
 	S AG=0
 	F  S AG=$O(^AUPNMCR(DFN,11,AG)) Q:'AG  D
 	.S IENS=AG_","_DFN_","
 	.S COVTYP=$$GET1^DIQ(9000003.11,IENS,.03,"I")
 	.I COVTYP="D" S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=COVTYP_"                    "_$$GET1^DIQ(9000003.11,IENS,.06,"E")
 	.E  S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=COVTYP_"                 "_$$GETMCR^AGUTL(DFN,)   ;$$GET1^DIQ(9000003,DFN_",",.03,"E")
 	.;
 	.;I COVTYP'="D" S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_$$GET1^DIQ(9000003,DFN_",",.04,"E")  ;SUFFIX
 	.S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"          "_$$GET1^DIQ(9000003.11,IENS,.01,"E")
 	.S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"          "_$$GET1^DIQ(9000003.11,IENS,.02,"E")
 	;END IM25256
 	S DIC=9000003,DR=2101,DA=DFN D ^AGDICLK
 	I $D(AG("LKPRINT")),AG("LKPRINT")]"" S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="   "_"NAME: "_AG("LKPRINT")
 	S DR=2102 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]""
 	;W !?3,"DATE OF BIRTH: ",AG("LKPRINT")
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="   "_"DATE OF BIRTH: "_$G(AG("LKPRINT"))  ;AG*71.*2 IM21507
]]></Implementation>
</Method>

<Method name="BmwAgFs5">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
	;BMWAGFS5 ; IHS/ASDS/EFG - FACE SHEET (MEDICAID) ;
 	;;7.1;PATIENT REGISTRATION;**4**;AUG 25,2005
 	;
 	G END:'$D(^AUPNMCD("AB",DFN))
 	S AG("STATE")=0,(AGHDG,AGPRTXTR,AGSTNUM)="N"
 	D HDG
 	S AGNINE=$$HTFM^XLFDT($H-275,1) ;Compute 9 Months earlier
GSTATE S AG("STATE")=$O(^AUPNMCD("AB",DFN,AG("STATE"))) G END:AG("STATE")="" S AGNUMBER=0
GNODE S AGNUMBER=$O(^AUPNMCD("AB",DFN,AG("STATE"),AGNUMBER))
 	G GSTATE:AGNUMBER=""
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$$GET1^DIQ(5,AG("STATE"),1)_"        "_AGNUMBER
 	D PLNAME
 	S DA=$O(^AUPNMCD("AB",DFN,AG("STATE"),AGNUMBER,0))
 	S %=$$GET1^DIQ(9000004,DA,2101)
 	S:$L(%) COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="   "_"NAME: "_%
 	S %=$$GET1^DIQ(9000004,DA,2102)
 	S:$L(%) COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="   "_"DATE OF BIRTH: "_%
 	;S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=""
 	G GNODE
IENNODE ;
WRITLN ;
 	Q
WSTNUM ;
 	Q
WELIGDT ;
WMCNAM ;
END K AGHDG,IEN,AGNINE,AGNUMBER,AGPRTXTR,AG("STATE"),AGSTNUM,AGPLNUM
 Q
HDG ;Q:AGHDG="Y"  W !,AG("-"),!,"MEDICAID:    " W:AGOPT(16)="Y" "(elig. dates null, or less than 9 months ago)"
 Q:$G(AGHDG)="Y"  S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-"))
 S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="MEDICAID:    " S:$G(AGOPT(16))="Y" ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"(elig. dates null, or less than 9 months ago)"  ;AG*7.1*4 IM26968
 S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="STATE"_"     "_"NUMBER"_"               "_"(updated)"_"  "_"ELIG DATE"_"    "_"COVERAGE"_"   "_"ELIG END" S AGHDG="Y"
 Q
PLNAME ;EP - Display Medicaid Plan Name info
 ;Get IEN of Patient in Medicaid Elig. File (^AUPNMCD)
 N AGIEN,AGDATA,AGUPDT,AGBDT,AGEDT,AGINSPTR,AGPLNAME,AGCOV
 S AGIEN=""
 F  S AGIEN=$O(^AUPNMCD("AB",DFN,AG("STATE"),AGNUMBER,AGIEN)) Q:AGIEN=""  D
 .;Get data from 0th node of Mcaid Elig File
 .S AGDATA=$G(^AUPNMCD(AGIEN,0))
 .Q:AGDATA=""
 .;Insurer pointer is the 10th piece of Medicaid Elig Files 0th node
 .S AGINSPTR=$P(AGDATA,U,10)
 .I $G(AGINSPTR)'="" D
 ..S AGPLNAME=$P($G(^AUTNINS(AGINSPTR,0)),U)
 ..S COUNT=COUNT+1,(TXT,^TMP($J,"FSRPT",COUNT))="PLAN: "_AGPLNAME
 .E  S COUNT=COUNT+1,(TXT,^TMP($J,"FSRPT",COUNT))="PLAN: (none)"
 .S AGUPDT=0
 .S Y=$P($G(^AUPNMCD(AGIEN,0)),U,8)
 .D DD^%DT S ^TMP($J,"FSRPT",COUNT)=$G(TXT)_"("_Y_")"
 .;D DD^%DT S ^TMP($J,"FSRPT",COUNT)=$G(TXT)_"                         "_"("_Y_")"
 .F  S AGUPDT=$O(^AUPNMCD(AGIEN,11,AGUPDT)) Q:'+AGUPDT  D
 ..S AGBDT=$P($G(^AUPNMCD(AGIEN,11,AGUPDT,0)),U)
 ..S AGEDT=$P($G(^AUPNMCD(AGIEN,11,AGUPDT,0)),U,2)
 ..S AGCOV=$P($G(^AUPNMCD(AGIEN,11,AGUPDT,0)),U,3)
 ..I AGBDT>DT,(AGBDT'="") Q
 ..I AGOPT(16)="Y",AGBDT<AGNINE Q
 ..S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="                                          "_$$FMTE^XLFDT(AGBDT,1)_"    "_$G(AGCOV)_"     "_$$FMTE^XLFDT(AGEDT,1) 
 Q
]]></Implementation>
</Method>

<Method name="BmwAgFs6">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
	;BMWAGFS6 ; IHS/ASDS/EFG - FACE SHEET (RAILROAD RETIREMENT) ;
	;;7.1;PATIENT REGISTRATION;**2**;JAN 31, 2007 
 	Q:'$D(^AUPNRRE(DFN,0)) 
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-"))
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="RAILROAD RETIREMENT:"
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="TYPE"_"               "_"NUMBER"_"               "_"ELIG. DATE"_"        "_"ELIG. END DATE"
 	F AG=1:1 S AG("DRENT")=AG,DIC=9000005.11,DA=DFN,DR=.02 D ^AGDICLK Q:$D(AG("LKERR"))  D L3A
 	S DIC=9000005,DR=2101,DA=DFN D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="   "_"NAME: "_AG("LKPRINT")
 	S DR=2102 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="   "_"DATE OF BIRTH: "_AG("LKPRINT")
L3A S DA=DFN,DIC=9000005.11,AG("DRENT")=AG,DR=.03 D ^AGDICLK Q:$D(AG("LKERR"))
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="  "_AG("LKPRINT")
 	;S DIC=9000005,DR=.03,DA=DFN D ^AGDICLK Q:$D(AG("LKERR"))  ;IHS/SD/TPF AG*7.1*2 IM23259
 	I AG("LKPRINT")="D" D  ;IHS/SD/TPF AG*7.1*2 IM23259
 	.S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"                   "_$$GET1^DIQ(9000005.11,AG_","_DA_",",.06)
 	I AG("LKPRINT")'="D" D  ;IHS/SD/TPF AG*7.1*2 IM23259
 	.S DIC=9000005,DR=.03,DA=DFN D ^AGDICLK Q:$D(AG("LKERR"))
 	.S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"                "_$$GETRRE^AGUTL(DFN,)   ;AG("LKPRINT")_$P(^AUPNRRE(DFN,0),U,4)
 	S AG("DRENT")=AG,DR=.01,DIC=9000005.11 D ^AGDICLK Q:$D(AG("LKERR"))  S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"          "_AG("LKPRINT")
 	S AG("DRENT")=AG,DR=.02,DIC=9000005.11 D ^AGDICLK Q:$D(AG("LKERR"))  S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"      "_AG("LKPRINT")
 	Q
]]></Implementation>
</Method>

<Method name="BmwAgFs7">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
	;BMWAGFS7 ; IHS/ASDS/EFG - FACE SHEET (PRVT INS, VET, OTHER REG, ELIG.) ;  
 	;;7.1;PATIENT REGISTRATION;**2,8**;AUG 25, 2005
 	I $D(^AUPNPRVT(DFN,0)) D
 	.;I $Y+6>IOSL D HDR^AGFACE Q:$D(AGQUIT)
 	.S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-"))
 	.S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="PRIVATE INSURANCE:"
 	.S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="INS. COMPANY"_"                 "_"NUMBER"_"           "_"ELIG. DATE"_"    "_"ELIG. END DATE"
 	.S DIC=9000006.11,DR=.01,DA=DFN S AG=0 F  S AG=$O(^AUPNPRVT(DFN,11,AG)) Q:'AG  S AGL=$G(^AUPNPRVT(DFN,11,AG,0)) D PVT
 	Q:$D(AGQUIT)
 	I $D(^DPT(DFN,"VET")),^("VET")="Y" D VET
 	S DIC=9000001.41,DR=.01,DA=DFN,AG(1)=""
 	N I S I=0,AG(1)="" F  S I=$O(^AUPNPAT(DFN,41,I)) Q:'I  D  Q:$D(AGQUIT)
 	.Q:I=DUZ(2)
 	.;I $Y+6>IOSL D HDR^AGFACE Q:$D(AGQUIT)
 	.Q:$D(AGQUIT)
 	.S:$D(AG(1)) COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-"))
 	.S:$D(AG(1)) COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="THE PATIENT IS ALSO REGISTERED AT:"
 	.S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$P($G(^DIC(4,I,0)),U)_..PutSpace(IOM-$L($P($G(^DIC(4,I,0)),U)_"CHART #: "_$P($G(^AUPNPAT(DFN,41,I,0)),U,2)))_"CHART #: "_$P($G(^AUPNPAT(DFN,41,I,0)),U,2)
 	.K AG(1)
 	Q:$D(AGQUIT)
EMP ;PATIENT'S EMPLOYER
 S AGEMPIEN=$P($G(^AUPNPAT(DFN,0)),U,19) I AGEMPIEN]"" D
 .;I $Y+6>IOSL D HDR^AGFACE Q:$D(AGQUIT)
 .S AG(0)=$G(^AUTNEMPL(AGEMPIEN,0)) I AG(0)="" Q
 .N I F I=1:1:6 S AG(I)=$P(AG(0),U,I)
 .S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-"))
 .S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="PATIENT'S EMPLOYER: "_AG(1)
 .F I=2,3 S:AG(I)]"" COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="                    "_AG(I)
 .S:AG(4)]"" ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_", "_$P($G(^DIC(5,+AG(4),0)),U,2)
 .S:AG(5)]"" ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"  "_AG(5)
 .S:AG(6)]"" COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="PHONE: "_AG(6)
 Q:$D(AGQUIT)
 K AGEMPIEN
SPEMP ;SPOUSE'S EMPLOYER
 S AGEMPIEN=$P($G(^AUPNPAT(DFN,0)),U,22) I AGEMPIEN]"" D
 .;I $Y+6>IOSL D HDR^AGFACE Q:$D(AGQUIT)
 .S AG(0)=$G(^AUTNEMPL(AGEMPIEN,0)) I AG(0)="" Q
 .N I F I=1:1:6 S AG(I)=$P(AG(0),U,I)
 .S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG("-")
 .S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="SPOUSE'S EMPLOYER: "_AG(1)
 .F I=2,3 S:AG(I)]"" COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="                    "_AG(I)
 .S:AG(4)]"" ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_", "_$P($G(^DIC(5,+AG(4),0)),U,2)
 .S:AG(5)]"" ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"  "_AG(5)
 .S:AG(6)]"" COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="             "_"PHONE: "_AG(6)
 Q:$D(AGQUIT)
 K AGEMPIEN
ELIG ;ELIGIBILITY FOR CARE
 K AG("DRENT") S DIC=9000001,DA=DFN,DR=$S(AGOPT(14)="Y":1124,1:1112) D ^AGDICLK I '$D(AG("LKERR")) S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG("-") K ^TMP($J,"W") S X="      ***  ELIGIBILITY FOR CARE: "_AG("LKPRINT")_"  ***",COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(X) ;,DIWL=5,DIWR=75,DIWF="W" D ^DIWP,^DIWW
 K DIWF,DIWL,DIWR
 Q
PVT ;I $P(AGL,U)]"",$D(^AUTNINS($P(AGL,U),0)) Q:(($P(AGL,U,7)]"")&(+$P(AGL,U,7)<DT))  W !,$E($P(^AUTNINS($P(AGL,U),0),U),1,29),?29,$E($P(AGL,U,2),1,26),?46 S Y=$P(AGL,U,6) D DD^%DT W Y S Y=$P(AGL,U,7) D DD^%DT W ?60,Y
 ;IHS/SD/TPF 4/28/2006 AG*7.1*2 IM20635
 I $P(AGL,U)]"",$D(^AUTNINS($P(AGL,U),0)) Q:(($P(AGL,U,7)]"")&(+$P(AGL,U,7)<DT))  D
 .S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$E($P(^AUTNINS($P(AGL,U),0),U),1,29)
 .N AGPH
 .S AGPH=$P($G(^AUPNPRVT(DFN,11,AG,2)),U)
 .I AGPH]"" S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(48-$L(^TMP($J,"FSRPT",COUNT)_AGPH))_AGPH
 .I AGPH="" D                                                                        ;AG*7.1*8
 ..S AGPH=$P($G(^AUPNPRVT(DFN,11,AG,0)),U,8)
 ..I AGPH]"" S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(36-$L($E($P(^AUTNINS($P(AGL,U),0),U),1,29)))_$P($G(^AUPN3PPH(AGPH,0)),U,4)
 .S Y=$P(AGL,U,6) D DD^%DT S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_" "_Y S Y=$P(AGL,U,7) D DD^%DT S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"  "_Y
 Q
VET ;VETERAN
 ;I $Y+6>IOSL D HDR^AGFACE Q:$D(AGQUIT)
 S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG("-")
 K ^UTILITY("DIQ1",$J)
 K DIC,DIE,DIR,DIQ,DR
 S DIC=2,DA=DFN,AGSCRN=$P($T(@1),";;",2)
 F AG=2,3,4,6,7 D
 .S X=$P(AGSCRN,";",AG),DR=$P(X,U,4)
 .;FACESHEET VSTS#57676 Reported Item Fix S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="  "_$P(X,U,2)_$P(^DD(2,DR,0),U)_" :  "
 .S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="  "_$P(^DD(2,DR,0),U)_" :  "
 .D EN^DIQ1
 .S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_$G(^UTILITY("DIQ1",$J,2,DA,DR))
 .K ^UTILITY("DIQ1",$J)
 K ^UTILITY("DIQ1",$J),DR,AGSCRN,X
 K DIC,DIE,DIR,DIQ,DR
 Q
1 ;;^20^^1901;^13^^.325;^9^^.326;^4^^.327;^8^^.32101;^16^^.301;^22^^.313
]]></Implementation>
</Method>

<Method name="BmwAgFs9">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
	;BMWAGFS9 ; IHS/ASDS/EFG - FACE SHEET CONT'D ; 
 	;;7.1;PATIENT REGISTRATION;;AUG 25,2005
 	Q:$G(AGOPT(18))'="Y"!('$D(^AUPNPAT(DFN,12)))
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-"))
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="LOCATION OF PATIENT'S HOME"
 	S AG=0 F  S AG=$O(^AUPNPAT(DFN,12,AG)) Q:'AG  S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="     "_AG_"). "_$G(^(AG,0))
 	Q
]]></Implementation>
</Method>

<Method name="BmwAgFs11">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
	;BMWAGFS11 ; IHS/ASDS/EFG - FACE SHEET (ADDITIONAL INFORMATION) ; 
 	;;7.1;PATIENT REGISTRATION;**4**;AUG 25,2005
 	;Q:$G(AGOPT(13))'="Y"!'$D(^AUPNPAT(DFN,13,1))
 	I $G(AGOPT(13))'="Y"!'$D(^AUPNPAT(DFN,13,1)) D HIST Q  ;IHS/SD/TPF BAR*7.1*4
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-"))
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="ADDITIONAL REGISTRATION INFORMATION:"
 	;G FIRST:$E($G(AGOPT(21)),1,1)="F"!($E($G(AGOPT(21)),1,1)="f")
 	;G LAST:$E($G(AGOPT(21)),1,1)="L"!($E($G(AGOPT(21)),1,1)="l")
 	;G ALL:$G(AGOPT(21))="A"
 	D FIRST:$E($G(AGOPT(21)),1,1)="F"!($E($G(AGOPT(21)),1,1)="f")
 	D LAST:$E($G(AGOPT(21)),1,1)="L"!($E($G(AGOPT(21)),1,1)="l")
 	D ALL:$G(AGOPT(21))="A"
 	;IHS/SD/TPF BAR*7.1*4 HISTORICAL ADDRESSES
 	;IF PARAM = 0, PRINT NOTHING
HIST ;EP -
 I $$GET1^DIQ(9009061,DUZ(2)_",",602,"I") D
 .D ADDRHIST  ;AG*7.1*4
 .D EMALHIST  ;AG*7.1*4
 Q:$G(AGOPT(21))=0
 Q
LAST ;PRINT THE LAST # LINES
 S AG=$O(^AUPNPAT(DFN,13,""),-1)
 Q:'+AG
 S AG=AG-($E($G(AGOPT(21)),2,4))
 ;IF THE REG PARAMETER IS GREATER THAN THE NUMBER
 ;OF RECORDS IN NODE 13, PRINT THEM ALL
 I AG<1 G ALL
 ;IF THE PARAM IS LESS THAN THE NUMBER OF RECORDS
 ;IN NODE 13, PRINT THE NUMBER OF LINES REQUESTED.
 F  S AG=$O(^AUPNPAT(DFN,13,AG)) Q:'AG  D
 . S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="     "_AG_"). "_$G(^AUPNPAT(DFN,13,AG,0))
 Q
FIRST ;PRINT THE FIRST # LINES
 S AG=0
 F  S AG=$O(^AUPNPAT(DFN,13,AG)) Q:'AG!(AG>($E($G(AGOPT(21)),2,4)))  D
 . S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="     "_AG_"). "_$G(^AUPNPAT(DFN,13,AG,0))
 Q
ALL ;THIS CODE PRINTS ALL LINES
 F AG=0:0 S AG=$O(^AUPNPAT(DFN,13,AG)) Q:'AG  S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="     "_AG_"). "_$G(^AUPNPAT(DFN,13,AG,0))
 Q
 ;
 ;BEGIN NEW CODE FOR AG*7.1*4 HISTORICAL ADDRESSES
ADDRHIST ;EP - PRINT PREVIOUS MAIL ADRESSES
 ;BEGIN NEW CODE FOR HISTORICAL MAIL ADDRESSES
 N HISTLIM,HISTREC,IENS
 S HISTLIM=$$GET1^DIQ(9009061,DUZ(2)_",",601,"I")
 S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG("=")
 S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="HISTORICAL ADDRESS(S):"
 S HISTREC=0
 F CNT=1:1 S HISTREC=$O(^AUPNPAT(DFN,83,HISTREC)) Q:'HISTREC!(CNT>HISTLIM)  D
 .S IENS=HISTREC_","_DFN_","
 .S:$$GET1^DIQ(9000001.83,IENS,.02)'="" COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="         "_$$GET1^DIQ(9000001.83,IENS,.02)
 .S:$$GET1^DIQ(9000001.83,IENS,.03)'="" COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="         "_$$GET1^DIQ(9000001.83,IENS,.03)
 .S:$$GET1^DIQ(9000001.83,IENS,.04)'="" COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="         "_$$GET1^DIQ(9000001.83,IENS,.04)
 .S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="         "_$$GET1^DIQ(9000001.83,IENS,.05)_", "
 .S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_$$GET1^DIQ(9000001.83,IENS,.06)
 .S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"  "_$$GET1^DIQ(9000001.83,IENS,.07)
 .S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="         "_$$GET1^DIQ(9000001.83,IENS,.08)
 ;END NEW CODE
 Q
EMALHIST ;EP - PRINT HISTORICAL EMAIL ADDRESSES
 N HISTLIM,HISTREC,IENS
 S HISTLIM=$$GET1^DIQ(9009061,DUZ(2)_",",601,"I")
 S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG("=")
 S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="HISTORICAL EMAIL ADDRESS(S):"
 S HISTREC=0
 F CNT=1:1 S HISTREC=$O(^AUPNPAT(DFN,82,HISTREC)) Q:'HISTREC!(CNT>HISTLIM)  D
 .S IENS=HISTREC_","_DFN_","
 .S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="         "_$$GET1^DIQ(9000001.82,IENS,.02)
 Q
]]></Implementation>
</Method>

<Method name="PutSpace">
<ClassMethod>1</ClassMethod>
<FormalSpec>NO:%String=""</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	N IND,STR
 	S IND=0
 	S STR=""
 	I +NO'>0  Q " "
 	F  D  Q:(+IND>NO)
 	.I IND>4 S STR=STR_" "
 	.S IND=IND+1
 	Q STR
]]></Implementation>
</Method>

<Method name="Lines">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
	;LINES ;EP  "Standard" lines of characters.
 	S AG("-")=""
 	S $P(AG("-"),"-",77)=""
 	S AG("=")=""
 	S $P(AG("="),"=",77)=""
 	S AG("*")=""
 	S $P(AG("*"),"*",77)=""
 	Q
]]></Implementation>
</Method>

<Method name="Hdr">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
	;EP - FACE SHEET HEADER
	;S AG("PAGE")=AG("PAGE")+1
 	;S AG("PAGE")=$G(AG("PAGE"))+1  ;IHS/SD/TPF 12/15/2005 AG*7.1*1
	 ;I AG("PAGE")>1 Q:$D(AGVQQFS)  D RTRN^AG I 'Y S AGQUIT="" D END1 Q
 	;S:AG("PAGE")>1 ^TMP($J,"FSRPT",COUNT)=$$S^AGVDF("IOF") 
	;D CPI^AG
	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=..PutSpace((IOM\2+21)-($L("*** CONFIDENTIAL PATIENT INFORMATION ***")))_"*** CONFIDENTIAL PATIENT INFORMATION ***"
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=..PutSpace((IOM\2)-($L(AG("LOC"))\2))_AG("LOC"),COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=..PutSpace((IOM\2+15)-($L("AMBULATORY CARE RECORD BRIEF")))_"AMBULATORY CARE RECORD BRIEF",COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=..PutSpace((IOM\2+15)-($L("AMBULATORY CARE RECORD BRIEF")))_"----------------------------",COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AGTIME ;_"                                                                      "_"Page: " ;_AG("PAGE") 
 	;S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=""
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG("=")
 	;S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=""
 	I '$D(RHIFLAG) S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="PATIENT: "_$$GETPREF^AUPNSOGI(DFN,"E") S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_AG("LKPRINT") I $D(^DPT(DFN,"VET")),^("VET")="Y" S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_" (VETERAN)"
 	I $D(RHIFLAG)  D
 	. I RHIFLAG="A" S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="PATIENT: "_$$GETPREF^AUPNSOGI(DFN,"E") S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_$$S^AGVDF("RVN")_AG("LKPRINT")_$$S^AGVDF("BLN")_" (RHI)"_$$S^AGVDF("BLF")_$$S^AGVDF("RVF")
 	. E  S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="PATIENT: "_$$GETPREF^AUPNSOGI(DFN,"E") S:$D(AG("LKPRINT")) ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_AG("LKPRINT") I $D(^DPT(DFN,"VET")),^("VET")="Y" S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_" (VETERAN)"
 	S TXT=$G(^TMP($J,"FSRPT",COUNT)) S:$D(^AUPNPAT(DFN,41,DUZ(2),0)) ^TMP($J,"FSRPT",COUNT)=$G(TXT)_..PutSpace(IOM-$L($G(TXT)_"CHART #: "_$P(^(0),U,2)))_"CHART #: "_$P(^(0),U,2)
 	;S (TXT,^TMP($J,"FSRPT",COUNT))=^TMP($J,"FSRPT",COUNT)_"                                                           "_"CHART #: " S:$D(^AUPNPAT(DFN,41,DUZ(2),0)) ^TMP($J,"FSRPT",COUNT)=$G(TXT)_$P(^(0),U,2) 
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=AG("=") ;,COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=""
 	Q
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.AgGetPatien9AFFD</DataLocation>
<DefaultData>AgGetPatientFaceSheetDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.AgGetPatien9AFFD</IdLocation>
<IndexLocation>^BMW.BSF.SP.AgGetPatien9AFFI</IndexLocation>
<StreamLocation>^BMW.BSF.SP.AgGetPatien9AFFS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="AgGetPatientFaceSheetDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.AgGetPatientMbi">
<Super>%RegisteredObject</Super>
<TimeChanged>64721,52304.416207</TimeChanged>
<TimeCreated>63340,57173.944403</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.5</Default>
</Parameter>

<UDLText name="T">
<Content><![CDATA[
/*
	DateOfservice : 
	PatientId = patient IEN
	DateOfService = Date patient was serviced when creating MBI 
	FORMAT:
 	;  0/default: MBI value only return requested
 	;  1: All fields, internal value return requested
 	;  2(?):  All fields, external value return requested
 	
 	; Returned value:
 	;  Successful (Dependent upon FORMAT specification):
 	;   0/default: MBI
 	;   1: MBI^EFF_DATE^SOURCE
 	;   2(?):  MBI^EFF_DATE_ext^SOURCE_ext
 	;  Unsuccessful: 0 (zero)
	*/
]]></Content>
</UDLText>

<Query name="AgGetPatientMbiQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientId:%BigInt,Format:%String</FormalSpec>
<SqlName>AG_GetPatientMbiQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	select (AG_GetPatientMbiM(:PatientId,:Format)) As Result</SqlQuery>
</Query>

<UDLText name="T">
<Content><![CDATA[
/* BMW_BSF_SP.Get_PatientMbiQ ::	Return values (for Result) = 
	   -1 ; -RPC/API failed
       Required variable not defined
   
 */
]]></Content>
</UDLText>

<Method name="AgGetPatientMbiM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%BigInt,Format:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_GetPatientMbiM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I $G(PatientId)<1,$G(DateOfService)<1 Q "-1"
	//D ..debugUtil("TrackPatRecAccess", PatientId, "Start",FacilityIen,"")
	//D ##class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserIen,FacilityIen)	
	//D ##class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(1,100)	
	s RS=""
	
	//check AG and AUPN patches
	&sql(select count(IEN) INTO :CNT from bmw.build where name = 'AUPN*99.1*26' or name = 'AG*7.1*13')
	I $G(CNT)'=2 Q 0
	
	If $G(DUZ)'>0 Q "-1^UserIen - DUZ value not preset"
	If $G(DUZ(2))'>0 Q "-1^FacilityId - DUZ(2) value not preset"
	
 	;Function: Retrieve an MBI for a patient on the specified date of service
 	; Call: $$GETMBI^AUPNMBI(PAT_IEN,DATE,FMT)
 	; FORMAT:
 	;  0/default: MBI value only return requested
 	;  1: All fields, internal value return requested
 	;  2(?):  All fields, external value return requested
 	; 
 	;Returned value:
 	;  Successful (Dependent upon FORMAT specification):
 	;   0/default: MBI
 	;   1: MBI^EFF_DATE^SOURCE
 	;   2(?):  MBI^EFF_DATE_ext^SOURCE_ext
 	;  Unsuccessful: 0 (zero)
 	
 	s RS=$$GETMBI^AUPNMBI(PatientId,$$DT^XLFDT,Format)
 	
	Q RS
]]></Implementation>
</Method>

<Method name="debugUtil">
<ClassMethod>1</ClassMethod>
<FormalSpec>module:%Text,PatId:%Text,Mode:%Text,location:%Text,ActionTime:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	
	S Date=$ZDT($NOW(),8,1,3)
	I +$G(PatId)>0 s ^BmwDebug($P(Date," "),$P($E(Date,10,25),":"),$P($E(Date,10,25),":",2),$P($E(Date,10,25),":",3),$J,$G(module),$G(PatId),$G(location),$G(Mode))="UserDuz: "_$G(DUZ)_" ^ActionTime: "_$G(ActionTime)_"^ Facility: "_$G(DUZ(2))
	I +$G(PatId)<1 s ^BmwDebug($P(Date," "),$P($E(Date,10,25),":"),$P($E(Date,10,25),":",2),$P($E(Date,10,25),":",3),$J,$G(module),$G(location),$G(Mode))="UserDuz: "_$G(DUZ)_" ^ActionTime: "_$G(ActionTime)_"^ Facility: "_$G(DUZ(2))
	Q
]]></Implementation>
</Method>
</Class>


<Class name="BMW.BSF.SP.AgGetPatientRoutingSlip">
<Super>%RegisteredObject</Super>
<TimeChanged>63530,48405.041644</TimeChanged>
<TimeCreated>63439,41941.584518</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="PatientRoutingSlipQ">
<Type>%SQLQuery</Type>
<FormalSpec>Patient:%Text,Facility:%Text,ApptDate:%Text</FormalSpec>
<SqlName>AG_GetPatientRoutingSlipQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT (AG_GetPatientRoutingSlipM(:Patient,0,:Facility,:ApptDate)) As Data</SqlQuery>
</Query>

<Method name="PatientRoutingSlipM">
<ClassMethod>1</ClassMethod>
<FormalSpec>Patient:%Text,NEXT:%Integer,Facility:%Text,ApptDate:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_GetPatientRoutingSlipM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I $G(Patient)'>0 Q ""
 	I $G(Facility)'>0 Q ""
 	I $G(ApptDate)="" Q ""
 	D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(1,Facility)
	S DFN=Patient
	S DGQUIET="1"
	;S DT=$$X2FM^ORWCV($G(ApptDate))
	K BMWOUT,BMWERR,SCR	
	N SCR,INDEX,IEN,PRINTER
	S SCR="I $P($G(^(0)),""^"",7)="_Facility
	D LIST^DIC(40.8,"","@;","","*","","","",SCR,"","BMWOUT","BMWERR")
	S INDEX=$O(BMWOUT("DILIST",2,""))
 	I +INDEX>0 S IEN=$G(BMWOUT("DILIST",2,INDEX))
	;S FIEN=$$FIND1^DIC(40.8,"","",,"",SCR,"ERR")	
	I +IEN>0 S PRINTER=$$GET1^DIQ(40.8,IEN,9)
	I $G(PRINTER)="" Q "Default printer is not configured."
	D WISD^BSDROUT(+$G(DFN),DT,"RS",$G(PRINTER),"1")	
	Q "Routing Slip has been sent to the default printer."
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.AgGetPatienA084D</DataLocation>
<DefaultData>AgGetPatientRoutingSlipDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.AgGetPatienA084D</IdLocation>
<IndexLocation>^BMW.BSF.SP.AgGetPatienA084I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.AgGetPatienA084S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="AgGetPatientRoutingSlipDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.AgGetPatientRoutingSlipReport">
<Super>%RegisteredObject</Super>
<TimeChanged>63606,52708.494033</TimeChanged>
<TimeCreated>63439,41941.584518</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="PatientRoutingSlipReportQ">
<Type>%SQLQuery</Type>
<FormalSpec>Patient:%Text,Facility:%Text,ApptDate:%Text,UserId:%Text</FormalSpec>
<SqlName>AG_GetPatientRoutingSlipReportQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	
	Select AG_GetPatientRoutingSlipReportM(:Patient,IEN,:Facility,:ApptDate,:UserId) As Data from bmw.icd_diagnosis where ien<=(Select AG_GetPatientRoutingSlipReportM(:Patient,0,:Facility,:ApptDate,:UserId))]]></SqlQuery>
</Query>

<Method name="PatientRoutingSlipReportM">
<ClassMethod>1</ClassMethod>
<FormalSpec>Patient:%Text,ITOR:%Integer,Facility:%Text,ApptDate:%Text,UserId:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_GetPatientRoutingSlipReportM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
		
	I $G(Patient)'>0 Q ""
 	I $G(Facility)'>0 Q ""
 	I $G(ApptDate)="" Q ""	
 	I $G(UserId)'>0 Q "" 	
	I ITOR=0 D
	. D ..End()
	. K ^TMP("SDRS",$J)
	. D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserId,Facility)
	. S SDATE=$$X2FM^ORWCV($G(ApptDate))
	. S SDX="ADD"
	. S DFN=Patient	
	. S BSDMODE="RS"
	. S IOSL="24"
	. S ORDER=""
	. S SDREP="0"
	. D ..RoutingSlip(Patient,SDATE,BSDMODE,"fdghgfh","1")			
 	Q $G(^TMP("SDRS",$J,ITOR))
	Q
	I $G(Patient)'>0 Q ""
 	I $G(Facility)'>0 Q ""
 	I $G(ApptDate)="" Q ""	
 	I $G(UserId)'>0 Q ""
 	K ^TMP("RSRPT",$J)
 	K SDCNT
	K %,%DT,%I,ADDR,ALL,APDATE,DFN,DGMT,DIC,DIV,G,GDATE,H,I,J,K,L,LL,M,NAME,NDATE,ORD,ORDER,P,POP,PRDATE
 	K SC,SDA,SDATE,SDCNT,SDI,SDI1,SDIQ,SDM,SDREP,SDSP,SDSTART,SDVA,SDX,SDX1,SSN,SZ,TDO,X,X1,Y,ZIP,ZX,VAR,C,V,SDEF,A,SD,SCN,SDTD,SDSCCOND
 	K SDPARMS
	I ITOR=0 D
	. D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserId,Facility)
	. S SDATE=$$X2FM^ORWCV($G(ApptDate))
	. S SDX="ADD"
	. S DFN=Patient	
	. S BSDMODE="RS"
	. S IOSL="24"
	. S ORDER=""
	. S SDREP="0"
	. D ..Wisd(Patient,SDATE,BSDMODE,"fdghgfh","1")
	. S RTN(0)=$O(^TMP("RSRPT",$J,""),-1) 	
	. S INDX=$O(^TMP("RSRPT",$J,""))
	. I +INDX>0 F  D  Q:(+INDX'>0)
	. . S RTN(INDX)=$G(^TMP("RSRPT",$J,INDX))
	. . S INDX=$O(^TMP("RSRPT",$J,INDX)) 	
	. K ^TMP("RSRPT",$J)
 	Q $G(RTN(ITOR))
]]></Implementation>
</Method>

<Method name="RoutingSlip">
<ClassMethod>1</ClassMethod>
<FormalSpec>DFN:%String,SDATE:%String,BSDMODE:%String,BSDDEV:%String,BSDNHS:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
 ;WISD(DFN,SDATE,BSDMODE,BSDDEV,BSDNHS) ;PEP; print routing slip for walkin/same day appt
 ; called by SDAMWI1 for walkins; BSDMODE="WI"
 ; called by ONE^BSDROUT for single patient rs; BSDMODE=""
 ; called by APPT for same day appt; BSDMODE="SD"
 ; called by BSDAPP for chart requests for today
 ; called by RS protocol with BSDNHS=1 so no health summary will print;PATCH 1003
 ;
 ;IHS/ITSC/WAR 10/21/04; PATCH #1001
 ; Check for DFN if user enters by Clinic, but does not select a Pt
 I +DFN=0 D
 .S DIR(0)="N^"_VALMBG_":"_VALMLST
 .D ^DIR
 .I +Y>0 S DFN=+$P($G(^TMP("SDAMIDX",$J,+Y)),U,2)
 I +DFN=0 Q
 ;***** END 10/21/04
 ;
 NEW DGPGM,VAR,VAR1,DEV,POP
 S SDX="ALL",ORDER="",SDREP=0,SDSTART="",DIV=$$DIV^BSDU
 ;
 ;IHS/ITSC/LJF 6/17/2005 PATCH 1003 adde BSDNHS to variable list
 ;S VAR="DIV^ORDER^SDX^SDATE^DFN^SDREP^SDSTART^BSDMODE"
 ;S VAR1="DIV;ORDER;SDX;SDATE;DFN;SDREP;SDSTART;BSDMODE"
 S VAR="DIV^ORDER^SDX^SDATE^DFN^SDREP^SDSTART^BSDMODE^BSDNHS"
 S VAR1="DIV;ORDER;SDX;SDATE;DFN;SDREP;SDSTART;BSDMODE;BSDNHS"
 ;end of these PATCH 1003 changes
 ;
 ;S DGPGM="SINGLE^BSDROUT"
 ;I $G(BSDDEV)]"",$G(DGQUIET) D ZIS^BDGF("F","SINGLE^BSDROUT","ROUTING SLIP",VAR1,BSDDEV) Q
 ;S DEV=$S(BSDMODE="CR":".05",1:".11")   ;default printer fields
 ;S BDGDEV=$$GET1^DIQ(9009020.2,$$DIV^BSDU,DEV)
 ;I BDGDEV="" K BDGDEV I $G(DGQUIET) Q
 ;S %ZIS("A")="FILE ROOM PRINTER: " D ZIS^DGUTQ I POP D END^SDROUT1 Q
 D ..Single()
 Q
]]></Implementation>
</Method>

<Method name="Single">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
 ;SINGLE ;EP; queued entry point for single routing slips
 ; called by WISD subroutine
 K ^TMP("SDRS",$J)
 NEW BSDT,CLN,IEN,BSDMOD2
 ;
 ; find all appts for patient
 I BSDMODE="CR" S BSDMOD2="CR",BSDMODE=""
 S BSDT=SDATE\1
 F  S BSDT=$O(^DPT(DFN,"S",BSDT)) Q:'BSDT  Q:(BSDT\1>SDATE)  D
 . S CLN=+$G(^DPT(DFN,"S",BSDT,0)) Q:'CLN   ;clinic ien
 . S IEN=0 F  S IEN=$O(^SC(CLN,"S",BSDT,1,IEN)) Q:'IEN  Q:$P($G(^SC(CLN,"S",BSDT,1,IEN,0)),U)=DFN
 . Q:'IEN                                   ;appt ien in ^sc
 . D FIND^BSDROUT0(CLN,BSDT,IEN,ORDER,BSDMODE)
 I $D(BSDMOD2) S BSDMODE=BSDMOD2
 ;
 ; find all chart requests for patient
 S CLN=0 F  S CLN=$O(^SC("AIHSCR",DFN,CLN)) Q:'CLN  D
 . S BSDT=(SDATE\1)-.0001
 . F  S BSDT=$O(^SC("AIHSCR",DFN,CLN,BSDT)) Q:'BSDT  D
 .. D CRSET^BSDROUT2(CLN,BSDT,DFN,ORDER)
 ;
 ; if no future appts, set something so RS will print
 I '$D(^TMP("SDRS",$J)) S ^TMP("SDRS",$J,$$GET1^DIQ(2,DFN,.01),$$TERM^BSDROUT(DFN),DFN)=""
 ;
 D ..Print(ORDER,SDATE)
 Q
]]></Implementation>
</Method>

<Method name="Print">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
 ;PRINT(ORDER,SDATE) ;EP; called to print routing slips
 ; called by SDROUT0
 ; assumes the following variables are set: SDSTART,SDSTOP,SDX,SDREP,DIV
 ; loop by sort criteria and get patient
 NEW SORT,TERM,DFN,BSDI,CNT,SDCNT,SECOND
 S SORT=0
 F  S SORT=$O(^TMP("SDRS",$J,SORT)) Q:SORT=""  D
 . S TERM=0 F  S TERM=$O(^TMP("SDRS",$J,SORT,TERM)) Q:TERM=""  D
 .. S DFN=0 F  S DFN=$O(^TMP("SDRS",$J,SORT,TERM,DFN)) Q:'DFN  D
 ... ;
 ... I $$FORMAT^BSDROUT1="DUPLICATE" S SECOND=0  ;print 2 per page
 ... D RS^BSDROUT1(SORT,TERM,DFN,1)              ;print one rs for file room
 ... ;
 ... ; now print a copy for each appt if parameter set that way
 ... I $$MORERS^BSDROUT1 S CNT=$$APPTCNT^BSDROUT1(SORT,TERM,DFN) F BSDI=1:1:CNT D RS^BSDROUT1(SORT,TERM,DFN,0)
 ... ;
 ... D OTHER^BSDROUT1(DFN)     ;print other forms
 K SDCNT   ;remove this line to print # of rs printed on end of report
 K BDGSDEV  ;cmi/anch/maw 5/9/2008 PATCH 1009 rqmt 64 kill storage of device name after printing of all RS and other docs
 K SDSTOP ;D END^SDROUT1
 Q
]]></Implementation>
</Method>

<Method name="End">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
 K SDCNT   ;remove this line to print # of rs printed on end of report
 K BDGSDEV  ;cmi/anch/maw 5/9/2008 PATCH 1009 rqmt 64 kill storage of device name after printing of all RS and other docs
 K SDSTOP
 ;END I $D(SDCNT) D:SDCNT>1 END1
 ;W:'$G(SDPARMS("DO NOT CLOSE")) !
 K %,%DT,%I,ADDR,ALL,APDATE,DFN,DGMT,DIC,DIV,G,GDATE,H,I,J,K,L,LL,M,NAME,NDATE,ORD,ORDER,P,POP,PRDATE
 K SC,SDA,SDATE,SDCNT,SDI,SDI1,SDIQ,SDM,SDREP,SDSP,SDSTART,SDVA,SDX,SDX1,SSN,SZ,TDO,X,X1,Y,ZIP,ZX,VAR,C,V,SDEF,A,SD,SCN,SDTD,SDSCCOND
 D:'$G(SDPARMS("DO NOT CLOSE")) CLOSE^DGUTQ
 Q
]]></Implementation>
</Method>

<Method name="Wisd">
<ClassMethod>1</ClassMethod>
<FormalSpec>DFN:%String,SDATE:%String,BSDMODE:%String,BSDDEV:%String,BSDNHS:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
 	;WISD(DFN,SDATE,BSDMODE,BSDDEV,BSDNHS) ;PEP; print routing slip for walkin/same day appt
 	; called by SDAMWI1 for walkins; BSDMODE="WI"
 	; called by ONE^BSDROUT for single patient rs; BSDMODE=""
 	; called by APPT for same day appt; BSDMODE="SD"
 	; called by BSDAPP for chart requests for today
 	; called by RS protocol with BSDNHS=1 so no health summary will print;PATCH 1003
 	;
 	;IHS/ITSC/WAR 10/21/04; PATCH #1001
 	; Check for DFN if user enters by Clinic, but does not select a Pt  
 	;I +DFN=0 D
 	;.S DIR(0)="N^"_VALMBG_":"_VALMLST
 	;.D ^DIR
 	;.I +Y>0 S DFN=+$P($G(^TMP("SDAMIDX",$J,+Y)),U,2)
 	;I +DFN=0 Q
 	;***** END 10/21/04
 	;
 	;NEW DGPGM,VAR,VAR1,DEV,POP
 	;S SDX="ALL",ORDER="",SDREP=0,SDSTART="",DIV=$$DIV^BSDU
 	;k ^SPOOL
 	;S RTNN="SINGLE^BSDROUT"
 	;S ID=2
 	;O 2 
 	;U 2
 	;W "123"
 	;D @RTNN
 	;C 2
 	;ZWRITE ^SPOOL 
 	N myStream,INDX,txt
 	S myStream = ##class(%Stream.GlobalBinary).%New()
 	U $io::("^"_$ZNAME) 	
 	D ##class(%Device).ReDirectIO(1) 	
 	D ..PatientRoutingSlipSingleM() 
 	D ##class(%Device).ReDirectIO(0) 
 	D myStream.WriteLine("") 
 	D myStream.WriteLine("ENDOFFILE") 
 	D myStream.Rewind() 
 	K ^TMP("RSRPT",$J)
 	S INDX=0
 	WHILE 1{
	 	S txt=myStream.ReadLine()	 	 
	 	I txt["ENDOFFILE" Q
	 	;I txt["DATE"&txt["TIME"&txt["CLINIC" S txt="DATE	TIMEEEE	CLINIC	LOCATION"
	 	S INDX=INDX+1
     	S ^TMP("RSRPT",$J,INDX)=txt
     	}
  	Q
 
    //Labels that allow for IO redirection
    //Read Character - we don't care about reading
rchr(c)      quit
    //Read a string - we don't care about reading
rstr(sz,to)  quit
    //Write a character - call the output label
wchr(s)      do output($char(s))  quit
    //Write a form feed - call the output label
wff()        do output($char(12))  quit
    //Write a newline - call the output label
wnl()        do output($char(13,10))  quit
    //Write a string - call the output label
wstr(s)      do output(s)  quit
    //Write a tab - call the output label
wtab(s)      do output($char(9))  quit
    //Output label - this is where you would handle what you actually want to do.
    //  in our case, we want to write to myStream
output(s)    do myStream.Write(s)  quit
 
 Q
]]></Implementation>
</Method>

<Method name="PatientRoutingSlipSingleM">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	K ^TMP("SDRS",$J)	
 	NEW BSDT,CLN,IEN,BSDMOD2
 	;
 	; find all appts for patient
 	I BSDMODE="CR" S BSDMOD2="CR",BSDMODE=""
 	S BSDT=SDATE\1
 	F  S BSDT=$O(^DPT(DFN,"S",BSDT)) Q:'BSDT  Q:(BSDT\1>SDATE)  D
 	. S CLN=+$G(^DPT(DFN,"S",BSDT,0)) Q:'CLN   ;clinic ien
 	. S IEN=0 F  S IEN=$O(^SC(CLN,"S",BSDT,1,IEN)) Q:'IEN  Q:$P($G(^SC(CLN,"S",BSDT,1,IEN,0)),U)=DFN
 	. Q:'IEN                                   ;appt ien in ^sc
 	. D FIND^BSDROUT0(CLN,BSDT,IEN,ORDER,BSDMODE)
 	I $D(BSDMOD2) S BSDMODE=BSDMOD2
 	;
 	; find all chart requests for patient
 	S CLN=0 F  S CLN=$O(^SC("AIHSCR",DFN,CLN)) Q:'CLN  D
 	. S BSDT=(SDATE\1)-.0001
 	. F  S BSDT=$O(^SC("AIHSCR",DFN,CLN,BSDT)) Q:'BSDT  D
 	.. D CRSET^BSDROUT2(CLN,BSDT,DFN,ORDER)
 	;
 	; if no future appts, set something so RS will print
 	I '$D(^TMP("SDRS",$J)) S ^TMP("SDRS",$J,$$GET1^DIQ(2,DFN,.01),$$TERM^BSDROUT(DFN),DFN)=""
 	;
 	D PRINT^BSDROUT1(ORDER,SDATE)
]]></Implementation>
</Method>
</Class>


<Class name="BMW.BSF.SP.AgGetPatientWellnessHandout">
<Super>%RegisteredObject</Super>
<TimeChanged>65189,46738.253268</TimeChanged>
<TimeCreated>63340,58468.112044</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="PatientWellnessHandoutQ">
<Type>%SQLQuery</Type>
<FormalSpec>Patient:%Text,HST:%Text,Facility:%Text,UserId:%Text</FormalSpec>
<SqlName>AG_GetPatientWellnessHandoutQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	
	Select AG_GetPatientWellnessHandoutM(:Patient,:HST,IEN,:Facility,:UserId) As Data from bmw.icd_diagnosis where ien<=(Select AG_GetPatientWellnessHandoutM(:Patient,:HST,0,:Facility,:UserId))]]></SqlQuery>
</Query>

<Method name="PatientWellnessHandoutM">
<ClassMethod>1</ClassMethod>
<FormalSpec>Patient:%Text,HST:%Text,K:%Integer,Facility:%Text,UserId:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_GetPatientWellnessHandoutM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	
	;call BMW_BSF_SP.AG_GetPatientWellnessHandoutQ('26488','1','2906') 
	I +$G(Patient)'>0 Q ""
	I +$G(Facility)'>0 Q ""
	I +$G(UserId)'>0 Q ""
	I (($G(DUZ(2))'=Facility)!(+$G(DUZ)'=UserId)) D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserId,Facility)
 	I $G(HST)="" S HST=$$GET1^DIQ(9001000,Facility_",",.16,"I")
	I $G(HST)="" Q ""	
 	I $G(K)=0  D 	
	. K ^TMP($J,"APCHPWH") 
 	. S DFN=$G(Patient) 
 	. s UserTimeOut=+DTIME,DTIME=.0001
 	. D ^%ZIS ;"|TNT|Cisco04394:58997|"_$J
 	. s DTIME=+UserTimeOut		
 	. D EP^APCHPWH1(Patient,HST,1) 	
 	. S K=0 	
 	Q $G(^TMP($J,"APCHPWH",$G(K)))
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.AgGetPatienF9B6D</DataLocation>
<DefaultData>AgGetPatientWellnessHandoutDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.AgGetPatienF9B6D</IdLocation>
<IndexLocation>^BMW.BSF.SP.AgGetPatienF9B6I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.AgGetPatienF9B6S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="AgGetPatientWellnessHandoutDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.AgPatientRegisterEvent">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,40362.566883</TimeChanged>
<TimeCreated>63340,56643.320849</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="PatientRegisterEventQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientId:%Integer</FormalSpec>
<SqlName>AG_PatientRegisterEventQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	select (AG_PatientRegisterEventM(:PatientId)) As Result</SqlQuery>
</Query>

<Method name="PatientRegisterEventM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%Integer</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_PatientRegisterEventM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I +$G(DUZ)<1 Q "0^Session var 'DUZ' not defined"
	I +$G(DUZ(2))<1 Q "0^Session vars 'DUZ(2)' not defined"
	I +$G(PatientId)<1 Q "0^PatientId not defined"
	S DFN=PatientId,AGPATDFN=PatientId

	;;copied from "AGGPTADD" ADD patient Gui 1.0 application routine
 	S ^AGPATCH($$NOW^XLFDT(),DUZ(2),DFN)="NEW"
	;; Copy END..
	
	;H 2
 	;
 	;BEGIN **MPI** ADD PATIENT TO MPI AG*7.2 IHS/SD/TPF 5/6/2010  ;MAYBE USE THE VTQ AS A QUERY 'SEEDER'
 	;D CREATMSG^AGMPIHLO(DFN,"VTQ",,.SUCCESS)   ;IF SUCCESSFUL THEN MPI ICN HAS BEEN ADDED TO THE PATIENTS FILE
 	;I 'SUCCESS D
 	;.S AGERROR="MPI DFN="_DFN_" :: "_"ERROR WHEN CREATING VTQ EXACT MATCH QUERY"
 	;.D NOTIF^AGMPIHLO(DFN,AGERROR)
 	N X,SUCCESS,DIC,INDA
 	S X="AGMPIHLO" X ^%ZOSF("TEST") I $T D
 	.D CREATMSG^AGMPIHLO(DFN,"A28",,.SUCCESS)
 	.;W !!,"A request to add this patient has been sent to the MPI" H 2
 	.I 'SUCCESS D NOTIF^AGMPIHLO(DFN,"Unable to create A28 to add patient to MPI from AGMPHLVQ")
 	.S X="AG REGISTER A PATIENT",DIC=101,INDA=DFN
 	.D EN^XQOR
 	;END **MPI**
 	;
 	;BEGIN NEW CODE IHS/SD/TPF 5/2/2006 AG*7.1*2 PAGE 12 ITEM 3
 	N AGERR
 	I $$AGE^AGUTILS(AGPATDFN)<3 D AUTOADD^BIPATE(AGPATDFN,DUZ(2),.AGERR,"")
 	;END NEW CODE
 	;HL7 INTERFACE -- PUT PATIENT DFN INTO TEMP ARRAY FOR HL7 CALL
 	;;S ^XTMP("AGHL7",DUZ(2),DFN)=DFN  ;AG*7.1*9 - Added DUZ(2) subscript
 	;;S ^XTMP("AGHL7AG",DUZ(2),DFN,"REGISTER")=""  ;AG*7.1*9 - Added DUZ(2) subscript
 	
 	I '$$PATCH^XPDUTL("AG*7.1*9") D
 	. S ^XTMP("AGHL7",DFN)=DFN
 	. S ^XTMP("AGHL7AG",DFN,"REGISTER")=""
 	I $$PATCH^XPDUTL("AG*7.1*9") D
 	. S ^XTMP("AGHL7",DUZ(2),DFN)=DFN
 	. S ^XTMP("AGHL7AG",DUZ(2),DFN,"REGISTER")="" 	
 	D AG^AGHL7
 	Q "1" ;;always success
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.AgPatientRe50EFD</DataLocation>
<DefaultData>AgPatientRegisterEventDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.AgPatientRe50EFD</IdLocation>
<IndexLocation>^BMW.BSF.SP.AgPatientRe50EFI</IndexLocation>
<StreamLocation>^BMW.BSF.SP.AgPatientRe50EFS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="AgPatientRegisterEventDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.AgPatientUpdateEvent">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,40335.063889</TimeChanged>
<TimeCreated>63340,56292.945126</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="PatientUpdateEventQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientId:%Integer</FormalSpec>
<SqlName>AG_PatientUpdateEventQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	select (AG_PatientUpdateEventM(:PatientId)) As Result</SqlQuery>
</Query>

<Method name="PatientUpdateEventM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%Integer</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_PatientUpdateEventM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I +$G(DUZ)<1 Q "0^Session var 'DUZ' not defined"
	I +$G(DUZ(2))<1 Q "0^Session var 'DUZ(2)' not defined"
	I +$G(PatientId)<1 Q "0^PatientId not defined"
	s DFN=PatientId
	D UPDATE1^AGED(DUZ(2),DFN,,)
	D AG^AGHL7
	Q "1" ;;always success
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.AgPatientUpE225D</DataLocation>
<DefaultData>AgPatientUpdateEventDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.AgPatientUpE225D</IdLocation>
<IndexLocation>^BMW.BSF.SP.AgPatientUpE225I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.AgPatientUpE225S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="AgPatientUpdateEventDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.AgSearchPatient">
<Super>%RegisteredObject</Super>
<TimeChanged>65484,47610.47818</TimeChanged>
<TimeCreated>63340,55839.406676</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="SearchPatientQ">
<Type>%SQLQuery</Type>
<FormalSpec>Name:%Text="",SSN:%Text="",DOB:%Text="",Gender:%Text="",EligibilityStatus:%Text="",HRN:%Text="",PhoneNumber:%Text="",FacilityId:%Integer,Take:%Integer,Skip:%Integer,InOrOutPatient:%Integer</FormalSpec>
<SqlName>AG_SearchPatientQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	select va.ien as ROWID,(AG_GetPatientHrnM(va.IEN,:FacilityId,'1')) as HRN,
	(AG_GetPatientHrnM(va.IEN,:FacilityId,'2')) as HRN_STATUS, ihs.Preferred_name, ihs.name_name as Actual_Name,
	(AG_GetPatientSearchStringResultNameM(va.IEN,:Name,ihs.name_name)) as NAME,
	(case when (Select Count(1) From BMW.PRF_ASSIGNMENT Where patient_name=va.ien AND Status = 'ACTIVE') > 0 
	then 1 else 0 end) as HAS_FLAGS,
	(case when (Select Count(1) From BMW.DG_SECURITY_LOG Where patient_name=va.ien AND SECURITY_LEVEL = 'SENSITIVE') 
	> 0 then 1 else 0 end) as SECURITY_LEVEL,
	(CASE WHEN (select count(1) from BMW.restricted_health_information rhi where Patient=va.ien and STATUS_CODE = 'APPROVED')
	>0 then 1 else 0 END) AS RHI,
	( select meaning from BMW.PATIENT_SOC_ELIGIBILITY_STATUS where CODE=ihs.ELIGIBILITY_STATUS) AS ELIGIBILITY_STATUS,
	VA.SEX AS SEX_ID , ihs.sex SEX,va.DATE_OF_BIRTH, va.DATE_OF_DEATH,va.SOCIAL_SECURITY_NUMBER, ihs.PRINTABLE_SSN, ihs.DATE_OF_LAST_REG__UPDATE, 
	ihs.USERLAST_UPDATE_NAME as LAST_UPDATED_BY, ihs.SSN_VERIFICATION_STATUS->Description AS SSN_VERIFICATION_STATUS, ihs.PRIMARY_CARE_PROVIDER_NAME AS PRIMARY_CARE_PROVIDER, 
	 (CASE WHEN va.VETERAN_YN='YES' THEN '1' WHEN  va.VETERAN_YN='NO' THEN '0' ELSE NULL END) as IS_VETERAN , 
	 va.PHONE_NUMBER_RESIDENCE as RESIDENCE_PHONE, va.CONDITION, va.Ward_Location,
 va.Current_Admission from BMW.patient ihs,BMW.va_patient va where va.rowid= ihs.name AND va.ien %INLIST 
 (AG_GetPatientSearchIensM(:Name,:SSN,:DOB,:Gender,:EligibilityStatus,:HRN,:PhoneNumber,:FacilityId,:Take,:Skip,:InOrOutPatient)) 
 order by NAME]]></SqlQuery>
</Query>

<Method name="GetPatientSearchIensM">
<ClassMethod>1</ClassMethod>
<FormalSpec>Name:%Text,SSN:%Text,DOB:%Text,Gender:%Text,EligibilityStatus:%Text,HRN:%Text,PhoneNumber:%Text,FacilityId:%Integer,Take:%Integer,Skip:%Integer,InOrOutPatient:%Integer</FormalSpec>
<ReturnType>%List</ReturnType>
<SqlName>AG_GetPatientSearchIensM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	SET myquery="select distinct (CAST (IEN AS INT)) as IEN from bmw.VA_PATIENT"
	I (($G(Name)'="")!($G(SSN)'="")!($G(DOB)'="")!($G(Gender)'="")!($G(EligibilityStatus)'="")!($G(HRN)'="")!($G(PhoneNumber)'="")!(InOrOutPatient'=0)) D
	. S RS=" Where 1=1 "
	. I $G(Name)'="" S RS=RS_" AND name like '"_Name_"%'"
	. ;I $G(Name)'="" S RS=RS_" AND (name like '"_Name_"%' OR name like '%,"_Name_"%')"
	. I $G(SSN)'="" S RS=RS_" AND SOCIAL_SECURITY_NUMBER='"_SSN_"'"
	. I $G(DOB)'="" S RS=RS_" AND DATE_OF_BIRTH='"_DOB_"'" D
 	. I $G(Gender)'="" S RS=RS_" AND SEX='"_Gender_"'"
	. I $G(EligibilityStatus)'="" S RS=RS_" AND IEN IN (SELECT IEN from bmw.patient where ELIGIBILITY_STATUS='"_EligibilityStatus_"')"
	. I (($G(HRN)'="")&($G(FacilityId)>0)) S RS=RS_" AND IEN = (SELECT PATIENT from bmw.Health_Record_No__9000001c9000001_41 where HEALTH_RECORD_FAC="_FacilityId_" AND HEALTH_RECORD_NO_='"_HRN_"')"
	. I $G(PhoneNumber)'="" S RS=RS_" AND Phone_Number_Residence='"_PhoneNumber_"'"
	. I $G(InOrOutPatient)=1 S RS=RS_" AND Current_Admission_DateTime is not null AND Current_Admission->Ward_Location->Division->Institution_file_pointer="_FacilityId  ;; fetch only inpatients
	. I $G(InOrOutPatient)=2 S RS=RS_" AND Current_Admission_DateTime is null"      ;; fetch only out patients 
	. S myquery=myquery_RS
	S myquery=myquery_" Order by NAME"
	
  	SET rset=##class(%ScrollableResultSet).%New()
  	
  	SET sc=rset.Prepare(myquery)
  	SET sc=rset.Execute()  	
  	I sc'=1 Q "error"
  	
  	;I $G(Take)>0 SET rset.MaxRows=Take  ;;how much records to take/return
  	I $G(Skip)>0 SET rset.CurrRow=Skip  ;; how many records to skip.. before start 'taking'
  
  	set g="",cnt=1
	WHILE rset.Next() {
     set g=g_rset.Data("IEN")_",",cnt=cnt+1
     I cnt>Take Q
     }
    i $G(g)'="" S g=$EXTRACT(g,1,$L(g)-1)
    i $L(g)<1 Q ""
  	s g=$LISTFROMSTRING(g)
  	Q g
]]></Implementation>
</Method>

<Method name="GetPatientHrnM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%Text,FacilityId:%Integer,getHRNorStatus:%Integer</FormalSpec>
<ReturnType>%Text</ReturnType>
<SqlName>AG_GetPatientHrnM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	s RS=""
	I FacilityId'>0 Q ""
	I getHRNorStatus=1 s RS=$$GET1^DIQ(9000001.41,FacilityId_","_PatientId_",",.02)
	I getHRNorStatus=2 D
	. S RS=$$GET1^DIQ(9000001.41,FacilityId_","_PatientId_",",.05,"I")
	.; I getHRNorStatus=2 D
	. I RS="I" s RS="Inactive"
	. I RS="D" s RS="Deleted"
	. I RS="M" s RS="Merged"	
	Q RS
]]></Implementation>
</Method>

<Method name="GetPatientSearchStringResultNameM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%BigInt,NameSearchString:%Text,ActualName:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_GetPatientSearchStringResultNameM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	
	;N Aname,PreferredName
	S Result=""
	I $L(NameSearchString)<1 Q ActualName
	I ActualName[NameSearchString S Result=ActualName
	;S NameSearchString=$REPLACE(NameSearchString,"''","'")
	;s Aname=NameSearchString_"%"
	
	;Q $G(Aname)
	
	//If searhString matched on Alias. return Alias
	;#SQLCOMPILE SELECT=ODBC


	/*I $G(Result)=""
	{
		##sql(SELECT ALIAS INTO :Result FROM BMW.ALIAS_2c2_01 Where va_patient=:PatientId AND  ALIAS like :Aname)

	}
    ;I $G(AliasName)'="" S Result=$G(AliasName)
    ;Q $G(Result)
  	*/
  	
  	//Using LIST^DIC cause embedded SQL LIKE would not work as it should in HS2017
  	
  	I $G(Result)=""
  	{
  		K OUT
  		D LIST^DIC(2.01,","_PatientId_",","","PQ",1,,NameSearchString,"B","",,"OUT")
  		I $P(OUT("DILIST",0),"^",1)>0 S Result=$P(OUT("DILIST",1,0),"^",2)
  		
  	}
  	
  	//If not a hit on Alias then must have hit on preferredName
	I $G(Result)=""
	{
		##sql(SELECT Preferred_Name INTO :PreferredName FROM BMW.PATIENT WHERE IEN=:PatientId )    
		
		S Result= $P(NameSearchString,",",1)_","_$G(PreferredName)
	}
    Q $G(Result)
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.AgSearchPatientD</DataLocation>
<DefaultData>AgSearchPatientDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.AgSearchPatientD</IdLocation>
<IndexLocation>^BMW.BSF.SP.AgSearchPatientI</IndexLocation>
<StreamLocation>^BMW.BSF.SP.AgSearchPatientS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="AgSearchPatientDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.AgSetPatientDateOfDeath">
<Super>%RegisteredObject</Super>
<TimeChanged>63845,51283.728965</TimeChanged>
<TimeCreated>63340,56070.005309</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="SetPatientDateOfDeathQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientId:%Integer,DateOfDeath:%String,State:%String,Certificate:%String</FormalSpec>
<SqlName>AG_SetPatientDateOfDeathQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	select (AG_SetPatientDateOfDeathM(:PatientId,:DateOfDeath,:State,:Certificate)) As Result</SqlQuery>
</Query>

<Method name="SetPatientDateOfDeathM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%Integer,DateOfDeath:%String,State:%String,Certificate:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_SetPatientDateOfDeathM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	s Result="1"
	I $G(DUZ)'>0 D ##class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(1,2906)
	S DFN=PatientId
	//S DateOfDeath=##class(FilemanTimeStamp).
	s Result=..SetDod(PatientId,DateOfDeath)
	I ((L($G(CauseOfDeath)>0))!($L($G(DateOfDeath)>0))!($L($G(Certificate)>0))) S Result=..SetDodAddiotnalInfo(PatientId,State,Certificate)
	D ##class(BMW.BSF.SP.AgPatientUpdateEvent).PatientUpdateEventM(PatientId)
	Q Result
]]></Implementation>
</Method>

<Method name="SetDod">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%Integer,DateOfDeath:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	new:'$data(DIC) DIC set DIC(0)="" new:'$data(DUZ) DISYS,DT,DTIME,DUZ new FDA,IENS,IO,U
	s IENS=PatientId_",",DFN=PatientId,AGPATDFN=PatientId
	S FDA(2,IENS,.351)=DateOfDeath

	d:$d(FDA) UPDATE^DIE("","FDA",,"%FMERR(5)") s %SkipFiling=1
	i $d(%FMERR(5,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(5)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }
	I 'DT S DT=$$DT^XLFDT
	I $D(^DPT(DFN,.35)) S $P(^AUPNPAT(DFN,11),U,29)=DT
	
	;BEGIN NEW CODE IHS/SD/TPF 5/2/2006 AG*7.1*2 PAGE 12 ITEM 3
 	I $$AGE^AGUTILS(DFN)<3,($$DECEASED^AGEDERR2(AGPATDFN)) D AUTOADD^BIPATE(DFN,DUZ(2),.AGERR,$P($G(^DPT(DFN,.35)),U))
 	;END NEW CODE
	
	QUIT
]]></Implementation>
</Method>

<Method name="SetDodAddiotnalInfo">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%Integer,State:%String,Certificate:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	new:'$data(DIC) DIC set DIC(0)="" new:'$data(DUZ) DISYS,DT,DTIME,DUZ new FDA,IENS,IO,U
	s IENS=PatientId_",",DFN=PatientId
	
	//I $G(CauseOfDeath)'="" S FDA(9000001,PatientId,1114)=CauseOfDeath
	I $G(DateOfDeath)'="" S FDA(9000001,IENS,1115)=DateOfDeath
	I $G(Certificate)'="" S FDA(9000001,IENS,1116)=Certificate

	d:$d(FDA) UPDATE^DIE("E","FDA",,"%FMERR(5)") s %SkipFiling=1
	i $d(%FMERR(5,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(5)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }

	QUIT
]]></Implementation>
</Method>
</Class>


<Class name="BMW.BSF.SP.AgSetPatientGender">
<Super>%RegisteredObject</Super>
<TimeChanged>65386,45946.937575</TimeChanged>
<TimeCreated>63340,56070.005309</TimeCreated>

<Parameter name="BprmVersion">
<Default>3.0.0</Default>
</Parameter>

<UDLText name="T">
<Content><![CDATA[
// UPDATES PATIENT-SPECIFIC ELIGIBILITY SEX/GENDER FIELDS TO PATIENT'S SEX - MEDICARE/MEDICAID/RAILROAD ELIGIBLE FILES ARE ASSOCIATED WITH A PATIENT

]]></Content>
</UDLText>

<UDLText name="T">
<Content><![CDATA[
// takes PatientId and replicates, whatever is in the patient file, to above mentioned insurance files

]]></Content>
</UDLText>

<Query name="UpdatePatientGenderQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientId:%Integer</FormalSpec>
<SqlName>AG_SetPatientGenderQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	select (AG_SetPatientGenderM(:PatientId)) As Result</SqlQuery>
</Query>

<UDLText name="T">
<Content><![CDATA[
// MU2- update patients sex in all related files (insurance etc)

]]></Content>
</UDLText>

<Method name="UpdatePatientGenderM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%Integer</FormalSpec>
<ReturnType>%Text</ReturnType>
<SqlName>AG_SetPatientGenderM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	D SEXELIG^AGUTL(PatientId)
	Q "1" ;;always success
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.AgSetPatientGenderD</DataLocation>
<DefaultData>AgSetPatientGenderDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.AgSetPatientGenderD</IdLocation>
<IndexLocation>^BMW.BSF.SP.AgSetPatientGenderI</IndexLocation>
<StreamLocation>^BMW.BSF.SP.AgSetPatientGenderS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="AgSetPatientGenderDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.AgSetPatientGenderIdentity">
<Super>%RegisteredObject</Super>
<TimeChanged>65428,47360.065608</TimeChanged>
<TimeCreated>65386,47796.680563</TimeCreated>

<Parameter name="BprmVersion">
<Default>3.8.0</Default>
</Parameter>

<UDLText name="T">
<Content><![CDATA[
// UPDATES PATIENT LEGAL GENDER - Part of CHIT+SOGI initiative

]]></Content>
</UDLText>

<UDLText name="T">
<Content><![CDATA[
/* Set LEGAL SEX for a patient

 	;  PatientIen: Patient IEN
 	;  LegalSex :  Legal Sex
 	;  Source: Source
 	;  EntryDate:  Entry date (defaults to TODAY)
 	;
 	; Returned Result
 	;  Successful  : "1^SUB_IEN^LEGAL_SEX_int^SOURCE_int"
 	;  Unsuccessful: "-1^0^ERROR MESSAGE"
 */
]]></Content>
</UDLText>

<Query name="SetPatientGenderIdentityQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientId:%BigInt,GenderIdentity:%String,Other:%String,EntryDate:%String</FormalSpec>
<SqlName>AG_SetPatientGenderIdentityQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	select (AG_SetPatientGenderIdentityM(:PatientId,:GenderIdentity,:Other,:EntryDate)) As Result</SqlQuery>
</Query>

<Method name="SetPatientGenderIdentityM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%BigInt,GenderIdentity:%String,Other:%String,EntryDate:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_SetPatientGenderIdentityM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I $G(PatientId)<1 Q "0^Patient IEN can not be null"
 	; Type: Extrinsic Function
 	; Format: $$SETGI^AUPNSOGI(PAT,VAL,OTH,EDT)
 	; Function: Set the Date (#.01), Gender Identity (#1), and Other (#2) fields of Gender Identity sub-file (#9000001.9401) for a patient.
 	;   If the VAL parameter is '@', this will delete the entry stored on the EDT parameter date in the Gender Identity sub-file.
 	;   If the VAL parameter does include the 'OTHER' Gender Identity entry, this will delete the value stored in the Other field.
 	;   Return value will be '0^ERROR MESSAGE' for errors, '@' for deletions, or the result of $$GETGI^AUPNSOGI(PAT,"I").
 	; Input Parameters:
 	;   PAT: Patient IEN
 	;   VAL: List of Gender Identities (Internal) (^ delimiter) (@ to delete)
 	;   OTH: Free-text Other
 	;   EDT: Entry date (defaults to TODAY)
 	; Returned Values:
 	;   Successful  : @ or IEN^ENTRY_int^ENTRY_int^etc^OTHER
 	;   Unsuccessful: 0^ERROR MESSAGE
 	
 	N Result
 		
	S Result=$$SETGI^AUPNSOGI(PatientId,GenderIdentity,Other,EntryDate)
	Q Result
]]></Implementation>
</Method>
</Class>


<Class name="BMW.BSF.SP.AgSetPatientInsuranceAddCategorySequence">
<Super>%RegisteredObject</Super>
<TimeChanged>64980,68444.070409</TimeChanged>
<TimeCreated>63428,56681.043528</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="PatientInsuranceAddCategorySequenceQ">
<Type>%SQLQuery</Type>
<FormalSpec>patient:%Text,insurer:%Text,category:%Text,effecPriorityDate:%Text,elibStart:%Text,eligbEnd:%Text,person:%Text,priority:%Text,coverage:%Text,policyNmber:%Text,policyHolder:%Text,plan:%Text,recordPtr:%Text,deletePrev:%Text</FormalSpec>
<SqlName>AG_PatientInsuranceAddCategorySequenceQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT (AG_PatientInsuranceAddCategorySequenceM(:patient,:insurer,:category,:effecPriorityDate,:elibStart,:eligbEnd,:person,:priority,:coverage,:policyNmber,:policyHolder,:plan,:recordPtr,:deletePrev)) as Result</SqlQuery>
</Query>

<Method name="PatientInsuranceAddCategorySequenceM">
<ClassMethod>1</ClassMethod>
<FormalSpec>patient:%Text,insurer:%Text,category:%Text,effecPriorityDate:%Text,elibStart:%Text,eligbEnd:%Text,person:%Text,priority:%Text,coverage:%Text,policyNmber:%Text,policyHolder:%Text,plan:%Text,recordPtr:%Text,deletePrev:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_PatientInsuranceAddCategorySequenceM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I ($G(patient)=""),($G(insurer)=""),($G(effecPriorityDate)=""),($G(category)="") Q 0	
	N FDA,FDAIENP,ERR1,RSLT,ERROR,FILE,OUT,MSG,INDEX
	S EXST=1 ;$$FIND1^DIC(40.5,"","BX",HolidayDate,"","","ERROR")
	I $G(deletePrev)>0 {	
	D DT^DILF("TS",effecPriorityDate,.effecdt,,"")
	S SCR="I (($P($G("_"^"_"(0)),""^"",4))="""_$G(category)_""") & (($P($G("_"^"_"(0)),""^"",6))="""_$G(effecdt)_""")"
	;D LIST^DIC(9000035,"","@;.01","B",,,,"",SCR,"","OUT","MSG")
	D FIND^DIC(9000035,"","@;.01","QX",patient,,"C",SCR,,"OUT","MSG")
	S INDEX=$O(OUT("DILIST",2,""))
	I +INDEX>0 F  D  Q:(+INDEX'>0)
	.S CPIEN=$G(OUT("DILIST",2,INDEX))
	.N SQLCODE,%ROWCOUNT,%ROWID
	.&sql(DELETE from bmw.category_prioritizing WHERE IEN=:CPIEN)
	.S INDEX=$O(OUT("DILIST",2,INDEX))  	
	}	
 	S FILE=9000035
 	S DIC="^AUPNICP(",DLAYGO=FILE,DIC(0)="AEQML" 	
 	S FDA(FILE,"+1,",.01)=$$NOW^XLFDT
 	S FDA(FILE,"+1,",.02)=patient
 	S FDA(FILE,"+1,",.03)=insurer
 	I $G(category)'="" S FDA(FILE,"+1,",.04)=category
 	I $G(priority)'="" S FDA(FILE,"+1,",.05)=priority
 	D DT^DILF("TS",effecPriorityDate,.effecPriorityDate,,"")
 	S FDA(FILE,"+1,",.06)=effecPriorityDate
 	I $G(coverage)'="" S FDA(FILE,"+1,",.07)=coverage
 	I $G(elibStart)'=""  D
 	. D DT^DILF("TS",elibStart,.elibStart,,"")
 	. S FDA(FILE,"+1,",.08)=elibStart
 	I $G(eligbEnd)'=""  D
 	. D DT^DILF("TS",eligbEnd,.eligbEnd,,"")
 	. S FDA(FILE,"+1,",.09)=eligbEnd
 	I $G(policyNmber)'="" S FDA(FILE,"+1,",.11)=policyNmber
 	I $G(plan)'="" S FDA(FILE,"+1,",.12)=plan
 	I $G(policyHolder)'="" S FDA(FILE,"+1,",.13)=policyHolder
 	I $G(person)'="" S FDA(FILE,"+1,",.14)=person
 	I $G(recordPtr)'="" S FDA(FILE,"+1,",.15)=recordPtr
 	D UPDATE^DIE("","FDA","FDAIENP","ERR1")
 	I $D(ERR1("DIERR")) S RSLT="~`0^Error adding Sequence: "_$G(ERR1("DIERR","1","TEXT",1)) Q RSLT
	I $D(FDAIENP(1)) S RSLT=$G(FDAIENP(1)) Q RSLT
	;}
	Q "0"
]]></Implementation>
</Method>
</Class>


<Class name="BMW.BSF.SP.AgSetPatientInsuranceRemoveCategorySequence">
<Super>%RegisteredObject</Super>
<TimeChanged>64980,72868.194684</TimeChanged>
<TimeCreated>63428,56719.298598</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="PatientInsuranceRemoveCategorySequenceQ">
<Type>%SQLQuery</Type>
<FormalSpec>patient:%Text,category:%Text,effecPriorityDate:%Text</FormalSpec>
<SqlName>AG_PatientInsuranceRemoveCategorySequenceQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT (AG_PatientInsuranceRemoveCategorySequenceM(:patient,:category,:effecPriorityDate)) as Result</SqlQuery>
</Query>

<Method name="PatientInsuranceRemoveCategorySequenceM">
<ClassMethod>1</ClassMethod>
<FormalSpec>patient:%Text,category:%Text,effecPriorityDate:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_PatientInsuranceRemoveCategorySequenceM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I ($G(patient)=""),($G(effecPriorityDate)=""),($G(category)="") Q 0			
	D DT^DILF("TS",effecPriorityDate,.effecdt,,"")
	N FND,CPIEN,SCR,INDEX,OUT,MSG,DIK,DA ;GDIT/IHS/FS: Variables were not initialized
	S SCR="I (($P($G("_"^"_"(0)),""^"",4))="""_$G(category)_""") & (($P($G("_"^"_"(0)),""^"",6))="""_$G(effecdt)_""")"
	D FIND^DIC(9000035,"","@;.01","QX",patient,,"C",SCR,,"OUT","MSG")
	S INDEX=$O(OUT("DILIST",2,""))
	;GDIT/IHS/FS: Replacing SQL deletion with fileman
	I +INDEX>0 F  D  Q:(+INDEX'>0)
	.S CPIEN=$G(OUT("DILIST",2,INDEX))
	.;N SQLCODE,%ROWCOUNT,%ROWID
	.;&sql(DELETE from bmw.category_prioritizing WHERE IEN=:CPIEN)
	.;Delete entry
 	. S FND="",DA=CPIEN,DIK="^AUPNICP(" D ^DIK
 	. S FND=1
 	.;
	.S INDEX=$O(OUT("DILIST",2,INDEX))
	I 'FND Q "0"		 
	Q "1"
]]></Implementation>
</Method>
</Class>


<Class name="BMW.BSF.SP.AgSetPatientLegalSex">
<Super>%RegisteredObject</Super>
<TimeChanged>65455,49587.205802</TimeChanged>
<TimeCreated>65386,47796.680563</TimeCreated>

<Parameter name="BprmVersion">
<Default>3.8.0</Default>
</Parameter>

<UDLText name="T">
<Content><![CDATA[
// UPDATES PATIENT LEGAL GENDER - Part of CHIT+SOGI initiative

]]></Content>
</UDLText>

<UDLText name="T">
<Content><![CDATA[
/* Set LEGAL SEX for a patient

 	;  PatientIen: Patient IEN
 	;  LegalSex :  Legal Sex
 	;  Source: Source
 	;  EntryDate:  Entry date (defaults to TODAY)
 	;
 	; Returned Result
 	;  Successful  : "1^SUB_IEN^LEGAL_SEX_int^SOURCE_int"
 	;  Unsuccessful: "-1^0^ERROR MESSAGE"
 */
]]></Content>
</UDLText>

<Query name="SetPatientLegalSexQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientId:%BigInt,LegalSex:%String,Source:%String,EntryDate:%String,DateEntered:%String</FormalSpec>
<SqlName>AG_SetPatientLegalSexQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	select (AG_SetPatientLegalSexM(:PatientId,:LegalSex,:Source,:EntryDate,:DateEntered)) As Result</SqlQuery>
</Query>

<Method name="SetPatientLegalSexM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%BigInt,LegalSex:%String,Source:%String,EntryDate:%String,DateEntered:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_SetPatientLegalSexM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I $G(PatientId)<1,'$G(LegalSex) Q "-1"
 	; Call: $$SETLSEX^AUPNSOGI(PAT,VAL,SRC,EDT)
 	;  PAT: Patient IEN
 	;  VAL: Legal Sex
 	;  SRC: Source
 	;  EDT: Entry date (defaults to TODAY)
 	;
 	; Returned value:
 	;  Successful  : SUB_IEN^LEGAL_SEX_int^SOURCE_int
 	;  Unsuccessful: 0^ERROR MESSAGE
 	
 	N Result
 		
	S Result=$$SETLSEX^AUPNSOGI(PatientId,LegalSex,Source,EntryDate,DateEntered)
	;I +$G(Result)>0 S Result="1^"_Result
	;E  S Result="-1^"_Result
	Q Result
]]></Implementation>
</Method>
</Class>


<Class name="BMW.BSF.SP.AgSetPatientMbi">
<Super>%RegisteredObject</Super>
<TimeChanged>64721,52345.483868</TimeChanged>
<TimeCreated>63340,57173.944403</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.5</Default>
</Parameter>

<UDLText name="T">
<Content><![CDATA[
/*	BMW_BSF_SP.AG_SetPatientMbiQ(PatientId,Mbi,,Source)

 	; Function: Add an MBI for a patient on the specified effective date
 	; Call: $$ADDMBI^AUPNMBI(PATIEN,EFFDATE,MBI,SOURCE)
 	; Returned value:
 	;  Successful: EFF_DATE(? - as IEN in MBI multiple)
 	;  Unsuccessful: 0 (zero)
	*/
]]></Content>
</UDLText>

<Query name="AgSetPatientMbiQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientId:%BigInt,Mbi:%String,Source:%String</FormalSpec>
<SqlName>AG_SetPatientMbiQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	select (AG_SetPatientMbiM(:PatientId,:Mbi,:Format)) As Result</SqlQuery>
</Query>

<UDLText name="T">
<Content><![CDATA[
/* BMW_BSF_SP.GetPatientMbiQ ::	Return values (for Result) = 
	   -1 ; -RPC/API failed
       Required variable not defined
   
 */
]]></Content>
</UDLText>

<Method name="AgSetPatientMbiM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%BigInt,Mbi:%String,Source:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_SetPatientMbiM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I $G(PatientId)<1,$G(Mbi)<1,$G(Source)<1 Q "-1"
	//D ..debugUtil("TrackPatRecAccess", PatientId, "Start",FacilityIen,"")
	//D ##class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserIen,FacilityIen)	
	//D ##class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(1,100)	
	s RS=""
	
	//check AG and AUPN patches
	&sql(select count(IEN) INTO :CNT from bmw.build where name = 'AUPN*99.1*26' or name = 'AG*7.1*13')
	I $G(CNT)'=2 Q 0
	
	If $G(DUZ)'>0 Q "-1^UserIen - DUZ value not preset"
	If $G(DUZ(2))'>0 Q "-1^FacilityId - DUZ(2) value not preset"
	
	s mbicheck=$$ISMBI^AGUTL(Mbi)
	I $G(mbicheck)=0 Q "-1^incorrect mbi format"
	
 	; Function: Add an MBI for a patient on the specified effective date
 	; Call: $$ADDMBI^AUPNMBI(PATIEN,EFFDATE,MBI,SOURCE)
 	; Returned value:
 	;  Successful: EFF_DATE(? - as IEN in MBI multiple)
 	;  Unsuccessful: 0 (zero)
 	s RS=$$ADDMBI^AUPNMBI(PatientId,$$DT^XLFDT, Mbi,Source)
 	
	Q RS
]]></Implementation>
</Method>

<Method name="debugUtil">
<ClassMethod>1</ClassMethod>
<FormalSpec>module:%Text,PatId:%Text,Mode:%Text,location:%Text,ActionTime:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	
	S Date=$ZDT($NOW(),8,1,3)
	I +$G(PatId)>0 s ^BmwDebug($P(Date," "),$P($E(Date,10,25),":"),$P($E(Date,10,25),":",2),$P($E(Date,10,25),":",3),$J,$G(module),$G(PatId),$G(location),$G(Mode))="UserDuz: "_$G(DUZ)_" ^ActionTime: "_$G(ActionTime)_"^ Facility: "_$G(DUZ(2))
	I +$G(PatId)<1 s ^BmwDebug($P(Date," "),$P($E(Date,10,25),":"),$P($E(Date,10,25),":",2),$P($E(Date,10,25),":",3),$J,$G(module),$G(location),$G(Mode))="UserDuz: "_$G(DUZ)_" ^ActionTime: "_$G(ActionTime)_"^ Facility: "_$G(DUZ(2))
	Q
]]></Implementation>
</Method>
</Class>


<Class name="BMW.BSF.SP.AgSetPatientSexualOrientation">
<Super>%RegisteredObject</Super>
<TimeChanged>65434,50524.2343</TimeChanged>
<TimeCreated>65388,40139.948797</TimeCreated>

<Parameter name="BprmVersion">
<Default>3.8.0</Default>
</Parameter>

<UDLText name="T">
<Content><![CDATA[
// UPDATES PATIENT LEGAL GENDER - Part of CHIT+SOGI initiative

]]></Content>
</UDLText>

<UDLText name="T">
<Content><![CDATA[
/* Set LEGAL SEX for a patient

	;  PatientId: Patient IEN
 	;  SOlist: List of Sexual Orientations (Internal) (^ delimiter)
 	;  Other: Free-text Other
 	;  EntryDate:  Entry date (defaults to TODAY)
 	;
 	; Returned Result
 	;  Successful  : "1^SUB_IEN^LEGAL_SEX_int^SOURCE_int"
 	;  Unsuccessful: "-1^0^ERROR MESSAGE"
 */
]]></Content>
</UDLText>

<Query name="SetSetPatientSexualOrientationQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientId:%BigInt,SOList:%String,Other:%String,EntryDate:%String</FormalSpec>
<SqlName>AG_SetPatientSexualOrientationQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	select (AG_SetPatientSexualOrientationM(:PatientId,:SOList,:Other,:EntryDate)) As Result</SqlQuery>
</Query>

<Method name="SetSetPatientSexualOrientationM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%BigInt,SOList:%String,Other:%String,EntryDate:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_SetPatientSexualOrientationM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I $G(PatientId)<1 Q "0^Patient IEN can not be null"

 	; Call: $$SETSO^AUPNSOGI(PAT,VAL,OTH,EDT)
 	;  PAT: Patient IEN
 	;  VAL: List of Sexual Orientations (Internal) (^ delimiter)
 	;  OTH: Free-text Other
 	;  EDT: Entry date (defaults to TODAY)
 	;
 	; Returned value:
 	;  Successful  : IEN^ENTRY_int^ENTRY_int^etc
 	;  Unsuccessful: 0^ERROR MESSAGE
 	
 	N Result	
	S Result=$$SETSO^AUPNSOGI(PatientId,SOList,Other,EntryDate)
	Q Result
]]></Implementation>
</Method>
</Class>


<Class name="BMW.BSF.SP.AgSetPatientTempHRN">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,40168.009349</TimeChanged>
<TimeCreated>63340,55320.729981</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="AssignTempHRNQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientId:%BigInt,FacilityId:%Double</FormalSpec>
<SqlName>AG_SetPatientTempHRNQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
	SELECT top 1 (AG_SetPatientTempHRNM(:PatientId,:FacilityId)) as Result</SqlQuery>
</Query>

<Method name="AssignTempHRNM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%BigInt,FacilityId:%Double</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_SetPatientTempHRNM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I (PatientId'>0)!(FacilityId'>0) Q 0	
 	
 	N AGCH,AGTCH,QFL
 	S AGCH=999999
 	S AGTCH=0,QFL=0
 	F I=0:0 S AGCH=$O(^AUPNPAT("D",AGCH)) Q:AGCH=""  D  Q:QFL
 	. I $D(^AUPNPAT("D",AGCH,PatientId)) S AGTCH=AGCH,QFL=1
 	. S AGTCH=AGCH
 	;
 	I 'QFL D
 	. S:AGTCH=0 AGTCH="T00000"
 	. S AGTCH=$E(AGTCH,2,6)
 	. S AGTCH=AGTCH+1
 	. S AGTCH="T"_$E(100000+AGTCH,2,6)
 	Q:$L(AGTCH)'=6 0
 	N iens,FDA,FDAIEN 
 	S iens="+1,"_PatientId_","    
 	S FDAIEN(1)=FacilityId
 	s FDA(9000001.41,iens,.01)=FacilityId
 	s FDA(9000001.41,iens,.02)=AGTCH
 	d UPDATE^DIE("","FDA","FDAIEN","%FMERR(9000001.41)") s %SkipFiling=1
 	I '$d(%FMERR(9000001.41,"DIERR")) Q 1
 	s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(9000001.41)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q 
 	QUIT %msg
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.AgSetPatienD900D</DataLocation>
<DefaultData>AgSetPatientTempHRNDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.AgSetPatienD900D</IdLocation>
<IndexLocation>^BMW.BSF.SP.AgSetPatienD900I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.AgSetPatienD900S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="AgSetPatientTempHRNDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.AgSetSPTAccess">
<Super>%RegisteredObject</Super>
<TimeChanged>64016,60077</TimeChanged>
<TimeCreated>63426,60726.903583</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="SetSPTAccessQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientId:%BigInt,MenuOption:%String="",UserIen:%String,FacilityIen:%String</FormalSpec>
<SqlName>AG_SetSPTAccessQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	
select (AG_SetSPTAccessM(:PatientId,:MenuOption,:UserIen,:FacilityIen)) As Result</SqlQuery>
</Query>

<UDLText name="T">
<Content><![CDATA[
/*
AG_SetSPTAccessM :: Return values (for Result) =

			 1 - DG Security Log updated and/or Sensitive Record msg sent (Determined by ACTION value)
            0 - Required variable undefined
*/
]]></Content>
</UDLText>

<Method name="SetSPTAccessM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%BigInt,MenuOption:%String,UserIen:%String,FacilityIen:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_SetSPTAccessM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I $G(PatientId)<1,$G(UserIen)<1,$G(FacilityIen)<1 Q "0"
	D ##class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserIen,FacilityIen)	
	If $G(DUZ)'=$G(UserIen) Q "0"
	S RS="",MenuOption="BPRM^BPRM"
	D NOTICE^DGSEC4(.RS,PatientId,MenuOption,"")
	Q RS
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.AgSetSPTAccessD</DataLocation>
<DefaultData>AgSetSPTAccessDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.AgSetSPTAccessD</IdLocation>
<IndexLocation>^BMW.BSF.SP.AgSetSPTAccessI</IndexLocation>
<StreamLocation>^BMW.BSF.SP.AgSetSPTAccessS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="AgSetSPTAccessDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.BdgCancelMovement">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,39663.428211</TimeChanged>
<TimeCreated>63340,60972.549133</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="CancelMovementQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientId:%String,EventDate:%String,Transaction:%Integer,AdmissionId:%Text</FormalSpec>
<SqlName>BDG_CancelMovementQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
	SELECT top 1 (BDG_CancelMovementM(:PatientId,:EventDate,:Transaction,:AdmissionId)) 
	as Result</SqlQuery>
</Query>

<Method name="CancelMovementM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%String,EventDate:%String,Transaction:%Integer,AdmissionId:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>BDG_CancelMovementM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I (PatientId'>0)!(EventDate'>0)!(+AdmissionId'>0)!((Transaction'="1")&(Transaction'="3")) Q 0		
    
	S BDGR("PAT")  = PatientId
	S BDGR("TRAN") = Transaction
 	S BDGR("ACCT") ="0"
 	S BDGR("DATE")=EventDate
 	S BDGR("ADMIT DATE")=$$GET1^DIQ(405,+AdmissionId,.01,"I")
 	I Transaction=3 S BDGR("DISCHARGE DATE")=EventDate,BDGR("ADMIT DATE")=$E($G(BDGR("ADMIT DATE")),1,12)
 	s BDGR("USER")=DUZ
 	s Result=$$CANCEL^BDGAPI(.BDGR)
 	I Result'="" s Result="0^"_$P(Result,"^",2) Q Result
 	IF +$G(AdmissionId)>0 D
 	.	S DIK="^DGPM("
 	.	s DA=AdmissionId
 	.	D IX^DIK
 	.	F  S DA=$O(^DGPM("C",PatientId,DA)) Q:+$G(DA)<1  D
 	.	.	D IX^DIK
 	   
 	Q "1"
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.BdgCancelMovementD</DataLocation>
<DefaultData>BdgCancelMovementDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.BdgCancelMovementD</IdLocation>
<IndexLocation>^BMW.BSF.SP.BdgCancelMovementI</IndexLocation>
<StreamLocation>^BMW.BSF.SP.BdgCancelMovementS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="BdgCancelMovementDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.BdgGetAdsReport">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,39648.446627</TimeChanged>
<TimeCreated>63340,58468.112044</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="GetAdsReportQ">
<Type>%SQLQuery</Type>
<FormalSpec>ReportDate:%Date,Facility:%Text,UserIen:%Text</FormalSpec>
<SqlName>Bdg_GetAdsReportQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	
	Select Bdg_GetAdsReportM(:ReportDate,:Facility,:UserIen,IEN) As Data from bmw.icd_diagnosis where ien<=(Select Bdg_GetAdsReportM(:ReportDate,:Facility,:UserIen,0))]]></SqlQuery>
</Query>

<Method name="GetAdsReportM">
<ClassMethod>1</ClassMethod>
<FormalSpec>ReportDate:%Date,Facility:%Text,UserIen:%Text,K:%Integer</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>Bdg_GetAdsReportM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I $G(ReportDate)="",$G(UserIen)<1,$G(Facility)<1 Q "-1"	
	D ##class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserIen,Facility)
	If $G(DUZ)'=$G(UserIen) Q "-1^Incorrect DUZ value"
	;Variables defined in calling VA routines DGPMGL*
 	; RD = report date
 	; GL = 1 if recalculating
 	;
 	; IHS variables defined in calling routines:
 	; BDGFRM="D" for detailed, "S" for summary format
	S RD=$$X2FM^ORWCV($G(ReportDate))
	S GL="1"
	;S BDGFRM="S" We will work on it later
	S BDGT=RD
	I K<2  D
	. N RTN,INDX
	. K RTN,^TMP("BDGADS",$J),^TMP("BDGAD",$J)
	. D ..Exit() 	
	. I $E(IOST,1,2)="P-" S BDGT=RD 
	. D ..Init()
	. D INIT^BDGF	
	. D ^BDGAD1	
	D ..Init()
	D ^BDGAD1
 	S RTN(0)=$O(^TMP("BDGADS",$J,""),-1) 	
	S INDX=$O(^TMP("BDGADS",$J,""))
	I +INDX>0 F  D  Q:(+INDX'>0)
	. S RTN(INDX)=$G(^TMP("BDGADS",$J,INDX,0))
	. S INDX=$O(^TMP("BDGADS",$J,INDX))
 	I K=(RTN(0)) D ..Exit()
 	Q RTN(K)
]]></Implementation>
</Method>

<Method name="Init">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	NEW SRV,PREV,SRVN,TOT
 	K ^TMP("BDGADS",$J)
 	S VALMCNT=0
 	S PREV=$$FMADD^XLFDT(BDGT,-1)                     ;previous date
 	;S TOT=0 F I="O","I","N" S TOT(I)=""       ;initialize totals orig
 	S TOT=0 F I="O","I","N","D" S TOT(I)=""       ;initialize totals ihs/cmi/maw 09/13/2011 PATCH 1013
 	;
 	D HDG^BDGADS     ;display column headings
 	;
 	; first gathers stats for inpatient services
 	;  loop in alphabetical order
 	S SRVN=0 F  S SRVN=$O(^DIC(45.7,"B",SRVN)) Q:SRVN=""  D
 	. Q:SRVN["[OBSERVATION"  Q:SRVN="NEWBORN"
 	. Q:SRVN="DAY SURGERY"  ;ihs/cmi/maw 09/13/2011 PATCH 1013
 	. ;
 	. S SRV=0 F  S SRV=$O(^DIC(45.7,"B",SRVN,SRV)) Q:'SRV  D
 	.. Q:'$$ACTSRV^BDGPAR(SRV,BDGT)        ;quit if not active on run date
 	.. D LINE^BDGADS
 	;
 	; next gather observation services
 	S SRVN=0 F  S SRVN=$O(^DIC(45.7,"B",SRVN)) Q:SRVN=""  D
 	. Q:SRVN'["[OBSERVATION"  Q:SRVN="NEWBORN"
 	. Q:SRVN="DAY SURGERY"  ;ihs/cmi/maw 09/13/2011 PATCH 1013
 	. ;
 	. S SRV=0 F  S SRV=$O(^DIC(45.7,"B",SRVN,SRV)) Q:'SRV  D
 	.. Q:'$$ACTSRV^BDGPAR(SRV,BDGT)        ;quit if not active on run date
 	.. D LINE^BDGADS
 	;
 	; next gather day surgery services
 	S SRVN=0 F  S SRVN=$O(^DIC(45.7,"B",SRVN)) Q:SRVN=""  D
 	. Q:SRVN'="DAY SURGERY"  ;ihs/cmi/maw 09/13/2011 PATCH 1013
 	. ;
 	. S SRV=0 F  S SRV=$O(^DIC(45.7,"B",SRVN,SRV)) Q:'SRV  D
 	.. Q:'$$ACTSRV^BDGPAR(SRV,BDGT)        ;quit if not active on run date
 	.. D LINE^BDGADS
 	;
 	; now newborn totals
 	D SET^BDGADS("",.VALMCNT)
 	S SRVN="NEWBORN",SRV=$O(^DIC(45.7,"B",SRVN,0)) I SRV D
 	. Q:'$$ACTSRV^BDGPAR(SRV,BDGT)         ;quit if not active on run date
 	. D LINE^BDGADS
 	;
 	D TOTALS^BDGADS,SET^BDGADS("",.VALMCNT)
 	;D ^BDGAD1
 	D PATDATA^BDGADS1 	
 	Q
]]></Implementation>
</Method>

<Method name="Exit">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	K ^TMP("BDGADS",$J),^TMP("BDGAD",$J) K BDGREP
	K BDGUSR,BDGFAC,BDGTIME,BDGDATE
 	Q
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.BdgGetAdsReportD</DataLocation>
<DefaultData>BdgGetAdsReportDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.BdgGetAdsReportD</IdLocation>
<IndexLocation>^BMW.BSF.SP.BdgGetAdsReportI</IndexLocation>
<StreamLocation>^BMW.BSF.SP.BdgGetAdsReportS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="BdgGetAdsReportDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.BdgGetIsReAdmitCheck">
<Super>%RegisteredObject</Super>
<TimeChanged>63630,53761.375142</TimeChanged>
<TimeCreated>63348,62313.257012</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="GetIsReAdmitCheckQ">
<Type>%SQLQuery</Type>
<FormalSpec>FacilityId:%String,TypeOfDischarge:%String</FormalSpec>
<SqlName>BDG_GetIsReAdmitCheckQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
	SELECT top 1 (BDG_GetIsReAdmitCheckM(:FacilityId,:TypeOfDischarge)) 
	as Result</SqlQuery>
</Query>

<Method name="GetIsReAdmitCheckM">
<ClassMethod>1</ClassMethod>
<FormalSpec>FacilityId:%String,TypeOfDischarge:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>BDG_GetIsReAdmitCheckM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	;Check if there are any OE/RR AUTO DC RULES for discharge from observation
	I (FacilityId'>0)!(TypeOfDischarge'>0) Q "-1^Required Field Missing"		
	
	s Result=0
	
	N MasMovementTypeId,AutoDcRuleId
	
	S MasMovementTypeId=$$GET1^DIQ(405.1,+TypeOfDischarge,.03,"I")
	
	S AutoDcRuleId=+$O(^ORD(100.6,"AC",FacilityId,MasMovementTypeId,0))
	
	S EXC=+$P($G(^ORD(100.6,AutoDcRuleId,0)),U,6) 
 	
 	I EXC=1 S Result=1
	
 	Q Result
 ;
]]></Implementation>
</Method>
</Class>


<Class name="BMW.BSF.SP.BdgGetRangeOfMonthCensus">
<Super>%RegisteredObject</Super>
<TimeChanged>65175,49318.070329</TimeChanged>
<TimeCreated>63340,62010.560079</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="RangeOfMonthCensusQ">
<Type>%SQLQuery</Type>
<FormalSpec>From:%Date,To:%Date,Facility:%Text</FormalSpec>
<SqlName>BDG_GetRangeOfMonthCensusQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	
	Select BDG_GetRangeOfMonthCensusM(:From,:To,:Facility) AS Data</SqlQuery>
</Query>

<Method name="RangeOfMonthCensusM">
<ClassMethod>1</ClassMethod>
<FormalSpec>From:%Date,To:%Date,Facility:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>BDG_GetRangeOfMonthCensusM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	;call bmw.BMW_BDG_SP_RangeOfMonthCensusQ('SEP 03,2013','DEC 01,2013',7247)	
	NEW BDGBD,BDGED,REM,DGA,DGLOS,BDGOB,STR,DGMAX,DGMIN
 	D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(1,Facility) 	
 	S BDGBM=$$X2FM^ORWCV($G(From))
 	S BDGEM=$$X2FM^ORWCV($G(To)) 	
 	D INIT^BDGM202A                ;initialize counts
 	D LOOP^BDGM202A                ;loop thru census files and count
 	D PEAK^BDGM202A                ;count peak and minimum census
 	D AUTHBEDS^BDGM202A            ;count authorized beds
 	D NONBEN^BDGM202A              ;count non-beneficiaries discharges
 	NEW NDAYS,LINE
	;
 	; # of days in one month selected
 	I BDGBM=BDGEM S NDAYS=$$ND^BDGM202C
 	; OR # of days in range of months selected
 	E  S X1=$E(BDGEM,1,5)_$$ND^BDGM202C,X2=$E(BDGBM,1,5)_"01" D ^%DTC S NDAYS=X+1
 	S U="^"
 	;ALOS: ADULT MED/SUR^PEDS MED/SUR^NEWBORN^MEDICAL (Adult)^SURGICAL (Adult)^ADPL:  ADULT MED/SUR^Subtotal^% SubTotal^PEDS MED/SUR^NEWBORN^MEDICAL (Pediatric)
	;SURGICAL (Pediatric)^1 DAY PAT  ADULT M/S^SubTotal^% SubTotal^PEDS M/S^Obstetric^% Ob^TB^ICU/SCU^Alcohol^PCU^MH^ICU/SCU^PCU^Discharged^Total^With LOS
	;NewBORN^% Occupancy
	F I=1:1:6 S DGX(I)=0
	F I=1,2,3,5,6,7 F J=1:1:6 S DGX(J)=DGX(J)+DGA(I,J)
 	S STR=$J($$LOSA^BDGM202C,1,2)_U_$J($$LOSP^BDGM202C,1,2)_U_$J($$LOSN^BDGM202C,1,2)_U_DGBED("AM")_U_DGBED("AS")_U_$J(DGA(1,6)+DGA(3,6)/NDAYS,1,2)
    S STR=STR_U_(DGBED("AM")+DGBED("AS"))_U_$$OA^BDGM202C_U_$J(DGA(2,6)/NDAYS,1,2)_U_$J(DGA(4,6)/NDAYS,1,2)_U_DGBED("PM")_U_DGBED("PS")_U_DGA(1,10)
    S STR=STR_U_(DGBED("PM")+DGBED("PS"))_U_$$OP^BDGM202C_U_DGA(2,10)_U_DGA(4,10)_U_DGBED("OB")_U_$$OO^BDGM202C_U_DGBED("TB")_U_$$OT^BDGM202C
    S STR=STR_U_$$ICU^BDGM202C_U_DGBED("AL")_U_$$OL^BDGM202C_U_$$PCU^BDGM202C_U_DGBED("MH")_U_$$OM^BDGM202C_U_DGBED("IC")_U_$$OI^BDGM202C
    S STR=STR_U_DGBED("PC")_U_$$OU^BDGM202C_U_DGCNT_U_$$TOT^BDGM202C_U_DGLOS_U_DGBED("NB")_U_$$ON^BDGM202C_U_$$OC^BDGM202C_U_$G(DGMAX)_U_$S(+$G(DGMIN)<0:0,1:$G(DGMIN))
 	;Cleanup
 	D ^%ZISC
 	K DGA,BDGBM,BDGEM,DGMAX,DGMIN,DGLOS,DGCNT,DGBED
 	;End of Cleanup
 	Q STR
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.BdgGetRange974AD</DataLocation>
<DefaultData>BdgGetRangeOfMonthCensusDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.BdgGetRange974AD</IdLocation>
<IndexLocation>^BMW.BSF.SP.BdgGetRange974AI</IndexLocation>
<StreamLocation>^BMW.BSF.SP.BdgGetRange974AS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="BdgGetRangeOfMonthCensusDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.BdgSetPatientAdmission">
<Super>%RegisteredObject</Super>
<TimeChanged>65043,39175.187602</TimeChanged>
<TimeCreated>63340,60539.910066</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="MovePatientQ">
<Type>%SQLQuery</Type>
<FormalSpec>UserId:%String,FacilityId:%String,PatientId:%String,MovDateTime:%String,ShortDiagnosis:%String,WardId:%String,RoomId:%String,AdmSourceCode:%String,AdmissionType:%String,MovementSpecialityId:%String,AdmittingPhysician:%String,AttendingPhysician:%String,AdmissionCode:%String,ConditionId:%String,ExcludeDir:%String,ReferringProvider:%String,TransferFacility:%String,Diagnosis:%String</FormalSpec>
<SqlName>BDG_SetPatientAdmissionQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
	SELECT (BDG_SetPatientAdmissionM(:UserId,:FacilityId,:PatientId,:MovDateTime,:ShortDiagnosis,:WardId,:RoomId,:AdmSourceCode,:AdmissionType,:MovementSpecialityId,:AdmittingPhysician,:AttendingPhysician,:AdmissionCode,:ConditionId,:ExcludeDir,:ReferringProvider,:TransferFacility,:Diagnosis)) 
	as RESULT</SqlQuery>
</Query>

<Method name="MovePatientM">
<ClassMethod>1</ClassMethod>
<FormalSpec>UserId:%String,FacilityId:%String,PatientId:%String,MovDateTime:%String,ShortDiagnosis:%String,WardId:%String,RoomId:%String,AdmSourceCode:%String,AdmissionType:%String,MovementSpecialityId:%String,AdmittingPhysician:%String,AttendingPhysician:%String,AdmissionCode:%String,ConditionId:%String,ExcludeDir:%String,ReferringProvider:%String,TransferFacility:%String,Diagnosis:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>BDG_SetPatientAdmissionM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	
	I (UserId'>0)!(FacilityId'>0)!(PatientId'>0)!(MovDateTime="")!(ShortDiagnosis="")!(WardId'>0)!(AdmSourceCode'>0)!(AdmissionType'>0)!(MovementSpecialityId'>0)!(AdmittingPhysician'>0)!(AttendingPhysician'>0)!(AdmissionCode'>0) Q "Required Fields Missing!"	
 	;
 	N INDX,ROOM
 	S INDX=$O(^DGPM("ARM",""))
	I +INDX>0 F  D  Q:(+INDX'>0)
	. I $G(INDX)=$G(RoomId) S ROOM=-1
	. S INDX=$O(^DGPM("ARM",INDX))  
	I $G(ROOM)=-1 Q "-1^Room is not available!"	
 	;
 	I ($G(ConditionId)'="") { 	
 	NEW SQLCODE,%ROWCOUNT,%ROWID
  	&sql(UPDATE bmw.VA_PATIENT set CONDITION=:ConditionId WHERE ien=:PatientId)
    IF SQLCODE=0 {
	;Q "Update succeeded! Row count="_%ROWCOUNT_", Row ID = "_%ROWID 
	}
	ELSE { Q "-1^Update failed, SQLCODE="_SQLCODE}
 	} 
 	;
 	I ($G(ExcludeDir)'="") { 	
 	NEW SQLCODE,%ROWCOUNT,%ROWID
  	&sql(UPDATE bmw.VA_PATIENT set EXCLUDE_FROM_FACILITY_DIR=:ExcludeDir WHERE ien=:PatientId)
    IF SQLCODE=0 {
	;Q "Update succeeded! Row count="_%ROWCOUNT_", Row ID = "_%ROWID 
	}
	ELSE { Q "-1^Update failed, SQLCODE="_SQLCODE}
 	}    
    ;
	D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserId,FacilityId) 
	I MovDateTime>$$NOW^XLFDT S MovDateTime=$$NOW^XLFDT	
	;	
	S BDGR("PAT")=PatientId
	S BDGR("TRAN")=1
	S BDGR("DATE")=MovDateTime
	S BDGR("ADMIT DATE")=MovDateTime
	S BDGR("USER")=$$GET1^DIQ(200,+UserId,.01) ;UserId
	;S BDGR("ACCT")=0
	S BDGR("UBAS")=$$GET1^DIQ(9999999.53,+AdmSourceCode,.01)
	S BDGR("ADMT")=$$GET1^DIQ(405.1,+AdmissionType,9999999.1) ;;AdmissionType FacilityMovementType
	S BDGR("ADX")=ShortDiagnosis
	S BDGR("ACCT")=""
	S BDGR("TFAC")=""	
	I $G(TransferFacility)'="" S BDGR("TFAC")=$G(TransferFacility)		
	S BDGR("SRV")=$$GET1^DIQ(45.7,+MovementSpecialityId,.01) ;$$GET1^DIQ(45.7,+MovementSpecialityId,9999999.01) ;; get name - changes from IHS code to Name cause of dulicate IHS code for different facility treating specialities
	
	S BDGR("ADMD")=$$GET1^DIQ(200,+AdmittingPhysician,.01)	
	S BDGR("ATMD")=$$GET1^DIQ(200,+AttendingPhysician,.01)	
	S BDGR("UBAT")=AdmissionCode
	S BDGR("REFP")=$G(ReferringProvider)
	S BDGR("WARD")=$$GET1^DIQ(42,+WardId,.01)
	S BDGR("ROOM")=$$GET1^DIQ(405.4,+RoomId,.01)
	;	
	S BDGPRT=0
	S BDGLOC=0 ;; BDGPM LOCATOR protocol issue fix
	I $$GET1^DIQ(9009020.1,1,.03)="YES" S BDGLOC=1 ;; if IHS ADT Parameter "USE LOCATOR CARDS?" is YES .. set to 1 for BDGPM LOCATOR protocol
	S DFN=PatientId				
	S XQY0=^DIC(19,$O(^DIC(19,"B","LROE",0)),0) ; Bug Reported: ;accessioning GUI (from LROE)
	;
	NEW DGQUIET,BDGAPI,ERR
 	S DGQUIET=1                                   ;must be in quiet mode
 	S BDGAPI=1                                    ;let DGPMV rtns know using API
 	I $G(DUZ("AG"))="" Q 2_U_"Agency not set"     ;must have agency set to IHS
 	;
 	S ERR=..Check() I ERR Q ERR   ;check common req fields
 	;
 	s UserTimeOut=+DTIME,DTIME=.0001 ;; override user timeout and take default for "Print Wrist Band" question -  	
 	D 1^BDGAPI ;; call admission API	
 	;S ERR=$$ADD^BDGAPI(.BDGR)
 	s DTIME=+UserTimeOut ;; set DTIME back to users timeout	
 	;
 	I $G(ERR)'="" Q $G(ERR)
 	; 	
 	K query,RSC,RS,IEN
 	S query="select top 1 IEN from bmw.PATIENT_MOVEMENT where PATIENT='"_PatientId_"' and transaction_02=6 order by ien desc"
 	S RS=##class(%ScrollableResultSet).%New()  	
  	S RSC=RS.Prepare(query)
  	S RSC=RS.Execute()  	
  	I RSC'=1 Q "-1^Speciality Transfer is not found!"  	  	
  	S IEN=""
  	WHILE RS.Next() { S IEN=RS.Data("IEN") }
	;
	I ($G(Diagnosis)'="") { 	
  	I $G(IEN)'=""{	
	S ^TMP($J,"WP",1,0)=Diagnosis
	D WP^DIE(405,IEN_",",99,"KA","^TMP($J,""WP"")")
  	}}
 	;
  	K query,RSC,RS,IEN
  	N RS	
 	S query="select top 1 IEN from bmw.PATIENT_MOVEMENT where PATIENT='"_PatientId_"' and transaction_02=1 order by ien desc"
 	S RS=##class(%ScrollableResultSet).%New()  	
  	S RSC=RS.Prepare(query)
  	S RSC=RS.Execute()  	
  	I RSC'=1 Q "-1^Admission is not found!"  	  	
  	S IEN=""
	WHILE RS.Next() { S IEN=RS.Data("IEN") }
	;
	I ($G(ExcludeDir)'="") { 	
  	I $G(IEN)'=""{
 	NEW SQLCODE,%ROWCOUNT,%ROWID
  	&sql(UPDATE bmw.PATIENT_MOVEMENT set FACILITY_DIRECTORY_EXCLUSION=:ExcludeDir WHERE ien=:IEN)
    IF SQLCODE=0 {
	;Q "Update succeeded! Row count="_%ROWCOUNT_", Row ID = "_%ROWID 
    }}}
    ;
  	Q IEN
]]></Implementation>
</Method>

<Method name="Check">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
 ;;CHECK(ARRAY) ; check common required fields
 NEW X,Y,%DT
 I '$G(BDGR("PAT")) Q 2_U_"Patient ID error"
 I ($G(BDGR("TRAN"))<1)!($G(BDGR("TRAN"))>6) Q 2_U_"Trans Code Error"
 S X=$G(BDGR("DATE")) I X'?7N1".".N D  I Y=-1 Q 2_U_"Date Error"
 . S %DT="RX" D ^%DT Q:Y=-1
 . S BDGR("DATE")=Y   ;reset date to FM format
 ;I $$GET1^DIQ(200,+$G(BDGR("USER")),.01)="" Q 2_U_"User Error"
 Q 0
 ;
]]></Implementation>
</Method>
</Class>


<Class name="BMW.BSF.SP.BdgSetPatientMovement">
<Super>%RegisteredObject</Super>
<TimeChanged>63930,49780.07547</TimeChanged>
<TimeCreated>63340,60539.910066</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.3</Default>
</Parameter>

<UDLText name="T">
<Content><![CDATA[
/*
Query MovePatientQ(PatientId As %String, MovementType As %String, MovementId As %Double, MovementSpecialityId As %Double, MovDateTime As %Date, UserId As %String, AdmSourceCode As %String, AdmissionType As %String, ShortDiagnosis As %String, FacilityId As %String, WardId As %String, AdmittingPhysician As %String, PrimaryPhysician As %String, AttendingPhysician As %String, AdmissionCode As %String, ReferringPhysician As %String, RoomId As %String) As %SQLQuery [ SqlName = BDG_SetPatientMovementQ, SqlProc ]
{
		
	SELECT (BDG_SetPatientMovementM(:PatientId,:MovementType,:MovementId,:MovementSpecialityId,:MovDateTime,:UserId,:AdmSourceCode,:AdmissionType,:ShortDiagnosis,:FacilityId,:WardId,:AdmittingPhysician,:PrimaryPhysician,:AttendingPhysician,:AdmissionCode,:ReferringPhysician,:RoomId)) as IEN
}

ClassMethod MovePatientM(PatientId As %String = "", MovementType As %String, MovementId As %Double, MovementSpecialityId As %Double, MovDateTime As %Date, UserId As %String, AdmSourceCode As %String, AdmissionType As %String, ShortDiagnosis As %String, FacilityId As %String, WardId As %String, AdmittingPhysician As %String, PrimaryPhysician As %String, AttendingPhysician As %String, AdmissionCode As %String, ReferringPhysician As %String, RoomId As %String) As %Text [ ProcedureBlock = 0, SqlName = BDG_SetPatientMovementM, SqlProc ]
{
	I (PatientId'>0)!(MovementType'>0)!(UserId'>0)!(AdmSourceCode'>0)!(AdmissionType'>0)!(FacilityId'>0)!(WardId'>0)!(AdmittingPhysician'>0)!(PrimaryPhysician'>0)!(AttendingPhysician'>0) Q 0	
	;D ##class(BMW.BMWCoreSP).SetSessionVariablesM(1,FacilityId)
	D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(1,FacilityId) 
	N PMDateTime
	S PMDateTime=$$X2FM^ORWCV($G(MovDateTime))
	S BDGR("PAT")=PatientId
	S BDGR("TRAN")=MovementType
	S BDGR("DATE")=PMDateTime
	S BDGR("ADMIT DATE")=PMDateTime
	S BDGR("USER")=UserId
	S BDGR("ACCT")=0
	S BDGR("UBAS")=$$GET1^DIQ(9999999.53,+AdmSourceCode,.01)
	S BDGR("ADMT")=$$GET1^DIQ(405.1,+AdmissionType,9999999.1) ;;AdmissionType
	S BDGR("ADX")=ShortDiagnosis
	S BDGR("ACCT")="0"
	S BDGR("TFAC")=""
	S BDGR("WARD")=$$GET1^DIQ(42,+WardId,.01)
	S BDGR("SRV")=$$GET1^DIQ(45.7,+MovementSpecialityId,9999999.01)
	S BDGR("ADMD")=$$GET1^DIQ(200,+AdmittingPhysician,.01)
	S BDGR("PRMD")=$$GET1^DIQ(200,+PrimaryPhysician,.01)
	S BDGR("ATMD")=$$GET1^DIQ(200,+AttendingPhysician,.01)
	;S BDGR("DSCT")=
	S BDGR("UBAT")=AdmissionCode
	S BDGR("REFP")="" ;ReferringPhysician
	S BDGR("ROOM")=$$GET1^DIQ(405.4,+RoomId,.01)
	;S BDGR("UBDS")=
	s BDGPRT=0
	S ERR=$$ADD^BDGAPI(.BDGR)
	Q $G(ERR)
	;I (PatientId'>0)!(MovementType'>0)!(MovementId'>0) Q 0
	;;S Result=$$ADDMVT^BMW.BMWBDG(PatientId,MovementType,MovementId,MovementSpecialityId)
	;;Q Result
	;;D ##class(BMW.BMWCoreSP).SetSessionVariablesM(1,7247)
}
	*/
]]></Content>
</UDLText>

<Query name="MovePatientQ">
<Type>%SQLQuery</Type>
<FormalSpec>UserId:%String,FacilityId:%String,PatientId:%String,MovDateTime:%String,MovementType:%String,ShortDiagnosis:%String,WardId:%String,RoomId:%String,AdmSourceCode:%String,AdmissionType:%String,MovementSpecialityId:%String,AdmittingPhysician:%String,PrimaryPhysician:%String,AttendingPhysician:%String,AdmissionCode:%String</FormalSpec>
<SqlName>BDG_SetPatientMovementQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
	SELECT (BDG_SetPatientMovementM(:UserId,:FacilityId,:PatientId,:MovDateTime,:MovementType,:ShortDiagnosis,:WardId,:RoomId,:AdmSourceCode,:AdmissionType,:MovementSpecialityId,:AdmittingPhysician,:PrimaryPhysician,:AttendingPhysician,:AdmissionCode)) 
	as IEN</SqlQuery>
</Query>

<Method name="MovePatientM">
<ClassMethod>1</ClassMethod>
<FormalSpec>UserId:%String,FacilityId:%String,PatientId:%String,MovDateTime:%String,MovementType:%String,ShortDiagnosis:%String,WardId:%String,RoomId:%String,AdmSourceCode:%String,AdmissionType:%String,MovementSpecialityId:%String,AdmittingPhysician:%String,PrimaryPhysician:%String,AttendingPhysician:%String,AdmissionCode:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>BDG_SetPatientMovementM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	
	I (UserId'>0)!(FacilityId'>0)!(PatientId'>0)!(MovementType'>0)!(MovementId'>0) Q 0	

	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	
	;;S Result=$$ADDMVT^BMW.BMWBDG(PatientId,MovementType,MovementId,MovementSpecialityId)
	;;Q Result
	;;D ##class(BMW.BMWCoreSP).SetSessionVariablesM(1,7247)
	
	//the stupid loop starts here
	//s cnt=0
	//F  S cnt=cnt+1 Q:cnt>20  D
 	//. I $$GET1^DIQ(2,PatientId,.105,"I")>0 Q
 	//. HANG .5
	
	//the stupid loop ends here
	
	
	N DGQUIET,DGPMN
 	;
 	; QUIET MODE,NEW MVT
 	S DGQUIET=1,DGPMN=1,DFN=PatientId,DGPMT=MovementType,DGPMDA=MovementId,DGPMSP=$G(MovementSpecialityId)
 	I DGPMT=3 S DGPMCA=$$GET1^DIQ(405,DGPMDA,.14,"I")
 	;
 	;I MovementType=2  D
 	.; S FDA(2,DFN_",",.102)=MovementId 	
 	.; D FILE^DIE("","FDA","ERR1")
 	.; I $D(ERR1("DIERR")) S RSLT="~`0^Error updating Patient Movement:"_$G(ERR1("DIERR","1","TEXT",1)) Q
 	;
 	D ..MovePatientPrior()
 	;
 	; IF A SPECIALTY MVT IS ASSOCIATED WITH THIS, POPULATE ^UTILITY WITH THAT MVT
 	I $G(DGPMSP) D
 	. ; NEW THESE VARIABLES SO THEY ARE DISPOSED AFTER
 	. N DGPMT,DGPMDA,DGPMN,X,Y,DGPMP,DGPMA
 	. ; MVT TYPE,MVT IEN,NEW MVT
 	. S DGPMT=6,DGPMDA=DGPMSP,DGPMN=1
 	. D ..MovePatientPrior()
 	. D ..MovePatientAfter()
 	. Q
 	;
 	D ..MovePatientAfter()
 	;
 	
 	;;  Start- Fix Delayed orders issue
 	IF +$G(DGPMSP)>0 D
 	.	S DIK="^DGPM("
 	.	s DA=DGPMSP
 	.	D IX^DIK
 	;;  End - Fix Delayed orders issue
 	 	
 	D ..FireEvent()
 	
 	;IF +$G(MovementSpecialityId)>0 D
 	;.	S DIK="^DGPM("
 	;.	s DA=DGPMSP	
 	;.	D IX^DIK
 	
 	Q $G(ERR)
]]></Implementation>
</Method>

<Method name="Check">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
 ;;CHECK(ARRAY) ; check common required fields
 NEW X,Y,%DT
 I '$G(BDGR("PAT")) Q 2_U_"Patient ID error"
 I ($G(BDGR("TRAN"))<1)!($G(BDGR("TRAN"))>6) Q 2_U_"Trans Code Error"
 S X=$G(BDGR("DATE")) I X'?7N1".".N D  I Y=-1 Q 2_U_"Date Error"
 . S %DT="RX" D ^%DT Q:Y=-1
 . S BDGR("DATE")=Y   ;reset date to FM format
 ;I $$GET1^DIQ(200,+$G(BDGR("USER")),.01)="" Q 2_U_"User Error"
 Q 0
 ;
]]></Implementation>
</Method>

<Method name="MovePatientPrior">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	; SETS "PRIOR" ^UTILITY NODES FOR EVT DRIVER
 	;
 	;0 NODE PRIOR TO MOVEMENT - P:PRIOR
 	S (^UTILITY("DGPM",$J,DGPMT,DGPMDA,"P"),DGPMP)=$S(DGPMN=1:"",1:$G(^DGPM(DGPMDA,0)))
 	;
 	; IHS NODE IN ^UTILITY - P:PRIOR
 	S ^UTILITY("DGPM",$J,DGPMT,DGPMDA,"IHSP")=$S(DGPMN=1:"",1:$G(^DGPM(DGPMDA,"IHS")))
 	;
 	; ADDITIONAL TREATING SPECIALTY NODES
 	I DGPMT=6 S Y=DGPMDA D PRIOR^DGPMV36
 	Q
]]></Implementation>
</Method>

<Method name="MovePatientAfter">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	; SETS "AFTER" ^UTILITY NODES FOR EVT DRIVER
 	;
 	; 0 NODE AFTER MOVEMENT - A:AFTER
 	S (^UTILITY("DGPM",$J,DGPMT,DGPMDA,"A"),DGPMA)=$G(^DGPM(DGPMDA,0))
 	;
 	; IHS NODE IN ^UTILITY - A:AFTER
 	S ^UTILITY("DGPM",$J,DGPMT,DGPMDA,"IHSA")=$G(^DGPM(DGPMDA,"IHS"))
 	;
 	; ADDITIONAL TREATING SPECIALTY NODES
 	I DGPMT=6 S Y=DGPMDA D AFTER^DGPMV36
 	Q
]]></Implementation>
</Method>

<Method name="FireEvent">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
  	; INVOKES THE EVENT DRIVER
  	;
  	; SET/KILL X-REFS
  	;D RESET^DGPMDDCN
  	;
  	; BULLETINS FOR ROOM-BED CHANGE
  	;D EN^DGPMVBM
  	;
  	; CHECK THE ^UTILITY GLOBAL
  	;S DGOK=0 F I=0:0 S I=$O(^UTILITY("DGPM",$J,I)) Q:'I  F J=0:0 S J=$O(^UTILITY("DGPM",$J,I,J)) Q:'J  I (^(J,"A")'=^("P"))!($G(^("IHSA"))'=$G(^("IHSP"))) S DGOK=1 Q
  	;
  	; INVOKE MOVEMENT EVENT DRIVER
  	;I DGOK D ^DGPMEVT ;Invoke Movement Event Driver
  	;
  	; CLEANUP VARIABLES
  	;D Q^DGPMV3  	
	D EVENTS^DGPMV3
 	Q
]]></Implementation>
</Method>

<Method name="MovePatientApiM">
<ClassMethod>1</ClassMethod>
<FormalSpec>UserId:%String,FacilityId:%String,PatientId:%String,MovDateTime:%String,MovementType:%String,ShortDiagnosis:%String,WardId:%String,RoomId:%String,AdmSourceCode:%String,AdmissionType:%String,MovementSpecialityId:%String,AdmittingPhysician:%String,PrimaryPhysician:%String,AttendingPhysician:%String,AdmissionCode:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>BDG_SetPatientMovementApiM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	
	I (UserId'>0)!(FacilityId'>0)!(PatientId'>0)!(MovementType'>0)!(MovementId'>0) Q 0	
	;Q "1"	
	D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserId,FacilityId) 	
	S DFN=PatientId				
	S PMDateTime=MovDateTime ;;$$X2FM^ORWCV($G(MovDateTime))
	S BDGR("PAT")=PatientId
	S BDGR("TRAN")=MovementType
	S BDGR("DATE")=PMDateTime
	S BDGR("ADMIT DATE")=PMDateTime
	S BDGR("USER")=$$GET1^DIQ(200,+UserId,.01)
	S BDGR("ACCT")=0
	S BDGR("UBAS")=$$GET1^DIQ(9999999.53,+AdmSourceCode,.01)
	S BDGR("ADMT")=$$GET1^DIQ(405.1,+AdmissionType,9999999.1) ;;AdmissionType
	S BDGR("ADX")=ShortDiagnosis
	S BDGR("ACCT")="0"
	S BDGR("TFAC")=""
	S BDGR("WARD")=$$GET1^DIQ(42,+WardId,.01)
	S BDGR("SRV")=$$GET1^DIQ(45.7,+MovementSpecialityId,9999999.01)
	S BDGR("ADMD")=$$GET1^DIQ(200,+AdmittingPhysician,.01)
	S BDGR("PRMD")=$$GET1^DIQ(200,+PrimaryPhysician,.01)
	S BDGR("ATMD")=$$GET1^DIQ(200,+AttendingPhysician,.01)
	;S BDGR("DSCT")=
	S BDGR("UBAT")=AdmissionCode
	S BDGR("REFP")="" ;ReferringPhysician
	S BDGR("ROOM")=$$GET1^DIQ(405.4,+RoomId,.01)
	;S BDGR("UBDS")=
	s BDGPRT=0
	S XQY0=^DIC(19,$O(^DIC(19,"B","LROE",0)),0) ; Bug Reported: ;accessioning GUI (from LROE)
	s BDGPRT=0
	
	NEW DGQUIET,BDGAPI,ERR
 	S DGQUIET=1                                   ;must be in quiet mode
 	S BDGAPI=1                                    ;let DGPMV rtns know using API
 	I $G(DUZ("AG"))="" Q 2_U_"Agency not set"     ;must have agency set to IHS
 	;
 	S ERR=..Check() I ERR Q ERR   ;check common req fields
 	;
 	s UserTimeOut=DTIME,DTIME=.0001 ;; override user timeout and take default for "Print Wrist Band" question - 
 	
 	D 1^BDGAPI ;; call admission API
 	
 	s DTIME=UserTimeOut 	
 	;D @BDGR("TRAN")
 	;Q $G(ERR)
	;S ERR=$$ADD^BDGAPI(.BDGR)	
	Q $G(ERR)
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.BdgSetPatie7F39D</DataLocation>
<DefaultData>BdgSetPatientMovementDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.BdgSetPatie7F39D</IdLocation>
<IndexLocation>^BMW.BSF.SP.BdgSetPatie7F39I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.BdgSetPatie7F39S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="BdgSetPatientMovementDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.BdgSetPatientMovementDischarge">
<Super>%RegisteredObject</Super>
<TimeChanged>65549,52645.263313</TimeChanged>
<TimeCreated>63497,45265.296586</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="SetPatientMovementDischargeQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientId:%String,EventDate:%String,DischargeStatusUB04:%Integer,TypeOfDischarge:%Integer,TransferFacility:%Integer,User:%Integer,Facility:%Integer,AdmissionId:%String,IsReAdmit:%Boolean</FormalSpec>
<SqlName>BDG_SetPatientMovementDischargeQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
	SELECT top 1 (BDG_SetPatientMovementDischargeM(:PatientId,:EventDate,:DischargeStatusUB04,:TypeOfDischarge,:TransferFacility,:User,:Facility,:AdmissionId,:IsReAdmit)) 
	as Result</SqlQuery>
</Query>

<Method name="SetPatientMovementDischargeM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%String,EventDate:%String,DischargeStatusUB04:%Integer,TypeOfDischarge:%Integer,TransferFacility:%Integer,User:%Integer,Facility:%Integer,AdmissionId:%String,IsReAdmit:%Boolean</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>BDG_SetPatientMovementDischargeM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I (PatientId'>0)!(EventDate="")!(+DischargeStatusUB04'>0)!(+TypeOfDischarge'>0)!(+Facility'>0)!(+User'>0) Q "Required Fields are missing."		
    D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(User,Facility) 
	;
	S DischargeStatusUB04=$$GET1^DIQ(99999.04,$G(DischargeStatusUB04),.01,"I")
 	S DFN=PatientId
 	I EventDate>$$NOW^XLFDT S EventDate=$$NOW^XLFDT	
	S BDGR("PAT")=PatientId
	S BDGR("TRAN")="3" 	
	S BDGR("DATE")=EventDate
	s BDGR("USER")=$$GET1^DIQ(200,+User,.01)
	s BDGR("UBDS")=$G(DischargeStatusUB04)
	S BDGR("DSCT")=TypeOfDischarge
	S XQY0=^DIC(19,$O(^DIC(19,"B","LROE",0)),0) ; Bug Reported: ;accessioning GUI (from LROE)
	I TypeOfDischarge="2",$G(TransferFacility)="" Q "Transfer Facility Required"
	I TypeOfDischarge="2" S BDGR("TFAC")=$G(TransferFacility)	
	S BDGR("DISCHARGE DATE")=EventDate
	S BDGR("ACCT")=0
	I $G(AdmissionId)'="" S BDGR("ACCT")=$$GET1^DIQ(405,AdmissionId,.27,"I")
	S BDGR("ADMIT DATE")=EventDate
	I $G(AdmissionId)'="" S BDGR("ADMIT DATE")=$$GET1^DIQ(405,AdmissionId,.01,"I")
	
	;; fix for Re-admit medication discontinue issue
	I $G(IsReAdmit)'="" D READMANS^ORMEVNT($G(IsReAdmit))  ;; New Published Entry Point READMANS after discussion with Medsphere
	;;
	NEW DGQUIET,BDGAPI,ERR
 	S DGQUIET=1                                   ;must be in quiet mode
 	S BDGAPI=1                                    ;let DGPMV rtns know using API
 	I $G(DUZ("AG"))="" Q 2_U_"Agency not set"     ;must have agency set to IHS
 	;
 	S ERR=..Check() I ERR Q ERR   ;check common req fields
 	; 	
 	s UserTimeOut=+DTIME,DTIME=.0001 ;; override user timeout and take default for "Print Wrist Band" question -  	
 	D ..DischargeApi() ;; Call Discharge API rewrote here in SP
 	
 	s DTIME=+UserTimeOut ;; set DTIME back to users timeout	
 		
	I $G(ERR)="" Q "1"
	Q $G(ERR)
	;	 	
 	Q "1"
]]></Implementation>
</Method>

<Method name="Check">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
 ;;CHECK(ARRAY) ; check common required fields
 NEW X,Y,%DT
 I '$G(BDGR("PAT")) Q 2_U_"Patient ID error"
 I ($G(BDGR("TRAN"))<1)!($G(BDGR("TRAN"))>6) Q 2_U_"Trans Code Error"
 S X=$G(BDGR("DATE")) I X'?7N1".".N D  I Y=-1 Q 2_U_"Date Error"
 . S %DT="RX" D ^%DT Q:Y=-1
 . S BDGR("DATE")=Y   ;reset date to FM format
 ;I $$GET1^DIQ(200,+$G(BDGR("USER")),.01)="" Q 2_U_"User Error"
 Q 0
 ;
]]></Implementation>
</Method>

<Method name="DischargeApi">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	
 NEW DGPMT,DFN,I,DGPMY,DGPMCA,DGPMSA,DGPMUC,DGPMN,DGPMAN,RVDT,X
 S DGPMT=BDGR("TRAN"),DGPMP="",DFN=BDGR("PAT"),ERR=""
 NEW HRCN,VA D PID^VADPT
 S DGPMN=1   ;prevents date from being asked
 ;
 ; find corresponding admission
 S X=$O(^DGPM("APTT1",DFN,BDGR("DISCHARGE DATE")),-1)
 I X S DGPMCA=$O(^DGPM("APTT1",DFN,X,0))
 I ('X)!('$G(DGPMCA)) S ERR=2_U_"No corresponding admission found for discharge date: "_BDGR("DISCHARGE DATE") Q
 ;
 ; check if admission has discharge already
 ;6/19/2002 LJF9 (per Linda) change errors to warnings
 ;S X=$P($G(^DGPM(DGPMCA,0)),U,17) I X,$G(^DGPM(X,0)) S ERR=2_U_"Admission already discharged; cannot add another." Q
 S X=$P($G(^DGPM(DGPMCA,0)),U,17) I X,$G(^DGPM(X,0)) S ERR=1_U_"Admission already discharged: cannot add another." Q
 ;
 S RVDT=9999999.9999999-BDGR("DISCHARGE DATE")
 S X=$O(^DGPM("APMV",DFN,DGPMCA,0)) I X<RVDT S ERR=2_U_"Discharge earlier than last ward transfer" Q
 S X=$O(^DGPM("ATS",DFN,DGPMCA,0)) I X<RVDT S ERR=2_U_"Discharge earlier than last service transfer" Q
 ;
 ; check discharge fields for validity
 D DATE^BDGAPI
 I +ERR=2 Q   ;at least one required field failed check
 D ..DischargeTimeCheck()
 ;F I="DATE","DSCT" D @I I +ERR=2 Q
 I +ERR=2 Q   ;at least one required field failed check
 ;
 ; if enough fields are okay, create event
 S DGPMY=BDGR("DISCHARGE DATE"),DGPMAN=$G(^DGPM(DGPMCA,0))
 D UC^DGPMV  ; sets DGPMUC = transaction type external format
 D ^DGPMV3
 I '$D(^DGPM("APTT3",DFN,BDGR("DISCHARGE DATE"))) S ERR=2_U_"Discharge NOT added for date: "_BDGR("DISCHARGE DATE")
 Q
]]></Implementation>
</Method>

<Method name="DischargeTimeCheck">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
 ;DSCT ; -- check discharge types
 NEW X,DIC,Y
 S BDGR("DSCT")=+BDGR("DSCT")
 ; check required IHS discharge type
 S X=$G(BDGR("DSCT")),DIC=405.1,DIC(0)="M"
 S DIC("S")="I $P(^DG(405.1,+Y,0),U,2)=3" D ^DIC
 I Y<1 S ERR=2_U_"IHS Discharge Type Invalid: "_BDGR("DSCT") Q
 ;
 I (BDGR("DSCT")=13) D  Q:+ERR=2
 . S X=$G(BDGR("TFAC")) I X="" S ERR=2_U_"Transfer Facility Missing" Q
 . K DIC S DIC=9999999.91,DIC(0)="M"
 . S DIC("S")="I $P(^AUTTTFAC(+Y,0),U,2)=""""" D ^DIC
 . I Y<1 S ERR=2_U_"Invalid Transfer Facility: "_BDGR("TFAC")
 ;
 ; check optional ub04 discharge status
 ;S X=$G(BDGR("UBDS")) I X]"" D
 ;;. I "^1^2^3^4^5^6^7^10^20^30"'[X S ERR=ERR_1_U_"Invalid UB04 Discharge Status: "_$G(BDGR("UBDS"))_U,BDGR("UBDS")=""  ;cmi/maw 08/31/2009 PATCH 1010
 Q
 ;
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.BdgSetPatie15C3D</DataLocation>
<DefaultData>BdgSetPatientMovementDischargeDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.BdgSetPatie15C3D</IdLocation>
<IndexLocation>^BMW.BSF.SP.BdgSetPatie15C3I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.BdgSetPatie15C3S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="BdgSetPatientMovementDischargeDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.BdgSetPatientMovementEdit">
<Super>%RegisteredObject</Super>
<TimeChanged>65120,58914.495707</TimeChanged>
<TimeCreated>63348,62313.257012</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="EditMovementQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientId:%String,AdmissionId:%String,Comments:%Text,AdmitDate:%String,AdmissionSource04Id:%String,AdmitType04Id:%String,WardId:%String,RoomBed:%String,TreatingSpecialityId:%String,AdmittingMDIhsAdc:%String,ReferringProvider:%String,AttendingMDIhsAdc:%String,ExcludeDir:%String,AdmittingDiagnosis:%String,MovementType:%String,UserId:%String,FacilityId:%String</FormalSpec>
<SqlName>BDG_SetPatientMovementEditQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
	SELECT top 1 (BDG_SetPatientMovementEditM
	(:PatientId,:AdmissionId,:Comments,:AdmitDate,:AdmissionSource04Id,:AdmitType04Id,:WardId,:RoomBed,:TreatingSpecialityId,
	:AdmittingMDIhsAdc,:ReferringProvider,:AttendingMDIhsAdc,:ExcludeDir,:AdmittingDiagnosis,:MovementType,:UserId,:FacilityId)) 
	as Result</SqlQuery>
</Query>

<Method name="EditMovementM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientId:%String,AdmissionId:%String,Comments:%Text,AdmitDate:%String,AdmissionSource04Id:%String,AdmitType04Id:%String,WardId:%String,RoomBed:%String,TreatingSpecialityId:%String,AdmittingMDIhsAdc:%String,ReferringProvider:%String,AttendingMDIhsAdc:%String,ExcludeDir:%String,AdmittingDiagnosis:%String,MovementType:%String,UserId:%String,FacilityId:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>BDG_SetPatientMovementEditM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	;performs extended bed control (edits movements) - calls event driver afterwards
	I (UserId'>0)!(FacilityId'>0)!(PatientId'>0)!(AdmissionId'>0)!($G(AdmitDate)="")!(AdmissionSource04Id'>0)!(AdmitType04Id'>0) Q "0^Required data missing!"	
	;I (RoomBed'>0) Q "-1^Room bed is required."
	D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserId,FacilityId) 
	I AdmitDate>$$NOW^XLFDT S AdmitDate=$$NOW^XLFDT	
	
	S DFN=PatientId
 	S BDGR("PAT")=DFN
 	;s BDGR("TRAN")=1 ;MVTTYP
 	S BDGR("DATE")=AdmitDate
 	S BDGR("ADMIT DATE")=$G(AdmitDate)
 	S BDGR("UBAS")=$$GET1^DIQ(9999999.53,+AdmissionSource04Id,.01) ;$G(AdmissionSource04Id)
 	S BDGR("UBAT")=AdmitType04Id ;1-digit code - 1-4 value range
 	I +WardId>0 S BDGR("WARD")=$$GET1^DIQ(42,+WardId,.01)
 	S BDGR("ROOM")=""
 	I +RoomBed>0 S BDGR("ROOM")=$$GET1^DIQ(405.4,+RoomBed,.01)
 	I +TreatingSpecialityId>0 S BDGR("SRV")=$$GET1^DIQ(45.7,+TreatingSpecialityId,9999999.01) ;treating specialty, 2-digit IHS code (file 45.7)
 	S BDGR("TFAC")=$$GET1^DIQ(405,AdmissionId,.05)
 	S BDGR("ADMD")=$$GET1^DIQ(200,+AdmittingMDIhsAdc,.01) ;$G(AdmittingMDIhsAdc)
 	;S BDGR("PRMD")=""
 	S BDGR("ATMD")=$$GET1^DIQ(200,+AttendingMDIhsAdc,.01) ;$G(AttendingMDIhsAdc)
 	S BDGR("REFP")=$G(ReferringProvider)
 	S BDGR("DISCHARGE DATE")=""
 	S BDGR("DSCT")="" ;FCMVTYP
 	S BDGR("ADX")=$G(AdmittingDiagnosis)
 	S BDGR("USER")=DUZ ;session variable - user IEN
 	S BDGR("ACCT")="9999999999999999999999999999999" ;Skip index search
 	S BDGR("ADMT")=""
 	I +MovementType>0 S BDGR("ADMT")=$$GET1^DIQ(405.1,+MovementType,9999999.1)
 	s BDGPRT=0 ;do not ask to "print locator card?"
 	S XQY0=^DIC(19,$O(^DIC(19,"B","LROE",0)),0) ; Bug Reported: ;accessioning GUI (from LROE)
 	s UserTimeOut=+DTIME,DTIME=.0001 ;Override user timeout
 	S ERR=$$EDIT^BDGAPI(.BDGR)
 	s DTIME=+UserTimeOut ;; set DTIME back to users timeout
 	;
 	Q:$G(ERR)'="" ERR
 	; To find BDGCA
 	NEW DGQUIET,BDGAPI,ERR,BDGCA,BDGN,BDGTRAN,VST,BDGV,BDGMVT,X
 	D FINDADM^BDGAPI2
 	Q:$G(BDGCA)="" "-1^Could not locate admissionQ"
 	; Updating Short Diagnosis for admission entry
 	I ($G(AdmittingDiagnosis)'="") { 	
  	I $G(BDGCA)'=""{
 	NEW SQLCODE,%ROWCOUNT,%ROWID
  	&sql(UPDATE bmw.PATIENT_MOVEMENT set DIAGNOSIS_SHORT=:AdmittingDiagnosis WHERE ien=:BDGCA)
    IF SQLCODE=0 {
	;Q "Update succeeded! Row count="_%ROWCOUNT_", Row ID = "_%ROWID 
    }}}
 	;
 	;
 	K query,RSC,RS,IEN
 	S query="select top 1 IEN from bmw.PATIENT_MOVEMENT where PATIENT='"_PatientId_"' and transaction_02=6 and IEN > "_$G(BDGCA)_" and ADMISSIONCHECKIN_MOVEMENT="_$G(BDGCA)
 	S RS=##class(%ScrollableResultSet).%New()  	
  	S RSC=RS.Prepare(query)
  	S RSC=RS.Execute()  	
  	I RSC'=1 Q "-1^Speciality Transfer is not found!"  	  	
  	S IEN=""
  	WHILE RS.Next() { S IEN=RS.Data("IEN") }
  	Q:$G(IEN)="" 0
  	S BDGN=IEN
  	S BDGAPI=1
  	S DGQUIET=1
	D 2^BDGAPI2
	Q:$G(ERR)'="" ERR
	;
	;;if Comments <empty> set to delete Diagnosis WP field
	I (($G(Comments)=$c(0))!($G(Comments)="")) D ##Class(BMW.BSF.SP.CoreSetWordProcessing).SetWordProcessingM("405","99",IEN,Comments,0,1)
	
	E  D ##Class(BMW.BSF.SP.CoreSetWordProcessing).SetWordProcessingM("405","99",IEN,Comments,0,0)
  	;
  	I ($G(TreatingSpecialityId)'="") {   	
 	NEW SQLCODE,%ROWCOUNT,%ROWID
  	&sql(UPDATE bmw.PATIENT_MOVEMENT set FACILITY_TREATING_SPECIALTY=:TreatingSpecialityId WHERE ien=:IEN)

    }
    ;
  	I ($G(ExcludeDir)'="") {   	
 	NEW SQLCODE,%ROWCOUNT,%ROWID
  	&sql(UPDATE bmw.PATIENT_MOVEMENT set FACILITY_DIRECTORY_EXCLUSION=:ExcludeDir WHERE ien in (:AdmissionId,:BDGN))

    }
    ;	
    I $G(BDGN)'=""{ ;BDGPM TRANSFER API hard code on Mass Movement Type/Type of Movement
  	
 	NEW SQLCODE,%ROWCOUNT,%ROWID
 	If (($G(ReferringProvider)="")!($G(ReferringProvider)=$c(0)))
 	{
	 	&sql(UPDATE bmw.PATIENT_MOVEMENT set TYPE_OF_MOVEMENT=22,ADMITTING_PROVIDER=:AdmittingMDIhsAdc,
  	ATTENDING_PHYSICIAN=:AttendingMDIhsAdc,REFERRING_PROVIDER=NULL WHERE ien=:BDGN)
 	} 
  	Else{
  	&sql(UPDATE bmw.PATIENT_MOVEMENT set TYPE_OF_MOVEMENT=22,ADMITTING_PROVIDER=:AdmittingMDIhsAdc,
  	ATTENDING_PHYSICIAN=:AttendingMDIhsAdc,REFERRING_PROVIDER=:ReferringProvider WHERE ien=:BDGN)
 	}
    ;
  	Q "1"
 ;
}
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.BdgSetPatieE047D</DataLocation>
<DefaultData>BdgSetPatientMovementEditDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.BdgSetPatieE047D</IdLocation>
<IndexLocation>^BMW.BSF.SP.BdgSetPatieE047I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.BdgSetPatieE047S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="BdgSetPatientMovementEditDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.BdgSetPatientSpecialtyTransfer">
<Super>%RegisteredObject</Super>
<TimeChanged>63652,60485.429155</TimeChanged>
<TimeCreated>63340,60539.910066</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="SetPatientTransferQ">
<Type>%SQLQuery</Type>
<FormalSpec>UserId:%String,FacilityId:%String,PatientId:%String,MovDateTime:%String,MovementSpecialityId:%String,AttendingPhysician:%String,Diagnosis:%String,AdmissionId:%String</FormalSpec>
<SqlName>BDG_SetPatientSpecialtyTransferQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
	SELECT (BDG_SetPatientSpecialtyTransferM(:UserId,:FacilityId,:PatientId,:MovDateTime,:MovementSpecialityId,:AttendingPhysician,:Diagnosis,:AdmissionId)) 
	as RESULT</SqlQuery>
</Query>

<Method name="SetPatientTransferM">
<ClassMethod>1</ClassMethod>
<FormalSpec>UserId:%String,FacilityId:%String,PatientId:%String,MovDateTime:%String,MovementSpecialityId:%String,AttendingPhysician:%String,Diagnosis:%String,AdmissionId:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>BDG_SetPatientSpecialtyTransferM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	;call BMW_BSF_SP.BDG_SetPatientSpecialtyTransferQ('1','2906','26457','3150130.112831','28','2286')
	I (UserId'>0)!(FacilityId'>0)!(PatientId'>0)!(MovDateTime="")!(MovementSpecialityId'>0)!(AttendingPhysician'>0) Q "Required Fields Missing!"
 	;
	D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserId,FacilityId) 	
	I MovDateTime>$$NOW^XLFDT S MovDateTime=$$NOW^XLFDT	
	;
	S BDGR("PAT")=PatientId
	S BDGR("TRAN")="6" ;;For service transfer
	S BDGR("DATE")=MovDateTime	
	S BDGR("USER")=$$GET1^DIQ(200,+UserId,.01)
	S BDGR("ADMIT DATE")=MovDateTime
	I $G(AdmissionId)'="" S BDGR("ADMIT DATE")=$$GET1^DIQ(405,AdmissionId,.01,"I")
	S BDGR("ACCT")=0	
	I $G(AdmissionId)'="" S BDGR("ACCT")=$$GET1^DIQ(405,AdmissionId,.27,"I")	
	S BDGR("SRV")=$$GET1^DIQ(45.7,+MovementSpecialityId,9999999.01) ;; Set Service if Its a Service transfer
	S BDGR("ATMD")=$$GET1^DIQ(200,+AttendingPhysician,.01)
	S BDGR("REFP")=""
	S BDGR("PROOM")=""
	;
	S BDGPRT=0
	S BDGLOC=0 ;; BDGPM LOCATOR protocol issue fix
	I $$GET1^DIQ(9009020.1,1,.03)="YES" S BDGLOC=1 ;; if IHS ADT Parameter "USE LOCATOR CARDS?" is YES .. set to 1 for BDGPM LOCATOR protocol
	S DFN=PatientId				
	S XQY0=^DIC(19,$O(^DIC(19,"B","LROE",0)),0) ; Bug Reported: ;accessioning GUI (from LROE)
	;
	NEW DGQUIET,BDGAPI,ERR
 	S DGQUIET=1                                   ;must be in quiet mode
 	S BDGAPI=1                                    ;let DGPMV rtns know using API
 	I $G(DUZ("AG"))="" Q 2_U_"Agency not set"     ;must have agency set to IHS
 	; 	
 	S ERR=..Check() I ERR Q ERR   ;check common req fields
 	;
 	S UserTimeOut=+DTIME,DTIME=.0001 ;; override user timeout and take default for "Print Wrist Band" question -  	
 	D 6^BDGAPI ;; call transfer API 	
 	s DTIME=+UserTimeOut ;; set DTIME back to users timeout	
		
	I $G(ERR)'="" Q $G(ERR)
 	; 	
 	K query,RSC,RS,IEN
 	S query="select top 1 IEN from bmw.PATIENT_MOVEMENT where PATIENT='"_PatientId_"' and transaction_02=6 order by ien desc"
 	S RS=##class(%ScrollableResultSet).%New()  	
  	S RSC=RS.Prepare(query)
  	S RSC=RS.Execute()  	
  	I RSC'=1 Q "-1^Speciality Transfer is not found!"  	  	
  	S IEN=""
	WHILE RS.Next() { S IEN=RS.Data("IEN") }
	;
	I ($G(Diagnosis)'="") { 	
  	I $G(IEN)'=""{	
	S ^TMP($J,"WP",1,0)=Diagnosis
	D WP^DIE(405,IEN_",",99,"KA","^TMP($J,""WP"")")
  	}}
  	
  	Q "1"
]]></Implementation>
</Method>

<Method name="Check">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
 ;;CHECK(ARRAY) ; check common required fields
 NEW X,Y,%DT
 I '$G(BDGR("PAT")) Q 2_U_"Patient ID error"
 I ($G(BDGR("TRAN"))<1)!($G(BDGR("TRAN"))>6) Q 2_U_"Trans Code Error"
 S X=$G(BDGR("DATE")) I X'?7N1".".N D  I Y=-1 Q 2_U_"Date Error"
 . S %DT="RX" D ^%DT Q:Y=-1
 . S BDGR("DATE")=Y   ;reset date to FM format
 ;I $$GET1^DIQ(200,+$G(BDGR("USER")),.01)="" Q 2_U_"User Error"
 Q 0
 ;
]]></Implementation>
</Method>
</Class>


<Class name="BMW.BSF.SP.BdgSetPatientTransfer">
<Super>%RegisteredObject</Super>
<TimeChanged>63866,60866.934022</TimeChanged>
<TimeCreated>63340,60539.910066</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="SetPatientTransferQ">
<Type>%SQLQuery</Type>
<FormalSpec>UserId:%String,FacilityId:%String,PatientId:%String,MovDateTime:%String,WardId:%String,RoomId:%String,AdmissionId:%String</FormalSpec>
<SqlName>BDG_SetPatientTransferQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
	SELECT (BDG_SetPatientTransferM(:UserId,:FacilityId,:PatientId,:MovDateTime,:WardId,:RoomId,:AdmissionId)) 
	as RESULT</SqlQuery>
</Query>

<Method name="SetPatientTransferM">
<ClassMethod>1</ClassMethod>
<FormalSpec>UserId:%String,FacilityId:%String,PatientId:%String,MovDateTime:%String,WardId:%String,RoomId:%String,AdmissionId:%String</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>BDG_SetPatientTransferM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	;call BMW_BSF_SP.BDG_SetPatientTransferQ('1','2906','26457','3150130.112831','3','8')
	I (UserId'>0)!(FacilityId'>0)!(PatientId'>0)!(MovDateTime="")!(WardId'>0) Q "Required Fields Missing!"
 	;
	D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserId,FacilityId)
	I MovDateTime>$$NOW^XLFDT S MovDateTime=$$NOW^XLFDT	
	; 					
	S BDGR("PAT")=PatientId
	S BDGR("TRAN")="2" ;; For Ward Transfer
	S BDGR("DATE")=MovDateTime	
	S BDGR("ADMIT DATE")=MovDateTime
	I $G(AdmissionId)'="" S BDGR("ADMIT DATE")=$$GET1^DIQ(405,AdmissionId,.01,"I")
	S BDGR("USER")=$$GET1^DIQ(200,+UserId,.01)
	S BDGR("ACCT")=0
	I $G(AdmissionId)'="" S BDGR("ACCT")=$$GET1^DIQ(405,AdmissionId,.27,"I")	
	S BDGR("WARD")=$$GET1^DIQ(42,+WardId,.01)
	S BDGR("ROOM")="" I (+$G(RoomId)>0) S BDGR("ROOM")=$$GET1^DIQ(405.4,+RoomId,.01)	
	S BDGR("REFP")=""
	;
	S BDGPRT=0
	S BDGLOC=0 ;; BDGPM LOCATOR protocol issue fix
	I $$GET1^DIQ(9009020.1,1,.03)="YES" S BDGLOC=1 ;; if IHS ADT Parameter "USE LOCATOR CARDS?" is YES .. set to 1 for BDGPM LOCATOR protocol
	S DFN=PatientId				
	S XQY0=^DIC(19,$O(^DIC(19,"B","LROE",0)),0) ; Bug Reported: ;accessioning GUI (from LROE)
	;
	NEW DGQUIET,BDGAPI,ERR
 	S DGQUIET=1                                   ;must be in quiet mode
 	S BDGAPI=1                                    ;let DGPMV rtns know using API
 	I $G(DUZ("AG"))="" Q 2_U_"Agency not set"     ;must have agency set to IHS
 	;
 	S ERR=..Check() I ERR Q ERR   ;check common req fields
 	; 	
 	s UserTimeOut=+DTIME,DTIME=.0001 ;; override user timeout and take default for "Print Wrist Band" question -  	
 	D 2^BDGAPI ;; Call Ward Transfer API 	
 	
 	s DTIME=+UserTimeOut ;; set DTIME back to users timeout	
	
	I $G(ERR)'="" Q $G(ERR)
	;
	K query,RSC,RS,IEN
  	N RS	
 	S query="select top 1 IEN from bmw.PATIENT_MOVEMENT where PATIENT='"_PatientId_"' and transaction_02=2 and TYPE_OF_MOVEMENT=28 order by ien desc"
 	S RS=##class(%ScrollableResultSet).%New()  	
  	S RSC=RS.Prepare(query)
  	S RSC=RS.Execute()  	
  	I RSC'=1 Q "-1^Transfer is not found!"  	  	
  	S IEN=""
	WHILE RS.Next() { S IEN=RS.Data("IEN") }
	;
	I ($G(ERR)="") { 	
  	I $G(IEN)'=""{
 	NEW SQLCODE,%ROWCOUNT,%ROWID
  	&sql(UPDATE bmw.PATIENT_MOVEMENT set TYPE_OF_MOVEMENT=6 WHERE ien=:IEN)
    IF SQLCODE=0 {
	;Q "Update succeeded! Row count="_%ROWCOUNT_", Row ID = "_%ROWID 
	N DGQUIET,DGPMN
 	;
 	; QUIET MODE,NEW MVT
 	S DGQUIET=1,DGPMN=1,DFN=PatientId,DGPMT=2,DGPMDA=IEN,DGPMSP="" 	
 	;
 	D ..MovePatientPrior() 	
 	D ..MovePatientAfter()
 	; 	 		
 	D ..FireEvent() 	
 	;
    }}} 
    ;       
 	I $G(ERR)="" Q "1"
 	Q $G(ERR)
]]></Implementation>
</Method>

<Method name="Check">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
 ;;CHECK(ARRAY) ; check common required fields
 NEW X,Y,%DT
 I '$G(BDGR("PAT")) Q 2_U_"Patient ID error"
 I ($G(BDGR("TRAN"))<1)!($G(BDGR("TRAN"))>6) Q 2_U_"Trans Code Error"
 S X=$G(BDGR("DATE")) I X'?7N1".".N D  I Y=-1 Q 2_U_"Date Error"
 . S %DT="RX" D ^%DT Q:Y=-1
 . S BDGR("DATE")=Y   ;reset date to FM format
 ;I $$GET1^DIQ(200,+$G(BDGR("USER")),.01)="" Q 2_U_"User Error"
 Q 0
 ;
]]></Implementation>
</Method>

<Method name="MovePatientPrior">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	; SETS "PRIOR" ^UTILITY NODES FOR EVT DRIVER
 	;
 	;0 NODE PRIOR TO MOVEMENT - P:PRIOR
 	S (^UTILITY("DGPM",$J,DGPMT,DGPMDA,"P"),DGPMP)=$S(DGPMN=1:"",1:$G(^DGPM(DGPMDA,0)))
 	;
 	; IHS NODE IN ^UTILITY - P:PRIOR
 	S ^UTILITY("DGPM",$J,DGPMT,DGPMDA,"IHSP")=$S(DGPMN=1:"",1:$G(^DGPM(DGPMDA,"IHS")))
 	;
 	; ADDITIONAL TREATING SPECIALTY NODES
 	I DGPMT=6 S Y=DGPMDA D PRIOR^DGPMV36
 	Q
]]></Implementation>
</Method>

<Method name="MovePatientAfter">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	; SETS "AFTER" ^UTILITY NODES FOR EVT DRIVER
 	;
 	; 0 NODE AFTER MOVEMENT - A:AFTER
 	S (^UTILITY("DGPM",$J,DGPMT,DGPMDA,"A"),DGPMA)=$G(^DGPM(DGPMDA,0))
 	;
 	; IHS NODE IN ^UTILITY - A:AFTER
 	S ^UTILITY("DGPM",$J,DGPMT,DGPMDA,"IHSA")=$G(^DGPM(DGPMDA,"IHS"))
 	;
 	; ADDITIONAL TREATING SPECIALTY NODES
 	I DGPMT=6 S Y=DGPMDA D AFTER^DGPMV36
 	Q
]]></Implementation>
</Method>

<Method name="FireEvent">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
  	; INVOKES THE EVENT DRIVER
  	;
  	; SET/KILL X-REFS
  	;D RESET^DGPMDDCN
  	;
  	; BULLETINS FOR ROOM-BED CHANGE
  	;D EN^DGPMVBM
  	;
  	; CHECK THE ^UTILITY GLOBAL
  	S DGOK=0 F I=0:0 S I=$O(^UTILITY("DGPM",$J,I)) Q:'I  F J=0:0 S J=$O(^UTILITY("DGPM",$J,I,J)) Q:'J  I (^(J,"A")'=^("P"))!($G(^("IHSA"))'=$G(^("IHSP"))) S DGOK=1 Q
  	;
  	; INVOKE MOVEMENT EVENT DRIVER
  	I DGOK D ^DGPMEVT ;Invoke Movement Event Driver
  	;
  	; CLEANUP VARIABLES
  	D Q^DGPMV3  	
	;D EVENTS^DGPMV3
 	Q
]]></Implementation>
</Method>
</Class>


<Class name="BMW.BSF.SP.BsdGetPatientInsurances">
<Super>%RegisteredObject</Super>
<TimeChanged>63651,36259.515718</TimeChanged>
<TimeCreated>63340,58552.600207</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="PatientInsurancesQ">
<Type>%SQLQuery</Type>
<FormalSpec>Patient:%Text,Facility:%Text</FormalSpec>
<SqlName>AG_GetPatientInsurancesQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	Select AG_GetPatientInsurancesM(:Patient,IEN,:Facility) As Data from bmw.icd_diagnosis where ien<=(Select AG_GetPatientInsurancesCountM(:Patient,1,:Facility))]]></SqlQuery>
</Query>

<Method name="PatientInsurancesM">
<ClassMethod>1</ClassMethod>
<FormalSpec>Patient:%Text,K:%Integer,Facility:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_GetPatientInsurancesM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	N RTN,INDX
	K RTN,^TMP($J,"FSRPT")	
 	I $G(Patient)'>0 Q ""
 	I $G(Facility)'>0 Q ""
 	D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(1,Facility)
 	I $G(DUZ)'>0 Q ""
 	S DFN=$G(Patient)
	S DA=DFN
	S DUZ(2)=$G(Facility)
	S U="^"
	S IOSL="24"
	S IOST="C"
	S IOST(0)=9
	;S IOM=110
	D ..Start()  
	S INDX=$O(^TMP($J,"FSRPT",""))
	I +INDX>0 F  D  Q:(+INDX'>0)
	. S RTN(INDX)=$G(^TMP($J,"FSRPT",INDX))
	. S INDX=$O(^TMP($J,"FSRPT",INDX))
 	Q RTN(K)
]]></Implementation>
</Method>

<Method name="PatientInsurancesCountM">
<ClassMethod>1</ClassMethod>
<FormalSpec>Patient:%Text,K:%Integer,Facility:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>AG_GetPatientInsurancesCountM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	N RTN,INDX,INDEX
	K RTN,^TMP($J,"FSRPT")
 	I $G(Patient)'>0 Q ""
 	I $G(Facility)'>0 Q ""
 	D ##Class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(1,Facility)
 	I $G(DUZ)'>0 Q ""
 	S DFN=$G(Patient)
	S DA=DFN
	S DUZ(2)=$G(Facility)
	S U="^"
	S IOSL="24"
	S IOST="C"
	S IOST(0)=9
	;S IOM=110
	D ..Start()   
	S INDX=$O(^TMP($J,"FSRPT",""))
	I +INDX>0 F  D  Q:(+INDX'>0)
	. S RTN(INDX)=$G(^TMP($J,"FSRPT",INDX))
	. S INDX=$O(^TMP($J,"FSRPT",INDX))
	. I +INDX>0 S INDEX=INDX
 	Q $G(INDEX)
]]></Implementation>
</Method>

<Method name="Start">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	;START ;PEP - From TaskMan.
	N COUNT
 	S COUNT=0
 	K ^TMP($J,"FSRPT")
 	Q:'$G(DFN)  ;IHS/SD/TPF AG*7.1*1 REPORTED BY FDIH CALL FROM CIA REMOTE
 	;PROCEDURE HAD DFN=0 IM18987
 	Q:'$G(DUZ(2)) 	
 	D ^AGVAR
 	;D ..Alias()
 	D ..BmwAgFs4()
 	D ..BmwAgFs5()
 	D ..BmwAgFs6() 	
 	D ..BmwAgFs7()
]]></Implementation>
</Method>

<Method name="BmwAgFs4">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
	;BMWAGFS4 ; IHS/ASDS/EFG - FACE SHEET (3RD PARTY (MEDICARE) ELIGIBILITY) ; 
	;;7.1;PATIENT REGISTRATION;**2,4**;JAN 31, 2007
 	;MOVE LINES SO CAN READ THEM
 	;S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-"))
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=..PutSpace((IOM\2+15)-($L("*** THIRD PARTY ELIGIBILITY ***")))_"*** THIRD PARTY ELIGIBILITY ***"
 	Q:'$D(^AUPNMCR(DFN,0))
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="MEDICARE:"
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="TYPE"_"              "_"NUMBER"_"              "_"ELIG. DATE"_"              "_"ELIG. END DATE"
 	;F AG=1:1 S AG("DRENT")=AG,DIC=9000003.11,DA=DFN,DR=.02 D ^AGDICLK Q:$D(AG("LKERR"))  D L3A
 	;IM25256 OLD CODE ASSUMES CONTIGUOUS RECORDS EXIST
 	N IENS,COVTYP
 	S AG=0
 	F  S AG=$O(^AUPNMCR(DFN,11,AG)) Q:'AG  D
 	.S IENS=AG_","_DFN_","
 	.S COVTYP=$$GET1^DIQ(9000003.11,IENS,.03,"I")
 	.I COVTYP="D" S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=COVTYP_"                    "_$$GET1^DIQ(9000003.11,IENS,.06,"E")
 	.E  S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=COVTYP_"                 "_$$GET1^DIQ(9000003,DFN_",",.03,"E")
 	.;
 	.I COVTYP'="D" S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_$$GET1^DIQ(9000003,DFN_",",.04,"E")  ;SUFFIX
 	.S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"          "_$$GET1^DIQ(9000003.11,IENS,.01,"E")
 	.S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"          "_$$GET1^DIQ(9000003.11,IENS,.02,"E")
 	;END IM25256
 	S DIC=9000003,DR=2101,DA=DFN D ^AGDICLK
 	I $D(AG("LKPRINT")),AG("LKPRINT")]"" S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="   "_"NAME: "_AG("LKPRINT")
 	S DR=2102 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]""
 	;W !?3,"DATE OF BIRTH: ",AG("LKPRINT")
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="   "_"DATE OF BIRTH: "_$G(AG("LKPRINT"))  ;AG*71.*2 IM21507
]]></Implementation>
</Method>

<Method name="BmwAgFs5">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
	;BMWAGFS5 ; IHS/ASDS/EFG - FACE SHEET (MEDICAID) ;
 	;;7.1;PATIENT REGISTRATION;**4**;AUG 25,2005
 	;
 	G END:'$D(^AUPNMCD("AB",DFN))
 	S AG("STATE")=0,(AGHDG,AGPRTXTR,AGSTNUM)="N"
 	D HDG
 	S AGNINE=$$HTFM^XLFDT($H-275,1) ;Compute 9 Months earlier
GSTATE S AG("STATE")=$O(^AUPNMCD("AB",DFN,AG("STATE"))) G END:AG("STATE")="" S AGNUMBER=0
GNODE S AGNUMBER=$O(^AUPNMCD("AB",DFN,AG("STATE"),AGNUMBER))
 	G GSTATE:AGNUMBER=""
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$$GET1^DIQ(5,AG("STATE"),1)_"        "_AGNUMBER
 	D PLNAME
 	S DA=$O(^AUPNMCD("AB",DFN,AG("STATE"),AGNUMBER,0))
 	S %=$$GET1^DIQ(9000004,DA,2101)
 	S:$L(%) COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="   "_"NAME: "_%
 	S %=$$GET1^DIQ(9000004,DA,2102)
 	S:$L(%) COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="   "_"DATE OF BIRTH: "_%
 	;S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=""
 	G GNODE
IENNODE ;
WRITLN ;
 	Q
WSTNUM ;
 	Q
WELIGDT ;
WMCNAM ;
END K AGHDG,IEN,AGNINE,AGNUMBER,AGPRTXTR,AG("STATE"),AGSTNUM,AGPLNUM
 Q
HDG ;Q:AGHDG="Y"  W !,AG("-"),!,"MEDICAID:    " W:AGOPT(16)="Y" "(elig. dates null, or less than 9 months ago)"
 Q:$G(AGHDG)="Y"  S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-"))
 S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="MEDICAID:    " S:$G(AGOPT(16))="Y" ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"(elig. dates null, or less than 9 months ago)"  ;AG*7.1*4 IM26968
 S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="STATE"_"     "_"NUMBER"_"               "_"(updated)"_"  "_"ELIG DATE"_"    "_"COVERAGE"_"   "_"ELIG END" S AGHDG="Y"
 Q
PLNAME ;EP - Display Medicaid Plan Name info
 ;Get IEN of Patient in Medicaid Elig. File (^AUPNMCD)
 N AGIEN,AGDATA,AGUPDT,AGBDT,AGEDT,AGINSPTR,AGPLNAME,AGCOV
 S AGIEN=""
 F  S AGIEN=$O(^AUPNMCD("AB",DFN,AG("STATE"),AGNUMBER,AGIEN)) Q:AGIEN=""  D
 .;Get data from 0th node of Mcaid Elig File
 .S AGDATA=$G(^AUPNMCD(AGIEN,0))
 .Q:AGDATA=""
 .;Insurer pointer is the 10th piece of Medicaid Elig Files 0th node
 .S AGINSPTR=$P(AGDATA,U,10)
 .I $G(AGINSPTR)'="" D
 ..S AGPLNAME=$P($G(^AUTNINS(AGINSPTR,0)),U)
 ..S COUNT=COUNT+1,(TXT,^TMP($J,"FSRPT",COUNT))="PLAN: "_AGPLNAME
 .E  S COUNT=COUNT+1,(TXT,^TMP($J,"FSRPT",COUNT))="PLAN: (none)"
 .S AGUPDT=0
 .S Y=$P($G(^AUPNMCD(AGIEN,0)),U,8)
 .D DD^%DT S ^TMP($J,"FSRPT",COUNT)=$G(TXT)_"("_Y_")"
 .;D DD^%DT S ^TMP($J,"FSRPT",COUNT)=$G(TXT)_"                         "_"("_Y_")"
 .F  S AGUPDT=$O(^AUPNMCD(AGIEN,11,AGUPDT)) Q:'+AGUPDT  D
 ..S AGBDT=$P($G(^AUPNMCD(AGIEN,11,AGUPDT,0)),U)
 ..S AGEDT=$P($G(^AUPNMCD(AGIEN,11,AGUPDT,0)),U,2)
 ..S AGCOV=$P($G(^AUPNMCD(AGIEN,11,AGUPDT,0)),U,3)
 ..I AGBDT>DT,(AGBDT'="") Q
 ..I AGOPT(16)="Y",AGBDT<AGNINE Q
 ..S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="                                          "_$$FMTE^XLFDT(AGBDT,1)_"    "_$G(AGCOV)_"     "_$$FMTE^XLFDT(AGEDT,1) 
 Q
]]></Implementation>
</Method>

<Method name="BmwAgFs6">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
	;BMWAGFS6 ; IHS/ASDS/EFG - FACE SHEET (RAILROAD RETIREMENT) ;
	;;7.1;PATIENT REGISTRATION;**2**;JAN 31, 2007 
 	Q:'$D(^AUPNRRE(DFN,0)) 
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-"))
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="RAILROAD RETIREMENT:"
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="TYPE"_"                   "_"NUMBER"_"                                              "_"ELIG. DATE"_"                                                            "_"ELIG. END DATE"
 	F AG=1:1 S AG("DRENT")=AG,DIC=9000005.11,DA=DFN,DR=.02 D ^AGDICLK Q:$D(AG("LKERR"))  D L3A
 	S DIC=9000005,DR=2101,DA=DFN D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="   "_"NAME: "_AG("LKPRINT")
 	S DR=2102 D ^AGDICLK I $D(AG("LKPRINT")),AG("LKPRINT")]"" S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="   "_"DATE OF BIRTH: "_AG("LKPRINT")
L3A S DA=DFN,DIC=9000005.11,AG("DRENT")=AG,DR=.03 D ^AGDICLK Q:$D(AG("LKERR"))
 	S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="  "_AG("LKPRINT")
 	;S DIC=9000005,DR=.03,DA=DFN D ^AGDICLK Q:$D(AG("LKERR"))  ;IHS/SD/TPF AG*7.1*2 IM23259
 	I AG("LKPRINT")="D" D  ;IHS/SD/TPF AG*7.1*2 IM23259
 	.S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"                   "_$$GET1^DIQ(9000005.11,AG_","_DA_",",.06)
 	I AG("LKPRINT")'="D" D  ;IHS/SD/TPF AG*7.1*2 IM23259
 	.S DIC=9000005,DR=.03,DA=DFN D ^AGDICLK Q:$D(AG("LKERR"))
 	.S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"                   "_AG("LKPRINT")_$P(^AUPNRRE(DFN,0),U,4)
 	S AG("DRENT")=AG,DR=.01,DIC=9000005.11 D ^AGDICLK Q:$D(AG("LKERR"))  S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"          "_AG("LKPRINT")
 	S AG("DRENT")=AG,DR=.02,DIC=9000005.11 D ^AGDICLK Q:$D(AG("LKERR"))  S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"                    "_AG("LKPRINT")
 	Q
]]></Implementation>
</Method>

<Method name="BmwAgFs7">
<ClassMethod>1</ClassMethod>
<ProcedureBlock>0</ProcedureBlock>
<Implementation><![CDATA[
	;BMWAGFS7 ; IHS/ASDS/EFG - FACE SHEET (PRVT INS, VET, OTHER REG, ELIG.) ;  
 	;;7.1;PATIENT REGISTRATION;**2,8**;AUG 25, 2005
 	I $D(^AUPNPRVT(DFN,0)) D
 	.;I $Y+6>IOSL D HDR^AGFACE Q:$D(AGQUIT)
 	.S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-"))
 	.S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="PRIVATE INSURANCE:"
 	.S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="INS. COMPANY"_"                    "_"NUMBER"_"       "_"ELIG. DATE"_"       "_"ELIG. END DATE"
 	.S DIC=9000006.11,DR=.01,DA=DFN S AG=0 F  S AG=$O(^AUPNPRVT(DFN,11,AG)) Q:'AG  S AGL=$G(^AUPNPRVT(DFN,11,AG,0)) D PVT
 	Q:$D(AGQUIT)
 	I $D(^DPT(DFN,"VET")),^("VET")="Y" D VET
 	S DIC=9000001.41,DR=.01,DA=DFN,AG(1)=""
 	N I S I=0,AG(1)="" F  S I=$O(^AUPNPAT(DFN,41,I)) Q:'I  D  Q:$D(AGQUIT)
 	.Q:I=DUZ(2)
 	.;I $Y+6>IOSL D HDR^AGFACE Q:$D(AGQUIT)
 	.Q:$D(AGQUIT)
 	.S:$D(AG(1)) COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-"))
 	.S:$D(AG(1)) COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="THE PATIENT IS ALSO REGISTERED AT:"
 	.S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$P($G(^DIC(4,I,0)),U)_..PutSpace(IOM-$L($P($G(^DIC(4,I,0)),U)_"CHART #: "_$P($G(^AUPNPAT(DFN,41,I,0)),U,2)))_"CHART #: "_$P($G(^AUPNPAT(DFN,41,I,0)),U,2)
 	.K AG(1)
 	Q:$D(AGQUIT)
EMP ;PATIENT'S EMPLOYER
 S AGEMPIEN=$P($G(^AUPNPAT(DFN,0)),U,19) I AGEMPIEN]"" D
 .;I $Y+6>IOSL D HDR^AGFACE Q:$D(AGQUIT)
 .S AG(0)=$G(^AUTNEMPL(AGEMPIEN,0)) I AG(0)="" Q
 .N I F I=1:1:6 S AG(I)=$P(AG(0),U,I)
 .S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-"))
 .S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="PATIENT'S EMPLOYER: "_AG(1)
 .F I=2,3 S:AG(I)]"" COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="                    "_AG(I)
 .S:AG(4)]"" ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_", "_$P($G(^DIC(5,+AG(4),0)),U,2)
 .S:AG(5)]"" ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"  "_AG(5)
 .S:AG(6)]"" COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="PHONE: "_AG(6)
 Q:$D(AGQUIT)
 K AGEMPIEN
SPEMP ;SPOUSE'S EMPLOYER
 S AGEMPIEN=$P($G(^AUPNPAT(DFN,0)),U,22) I AGEMPIEN]"" D
 .;I $Y+6>IOSL D HDR^AGFACE Q:$D(AGQUIT)
 .S AG(0)=$G(^AUTNEMPL(AGEMPIEN,0)) I AG(0)="" Q
 .N I F I=1:1:6 S AG(I)=$P(AG(0),U,I)
 .S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-"))
 .S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="SPOUSE'S EMPLOYER: "_AG(1)
 .F I=2,3 S:AG(I)]"" COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="                    "_AG(I)
 .S:AG(4)]"" ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_", "_$P($G(^DIC(5,+AG(4),0)),U,2)
 .S:AG(5)]"" ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"  "_AG(5)
 .S:AG(6)]"" COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="             "_"PHONE: "_AG(6)
 Q:$D(AGQUIT)
 K AGEMPIEN
ELIG ;ELIGIBILITY FOR CARE
 K AG("DRENT") S DIC=9000001,DA=DFN,DR=$S(AGOPT(14)="Y":1124,1:1112) D ^AGDICLK I '$D(AG("LKERR")) S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-")) K ^TMP($J,"W") S X="      ***  ELIGIBILITY FOR CARE: "_AG("LKPRINT")_"  ***",COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(X),DIWL=5,DIWR=75,DIWF="W" D ^DIWP,^DIWW
 K DIWF,DIWL,DIWR
 Q
PVT ;I $P(AGL,U)]"",$D(^AUTNINS($P(AGL,U),0)) Q:(($P(AGL,U,7)]"")&(+$P(AGL,U,7)<DT))  W !,$E($P(^AUTNINS($P(AGL,U),0),U),1,29),?29,$E($P(AGL,U,2),1,26),?46 S Y=$P(AGL,U,6) D DD^%DT W Y S Y=$P(AGL,U,7) D DD^%DT W ?60,Y
 ;IHS/SD/TPF 4/28/2006 AG*7.1*2 IM20635
 I $P(AGL,U)]"",$D(^AUTNINS($P(AGL,U),0)) Q:(($P(AGL,U,7)]"")&(+$P(AGL,U,7)<DT))  D
 .S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$E($P(^AUTNINS($P(AGL,U),0),U),1,29)
 .N AGPH
 .S AGPH=$P($G(^AUPNPRVT(DFN,11,AG,2)),U)
 .I AGPH]"" S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(48-$L(^TMP($J,"FSRPT",COUNT)_AGPH))_AGPH
 .I AGPH="" D                                                                        ;AG*7.1*8
 ..S AGPH=$P($G(^AUPNPRVT(DFN,11,AG,0)),U,8)
 ..I AGPH]"" S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_..PutSpace(36-$L($E($P(^AUTNINS($P(AGL,U),0),U),1,29)))_$P($G(^AUPN3PPH(AGPH,0)),U,4)
 .S Y=$P(AGL,U,6) D DD^%DT S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_" "_Y S Y=$P(AGL,U,7) D DD^%DT S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_"  "_Y
 Q
VET ;VETERAN
 ;I $Y+6>IOSL D HDR^AGFACE Q:$D(AGQUIT)
 S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)=$G(AG("-"))
 K ^UTILITY("DIQ1",$J)
 K DIC,DIE,DIR,DIQ,DR
 S DIC=2,DA=DFN,AGSCRN=$P($T(@1),";;",2)
 F AG=2,3,4,6,7 D
 .S X=$P(AGSCRN,";",AG),DR=$P(X,U,4)
 .S COUNT=COUNT+1,^TMP($J,"FSRPT",COUNT)="  "_$P(X,U,2)_$P(^DD(2,DR,0),U)_" :  "
 .D EN^DIQ1
 .S ^TMP($J,"FSRPT",COUNT)=^TMP($J,"FSRPT",COUNT)_$G(^UTILITY("DIQ1",$J,2,DA,DR))
 .K ^UTILITY("DIQ1",$J)
 K ^UTILITY("DIQ1",$J),DR,AGSCRN,X
 K DIC,DIE,DIR,DIQ,DR
 Q
1 ;;^20^^1901;^13^^.325;^9^^.326;^4^^.327;^8^^.32101;^16^^.301;^22^^.313
]]></Implementation>
</Method>

<Method name="PutSpace">
<ClassMethod>1</ClassMethod>
<FormalSpec>NO:%String=""</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<Implementation><![CDATA[
	N IND,STR
 	S IND=0
 	S STR=""
 	I +NO'>0  Q " "
 	F  D  Q:(+IND>NO)
 	.I IND>4 S STR=STR_" "
 	.S IND=IND+1
 	Q STR
]]></Implementation>
</Method>
</Class>


<Class name="BMW.BSF.SP.BsdGetSchedulingAccessBlocks">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,39511.447226</TimeChanged>
<TimeCreated>63342,38876.00928</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="GetAccessBlocksQ">
<Type>%SQLQuery</Type>
<FormalSpec>ClinicId:%Integer,StartDate:%Date,EndDate:%Date</FormalSpec>
<SqlName>BSD_GetSchedulingAccessBlocksQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[select * from bmw.BSDX_access_block where resource =:ClinicId and STARTTIME >= ((BSD_GetLastAccessBlockSinceM(:ClinicId, :StartDate))) and STARTTIME <= ((BSD_GetEndOfWeekOdbcM(:EndDate)))]]></SqlQuery>
</Query>

<Method name="GetLastAccessBlockSinceM">
<ClassMethod>1</ClassMethod>
<FormalSpec>ClinicId:%Integer,StartDate:%Date</FormalSpec>
<ReturnType>%Date</ReturnType>
<SqlName>BSD_GetLastAccessBlockSinceM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
 S EOW=##class(BMW.BSF.SP.BsdGetSchedulingConfigAccessBlocks).GetEndOfWeekOdbcM(StartDate)
 S FSUN=##class(BMW.BSF.SP.BsdGetSchedulingConfigAccessBlocks).GetStartOfWeekM(##class(BMW.BSF.SP.BsdGetSchedulingConfigAccessBlocks).GetLastAccessBlockM(ClinicId, EOW))
 Q ##class(%Library.Date).LogicalToOdbc(FSUN)
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.BsdGetSched8FC9D</DataLocation>
<DefaultData>BsdGetSchedulingAccessBlocksDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.BsdGetSched8FC9D</IdLocation>
<IndexLocation>^BMW.BSF.SP.BsdGetSched8FC9I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.BsdGetSched8FC9S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="BsdGetSchedulingAccessBlocksDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.BsdGetSchedulingAvailableSlots">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,39490.808286</TimeChanged>
<TimeCreated>63342,38876.00928</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="GetAvailableSlotsQ">
<Type>%SQLQuery</Type>
<FormalSpec>ClinicIds:%String,StartDate:%Date,EndDate:%Date</FormalSpec>
<SqlName>BSD_GetSchedulingAvailableSlotsQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>select * from bmw.BSDX_access_block where ien %INLIST (BSD_GetAvailableSlotsM(:ClinicIds,:StartDate,:EndDate)) 
 order by STARTTIME</SqlQuery>
</Query>

<Method name="GetAvailableSlotsM">
<ClassMethod>1</ClassMethod>
<FormalSpec>ClinicIds:%String,StartDate:%Date,EndDate:%Date</FormalSpec>
<ReturnType>%List</ReturnType>
<SqlName>BSD_GetAvailableSlotsM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	 
 S INDEX=1
 S IENS=""
 S Clinic=$P(ClinicIds,",",INDEX)
 I +Clinic>0 F  D  Q:(+Clinic'>0)
 . S NOC=INDEX,INDEX=INDEX+1
 . S Clinic=$P(ClinicIds,",",INDEX)
 S NOC=1000/NOC
 S INDEX=1
 S Clinic=$P(ClinicIds,",",INDEX)
 I +Clinic>0 F  D  Q:(+Clinic'>0) 
 . S query="select top "_NOC_" IEN from (select * from bmw.BSDX_access_block where resource = '"_Clinic_"' and DATEDIFF(D, STARTTIME,'"_(##class(BMW.BSF.SP.BsdGetSchedulingAvailableSlots).GetLastAvailableSlotsSinceM(Clinic, StartDate))_"') <= 0 ) where DATEDIFF(D, STARTTIME,'"_(##class(BMW.BSF.SP.BsdGetSchedulingConfigAccessBlocks).GetEndOfWeekOdbcM(EndDate))_"') >= 0 Order by STARTTIME" 
 . S RSLTSET=##class(%ScrollableResultSet).%New()  	
 . S COUNT=RSLTSET.Prepare(query)
 . S COUNT=RSLTSET.Execute()
 . I COUNT="1" WHILE RSLTSET.Next() {S IENS=IENS_RSLTSET.Data("IEN")_"," }
 . S INDEX=INDEX+1 
 . S Clinic=$P(ClinicIds,",",INDEX) 
 I $G(IENS)'="" S IENS=$EXTRACT(IENS,1,$L(IENS)-1)
 I $L(IENS)<1 Q "" 
 S IENS=$LISTFROMSTRING(IENS)
 Q IENS
]]></Implementation>
</Method>

<Method name="GetLastAvailableSlotsSinceM">
<ClassMethod>1</ClassMethod>
<FormalSpec>ClinicIds:%String,StartDate:%Date</FormalSpec>
<ReturnType>%Date</ReturnType>
<SqlName>BSD_GetLastAvailableSlotsSinceM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
 S EOW=##class(BMW.BSF.SP.BsdGetSchedulingConfigAccessBlocks).GetEndOfWeekOdbcM(StartDate)
 S FSUN=##class(BMW.BSF.SP.BsdGetSchedulingConfigAccessBlocks).GetStartOfWeekM(##class(BMW.BSF.SP.BsdGetSchedulingConfigAccessBlocks).GetLastAvailableSlotM(ClinicIds, EOW))
 Q ##class(%Library.Date).LogicalToOdbc(FSUN)
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.BsdGetSched12E2D</DataLocation>
<DefaultData>BsdGetSchedulingAvailableSlotsDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.BsdGetSched12E2D</IdLocation>
<IndexLocation>^BMW.BSF.SP.BsdGetSched12E2I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.BsdGetSched12E2S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="BsdGetSchedulingAvailableSlotsDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.BsdGetSchedulingConfigAccessBlocks">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,39449.409566</TimeChanged>
<TimeCreated>63342,38876.00928</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="GetConfigAccessBlocksQ">
<Type>%SQLQuery</Type>
<FormalSpec>ClinicId:%Integer,EndDate:%Date</FormalSpec>
<SqlName>BSD_GetConfigAccessBlocksQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[select * from bmw.BSDX_access_block where resource =:ClinicId and STARTTIME >= ((BSD_GetLastTwoAccessBlockSinceM(:ClinicId))) and STARTTIME <= ((BSD_GetEndOfWeekOdbcM(:EndDate)))]]></SqlQuery>
</Query>

<Method name="GetLastAccessBlockM">
<ClassMethod>1</ClassMethod>
<FormalSpec>ClinicId:%Integer,StartDate:%Date</FormalSpec>
<ReturnType>%Date</ReturnType>
<SqlName>BSD_GetLastAccessBlockM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
 &sql(select top 1 STARTTIME INTO :ResultDate from bmw.BSDX_access_block where resource=:ClinicId and DATEDIFF(D, STARTTIME,:StartDate) >= 0 order by STARTTIME desc) 
 I $D(ResultDate) I ##class(%Library.FilemanDate).DateToLogical(##class(%Library.Date).OdbcToLogical(StartDate))>=ResultDate Q ##class(%Library.FilemanDate).LogicalToDate($P(ResultDate,"."))
 Q ##class(%Library.Date).OdbcToLogical(StartDate)
]]></Implementation>
</Method>

<Method name="GetLastAvailableSlotM">
<ClassMethod>1</ClassMethod>
<FormalSpec>ClinicIds:%String,StartDate:%Date</FormalSpec>
<ReturnType>%Date</ReturnType>
<SqlName>BSD_GetLastAvailableSlotM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
 &sql(select top 1 STARTTIME INTO :ResultDate from bmw.BSDX_access_block where resource in (:ClinicIds) and DATEDIFF(D, STARTTIME,:StartDate) >= 0 order by STARTTIME desc) 
 I $D(ResultDate) I ##class(%Library.FilemanDate).DateToLogical(##class(%Library.Date).OdbcToLogical(StartDate))>=ResultDate Q ##class(%Library.FilemanDate).LogicalToDate($P(ResultDate,"."))
 Q ##class(%Library.Date).OdbcToLogical(StartDate)
]]></Implementation>
</Method>

<Method name="GetLastTwoAccessBlockSinceM">
<ClassMethod>1</ClassMethod>
<FormalSpec>ClinicId:%Integer</FormalSpec>
<ReturnType>%Date</ReturnType>
<SqlName>BSD_GetLastTwoAccessBlockSinceM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
 S CEOW=..GetEndOfWeekOdbcM(##class(%Library.Date).LogicalToOdbc($P($H,",")))
 S FSUN=..GetStartOfWeekOdbcM(##class(%Library.Date).LogicalToOdbc(..GetConfigLastAccessBlockM(ClinicId, CEOW)))
 S SSUN=..GetStartOfWeekM(..GetConfigLastAccessBlockM(ClinicId, FSUN))
 Q ##class(%Library.Date).LogicalToOdbc(SSUN)
]]></Implementation>
</Method>

<Method name="GetStartOfWeekOdbcM">
<ClassMethod>1</ClassMethod>
<FormalSpec>StartDate:%Date</FormalSpec>
<ReturnType>%Date</ReturnType>
<SqlName>BSD_GetStartOfWeekOdbcM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
 S FSUN=..GetStartOfWeekM(##class(%Library.Date).OdbcToLogical(StartDate))
 Q ##class(%Library.Date).LogicalToOdbc(FSUN)
]]></Implementation>
</Method>

<Method name="GetEndOfWeekOdbcM">
<ClassMethod>1</ClassMethod>
<FormalSpec>EndDate:%Date</FormalSpec>
<ReturnType>%Date</ReturnType>
<SqlName>BSD_GetEndOfWeekOdbcM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
 S FSAT=..GetEndOfWeekM(##class(%Library.Date).OdbcToLogical(EndDate))
 Q ##class(%Library.Date).LogicalToOdbc(FSAT)
]]></Implementation>
</Method>

<Method name="GetConfigLastAccessBlockM">
<ClassMethod>1</ClassMethod>
<FormalSpec>ClinicId:%Integer,StartDate:%Date</FormalSpec>
<ReturnType>%Date</ReturnType>
<SqlName>BSD_GetConfigLastAccessBlockM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
 &sql(select top 1 STARTTIME INTO :ResultDate from bmw.BSDX_access_block where resource=:ClinicId and DATEDIFF(D, STARTTIME,:StartDate) > 0 order by STARTTIME desc) 
 I $D(ResultDate) I ##class(%Library.FilemanDate).DateToLogical(##class(%Library.Date).OdbcToLogical(StartDate))>=ResultDate Q ##class(%Library.FilemanDate).LogicalToDate($P(ResultDate,"."))
 Q ##class(%Library.Date).OdbcToLogical(StartDate)
]]></Implementation>
</Method>

<Method name="GetStartOfWeekM">
<ClassMethod>1</ClassMethod>
<FormalSpec>DateOfWeek:%Date</FormalSpec>
<ReturnType>%Date</ReturnType>
<SqlName>BSD_GetStartOfWeekM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	
 //Set DateOfWeek = ##class(%Library.Date).OdbcToLogical(DateOfWeek)
	Set tWeekDay = +$ZDT(DateOfWeek,10)
	Set tStart = DateOfWeek - tWeekDay + 0 //0-sunday , 1-Monday, 2-Tuesday .. so on
	Set:tStart>DateOfWeek tStart = tStart - 7
	Quit ##class(%Library.Date).LogicalToOdbc(tStart)
]]></Implementation>
</Method>

<Method name="GetEndOfWeekM">
<ClassMethod>1</ClassMethod>
<FormalSpec>DateOfWeek:%Date</FormalSpec>
<ReturnType>%Date</ReturnType>
<SqlName>BSD_GetEndOfWeekM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	
 //Set DateOfWeek = ##class(%Library.Date).OdbcToLogical(DateOfWeek)
	Set tWeekDay = +$ZDT(DateOfWeek,10)
	Set tStart = DateOfWeek - tWeekDay + 6 //0-sunday , 1-Monday, 2-Tuesday .. so on
	//Set:tStart>DateOfWeek tStart = tStart - 7
	Quit ##class(%Library.Date).LogicalToOdbc(tStart)
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.BsdGetSched764FD</DataLocation>
<DefaultData>BsdGetSchedulingConfigAccessBlocksDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.BsdGetSched764FD</IdLocation>
<IndexLocation>^BMW.BSF.SP.BsdGetSched764FI</IndexLocation>
<StreamLocation>^BMW.BSF.SP.BsdGetSched764FS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="BsdGetSchedulingConfigAccessBlocksDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.BsdSetPatientAppointment">
<Super>%RegisteredObject</Super>
<TimeChanged>63817,57322.207001</TimeChanged>
<TimeCreated>63344,55658.78317</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="SetPatientAppointmentQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientIen:%Text,ClinicIen:%Text,ApptDateTime:%Text,Apptlength:%Integer,ApptReason:%Text,WalkInOrAppt:%Text,NoOfSlots:%Integer,IsOverbook:%Boolean,UserId:%Integer,FacilityId:%Integer</FormalSpec>
<SqlName>BSD_SetPatientAppointmentQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>
		SELECT (BSD_SetPatientAppointmentM(:PatientIen,:ClinicIen,:ApptDateTime,:Apptlength,:ApptReason,:WalkInOrAppt,:NoOfSlots,
		:IsOverbook,:UserId,:FacilityId))
		As Result</SqlQuery>
</Query>

<Method name="SetPatientAppointmentM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientIen:%Text,ClinicIen:%Text,ApptDateTime:%Text,Apptlength:%Integer,ApptReason:%Text,WalkInOrAppt:%Text,NoOfSlots:%Integer,IsOverbook:%Boolean,UserId:%Integer,FacilityId:%Integer</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>BSD_SetPatientAppointmentM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	
	I PatientIen<1,ClinicIen<1,Apptlength<1,WalkInOrAppt<1,UserId<1,FacilityId<1 Q 0
	N IsSlotAvlbl,ApptId,RSLT
	S DFN=PatientIen,CLN=ClinicIen,ADT=ApptDateTime,LEN=Apptlength,APPTRSN=ApptReason,TYP=WalkInOrAppt
	;S ^JW(ClinicIen,PatientIen,ApptDateTime)=Apptlength_"^"_ApptReason_"^"_WalkInOrAppt
	S BSDR("PAT")=DFN
 	S BSDR("CLN")=CLN
 	S BSDR("TYP")=TYP
 	S BSDR("ADT")=ADT
 	S BSDR("LEN")=LEN
 	S BSDR("OI")=APPTRSN
 	S BSDR("USR")=UserId
 	
 	S IsSlotAvlbl=1
 	
 	I $L(APPTRSN)<2 K BSDR("OI"),APPTRSN
 	D ##class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserId,FacilityId)
 	
 	
 	s UserTimeOut=+DTIME,DTIME=.001 ;; override user timeout and take default for "Print Wrist Band" question -
 	
 	TRY 
 	{ 		
 		L +^SC(BSDR("CLN"),"S",BSDR("ADT")):.01 E  THROW RSLT="-1^Locked ^SC record"
 		
 		I 'IsOverbook 
 		{ 
 			&sql(select count(ien) INTO :ApptCount from bmw.appointment_2c2_98 
 				where APPOINTMENT_DATETIME =:ApptDateTime and clinic=:ClinicIen and real_appointment=1)
 				
 			I NoOfSlots'>+$G(ApptCount)
 			{
	 		 	s IsSlotAvlbl=0
 			}
 		}
 	
 		I IsSlotAvlbl S ERR=$$MAKE^BSDAPI(.BSDR) HANG .02
 	
 		L -^SC(BSDR("CLN"),"S",BSDR("ADT"))
 	}
 	 	
 	CATCH 
 	{
 		L -^SC(BSDR("CLN"),"S",BSDR("ADT")) 		
 	}
 	
 	s DTIME=+UserTimeOut ;; set DTIME back to users timeout
 	 	 	
 	I 'IsSlotAvlbl Q "-2^Slot not available"
 	
 	I $D(RSLT) Q RSLT
 	 	
 	I $G(ERR)=0 s RSLT=1
 	E  s RSLT="0^"_$P($G(ERR),"^",2)
 	
 	;Q RSLT
	I $G(RSLT)=1 
	{
		S ApptId=PatientIen_"||"_BSDR("ADT")
		
		&sql(SELECT rowid INTO :RSLT FROM BMW.Appointment_2c2_98
        WHERE rowid = :ApptId)        
	} 
	Q $G(RSLT)
]]></Implementation>
</Method>

<Query name="GetPatientAppointmentQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientIen:%Text</FormalSpec>
<SqlName>BSD_GetPatientAppointmentQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>
		SELECT a.RowId, a.VA_Patient as PATIENT, a.IEN as APPOINTMENT_DATE_TIME, a.APPOINTMENT_DATETIME as APPT_DATE_TIME_STRING, 
		a.Clinic, a.Current_Status, a.Status, a.Purpose_Of_Visit, a.Appointment_Type, a.NoShowCancelled_By as NO_SHOW_CANCELLED_BY, 
		a.NoShowCancel_DateTime as NO_SHOW_CANCEL_DATE_TIME, a.Cancellation_Reason, a.Cancellation_Remarks, 
		a.Appt__Cancelled as APPT_CANCELLED, p.Data_Entry_Clerk as Patient_Entry_Clerk, a.Data_Entry_Clerk as App_Entry_Clerk, 
		p.Length_Of_Appt, p.Other, p.Ward_loc, a.DATE_APPT__MADE as Date_Appointment_Made, p.Overbook AS OVER_BOOK, p.Check_in_user, 
		p.Check_out_user, p.CheckedIn AS CHECKED_IN, p.CHecked_out, p.Check_In_Entered, p.Check_Out_Entered 
		FROM BMW.PATIENT_44_001C44_003 p Right Join BMW.Appointment_2C2_98 a On p.Appointment_44c44_001 = a.Clinic || '||' || a.IEN 
		and a.VA_PATIENT=:PatientIen and  p.Patient=:PatientIen</SqlQuery>
</Query>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.BsdSetPatie65ABD</DataLocation>
<DefaultData>BsdSetPatientAppointmentDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.BsdSetPatie65ABD</IdLocation>
<IndexLocation>^BMW.BSF.SP.BsdSetPatie65ABI</IndexLocation>
<StreamLocation>^BMW.BSF.SP.BsdSetPatie65ABS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="BsdSetPatientAppointmentDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.BsdSetPatientAppointmentCheckIn">
<Super>%RegisteredObject</Super>
<TimeChanged>65205,56698.178233</TimeChanged>
<TimeCreated>63344,55658.78317</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="SetAppointmentCheckInQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientIen:%Text,VisitDateTime:%Text,ClinicIen:%Text,ProviderIen:%Text,ApptDateTime:%Text,WalkInOrAppt:%Text,ClinicStopCode:%Text</FormalSpec>
<SqlName>BSD_SetPatientAppointmentCheckInQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
	SELECT IEN
    FROM BMW.Visit
    WHERE IEN= (BSD_SetPatientAppointmentCheckInM(:PatientIen, :VisitDateTime,:ClinicIen,:ProviderIen,:ApptDateTime,:WalkInOrAppt,:ClinicStopCode))</SqlQuery>
</Query>

<Method name="SetAppointmentCheckInM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientIen:%Text,CheckInDateTime:%Text,ClinicIen:%Text,ProviderIen:%Text,ApptDateTime:%Text,WalkInOrAppt:%Text,ClinicStopCode:%Text</FormalSpec>
<Language>cache</Language>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>BSD_SetPatientAppointmentCheckInM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I +$G(PatientIen)<1 Q 0
	I +$G(ClinicIen)<1 Q 0
	I $G(CheckInDateTime)="" Q 0
	I +$G(DUZ)<1 Q 0
	
	K APCDIN,APCDOUT
 	N APCDIN,APCDOUT
	
	;; If Check-In time is greater than current DB time; and the diff is not more than 5 min or 300 seconds .. change CheckInTime to CurrentDbTime
	I $$FMDIFF^XLFDT(CheckInDateTime,$$NOW^XLFDT,2)>0,$$FMDIFF^XLFDT(CheckInDateTime,$$NOW^XLFDT,2)<301 S CheckInDateTime=$$NOW^XLFDT	
	;D ADDVISIT^BMW.BMWBSDX(.APCDOUT,PatientIen,CheckInDateTime,ClinicIen,ProviderIen,ApptDateTime,WalkInOrAppt,ClinicStopCode)	
	S APCDIN("PAT")=PatientIen
 	S APCDIN("VISIT DATE")=CheckInDateTime
 	S APCDIN("HOS LOC")=ClinicIen
 	S APCDIN("SITE")=$$FAC^BSDV(APCDIN("HOS LOC"))
 	S APCDIN("USR")=DUZ
 	s APCDIN("TIME RANGE")=-1
 	S APCDIN("APPT DATE")=ApptDateTime
 	I +$G(ClinicStopCode)>0 S APCDIN("CLINIC CODE")=ClinicStopCode
 	I +$G(APCDIN("CLINIC CODE"))<1 S APCDIN("CLINIC CODE")=$$GET1^DIQ(40.7,+$$GET1^DIQ(44,APCDIN("HOS LOC"),8,"I"),1)
 	S APCDIN("VISIT TYPE")=$P($G(^APCDSITE(APCDIN("SITE"),0)),"^",11)
 	I $G(APCDIN("VISIT TYPE"))="" S APCDIN("VISIT TYPE")=$$GET1^DIQ(9001000,APCDIN("SITE"),.04,"I")
 	S APCDIN("SRV CAT")=$$SERCAT^BSDV(APCDIN("HOS LOC"),APCDIN("PAT"))
 	N VISITDT
 	S VISTDT=$P(CheckInDateTime,".",1)
 	
 	// checking if visit already exists for this patient in this clinic for this appointment with this service category and is not marked DELETED
 	NEW SQLCODE,%ROWCOUNT,%ROWID
  	&sql(select top 1 IEN into :VIEN from bmw.visit where (APPT_DATETIME=:ApptDateTime or APPT_DATETIME is null) and
  		 hospital_location=:ClinicIen and patient_name=:PatientIen and service_category=:APCDIN("SRV CAT")
  		 and DATE_VISIT_CREATED = :VISTDT
  		 and DATETIME_VISIT_DELETED is NULL and (delete_flag is NULL OR delete_flag=0)
  		 )
 	S RS=""
 	//IF visit found, only go for Check-In
 	I $G(VIEN)>0 D
 	.	S RS=VIEN
 	.	;; If visit found.. only do Check-in..no visit creation...
 	.	;; set variables used by checkin call
 	.	S BSDR("PAT")=APCDIN("PAT")
 	.	S BSDR("CDT")=APCDIN("VISIT DATE")
 	.	S BSDR("CLN")=$G(APCDIN("HOS LOC"))
 	.	S BSDR("ADT")=$G(APCDIN("APPT DATE"))
 	.	S BSDR("USR")=DUZ
 	.	S BSDR("VIEN") = RS ;;visit IEN (sent if new visit is NOT to be created)
 	.	S ERR=$$CHECKIN^BSDAPI(.BSDR)
 	.	I +ERR=1 s RS="0^"_$P(ERR,"^",2)
 	I +VIEN>0 Q RS
 	;K APCDIN,APCDOUT
 	;N APCDIN,APCDOUT
	;S APCDIN("PAT")=PatientIen 
 	;S APCDIN("VISIT DATE")=CheckInDateTime
 	;S APCDIN("HOS LOC")=ClinicIen
 	;S APCDIN("SITE")=$$FAC^BSDV(APCDIN("HOS LOC"))
 	;S APCDIN("USR")=DUZ
 	;s APCDIN("TIME RANGE")=10
 	I $G(ProviderIen)>0 S APCDIN("PROVIDER")=ProviderIen
 	;S APCDIN("APPT DATE")=ApptDateTime
 	S APCDIN("APCDAPPT")=WalkInOrAppt
 	;I +$G(ClinicStopCode)>0 S APCDIN("CLINIC CODE")=ClinicStopCode
 	I +$G(APCDIN("CLINIC CODE"))<1 S APCDIN("CLINIC CODE")=$$GET1^DIQ(40.7,+$$GET1^DIQ(44,APCDIN("HOS LOC"),8,"I"),1)
 	;S APCDIN("VISIT TYPE")=$P($G(^APCDSITE(APCDIN("SITE"),0)),"^",11)
 	;I $G(APCDIN("VISIT TYPE"))="" S APCDIN("VISIT TYPE")=$$GET1^DIQ(9001000,APCDIN("SITE"),.04,"I")
 	;S APCDIN("SRV CAT")=$$SERCAT^BSDV(APCDIN("HOS LOC"),APCDIN("PAT"))
 	;I $G(APCDIN("SRV CAT"))="" S APCDIN("SRV CAT")=$P($G(^APCDSITE(DUZ(2),0)),"^",12)
 	S APCDIN("APCDOPT")=$O(^DIC(19,"B","SD IHS PCC LINK",0))
 	D GETVISIT^APCDAPI4(.APCDIN,.APCDOUT)
 	I $D(APCDOUT(0))=1 Q $O(APCDOUT(0))
	Q $D(APCDOUT(0))
]]></Implementation>
</Method>

<Method name="TestVisitFilter">
<ClassMethod>1</ClassMethod>
<FormalSpec>VISTDT:%Text</FormalSpec>
<Language>cache</Language>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>TestVisitFilter</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[

  	&sql(select top 1 IEN, delete_flag,DATE_VISIT_CREATED INTO :Ien,:Dlfg,:VstDtCr from bmw.visit where 
  		  DATE_VISIT_CREATED = :VISTDT   and(delete_flag is not NULL)  		 
  		 )
  		 ;W DLFLG
  		 Q "!~"_Ien_"^"_$G(Dlfg)_"^"_$G(VstDtCr)
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.BsdSetPatieFFFCD</DataLocation>
<DefaultData>BsdSetPatientAppointmentCheckInDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.BsdSetPatieFFFCD</IdLocation>
<IndexLocation>^BMW.BSF.SP.BsdSetPatieFFFCI</IndexLocation>
<StreamLocation>^BMW.BSF.SP.BsdSetPatieFFFCS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="BsdSetPatientAppointmentCheckInDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.BsdSetPatientAppointmentUndoCheckIn">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,39320.619237</TimeChanged>
<TimeCreated>63344,55658.78317</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="SetAppointmentUndoCheckInQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientIen:%Text,VisitDateTime:%Text,AppointmentIen:%Text,ClinicIen:%Text,ApptDateTime:%Text</FormalSpec>
<SqlName>BSD_SetPatientAppointmentUndoCheckInQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
	SELECT (BSD_SetPatientAppointmentUndoCheckInM(:PatientIen, :VisitDateTime,:AppointmentIen,:ClinicIen,:ApptDateTime)) as IEN</SqlQuery>
</Query>

<Method name="SetAppointmentUndoCheckInM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientIen:%Text,VisitDateTime:%Text,AppointmentIen:%Text,ClinicIen:%Text,ApptDateTime:%Text</FormalSpec>
<Language>cache</Language>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>BSD_SetPatientAppointmentUndoCheckInM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I +$G(PatientIen)<1 Q 0
	I +$G(ClinicIen)<1 Q 0
	I $G(VisitDateTime)="" Q 0
	I $G(AppointmentIen)="" Q 0
	I $G(ApptDateTime)="" Q 0
			
	I $$GET1^DIQ(9009017.2,+ClinicIen,.09)'="YES" Q 0  ;don't create visit	
 	; if patient already checked in, use VDATE code 	
 	N BSDMSG
 	S BSDEVT=4
	S BSDCLN=ClinicIen
	S BSDDT=ApptDateTime
	S APTN=ApptDateTime
	S DFN=PatientIen
	S BSDCKO=VisitDateTime
	D VDATE^BSDV(BSDEVT,BSDCLN,BSDDT,APTN,DFN,BSDCKO,.BSDMSG)
 	D VSTUPD^BSDV(BSDCLN,BSDDT,APTN,DFN,.BSDMSG)
 	;
 	; display any messages (error messages in reverse video)
 	;I $D(BSDMSG) D
 	;. NEW I F I=1:1 Q:'$D(BSDMSG(I))  D
 	;.. I $P(BSDMSG(I),U)>0,$G(IORVON) D MSG^BSDV(IORVON_$P(BSDMSG(I),U,2)_IORVOFF,1,0) Q
 	;.. D MSG($P(BSDMSG(I),U,2),1,0) 	
 	;Q:'$G(^SC(+BSDCLN,"S",BSDDT,1,APTN,"C"))  ;not checked-in
 	Q "1"
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.BsdSetPatie6475D</DataLocation>
<DefaultData>BsdSetPatientAppointmentUndoCheckInDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.BsdSetPatie6475D</IdLocation>
<IndexLocation>^BMW.BSF.SP.BsdSetPatie6475I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.BsdSetPatie6475S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="BsdSetPatientAppointmentUndoCheckInDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.BsdSetSchedulingAddHoliday">
<Super>%RegisteredObject</Super>
<TimeChanged>63539,54053.159829</TimeChanged>
<TimeCreated>63342,58184.087185</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="SchedulingAddHolidayQ">
<Type>%SQLQuery</Type>
<FormalSpec>HolidayDate:%Text,HolidayName:%Text</FormalSpec>
<SqlName>BSD_SetSchedulingAddHolidayQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT (BSD_SetSchedulingAddHolidayM(:HolidayDate,:HolidayName)) as Result</SqlQuery>
</Query>

<Method name="SchedulingAddHolidayM">
<ClassMethod>1</ClassMethod>
<FormalSpec>HolidayDate:%Text,HolidayName:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>BSD_SetSchedulingAddHolidayM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I ($G(HolidayDate)=""),($G(HolidayName)="") Q 0
	N FDA,FDAIENP,ERR1,RSLT,ERROR
	S EXST=$$FIND1^DIC(40.5,"","BX",HolidayDate,"","","ERROR")
	I $G(EXST)>0 {
	NEW SQLCODE,%ROWCOUNT,%ROWID
  	&sql(UPDATE bmw.Holiday set NAME=:HolidayName WHERE ien=:EXST)
    IF SQLCODE=0 {
	Q "Update succeeded! Row count="_%ROWCOUNT_", Row ID = "_%ROWID }
    ELSE { Q "Update failed, SQLCODE="_SQLCODE }
	}
	ELSE { 	
	D DT^DILF("TS",HolidayDate,.HolidayDate,,"")
 	S DIC="^HOLIDAY("
 	S FDA(40.5,"+1,",.01)=HolidayDate
 	S FDA(40.5,"+1,",2)=HolidayName
 	S FDAIENP(1)=HolidayDate
 	D UPDATE^DIE("","FDA","FDAIENP","ERR1")
 	I $D(ERR1("DIERR")) S RSLT="~`0^Error adding Holidays: "_$G(ERR1("DIERR","1","TEXT",1)) Q RSLT
	I $D(FDAIENP(1)) S RSLT=$G(FDAIENP(1)) Q RSLT
	}
	Q "0"
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.BsdSetSched6175D</DataLocation>
<DefaultData>BsdSetSchedulingAddHolidayDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.BsdSetSched6175D</IdLocation>
<IndexLocation>^BMW.BSF.SP.BsdSetSched6175I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.BsdSetSched6175S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="BsdSetSchedulingAddHolidayDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.BsdSetSchedulingRemoveHoliday">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,39259.779975</TimeChanged>
<TimeCreated>63342,58184.087185</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="SchedulingRemoveHolidayQ">
<Type>%SQLQuery</Type>
<FormalSpec>RowId:%Text</FormalSpec>
<SqlName>BSD_SetSchedulingRemoveHolidayQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT (BSD_SetSchedulingRemoveHolidayM(:RowId)) as Result</SqlQuery>
</Query>

<Method name="SchedulingRemoveHolidayM">
<ClassMethod>1</ClassMethod>
<FormalSpec>RecordId:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>BSD_SetSchedulingRemoveHolidayM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I ($G(RecordId)="") Q 0
	NEW SQLCODE,%ROWCOUNT,%ROWID
  	&sql(DELETE FROM bmw.Holiday
       WHERE ien=:RecordId)
    IF SQLCODE=0 {
	Q "Delete succeeded! Row count="_%ROWCOUNT_"Row ID="_%ROWID }
    ELSE {
    Q "Delete failed, SQLCODE="_SQLCODE }
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.BsdSetSchedD9B7D</DataLocation>
<DefaultData>BsdSetSchedulingRemoveHolidayDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.BsdSetSchedD9B7D</IdLocation>
<IndexLocation>^BMW.BSF.SP.BsdSetSchedD9B7I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.BsdSetSchedD9B7S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="BsdSetSchedulingRemoveHolidayDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.CoreAuthenticateUser">
<Super>%RegisteredObject</Super>
<TimeChanged>65560,61493.549376</TimeChanged>
<TimeCreated>63340,51229.601065</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="AuthenticateUserQ">
<Type>%SQLQuery</Type>
<FormalSpec>AccessCode:%String="",VerifyCode:%String,FacilityIen:%Text</FormalSpec>
<SqlName>Core_AuthenticateUserQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
		SELECT (Core_AuthenticateUserM(:AccessCode,:VerifyCode,:FacilityIen)) as IEN</SqlQuery>
</Query>

<Method name="AuthenticateUserM">
<ClassMethod>1</ClassMethod>
<FormalSpec>AccessCode:%Text,VerifyCode:%Text,FacilityIen:%Text</FormalSpec>
<ReturnType>%Text</ReturnType>
<SqlName>Core_AuthenticateUserM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
		I '$D(AccessCode) Q "AccessCode can not be NULL"
		I (AccessCode="") Q "Accesscode can not be empty"
		;I '$D(FacilityIen) Q "Facility can not be NULL"  //check removed for BQRE login
		;I (FacilityIen="") Q "Facility can not be empty"
		S X=AccessCode,Result=0,DUZ=0
		S X=$SYSTEM.SQL.UPPER(AccessCode)
		S Acode=$$EN^XUSHSH(X)
		
		&sql(SELECT IEN INTO :DUZ FROM BMW.NEW_PERSON WHERE ACCESS_CODE= :Acode AND (DISUSER!='1' OR DISUSER is null) 
        		AND (TERMINATION_DATE is null OR TERMINATION_DATE > GETDATE() ) )
        		
        IF +$G(DUZ)>0
        {
	    	S X=VerifyCode
			I '$$GET^XPAR("SYS","XU VC CASE SENSITIVE") S X=$SYSTEM.SQL.UPPER(X)
			S Vcode=$$EN^XUSHSH(X)
			
			&sql(SELECT VERIFY_CODE INTO :VRCODE
                               FROM BMW.NEW_PERSON
                               WHERE IEN= :DUZ)
               I ($G(VRCODE)'=$G(Vcode)) S Result="-3^"_DUZ  Q Result           ;Valid access code but invalid verify code
                    		
				
			&sql(SELECT DATE_VERIFY_CODE_LAST_CHANGED INTO :VClastChanged
        		FROM BMW.NEW_PERSON
        		WHERE IEN=:DUZ AND (DISUSER!='1' OR DISUSER is null) 
        		AND (TERMINATION_DATE is null OR TERMINATION_DATE > GETDATE() ) )
        		
        	&sql(SELECT top 1 LIFETIME_OF_VERIFY_CODE INTO :VClifeTime
        		FROM BMW.kernel_system_parameters )
        		
        	I ($P($H,",")-$P($G(VClastChanged),",")>$G(VClifeTime)) S Result="-1"  Q Result
        
        	//Facilty Check conditioned for BQRE
        	If (+$G(FacilityIen)>0)
        	{
        		&sql(SELECT IEN INTO :DUZ2
        			FROM BMW.DIVISION_200C200_02 WHERE NEW_PERSON= :DUZ AND DIVISION= :FacilityIen  )
        		I '$G(DUZ2) S Result="-2"  Q Result
        	} 
        	S Result=DUZ
        	&sql(update bmw.new_person set last_signon_datetime=GETDATE() where ien=:DUZ) ;; record user's login datetime in new_person table
	    
	    }
	
        Q Result
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.CoreAuthentFA50D</DataLocation>
<DefaultData>CoreAuthenticateUserDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.CoreAuthentFA50D</IdLocation>
<IndexLocation>^BMW.BSF.SP.CoreAuthentFA50I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.CoreAuthentFA50S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="CoreAuthenticateUserDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.CoreChangeVerifyCode">
<Super>%RegisteredObject</Super>
<TimeChanged>63943,61209.788812</TimeChanged>
<TimeCreated>63340,53002.202926</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.3</Default>
</Parameter>

<Query name="ChangeVerifyCodeQ">
<Type>%SQLQuery</Type>
<FormalSpec>AccessCode:%Text,CurrentVerifyCode:%Text,NewVerifyCode:%Text,FacilityId:%Text</FormalSpec>
<SqlName>Core_ChangeVerifyCodeQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
	SELECT (Core_ChangeVerifyCodeM(:AccessCode,:CurrentVerifyCode,:NewVerifyCode,:FacilityId))
    As Result</SqlQuery>
</Query>

<Method name="ChangeVerifyCodeM">
<ClassMethod>1</ClassMethod>
<FormalSpec>AccessCode:%Text,CurrentVerifyCode:%Text,NewVerifyCode:%Text,FacilityId:%Text</FormalSpec>
<Language>cache</Language>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>Core_ChangeVerifyCodeM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I ($L(AccessCode)<6) Q "0^Access code can not be less than 6 chars"
	I ($L(CurrentVerifyCode)<8) Q "0^Current verify code can not be less than 8 chars"
	I ($L(NewVerifyCode)<8) Q "0^New verify code can not be less than 8 chars"
	
	I (FacilityId<0) Q "0^FacilityId must be a positive integer"
	N Vcode,Result,RS
	S Result=1
	S AccessCode=$SYSTEM.SQL.UPPER(AccessCode)
	I '$$GET^XPAR("SYS","XU VC CASE SENSITIVE") D
	. 	S CurrentVerifyCode=$SYSTEM.SQL.UPPER(CurrentVerifyCode)
	. 	S NewVerifyCode=$SYSTEM.SQL.UPPER(NewVerifyCode)
	
	I (CurrentVerifyCode=NewVerifyCode) Q "0^New Verify Code must be different than the current one"
	
	S AccessCode=$$EN^XUSHSH(AccessCode)
	S Vcode=$$EN^XUSHSH(CurrentVerifyCode)
	
	&sql(SELECT IEN INTO :DUZ
       FROM BMW.NEW_PERSON
       WHERE ACCESS_CODE= :AccessCode AND VERIFY_CODE= :Vcode)
       
    I +$G(DUZ)<1 Q "0^Invalid Access Code or Verify Code"    
    D ##class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(DUZ,FacilityId)
    
    //N HSHVCODE
 	//S DA=DUZ
 	//s NewVerifyCode=$SYSTEM.SQL.UPPER(NewVerifyCode)
 	//S HSHVCODE=$$EN^XUSHSH(NewVerifyCode) ;;encrypt/hash verify code
 	//S RS=$$VCHK^XUS2(NewVerifyCode,HSHVCODE) ;;verify code validation checks
 	//Q:RS'=0 "0^"_$P(RS,"^",2)
 	//D VST^XUS2(HSHVCODE,1) ;;change verify code
 	//D CALL^XUSERP(DA,2)  ;; fire protocols
 	
 	
 	
 	s RS=$$BRCVC^XUS2(CurrentVerifyCode,NewVerifyCode)
 	I +RS>0 S Result="0^"_$P($G(RS),"^",2)
 	Q Result
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.CoreChangeV6227D</DataLocation>
<DefaultData>CoreChangeVerifyCodeDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.CoreChangeV6227D</IdLocation>
<IndexLocation>^BMW.BSF.SP.CoreChangeV6227I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.CoreChangeV6227S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="CoreChangeVerifyCodeDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.CoreGetDatabaseTime">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,39141.784066</TimeChanged>
<TimeCreated>63424,58304.980289</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="GetDatabaseTimeQ">
<Type>%SQLQuery</Type>
<SqlName>Core_GetDatabaseTimeQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
		SELECT GETDATE() as Result</SqlQuery>
</Query>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.CoreGetData6BB0D</DataLocation>
<DefaultData>CoreGetDatabaseTimeDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.CoreGetData6BB0D</IdLocation>
<IndexLocation>^BMW.BSF.SP.CoreGetData6BB0I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.CoreGetData6BB0S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="CoreGetDatabaseTimeDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.CoreSetBusaAuditLog">
<Super>%RegisteredObject</Super>
<TimeChanged>65478,39061.452231</TimeChanged>
<TimeCreated>63340,54000.246269</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="SetBusaAuditLogQ">
<Type>%SQLQuery</Type>
<FormalSpec>UserIen:%Text,FacilityIen:%Text,PatientIen:%Text,ControllerName:%Text,ControllerDescription:%Text,Action:%Text</FormalSpec>
<SqlName>Core_SetBusaAuditLogQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
		SELECT (Core_SetBusaAuditLogM(:UserIen,:FacilityIen,:PatientIen,:ControllerName,:ControllerDescription,:Action)) As Result</SqlQuery>
</Query>

<Method name="SetBusaAuditLogM">
<ClassMethod>1</ClassMethod>
<FormalSpec>UserIen:%Text,FacilityIen:%Text,PatientIen:%Text,ControllerName:%Text,ControllerDescription:%Text,Action:%Text</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>Core_SetBusaAuditLogM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	s Result=0,CAT="O" K DET S DET="" //default Category to "Other"
	I $D(^BUSA(9002319.04,1,0))<1 Q Result_"BUSA not installed"  ;;BUSA not installed
	I +$G(UserIen)<1,+$G(FacilityIen)<1 Q Result
	
	D ##class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserIen,FacilityIen) //If Query type.. set session vars.. OtherWise SetSessionVars should already be done
	;Input Parameters:
 	;TYPE - (Optional) - The type of entry to log (R:RPC Call;W:Web Service
 	;                       Call;A:API Call;O:Other)
 	;                       (Default - A)
 	;    CAT - (Required) - The category of the event to log (S:System Event;
 	;                       P:Patient Related;D:Definition Change;
 	;                       O:Other Event)
 	; ACTION - (Required for CAT="P") - The action of the event to log
 	;                       (A:Additions;D:Deletions;Q:Queries;P:Print;
 	;                       E:Changes;C:Copy)
 	;   CALL - (Required) - Free text entry describing the call which 
 	;                       originated the audit request (Maximum length
 	;                       200 characters)
 	;                       Examples could be an RPC value or calling
 	;                       routine
 	;   DESC - (Required) - Free text entry describing the call action
 	;                       (Maximum length 250 characters)
 	;                       Examples could be 'Patient demographic update',
 	;                       'Copied iCare panel to clipboard' or 'POV Entry'
 	; DETAIL - Array of patient/visit records to log. Required for patient 
 	;          related events. Optional for other event types
 	; Format: DETAIL(#)=DFN^VIEN^EVENT DESCRIPTION^NEW VALUE^ORIGINAL VALUE
	I DUZ>0 D	
	.	S CAT="S"	
	. 	I +$G(PatientIen)>0 S CAT="P",DFN=PatientIen,DET(1)=PatientIen_"^^"_ControllerDescription_"^^"
	. 	S TYPE="W",ACTION=Action,CALL=ControllerName,DESC=ControllerDescription		
	.	S Result=$$LOG^BUSAAPI(TYPE,CAT,ACTION,CALL,DESC,"DET")
	.	K TYPE,CAT,ACTION,CALL,DESC,DET //get rid of local/session vars
	.	I +$G(Result)>0 S Result=1
	Q Result
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.CoreSetBusaC6C3D</DataLocation>
<DefaultData>CoreSetBusaAuditLogDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.CoreSetBusaC6C3D</IdLocation>
<IndexLocation>^BMW.BSF.SP.CoreSetBusaC6C3I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.CoreSetBusaC6C3S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="CoreSetBusaAuditLogDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.CoreSetPatientContext">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,39108.700819</TimeChanged>
<TimeCreated>63340,52715.291222</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="SetPatientContextQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientIen:%Text</FormalSpec>
<SqlName>Core_SetPatientContextQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
		SELECT (Core_SetPatientContextM(:PatientIen)) As Result</SqlQuery>
</Query>

<UDLText name="T">
<Content><![CDATA[
// Set DFN for patient context... so that any trigger code using the DFN session var wont give out an undefined error

]]></Content>
</UDLText>

<Method name="SetPatientContextM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientIen:%Text</FormalSpec>
<Language>cache</Language>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>Core_SetPatientContextM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I PatientIen<1 Q 0
	S DFN=PatientIen
	Q 1
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.CoreSetPati6127D</DataLocation>
<DefaultData>CoreSetPatientContextDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.CoreSetPati6127D</IdLocation>
<IndexLocation>^BMW.BSF.SP.CoreSetPati6127I</IndexLocation>
<StreamLocation>^BMW.BSF.SP.CoreSetPati6127S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="CoreSetPatientContextDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.CoreSetRemotePatientContext">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,39092.48996</TimeChanged>
<TimeCreated>63340,53361.385669</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<UDLText name="T">
<Content><![CDATA[
/* Core_SetRemotePatientContextQ will set PatientContext for EHR (CIA) application, for the BMW logged in user: if the BMW logged in user has
EHR a current EHR session */
]]></Content>
</UDLText>

<Query name="SetRemotePatientContextQ">
<Type>%SQLQuery</Type>
<FormalSpec>PatientIen:%Integer,UserIen:%Integer,FacilityIen:%Integer</FormalSpec>
<SqlName>Core_SetRemotePatientContextQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
		SELECT (Core_SetRemotePatientContextM(:PatientIen,:UserIen,:FacilityIen)) As Result</SqlQuery>
</Query>

<Method name="SetRemotePatientContextM">
<ClassMethod>1</ClassMethod>
<FormalSpec>PatientIen:%Integer,UserIen:%Integer,FacilityIen:%Integer</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>Core_SetRemotePatientContextM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
		;Q 1		
		I $G(PatientIen)<1,$G(UserIen)<1,$G(FacilityIen)<1 Q 0
		K LST
		D ##class(BMW.BSF.SP.CoreSetSessionVariables).SetSessionVariablesM(UserIen,FacilityIen)
		I +$G(UserIen)>0 S LST("DUZ",UserIen)=""		
		S Result=$$BRDCAST^CIANBEVT("CONTEXT.PATIENT",+PatientIen,.LST)		
		I '$D(Result) Q 1
		Q Result
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.CoreSetRemo924ED</DataLocation>
<DefaultData>CoreSetRemotePatientContextDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.CoreSetRemo924ED</IdLocation>
<IndexLocation>^BMW.BSF.SP.CoreSetRemo924EI</IndexLocation>
<StreamLocation>^BMW.BSF.SP.CoreSetRemo924ES</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="CoreSetRemotePatientContextDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.CoreSetSessionVariables">
<Super>%RegisteredObject</Super>
<TimeChanged>63608,39119.204326</TimeChanged>
<TimeCreated>63340,61206.508267</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="SetSessionVariablesQ">
<Type>%SQLQuery</Type>
<FormalSpec>UserIen:%Text,FacilityIen:%Text</FormalSpec>
<SqlName>Core_SetSessionVariablesQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
		SELECT (Core_SetSessionVariablesM(:UserIen, :FacilityIen)) as Result</SqlQuery>
</Query>

<Method name="SetSessionVariablesM">
<ClassMethod>1</ClassMethod>
<FormalSpec>UserIen:%Text,FacilityIen:%Text</FormalSpec>
<Language>cache</Language>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>Core_SetSessionVariablesM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I UserIen<1 Q 0
	K DUZ,DT
 	Q:'$D(^VA(200,UserIen))
 	S DUZ=+UserIen,U="^",DT=$$DT^XLFDT
 	S DUZ(0)=$P($G(^VA(200,+UserIen,0)),U,4)  ;; File Manager Access Code
 	S DUZ(1)=""
 	I FacilityIen'="" S DUZ(2)=FacilityIen  ;; setting user's location/institution
 	I FacilityIen="" S DUZ(2)=$P($G(^XTV(8989.3,1,"XUS")),U,17)   ;; setting defualt institution
 	S DUZ("AG")=$P($G(^DIC(4,DUZ(2),99)),U,5)
 	S DUZ("LANG")=""
 	S IOST=""
 	S IOM=80 ;; because life isnt fair
 	D ^XBKVAR ;; calling just to cover any other vars we might have missed.. or if new var added later on..
 	;s IOST="C-VT100"
 	;I $D(PatientIen) S DFN=PatientIen
 	Q UserIen
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.CoreSetSessD43AD</DataLocation>
<DefaultData>CoreSetSessionVariablesDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.CoreSetSessD43AD</IdLocation>
<IndexLocation>^BMW.BSF.SP.CoreSetSessD43AI</IndexLocation>
<StreamLocation>^BMW.BSF.SP.CoreSetSessD43AS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="CoreSetSessionVariablesDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.SP.CoreSetWordProcessing">
<Super>%RegisteredObject</Super>
<TimeChanged>63523,52840.03926</TimeChanged>
<TimeCreated>63516,57595.078289</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="SetWordProcessingQ">
<Type>%SQLQuery</Type>
<FormalSpec>FileNumber:%String,WpFieldNumber:%String,RowId:%BigInt,Notes:%Text,IsAppend:%Boolean,IsDelete:%Boolean</FormalSpec>
<SqlName>Core_SetWordProcessingQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
	SELECT (Core_SetWordProcessingM(:FileNumber,:WpFieldNumber,:RowId,:Notes,:IsAppend,:IsDelete)) as Result</SqlQuery>
</Query>

<Method name="SetWordProcessingM">
<ClassMethod>1</ClassMethod>
<FormalSpec>FileNumber:%String,WpFieldNumber:%String,RowId:%BigInt,Notes:%Text,IsAppend:%Boolean,IsDelete:%Boolean</FormalSpec>
<ProcedureBlock>0</ProcedureBlock>
<ReturnType>%Text</ReturnType>
<SqlName>Core_SetWordProcessingM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	I +$G(RowId)<1,+$G(FileNumber)<1,+$G(WpFieldNumber)<1,$L($G(Notes))<1 Q "0^Required Data missing"

	I $G(Notes)["2@%Library.GlobalBinaryStream" Q "-2^GlobalBinaryStream error"
	
 	N err,wproot,wp,i,OrigCharCount,RunningCharCount
 	
 	s OrigCharCount=$L($G(Notes))	
	
 	If IsDelete 
 	{ 
 		s wproot="@" 
 	} 				
 	
 	else 
 	{	 		
 		s Notes=$LISTFROMSTRING(Notes,$c(13))	
 		
 		s wproot="wp",i=0,RunningCharCount=0
 		
 		f i=1:1:$ll(Notes) 
 		{ 
 			s wp(i)=$lg(Notes,i) 
 		}

 	} 	  	

 	
 	I IsAppend 
 	{
	 	d WP^DIE(FileNumber,RowId_",",WpFieldNumber,"AK",wproot,"err") 
 	}
 	else
 	{
	 	d WP^DIE(FileNumber,RowId_",",WpFieldNumber,"K",wproot,"err") 
 	}
 	i $d(err) 
 	{ 
 		Q "-1^"_$G(err("DIERR",1,"TEXT",1))
 	}
	K err,wproot,wp,i,OrigCharCount,RunningCharCount,Notes,RowId,FileNumber,WpFieldNumber
 	Q "1"
]]></Implementation>
</Method>
</Class>


<Class name="BMW.BSF.SP.CoreVerifyESignature">
<Super>%RegisteredObject</Super>
<TimeChanged>63525,38927.566074</TimeChanged>
<TimeCreated>63340,51832.415699</TimeCreated>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Query name="VerifyEsignatureQ">
<Type>%SQLQuery</Type>
<FormalSpec>UserIen:%String="",Esig:%String</FormalSpec>
<SqlName>Core_VerifyESignatureQ</SqlName>
<SqlProc>1</SqlProc>
<SqlQuery>		
		SELECT (Core_VerifyESignatureM(:UserIen,:Esig)) as Result</SqlQuery>
</Query>

<Method name="VerifyEsignatureM">
<ClassMethod>1</ClassMethod>
<FormalSpec>UserIen:%String="",Esig:%String</FormalSpec>
<ReturnType>%Text</ReturnType>
<SqlName>Core_VerifyESignatureM</SqlName>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
		I '$D(UserIen) Q "AccessCode can not be NULL"
		I (UserIen="") Q "Accesscode can not be empty"
		I '$D(Esig) Q "Facility can not be NULL"
		I (Esig="") Q "Facility can not be empty"
	
		S X=$SYSTEM.SQL.UPPER(Esig)
	    D HASH^XUSHSHP	
		
		&sql(SELECT IEN INTO :Rs
        FROM BMW.NEW_PERSON
        WHERE Electronic_signature_code= :X  )
        
        I Rs=UserIen Q "1"
        Q "0"
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^BMW.BSF.SP.CoreVerifyEE28AD</DataLocation>
<DefaultData>CoreVerifyESignatureDefaultData</DefaultData>
<IdLocation>^BMW.BSF.SP.CoreVerifyEE28AD</IdLocation>
<IndexLocation>^BMW.BSF.SP.CoreVerifyEE28AI</IndexLocation>
<StreamLocation>^BMW.BSF.SP.CoreVerifyEE28AS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<Data name="CoreVerifyESignatureDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="BMW.BSF.VW.AGALTERNATERESOURCEDETAILVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.DATEOFINJURY9000041C90000410101,BMW.EFFECTIVEDATE90000430101C90000430111,BMW.ELIGIBILITY9000003C900000311,BMW.ELIGIBILITY9000005C900000511,BMW.ELIGIBILITYDATES9000004C900000411,BMW.GUARANTOR9000043C90000430101,BMW.INSURER9000006C900000611,BMW.MEDICAIDELIGIBLE,BMW.MEDICAREELIGIBLE,BMW.RAILROADELIGIBLE,BMW.VAPATIENT</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_ALTERNATE_RESOURCE_DETAIL_VIEW</SqlTableName>
<TimeChanged>65069,51018.229019</TimeChanged>
<TimeCreated>63426,65196.549078</TimeCreated>
<ViewQuery><![CDATA[ select m.ROWID||'||'||EDD.IEN||':MC'  as ROWID, m.PATIENT_NAME as PATIENT, CASE WHEN EDD.COVERAGE_TYPE='D' then EDD.ID_NUMBER else m.MEDICARE_NUMBER || m.Suffix->Code end as POLICY_NUMBER, m.MEDICARE_NAME as SUBSCRIBER, 
 'MEDICARE' as TYPE,m.INSURER_POINTER_NAME as INSURER_NAME, m.INSURER_POINTER as INSURER, 'M'||m.RowId as POLICY_HOLDER, m.PATIENT_NAME||',11,'||EDD.IEN||',0' RECORD_PTR, null as RATE_CODE, null as GROUP_ID, 25 as RELATIONSHIP,
 EDD.ELIG__DATE as START_DATE, EDD.COVERAGE_TYPE as COVERAGE, EDD.ELIG__END_DATE as END_DATE, EDD.PLAN_NAME as Plan 
 from BMW.MEDICARE_ELIGIBLE m, BMW.ELIGIBILITY_9000003C9000003_11 as EDD where EDD.MEDICARE_ELIGIBLE=m.RowId 
 UNION 
 select ROWID,PATIENT,POLICY_NUMBER,SUBSCRIBER, TYPE, INSURER_NAME, INSURER as INSURER, POLICY_HOLDER,Id||',11,'||RECORD_PTR||',0' RECORD_PTR, RATE_CODE,GROUP_ID,RELATIONSHIP,START_DATE,COVERAGE,END_DATE, Plan from (
 select md.RowId as Id,EDD.IEN,md.ROWID||':MD' as ROWID, md.PATIENT_NAME as PATIENT, md.MEDICAID_NUMBER as POLICY_NUMBER, md.MEDICAID_NAME as SUBSCRIBER, 
 'MEDICAID' as TYPE, CASE WHEN md.PLAN_NAME_NAME is not null then md.PLAN_NAME_NAME else md.STATE_NAME || ' - ' || md.INSURER_POINTER_NAME end 
 as INSURER_NAME, md.INSURER_POINTER as INSURER, 'D'||md.RowId as POLICY_HOLDER, RATE_CODE as RATE_CODE, GROUP_NAME as GROUP_ID, RELATIONSHIP_TO_INSURED as RELATIONSHIP,
 (select top(1) ED.ELIG__DATE from BMW.ELIGIBILITY_DATES_9000004C9000004_11 as ED where ED.MEDICAID_ELIGIBLE=MD.RowId order by ED.RowId desc) as START_DATE,
 (select top(1) ED.ELIG__END_DATE from BMW.ELIGIBILITY_DATES_9000004C9000004_11 as ED where ED.MEDICAID_ELIGIBLE=MD.RowId order by ED.RowId desc) as END_DATE,
 (select top(1) ED.COVERAGE_TYPE from BMW.ELIGIBILITY_DATES_9000004C9000004_11 as ED where ED.MEDICAID_ELIGIBLE=MD.RowId order by ED.RowId desc) as COVERAGE, 
 (select top(1) ED.IEN from BMW.ELIGIBILITY_DATES_9000004C9000004_11 as ED where ED.MEDICAID_ELIGIBLE=MD.RowId order by ED.RowId desc) as RECORD_PTR, md.PLAN_NAME as Plan from BMW.MEDICAID_ELIGIBLE as md,BMW.ELIGIBILITY_DATES_9000004C9000004_11 as EDD where EDD.MEDICAID_ELIGIBLE=md.RowId) group by ROWID
 UNION 
 select t.ROWID||':T' as ROWID, t.THIRD_PARTY_LIABILITY as PATIENT, t.POLICY_NUMBER, t.RESPONSIBLE_PARTY_NAME as SUBSCRIBER, 
 'THIRD PARTY LIABILITY' as TYPE ,t.INSURER_NAME as INSURER_NAME, t.INSURER as INSURER, '' as POLICY_HOLDER, '' as RECORD_PTR,'' as RATE_CODE, null as GROUP_ID, null as RELATIONSHIP,EDD.EFFECTIVE_DATE as START_DATE, EDD.CAUSE_OF_INJURY as COVERAGE, EDD.ENDING_DATE as END_DATE, null as Plan   from BMW.DATE_OF_INJURY_9000041C9000041_0101 as t, BMW.DATE_OF_INJURY_9000041C9000041_0101 as EDD where EDD.ROWID=t.RowId 
 UNION 
 select r.ROWID||':R' as ROWID, r.PATIENT_NAME as PATIENT, r.RAILROAD_NUMBER as POLICY_NUMBER, RAILROAD_NAME as SUBSCRIBER,
 'RAIL ROAD' as Type ,r.INSURER_POINTER_NAME as INSURER_NAME, r.INSURER_POINTER as INSURER, 'R'||r.RowId as POLICY_HOLDER, r.PATIENT_NAME||',11,'||EDD.IEN||',0' RECORD_PTR,null as RATE_CODE, null as GROUP_ID, 25 as RELATIONSHIP,EDD.ELIG__DATE as START_DATE, Case when EDD.PLAN_NAME_NAME is not null then EDD.PLAN_NAME_NAME Else EDD.COVERAGE_TYPE end as COVERAGE, EDD.ELIG__END_DATE as END_DATE, null as Plan  from BMW.RAILROAD_ELIGIBLE as r, BMW.ELIGIBILITY_9000005C9000005_11 as EDD where EDD.RAILROAD_ELIGIBLE=r.RowId 
 UNION 
 select p.ROWID||':P' as ROWID, p.PRIVATE_INSURANCE_ELIGIBLE as PATIENT, p.POLICY_NUMBER, p.POLICY_HOLDER_NAME_OF_POLICY_HOLDER as SUBSCRIBER, 'PRIVATE' as TYPE ,p.INSURER_NAME as INSURER_NAME,
 p.INSURER as INSURER, 'P'||p.POLICY_HOLDER as POLICY_HOLDER, p.PRIVATE_INSURANCE_ELIGIBLE||',11,'||P.Ien||',0' RECORD_PTR, null as RATE_CODE, POLICY_HOLDER->GROUP_NAME as GROUP_ID, null as RELATIONSHIP,p.ELIG__DATE as START_DATE, p.COVERAGE_NAME as COVERAGE, p.ELIG__END_DATE as END_DATE, null as Plan  from BMW.INSURER_9000006C9000006_11 as p
 UNION
 select w.ROWID||':W' as ROWID, w.NAME as PATIENT,
 EDD.CLAIM_NUMBER as POLICY_NUMBER, EDD.PATIENTS_EMPLOYER_EMPLOYER as SUBSCRIBER, 'WORKMANS COMPENSATION' as TYPE ,EDD.ENTITY_NAME as INSURER_NAME,
 EDD.ENTITY as INSURER,EDD.PATIENTS_EMPLOYER as POLICY_HOLDER, EDD.WORKMANS_COMPENSATION||','||EDD.IEN as RECORD_PTR, null as RATE_CODE , null as GROUP_ID, null as RELATIONSHIP,EDD.EFFECTIVE_DATE as START_DATE, 'W' as COVERAGE, EDD.EXPIRATION_DATE as END_DATE, null as Plan from BMW.WORKMANS_COMPENSATION as w, BMW.DATE_OF_WC_INJURY_9000042C9000042_11 as EDD where EDD.WORKMANS_COMPENSATION=w.RowId 
 UNION
 select g.ROWID||':G' as ROWID, g.GUARANTOR as PATIENT,
 g.PO_NUMBER as POLICY_NUMBER, p.NAME as SUBSCRIBER, 'GUARANTOR' as TYPE ,
 (select name from bmw.VA_PATIENT where ien=GUARANTOR0_CHECKING_PATIENT_FILE_NAME) || ' [G]' as INSURER_NAME,
 GUARANTOR0_CHECKING_PATIENT_FILE_NAME as INSURER, '' as POLICY_HOLDER,g.GUARANTOR||',1,'||EDD.IEN RECORD_PTR,null as RATE_CODE, null as GROUP_ID, RELATIONSHIP_TO_GUARANTOR as RELATIONSHIP,EDD.EFFECTIVE_DATE as START_DATE, 'G' as COVERAGE, EDD.ENDING_DATE as END_DATE, null as Plan 
 from BMW.GUARANTOR_9000043C9000043_0101 as g inner join BMW.VA_PATIENT as p On g.GUARANTOR = p.IEN inner join BMW.EFFECTIVE_DATE_9000043_0101C9000043_0111 as EDD on EDD.GUARANTOR_9000043C9000043_0101=g.RowId ]]></ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGALTERNATERESOURCEVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.DATEOFINJURY9000041C90000410101,BMW.DATEOFWCINJURY9000042C900004211,BMW.GUARANTOR9000043C90000430101,BMW.INSURER9000006C900000611,BMW.MEDICAIDELIGIBLE,BMW.MEDICAREELIGIBLE,BMW.RAILROADELIGIBLE,BMW.VAPATIENT</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_ALTERNATE_RESOURCE_VIEW</SqlTableName>
<TimeChanged>63909,42874.628863</TimeChanged>
<TimeCreated>62684,43586.69239</TimeCreated>
<ViewQuery><![CDATA[ select m.ROWID||':MC' as ROWID, m.PATIENT_NAME as PATIENT, m.MEDICARE_NUMBER as POLICY_NUMBER, MEDICARE_NAME as SUBSCRIBER, 
'MEDICARE' as TYPE,m.INSURER_POINTER_NAME as INSURER_NAME, m.INSURER_POINTER as INSURER, null as RATE_CODE, null as GROUP_ID, 25 as RELATIONSHIP 
from BMW.MEDICARE_ELIGIBLE m UNION 
select md.ROWID||':MD' as ROWID, md.PATIENT_NAME as PATIENT, md.MEDICAID_NUMBER as POLICY_NUMBER, md.MEDICAID_NAME as SUBSCRIBER, 
'MEDICAID' as TYPE, CASE WHEN md.PLAN_NAME_NAME is not null then md.PLAN_NAME_NAME else md.STATE_NAME || ' - ' || md.INSURER_POINTER_NAME end 
as INSURER_NAME, CASE WHEN md.PLAN_NAME is not null then md.PLAN_NAME else md.INSURER_POINTER end as INSURER, RATE_CODE as RATE_CODE, 
GROUP_NAME as GROUP_ID, RELATIONSHIP_TO_INSURED as RELATIONSHIP  from BMW.MEDICAID_ELIGIBLE as md 
UNION select t.ROWID||':T' as ROWID, t.THIRD_PARTY_LIABILITY as PATIENT, t.POLICY_NUMBER, t.RESPONSIBLE_PARTY_NAME as SUBSCRIBER, 
'THIRD PARTY LIABILITY' as TYPE ,t.INSURER_NAME as INSURER_NAME, t.INSURER as INSURER, '' as RATE_CODE, null as GROUP_ID, null as RELATIONSHIP   
from BMW.DATE_OF_INJURY_9000041C9000041_0101 as t 
UNION select r.ROWID||':R' as ROWID, r.PATIENT_NAME as PATIENT, r.RAILROAD_NUMBER as POLICY_NUMBER, RAILROAD_NAME as SUBSCRIBER,
'RAIL ROAD' as Type ,r.INSURER_POINTER_NAME as INSURER_NAME, r.INSURER_POINTER as INSURER, null as RATE_CODE, null as GROUP_ID, 25 as RELATIONSHIP  
from BMW.RAILROAD_ELIGIBLE as r UNION 
select p.ROWID||':P' as ROWID, p.PRIVATE_INSURANCE_ELIGIBLE as PATIENT,
 p.POLICY_HOLDER->POLICY_NUMBER as POLICY_NUMBER,
p.POLICY_HOLDER_NAME_OF_POLICY_HOLDER as SUBSCRIBER, 'PRIVATE' as TYPE ,p.INSURER_NAME as INSURER_NAME,
p.INSURER as INSURER,null as RATE_CODE, POLICY_HOLDER->GROUP_NAME as GROUP_ID, null as RELATIONSHIP  from BMW.INSURER_9000006C9000006_11 as p 
UNION select w.ROWID||':W' as ROWID, w.WORKMANS_COMPENSATION as PATIENT,
w.CLAIM_NUMBER as POLICY_NUMBER, w.PATIENTS_EMPLOYER_EMPLOYER as SUBSCRIBER, 'WORKMANS COMPENSATION' as TYPE ,w.ENTITY_NAME as INSURER_NAME,
w.ENTITY as INSURER,null as RATE_CODE , null as GROUP_ID, null as RELATIONSHIP from BMW.DATE_OF_WC_INJURY_9000042C9000042_11 as w UNION 
select g.ROWID||':G' as ROWID, g.GUARANTOR as PATIENT,
g.REFERENCE_NUMBER as POLICY_NUMBER, p.NAME as SUBSCRIBER, 'GUARANTOR' as TYPE ,
CASE WHEN g.GUARANTOR0_CHECKING_EMPLOYER_FILE_EMPLOYER is not null Then g.GUARANTOR0_CHECKING_EMPLOYER_FILE_EMPLOYER When
g.GUARANTOR0_CHECKING_IN_INSURER_FILE_NAME is not null Then g.GUARANTOR0_CHECKING_IN_INSURER_FILE_NAME 
Else (select Name from BMW.VA_PATIENT where IEN=g.GUARANTOR0_CHECKING_PATIENT_FILE) END as INSURER_NAME,
g.GUARANTOR0_CHECKING_IN_INSURER_FILE as INSURER, null as RATE_CODE, null as GROUP_ID, RELATIONSHIP_TO_GUARANTOR as RELATIONSHIP from BMW.GUARANTOR_9000043C9000043_0101 as g inner join BMW.VA_PATIENT as p On g.GUARANTOR = p.IEN]]></ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGBENEFITCOORDINATORCASESVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.ASSIGNEDTOBENEFITCOORD9000044C900004411,BMW.BENEFITCOORDINATORCASES</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_BENEFIT_COORDINATOR_CASES_VIEW</SqlTableName>
<TimeChanged>63426,64259.829075</TimeChanged>
<TimeCreated>62684,43684.8569</TimeCreated>
<ViewQuery> SELECT atb.ROWID, bc.PATIENT_NAME as PATIENT, atb.DATE_ASSIGNED, atb.ASSIGNED_TO as ASSIGNED_TO, atb.USER_INITIAL, atb.ASSIGNED_BY, atb.CASE_NUMBER, atb.CASE_TYPE, atb.STATUS, atb.CASE_WORKER, atb.COMPLETED_BY, atb.DATE_COMPLETED, atb.CASE_REASON, atb.NOTES, bc.PATIENT_NAME || '||' || atb.IEN as CASE_ID, atb.ASSIGNED_BY_NAME,atb.ASSIGNED_TO_NAME,atb.COMPLETED_BY_NAME FROM BMW.BENEFIT_COORDINATOR_CASES bc INNER JOIN BMW.ASSIGNED_TO_BENEFIT_COORD_9000044C9000044_11 atb ON atb.BENEFIT_COORDINATOR_CASES=bc.IEN</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGGUARANTORINSURERVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.EMPLOYER,BMW.INSURER,BMW.VAPATIENT</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_GUARANTOR_INSURER_VIEW</SqlTableName>
<TimeChanged>63426,64277.6654</TimeChanged>
<TimeCreated>62684,43955.401207</TimeCreated>
<ViewQuery> select 'PATIENT' as Type,ROWID||'-P' as ROWID, NAME,STREET_ADDRESS_LINE_1 as STREET,CITY,STATE,ZIP_CODE as ZIP,SEX,DATE_OF_BIRTH from BMW.va_PATIENT union select 'EMPLOYER' as Type, ROWID||'-E' as ROWID, EMPLOYER as NAME,STREET_ADDRESS as STREET ,CITY,STATE,ZIP,null as SEX, null as DATE_OF_BIRTH from BMW.employer union select 'INSURER' as Type,ROWID||'-I' as ROWID, NAME,STREET ,CITY,STATE,ZIP,null as SEX, null as DATE_OF_BIRTH from BMW.insurer where Type_of_insurer = 'G'</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGINTERNETACCESSQUESTIONVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.INTERNETACCESSQUESTIONDATE9000001C900000181</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_INTERNET_ACCESS_QUESTION_VIEW</SqlTableName>
<TimeChanged>63426,64292.097858</TimeChanged>
<TimeCreated>62684,44102.262942</TimeCreated>
<ViewQuery> select * from BMW.INTERNET_ACCESS_QUESTION_DATE_9000001C9000001_81 as a where a.IEN =( select max(cast(IEN as int)) from BMW.INTERNET_ACCESS_QUESTION_DATE_9000001C9000001_81 where patient=a.Patient )</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGPATIENTAPPLICATIONSVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.DATEAPPLICATIONOBTAINED9000045C900004511,BMW.DATEAPPLICATIONSUBMITTED900004511C90000451101,BMW.PATIENTAPPLICATIONS</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_PATIENT_APPLICATIONS_VIEW</SqlTableName>
<TimeChanged>63426,64309.576049</TimeChanged>
<TimeCreated>62684,44328.300977</TimeCreated>
<ViewQuery> SELECT dao.ROWID, pa.PATIENT_NAME as PATIENT, dao.DATE_APPLICATION_OBTAINED, dao.APPLICATION_TYPE, dao.PERSON_RECEIVING_APPLICATION, dao.OVERALL_STATUS_OF_APPLICATION, pa.PATIENT_NAME || '||' || dao.BENEFIT_COORDINATOR_CASE as CASE_ID, submit.DATE_APPLICATION_SUBMITTED, submit.APPLICATION_SUBMITTED_VIA, submit.REASON_FOR_SUBMISSION, submit.SUBMITTED_BY,submit.SUBMITTED_BY_NAME,dao.APPLICATION_TYPE_APPLICATION_TYPE,dao.PERSON_RECEIVING_APPLICATION_NAME FROM BMW.PATIENT_APPLICATIONS pa INNER JOIN BMW.DATE_APPLICATION_OBTAINED_9000045C9000045_11 dao ON dao.PATIENT_APPLICATIONS=pa.IEN LEFT OUTER JOIN BMW.DATE_APPLICATION_SUBMITTED_9000045_11C9000045_1101 submit ON submit.DATE_APPLICATION_OBTAINED_9000045C9000045_11 = dao.RowId</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGPATIENTDEMOGRAPHICSVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.BSF.VW.AGPATIENTNOTES,BMW.ETHNICITYINFORMATION2C206,BMW.LANGUAGESENTRYDATE9000001C900000186,BMW.PATIENT,BMW.VAPATIENT</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_PATIENT_DEMOGRAPHICS_VIEW</SqlTableName>
<TimeChanged>65414,57815.643135</TimeChanged>
<TimeCreated>62684,44410.429001</TimeCreated>
<ViewQuery><![CDATA[ SELECT va.IEN as ROWID, va.NAME, ihs.Preferred_Name, va.SOCIAL_SECURITY_NUMBER, 
ihs.SEND_GENERIC_INFORMATION, va.SEX, va.DATE_OF_BIRTH, va.PLACE_OF_BIRTH_CITY as BIRTH_CITY, 
va.PLACE_OF_BIRTH_STATE as BIRTH_STATE, va.STREET_ADDRESS_LINE_1 as ADDRESS_STREET_LINE1, 
va.STREET_ADDRESS_LINE_2 as ADDRESS_STREET_LINE2, va.STREET_ADDRESS_LINE_3 as ADDRESS_STREET_LINE3, va.CITY as ADDRESS_CITY, 
va.STATE as ADDRESS_STATE_ID, va.ZIP4 as ADDRESS_ZIP_CODE, ihs.RX_PATIENT_RESIDENCE as ADDRESS_RXPATIENTRESIDENCE_ID, va.DATE_OF_DEATH, 
ihs.POSTAL_CODE_NONUS as ADDRESS_NON_US_ZIP_CODE, va.PHONE_NUMBER_RESIDENCE as ADDRESS_RESIDENCE_PHONE, va.PHONE_NUMBER_WORK as ADDRESS_WORK_PHONE, 
ihs.OTHER_PHONE AS ADDRESS_OTHER_PHONE, ihs.CURRENT_EMAIL_ADDRESS as ADDRESS_EMAIL_ADDRESS, ihs.PREFERRED_REMINDER_METHOD, 
ihs.CURRENT_RESIDENCE_DATE as ADDRESS_COMMUNITY_JOINING_DATE, va.RACE, va.MARITAL_STATUS, va.RELIGIOUS_PREFERENCE, va.ENAME as EMERGENCY_CONTACT_NAME, 
va.EWORK_PHONE_NUMBER as EMERGENCY_CONTACT_WORK_PHONE, va.EPHONE_NUMBER as EMERGENCY_CONTACT_PHONE_NUMBER, va.ESTREET_ADDRESS_LINE_1 as EMERGENCY_CONTACT_STREET_ADDRESS_LINE1, 
va.ESTREET_ADDRESS_LINE_2 as EMERGENCY_CONTACT_STREET_ADDRESS_LINE2, va.ESTREET_ADDRESS_LINE_3 as EMERGENCY_CONTACT_STREET_ADDRESS_LINE3, 
va.ECITY as EMERGENCY_CONTACT_CITY, va.ESTATE as EMERGENCY_CONTACT_STATE_ID, va.EZIP_CODE as EMERGENCY_CONTACT_ZIP_CODE, 
ihs.EC_RELATIONSHIP as EMERGENCY_CONTACT_RELATIONSHIP_ID, ihs.CURRENT_RESIDENCE_DATE, ihs.ELIGIBILITY_STATUS, ihs.REASON_FOR_NO_SSN, 
ihs.SSN_VERIFICATION_STATUS, ihs.CURRENT_RESIDENCE_PTR as ADDRESS_CURRENTCOMMUNITY_ID, ihs.CLASSIFICATIONBENEFICIARY as BENEFICIARY, 
ihs.EMPLOYER_NAME as EMPLOYER, ihs.EMPLOYMENT_STATUS, ihs.LOCATION_OF_HOME, ihs.PRINTABLE_SSN, lang.ROWID as LANGUAGE_ENTRY, lang.LANGUAGES_ENTRY_DATE as LANGUAGE_ENTRY_DATE, 
lang.PRIMARY_LANGUAGE, lang.INTREPRETER_REQUIRED as INTERPRETER_REQUIRED , lang.PREFERRED_LANGUAGE, lang.ENGLISH_PROFICIENCY, 
(Select CASE WHEN COUNT(note.IEN)>0 THEN 1 ELSE 0 END FROM BMW_BSF_VW.AG_PATIENT_NOTES note where note.patient=va.ien) AS HAS_NOTES, 
GI.GENDER_IDENTITY, SO.SEXUAL_ORIENTATION, LS.LEGAL_SEX, ihs.PRONOUNS FROM BMW.VA_Patient as va INNER JOIN BMW.Patient ihs ON ihs.Name=va.IEN  
LEFT JOIN (select * from BMW.LANGUAGES_ENTRY_DATE_9000001C9000001_86 as a 
where a.IEN =( select max(cast(IEN as int)) from BMW.LANGUAGES_ENTRY_DATE_9000001C9000001_86 where patient=a.Patient )) as lang 
ON lang.PATIENT=va.IEN 
LEFT JOIN (select top(1) * from BMW.GENDER_IDENTITY_9000001_9401C9000001_94011 a,  BMW.GENDER_IDENTITY_9000001C9000001_9401 b 
where a.GENDER_IDENTITY_9000001C9000001_9401=b.ROWID and a.GENDER_IDENTITY_9000001C9000001_9401 =b.PATIENT || '||' || ( select max(cast(IEN as int)) 
from BMW.GENDER_IDENTITY_9000001C9000001_9401 where patient=b.Patient )) as GI ON GI.PATIENT=va.IEN 
LEFT JOIN (select top(1) * from BMW.SEXUAL_ORIENTATION_9000001_9301C9000001_93011 a,  BMW.SEXUAL_ORIENTATION_9000001C9000001_9301 b 
where a.SEXUAL_ORIENTATION_9000001C9000001_9301=b.ROWID 
and a.SEXUAL_ORIENTATION_9000001C9000001_9301=b.PATIENT || '||' || ( select max(cast(IEN as int)) from BMW.SEXUAL_ORIENTATION_9000001C9000001_9301 
where patient=b.Patient )) as SO ON SO.PATIENT=va.IEN 
LEFT JOIN (select * from BMW.LEGAL_SEX_9000001C9000001_9201 as a where a.IEN =( select max(cast(IEN as int)) 
from BMW.LEGAL_SEX_9000001C9000001_9201 where patient=a.Patient )) as LS ON LS.PATIENT=va.IEN ]]></ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGPATIENTFACESHEETVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.PATIENT,BMW.VAPATIENT</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_PATIENT_FACE_SHEET_VIEW</SqlTableName>
<TimeChanged>63426,64342.021374</TimeChanged>
<TimeCreated>62684,44493.971008</TimeCreated>
<ViewQuery> SELECT va.IEN as ROWID, va.NAME, ihs.PRINTABLE_SSN AS SSN, va.SEX, va.DATE_OF_BIRTH, va.PLACE_OF_BIRTH_CITY, va.PLACE_OF_BIRTH_STATE_NAME as PLACE_OF_BIRTH_STATE, va.STREET_ADDRESS_LINE_1 as ADDRESS, va.CITY, va.STATE_NAME as STATE, va.ZIP_CODE, va.PHONE_NUMBER_RESIDENCE as HOME_PHONE, va.PHONE_NUMBER_WORK as WORK_PHONE, ihs.DATE_ESTABLISHED AS DATE_REGISTERED, IHS.DATE_OF_LAST_REG__UPDATE AS DATE_LAST_UPDATED, ihs.OTHER_PHONE, va.RACE_NAME AS RACE, va.MARITAL_STATUS, va.FATHERS_NAME as FATHER_NAME, va.MOTHERS_MAIDEN_NAME as MOTHER_NAME, va.RELIGIOUS_PREFERENCE AS RELIGION, va.ENAME as EMERGENCY_CONTACT, va.EPHONE_NUMBER as EMERGENCY_CONTACT_PHONE,va.EWORK_PHONE_NUMBER AS EMERGENCY_CONTACT_WORK_PHONE , va.ESTREET_ADDRESS_LINE_1 as EMERGENCY_CONTACT_ADDRESS, va.ECITY as EMERGENCY_CONTACT_CITY, va.ESTATE_NAME as EMERGENCY_CONTACT_STATE, va.EZIP_CODE as EMERGENCY_CONTACT_ZIP_CODE, ihs.EC_RELATIONSHIP as EMERGENCY_CONTACT_RELATIONSHIP,ihs.EC_RELATIONSHIP_RELATIONSHIP as EMERGENCY_CONTACT_RELATIONSHIP_NAME, va.KNAME_OF_PRIMARY_NOK as NEXT_OF_KIN, va.KPHONE_NUMBER as NEXT_OF_KIN_PHONE, va.KWORK_PHONE_NUMBER AS NEXT_OF_KIN_WORK_PHONE, va.KSTREET_ADDRESS_LINE_1 as NEXT_OF_KIN_ADDRESS, va.KCITY as NEXT_OF_KIN_CITY, va.KSTATE_NAME as NEXT_OF_KIN_STATE, va.KZIP_CODE as NEXT_OF_KIN_ZIP_CODE, ihs.NOK_RELATIONSHIP as NEXT_OF_KIN_RELATIONSHIP ,ihs.NOK_RELATIONSHIP_RELATIONSHIP as NEXT_OF_KIN_RELATIONSHIP_NAME, va.DATE_OF_DEATH, ihs.INDIAN_BLOOD_QUANTUM, ihs.TRIBE_QUANTUM, ihs.NUMBER_IN_HOUSEHOLD as NUMBER_IN_HOUSEHOLD, ihs.TOTAL_HOUSEHOLD_INCOME as TOTAL_HOUSEHOLD_INCOME, ihs.HOUSEHOLD_INCOME_PERIOD as FAMILY_HOUSEHOLDINCOMEPERIOD_ID, ihs.TRIBAL_ENROLLMENT_NO_ as TRIBAL_ENROLLMENT_NUMBER, ihs.CURRENT_RESIDENCE_DATE, ihs.TRIBE_OF_MEMBERSHIP_NAME AS TRIBE, ihs.ELIGIBILITY_STATUS, ihs.REASON_FOR_NO_SSN, ihs.SSN_VERIFICATION_STATUS AS SSN_STATUS, ihs.SSN_VERIFICATION_STATUS_CODE AS SSN_STATUS_CODE,ihs.CURRENT_RESIDENCE_PTR_NAME as COMMUNITY, ihs.MOTHERS_CITY_OF_BIRTH as MOTHER_BIRTH_CITY, ihs.FATHERS_CITY_OF_BIRTH as FATHER_BIRTH_CITY, ihs.FATHERS_STATE_OF_BIRTH_NAME as FATHER_BIRTH_STATE, ihs.MOTHERS_STATE_OF_BIRTH_NAME as MOTHER_BIRTH_STATE, ihs.FATHERS_PHONE as FAMILY_FATHERS_PHONE, ihs.MOTHERS_PHONE as FAMILY_MOTHERS_PHONE, ihs.CLASSIFICATIONBENEFICIARY_NAME as CLASS, ihs.EMPLOYER_NAME as EMPLOYER, ihs.EMPLOYMENT_STATUS, ihs.LOCATION_OF_HOME, ihs.DEATH_CERTIFICATE_NO_ as DEATH_CERTIFICATE_NO, ihs.STATE_OF_DEATH, ihs.UNDERLYING_CAUSE_OF_DEATH, ihs.ADDITIONAL_REGISTRATION_INFO as NOTES,ihs.PREFERRED_REMINDER_METHOD,ihs.CURRENT_EMAIL_ADDRESS FROM BMW.VA_Patient as va INNER JOIN BMW.Patient ihs ON ihs.Name=va.IEN</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGPATIENTFLAGVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.PRFASSIGNMENT</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_PATIENT_FLAG_VIEW</SqlTableName>
<TimeChanged>63426,64359.519289</TimeChanged>
<TimeCreated>62684,44620.255601</TimeCreated>
<ViewQuery><![CDATA[ Select Distinct PATIENT_NAME as PATIENT, case when count(PATIENT_NAME) > 0 then 1 else 0 end as HAS_FLAGS From BMW.PRF_ASSIGNMENT Where Status = 1]]></ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGPATIENTGENDERIDENTITYVIEW">
<ClassType>view</ClassType>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_PATIENT_GENDER_IDENTITY_VIEW</SqlTableName>
<TimeChanged>65441,51263.9174</TimeChanged>
<TimeCreated>65382,9939.86153</TimeCreated>
<ViewQuery> select ENTRY.PATIENT as PATIENT, ENTRY.DATE_01 as DATE_ENTERED, GI.GENDER_IDENTITY, 
ENTRY.IEN as GENDER_IDENTITY_ENTRY_IEN, GI.RowId as GENDER_IDENTITY_ENTRY_ID, ENTRY.OTHER as OTHER 
from BMW.GENDER_IDENTITY_9000001C9000001_9401 ENTRY 
left join BMW.GENDER_IDENTITY_9000001_9401C9000001_94011 GI 
ON GI.GENDER_IDENTITY_9000001C9000001_9401=ENTRY.ROWID 
WHERE GI.ROWID IS NOT NULL
</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGPATIENTNOTES">
<Description>
Custom code class to retrieve patient notes</Description>
<ClassType>persistent</ClassType>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlRowIdName>RowId</SqlRowIdName>
<SqlTableName>AG_PATIENT_NOTES</SqlTableName>
<StorageStrategy>SQLStorage</StorageStrategy>
<Super>%Library.Persistent</Super>
<TimeChanged>63525,43633.746127</TimeChanged>
<TimeCreated>63168,38886.144323</TimeCreated>
<DependsOn>BMW.PATIENT</DependsOn>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>

<Index name="IDKeyIndex">
<IdKey>1</IdKey>
<Properties>PATIENT,IEN</Properties>
</Index>

<Property name="NOTE">
<Description>
FileMan Field Label: ''  FileMan Field Number: '.01'</Description>
<Type>%Library.String</Type>
<Required>1</Required>
<SqlColumnNumber>4</SqlColumnNumber>
<SqlFieldName>NOTE</SqlFieldName>
<ReadOnly>1</ReadOnly>
<Parameter name="COLLATION" value="EXACT"/>
</Property>

<Property name="PATIENT">
<Type>%Library.String</Type>
<InitialExpression>-999</InitialExpression>
<Required>1</Required>
<SqlFieldName>PATIENT</SqlFieldName>
<ReadOnly>1</ReadOnly>
</Property>

<Property name="IEN">
<Description>
Child Counter Field</Description>
<Type>%Library.String</Type>
<InitialExpression>-999</InitialExpression>
<Required>1</Required>
<SqlFieldName>IEN</SqlFieldName>
<Parameter name="COLLATION" value="EXACT"/>
<Parameter name="TRUNCATE" value="0"/>
</Property>

<Property name="IENS">
<Description>
IENS Field</Description>
<Type>%Library.String</Type>
<Required>1</Required>
<SqlComputeCode>	Set {*}="" New i For i=$l({RowId},"||"):-1:1 s {*}={*}_$p({RowId},"||",i)_","</SqlComputeCode>
<SqlComputed>1</SqlComputed>
<SqlFieldName>IENS</SqlFieldName>
<Transient>1</Transient>
<Parameter name="COLLATION" value="EXACT"/>
</Property>

<Storage name="SQLStorage">
<Type>%Library.CacheSQLStorage</Type>
<StreamLocation>^BMW.BSF.VW.AGPATIENTNOTESS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<SQLMap name="AGPATIENTNOTESDataMap">
<Type>data</Type>
<ConditionalWithHostVars>0</ConditionalWithHostVars>
<Global>^AUPNPAT</Global>
<Subscript name="1">
<Expression>{PATIENT}</Expression>
<NextCode>	s:{L1}="" {L1}=0 s {L1}=$o(^({L1})) s:'{L1} {L1}=""
	;PREV
	s:{L1}="" {L1}=":" s {L1}=$o(^({L1}),-1) s:'{L1} {L1}=""</NextCode>
<Invalidcondition name="1">
<Expression><![CDATA[{L1}'>0]]></Expression>
</Invalidcondition>
</Subscript>
<Subscript name="2">
<Expression>13</Expression>
</Subscript>
<Subscript name="3">
<Expression>{IEN}</Expression>
<NextCode>	s:{L3}="" {L3}=0 s {L3}=$o(^({L3})) s:'{L3} {L3}=""
	;PREV
	s:{L3}="" {L3}=0 s {L3}=$o(^({L3}),-1) s:'{L3} {L3}=""</NextCode>
<Invalidcondition name="1">
<Expression><![CDATA[{L3}'>0]]></Expression>
</Invalidcondition>
</Subscript>
<Data name="NOTE">
<Delimiter>"^"</Delimiter>
<Node>0</Node>
<Piece>1</Piece>
</Data>
</SQLMap>
</Storage>
</Class>


<Class name="BMW.BSF.VW.AGPATIENTOTHERLANGUAGESVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.LANGUAGESENTRYDATE9000001C900000186,BMW.OTHERLANGUAGESPOKEN900000186C90000018605</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_PATIENT_OTHER_LANGUAGES_VIEW</SqlTableName>
<TimeChanged>63426,64373.436664</TimeChanged>
<TimeCreated>62684,45690.959273</TimeCreated>
<ViewQuery> SELECT ol.OTHER_LANGUAGE_SPOKEN as OTHER_LANGUAGE, entry.ROWID as LANGUAGE_ENTRY_ID, entry.PATIENT as PATIENT_ID, entry.IEN as LANGUAGE_ENTRY_IEN FROM BMW.OTHER_LANGUAGE_SPOKEN_9000001_86c9000001_8605 ol join BMW.LANGUAGES_ENTRY_DATE_9000001C9000001_86 entry on ol.LANGUAGES_ENTRY_DATE_9000001C9000001_86 = entry.RowId</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGPATIENTPROFILEVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.NOTICEOFPRIVACYPRACTICES,BMW.PATIENT,BMW.RESTRICTEDHEALTHINFORMATION,BMW.VAPATIENT</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_PATIENT_PROFILE_VIEW</SqlTableName>
<TimeChanged>65393,55933.330195</TimeChanged>
<TimeCreated>62684,45798.904343</TimeCreated>
<ViewQuery> SELECT 
 ihs.PRIVACY_ACT, va.IEN as ROWID, ihs.Preferred_Name, ihs.PRONOUNS, ihs.PRONOUNS_OTHER, va.FATHERS_NAME as FAMILY_FATHERS_NAME, va.MOTHERS_MAIDEN_NAME as FAMILY_MOTHERS_MAIDEN_NAME, va.VETERAN_YN as VETERAN_IS_VETERAN, va.SERVICE_CONNECTED, va.SERVICE_ENTRY_DATE_LAST, va.SERVICE_SEPARATION_DATE_LAST, va.SERVICE_BRANCH_LAST as SERVICE_BRANCHLAST_ID, va.KNAME_OF_PRIMARY_NOK as NEXT_OF_KIN_NAME, va.KWORK_PHONE_NUMBER as NEXT_OF_KIN_WORK_PHONE, va.KPHONE_NUMBER as NEXT_OF_KIN_PHONE_NUMBER, va.KSTREET_ADDRESS_LINE_1 as NEXT_OF_KIN_STREET_ADDRESS_LINE1, va.KSTREET_ADDRESS_LINE_2 as NEXT_OF_KIN_STREET_ADDRESS_LINE2, va.KSTREET_ADDRESS_LINE_3 as NEXT_OF_KIN_STREET_ADDRESS_LINE3, va.KCITY as NEXT_OF_KIN_CITY, va.KSTATE as NEXT_OF_KIN_STATE_ID, va.KZIP_CODE as NEXT_OF_KIN_ZIP_CODE, ihs.NOK_RELATIONSHIP as NEXT_OF_KIN_RELATIONSHIP_ID , va.DATE_OF_DEATH, ihs.INDIAN_BLOOD_QUANTUM, ihs.TRIBE_QUANTUM, ihs.NUMBER_IN_HOUSEHOLD as FAMILY_NUMBER_IN_HOUSEHOLD, ihs.TOTAL_HOUSEHOLD_INCOME as FAMILY_TOTAL_HOUSEHOLD_INCOME, ihs.HOUSEHOLD_INCOME_PERIOD as FAMILY_HOUSEHOLDINCOMEPERIOD_ID, ihs.TRIBAL_ENROLLMENT_NO_ as TRIBAL_ENROLLMENT_NO, ihs.TRIBE_OF_MEMBERSHIP, ihs.SPOUSES_EMPLOYER_NAME as FAMILY_SPOUSESEMPLOYER_ID, ihs.MOTHERS_EMPLOYER_Name AS FAMILY_MOTHERSEMPLOYER_ID, ihs.FATHERS_EMPLOYER_Name as FAMILY_FATHERSEMPLOYER_ID, ihs.MOTHERS_CITY_OF_BIRTH as FAMILY_MOTHERS_BIRTH_CITY, ihs.FATHERS_CITY_OF_BIRTH as FAMILY_FATHERS_BIRTH_CITY, ihs.FATHERS_STATE_OF_BIRTH as FAMILY_FATHERSBIRTHSTATE_ID, ihs.MOTHERS_STATE_OF_BIRTH as FAMILY_MOTHERSBIRTHSTATE_ID, ihs.FATHERS_EMAIL_ADDRESS as FAMILY_FATHERS_EMAIL_ADDRESS, ihs.MOTHERS_EMAIL_ADDRESS as FAMILY_MOTHERS_EMAIL_ADDRESS, ihs.FATHERS_PHONE as FAMILY_FATHERS_PHONE, ihs.MOTHERS_PHONE as FAMILY_MOTHERS_PHONE, ihs.FATHERS_CELL_PHONE as FAMILY_FATHERS_CELL_PHONE, ihs.MOTHERS_CELL_PHONE as FAMILY_MOTHERS_CELL_PHONE, ihs.DEATH_CERTIFICATE_NO_ as DEATH_CERTIFICATE_NO, ihs.STATE_OF_DEATH, ihs.UNDERLYING_CAUSE_OF_DEATH, va.CLAIM_NUMBER as VETERAN_CLAIM_NUMBER, va.SERVICE_CONNECTED as VETERAN_SERVICE_CONNECTED, va.SERVICE_ENTRY_DATE_LAST as VETERAN_SERVICE_ENTRY_DATE, va.SERVICE_SEPARATION_DATE_LAST as VETERAN_SERVICE_SEPARATION_DATE, va.VIETNAM_SERVICE_INDICATED as VETERAN_VIETNAMSERVICEINDICATED_ID, va.SERVICE_BRANCH_LAST as VETERAN_SERVICEBRANCH_ID, ihs.DESCRIPTION_OF_VA_DISABILITY as VETERAN_DESCRIPTION_OF_VA_DISABILITY, ihs.VALID_VA_CARD as VETERAN_VALID_VA_CARD, ihs.DATE_VA_CARD_COPY_OBTAINED as VETERAN_DATE_VA_CARD_COPY_OBTAINED, rhi.RESTRICTED_HEALTH_INFORMATION as RHI_RHI, rhi.STATUS_CODE as RHI_STATUS_ID, rhi.PENDING_DATE as RHI_PENDING_DATE, rhi.PENDING_ENTEREDUPDATED_BY as RHI_PENDINGENTEREDUPDATEDBY_ID, rhi.PENDING_ENTEREDUPDATED_DATE as RHI_PENDING_ENTEREDUPDATED_DATE, rhi.APPROVED_DATE as RHI_APPROVED_DATE, rhi.APPROVING_OFFICIAL as RHI_APPROVING_OFFICIAL, rhi.APPROVAL_ENTEREDUPDATED_BY as RHI_APPROVALENTEREDUPDATEDBY_ID, rhi.APPROVAL_ENTEREDUPDATED_DATE as RHI_APPROVAL_ENTEREDUPDATED_DATE, rhi.NOT_APPROVED_DATE as RHI_NOT_APPROVED_DATE, rhi.NOT_APPROVED_OFFICIAL as RHI_NOT_APPROVED_OFFICIAL, rhi.NOT_APPROVED_ENTEREDUPDD_BY as RHI_NOTAPPROVEDENTEREDUPDATEDBY_ID, rhi.NOT_APPROVED_ENTEREDUPDD_DT as RHI_NOT_APPROVED_ENTERED_UPDATED_DATE, rhi.REVOKED_DATE as RHI_REVOKED_DATE, rhi.REVOKED_OFFICIAL as RHI_REVOKED_OFFICIAL, rhi.REVOKE_ENTEREDUPDATED_BY as RHI_REVOKEENTEREDUPDATEDBY_ID, rhi.REVOKE_ENTEREDUPDATED_DATE as RHI_REVOKE_ENTEREDUPDATED_DATE, rhi.EIE_ENTEREDUPDATED_BY as RHI_EIEENTEREDUPDATEDBY_ID, rhi.EIE_ENTEREDUPDATED_DATE as RHI_EIE_ENTEREDUPDATED_DATE, npp.WAS_NPP_RECD_BY_PATIENT_ as NPP_RECEIVED_BY_PATIENT, npp.DATE_03 as NPP_RECEIVED_DATE, npp.ACKNOWLEDGEMENT_SIGNED_ as NPP_ACKNOWLEDGEMENT_SIGNED, npp.REASON as NPP_REASON, npp.DATETIME_OF_ENTRY as NPP_DATE_OF_ENTRY, npp.ENTERED_BY as NPP_ENTEREDBY_ID
 FROM BMW.VA_Patient as va INNER JOIN BMW.Patient ihs ON ihs.Name=va.IEN LEFT JOIN 
 BMW.Restricted_health_information as rhi ON rhi.PATIENT=va.IEN LEFT JOIN 
 BMW.Notice_Of_Privacy_Practices as npp ON npp.PATIENT=va.IEN
 </ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGPATIENTSEARCHVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.PATIENT,BMW.VAPATIENT</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_PATIENT_SEARCH_VIEW</SqlTableName>
<TimeChanged>65506,39315.866484</TimeChanged>
<TimeCreated>62684,45980.575689</TimeCreated>
<ViewQuery> select q1.* from (select va.ien as ROWID,va.NAME,
ihs.name_name as Actual_Name,ihs.Preferred_Name,
ihs.ELIGIBILITY_STATUS,va.SEX as SEX,va.DATE_OF_BIRTH, va.DATE_OF_DEATH, va.SOCIAL_SECURITY_NUMBER, ihs.PRINTABLE_SSN, ihs.DATE_OF_LAST_REG__UPDATE, ihs.USERLAST_UPDATE_NAME as LAST_UPDATED_BY, ihs.SSN_VERIFICATION_STATUS, ihs.PRIMARY_CARE_PROVIDER, va.VETERAN_YN as IS_VETERAN , va.PHONE_NUMBER_RESIDENCE as RESIDENCE_PHONE, va.CONDITION,
 va.Current_Admission, va.ward_location from BMW.patient ihs,BMW.va_patient va where ihs.Name=va.ien ) as q1</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGPATIENTSEXUALORIENTATIONVIEW">
<ClassType>view</ClassType>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_PATIENT_SEXUAL_ORIENTATION_VIEW</SqlTableName>
<TimeChanged>65441,51277.089778</TimeChanged>
<TimeCreated>65386,44423.159856</TimeCreated>
<ViewQuery> select ENTRY.PATIENT as PATIENT, ENTRY.DATE_01 as DATE_ENTERED, SO.SEXUAL_ORIENTATION, 
ENTRY.IEN as SEXUAL_ORIENTATION_IEN, SO.RowId as RowId, ENTRY.OTHER as OTHER 
from BMW.SEXUAL_ORIENTATION_9000001C9000001_9301 ENTRY 
left join BMW.SEXUAL_ORIENTATION_9000001_9301C9000001_93011 SO 
ON SO.SEXUAL_ORIENTATION_9000001C9000001_9301=ENTRY.ROWID 
WHERE SO.ROWID IS NOT NULL
</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGPRFASSIGNMENTVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.PRFASSIGNMENT,BMW.PRFASSIGNMENTHISTORY</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_PRF_ASSIGNMENT_VIEW</SqlTableName>
<TimeChanged>65073,45375.053711</TimeChanged>
<TimeCreated>62684,46095.791312</TimeCreated>
<ViewQuery><![CDATA[ SELECT pa.ROWID as ROWID, pa.NUMBER, pa.PATIENT_NAME, pa.FLAG_NAME, pa.FLAG_NAME_LOCAL_FLAG, pa.FLAG_NAME_NATIONAL_FLAG, pa.STATUS, 
pa.OWNER_SITE, pa.ORIGINATING_SITE, pa.REVIEW_DATE, pa.ASSIGNMENT_NARRATIVE, CASE WHEN FLAG_NAME_LOCAL_FLAG IS NOT NULL THEN 
'CATEGORY II (LOCAL FLAG)' WHEN FLAG_NAME_NATIONAL_FLAG IS NOT NULL THEN 'CATEGORY I (NATIONAL FLAG)' END AS CATEGORY, CASE WHEN 
FLAG_NAME_LOCAL_FLAG IS NOT NULL THEN pa.FLAG_NAME_LOCAL_FLAG_NAME WHEN FLAG_NAME_NATIONAL_FLAG IS NOT NULL THEN pa.FLAG_NAME_NATIONAL_FLAG_NAME 
END AS FLAG_NAME_NAME, pah.DATETIME, pah.ACTION, pah.ENTERED_BY, pah.APPROVED_BY, pah.HISTORY_COMMENTS FROM BMW.PRF_ASSIGNMENT pa INNER JOIN 
BMW.PRF_ASSIGNMENT_HISTORY pah ON pa.ROWID=pah.PRF_ASSIGNMENT
Left OUTER JOIN BMW.PRF_ASSIGNMENT_HISTORY p2 ON (pa.ROWID=p2.PRF_ASSIGNMENT AND (pah.DATETIME< p2.DATETIME OR pah.DATETIME=p2.DATETIME AND pah.ROWID< p2.ROWID))
WHERE p2.ROWID IS NULL ]]></ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGPRIORAUTHORIZATIONSVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.ENCOUNTERDATE9000046C900004611,BMW.PRIORAUTHORIZATIONS</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_PRIOR_AUTHORIZATIONS_VIEW</SqlTableName>
<TimeChanged>63426,64430.712223</TimeChanged>
<TimeCreated>62684,46161.470131</TimeCreated>
<ViewQuery> SELECT ed.ROWID,pa.PATIENT_NAME as PATIENT, ed.ENCOUNTER_DATE , ed.ACTUAL_ADMISSIONVISIT_DATE as ADMISSION_VISIT_DATE, ed.AUTHORIZATION_TYPE as AUTHORIZATION_TYPE, ed.PREAUTH_DATE as AUTHORIZATION_DATE, ed.PREAUTH_NUMBER as AUTHORIZATION_NUMBER, ed.AUTHORIZED_DAYS as AUTHORIZED_DAYS, ed.MAX_DOLLAR_AMOUNT as MAX_DOLLAR_AMOUNT, ed.SERVICE_CATEGORY as SERVICE_CATEGORY, ed.AUTHORIZED_VISITS as AUTHORIZED_VISITS, ed.AUTHORIZATION_STATUS, ed.ENCOUNTER_NOTES, ed.INSURANCE_COMPANY From BMW.PRIOR_AUTHORIZATIONS pa INNER JOIN BMW.ENCOUNTER_DATE_9000046C9000046_11 ed ON ed.PRIOR_AUTHORIZATIONS=pa.IEN</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGPRONOUNSVIEW">
<ClassType>view</ClassType>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_PRONOUNS_VIEW</SqlTableName>
<TimeChanged>65408,39065.831937</TimeChanged>
<TimeCreated>65377,85315.574312</TimeCreated>
<ViewQuery>select IEN, IEN as ROWID, CODE, PRONOUNS || '  -  ' || EXPANDED_DISPLAY as NAME from bmw.Pronouns</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGRESOURCEELIGIBILITYVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.DATEOFINJURY9000041C90000410101,BMW.DATEOFWCINJURY9000042C900004211,BMW.EFFECTIVEDATE90000430101C90000430111,BMW.ELIGIBILITY9000003C900000311,BMW.ELIGIBILITY9000005C900000511,BMW.ELIGIBILITYDATES9000004C900000411,BMW.INSURER9000006C900000611</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_RESOURCE_ELIGIBILITY_VIEW</SqlTableName>
<TimeChanged>63426,64444.542691</TimeChanged>
<TimeCreated>62684,46249.395247</TimeCreated>
<ViewQuery> select mc.ROWID||':MC' as ROWID,mc.MEDICARE_ELIGIBLE||':MC' as PARENT_ID,mc.ELIG__DATE as START_DATE, Case when mc.PLAN_NAME_NAME is not null then mc.PLAN_NAME_NAME Else mc.COVERAGE_TYPE end as COVERAGE, mc.ELIG__END_DATE as END_DATE from BMW.ELIGIBILITY_9000003C9000003_11 mc union select md.ROWID||':MD' as ROWID, md.MEDICAID_ELIGIBLE||':MD' as PARENT_ID, md.ELIG__DATE as START_DATE, md.COVERAGE_TYPE as COVERAGE, md.ELIG__END_DATE as END_DATE from BMW.ELIGIBILITY_DATES_9000004C9000004_11 as md union select t.ROWID||':T' as ROWID, t.ROWID||':T' as PARENT_ID, t.EFFECTIVE_DATE as START_DATE, t.CAUSE_OF_INJURY as COVERAGE, t.ENDING_DATE as END_DATE from BMW.DATE_OF_INJURY_9000041C9000041_0101 as t UNION select p.ROWID||':P' as ROWID, p.ROWID||':P' as PARENT_ID, p.ELIG__DATE as START_DATE, p.COVERAGE_NAME as COVERAGE, p.ELIG__END_DATE as END_DATE from BMW.INSURER_9000006C9000006_11 as p UNION select r.ROWID||':R' as ROWID, r.RAILROAD_ELIGIBLE||':R' as PARENT_ID , r.ELIG__DATE as START_DATE, Case when r.PLAN_NAME_NAME is not null then r.PLAN_NAME_NAME Else r.COVERAGE_TYPE end as COVERAGE, r.ELIG__END_DATE as END_DATE from BMW.ELIGIBILITY_9000005C9000005_11 as r UNION select w.ROWID||':W' as ROWID, w.ROWID||':W' as PARENT_ID, w.EFFECTIVE_DATE as START_DATE, w.TYPE_OF_ACCIDENT as COVERAGE, w.EXPIRATION_DATE as END_DATE from BMW.DATE_OF_WC_INJURY_9000042C9000042_11 as w UNION select g.ROWID||':G' as ROWID, g.GUARANTOR_9000043C9000043_0101||':G' as PARENT_ID, g.EFFECTIVE_DATE as START_DATE, '' as COVERAGE, g.ENDING_DATE as END_DATE from BMW.EFFECTIVE_DATE_9000043_0101C9000043_0111 as g</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGSEQUENCEEFFECTIVEDATEGROUPVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.CATEGORYPRIORITIZING</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_SEQUENCE_EFFECTIVE_DATE_GROUP_VIEW</SqlTableName>
<TimeChanged>63426,64509.85118</TimeChanged>
<TimeCreated>63344,42283.547593</TimeCreated>
<ViewQuery> Select * From(
 select (cp.Patient||cp.EFFECTIVE_DATE_OF_PRIORITY||cp.CATEGORY) as CompositeId, cp.IEN, cp.DATETIME_OF_ENTRY as DATE_OF_ENTRY, cp.PATIENT, cp.INSURER, cp.CATEGORY, cp.PRIORITY, cp.EFFECTIVE_DATE_OF_PRIORITY, 
 cp.COVERAGE_TYPE, cp.ELIG_BEGIN_DATE, cp.ELIG_END_DATE, cp.POLICY_NUMBER, cp.PLAN_POINTER as PLAN, cp.POLICY_HOLDER, cp.USER_14 as ENTERED_BY, cp.RECORD_PTR from BMW.CATEGORY_PRIORITIZING cp 
 where EFFECTIVE_DATE_OF_PRIORITY IS NOT NULL)
 group by EFFECTIVE_DATE_OF_PRIORITY,CATEGORY</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGSEQUENCEGROUPVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.CATEGORYPRIORITIZING</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_SEQUENCE_GROUP_VIEW</SqlTableName>
<TimeChanged>63426,64527.707069</TimeChanged>
<TimeCreated>62692,52051.443466</TimeCreated>
<ViewQuery> SELECT DISTINCT(cp.PATIENT||cp.CATEGORY||cp.EFFECTIVE_DATE_OF_PRIORITY) as ROWID, cp.CATEGORY, cp.PATIENT, cp.EFFECTIVE_DATE_OF_PRIORITY FROM BMW.CATEGORY_PRIORITIZING cp WHERE EFFECTIVE_DATE_OF_PRIORITY IS NOT NULL</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.AGSEQUENCEVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.CATEGORYPRIORITIZING</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>AG_SEQUENCE_VIEW</SqlTableName>
<TimeChanged>64980,63704.892952</TimeChanged>
<TimeCreated>62692,51993.352915</TimeCreated>
<ViewQuery><![CDATA[ Select * From ( 
 select (cp.Patient||cp.EFFECTIVE_DATE_OF_PRIORITY||cp.CATEGORY) as CompositeId, cp.IEN, cp.DATETIME_OF_ENTRY as DATE_OF_ENTRY, cp.PATIENT, cp.INSURER, 
 CASE when cp.INSURER->Name is not null then cp.INSURER->Name else (select name from bmw.VA_PATIENT where ien=LEFT(SUBSTRING(INSURER,9),LEN(SUBSTRING(INSURER,9))-3)) end as INSURER_NAME, 
 cp.CATEGORY, cp.PRIORITY, cp.EFFECTIVE_DATE_OF_PRIORITY, 
 cp.COVERAGE_TYPE, cp.ELIG_BEGIN_DATE, cp.ELIG_END_DATE, cp.POLICY_NUMBER, cp.PLAN_POINTER as PLAN, cp.POLICY_HOLDER, cp.USER_14 as ENTERED_BY, cp.RECORD_PTR from BMW.CATEGORY_PRIORITIZING cp 
 where EFFECTIVE_DATE_OF_PRIORITY IS NOT NULL)]]></ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.BDGADMITTEDPATIENTSVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.VAPATIENT</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>BDG_ADMITTED_PATIENTS_VIEW</SqlTableName>
<TimeChanged>63426,64584.022098</TimeChanged>
<TimeCreated>62796,64293.226087</TimeCreated>
<ViewQuery> Select IEN, CURRENT_ROOM as ROOM_BED, WARD_LOCATION, CURRENT_MOVEMENT, CURRENT_ADMISSION From BMW.VA_PATIENT WHERE CURRENT_ADMISSION is not null and ROOMBED is not null</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.BDGCURRENTADMISSIONVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.PATIENTMOVEMENT</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>BDG_CURRENT_ADMISSION_VIEW</SqlTableName>
<TimeChanged>63426,64838.702145</TimeChanged>
<TimeCreated>62731,42059.181089</TimeCreated>
<ViewQuery> Select * From BMW.Patient_Movement Where Transaction_02 = 1 and DISCHARGECHECKOUT_MOVEMENT is null</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.BDGINCOMPLETECHARTSTATISTICSVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.INCOMPLETECHART,BMW.VHOSPITALIZATION,BMW.VISIT</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>BDG_INCOMPLETE_CHART_STATISTICS_VIEW</SqlTableName>
<TimeChanged>63426,65782.909838</TimeChanged>
<TimeCreated>62804,56137.726861</TimeCreated>
<ViewQuery> 
Select LOCATION, dateadd(month, datediff(month, 0, DISCHARGE_DATE),0) as MONTH_YEAR, Count(DISCHARGE_DATE) as DISCHARGED, COUNT(CODING_COMPLETE) 
as CODED, COUNT(DATE_VISIT_EXPORTED) as EXPORTED, COUNT(DATE_INSURANCE_IDENTIFIED) as INSURANCE from (Select ic.PATIENT, v.VISITADMIT_DATETIME as 
ADMISSION_DATE, ic.DISCHARGE_DATE, ic.VISIT, ic.DATE_INSURANCE_IDENTIFIED, v.DATE_VISIT_EXPORTED, v.DELETE_FLAG, vh.CODING_COMPLETE, 
v.LOC__OF_ENCOUNTER as LOCATION, (BMW_BSF_SP.AG_GetIncompleteChartErrorsM()) AS ERROR From BMW.INCOMPLETE_CHART ic join BMW.VISIT v on ic.VISIT = v.IEN join BMW.V_HOSPITALIZATION vh ON v.IEN = vh.VISIT) 
GROUP BY dateadd(month, datediff(month, 0, DISCHARGE_DATE),0)</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.BDGINCOMPLETECHARTSTATUSVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.INCOMPLETECHART</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>BDG_INCOMPLETE_CHART_STATUS_VIEW</SqlTableName>
<TimeChanged>63426,64882.693108</TimeChanged>
<TimeCreated>62791,46408.131272</TimeCreated>
<ViewQuery> Select dateadd(month, datediff(month, 0, DISCHARGE_DATE),0) as MONTH_YEAR, Count(DISCHARGE_DATE) as DISCHARGED, 
Count(DATE_CHART_CODED) as CODED, COUNT(CASE WHEN DATE_CHART_CODED IS NULL THEN 1 END) as NOT_CODED, 
COUNT(DATE_CHART_TAGGED) as TAGGED, COUNT(DATE_INSURANCE_IDENTIFIED) as INSURANCE_IDENTIFIED From BMW.Incomplete_Chart
GROUP BY dateadd(month, datediff(month, 0, DISCHARGE_DATE),0)</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.BDGINCOMPLETECHARTVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.INCOMPLETECHART,BMW.VISIT</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>BDG_INCOMPLETE_CHART_VIEW</SqlTableName>
<TimeChanged>63426,64897.861828</TimeChanged>
<TimeCreated>62839,46719.5411</TimeCreated>
<ViewQuery>
	 Select (Select LOC__OF_ENCOUNTER From BMW.VISIT Where IEN = ic.VISIT) as LOCATION, ic.* from BMW.INCOMPLETE_CHART ic</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.BSDXAPPOINTMENTVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.APPOINTMENT2C298,BMW.PATIENT44001C44003</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>BSDX_APPOINTMENT_VIEW</SqlTableName>
<TimeChanged>63811,49759.676338</TimeChanged>
<TimeCreated>62684,43477.096038</TimeCreated>
<ViewQuery> SELECT a.RowId, a.VA_Patient as PATIENT, a.IEN as APPOINTMENT_DATE_TIME, a.APPOINTMENT_DATETIME as APPT_DATE_TIME_STRING, a.Clinic, a.Current_Status, a.Status, a.Purpose_Of_Visit, a.Appointment_Type, a.NoShowCancelled_By as NO_SHOW_CANCELLED_BY, a.NoShowCancel_DateTime as NO_SHOW_CANCEL_DATE_TIME, a.Cancellation_Reason, a.Cancellation_Remarks, a.Appt__Cancelled as APPT_CANCELLED, p.Data_Entry_Clerk as Patient_Entry_Clerk, a.Data_Entry_Clerk as App_Entry_Clerk, p.Length_Of_Appt, p.Other, p.Ward_loc, a.DATE_APPT__MADE as Date_Appointment_Made, p.Overbook AS OVER_BOOK, p.Check_in_user, p.Check_out_user, p.CheckedIn AS CHECKED_IN, p.CHecked_out, p.Check_In_Entered, p.Check_Out_Entered FROM BMW.PATIENT_44_001C44_003 p Right Join BMW.Appointment_2C2_98 a On p.Appointment_44c44_001 = a.Clinic || '||' || a.IEN and a.VA_PATIENT = p.Patient</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.BSDXCLINICWORKLOADVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.APPOINTMENT2C298,BMW.PATIENT44001C44003</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>BSDX_CLINIC_WORKLOAD_VIEW</SqlTableName>
<TimeChanged>63578,60179.548887</TimeChanged>
<TimeCreated>62684,43878.509298</TimeCreated>
<ViewQuery> Select *, (ScheduledCount + UnScheduledCount + OverBookCount) as TotalSeen From (SELECT SUBSTRING(a.APPOINTMENT_DATETIME, 1, 7) 
as AppointmentDate, a.APPOINTMENT_DATETIME as AppointmentDateTime, a.Clinic as ClinicId, a.Clinic_Name as ClinicName, 
Count(CASE WHEN (a.Purpose_Of_Visit = 3 AND p.Overbook is null AND a.STATUS is null) THEN a.Purpose_Of_Visit ELSE NULL END) 
as ScheduledCount, Count(CASE WHEN (a.Purpose_Of_Visit = 4 AND p.Overbook is null AND a.STATUS is null) 
THEN a.Purpose_Of_Visit ELSE NULL END) as UnScheduledCount, Count(CASE WHEN (a.STATUS is null) THEN p.Overbook ELSE NULL END) 
AS OverBookCount, Count (CASE WHEN (a.STATUS = 'N' OR a.STATUS = 'NA') THEN a.STATUS ELSE NULL END) AS NoShowCount, 
Count (CASE WHEN (a.STATUS = 'C' OR a.STATUS = 'PC' OR a.STATUS = 'PCA' OR a.STATUS = 'CA') THEN a.STATUS ELSE NULL END) AS 
CancelledCount FROM BMW.PATIENT_44_001C44_003 p 
Right Join BMW.Appointment_2C2_98 a On p.Appointment_44c44_001 = a.Clinic || '||' || a.IEN and a.VA_PATIENT = p.Patient 
Group By a.Clinic, SUBSTRING(a.APPOINTMENT_DATETIME, 1, 7))</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.BSDXWAITINGLISTVIEW">
<ClassType>view</ClassType>
<CompileAfter>BMW.PATIENT90090171C900901711,BMW.WAITINGLIST</CompileAfter>
<DdlAllowed>1</DdlAllowed>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlTableName>BSDX_WAITING_LIST_VIEW</SqlTableName>
<TimeChanged>63426,64969.968278</TimeChanged>
<TimeCreated>62684,46323.166612</TimeCreated>
<ViewQuery> Select p.RowId, w.Clinic_Or_Ward as CLINIC, p.Patient, p.DOB as DATE_OF_BIRTH, p.HRCN, p.Priority, p.Date_Added_To_List, p.User_Who_Added, p.Recall_Date, p.Provider, p.Date_Removed_From_List, p.Resolution, p.Reason_Added_To_List, p.User_Who_Removed, p.Comments From BMW.PATIENT_9009017_1C9009017_11 p JOIN BMW.Waiting_List w ON w.RowId = p.Waiting_List</ViewQuery>

<Parameter name="READONLY">
<Default>1</Default>
</Parameter>

<Parameter name="BmwVersion">
<Default>3.0.0</Default>
</Parameter>
</Class>


<Class name="BMW.BSF.VW.FINALSECTIONOFLETTER4075C40753">
<Description>
Generated class for FileMan Word Processing Field: '407.53'  Name: 'FINAL SECTION OF LETTER'   Class generated by %fm2class version '2.10'</Description>
<ClassType>persistent</ClassType>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlRowIdName>RowId</SqlRowIdName>
<SqlTableName>FINAL_SECTION_OF_LETTER_407_5C407_53</SqlTableName>
<StorageStrategy>SQLStorage</StorageStrategy>
<Super>%Library.Persistent</Super>
<TimeChanged>64013,41897.925899</TimeChanged>
<TimeCreated>64013,39967.530746</TimeCreated>

<Parameter name="FILEMANFILENAME">
<Default>FINAL SECTION OF LETTER</Default>
</Parameter>

<Parameter name="FILEMANFILENUMBER">
<Default>407.53</Default>
</Parameter>

<Parameter name="FM2CLASSVERSION">
<Default>2.10</Default>
</Parameter>

<Index name="IDKeyIndex">
<IdKey>1</IdKey>
<PrimaryKey>1</PrimaryKey>
<Properties>IEN</Properties>
<Unique>1</Unique>
</Index>

<Property name="FINALSECTIONOFLETTER">
<Description>
FileMan Field Label: 'FINAL SECTION OF LETTER'  FileMan Field Number: '.01'</Description>
<Type>%Library.String</Type>
<Required>1</Required>
<SqlColumnNumber>3</SqlColumnNumber>
<SqlFieldName>FINAL_SECTION_OF_LETTER</SqlFieldName>
<Parameter name="COLLATION" value="TRUNCATE(30)"/>
<Parameter name="MAXLEN" value="32000"/>
<Parameter name="TRUNCATE" value="0"/>
</Property>

<Property name="IEN">
<Description>
Child Counter Field</Description>
<Type>%Library.String</Type>
<InitialExpression>-999</InitialExpression>
<Required>1</Required>
<SqlFieldName>IEN</SqlFieldName>
<Parameter name="COLLATION" value="EXACT"/>
<Parameter name="TRUNCATE" value="0"/>
</Property>

<Property name="IENS">
<Description>
IENS Field</Description>
<Type>%Library.String</Type>
<Required>1</Required>
<SqlComputeCode>	Set {*}="" New i For i=$l({RowId},"||"):-1:1 s {*}={*}_$p({RowId},"||",i)_","</SqlComputeCode>
<SqlComputed>1</SqlComputed>
<SqlFieldName>IENS</SqlFieldName>
<Transient>1</Transient>
<Parameter name="COLLATION" value="EXACT"/>
</Property>

<Property name="LETTER">
<Description>
Relationship to parent (file name LETTER)</Description>
<Type>BMW.BSF.VW.LETTER</Type>
<Cardinality>parent</Cardinality>
<Inverse>FINALSECTIONOFLETTER4075C40753</Inverse>
<Relationship>1</Relationship>
<Required>1</Required>
<SqlFieldName>LETTER</SqlFieldName>
</Property>

<Trigger name="BeforeDeleteFiling">
<Description>
BEFORE Trigger to perform filing</Description>
<Code>	new:'$data(DUZ) DISYS,DT,DTIME,DUZ new DFDA,i,iens,IO,U,wp For i=$l({LETTER},"||"):-1:1 { s iens=$p({LETTER},"||",i)_"," }
	d GETS^DIQ(407.5,iens,3,,"wp","%FMERR(407.53,""DIQERR"")")
	i $d(%FMERR(407.53,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(407.53)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }
	k wp(407.5,iens,3,{IEN})
	d WP^DIE(407.5,iens,3,,"wp(407.5,iens,3)","%FMERR(407.53)") s %SkipFiling=1
	i $d(%FMERR(407.53,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(407.53)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }</Code>
<Event>DELETE</Event>
<SqlName>BeforeDeleteFiling</SqlName>
</Trigger>

<Trigger name="BeforeInsertFiling">
<Description>
BEFORE INSERT Trigger to perform filing</Description>
<Code>	new:'$data(DIC) DIC set DIC(0)="" new:'$data(DUZ) DISYS,DT,DTIME,DUZ new FDA,IO,U,wp
	s wp(1)={FINAL_SECTION_OF_LETTER}
	d WP^DIE(407.5,$p({IENS},",",2,$$$MaxStringLength),3,"A","wp","%FMERR(407.53)") s %SkipFiling=1
	i $d(%FMERR(407.53,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(407.53)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }</Code>
<Event>INSERT</Event>
<SqlName>BeforeInsertFiling</SqlName>
</Trigger>

<Trigger name="BeforeUpdateFiling">
<Description>
BEFORE UPDATE Trigger to perform filing</Description>
<Code>	new:'$data(DIC) DIC set DIC(0)="" new:'$data(DUZ) DISYS,DT,DTIME,DUZ new FDA,i,iens,IO,U,wp For i=$l({LETTER},"||"):-1:1 { s iens=$p({LETTER},"||",i)_"," }
	d GETS^DIQ(407.5,iens,3,,"wp","%FMERR(407.53,""DIQERR"")")
	i $d(%FMERR(407.53,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(407.53)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }
	s wp(407.5,iens,3,{IEN})={FINAL_SECTION_OF_LETTER}
	d WP^DIE(407.5,iens,3,,"wp(407.5,iens,3)","%FMERR(407.53)") s %SkipFiling=1
	i $d(%FMERR(407.53,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(407.53)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }</Code>
<Event>UPDATE</Event>
<SqlName>BeforeUpdateFiling</SqlName>
</Trigger>

<Storage name="SQLStorage">
<Type>%Library.CacheSQLStorage</Type>
<StreamLocation>^BMW.BSF.VW.FINALSECTIONAB6S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<SQLMap name="FINALSECTIONOFLETTER4075C40753DataMap">
<Type>data</Type>
<Global>^VA</Global>
<Subscript name="1">
<Expression>407.5</Expression>
</Subscript>
<Subscript name="2">
<Expression>{LETTER.IEN}</Expression>
<NextCode>	s:{L2}="" {L2}=0 s {L2}=$o(^({L2})) s:'{L2} {L2}=""
	;PREV
	s:{L2}="" {L2}=":" s {L2}=$o(^({L2}),-1) s:'{L2} {L2}=""</NextCode>
<Invalidcondition name="1">
<Expression><![CDATA[{L2}'>0]]></Expression>
</Invalidcondition>
</Subscript>
<Subscript name="3">
<Expression>2</Expression>
</Subscript>
<Subscript name="4">
<Expression>{IEN}</Expression>
<NextCode>	s:{L4}="" {L4}=0 s {L4}=$o(^({L4})) s:'{L4} {L4}=""
	;PREV
	s:{L4}="" {L4}=0 s {L4}=$o(^({L4}),-1) s:'{L4} {L4}=""</NextCode>
<Invalidcondition name="1">
<Expression><![CDATA[{L4}'>0]]></Expression>
</Invalidcondition>
</Subscript>
<Data name="FINAL_SECTION_OF_LETTER">
<Node>0</Node>
</Data>
</SQLMap>
<SQLMap name="FINALSECTIONOFLETindexB">
<Type>index</Type>
<Condition>{FINAL_SECTION_OF_LETTER}'=""</Condition>
<ConditionalWithHostVars>1</ConditionalWithHostVars>
<Global>^VA</Global>
<PopulationType>conditional</PopulationType>
<Subscript name="1">
<Expression>407.5</Expression>
</Subscript>
<Subscript name="2">
<Expression>{LETTER.IEN}</Expression>
<Invalidcondition name="1">
<Expression><![CDATA[{L2}'>0]]></Expression>
</Invalidcondition>
</Subscript>
<Subscript name="3">
<Expression>2</Expression>
</Subscript>
<Subscript name="4">
<Expression>"B"</Expression>
</Subscript>
<Subscript name="5">
<Expression>$$TRUNCATE({FINAL_SECTION_OF_LETTER},30)</Expression>
</Subscript>
<Subscript name="6">
<Expression>{IEN}</Expression>
<Invalidcondition name="1">
<Expression><![CDATA[{L6}'>0]]></Expression>
</Invalidcondition>
</Subscript>
</SQLMap>
</Storage>
</Class>


<Class name="BMW.BSF.VW.INITIALSECTIONOFLETTER4075C40752">
<Description>
Generated class for FileMan Word Processing Field: '407.52'  Name: 'INITIAL SECTION OF LETTER'   Class generated by %fm2class version '2.10'</Description>
<ClassType>persistent</ClassType>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlRowIdName>RowId</SqlRowIdName>
<SqlTableName>INITIAL_SECTION_OF_LETTER_407_5C407_52</SqlTableName>
<StorageStrategy>SQLStorage</StorageStrategy>
<Super>%Library.Persistent</Super>
<TimeChanged>64013,42232.915155</TimeChanged>
<TimeCreated>64013,39967.901767</TimeCreated>

<Parameter name="FILEMANFILENAME">
<Default>INITIAL SECTION OF LETTER</Default>
</Parameter>

<Parameter name="FILEMANFILENUMBER">
<Default>407.52</Default>
</Parameter>

<Parameter name="FM2CLASSVERSION">
<Default>2.10</Default>
</Parameter>

<Index name="IDKeyIndex">
<IdKey>1</IdKey>
<PrimaryKey>1</PrimaryKey>
<Properties>IEN</Properties>
<Unique>1</Unique>
</Index>

<Property name="IEN">
<Description>
Child Counter Field</Description>
<Type>%Library.String</Type>
<InitialExpression>-999</InitialExpression>
<Required>1</Required>
<SqlFieldName>IEN</SqlFieldName>
<Parameter name="COLLATION" value="EXACT"/>
<Parameter name="TRUNCATE" value="0"/>
</Property>

<Property name="IENS">
<Description>
IENS Field</Description>
<Type>%Library.String</Type>
<Required>1</Required>
<SqlComputeCode>	Set {*}="" New i For i=$l({RowId},"||"):-1:1 s {*}={*}_$p({RowId},"||",i)_","</SqlComputeCode>
<SqlComputed>1</SqlComputed>
<SqlFieldName>IENS</SqlFieldName>
<Transient>1</Transient>
<Parameter name="COLLATION" value="EXACT"/>
</Property>

<Property name="INITIALSECTIONOFLETTER">
<Description>
FileMan Field Label: 'INITIAL SECTION OF LETTER'  FileMan Field Number: '.01'</Description>
<Type>%Library.String</Type>
<Required>1</Required>
<SqlColumnNumber>3</SqlColumnNumber>
<SqlFieldName>INITIAL_SECTION_OF_LETTER</SqlFieldName>
<Parameter name="COLLATION" value="TRUNCATE(30)"/>
<Parameter name="MAXLEN" value="32000"/>
<Parameter name="TRUNCATE" value="0"/>
</Property>

<Property name="LETTER">
<Description>
Relationship to parent (file name LETTER)</Description>
<Type>BMW.BSF.VW.LETTER</Type>
<Cardinality>parent</Cardinality>
<Inverse>INITIALSECTIONOFLETTER4075C4075</Inverse>
<Relationship>1</Relationship>
<Required>1</Required>
<SqlFieldName>LETTER</SqlFieldName>
</Property>

<Trigger name="BeforeDeleteFiling">
<Description>
BEFORE Trigger to perform filing</Description>
<Code>	new:'$data(DUZ) DISYS,DT,DTIME,DUZ new DFDA,i,iens,IO,U,wp For i=$l({LETTER},"||"):-1:1 { s iens=$p({LETTER},"||",i)_"," }
	d GETS^DIQ(407.5,iens,2,,"wp","%FMERR(407.52,""DIQERR"")")
	i $d(%FMERR(407.52,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(407.52)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }
	k wp(407.5,iens,2,{IEN})
	d WP^DIE(407.5,iens,2,,"wp(407.5,iens,2)","%FMERR(407.52)") s %SkipFiling=1
	i $d(%FMERR(407.52,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(407.52)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }</Code>
<Event>DELETE</Event>
<SqlName>BeforeDeleteFiling</SqlName>
</Trigger>

<Trigger name="BeforeInsertFiling">
<Description>
BEFORE INSERT Trigger to perform filing</Description>
<Code>	new:'$data(DIC) DIC set DIC(0)="" new:'$data(DUZ) DISYS,DT,DTIME,DUZ new FDA,IO,U,wp
	s wp(1)={INITIAL_SECTION_OF_LETTER}
	d WP^DIE(407.5,$p({IENS},",",2,$$$MaxStringLength),2,"A","wp","%FMERR(407.52)") s %SkipFiling=1
	i $d(%FMERR(407.52,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(407.52)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }</Code>
<Event>INSERT</Event>
<SqlName>BeforeInsertFiling</SqlName>
</Trigger>

<Trigger name="BeforeUpdateFiling">
<Description>
BEFORE UPDATE Trigger to perform filing</Description>
<Code>	new:'$data(DIC) DIC set DIC(0)="" new:'$data(DUZ) DISYS,DT,DTIME,DUZ new FDA,i,iens,IO,U,wp For i=$l({LETTER},"||"):-1:1 { s iens=$p({LETTER},"||",i)_"," }
	d GETS^DIQ(407.5,iens,2,,"wp","%FMERR(407.52,""DIQERR"")")
	i $d(%FMERR(407.52,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(407.52)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }
	s wp(407.5,iens,2,{IEN})={INITIAL_SECTION_OF_LETTER}
	d WP^DIE(407.5,iens,2,,"wp(407.5,iens,2)","%FMERR(407.52)") s %SkipFiling=1
	i $d(%FMERR(407.52,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(407.52)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }</Code>
<Event>UPDATE</Event>
<SqlName>BeforeUpdateFiling</SqlName>
</Trigger>

<Storage name="SQLStorage">
<Type>%Library.CacheSQLStorage</Type>
<StreamLocation>^BMW.BSF.VW.INITIALSECT4171S</StreamLocation>
<ExtentSize>100000</ExtentSize>
<SQLMap name="INITIALSECTIONOFLETTER4075C40752DataMap">
<Type>data</Type>
<Global>^VA</Global>
<Subscript name="1">
<Expression>407.5</Expression>
</Subscript>
<Subscript name="2">
<Expression>{LETTER.IEN}</Expression>
<NextCode>	s:{L2}="" {L2}=0 s {L2}=$o(^({L2})) s:'{L2} {L2}=""
	;PREV
	s:{L2}="" {L2}=":" s {L2}=$o(^({L2}),-1) s:'{L2} {L2}=""</NextCode>
<Invalidcondition name="1">
<Expression><![CDATA[{L2}'>0]]></Expression>
</Invalidcondition>
</Subscript>
<Subscript name="3">
<Expression>1</Expression>
</Subscript>
<Subscript name="4">
<Expression>{IEN}</Expression>
<NextCode>	s:{L4}="" {L4}=0 s {L4}=$o(^({L4})) s:'{L4} {L4}=""
	;PREV
	s:{L4}="" {L4}=0 s {L4}=$o(^({L4}),-1) s:'{L4} {L4}=""</NextCode>
<Invalidcondition name="1">
<Expression><![CDATA[{L4}'>0]]></Expression>
</Invalidcondition>
</Subscript>
<Data name="INITIAL_SECTION_OF_LETTER">
<Node>0</Node>
</Data>
</SQLMap>
<SQLMap name="INITIALSECTIONOFLindexB">
<Type>index</Type>
<Condition>{INITIAL_SECTION_OF_LETTER}'=""</Condition>
<ConditionalWithHostVars>1</ConditionalWithHostVars>
<Global>^VA</Global>
<PopulationType>conditional</PopulationType>
<Subscript name="1">
<Expression>407.5</Expression>
</Subscript>
<Subscript name="2">
<Expression>{LETTER.IEN}</Expression>
<Invalidcondition name="1">
<Expression><![CDATA[{L2}'>0]]></Expression>
</Invalidcondition>
</Subscript>
<Subscript name="3">
<Expression>1</Expression>
</Subscript>
<Subscript name="4">
<Expression>"B"</Expression>
</Subscript>
<Subscript name="5">
<Expression>$$TRUNCATE({INITIAL_SECTION_OF_LETTER},30)</Expression>
</Subscript>
<Subscript name="6">
<Expression>{IEN}</Expression>
<Invalidcondition name="1">
<Expression><![CDATA[{L6}'>0]]></Expression>
</Invalidcondition>
</Subscript>
</SQLMap>
</Storage>
</Class>


<Class name="BMW.BSF.VW.LETTER">
<Description>
Generated class for FileMan File Number: '407.5'  File Name: 'LETTER'   Class generated by %fm2class version '2.10'
This file contains all letters that may be sent out by a site.  These
include letters notifying patients of future appointments, cancelled
appointments, and scheduled admissions.  The site can edit the text that
they would like to appear in these letters.</Description>
<ClassType>persistent</ClassType>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlRowIdName>RowId</SqlRowIdName>
<SqlTableName>LETTER</SqlTableName>
<StorageStrategy>SQLStorage</StorageStrategy>
<Super>%Library.Persistent</Super>
<TimeChanged>64013,41687.721184</TimeChanged>
<TimeCreated>64013,39968.112945</TimeCreated>

<Parameter name="FILEMANFILENAME">
<Default>LETTER</Default>
</Parameter>

<Parameter name="FILEMANFILENUMBER">
<Default>407.5</Default>
</Parameter>

<Parameter name="FM2CLASSVERSION">
<Default>2.10</Default>
</Parameter>

<Index name="IDKeyIndex">
<IdKey>1</IdKey>
<PrimaryKey>1</PrimaryKey>
<Properties>IEN</Properties>
<Unique>1</Unique>
</Index>

<Property name="FINALSECTIONOFLETTER4075C40753">
<Description>
Relationship for Word-Processing Field child</Description>
<Type>BMW.BSF.VW.FINALSECTIONOFLETTER4075C40753</Type>
<Cardinality>children</Cardinality>
<Inverse>LETTER</Inverse>
<Relationship>1</Relationship>
<SqlFieldName>FINAL_SECTION_OF_LETTER_407_5C407_53</SqlFieldName>
</Property>

<Property name="GREETINGSTOPARENTS">
<Description>
FileMan Field Label: 'GREETINGS TO PARENTS?'  FileMan Field Number: '9999999.01'</Description>
<Type>%Library.String</Type>
<SqlColumnNumber>5</SqlColumnNumber>
<SqlFieldName>GREETINGS_TO_PARENTS</SqlFieldName>
<Parameter name="DISPLAYLIST" value=";NO;YES"/>
<Parameter name="MAXLEN" value="3"/>
<Parameter name="VALUELIST" value=";0;1"/>
</Property>

<Property name="IEN">
<Description>
Internal Entry Number</Description>
<Type>%Library.String</Type>
<InitialExpression>$$next^%apiSQL("$p(^VA(407.5,0),""^"",3)")</InitialExpression>
<Required>1</Required>
<SqlColumnNumber>2</SqlColumnNumber>
<SqlFieldName>IEN</SqlFieldName>
<Parameter name="COLLATION" value="EXACT"/>
<Parameter name="TRUNCATE" value="0"/>
</Property>

<Property name="INITIALSECTIONOFLETTER4075C4075">
<Description>
Relationship for Word-Processing Field child</Description>
<Type>BMW.BSF.VW.INITIALSECTIONOFLETTER4075C40752</Type>
<Cardinality>children</Cardinality>
<Inverse>LETTER</Inverse>
<Relationship>1</Relationship>
<SqlFieldName>INITIAL_SECTION_OF_LETTER_407_5C407_52</SqlFieldName>
</Property>

<Property name="NAME">
<Description>
FileMan Field Label: 'NAME'  FileMan Field Number: '.01'
The name of a letter that has been initially created by the developer
in a 'skeleton form' and the user edits the body of the letter.  These
letters are utilized mostly in the Scheduling Module of the MAS DHCP
software.</Description>
<Type>%Library.String</Type>
<Required>1</Required>
<SqlColumnNumber>3</SqlColumnNumber>
<SqlFieldName>NAME</SqlFieldName>
<Parameter name="COLLATION" value="EXACT"/>
<Parameter name="MAXLEN" value="30"/>
<Parameter name="MINLEN" value="3"/>
<Parameter name="TRUNCATE" value="0"/>
</Property>

<UDLText name="T">
<Content><![CDATA[
// Relationship PATIENTTRACKING4075C40751 As BMW.BSF.VW.PATIENTTRACKING4075C40751 [ Cardinality = children, Inverse = LETTER, SqlFieldName = PATIENT_TRACKING_407_5C407_51 ];

]]></Content>
</UDLText>

<Property name="TYPE">
<Description>
Relationship for Sub-File/Multiple to file name PATIENT TRACKING child
FileMan Field Label: 'TYPE'  FileMan Field Number: '1'
The letter created is assigned a type for user specific needs.  For
example, a letter created to alert a veteran that he has an appointment
and a new travel legislation has been passed, the user may call this
letter 'Beneficiary Travel'.</Description>
<Type>%Library.String</Type>
<Required>1</Required>
<SqlColumnNumber>4</SqlColumnNumber>
<SqlFieldName>TYPE</SqlFieldName>
<Parameter name="COLLATION" value="TRUNCATE(30)"/>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="0"/>
</Property>

<Trigger name="BeforeDeleteFiling">
<Description>
BEFORE Trigger to perform filing</Description>
<Code>	new:'$data(DUZ) DISYS,DT,DTIME,DUZ new %,%H,DA,DIC,DIK,IO,U,X,Y d DTNOLF^DICRW s DIK="^VA(407.5," s DA={%%ID} d ^DIK s %SkipFiling=1 q</Code>
<Event>DELETE</Event>
<SqlName>BeforeDeleteFiling</SqlName>
</Trigger>

<Trigger name="BeforeInsertFiling">
<Description>
BEFORE INSERT Trigger to perform filing</Description>
<Code>	new:'$data(DIC) DIC set DIC(0)="" new:'$data(DUZ) DISYS,DT,DTIME,DUZ new FDA,FDAIEN,IO,U,wp s FDAIEN(1)={IEN}
	s:{NAME}'="" FDA(407.5,"+1,",.01)={"NAME"}
	s:{TYPE}'="" FDA(407.5,"+1,",1)={"TYPE"}
	s:{GREETINGS_TO_PARENTS}'="" FDA(407.5,"+1,",9999999.01)={"GREETINGS_TO_PARENTS"}
	d UPDATE^DIE("","FDA","FDAIEN","%FMERR(407.5)") s %SkipFiling=1
	i $d(%FMERR(407.5,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(407.5)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }
	QUIT</Code>
<Event>INSERT</Event>
<SqlName>BeforeInsertFiling</SqlName>
</Trigger>

<Trigger name="BeforeUpdateFiling">
<Description>
BEFORE UPDATE Trigger to perform filing</Description>
<Code>	new:'$data(DIC) DIC set DIC(0)="" new:'$data(DUZ) DISYS,DT,DTIME,DUZ new FDA,IENS,IO,U,wp,wproot s IENS={IEN}_","
	s:{NAME*C} FDA(407.5,IENS,.01)={NAME}
	s:{TYPE*C} FDA(407.5,IENS,1)={TYPE}
	s:{GREETINGS_TO_PARENTS*C} FDA(407.5,IENS,9999999.01)={GREETINGS_TO_PARENTS}
	d:$d(FDA) UPDATE^DIE("","FDA",,"%FMERR(407.5)") s %SkipFiling=1
	i $d(%FMERR(407.5,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(407.5)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }
	QUIT</Code>
<Event>UPDATE</Event>
<SqlName>BeforeUpdateFiling</SqlName>
</Trigger>

<Storage name="SQLStorage">
<Type>%Library.CacheSQLStorage</Type>
<StreamLocation>^BMW.BSF.VW.LETTERS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<SQLMap name="LETTERDataMap">
<Type>data</Type>
<Global>^VA</Global>
<Subscript name="1">
<Expression>407.5</Expression>
</Subscript>
<Subscript name="2">
<Expression>{IEN}</Expression>
<NextCode>	s:{L2}="" {L2}=0 s {L2}=$o(^({L2})) s:'{L2} {L2}=""
	;PREV
	s:{L2}="" {L2}=":" s {L2}=$o(^({L2}),-1) s:'{L2} {L2}=""</NextCode>
<Invalidcondition name="1">
<Expression><![CDATA[{L2}'>0]]></Expression>
</Invalidcondition>
</Subscript>
<Data name="GREETINGS_TO_PARENTS">
<Delimiter>"^"</Delimiter>
<Node>"IHS"</Node>
<Piece>1</Piece>
</Data>
<Data name="NAME">
<Delimiter>"^"</Delimiter>
<Node>0</Node>
<Piece>1</Piece>
</Data>
<Data name="TYPE">
<Delimiter>"^"</Delimiter>
<Node>0</Node>
<Piece>2</Piece>
</Data>
</SQLMap>
<SQLMap name="NAMEindexB">
<Type>index</Type>
<Global>^VA</Global>
<PopulationType>nonnull</PopulationType>
<Subscript name="1">
<Expression>407.5</Expression>
</Subscript>
<Subscript name="2">
<Expression>"B"</Expression>
</Subscript>
<Subscript name="3">
<Expression>{NAME}</Expression>
</Subscript>
<Subscript name="4">
<Expression>{IEN}</Expression>
<Invalidcondition name="1">
<Expression><![CDATA[{L4}'>0]]></Expression>
</Invalidcondition>
</Subscript>
</SQLMap>
<SQLMap name="TYPEindexC">
<Type>index</Type>
<Condition>{TYPE}'=""</Condition>
<ConditionalWithHostVars>1</ConditionalWithHostVars>
<Global>^VA</Global>
<PopulationType>conditional</PopulationType>
<Subscript name="1">
<Expression>407.5</Expression>
</Subscript>
<Subscript name="2">
<Expression>"C"</Expression>
</Subscript>
<Subscript name="3">
<Expression>$$TRUNCATE({TYPE},30)</Expression>
</Subscript>
<Subscript name="4">
<Expression>{IEN}</Expression>
<Invalidcondition name="1">
<Expression><![CDATA[{L4}'>0]]></Expression>
</Invalidcondition>
</Subscript>
</SQLMap>
</Storage>
</Class>


<Class name="BMW.BSF.VW.LOCATIONOFHOME9000001C900000112">
<Description>
Generated class for FileMan Word Processing Field: '9000001.12'  Name: 'LOCATION OF HOME'   Class generated by %fm2class version '2.10'</Description>
<ClassType>persistent</ClassType>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlRowIdName>RowId</SqlRowIdName>
<SqlTableName>LOCATION_OF_HOME_9000001C9000001_12</SqlTableName>
<StorageStrategy>SQLStorage</StorageStrategy>
<Super>%Library.Persistent</Super>
<TimeChanged>64013,52618.658312</TimeChanged>
<TimeCreated>64013,52290.798955</TimeCreated>

<Parameter name="FILEMANFILENAME">
<Default>LOCATION OF HOME</Default>
</Parameter>

<Parameter name="FILEMANFILENUMBER">
<Default>9000001.12</Default>
</Parameter>

<Parameter name="FM2CLASSVERSION">
<Default>2.10</Default>
</Parameter>

<Index name="IDKeyIndex">
<IdKey>1</IdKey>
<PrimaryKey>1</PrimaryKey>
<Properties>IEN</Properties>
<Unique>1</Unique>
</Index>

<Property name="IEN">
<Description>
Child Counter Field</Description>
<Type>%Library.String</Type>
<InitialExpression>-999</InitialExpression>
<Required>1</Required>
<SqlFieldName>IEN</SqlFieldName>
<Parameter name="COLLATION" value="EXACT"/>
<Parameter name="TRUNCATE" value="0"/>
</Property>

<Property name="IENS">
<Description>
IENS Field</Description>
<Type>%Library.String</Type>
<Required>1</Required>
<SqlComputeCode>	Set {*}="" New i For i=$l({RowId},"||"):-1:1 s {*}={*}_$p({RowId},"||",i)_","</SqlComputeCode>
<SqlComputed>1</SqlComputed>
<SqlFieldName>IENS</SqlFieldName>
<Transient>1</Transient>
<Parameter name="COLLATION" value="EXACT"/>
</Property>

<Property name="LOCATIONOFHOME">
<Description>
FileMan Field Label: 'LOCATION OF HOME'  FileMan Field Number: '.01'</Description>
<Type>%Library.String</Type>
<Required>1</Required>
<SqlColumnNumber>3</SqlColumnNumber>
<SqlFieldName>LOCATION_OF_HOME</SqlFieldName>
<Parameter name="COLLATION" value="EXACT"/>
<Parameter name="MAXLEN" value="32000"/>
<Parameter name="TRUNCATE" value="0"/>
</Property>

<Property name="PATIENT">
<Description>
Relationship to parent (file name PATIENT)</Description>
<Type>BMW.BSF.VW.PATIENT</Type>
<Cardinality>parent</Cardinality>
<Inverse>LOCATIONOFHOME9000001C900000112</Inverse>
<Relationship>1</Relationship>
<Required>1</Required>
<SqlFieldName>PATIENT</SqlFieldName>
</Property>

<Trigger name="BeforeDeleteFiling">
<Description>
BEFORE Trigger to perform filing</Description>
<Code>	new:'$data(DUZ) DISYS,DT,DTIME,DUZ new DFDA,i,iens,IO,U,wp For i=$l({PATIENT},"||"):-1:1 { s iens=$p({PATIENT},"||",i)_"," }
	d GETS^DIQ(9000001,iens,1201,,"wp","%FMERR(9000001.12,""DIQERR"")")
	i $d(%FMERR(9000001.12,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(9000001.12)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }
	k wp(9000001,iens,1201,{IEN})
	d WP^DIE(9000001,iens,1201,,"wp(9000001,iens,1201)","%FMERR(9000001.12)") s %SkipFiling=1
	i $d(%FMERR(9000001.12,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(9000001.12)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }</Code>
<Event>DELETE</Event>
<SqlName>BeforeDeleteFiling</SqlName>
</Trigger>

<Trigger name="BeforeInsertFiling">
<Description>
BEFORE INSERT Trigger to perform filing</Description>
<Code>	new:'$data(DIC) DIC set DIC(0)="" new:'$data(DUZ) DISYS,DT,DTIME,DUZ new FDA,IO,U,wp
	s wp(1)={LOCATION_OF_HOME}
	d WP^DIE(9000001,$p({IENS},",",2,$$$MaxStringLength),1201,"A","wp","%FMERR(9000001.12)") s %SkipFiling=1
	i $d(%FMERR(9000001.12,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(9000001.12)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }</Code>
<Event>INSERT</Event>
<SqlName>BeforeInsertFiling</SqlName>
</Trigger>

<Trigger name="BeforeUpdateFiling">
<Description>
BEFORE UPDATE Trigger to perform filing</Description>
<Code>	new:'$data(DIC) DIC set DIC(0)="" new:'$data(DUZ) DISYS,DT,DTIME,DUZ new FDA,i,iens,IO,U,wp For i=$l({PATIENT},"||"):-1:1 { s iens=$p({PATIENT},"||",i)_"," }
	d GETS^DIQ(9000001,iens,1201,,"wp","%FMERR(9000001.12,""DIQERR"")")
	i $d(%FMERR(9000001.12,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(9000001.12)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }
	s wp(9000001,iens,1201,{IEN})={LOCATION_OF_HOME}
	d WP^DIE(9000001,iens,1201,,"wp(9000001,iens,1201)","%FMERR(9000001.12)") s %SkipFiling=1
	i $d(%FMERR(9000001.12,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(9000001.12)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }</Code>
<Event>UPDATE</Event>
<SqlName>BeforeUpdateFiling</SqlName>
</Trigger>

<Storage name="SQLStorage">
<Type>%Library.CacheSQLStorage</Type>
<StreamLocation>^BMW.BSF.VW.LOCATIONOFH2FFFS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<SQLMap name="LOCATIONOFHOME9000001C900000112DataMap">
<Type>data</Type>
<Global>^AUPNPAT</Global>
<Subscript name="1">
<Expression>{PATIENT.IEN}</Expression>
<NextCode>	s:{L1}="" {L1}=0 s {L1}=$o(^({L1})) s:'{L1} {L1}=""
	;PREV
	s:{L1}="" {L1}=":" s {L1}=$o(^({L1}),-1) s:'{L1} {L1}=""</NextCode>
<Invalidcondition name="1">
<Expression><![CDATA[{L1}'>0]]></Expression>
</Invalidcondition>
</Subscript>
<Subscript name="2">
<Expression>12</Expression>
</Subscript>
<Subscript name="3">
<Expression>{IEN}</Expression>
<NextCode>	s:{L3}="" {L3}=0 s {L3}=$o(^({L3})) s:'{L3} {L3}=""
	;PREV
	s:{L3}="" {L3}=0 s {L3}=$o(^({L3}),-1) s:'{L3} {L3}=""</NextCode>
<Invalidcondition name="1">
<Expression><![CDATA[{L3}'>0]]></Expression>
</Invalidcondition>
</Subscript>
<Data name="LOCATION_OF_HOME">
<Node>0</Node>
</Data>
</SQLMap>
</Storage>
</Class>


<Class name="BMW.BSF.VW.PATIENT">
<Description>
Generated class for FileMan File Number: '9000001'  File Name: 'PATIENT'   Class generated by %fm2class version '2.10'
This file is the primary patient data file.  The NAME (.01) field of this 
file is a backward pointer to the VA's patient file (#2).  Fields in 
common between the two dictionaries actually exist only in the VA patient 
file and are referenced by the IHS patient file as computed fields.  All 
other files containing patient data have backward pointers linking them to 
this file.  The linkage is by patient name and the internal FileMan gener-
ated number of the ancillary file is the same number used in this file.
   
All applications developed for the RPMS which require patient data will
point to this file.</Description>
<ClassType>persistent</ClassType>
<Owner>_SYSTEM</Owner>
<ProcedureBlock>0</ProcedureBlock>
<SqlRowIdName>RowId</SqlRowIdName>
<SqlTableName>PATIENT</SqlTableName>
<StorageStrategy>SQLStorage</StorageStrategy>
<Super>%Library.Persistent</Super>
<TimeChanged>64013,52496.118519</TimeChanged>
<TimeCreated>64013,52290.831463</TimeCreated>

<Parameter name="FILEMANFILENAME">
<Default>PATIENT</Default>
</Parameter>

<Parameter name="FILEMANFILENUMBER">
<Default>9000001</Default>
</Parameter>

<Parameter name="FM2CLASSVERSION">
<Default>2.10</Default>
</Parameter>

<Index name="IDKeyIndex">
<IdKey>1</IdKey>
<PrimaryKey>1</PrimaryKey>
<Properties>IEN</Properties>
<Unique>1</Unique>
</Index>

<ForeignKey name="FKeyNAME">
<Description><![CDATA[
Foriegn Key constraint for Pointer reference field NAME->VA_PATIENT]]></Description>
<Properties>NAME</Properties>
<ReferencedClass>BMW.VAPATIENT</ReferencedClass>
<SqlName>FKey_NAME</SqlName>
</ForeignKey>

<Property name="IEN">
<Description>
Internal Entry Number</Description>
<Type>%Library.String</Type>
<InitialExpression>$$next^%apiSQL("$p(^AUPNPAT(0),""^"",3)")</InitialExpression>
<Required>1</Required>
<SqlColumnNumber>2</SqlColumnNumber>
<SqlFieldName>IEN</SqlFieldName>
<Parameter name="COLLATION" value="EXACT"/>
<Parameter name="TRUNCATE" value="0"/>
</Property>

<Property name="LOCATIONOFHOME9000001C900000112">
<Description>
Relationship for Word-Processing Field child</Description>
<Type>BMW.BSF.VW.LOCATIONOFHOME9000001C900000112</Type>
<Cardinality>children</Cardinality>
<Inverse>PATIENT</Inverse>
<Relationship>1</Relationship>
<SqlFieldName>LOCATION_OF_HOME_9000001C9000001_12</SqlFieldName>
</Property>

<Property name="NAME">
<Description>
FileMan Field Label: 'NAME'  FileMan Field Number: '.01'</Description>
<Type>BMW.VAPATIENT</Type>
<Required>1</Required>
<SqlColumnNumber>3</SqlColumnNumber>
<SqlFieldName>NAME</SqlFieldName>
</Property>

<Property name="NAMENAME">
<Description><![CDATA[
Expanded Pointer Field for NAME->NAME

Enter the patient's name in 'LAST,FIRST MIDDLE SUFFIX' format.
This value must be 3-30 characters in length and may contain only uppercase
alpha characters, spaces, apostrophes, hyphens and one comma.  All other
characters and parenthetical text will be removed.]]></Description>
<Type>%Library.String</Type>
<SqlComputeCode><![CDATA[	new id,%ROWCOUNT,%ROWID,SQLCODE,val set id={%%ID}
	&sql(select NAME->NAME into :val from BMW.PATIENT where %ID=:id)
	set {NAME_NAME}=$select(SQLCODE=0:val,1:"")]]></SqlComputeCode>
<SqlComputed>1</SqlComputed>
<SqlFieldName>NAME_NAME</SqlFieldName>
<Transient>1</Transient>
<ReadOnly>1</ReadOnly>
</Property>

<Trigger name="BeforeDeleteFiling">
<Description>
BEFORE Trigger to perform filing</Description>
<Code>	new:'$data(DUZ) DISYS,DT,DTIME,DUZ new %,%H,DA,DIC,DIK,IO,U,X,Y d DTNOLF^DICRW s DIK="^AUPNPAT(" s DA={%%ID} d ^DIK s %SkipFiling=1 q</Code>
<Event>DELETE</Event>
<SqlName>BeforeDeleteFiling</SqlName>
</Trigger>

<Trigger name="BeforeInsertFiling">
<Description>
BEFORE INSERT Trigger to perform filing</Description>
<Code>	new:'$data(DIC) DIC set DIC(0)="" new:'$data(DUZ) DISYS,DT,DTIME,DUZ new FDA,FDAIEN,IO,U,wp s FDAIEN(1)={IEN}
	s:{NAME}'="" FDA(9000001,"+1,",.01)={"NAME"}
	d UPDATE^DIE("","FDA","FDAIEN","%FMERR(9000001)") s %SkipFiling=1
	i $d(%FMERR(9000001,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(9000001)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }
	QUIT</Code>
<Event>INSERT</Event>
<SqlName>BeforeInsertFiling</SqlName>
</Trigger>

<Trigger name="BeforeUpdateFiling">
<Description>
BEFORE UPDATE Trigger to perform filing</Description>
<Code>	new:'$data(DIC) DIC set DIC(0)="" new:'$data(DUZ) DISYS,DT,DTIME,DUZ new FDA,IENS,IO,U,wp,wproot s IENS={IEN}_","
	s:{NAME*C} FDA(9000001,IENS,.01)={NAME}
	d:$d(FDA) UPDATE^DIE("","FDA",,"%FMERR(9000001)") s %SkipFiling=1
	i $d(%FMERR(9000001,"DIERR")) { s U="^" d MSG^DIALOG("AT",.err,32768,,"%FMERR(9000001)") s %ok=0 f err=1:1:err { s $p(%msg,$c(13,10),err)=$g(err(err)) } q  }
	QUIT</Code>
<Event>UPDATE</Event>
<SqlName>BeforeUpdateFiling</SqlName>
</Trigger>

<Storage name="SQLStorage">
<Type>%Library.CacheSQLStorage</Type>
<StreamLocation>^BMW.BSF.VW.PATIENTS</StreamLocation>
<ExtentSize>100000</ExtentSize>
<SQLMap name="NAMEindexB">
<Type>index</Type>
<Global>^AUPNPAT</Global>
<PopulationType>nonnull</PopulationType>
<Subscript name="1">
<Expression>"B"</Expression>
</Subscript>
<Subscript name="2">
<Expression>{NAME}</Expression>
</Subscript>
<Subscript name="3">
<Expression>{IEN}</Expression>
<Invalidcondition name="1">
<Expression><![CDATA[{L3}'>0]]></Expression>
</Invalidcondition>
</Subscript>
</SQLMap>
<SQLMap name="PATIENTDataMap">
<Type>data</Type>
<Global>^AUPNPAT</Global>
<Subscript name="1">
<Expression>{IEN}</Expression>
<NextCode>	s:{L1}="" {L1}=0 s {L1}=$o(^({L1})) s:'{L1} {L1}=""
	;PREV
	s:{L1}="" {L1}=":" s {L1}=$o(^({L1}),-1) s:'{L1} {L1}=""</NextCode>
<Invalidcondition name="1">
<Expression><![CDATA[{L1}'>0]]></Expression>
</Invalidcondition>
</Subscript>
<Data name="NAME">
<Delimiter>"^"</Delimiter>
<Node>0</Node>
<Piece>1</Piece>
</Data>
</SQLMap>
</Storage>
</Class>
</Export>
