diff --git a/kids/BSDX 1.7.KIDS b/kids/bsdx_0170.kids similarity index 88% rename from kids/BSDX 1.7.KIDS rename to kids/bsdx_0170.kids index 3266d8b..06944be 100644 --- a/kids/BSDX 1.7.KIDS +++ b/kids/bsdx_0170.kids @@ -1,11 +1,11 @@ -KIDS Distribution saved on Oct 04, 2012@15:58:13 +KIDS Distribution saved on Jun 01, 2013@19:35:37 BSDX 1.7 **KIDS**:BSDX 1.7^ **INSTALL NAME** BSDX 1.7 "BLD",8037,0) -BSDX 1.7^IHS Windows Scheduling^^3121004^n +BSDX 1.7^IHS Windows Scheduling^^3130601^n "BLD",8037,1,0) ^^33^33^3120711^^^ "BLD",8037,1,1,0) @@ -163,21 +163,21 @@ V0200^BSDX2E "BLD",8037,"KRN",9.8,"NM",0) ^9.68A^40^40 "BLD",8037,"KRN",9.8,"NM",1,0) -BSDX01^^0^B175136029 +BSDX01^^0^B172528150 "BLD",8037,"KRN",9.8,"NM",2,0) -BSDX02^^0^B20526178 +BSDX02^^0^B19587814 "BLD",8037,"KRN",9.8,"NM",3,0) BSDX03^^0^B2916424 "BLD",8037,"KRN",9.8,"NM",4,0) -BSDX04^^0^B24533216 +BSDX04^^0^B24529408 "BLD",8037,"KRN",9.8,"NM",5,0) BSDX05^^0^B11080417 "BLD",8037,"KRN",9.8,"NM",6,0) BSDX06^^0^B6651946 "BLD",8037,"KRN",9.8,"NM",7,0) -BSDX07^^0^B200914453 +BSDX07^^0^B81183501 "BLD",8037,"KRN",9.8,"NM",8,0) -BSDX08^^0^B118482818 +BSDX08^^0^B46874843 "BLD",8037,"KRN",9.8,"NM",9,0) BSDX09^^0^B35856892 "BLD",8037,"KRN",9.8,"NM",10,0) @@ -207,19 +207,19 @@ BSDX23^^0^B8607717 "BLD",8037,"KRN",9.8,"NM",22,0) BSDX24^^0^B13588210 "BLD",8037,"KRN",9.8,"NM",23,0) -BSDX25^^0^B58341725 +BSDX25^^0^B75573201 "BLD",8037,"KRN",9.8,"NM",24,0) -BSDX26^^0^B31065017 +BSDX26^^0^B15866028 "BLD",8037,"KRN",9.8,"NM",25,0) BSDX27^^0^B133802805 "BLD",8037,"KRN",9.8,"NM",26,0) -BSDX28^^0^B35687192 +BSDX28^^0^B34678667 "BLD",8037,"KRN",9.8,"NM",27,0) -BSDX29^^0^B51293105 +BSDX29^^0^B52386520 "BLD",8037,"KRN",9.8,"NM",28,0) -BSDX30^^0^B6707992 +BSDX30^^0^B3691453 "BLD",8037,"KRN",9.8,"NM",29,0) -BSDX31^^0^B68354291 +BSDX31^^0^B45572120 "BLD",8037,"KRN",9.8,"NM",30,0) BSDX32^^0^B20186652 "BLD",8037,"KRN",9.8,"NM",31,0) @@ -231,9 +231,9 @@ BSDX35^^0^B8259199 "BLD",8037,"KRN",9.8,"NM",34,0) BSDX11^^0^B6468379 "BLD",8037,"KRN",9.8,"NM",35,0) -BSDXAPI^^0^B149872646 +BSDXAPI^^0^B171938499 "BLD",8037,"KRN",9.8,"NM",36,0) -BSDXGPRV^^0^B4880199 +BSDXGPRV^^0^B4677493 "BLD",8037,"KRN",9.8,"NM",37,0) BSDXAPI1^^0^B99176581 "BLD",8037,"KRN",9.8,"NM",38,0) @@ -935,7 +935,7 @@ K ^BSDXAPPT("APAT") "KRN",19,11025,0) BSDXRPC^WINDOWS SCHEDULING PROCEDURE CALLS^^B^^^^^^^^IHS Windows Scheduling^y "KRN",19,11025,1,0) -^19.06^4^4^3110503^^^ +^19.06^4^4^3130526^^^^ "KRN",19,11025,1,1,0) This option hosts RPCs in the BSDX namespace. Windows Scheduling users "KRN",19,11025,1,2,0) @@ -945,9 +945,9 @@ This option hosts RPCs in the BSDX namespace. Windows Scheduling users "KRN",19,11025,1,4,0) in order to use Windows Scheduling. "KRN",19,11025,99.1) -61545,63078 +62936,43587 "KRN",19,11025,"RPC",0) -^19.05P^108^108 +^19.05P^109^109 "KRN",19,11025,"RPC",1,0) BSDX ADD ACCESS GROUP ITEM "KRN",19,11025,"RPC",2,0) @@ -1074,6 +1074,8 @@ BSDX SCHEDULE RAD EXAM BSDX HOLD RAD EXAM "KRN",19,11025,"RPC",108,0) BSDX CAN HOLD RAD EXAM +"KRN",19,11025,"RPC",109,0) +UJO GET OVERBOOKS PER DAY "KRN",19,11025,"U") WINDOWS SCHEDULING PROCEDURE C "KRN",19.1,488,-1) @@ -1103,7 +1105,7 @@ when the corresponding appointment in RPMS Scheduling is cancelled. "KRN",101,4298,20) I $G(SDAMEVT)=2,$D(^BSDXAPPL) D CANEVT^BSDX08($G(DFN),$G(SDT),$G(SDCL)) "KRN",101,4298,99) -62734,55897 +62772,44459 "KRN",101,4299,-1) 0^1 "KRN",101,4299,0) @@ -1123,7 +1125,7 @@ when the corresponding appointment in RPMS Scheduling is added. "KRN",101,4299,20) I $G(SDAMEVT)=1,$D(^BSDXAPPL) D ADDEVT^BSDX07($G(DFN),$G(SDT),$G(SDCL),$G(SDDA)) "KRN",101,4299,99) -62734,55897 +62772,44459 "KRN",101,4300,-1) 0^4 "KRN",101,4300,0) @@ -1143,7 +1145,7 @@ when the corresponding appointment in RPMS Scheduling is no-showed. "KRN",101,4300,20) I $G(SDAMEVT)=3,$D(^BSDXAPPL) D NOSEVT^BSDX31($G(DFN),$G(SDT),$G(SDCL)) "KRN",101,4300,99) -62734,55897 +62772,44459 "KRN",101,4301,-1) 0^3 "KRN",101,4301,0) @@ -1163,7 +1165,7 @@ when the corresponding appointment in RPMS Scheduling is checked in. "KRN",101,4301,20) I $G(SDAMEVT)=4,$D(^BSDXAPPL) D CHKEVT^BSDX25($G(DFN),$G(SDT),$G(SDCL)) "KRN",101,4301,99) -62734,55897 +62772,44459 "KRN",8989.5,30793,0) 212;DIC(9.4,^BSDX AUTO PRINT RS^1 "KRN",8989.5,30793,1) @@ -1529,9 +1531,9 @@ IHS Windows Scheduling^BSDX^IHS Windows Scheduling Extensions "PKG",212,22,0) ^9.49I^1^1 "PKG",212,22,1,0) -1.7^3121004^3121004^8 +1.7^3130601^3121111^8 "PKG",212,22,1,1,0) -^^33^33^3121004 +^^33^33^3130601 "PKG",212,22,1,1,1,0) IHS Clinical Scheduling modified for VISTA v 1.7. "PKG",212,22,1,1,2,0) @@ -1675,11 +1677,11 @@ D XPZ2^XPDIQ "RTN") 41 "RTN","BSDX01") -0^1^B175136029 +0^1^B172528150 "RTN","BSDX01",1,0) -BSDX01 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 5/16/11 2:46pm +BSDX01 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 1/29/13 12:53pm "RTN","BSDX01",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX01",3,0) ; Licensed under LGPL "RTN","BSDX01",4,0) @@ -1693,829 +1695,835 @@ SUINFOD(BSDXY,BSDXDUZ) ;EP Debugging entry point "RTN","BSDX01",8,0) Q "RTN","BSDX01",9,0) - ; + ;EHS/WAT;UJOK*1.0*4 ;JAN 24,2013;Update [Updating the SUINFO function by adding a new parameter "USERKEY" that holds the name of the user key]. "RTN","BSDX01",10,0) -SUINFO(BSDXY,BSDXDUZ) ;EP + ;EHS/WAT;UJO*2.0*31 ;JAN 24,2013;Update [Updating the SUINFO function by adding a new parameter "USERKEY" that holds the name of the user key]. "RTN","BSDX01",11,0) - ;Called by BSDX SCHEDULING USER INFO + ;SUINFO(BSDXY,BSDXDUZ) ;EP "RTN","BSDX01",12,0) - ;Returns ADO Recordset having column MANAGER +SUINFO(BSDXY,BSDXDUZ,USERKEY) ;EP "RTN","BSDX01",13,0) - ;MANAGER = YES if user has keys BSDXZMGR or XUPROGMODE + ;Called by BSDX SCHEDULING USER INFO "RTN","BSDX01",14,0) - ; + ;Returns ADO Recordset having column MANAGER "RTN","BSDX01",15,0) - N BSDXMGR,BSDXERR + ;MANAGER = YES if user has keys BSDXZMGR or XUPROGMODE "RTN","BSDX01",16,0) - K ^BSDXTMP($J) + ; "RTN","BSDX01",17,0) - S BSDXY="^BSDXTMP("_$J_")" + N BSDXMGR,BSDXERR "RTN","BSDX01",18,0) - S BSDXI=0 + K ^BSDXTMP($J) "RTN","BSDX01",19,0) - S BSDXERR="" + S BSDXY="^BSDXTMP("_$J_")" "RTN","BSDX01",20,0) - S ^BSDXTMP($J,BSDXI)="T00010MANAGER"_$C(30) + S BSDXI=0 "RTN","BSDX01",21,0) - ;Check SECURITY KEY file for BSDXZMGR or XUPROGMODE keys + S BSDXERR="" "RTN","BSDX01",22,0) - I '+BSDXDUZ S BSDXDUZ=DUZ + S ^BSDXTMP($J,BSDXI)="T00010MANAGER"_$C(30) "RTN","BSDX01",23,0) - S BSDXMGR=$$APSEC("BSDXZMGR",BSDXDUZ) + ;Check SECURITY KEY file for BSDXZMGR or XUPROGMODE keys "RTN","BSDX01",24,0) - S BSDXMGR=$S(BSDXMGR=1:"YES",1:"NO") + I '+BSDXDUZ S BSDXDUZ=DUZ "RTN","BSDX01",25,0) - S BSDXI=BSDXI+1 + ;EHS/WAT;UJOK*1.0*4 ;JAN 24,2013; Update [Updating the argument sent to $$APSEC function from hard coded string "BSDXZMGR" to "USERKEY" variable]. "RTN","BSDX01",26,0) - S ^BSDXTMP($J,BSDXI)=BSDXMGR_$C(30) + ;EHS/WAT;UJO*2.0*31 ;JAN 24,2013; Update [Updating the argument sent to $$APSEC function from hard coded string "BSDXZMGR" to "USERKEY" variable]. "RTN","BSDX01",27,0) - S ^BSDXTMP($J,BSDXI+1)=$C(31)_BSDXERR + ;S BSDXMGR=$$APSEC("BSDXZMGR",BSDXDUZ); "RTN","BSDX01",28,0) - Q + S BSDXMGR=$$APSEC(USERKEY,BSDXDUZ) "RTN","BSDX01",29,0) -DEPUSRD(BSDXY,BSDXDUZ) ;EP Debugging entry point + S BSDXMGR=$S(BSDXMGR=1:"YES",1:"NO") "RTN","BSDX01",30,0) - ; + S BSDXI=BSDXI+1 "RTN","BSDX01",31,0) - ; + S ^BSDXTMP($J,BSDXI)=BSDXMGR_$C(30) "RTN","BSDX01",32,0) - ;D DEBUG^%Serenji("DEPUSR^BSDX01(.BSDXY,BSDXDUZ)") + S ^BSDXTMP($J,BSDXI+1)=$C(31)_BSDXERR "RTN","BSDX01",33,0) - ; -"RTN","BSDX01",34,0) Q +"RTN","BSDX01",34,0) +DEPUSRD(BSDXY,BSDXDUZ) ;EP Debugging entry point "RTN","BSDX01",35,0) ; "RTN","BSDX01",36,0) -DEPUSR(BSDXY,BSDXDUZ) ;EP + ; "RTN","BSDX01",37,0) - ;Called by BSDX RESOURCE GROUPS BY USER + ;D DEBUG^%Serenji("DEPUSR^BSDX01(.BSDXY,BSDXDUZ)") "RTN","BSDX01",38,0) - ;Returns ADO Recordset with all ACTIVE resource group names to which user has access + ; "RTN","BSDX01",39,0) - ;based on entries in BSDX RESOURCE USER file (Say this again for myself: Groups ONLY!!) -"RTN","BSDX01",40,0) - ;If BSDXDUZ=0 then returns all department names for current DUZ -"RTN","BSDX01",41,0) - ;if not linked, always returned. -"RTN","BSDX01",42,0) - ;If user BSDXDUZ possesses the key BSDXZMGR or XUPROGMODE -"RTN","BSDX01",43,0) - ;then ALL resource group names are returned regardless of whether any active resources -"RTN","BSDX01",44,0) - ;are associated with the group or not. -"RTN","BSDX01",45,0) - ; -"RTN","BSDX01",46,0) - ; -"RTN","BSDX01",47,0) - N BSDXERR,BSDXRET,BSDXIEN,BSDXRES,BSDXDEP,BSDXDDR,BSDXDEPN,BSDXRDAT,BSDXRNOD,BSDXI -"RTN","BSDX01",48,0) - N BSDXMGR,BSDXNOD -"RTN","BSDX01",49,0) - K ^BSDXTEMP($J) -"RTN","BSDX01",50,0) - K ^BSDXTMP($J) -"RTN","BSDX01",51,0) - S BSDXY="^BSDXTMP("_$J_")" -"RTN","BSDX01",52,0) - S BSDXI=0 -"RTN","BSDX01",53,0) - S BSDXERR="" -"RTN","BSDX01",54,0) - S ^BSDXTMP($J,BSDXI)="I00020RESOURCE_GROUPID^T00030RESOURCE_GROUP"_$C(30) -"RTN","BSDX01",55,0) - I '+BSDXDUZ S BSDXDUZ=DUZ -"RTN","BSDX01",56,0) - ;Check SECURITY KEY file for BSDXZMGR or XUPROGMODE keys -"RTN","BSDX01",57,0) - S BSDXMGR=$$APSEC("BSDXZMGR",BSDXDUZ) -"RTN","BSDX01",58,0) - ; -"RTN","BSDX01",59,0) - ;User does not have BSDXZMGR or XUPROGMODE keys, so -"RTN","BSDX01",60,0) - ;$O THRU AC XREF OF BSDX RESOURCE USER -"RTN","BSDX01",61,0) - I 'BSDXMGR,$D(^BSDXRSU("AC",BSDXDUZ)) S BSDXIEN=0 F S BSDXIEN=$O(^BSDXRSU("AC",BSDXDUZ,BSDXIEN)) Q:'+BSDXIEN D -"RTN","BSDX01",62,0) - . S BSDXRES=$P(^BSDXRSU(BSDXIEN,0),U) -"RTN","BSDX01",63,0) - . Q:'$D(^BSDXDEPT("AB",BSDXRES)) ; If not part of a group, quit ("AB" is the whole file index for the resource multiple in Group file) -"RTN","BSDX01",64,0) - . ; Q:'$$INDIV2(BSDXRES) ; If not in the same division as user, quit -"RTN","BSDX01",65,0) - . S BSDXRNOD=^BSDXRES(BSDXRES,0) -"RTN","BSDX01",66,0) - . ;QUIT if the resource is inactive -"RTN","BSDX01",67,0) - . Q:$P(BSDXRNOD,U,2)=1 -"RTN","BSDX01",68,0) - . S BSDXDEP=0 F S BSDXDEP=$O(^BSDXDEPT("AB",BSDXRES,BSDXDEP)) Q:'+BSDXDEP D -"RTN","BSDX01",69,0) - . . Q:'$D(^BSDXDEPT(BSDXDEP,0)) -"RTN","BSDX01",70,0) - . . Q:$D(^BSDXTEMP($J,BSDXDEP)) -"RTN","BSDX01",71,0) - . . S ^BSDXTEMP($J,BSDXDEP)="" -"RTN","BSDX01",72,0) - . . S BSDXDEPN=$P(^BSDXDEPT(BSDXDEP,0),U) -"RTN","BSDX01",73,0) - . . S BSDXI=BSDXI+1 -"RTN","BSDX01",74,0) - . . S ^BSDXTMP($J,BSDXI)=BSDXDEP_U_BSDXDEPN_$C(30) -"RTN","BSDX01",75,0) - . . Q -"RTN","BSDX01",76,0) - . Q -"RTN","BSDX01",77,0) - ; -"RTN","BSDX01",78,0) - ;User does have BSDXZMGR or XUPROGMODE keys, so -"RTN","BSDX01",79,0) - ;$O THRU BSDX RESOURCE GROUP file directly -"RTN","BSDX01",80,0) - I BSDXMGR S BSDXIEN=0 F S BSDXIEN=$O(^BSDXDEPT(BSDXIEN)) Q:'+BSDXIEN D -"RTN","BSDX01",81,0) - . Q:'$D(^BSDXDEPT(BSDXIEN,0)) -"RTN","BSDX01",82,0) - . S BSDXNOD=^BSDXDEPT(BSDXIEN,0) -"RTN","BSDX01",83,0) - . S BSDXDEPN=$P(BSDXNOD,U) -"RTN","BSDX01",84,0) - . S BSDXI=BSDXI+1 -"RTN","BSDX01",85,0) - . S ^BSDXTMP($J,BSDXI)=BSDXIEN_U_BSDXDEPN_$C(30) -"RTN","BSDX01",86,0) - . Q -"RTN","BSDX01",87,0) - ; -"RTN","BSDX01",88,0) - S ^BSDXTMP($J,BSDXI+1)=$C(31)_BSDXERR -"RTN","BSDX01",89,0) Q +"RTN","BSDX01",40,0) + ; +"RTN","BSDX01",41,0) +DEPUSR(BSDXY,BSDXDUZ) ;EP +"RTN","BSDX01",42,0) + ;Called by BSDX RESOURCE GROUPS BY USER +"RTN","BSDX01",43,0) + ;Returns ADO Recordset with all ACTIVE resource group names to which user has access +"RTN","BSDX01",44,0) + ;based on entries in BSDX RESOURCE USER file (Say this again for myself: Groups ONLY!!) +"RTN","BSDX01",45,0) + ;If BSDXDUZ=0 then returns all department names for current DUZ +"RTN","BSDX01",46,0) + ;if not linked, always returned. +"RTN","BSDX01",47,0) + ;If user BSDXDUZ possesses the key BSDXZMGR or XUPROGMODE +"RTN","BSDX01",48,0) + ;then ALL resource group names are returned regardless of whether any active resources +"RTN","BSDX01",49,0) + ;are associated with the group or not. +"RTN","BSDX01",50,0) + ; +"RTN","BSDX01",51,0) + ; +"RTN","BSDX01",52,0) + N BSDXERR,BSDXRET,BSDXIEN,BSDXRES,BSDXDEP,BSDXDDR,BSDXDEPN,BSDXRDAT,BSDXRNOD,BSDXI +"RTN","BSDX01",53,0) + N BSDXMGR,BSDXNOD +"RTN","BSDX01",54,0) + K ^BSDXTEMP($J) +"RTN","BSDX01",55,0) + K ^BSDXTMP($J) +"RTN","BSDX01",56,0) + S BSDXY="^BSDXTMP("_$J_")" +"RTN","BSDX01",57,0) + S BSDXI=0 +"RTN","BSDX01",58,0) + S BSDXERR="" +"RTN","BSDX01",59,0) + S ^BSDXTMP($J,BSDXI)="I00020RESOURCE_GROUPID^T00030RESOURCE_GROUP"_$C(30) +"RTN","BSDX01",60,0) + I '+BSDXDUZ S BSDXDUZ=DUZ +"RTN","BSDX01",61,0) + ;Check SECURITY KEY file for BSDXZMGR or XUPROGMODE keys +"RTN","BSDX01",62,0) + S BSDXMGR=$$APSEC("BSDXZMGR",BSDXDUZ) +"RTN","BSDX01",63,0) + ; +"RTN","BSDX01",64,0) + ;User does not have BSDXZMGR or XUPROGMODE keys, so +"RTN","BSDX01",65,0) + ;$O THRU AC XREF OF BSDX RESOURCE USER +"RTN","BSDX01",66,0) + I 'BSDXMGR,$D(^BSDXRSU("AC",BSDXDUZ)) S BSDXIEN=0 F S BSDXIEN=$O(^BSDXRSU("AC",BSDXDUZ,BSDXIEN)) Q:'+BSDXIEN D +"RTN","BSDX01",67,0) + . S BSDXRES=$P(^BSDXRSU(BSDXIEN,0),U) +"RTN","BSDX01",68,0) + . Q:'$D(^BSDXDEPT("AB",BSDXRES)) ; If not part of a group, quit ("AB" is the whole file index for the resource multiple in Group file) +"RTN","BSDX01",69,0) + . ; Q:'$$INDIV2(BSDXRES) ; If not in the same division as user, quit +"RTN","BSDX01",70,0) + . S BSDXRNOD=^BSDXRES(BSDXRES,0) +"RTN","BSDX01",71,0) + . ;QUIT if the resource is inactive +"RTN","BSDX01",72,0) + . Q:$P(BSDXRNOD,U,2)=1 +"RTN","BSDX01",73,0) + . S BSDXDEP=0 F S BSDXDEP=$O(^BSDXDEPT("AB",BSDXRES,BSDXDEP)) Q:'+BSDXDEP D +"RTN","BSDX01",74,0) + . . Q:'$D(^BSDXDEPT(BSDXDEP,0)) +"RTN","BSDX01",75,0) + . . Q:$D(^BSDXTEMP($J,BSDXDEP)) +"RTN","BSDX01",76,0) + . . S ^BSDXTEMP($J,BSDXDEP)="" +"RTN","BSDX01",77,0) + . . S BSDXDEPN=$P(^BSDXDEPT(BSDXDEP,0),U) +"RTN","BSDX01",78,0) + . . S BSDXI=BSDXI+1 +"RTN","BSDX01",79,0) + . . S ^BSDXTMP($J,BSDXI)=BSDXDEP_U_BSDXDEPN_$C(30) +"RTN","BSDX01",80,0) + . . Q +"RTN","BSDX01",81,0) + . Q +"RTN","BSDX01",82,0) + ; +"RTN","BSDX01",83,0) + ;User does have BSDXZMGR or XUPROGMODE keys, so +"RTN","BSDX01",84,0) + ;$O THRU BSDX RESOURCE GROUP file directly +"RTN","BSDX01",85,0) + I BSDXMGR S BSDXIEN=0 F S BSDXIEN=$O(^BSDXDEPT(BSDXIEN)) Q:'+BSDXIEN D +"RTN","BSDX01",86,0) + . Q:'$D(^BSDXDEPT(BSDXIEN,0)) +"RTN","BSDX01",87,0) + . S BSDXNOD=^BSDXDEPT(BSDXIEN,0) +"RTN","BSDX01",88,0) + . S BSDXDEPN=$P(BSDXNOD,U) +"RTN","BSDX01",89,0) + . S BSDXI=BSDXI+1 "RTN","BSDX01",90,0) - ; + . S ^BSDXTMP($J,BSDXI)=BSDXIEN_U_BSDXDEPN_$C(30) "RTN","BSDX01",91,0) - ; + . Q "RTN","BSDX01",92,0) -RESUSRD(BSDXY,BSDXDUZ) ;EP Debugging entry point + ; "RTN","BSDX01",93,0) - ; + S ^BSDXTMP($J,BSDXI+1)=$C(31)_BSDXERR "RTN","BSDX01",94,0) - ; + Q "RTN","BSDX01",95,0) - ;D DEBUG^%Serenji("RESUSR^BSDX01(.BSDXY,BSDXDUZ)") + ; "RTN","BSDX01",96,0) ; "RTN","BSDX01",97,0) - Q +RESUSRD(BSDXY,BSDXDUZ) ;EP Debugging entry point "RTN","BSDX01",98,0) ; "RTN","BSDX01",99,0) -RESUSR(BSDXY,BSDXDUZ) ;EP + ; "RTN","BSDX01",100,0) - ;Returns ADO Recordset with ALL RESOURCE names + ;D DEBUG^%Serenji("RESUSR^BSDX01(.BSDXY,BSDXDUZ)") "RTN","BSDX01",101,0) - ;Inactive RESOURCES are NOT filtered out + ; "RTN","BSDX01",102,0) - ;Called by BSDX RESOURCES BY USER + Q "RTN","BSDX01",103,0) ; "RTN","BSDX01",104,0) - N BSDXERR,BSDXRET,BSDXIEN,BSDXRES,BSDXDEP,BSDXDDR,BSDXDEPN,BSDXRDAT,BSDXRNOD,BSDXI,BSDX,BSDXLTR +RESUSR(BSDXY,BSDXDUZ) ;EP "RTN","BSDX01",105,0) - N BSDXNOS,BSDXCAN + ;Returns ADO Recordset with ALL RESOURCE names "RTN","BSDX01",106,0) - K ^BSDXTMP($J) + ;Inactive RESOURCES are NOT filtered out "RTN","BSDX01",107,0) - S BSDXY="^BSDXTMP("_$J_")" + ;Called by BSDX RESOURCES BY USER "RTN","BSDX01",108,0) - S BSDXI=0 + ; "RTN","BSDX01",109,0) - S BSDXERR="" + N BSDXERR,BSDXRET,BSDXIEN,BSDXRES,BSDXDEP,BSDXDDR,BSDXDEPN,BSDXRDAT,BSDXRNOD,BSDXI,BSDX,BSDXLTR "RTN","BSDX01",110,0) - S ^BSDXTMP($J,BSDXI)="I00010RESOURCEID^T00030RESOURCE_NAME^T00010INACTIVE^I00010TIMESCALE^I00010HOSPITAL_LOCATION_ID^T00030LETTER_TEXT^T00030NO_SHOW_LETTER" + N BSDXNOS,BSDXCAN "RTN","BSDX01",111,0) - S ^BSDXTMP($J,BSDXI)=^(BSDXI)_"^T00030CLINIC_CANCELLATION_LETTER^I00010VIEW^I00010OVERBOOK^I00010MODIFY_SCHEDULE^I00010MODIFY_APPOINTMENTS"_$C(30) + K ^BSDXTMP($J) "RTN","BSDX01",112,0) - I '+BSDXDUZ S BSDXDUZ=DUZ + S BSDXY="^BSDXTMP("_$J_")" "RTN","BSDX01",113,0) - ;$O THRU AC XREF OF BSDX RESOURCE USER + S BSDXI=0 "RTN","BSDX01",114,0) - ;Rmoved these lines in order to just return all resource names + S BSDXERR="" "RTN","BSDX01",115,0) - ;I $D(^BSDXRSU("AC",BSDXDUZ)) S BSDXIEN=0 F S BSDXIEN=$O(^BSDXRSU("AC",BSDXDUZ,BSDXIEN)) Q:'+BSDXIEN D + S ^BSDXTMP($J,BSDXI)="I00010RESOURCEID^T00030RESOURCE_NAME^T00010INACTIVE^I00010TIMESCALE^I00010HOSPITAL_LOCATION_ID^T00030LETTER_TEXT^T00030NO_SHOW_LETTER" "RTN","BSDX01",116,0) - ;. S BSDXRES=$P(^BSDXRSU(BSDXIEN,0),U) + S ^BSDXTMP($J,BSDXI)=^(BSDXI)_"^T00030CLINIC_CANCELLATION_LETTER^I00010VIEW^I00010OVERBOOK^I00010MODIFY_SCHEDULE^I00010MODIFY_APPOINTMENTS"_$C(30) "RTN","BSDX01",117,0) - ; + I '+BSDXDUZ S BSDXDUZ=DUZ "RTN","BSDX01",118,0) - ;$O THRU BSDX RESOURCE File + ;$O THRU AC XREF OF BSDX RESOURCE USER "RTN","BSDX01",119,0) - S BSDXRES=0 F S BSDXRES=$O(^BSDXRES(BSDXRES)) Q:'+BSDXRES D + ;Rmoved these lines in order to just return all resource names "RTN","BSDX01",120,0) - . Q:'$D(^BSDXRES(BSDXRES,0)) + ;I $D(^BSDXRSU("AC",BSDXDUZ)) S BSDXIEN=0 F S BSDXIEN=$O(^BSDXRSU("AC",BSDXDUZ,BSDXIEN)) Q:'+BSDXIEN D "RTN","BSDX01",121,0) - . S BSDXRNOD=^BSDXRES(BSDXRES,0) + ;. S BSDXRES=$P(^BSDXRSU(BSDXIEN,0),U) "RTN","BSDX01",122,0) - . N BSDXSC S BSDXSC=$P(BSDXRNOD,U,4) ; Hospital Location + ; "RTN","BSDX01",123,0) - . ;Q:$P(BSDXRNOD,U,2)=1 ;Inactive resources not filtered + ;$O THRU BSDX RESOURCE File "RTN","BSDX01",124,0) - . ;S BSDXRDAT=$P(BSDXRNOD,U,1,4) + S BSDXRES=0 F S BSDXRES=$O(^BSDXRES(BSDXRES)) Q:'+BSDXRES D "RTN","BSDX01",125,0) - . ;I '$$INDIV(BSDXSC) QUIT ; If not in division, quit + . Q:'$D(^BSDXRES(BSDXRES,0)) "RTN","BSDX01",126,0) - . K BSDXRDAT + . S BSDXRNOD=^BSDXRES(BSDXRES,0) "RTN","BSDX01",127,0) - . F BSDX=1:1:4 S $P(BSDXRDAT,U,BSDX)=$P(BSDXRNOD,U,BSDX) + . N BSDXSC S BSDXSC=$P(BSDXRNOD,U,4) ; Hospital Location "RTN","BSDX01",128,0) - . S BSDXRDAT=BSDXRES_U_BSDXRDAT + . ;Q:$P(BSDXRNOD,U,2)=1 ;Inactive resources not filtered "RTN","BSDX01",129,0) - . ;Get letter text from wp field + . ;S BSDXRDAT=$P(BSDXRNOD,U,1,4) "RTN","BSDX01",130,0) - . S BSDXLTR="" + . ;I '$$INDIV(BSDXSC) QUIT ; If not in division, quit "RTN","BSDX01",131,0) - . I $D(^BSDXRES(BSDXRES,1)) D + . K BSDXRDAT "RTN","BSDX01",132,0) - . . S BSDXIEN=0 + . F BSDX=1:1:4 S $P(BSDXRDAT,U,BSDX)=$P(BSDXRNOD,U,BSDX) "RTN","BSDX01",133,0) - . . F S BSDXIEN=$O(^BSDXRES(BSDXRES,1,BSDXIEN)) Q:'+BSDXIEN D + . S BSDXRDAT=BSDXRES_U_BSDXRDAT "RTN","BSDX01",134,0) - . . . S BSDXLTR=BSDXLTR_$G(^BSDXRES(BSDXRES,1,BSDXIEN,0)) + . ;Get letter text from wp field "RTN","BSDX01",135,0) - . . . S BSDXLTR=BSDXLTR_$C(13)_$C(10) + . S BSDXLTR="" "RTN","BSDX01",136,0) - . S BSDXNOS="" + . I $D(^BSDXRES(BSDXRES,1)) D "RTN","BSDX01",137,0) - . I $D(^BSDXRES(BSDXRES,12)) D + . . S BSDXIEN=0 "RTN","BSDX01",138,0) - . . S BSDXIEN=0 F S BSDXIEN=$O(^BSDXRES(BSDXRES,12,BSDXIEN)) Q:'+BSDXIEN D + . . F S BSDXIEN=$O(^BSDXRES(BSDXRES,1,BSDXIEN)) Q:'+BSDXIEN D "RTN","BSDX01",139,0) - . . . S BSDXNOS=BSDXNOS_$G(^BSDXRES(BSDXRES,12,BSDXIEN,0)) + . . . S BSDXLTR=BSDXLTR_$G(^BSDXRES(BSDXRES,1,BSDXIEN,0)) "RTN","BSDX01",140,0) - . . . S BSDXNOS=BSDXNOS_$C(13)_$C(10) + . . . S BSDXLTR=BSDXLTR_$C(13)_$C(10) "RTN","BSDX01",141,0) - . S BSDXCAN="" + . S BSDXNOS="" "RTN","BSDX01",142,0) - . I $D(^BSDXRES(BSDXRES,13)) D + . I $D(^BSDXRES(BSDXRES,12)) D "RTN","BSDX01",143,0) - . . S BSDXIEN=0 F S BSDXIEN=$O(^BSDXRES(BSDXRES,13,BSDXIEN)) Q:'+BSDXIEN D + . . S BSDXIEN=0 F S BSDXIEN=$O(^BSDXRES(BSDXRES,12,BSDXIEN)) Q:'+BSDXIEN D "RTN","BSDX01",144,0) - . . . S BSDXCAN=BSDXCAN_$G(^BSDXRES(BSDXRES,13,BSDXIEN,0)) + . . . S BSDXNOS=BSDXNOS_$G(^BSDXRES(BSDXRES,12,BSDXIEN,0)) "RTN","BSDX01",145,0) - . . . S BSDXCAN=BSDXCAN_$C(13)_$C(10) + . . . S BSDXNOS=BSDXNOS_$C(13)_$C(10) "RTN","BSDX01",146,0) - . N BSDXACC,BSDXMGR + . S BSDXCAN="" "RTN","BSDX01",147,0) - . S BSDXACC="0^0^0^0" + . I $D(^BSDXRES(BSDXRES,13)) D "RTN","BSDX01",148,0) - . S BSDXMGR=$O(^DIC(19.1,"B","BSDXZMGR",0)) + . . S BSDXIEN=0 F S BSDXIEN=$O(^BSDXRES(BSDXRES,13,BSDXIEN)) Q:'+BSDXIEN D "RTN","BSDX01",149,0) - . I +BSDXMGR,$D(^VA(200,BSDXDUZ,51,BSDXMGR)) S BSDXACC="1^1^1^1" + . . . S BSDXCAN=BSDXCAN_$G(^BSDXRES(BSDXRES,13,BSDXIEN,0)) "RTN","BSDX01",150,0) - . S BSDXMGR=$O(^DIC(19.1,"B","XUPROGMODE",0)) + . . . S BSDXCAN=BSDXCAN_$C(13)_$C(10) "RTN","BSDX01",151,0) - . I +BSDXMGR,$D(^VA(200,BSDXDUZ,51,BSDXMGR)) S BSDXACC="1^1^1^1" + . N BSDXACC,BSDXMGR "RTN","BSDX01",152,0) - . I BSDXACC="0^0^0^0" D + . S BSDXACC="0^0^0^0" "RTN","BSDX01",153,0) - . . N BSDXNOD,BSDXRUID + . S BSDXMGR=$O(^DIC(19.1,"B","BSDXZMGR",0)) "RTN","BSDX01",154,0) - . . S BSDXRUID=0 + . I +BSDXMGR,$D(^VA(200,BSDXDUZ,51,BSDXMGR)) S BSDXACC="1^1^1^1" "RTN","BSDX01",155,0) - . . ;Get entry for this user and resource + . S BSDXMGR=$O(^DIC(19.1,"B","XUPROGMODE",0)) "RTN","BSDX01",156,0) - . . F S BSDXRUID=$O(^BSDXRSU("AC",BSDXDUZ,BSDXRUID)) Q:'+BSDXRUID I $D(^BSDXRSU(BSDXRUID,0)),$P(^(0),U)=BSDXRES Q + . I +BSDXMGR,$D(^VA(200,BSDXDUZ,51,BSDXMGR)) S BSDXACC="1^1^1^1" "RTN","BSDX01",157,0) - . . Q:'+BSDXRUID + . I BSDXACC="0^0^0^0" D "RTN","BSDX01",158,0) - . . S $P(BSDXACC,U)=1 + . . N BSDXNOD,BSDXRUID "RTN","BSDX01",159,0) - . . S BSDXNOD=$G(^BSDXRSU(BSDXRUID,0)) + . . S BSDXRUID=0 "RTN","BSDX01",160,0) - . . S $P(BSDXACC,U,2)=+$P(BSDXNOD,U,3) + . . ;Get entry for this user and resource "RTN","BSDX01",161,0) - . . S $P(BSDXACC,U,3)=+$P(BSDXNOD,U,4) + . . F S BSDXRUID=$O(^BSDXRSU("AC",BSDXDUZ,BSDXRUID)) Q:'+BSDXRUID I $D(^BSDXRSU(BSDXRUID,0)),$P(^(0),U)=BSDXRES Q "RTN","BSDX01",162,0) - . . S $P(BSDXACC,U,4)=+$P(BSDXNOD,U,5) + . . Q:'+BSDXRUID "RTN","BSDX01",163,0) - . S BSDXRDAT=BSDXRDAT_U_BSDXLTR_U_BSDXNOS_U_BSDXCAN_U_BSDXACC + . . S $P(BSDXACC,U)=1 "RTN","BSDX01",164,0) - . S BSDXI=BSDXI+1 + . . S BSDXNOD=$G(^BSDXRSU(BSDXRUID,0)) "RTN","BSDX01",165,0) - . S ^BSDXTMP($J,BSDXI)=BSDXRDAT_$C(30) + . . S $P(BSDXACC,U,2)=+$P(BSDXNOD,U,3) "RTN","BSDX01",166,0) - S ^BSDXTMP($J,BSDXI+1)=$C(31)_BSDXERR + . . S $P(BSDXACC,U,3)=+$P(BSDXNOD,U,4) "RTN","BSDX01",167,0) - Q + . . S $P(BSDXACC,U,4)=+$P(BSDXNOD,U,5) "RTN","BSDX01",168,0) - ; + . S BSDXRDAT=BSDXRDAT_U_BSDXLTR_U_BSDXNOS_U_BSDXCAN_U_BSDXACC "RTN","BSDX01",169,0) -DEPRESD(BSDXY,BSDXDUZ) ;EP Debugging entry point + . S BSDXI=BSDXI+1 "RTN","BSDX01",170,0) - ; + . S ^BSDXTMP($J,BSDXI)=BSDXRDAT_$C(30) "RTN","BSDX01",171,0) - ; + S ^BSDXTMP($J,BSDXI+1)=$C(31)_BSDXERR "RTN","BSDX01",172,0) - ;D DEBUG^%Serenji("DEPRES^BSDX01(.BSDXY,BSDXDUZ)") + Q "RTN","BSDX01",173,0) ; "RTN","BSDX01",174,0) - Q +DEPRESD(BSDXY,BSDXDUZ) ;EP Debugging entry point "RTN","BSDX01",175,0) ; "RTN","BSDX01",176,0) -DEPRES(BSDXY,BSDXDUZ) ;EP + ; "RTN","BSDX01",177,0) - ;Called by BSDX GROUP RESOURCE + ;D DEBUG^%Serenji("DEPRES^BSDX01(.BSDXY,BSDXDUZ)") "RTN","BSDX01",178,0) - ;Returns ADO Recordset with all ACTIVE GROUP/RESOURCE combinations + ; "RTN","BSDX01",179,0) - ;to which user has access based on entries in BSDX RESOURCE USER file -"RTN","BSDX01",180,0) - ;If BSDXDUZ=0 then returns all ACTIVE GROUP/RESOURCE combinations for current DUZ -"RTN","BSDX01",181,0) - ;If user BSDXDUZ possesses the key BSDXZMGR or XUPROGMODE -"RTN","BSDX01",182,0) - ;then ALL ACTIVE resource group names are returned -"RTN","BSDX01",183,0) - ; -"RTN","BSDX01",184,0) - N BSDXERR,BSDXRET,BSDXIEN,BSDXRES,BSDXDEP,BSDXDDR,BSDXDEPN,BSDXRDAT,BSDXRNOD,BSDXI -"RTN","BSDX01",185,0) - N BSDXRESN,BSDXMGR,BSDXRESD,BSDXNOD,BSDXSUBID -"RTN","BSDX01",186,0) - K ^BSDXTEMP($J) -"RTN","BSDX01",187,0) - K ^BSDXTMP($J) -"RTN","BSDX01",188,0) - S BSDXY="^BSDXTMP("_$J_")" -"RTN","BSDX01",189,0) - S BSDXI=0 -"RTN","BSDX01",190,0) - S BSDXERR="" -"RTN","BSDX01",191,0) - S ^BSDXTMP($J,BSDXI)="I00020RESOURCE_GROUPID^T00030RESOURCE_GROUP^I00020RESOURCE_GROUP_ITEMID^T00030RESOURCE_NAME^I00020RESOURCEID"_$C(30) -"RTN","BSDX01",192,0) - I '+BSDXDUZ S BSDXDUZ=DUZ -"RTN","BSDX01",193,0) - ;Check SECURITY KEY file for BSDXZMGR or XUPROGMODE keys -"RTN","BSDX01",194,0) - S BSDXMGR=$$APSEC("BSDXZMGR",BSDXDUZ) -"RTN","BSDX01",195,0) - ; -"RTN","BSDX01",196,0) - ;User does not have BSDXZMGR or XUPROGMODE keys, so -"RTN","BSDX01",197,0) - ;$O THRU AC XREF OF BSDX RESOURCE USER -"RTN","BSDX01",198,0) - I 'BSDXMGR,$D(^BSDXRSU("AC",BSDXDUZ)) S BSDXIEN=0 F S BSDXIEN=$O(^BSDXRSU("AC",BSDXDUZ,BSDXIEN)) Q:'+BSDXIEN D -"RTN","BSDX01",199,0) - . S BSDXRES=$P(^BSDXRSU(BSDXIEN,0),U) -"RTN","BSDX01",200,0) - . Q:'$D(^BSDXDEPT("AB",BSDXRES)) ; Quit if Resource isn't part of any Group -"RTN","BSDX01",201,0) - . ;Q:'$$INDIV2(BSDXRES) ; Quit if Resource isn't in same division as user. -"RTN","BSDX01",202,0) - . S BSDXRNOD=$G(^BSDXRES(BSDXRES,0)) -"RTN","BSDX01",203,0) - . Q:BSDXRNOD="" -"RTN","BSDX01",204,0) - . ;QUIT if the resource is inactive -"RTN","BSDX01",205,0) - . Q:$P(BSDXRNOD,U,2)=1 -"RTN","BSDX01",206,0) - . S BSDXRESN=$P(BSDXRNOD,U) -"RTN","BSDX01",207,0) - . S BSDXDEP=0 F S BSDXDEP=$O(^BSDXDEPT("AB",BSDXRES,BSDXDEP)) Q:'+BSDXDEP D -"RTN","BSDX01",208,0) - . . Q:'$D(^BSDXDEPT(BSDXDEP,0)) -"RTN","BSDX01",209,0) - . . S BSDXDEPN=$P(^BSDXDEPT(BSDXDEP,0),U) -"RTN","BSDX01",210,0) - . . S BSDXSUBID=$O(^BSDXDEPT(BSDXDEP,1,"B",BSDXRES,0)) -"RTN","BSDX01",211,0) - . . S BSDXI=BSDXI+1 -"RTN","BSDX01",212,0) - . . S ^BSDXTMP($J,BSDXI)=BSDXDEP_U_BSDXDEPN_U_BSDXSUBID_U_BSDXRESN_U_BSDXRES_$C(30) -"RTN","BSDX01",213,0) - . Q -"RTN","BSDX01",214,0) - ; -"RTN","BSDX01",215,0) - ;User does have BSDXZMGR or XUPROGMODE keys, so -"RTN","BSDX01",216,0) - ;$O THRU BSDX RESOURCE GROUP file directly -"RTN","BSDX01",217,0) - I BSDXMGR S BSDXIEN=0 F S BSDXIEN=$O(^BSDXDEPT(BSDXIEN)) Q:'+BSDXIEN D -"RTN","BSDX01",218,0) - . Q:'$D(^BSDXDEPT(BSDXIEN,0)) -"RTN","BSDX01",219,0) - . S BSDXNOD=^BSDXDEPT(BSDXIEN,0) -"RTN","BSDX01",220,0) - . S BSDXDEPN=$P(BSDXNOD,U) -"RTN","BSDX01",221,0) - . S BSDXRES=0 F S BSDXRES=$O(^BSDXDEPT(BSDXIEN,1,BSDXRES)) Q:'+BSDXRES D -"RTN","BSDX01",222,0) - . . N BSDXRESD -"RTN","BSDX01",223,0) - . . Q:'$D(^BSDXDEPT(BSDXIEN,1,BSDXRES,0)) ; Quit if zero node is invalid in multiple -"RTN","BSDX01",224,0) - . . S BSDXRESD=$P(^BSDXDEPT(BSDXIEN,1,BSDXRES,0),"^") -"RTN","BSDX01",225,0) - . . Q:'$D(^BSDXRES(BSDXRESD,0)) ; Quit if zero node of resouce file is invalid -"RTN","BSDX01",226,0) - . . ;Q:'$$INDIV2(BSDXRESD) ; Quit if resource is not in the same division -"RTN","BSDX01",227,0) - . . S BSDXRNOD=$G(^BSDXRES(BSDXRESD,0)) -"RTN","BSDX01",228,0) - . . Q:BSDXRNOD="" -"RTN","BSDX01",229,0) - . . ;QUIT if the resource is inactive -"RTN","BSDX01",230,0) - . . Q:$P(BSDXRNOD,U,2)=1 -"RTN","BSDX01",231,0) - . . S BSDXRESN=$P(BSDXRNOD,U) -"RTN","BSDX01",232,0) - . . S BSDXI=BSDXI+1 -"RTN","BSDX01",233,0) - . . S ^BSDXTMP($J,BSDXI)=BSDXIEN_U_BSDXDEPN_U_BSDXRES_U_BSDXRESN_U_BSDXRESD_$C(30) -"RTN","BSDX01",234,0) - . . Q -"RTN","BSDX01",235,0) - . Q -"RTN","BSDX01",236,0) - ; -"RTN","BSDX01",237,0) - S ^BSDXTMP($J,BSDXI+1)=$C(31)_BSDXERR -"RTN","BSDX01",238,0) Q -"RTN","BSDX01",239,0) +"RTN","BSDX01",180,0) ; +"RTN","BSDX01",181,0) +DEPRES(BSDXY,BSDXDUZ) ;EP +"RTN","BSDX01",182,0) + ;Called by BSDX GROUP RESOURCE +"RTN","BSDX01",183,0) + ;Returns ADO Recordset with all ACTIVE GROUP/RESOURCE combinations +"RTN","BSDX01",184,0) + ;to which user has access based on entries in BSDX RESOURCE USER file +"RTN","BSDX01",185,0) + ;If BSDXDUZ=0 then returns all ACTIVE GROUP/RESOURCE combinations for current DUZ +"RTN","BSDX01",186,0) + ;If user BSDXDUZ possesses the key BSDXZMGR or XUPROGMODE +"RTN","BSDX01",187,0) + ;then ALL ACTIVE resource group names are returned +"RTN","BSDX01",188,0) + ; +"RTN","BSDX01",189,0) + N BSDXERR,BSDXRET,BSDXIEN,BSDXRES,BSDXDEP,BSDXDDR,BSDXDEPN,BSDXRDAT,BSDXRNOD,BSDXI +"RTN","BSDX01",190,0) + N BSDXRESN,BSDXMGR,BSDXRESD,BSDXNOD,BSDXSUBID +"RTN","BSDX01",191,0) + K ^BSDXTEMP($J) +"RTN","BSDX01",192,0) + K ^BSDXTMP($J) +"RTN","BSDX01",193,0) + S BSDXY="^BSDXTMP("_$J_")" +"RTN","BSDX01",194,0) + S BSDXI=0 +"RTN","BSDX01",195,0) + S BSDXERR="" +"RTN","BSDX01",196,0) + S ^BSDXTMP($J,BSDXI)="I00020RESOURCE_GROUPID^T00030RESOURCE_GROUP^I00020RESOURCE_GROUP_ITEMID^T00030RESOURCE_NAME^I00020RESOURCEID"_$C(30) +"RTN","BSDX01",197,0) + I '+BSDXDUZ S BSDXDUZ=DUZ +"RTN","BSDX01",198,0) + ;Check SECURITY KEY file for BSDXZMGR or XUPROGMODE keys +"RTN","BSDX01",199,0) + S BSDXMGR=$$APSEC("BSDXZMGR",BSDXDUZ) +"RTN","BSDX01",200,0) + ; +"RTN","BSDX01",201,0) + ;User does not have BSDXZMGR or XUPROGMODE keys, so +"RTN","BSDX01",202,0) + ;$O THRU AC XREF OF BSDX RESOURCE USER +"RTN","BSDX01",203,0) + I 'BSDXMGR,$D(^BSDXRSU("AC",BSDXDUZ)) S BSDXIEN=0 F S BSDXIEN=$O(^BSDXRSU("AC",BSDXDUZ,BSDXIEN)) Q:'+BSDXIEN D +"RTN","BSDX01",204,0) + . S BSDXRES=$P(^BSDXRSU(BSDXIEN,0),U) +"RTN","BSDX01",205,0) + . Q:'$D(^BSDXDEPT("AB",BSDXRES)) ; Quit if Resource isn't part of any Group +"RTN","BSDX01",206,0) + . ;Q:'$$INDIV2(BSDXRES) ; Quit if Resource isn't in same division as user. +"RTN","BSDX01",207,0) + . S BSDXRNOD=$G(^BSDXRES(BSDXRES,0)) +"RTN","BSDX01",208,0) + . Q:BSDXRNOD="" +"RTN","BSDX01",209,0) + . ;QUIT if the resource is inactive +"RTN","BSDX01",210,0) + . Q:$P(BSDXRNOD,U,2)=1 +"RTN","BSDX01",211,0) + . S BSDXRESN=$P(BSDXRNOD,U) +"RTN","BSDX01",212,0) + . S BSDXDEP=0 F S BSDXDEP=$O(^BSDXDEPT("AB",BSDXRES,BSDXDEP)) Q:'+BSDXDEP D +"RTN","BSDX01",213,0) + . . Q:'$D(^BSDXDEPT(BSDXDEP,0)) +"RTN","BSDX01",214,0) + . . S BSDXDEPN=$P(^BSDXDEPT(BSDXDEP,0),U) +"RTN","BSDX01",215,0) + . . S BSDXSUBID=$O(^BSDXDEPT(BSDXDEP,1,"B",BSDXRES,0)) +"RTN","BSDX01",216,0) + . . S BSDXI=BSDXI+1 +"RTN","BSDX01",217,0) + . . S ^BSDXTMP($J,BSDXI)=BSDXDEP_U_BSDXDEPN_U_BSDXSUBID_U_BSDXRESN_U_BSDXRES_$C(30) +"RTN","BSDX01",218,0) + . Q +"RTN","BSDX01",219,0) + ; +"RTN","BSDX01",220,0) + ;User does have BSDXZMGR or XUPROGMODE keys, so +"RTN","BSDX01",221,0) + ;$O THRU BSDX RESOURCE GROUP file directly +"RTN","BSDX01",222,0) + I BSDXMGR S BSDXIEN=0 F S BSDXIEN=$O(^BSDXDEPT(BSDXIEN)) Q:'+BSDXIEN D +"RTN","BSDX01",223,0) + . Q:'$D(^BSDXDEPT(BSDXIEN,0)) +"RTN","BSDX01",224,0) + . S BSDXNOD=^BSDXDEPT(BSDXIEN,0) +"RTN","BSDX01",225,0) + . S BSDXDEPN=$P(BSDXNOD,U) +"RTN","BSDX01",226,0) + . S BSDXRES=0 F S BSDXRES=$O(^BSDXDEPT(BSDXIEN,1,BSDXRES)) Q:'+BSDXRES D +"RTN","BSDX01",227,0) + . . N BSDXRESD +"RTN","BSDX01",228,0) + . . Q:'$D(^BSDXDEPT(BSDXIEN,1,BSDXRES,0)) ; Quit if zero node is invalid in multiple +"RTN","BSDX01",229,0) + . . S BSDXRESD=$P(^BSDXDEPT(BSDXIEN,1,BSDXRES,0),"^") +"RTN","BSDX01",230,0) + . . Q:'$D(^BSDXRES(BSDXRESD,0)) ; Quit if zero node of resouce file is invalid +"RTN","BSDX01",231,0) + . . ;Q:'$$INDIV2(BSDXRESD) ; Quit if resource is not in the same division +"RTN","BSDX01",232,0) + . . S BSDXRNOD=$G(^BSDXRES(BSDXRESD,0)) +"RTN","BSDX01",233,0) + . . Q:BSDXRNOD="" +"RTN","BSDX01",234,0) + . . ;QUIT if the resource is inactive +"RTN","BSDX01",235,0) + . . Q:$P(BSDXRNOD,U,2)=1 +"RTN","BSDX01",236,0) + . . S BSDXRESN=$P(BSDXRNOD,U) +"RTN","BSDX01",237,0) + . . S BSDXI=BSDXI+1 +"RTN","BSDX01",238,0) + . . S ^BSDXTMP($J,BSDXI)=BSDXIEN_U_BSDXDEPN_U_BSDXRES_U_BSDXRESN_U_BSDXRESD_$C(30) +"RTN","BSDX01",239,0) + . . Q "RTN","BSDX01",240,0) -APSEC(BSDXKEY,BSDXDUZ) ;EP - Return TRUE (1) if user has keys BSDXKEY or XUPROGMODE, otherwise, returns FALSE (0) + . Q "RTN","BSDX01",241,0) ; "RTN","BSDX01",242,0) - N BSDXIEN,BSDXPROG,BSDXPKEY + S ^BSDXTMP($J,BSDXI+1)=$C(31)_BSDXERR "RTN","BSDX01",243,0) - I '$G(BSDXDUZ) Q 0 + Q "RTN","BSDX01",244,0) ; "RTN","BSDX01",245,0) - ;Test for programmer mode key +APSEC(BSDXKEY,BSDXDUZ) ;EP - Return TRUE (1) if user has keys BSDXKEY or XUPROGMODE, otherwise, returns FALSE (0) "RTN","BSDX01",246,0) - S BSDXPROG=0 + ; "RTN","BSDX01",247,0) - I $D(^DIC(19.1,"B","XUPROGMODE")) D + N BSDXIEN,BSDXPROG,BSDXPKEY "RTN","BSDX01",248,0) - . S BSDXPKEY=$O(^DIC(19.1,"B","XUPROGMODE",0)) + I '$G(BSDXDUZ) Q 0 "RTN","BSDX01",249,0) - . I '+BSDXPKEY Q + ; "RTN","BSDX01",250,0) - . I '$D(^VA(200,BSDXDUZ,51,BSDXPKEY,0)) Q + ;Test for programmer mode key "RTN","BSDX01",251,0) - . S BSDXPROG=1 + S BSDXPROG=0 "RTN","BSDX01",252,0) - I BSDXPROG Q 1 + I $D(^DIC(19.1,"B","XUPROGMODE")) D "RTN","BSDX01",253,0) - ; + . S BSDXPKEY=$O(^DIC(19.1,"B","XUPROGMODE",0)) "RTN","BSDX01",254,0) - I BSDXKEY="" Q 0 + . I '+BSDXPKEY Q "RTN","BSDX01",255,0) - I '$D(^DIC(19.1,"B",BSDXKEY)) Q 0 + . I '$D(^VA(200,BSDXDUZ,51,BSDXPKEY,0)) Q "RTN","BSDX01",256,0) - S BSDXIEN=$O(^DIC(19.1,"B",BSDXKEY,0)) + . S BSDXPROG=1 "RTN","BSDX01",257,0) - I '+BSDXIEN Q 0 + I BSDXPROG Q 1 "RTN","BSDX01",258,0) - I '$D(^VA(200,BSDXDUZ,51,BSDXIEN,0)) Q 0 + ; "RTN","BSDX01",259,0) - Q 1 + I BSDXKEY="" Q 0 "RTN","BSDX01",260,0) -SP(BSDXY,PARAM,YESNO) ; Save Param at User Level - EP + I '$D(^DIC(19.1,"B",BSDXKEY)) Q 0 "RTN","BSDX01",261,0) - ; Called by RPC: BSDX SET PARAM + S BSDXIEN=$O(^DIC(19.1,"B",BSDXKEY,0)) "RTN","BSDX01",262,0) - ; Input: + I '+BSDXIEN Q 0 "RTN","BSDX01",263,0) - ; - Param: Name of Parameter (prog name of course) + I '$D(^VA(200,BSDXDUZ,51,BSDXIEN,0)) Q 0 "RTN","BSDX01",264,0) - ; - Yes/No: 1 or 0 + Q 1 "RTN","BSDX01",265,0) - ; Output: Error Code as string; 0 is good +SP(BSDXY,PARAM,YESNO) ; Save Param at User Level - EP "RTN","BSDX01",266,0) - ; + ; Called by RPC: BSDX SET PARAM "RTN","BSDX01",267,0) - ; Security Protection + ; Input: "RTN","BSDX01",268,0) - IF $EXTRACT(PARAM,1,4)'="BSDX" S BSDXY="-1^BSDX Params only allowed" QUIT + ; - Param: Name of Parameter (prog name of course) "RTN","BSDX01",269,0) - ; + ; - Yes/No: 1 or 0 "RTN","BSDX01",270,0) - N ERROR + ; Output: Error Code as string; 0 is good "RTN","BSDX01",271,0) - D PUT^XPAR("USR",PARAM,1,YESNO,.ERROR) + ; "RTN","BSDX01",272,0) - S BSDXY=$G(ERROR) + ; Security Protection "RTN","BSDX01",273,0) - QUIT + IF $EXTRACT(PARAM,1,4)'="BSDX" S BSDXY="-1^BSDX Params only allowed" QUIT "RTN","BSDX01",274,0) ; "RTN","BSDX01",275,0) -GP(BSDXY,PARAM) ; Get Param - EP + N ERROR "RTN","BSDX01",276,0) - ; Called by RPC: BSDX GET PARAM + D PUT^XPAR("USR",PARAM,1,YESNO,.ERROR) "RTN","BSDX01",277,0) - ; Input: Name of Parameter + S BSDXY=$G(ERROR) "RTN","BSDX01",278,0) - ; Output: Value of parameter: 0 or 1, for now. + QUIT "RTN","BSDX01",279,0) ; "RTN","BSDX01",280,0) - S BSDXY=$$GET^XPAR("USR^LOC^SYS^PKG",PARAM,1,"I") +GP(BSDXY,PARAM) ; Get Param - EP "RTN","BSDX01",281,0) - QUIT + ; Called by RPC: BSDX GET PARAM "RTN","BSDX01",282,0) - ; + ; Input: Name of Parameter "RTN","BSDX01",283,0) -INDIV(BSDXSC) ; PEP - Is ^SC clinic in the same DUZ(2) as user? + ; Output: Value of parameter: 0 or 1, for now. "RTN","BSDX01",284,0) - ; Input: BSDXSC - Hospital Location IEN + ; "RTN","BSDX01",285,0) - ; Output: True or False + S BSDXY=$$GET^XPAR("USR^LOC^SYS^PKG",PARAM,1,"I") "RTN","BSDX01",286,0) - I '+BSDXSC QUIT 1 ;If not tied to clinic, yes + QUIT "RTN","BSDX01",287,0) - I '$D(^SC(BSDXSC,0)) QUIT 1 ; If Clinic does not exist, yes + ; "RTN","BSDX01",288,0) - ; Jump to Division:Medical Center Division:Inst File Pointer for +INDIV(BSDXSC) ; PEP - Is ^SC clinic in the same DUZ(2) as user? "RTN","BSDX01",289,0) - ; Institution IEN (and get its internal value) + ; Input: BSDXSC - Hospital Location IEN "RTN","BSDX01",290,0) - N DIV S DIV=$$GET1^DIQ(44,BSDXSC_",","3.5:.07","I") + ; Output: True or False "RTN","BSDX01",291,0) - I DIV="" Q 1 ; If clinic has no division, consider it avial to user. + I '+BSDXSC QUIT 1 ;If not tied to clinic, yes "RTN","BSDX01",292,0) - I DIV=DUZ(2) Q 1 ; If same, then User is in same Div as Clinic + I '$D(^SC(BSDXSC,0)) QUIT 1 ; If Clinic does not exist, yes "RTN","BSDX01",293,0) - E Q 0 ; Otherwise, no + ; Jump to Division:Medical Center Division:Inst File Pointer for "RTN","BSDX01",294,0) - QUIT + ; Institution IEN (and get its internal value) "RTN","BSDX01",295,0) -INDIV2(BSDXRES) ; PEP - Is Resource in the same DUZ(2) as user? + N DIV S DIV=$$GET1^DIQ(44,BSDXSC_",","3.5:.07","I") "RTN","BSDX01",296,0) - ; Input BSDXRES - BSDX RESOURCE IEN + I DIV="" Q 1 ; If clinic has no division, consider it avial to user. "RTN","BSDX01",297,0) - ; Output: True of False + I DIV=DUZ(2) Q 1 ; If same, then User is in same Div as Clinic "RTN","BSDX01",298,0) - Q $$INDIV($P($G(^BSDXRES(BSDXRES,0)),U,4)) ; Extract Hospital Location and send to $$INDIV + E Q 0 ; Otherwise, no "RTN","BSDX01",299,0) -UnitTestINDIV +INDIV2(BSDXRES) ; PEP - Is Resource in the same DUZ(2) as user? "RTN","BSDX01",300,0) - W "Testing if they are the same",! + ; Input BSDXRES - BSDX RESOURCE IEN "RTN","BSDX01",301,0) - S DUZ(2)=67 + ; Output: True of False "RTN","BSDX01",302,0) - I '$$INDIV(1) W "ERROR",! + Q $$INDIV($P($G(^BSDXRES(BSDXRES,0)),U,4)) ; Extract Hospital Location and send to $$INDIV "RTN","BSDX01",303,0) - I '$$INDIV(2) W "ERROR",! +UTINDIV ; Unit Test $$INDIV "RTN","BSDX01",304,0) - W "Testing if Div not defined in 44, should be true",! + W "Testing if they are the same",! "RTN","BSDX01",305,0) - I '$$INDIV(3) W "ERROR",! + S DUZ(2)=67 "RTN","BSDX01",306,0) - W "Testing empty string. Should be true",! + I '$$INDIV(1) W "ERROR",! "RTN","BSDX01",307,0) - I '$$INDIV("") W "ERROR",! + I '$$INDIV(2) W "ERROR",! "RTN","BSDX01",308,0) - W "Testing if they are different",! + W "Testing if Div not defined in 44, should be true",! "RTN","BSDX01",309,0) - S DUZ(2)=899 + I '$$INDIV(3) W "ERROR",! "RTN","BSDX01",310,0) - I $$INDIV(1) W "ERROR",! + W "Testing empty string. Should be true",! "RTN","BSDX01",311,0) - I $$INDIV(2) W "ERROR",! + I '$$INDIV("") W "ERROR",! "RTN","BSDX01",312,0) - QUIT + W "Testing if they are different",! "RTN","BSDX01",313,0) -UnitTestINDIV2 + S DUZ(2)=899 "RTN","BSDX01",314,0) - W "Testing if they are the same",! + I $$INDIV(1) W "ERROR",! "RTN","BSDX01",315,0) - S DUZ(2)=69 + I $$INDIV(2) W "ERROR",! "RTN","BSDX01",316,0) - I $$INDIV2(22)'=0 W "ERROR",! + QUIT "RTN","BSDX01",317,0) - I $$INDIV2(25)'=1 W "ERROR",! +UTINDIV2 ; Unit Test $$INDIV2 "RTN","BSDX01",318,0) - I $$INDIV2(26)'=1 W "ERROR",! + W "Testing if they are the same",! "RTN","BSDX01",319,0) - I $$INDIV2(27)'=1 W "ERROR",! + S DUZ(2)=69 "RTN","BSDX01",320,0) - QUIT + I $$INDIV2(22)'=0 W "ERROR",! "RTN","BSDX01",321,0) - ; + I $$INDIV2(25)'=1 W "ERROR",! "RTN","BSDX01",322,0) -GETRADEX(BSDXY,DFN,SCIEN) ; Get All Pending and On Hold Radiology Exams for Patient; RPC EP; UJO/SMH new in v 1.6 + I $$INDIV2(26)'=1 W "ERROR",! "RTN","BSDX01",323,0) - ; RPC: BSDX GET RAD EXAM FOR PT; Return: Global Array + I $$INDIV2(27)'=1 W "ERROR",! "RTN","BSDX01",324,0) - ; + QUIT "RTN","BSDX01",325,0) - ; Input: DFN - you should know; SCIEN - IEN of Hospital Location + ; "RTN","BSDX01",326,0) - ; Output: ADO Datatable with the following columns: +GETRADEX(BSDXY,DFN,SCIEN) ; Get All Pending and On Hold Radiology Exams for Patient; RPC EP; UJO/SMH new in v 1.6 "RTN","BSDX01",327,0) - ; - BMXIEN: Radiology Exam IEN in file 75.1 (RAD/NUC MED ORDERS) + ; RPC: BSDX GET RAD EXAM FOR PT; Return: Global Array "RTN","BSDX01",328,0) - ; - STATUS: Pending Or Hold Status + ; "RTN","BSDX01",329,0) - ; - PROCEDURE: Text Procedure Name + ; Input: DFN - you should know; SCIEN - IEN of Hospital Location "RTN","BSDX01",330,0) - ; - REQUEST_DATE: Date Procedure was requested + ; Output: ADO Datatable with the following columns: "RTN","BSDX01",331,0) - ; + ; - BMXIEN: Radiology Exam IEN in file 75.1 (RAD/NUC MED ORDERS) "RTN","BSDX01",332,0) - ; Error Processing: Silent failure. + ; - STATUS: Pending Or Hold Status "RTN","BSDX01",333,0) - ; + ; - PROCEDURE: Text Procedure Name "RTN","BSDX01",334,0) - S BSDXY=$NA(^BMXTEMP($J)) + ; - REQUEST_DATE: Date Procedure was requested "RTN","BSDX01",335,0) - K @BSDXY + ; "RTN","BSDX01",336,0) - ; + ; Error Processing: Silent failure. "RTN","BSDX01",337,0) - N BSDXI S BSDXI=0 + ; "RTN","BSDX01",338,0) - S @BSDXY@(BSDXI)="I00015BMXIEN^T00015STATUS^T00100PROCEDURE^D00030REQUEST_DATE"_$C(30) + S BSDXY=$NA(^BMXTEMP($J)) "RTN","BSDX01",339,0) - ; + K @BSDXY "RTN","BSDX01",340,0) - N BSDXRLIEN S BSDXRLIEN=$ORDER(^RA(79.1,"B",SCIEN,"")) ; IEN of HL in file 79.1, to get Radiology Imaging IEN + ; "RTN","BSDX01",341,0) - I 'BSDXRLIEN GOTO END + N BSDXI S BSDXI=0 "RTN","BSDX01",342,0) - ; + S @BSDXY@(BSDXI)="I00015BMXIEN^T00015STATUS^T00100PROCEDURE^D00030REQUEST_DATE"_$C(30) "RTN","BSDX01",343,0) - N BSDXOUT,BSDXERR ; Out, Error -"RTN","BSDX01",344,0) ; +"RTN","BSDX01",344,0) + N BSDXRLIEN S BSDXRLIEN=$ORDER(^RA(79.1,"B",SCIEN,"")) ; IEN of HL in file 79.1, to get Radiology Imaging IEN "RTN","BSDX01",345,0) - ; File 75.1 = RAD/NUC MED ORDERS + I 'BSDXRLIEN GOTO END "RTN","BSDX01",346,0) - ; Fields 5 = Request Status; 2 = Procedure; 16 = Requested Entered Date Time + ; "RTN","BSDX01",347,0) - ; Filter Field: First piece is DFN, 5th piece is 3 or 5 (Status of Pending Or Hold); 20th piece is Radiology Location requested + N BSDXOUT,BSDXERR ; Out, Error "RTN","BSDX01",348,0) ; "RTN","BSDX01",349,0) - ;;EHS/MKH,BAH;;UJO*1.0*143;;30/09/2012;; Update [Fix the performance issue in SchedGUI] + ; File 75.1 = RAD/NUC MED ORDERS "RTN","BSDX01",350,0) - ; START OF CODE CHANGES FOR [UJO*1.0*143] + ; Fields 5 = Request Status; 2 = Procedure; 16 = Requested Entered Date Time "RTN","BSDX01",351,0) - ; Commented old Line + ; Filter Field: First piece is DFN, 5th piece is 3 or 5 (Status of Pending Or Hold); 20th piece is Radiology Location requested "RTN","BSDX01",352,0) - ;D LIST^DIC(75.1,"","@;5;2;16","P","","","","B","I $P(^(0),U)=DFN&(35[$P(^(0),U,5))&($P(^(0),U,20)=BSDXRLIEN)","","BSDXOUT","BSDXERR") + ;;EHS/MKH,BAH;;BSDX 1.7;;30/09/2012;; Update [Fix the performance issue in SchedGUI] "RTN","BSDX01",353,0) - DO FIND^DIC(75.1,"","@;5;2;16","QP",DFN,"","B","IF 35[$PIECE(^(0),U,5)&($PIECE(^(0),U,20)=BSDXRLIEN)","","BSDXOUT","BSDXERR") + ; START OF CODE CHANGES FOR [BSDX 1.7] "RTN","BSDX01",354,0) - ; END OF CODE CHANGES FOR [UJO*1.0*143] + ; Commented old Line "RTN","BSDX01",355,0) - ; + ;D LIST^DIC(75.1,"","@;5;2;16","P","","","","B","I $P(^(0),U)=DFN&(35[$P(^(0),U,5))&($P(^(0),U,20)=BSDXRLIEN)","","BSDXOUT","BSDXE>>RR") "RTN","BSDX01",356,0) - IF $DATA(BSDXERR) GOTO END + DO FIND^DIC(75.1,"","@;5;2;16","QP",DFN,"","B","IF 35[$PIECE(^(0),U,5)&($PIECE(^(0),U,20)=BSDXRLIEN)","","BSDXOUT","BSDXERR") "RTN","BSDX01",357,0) - ; + ; END OF CODE CHANGES FOR [BSDX 1.7] "RTN","BSDX01",358,0) - I +BSDXOUT("DILIST",0)>0 FOR BSDXI=1:1:+BSDXOUT("DILIST",0) DO ; if we have data, fetch the data in each row and store it in the return variable -"RTN","BSDX01",359,0) - . N BMXIEN,BMXSTAUS,BMXPROC,BMXDATE ; Proc IEN, Proc Status, Proc Name -"RTN","BSDX01",360,0) - . S BMXIEN=$P(BSDXOUT("DILIST",BSDXI,0),U) ; IEN -"RTN","BSDX01",361,0) - . S BMXSTATUS=$P(BSDXOUT("DILIST",BSDXI,0),U,2) ; Status -"RTN","BSDX01",362,0) - . S BMXPROC=$P(BSDXOUT("DILIST",BSDXI,0),U,3) ; Procedure Name -"RTN","BSDX01",363,0) - . S BMXDATE=$TR($P(BSDXOUT("DILIST",BSDXI,0),U,4),"@"," ") ; Request Entered Date Time -"RTN","BSDX01",364,0) - . S @BSDXY@(BSDXI)=BMXIEN_U_BMXSTATUS_U_BMXPROC_U_BMXDATE_$C(30) -"RTN","BSDX01",365,0) -END ; Errors Jump Here... -"RTN","BSDX01",366,0) - S @BSDXY@(BSDXI+1)=$C(31) -"RTN","BSDX01",367,0) - QUIT -"RTN","BSDX01",368,0) ; +"RTN","BSDX01",359,0) + IF $DATA(BSDXERR) GOTO END +"RTN","BSDX01",360,0) + ; +"RTN","BSDX01",361,0) + I +BSDXOUT("DILIST",0)>0 FOR BSDXI=1:1:+BSDXOUT("DILIST",0) DO ; if we have data, fetch the data in each row and store it in the return variable +"RTN","BSDX01",362,0) + . N BMXIEN,BMXSTAUS,BMXPROC,BMXDATE ; Proc IEN, Proc Status, Proc Name +"RTN","BSDX01",363,0) + . S BMXIEN=$P(BSDXOUT("DILIST",BSDXI,0),U) ; IEN +"RTN","BSDX01",364,0) + . S BMXSTATUS=$P(BSDXOUT("DILIST",BSDXI,0),U,2) ; Status +"RTN","BSDX01",365,0) + . S BMXPROC=$P(BSDXOUT("DILIST",BSDXI,0),U,3) ; Procedure Name +"RTN","BSDX01",366,0) + . S BMXDATE=$TR($P(BSDXOUT("DILIST",BSDXI,0),U,4),"@"," ") ; Request Entered Date Time +"RTN","BSDX01",367,0) + . S @BSDXY@(BSDXI)=BMXIEN_U_BMXSTATUS_U_BMXPROC_U_BMXDATE_$C(30) +"RTN","BSDX01",368,0) +END ; Errors Jump Here... "RTN","BSDX01",369,0) -SCHRAEX(BSDXY,RADFN,RAOIFN,RAOSCH) ; Schedule a Radiology Exam; RPC EP; UJO/SMH new in v 1.6 + S @BSDXY@(BSDXI+1)=$C(31) "RTN","BSDX01",370,0) - ; RPC: BSDX SCHEDULE RAD EXAM; Return: Single Value + QUIT "RTN","BSDX01",371,0) ; "RTN","BSDX01",372,0) - ; Input: +SCHRAEX(BSDXY,RADFN,RAOIFN,RAOSCH) ; Schedule a Radiology Exam; RPC EP; UJO/SMH new in v 1.6 "RTN","BSDX01",373,0) - ; - RADFN -> DFN + ; RPC: BSDX SCHEDULE RAD EXAM; Return: Single Value "RTN","BSDX01",374,0) - ; - RAOIFN -> Radiology Order IEN in file 75.1 + ; "RTN","BSDX01",375,0) - ; - RAOSCH -> Scheduled Time for Exam + ; Input: "RTN","BSDX01",376,0) - ; Output: Always "1" + ; - RADFN -> DFN "RTN","BSDX01",377,0) - ; + ; - RAOIFN -> Radiology Order IEN in file 75.1 "RTN","BSDX01",378,0) - S RAOSCH=+RAOSCH ; Strip the trailing zeros from the Fileman Date produced by C# + ; - RAOSCH -> Scheduled Time for Exam "RTN","BSDX01",379,0) - N RAOSTS S RAOSTS=8 ; Status of Scheduled + ; Output: Always "1" "RTN","BSDX01",380,0) - D ^RAORDU ; API in Rad expects RADFN, RAOIFN, RAOSCH, and RAOSTS -"RTN","BSDX01",381,0) - S BSDXY=1 ; Success -"RTN","BSDX01",382,0) - QUIT -"RTN","BSDX01",383,0) ; +"RTN","BSDX01",381,0) + S RAOSCH=+RAOSCH ; Strip the trailing zeros from the Fileman Date produced by C# +"RTN","BSDX01",382,0) + N RAOSTS S RAOSTS=8 ; Status of Scheduled +"RTN","BSDX01",383,0) + D ^RAORDU ; API in Rad expects RADFN, RAOIFN, RAOSCH, and RAOSTS "RTN","BSDX01",384,0) -HOLDRAEX(BSDXY,RADFN,RAOIFN) ; Hold a Radiology Exam; RPC EP; UJO/SMH new in v 1.6 + S BSDXY=1 ; Success "RTN","BSDX01",385,0) - ; RPC: BSDX HOLD RAD EXAM; Return: Single Value + QUIT "RTN","BSDX01",386,0) ; "RTN","BSDX01",387,0) - ; Input: +HOLDRAEX(BSDXY,RADFN,RAOIFN) ; Hold a Radiology Exam; RPC EP; UJO/SMH new in v 1.6 "RTN","BSDX01",388,0) - ; - RADFN -> DFN + ; RPC: BSDX HOLD RAD EXAM; Return: Single Value "RTN","BSDX01",389,0) - ; - RAOIFN -> Radiology Order IEN in file 75.1 + ; "RTN","BSDX01",390,0) - ; Output: 1 OR 0 for success or failure. + ; Input: "RTN","BSDX01",391,0) - ; Can we hold? + ; - RADFN -> DFN "RTN","BSDX01",392,0) - N CANHOLD + ; - RAOIFN -> Radiology Order IEN in file 75.1 "RTN","BSDX01",393,0) - D CANHOLD(.CANHOLD,RAOIFN) + ; Output: 1 OR 0 for success or failure. "RTN","BSDX01",394,0) - I 'CANHOLD S BSDXY=0 QUIT + ; Can we hold? "RTN","BSDX01",395,0) - ; + N CANHOLD "RTN","BSDX01",396,0) - N RAOSTS S RAOSTS=3 ; Status of Hold + D CANHOLD(.CANHOLD,RAOIFN) "RTN","BSDX01",397,0) - N RAOREA ; Reason, stored in file 75.2 + I 'CANHOLD S BSDXY=0 QUIT "RTN","BSDX01",398,0) - I $D(^RA(75.2,100)) S RAOREA=100 ; Custom site Reason -"RTN","BSDX01",399,0) - E I $D(^RA(75.2,20)) S RAOREA=20 ; Reason: Exam Cancelled -"RTN","BSDX01",400,0) - E ; Else is empty. I won't set RAOREA at all. -"RTN","BSDX01",401,0) - D ^RAORDU -"RTN","BSDX01",402,0) - S BSDXY=1 ; Success -"RTN","BSDX01",403,0) - QUIT -"RTN","BSDX01",404,0) ; +"RTN","BSDX01",399,0) + N RAOSTS S RAOSTS=3 ; Status of Hold +"RTN","BSDX01",400,0) + N RAOREA ; Reason, stored in file 75.2 +"RTN","BSDX01",401,0) + I $D(^RA(75.2,100)) S RAOREA=100 ; Custom site Reason +"RTN","BSDX01",402,0) + E I $D(^RA(75.2,20)) S RAOREA=20 ; Reason: Exam Cancelled +"RTN","BSDX01",403,0) + E ; Else is empty. I won't set RAOREA at all. +"RTN","BSDX01",404,0) + D ^RAORDU "RTN","BSDX01",405,0) -CANHOLD(BSDXY,RAOIFN) ; Can we hold this Exam? RPC EP; UJO/SMH new in 1.6 + S BSDXY=1 ; Success "RTN","BSDX01",406,0) - ; RPC: BSDX CAN HOLD RAD EXAM; Return: Single Value + QUIT "RTN","BSDX01",407,0) ; "RTN","BSDX01",408,0) - ; Input: +CANHOLD(BSDXY,RAOIFN) ; Can we hold this Exam? RPC EP; UJO/SMH new in 1.6 "RTN","BSDX01",409,0) - ; - RAOIFN -> Radiology Order IEN in file 75.1 + ; RPC: BSDX CAN HOLD RAD EXAM; Return: Single Value "RTN","BSDX01",410,0) - ; Output: 0 or 1 for false or true -"RTN","BSDX01",411,0) ; +"RTN","BSDX01",411,0) + ; Input: "RTN","BSDX01",412,0) - N STATUS S STATUS=$$GET1^DIQ(75.1,RAOIFN,"REQUEST STATUS","I") + ; - RAOIFN -> Radiology Order IEN in file 75.1 "RTN","BSDX01",413,0) - ; 1 = discontinued; 2 = Complete; 6 = Active + ; Output: 0 or 1 for false or true "RTN","BSDX01",414,0) - ; if any one of these, cannot hold exam; otherwise, we can + ; "RTN","BSDX01",415,0) - I 126[STATUS S BSDXY=0 QUIT + N STATUS S STATUS=$$GET1^DIQ(75.1,RAOIFN,"REQUEST STATUS","I") "RTN","BSDX01",416,0) - ELSE S BSDXY=1 QUIT + ; 1 = discontinued; 2 = Complete; 6 = Active "RTN","BSDX01",417,0) + ; if any one of these, cannot hold exam; otherwise, we can +"RTN","BSDX01",418,0) + I 126[STATUS S BSDXY=0 QUIT +"RTN","BSDX01",419,0) + ELSE S BSDXY=1 QUIT +"RTN","BSDX01",420,0) QUIT "RTN","BSDX02") -0^2^B20526178 +0^2^B19587814 "RTN","BSDX02",1,0) -BSDX02 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 5/16/11 2:47pm +BSDX02 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 7/6/12 11:09am "RTN","BSDX02",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX02",3,0) ;Licensed under LGPL "RTN","BSDX02",4,0) @@ -2575,187 +2583,189 @@ CRSCH(BSDXY,BSDXRES,BSDXSTART,BSDXEND,BSDXWKIN) ; "RTN","BSDX02",31,0) S BSDXY="^BSDXTMP("_$J_")" "RTN","BSDX02",32,0) - S ^BSDXTMP($J,0)="I00020APPOINTMENTID^D00030START_TIME^D00030END_TIME^D00030CHECKIN^D00030AUXTIME^I00020PATIENTID^T00030PATIENTNAME^T00030RESOURCENAME^I00005NOSHOW^T00020HRN^I00005ACCESSTYPEID^I00005WALKIN^T00250NOTE^T00006SEX^T00040PID^D00030DOB^I00020RADIOLOGY_EXAM"_$C(30) + S ^BSDXTMP($J,0)="I00020APPOINTMENTID^D00030START_TIME^D00030END_TIME^D00030CHECKIN^D00030AUXTIME^I00020PATIENTID^T00030PATIENTNAME^T00030RESOURCENAME" "RTN","BSDX02",33,0) - D ^XBKVAR S X="ETRAP^BSDX02",@^%ZOSF("TRAP") + S ^(0)=^(0)_"^I00005NOSHOW^T00020HRN^I00005ACCESSTYPEID^I00005WALKIN^T00250NOTE^T00006SEX^T00040PID^D00030DOB^I00020RADIOLOGY_EXAM"_$C(30) "RTN","BSDX02",34,0) - ; + D ^XBKVAR S X="ETRAP^BSDX02",@^%ZOSF("TRAP") "RTN","BSDX02",35,0) - ; S %DT="T",X=BSDXSTART D ^%DT S BSDXSTART=Y + ; "RTN","BSDX02",36,0) - ; I BSDXSTART=-1 S ^BSDXTMP($J,1)=$C(31) Q + ; S %DT="T",X=BSDXSTART D ^%DT S BSDXSTART=Y "RTN","BSDX02",37,0) - ; S %DT="T",X=BSDXEND D ^%DT S BSDXEND=Y + ; I BSDXSTART=-1 S ^BSDXTMP($J,1)=$C(31) Q "RTN","BSDX02",38,0) - ; I BSDXEND=-1 S ^BSDXTMP($J,1)=$C(31) Q + ; S %DT="T",X=BSDXEND D ^%DT S BSDXEND=Y "RTN","BSDX02",39,0) - ; + ; I BSDXEND=-1 S ^BSDXTMP($J,1)=$C(31) Q "RTN","BSDX02",40,0) - S BSDXI=0 + ; "RTN","BSDX02",41,0) - D STRES + S BSDXI=0 "RTN","BSDX02",42,0) - ; + D STRES "RTN","BSDX02",43,0) - S BSDXI=BSDXI+1 + ; "RTN","BSDX02",44,0) - S ^BSDXTMP($J,BSDXI)=$C(31) + S BSDXI=BSDXI+1 "RTN","BSDX02",45,0) - Q -"RTN","BSDX02",46,0) - ; -"RTN","BSDX02",47,0) -STRES ; -"RTN","BSDX02",48,0) - F BSDXJ=1:1:$L(BSDXRES,"|") S BSDXRESN=$P(BSDXRES,"|",BSDXJ) D -"RTN","BSDX02",49,0) - . Q:BSDXRESN="" -"RTN","BSDX02",50,0) - . Q:'$D(^BSDXRES("B",BSDXRESN)) -"RTN","BSDX02",51,0) - . S BSDXRESD=$O(^BSDXRES("B",BSDXRESN,0)) -"RTN","BSDX02",52,0) - . Q:'+BSDXRESD -"RTN","BSDX02",53,0) - . Q:'$D(^BSDXAPPT("ARSRC",BSDXRESD)) -"RTN","BSDX02",54,0) - . S BSDXS=BSDXSTART-.0001 -"RTN","BSDX02",55,0) - . F S BSDXS=$O(^BSDXAPPT("ARSRC",BSDXRESD,BSDXS)) Q:'+BSDXS Q:BSDXS>BSDXEND D -"RTN","BSDX02",56,0) - . . S BSDXAD=0 F S BSDXAD=$O(^BSDXAPPT("ARSRC",BSDXRESD,BSDXS,BSDXAD)) Q:'+BSDXAD D STCOMM(BSDXAD,BSDXRESN) -"RTN","BSDX02",57,0) - Q -"RTN","BSDX02",58,0) - ; -"RTN","BSDX02",59,0) -STCOMM(BSDXAD,BSDXRESN) ; -"RTN","BSDX02",60,0) - ;BSDXAD is the appointment IEN -"RTN","BSDX02",61,0) - N BSDXC,BSDXQ,BSDXZ,BSDXSUBC,BSDXHRN,BSDXPATD,BSDXATID,BSDXISWK -"RTN","BSDX02",62,0) - Q:'$D(^BSDXAPPT(BSDXAD,0)) -"RTN","BSDX02",63,0) - S BSDXNOD=^BSDXAPPT(BSDXAD,0) -"RTN","BSDX02",64,0) - Q:$P(BSDXNOD,U,12)]"" ;CANCELLED -"RTN","BSDX02",65,0) - S BSDXISWK=0 -"RTN","BSDX02",66,0) - S:$P(BSDXNOD,U,13)="y" BSDXISWK=1 -"RTN","BSDX02",67,0) - I +$G(BSDXWKIN) Q:BSDXISWK ;Don't return walkins if appt is WALKIN and BSDXWKIN is 1 -"RTN","BSDX02",68,0) - S BSDXZ=BSDXAD_"^" -"RTN","BSDX02",69,0) - F BSDXQ=1:1:4 D -"RTN","BSDX02",70,0) - . S Y=$P(BSDXNOD,U,BSDXQ) -"RTN","BSDX02",71,0) - . X ^DD("DD") S Y=$TR(Y,"@"," ") -"RTN","BSDX02",72,0) - . S BSDXZ=BSDXZ_Y_"^" -"RTN","BSDX02",73,0) - S BSDXPATD=$P(BSDXNOD,U,5) -"RTN","BSDX02",74,0) - S BSDXZ=BSDXZ_BSDXPATD_"^" ;PATIENT ID -"RTN","BSDX02",75,0) - S BSDXPAT="" -"RTN","BSDX02",76,0) - I BSDXPATD]"",$D(^DPT(BSDXPATD,0)) S BSDXPAT=$P(^DPT(BSDXPATD,0),U) -"RTN","BSDX02",77,0) - S BSDXZ=BSDXZ_BSDXPAT_"^" ;PATIENT NAME -"RTN","BSDX02",78,0) - S BSDXZ=BSDXZ_BSDXRESN_"^" ;RESOURCENAME -"RTN","BSDX02",79,0) - S BSDXZ=BSDXZ_+$P(BSDXNOD,U,10)_"^" ;NOSHOW -"RTN","BSDX02",80,0) - S BSDXHRN="" -"RTN","BSDX02",81,0) - I $D(DUZ(2)),DUZ(2)>0 S BSDXHRN=$P($G(^AUPNPAT(BSDXPATD,41,DUZ(2),0)),U,2) ;HRN -"RTN","BSDX02",82,0) - S BSDXZ=BSDXZ_BSDXHRN_"^" -"RTN","BSDX02",83,0) - S BSDXATID=$P(BSDXNOD,U,6) -"RTN","BSDX02",84,0) - S:'+BSDXATID BSDXATID=0 ;UNKNOWN TYPE -"RTN","BSDX02",85,0) - S BSDXZ=BSDXZ_BSDXATID_"^"_BSDXISWK_"^" -"RTN","BSDX02",86,0) - S BSDXI=BSDXI+1 -"RTN","BSDX02",87,0) - S ^BSDXTMP($J,BSDXI)=BSDXZ -"RTN","BSDX02",88,0) - ;NOTE -"RTN","BSDX02",89,0) - S BSDXNOT="",BSDXQ=0 F S BSDXQ=$O(^BSDXAPPT(BSDXAD,1,BSDXQ)) Q:'+BSDXQ D -"RTN","BSDX02",90,0) - . S BSDXNOT=$G(^BSDXAPPT(BSDXAD,1,BSDXQ,0)) -"RTN","BSDX02",91,0) - . S:$E(BSDXNOT,$L(BSDXNOT)-1,$L(BSDXNOT))'=" " BSDXNOT=BSDXNOT_" " -"RTN","BSDX02",92,0) - . S BSDXI=BSDXI+1 -"RTN","BSDX02",93,0) - . S ^BSDXTMP($J,BSDXI)=BSDXNOT -"RTN","BSDX02",94,0) - S ^BSDXTMP($J,BSDXI)=^BSDXTMP($J,BSDXI)_U ; Add "^" to separate note from next fields. -"RTN","BSDX02",95,0) - S BSDXI=BSDXI+1 -"RTN","BSDX02",96,0) - ; new code for V1.5. Extra fields to return. -"RTN","BSDX02",97,0) - N SEX S SEX=$$GET1^DIQ(2,BSDXPATD,.02) ; SEX -"RTN","BSDX02",98,0) - N PID S PID=$$GET1^DIQ(2,BSDXPATD,.363) ; PRIMARY LONG ID -"RTN","BSDX02",99,0) - ; Note strange way I retrieve the value. B/c DOB Output Transform -"RTN","BSDX02",100,0) - ; Outputs it in MM/DD/YYYY format, which is ambigous for C#. -"RTN","BSDX02",101,0) - N DOB S DOB=$$FMTE^XLFDT($$GET1^DIQ(2,BSDXPATD,.03,"I")) ; DOB -"RTN","BSDX02",102,0) - N RADEX S RADEX=$P(BSDXNOD,U,14) ;Radiology exam -"RTN","BSDX02",103,0) - S ^BSDXTMP($J,BSDXI)=SEX_U_PID_U_DOB_U_RADEX_$C(30) -"RTN","BSDX02",104,0) - ; end new code -"RTN","BSDX02",105,0) - Q -"RTN","BSDX02",106,0) - ; -"RTN","BSDX02",107,0) -ERR(BSDXI,BSDXERR) ;Error processing -"RTN","BSDX02",108,0) - S BSDXI=BSDXI+1 -"RTN","BSDX02",109,0) - S ^BSDXTMP($J,BSDXI)="0^^^^^^^^^^^"_BSDXERR_$C(30) -"RTN","BSDX02",110,0) - S BSDXI=BSDXI+1 -"RTN","BSDX02",111,0) S ^BSDXTMP($J,BSDXI)=$C(31) -"RTN","BSDX02",112,0) +"RTN","BSDX02",46,0) Q -"RTN","BSDX02",113,0) +"RTN","BSDX02",47,0) ; -"RTN","BSDX02",114,0) -ETRAP ;EP Error trap entry -"RTN","BSDX02",115,0) - D ^%ZTER -"RTN","BSDX02",116,0) - I '$D(BSDXI) N BSDXI S BSDXI=999999 -"RTN","BSDX02",117,0) +"RTN","BSDX02",48,0) +STRES ; +"RTN","BSDX02",49,0) + F BSDXJ=1:1:$L(BSDXRES,"|") S BSDXRESN=$P(BSDXRES,"|",BSDXJ) D +"RTN","BSDX02",50,0) + . Q:BSDXRESN="" +"RTN","BSDX02",51,0) + . Q:'$D(^BSDXRES("B",BSDXRESN)) +"RTN","BSDX02",52,0) + . S BSDXRESD=$O(^BSDXRES("B",BSDXRESN,0)) +"RTN","BSDX02",53,0) + . Q:'+BSDXRESD +"RTN","BSDX02",54,0) + . Q:'$D(^BSDXAPPT("ARSRC",BSDXRESD)) +"RTN","BSDX02",55,0) + . S BSDXS=BSDXSTART-.0001 +"RTN","BSDX02",56,0) + . F S BSDXS=$O(^BSDXAPPT("ARSRC",BSDXRESD,BSDXS)) Q:'+BSDXS Q:BSDXS>BSDXEND D +"RTN","BSDX02",57,0) + . . S BSDXAD=0 F S BSDXAD=$O(^BSDXAPPT("ARSRC",BSDXRESD,BSDXS,BSDXAD)) Q:'+BSDXAD D STCOMM(BSDXAD,BSDXRESN) +"RTN","BSDX02",58,0) + Q +"RTN","BSDX02",59,0) + ; +"RTN","BSDX02",60,0) +STCOMM(BSDXAD,BSDXRESN) ; +"RTN","BSDX02",61,0) + ;BSDXAD is the appointment IEN +"RTN","BSDX02",62,0) + N BSDXC,BSDXQ,BSDXZ,BSDXSUBC,BSDXHRN,BSDXPATD,BSDXATID,BSDXISWK +"RTN","BSDX02",63,0) + Q:'$D(^BSDXAPPT(BSDXAD,0)) +"RTN","BSDX02",64,0) + S BSDXNOD=^BSDXAPPT(BSDXAD,0) +"RTN","BSDX02",65,0) + Q:$P(BSDXNOD,U,12)]"" ;CANCELLED +"RTN","BSDX02",66,0) + S BSDXISWK=0 +"RTN","BSDX02",67,0) + S:$P(BSDXNOD,U,13)="y" BSDXISWK=1 +"RTN","BSDX02",68,0) + I +$G(BSDXWKIN) Q:BSDXISWK ;Don't return walkins if appt is WALKIN and BSDXWKIN is 1 +"RTN","BSDX02",69,0) + S BSDXZ=BSDXAD_"^" +"RTN","BSDX02",70,0) + F BSDXQ=1:1:4 D +"RTN","BSDX02",71,0) + . S Y=$P(BSDXNOD,U,BSDXQ) +"RTN","BSDX02",72,0) + . X ^DD("DD") S Y=$TR(Y,"@"," ") +"RTN","BSDX02",73,0) + . S BSDXZ=BSDXZ_Y_"^" +"RTN","BSDX02",74,0) + S BSDXPATD=$P(BSDXNOD,U,5) +"RTN","BSDX02",75,0) + S BSDXZ=BSDXZ_BSDXPATD_"^" ;PATIENT ID +"RTN","BSDX02",76,0) + S BSDXPAT="" +"RTN","BSDX02",77,0) + I BSDXPATD]"",$D(^DPT(BSDXPATD,0)) S BSDXPAT=$P(^DPT(BSDXPATD,0),U) +"RTN","BSDX02",78,0) + S BSDXZ=BSDXZ_BSDXPAT_"^" ;PATIENT NAME +"RTN","BSDX02",79,0) + S BSDXZ=BSDXZ_BSDXRESN_"^" ;RESOURCENAME +"RTN","BSDX02",80,0) + S BSDXZ=BSDXZ_+$P(BSDXNOD,U,10)_"^" ;NOSHOW +"RTN","BSDX02",81,0) + S BSDXHRN="" +"RTN","BSDX02",82,0) + I $D(DUZ(2)),DUZ(2)>0 S BSDXHRN=$P($G(^AUPNPAT(BSDXPATD,41,DUZ(2),0)),U,2) ;HRN +"RTN","BSDX02",83,0) + S BSDXZ=BSDXZ_BSDXHRN_"^" +"RTN","BSDX02",84,0) + S BSDXATID=$P(BSDXNOD,U,6) +"RTN","BSDX02",85,0) + S:'+BSDXATID BSDXATID=0 ;UNKNOWN TYPE +"RTN","BSDX02",86,0) + S BSDXZ=BSDXZ_BSDXATID_"^"_BSDXISWK_"^" +"RTN","BSDX02",87,0) S BSDXI=BSDXI+1 +"RTN","BSDX02",88,0) + S ^BSDXTMP($J,BSDXI)=BSDXZ +"RTN","BSDX02",89,0) + ;NOTE +"RTN","BSDX02",90,0) + S BSDXNOT="",BSDXQ=0 F S BSDXQ=$O(^BSDXAPPT(BSDXAD,1,BSDXQ)) Q:'+BSDXQ D +"RTN","BSDX02",91,0) + . S BSDXNOT=$G(^BSDXAPPT(BSDXAD,1,BSDXQ,0)) +"RTN","BSDX02",92,0) + . S:$E(BSDXNOT,$L(BSDXNOT)-1,$L(BSDXNOT))'=" " BSDXNOT=BSDXNOT_" " +"RTN","BSDX02",93,0) + . S BSDXI=BSDXI+1 +"RTN","BSDX02",94,0) + . S ^BSDXTMP($J,BSDXI)=BSDXNOT +"RTN","BSDX02",95,0) + S ^BSDXTMP($J,BSDXI)=^BSDXTMP($J,BSDXI)_U ; Add "^" to separate note from next fields. +"RTN","BSDX02",96,0) + S BSDXI=BSDXI+1 +"RTN","BSDX02",97,0) + ; new code for V1.5. Extra fields to return. +"RTN","BSDX02",98,0) + N SEX S SEX=$$GET1^DIQ(2,BSDXPATD,.02) ; SEX +"RTN","BSDX02",99,0) + N PID S PID=$$GET1^DIQ(2,BSDXPATD,.363) ; PRIMARY LONG ID +"RTN","BSDX02",100,0) + ; Note strange way I retrieve the value. B/c DOB Output Transform +"RTN","BSDX02",101,0) + ; Outputs it in MM/DD/YYYY format, which is ambigous for C#. +"RTN","BSDX02",102,0) + N DOB S DOB=$$FMTE^XLFDT($$GET1^DIQ(2,BSDXPATD,.03,"I")) ; DOB +"RTN","BSDX02",103,0) + N RADEX S RADEX=$P(BSDXNOD,U,14) ;Radiology exam +"RTN","BSDX02",104,0) + S ^BSDXTMP($J,BSDXI)=SEX_U_PID_U_DOB_U_RADEX_$C(30) +"RTN","BSDX02",105,0) + ; end new code +"RTN","BSDX02",106,0) + Q +"RTN","BSDX02",107,0) + ; +"RTN","BSDX02",108,0) +ERR(BSDXI,BSDXERR) ;Error processing +"RTN","BSDX02",109,0) + S BSDXI=BSDXI+1 +"RTN","BSDX02",110,0) + S ^BSDXTMP($J,BSDXI)="0^^^^^^^^^^^"_BSDXERR_$C(30) +"RTN","BSDX02",111,0) + S BSDXI=BSDXI+1 +"RTN","BSDX02",112,0) + S ^BSDXTMP($J,BSDXI)=$C(31) +"RTN","BSDX02",113,0) + Q +"RTN","BSDX02",114,0) + ; +"RTN","BSDX02",115,0) +ETRAP ;EP Error trap entry +"RTN","BSDX02",116,0) + D ^%ZTER +"RTN","BSDX02",117,0) + I '$D(BSDXI) N BSDXI S BSDXI=999999 "RTN","BSDX02",118,0) - D ERR(BSDXI,"BSDX31 Error: "_$G(%ZTERROR)) + S BSDXI=BSDXI+1 "RTN","BSDX02",119,0) + D ERR(BSDXI,"BSDX31 Error: "_$G(%ZTERROR)) +"RTN","BSDX02",120,0) Q "RTN","BSDX03") 0^3^B2916424 "RTN","BSDX03",1,0) BSDX03 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:14am "RTN","BSDX03",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX03",3,0) ;Licensed under LGPL "RTN","BSDX03",4,0) @@ -2871,11 +2881,11 @@ XR4K(BSDXDA) ;EP "RTN","BSDX03",59,0) Q "RTN","BSDX04") -0^4^B24533216 +0^4^B24529408 "RTN","BSDX04",1,0) -BSDX04 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; ; 4/28/11 10:15am +BSDX04 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; ; 7/6/12 10:55am "RTN","BSDX04",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX04",3,0) ; Licensed under LGPL "RTN","BSDX04",4,0) @@ -3023,7 +3033,7 @@ CASSCH(BSDXY,BSDXRES,BSDXSTART,BSDXEND,BSDXTYPES,BSDXSRCH) ;EP -- RPC: BSDX CRE "RTN","BSDX04",75,0) . Q:'$D(^BSDXRES("B",BSDXRESN)) "RTN","BSDX04",76,0) - . S BSDXRESD=$O(^BSDXRES("B",BSDXRESN,0)) + . S BSDXRESD=$O(^BSDXRES("B",BSDXRESN,0)) "RTN","BSDX04",77,0) . Q:'+BSDXRESD "RTN","BSDX04",78,0) @@ -3207,7 +3217,7 @@ STCOMM(BSDXRESN,BSDXRESD,BSDXS,BSDXAD) ; "RTN","BSDX05",1,0) BSDX05 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:16am "RTN","BSDX05",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX05",3,0) ; Licensed under LGPL "RTN","BSDX05",4,0) @@ -3347,7 +3357,7 @@ STCOMM(BSDXAD) ; "RTN","BSDX06",1,0) BSDX06 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:16am "RTN","BSDX06",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX06",3,0) ; Licensed under LGPL "RTN","BSDX06",4,0) @@ -3469,733 +3479,581 @@ STCOMM(BSDXRESN,BSDXRESD) ;EP "RTN","BSDX06",62,0) Q "RTN","BSDX07") -0^7^B200914453 +0^7^B81183501 "RTN","BSDX07",1,0) -BSDX07 ; VW/UJO/SMH - WINDOWS SCHEDULING RPCS ; 4/28/11 10:17am +BSDX07 ; VW/UJO/SMH - WINDOWS SCHEDULING RPCS ; 7/9/12 4:02pm "RTN","BSDX07",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX07",3,0) - ; Licensed under LGPL + ; Licensed under LGPL "RTN","BSDX07",4,0) - ; + ; "RTN","BSDX07",5,0) - ; Change Log: + ; Change Log: "RTN","BSDX07",6,0) - ; UJO/SMH + ; UJO/SMH "RTN","BSDX07",7,0) - ; v1.3 July 13 2010 - Add support i18n - Dates input as FM dates, not US. + ; v1.3 July 13 2010 - Add support i18n - Dates input as FM dates, not US. "RTN","BSDX07",8,0) - ; v1.42 Oct 22 2010 - Transaction now restartable by providing arguments + ; v1.42 Oct 22 2010 - Transaction now restartable by providing arguments "RTN","BSDX07",9,0) - ; thanks to Rick Marshall and Zach Gonzalez at Oroville. + ; v1.42 Oct 30 2010 - Extensive refactoring. "RTN","BSDX07",10,0) - ; v1.42 Oct 30 2010 - Extensive refactoring. + ; v1.5 Mar 15 2011 - End time does not have to have time anymore. "RTN","BSDX07",11,0) - ; v1.5 Mar 15 2011 - End time does not have to have time anymore. + ; It could be midnight of the next day "RTN","BSDX07",12,0) - ; It could be midnight of the next day + ; v1.6 Apr 11 2011 - Support for Scheduling Radiology Exams... "RTN","BSDX07",13,0) - ; v1.6 Apr 11 2011 - Support for Scheduling Radiology Exams... + ; v1.7 Jun 20 2012 - Refactoring to remove transactions - many changes "RTN","BSDX07",14,0) - ; + ; - AVUPDT moved to AVUPDTMK in BSDXAPI1 "RTN","BSDX07",15,0) - ; Error Reference: + ; "RTN","BSDX07",16,0) - ; -1: Patient Record is locked. This means something is wrong!!!! + ; Error Reference: "RTN","BSDX07",17,0) - ; -2: Start Time is not a valid Fileman date + ; -1: Patient Record is locked. This means something is wrong!!!! "RTN","BSDX07",18,0) - ; -3: End Time is not a valid Fileman date + ; -2: Start Time is not a valid Fileman date "RTN","BSDX07",19,0) - ; v1.5:obsolete::-4: End Time does not have time inside of it. + ; -3: End Time is not a valid Fileman date "RTN","BSDX07",20,0) - ; -5: BSDXPATID is not numeric + ; v1.5:obsolete::-4: End Time does not have time inside of it. "RTN","BSDX07",21,0) - ; -6: Patient Does not exist in ^DPT + ; -5: BSDXPATID is not numeric "RTN","BSDX07",22,0) - ; -7: Resource Name does not exist in B index of BSDX RESOURCE + ; -6: Patient Does not exist in ^DPT "RTN","BSDX07",23,0) - ; -8: Resouce doesn't exist in ^BSDXRES + ; -7: Resource Name does not exist in B index of BSDX RESOURCE "RTN","BSDX07",24,0) - ; -9: Couldn't add appointment to BSDX APPOINTMENT + ; -8: Resouce doesn't exist in ^BSDXRES "RTN","BSDX07",25,0) - ; -10: Couldn't add appointment to files 2 and/or 44 + ; -9: Couldn't add appointment to BSDX APPOINTMENT "RTN","BSDX07",26,0) - ; -100: Mumps Error + ; -10: Couldn't add appointment to files 2 and/or 44 "RTN","BSDX07",27,0) - + ; -100: Mumps Error "RTN","BSDX07",28,0) -APPADDD(BSDXY,BSDXSTART,BSDXEND,BSDXPATID,BSDXRES,BSDXLEN,BSDXNOTE,BSDXATID) ;EP + ; "RTN","BSDX07",29,0) - ;Entry point for debugging +APPADDD(BSDXY,BSDXSTART,BSDXEND,BSDXPATID,BSDXRES,BSDXLEN,BSDXNOTE,BSDXATID) ;EP "RTN","BSDX07",30,0) - D DEBUG^%Serenji("APPADD^BSDX07(.BSDXY,BSDXSTART,BSDXEND,BSDXPATID,BSDXRES,BSDXLEN,BSDXNOTE,BSDXATID)") + ;Entry point for debugging "RTN","BSDX07",31,0) - Q + ; D DEBUG^%Serenji("APPADD^BSDX07(.BSDXY,BSDXSTART,BSDXEND,BSDXPATID,BSDXRES,BSDXLEN,BSDXNOTE,BSDXATID)") "RTN","BSDX07",32,0) - ; + Q "RTN","BSDX07",33,0) -UT ; Unit Tests + ; "RTN","BSDX07",34,0) - N ZZZ +APPADD(BSDXY,BSDXSTART,BSDXEND,BSDXPATID,BSDXRES,BSDXLEN,BSDXNOTE,BSDXATID,BSDXRADEXAM) ;Private EP "RTN","BSDX07",35,0) - ; Test for bad start date + ; "RTN","BSDX07",36,0) - D APPADD(.ZZZ,2100123,3100123.3,2,"Dr Office",30,"Sam's Note",1) + ;Called by RPC: BSDX ADD NEW APPOINTMENT "RTN","BSDX07",37,0) - I +$P(^BSDXTMP($J,1),U,2)'=-2 W "Error in -2",! + ; "RTN","BSDX07",38,0) - ; Test for bad end date + ;Add new appointment to 3 files "RTN","BSDX07",39,0) - D APPADD(.ZZZ,3100123,2100123.3,2,"Dr Office",30,"Sam's Note",1) + ; - BSDX APPOINTMENT "RTN","BSDX07",40,0) - I +$P(^BSDXTMP($J,1),U,2)'=-3 W "Error in -3",! + ; - Hosp Location Appointment SubSubfile if Resource is linked to clinic "RTN","BSDX07",41,0) - ; Test for end date without time + ; - Patient Appointment Subfile if Resource is linked to clinic "RTN","BSDX07",42,0) - D APPADD(.ZZZ,3100123.1,3100123,2,"Dr Office",30,"Sam's Note",1) + ; "RTN","BSDX07",43,0) - I +$P(^BSDXTMP($J,1),U,2)'=-4 W "Error in -4",! + ;Paramters: "RTN","BSDX07",44,0) - ; Test for mumps error + ;BSDXY: Global Return (RPC must be set to Global Array) "RTN","BSDX07",45,0) - S bsdxdie=1 + ;BSDXSTART: FM Start Date "RTN","BSDX07",46,0) - D APPADD(.ZZZ,3100123.09,3100123.093,2,"Dr Office",30,"Sam's Note",1) + ;BSDXEND: FM End Date "RTN","BSDX07",47,0) - I +$P(^BSDXTMP($J,1),U,2)'=-100 W "Error in -100: M Error",! + ;BSDXPATID: Patient DFN "RTN","BSDX07",48,0) - K bsdxdie + ;BSDXRES is ResourceName in BSDX RESOURCE file (not IEN) "RTN","BSDX07",49,0) - ; Test for TRESTART + ;BSDXLEN is the appointment duration in minutes "RTN","BSDX07",50,0) - s bsdxrestart=1 + ;BSDXNOTE is the Appiontment Note "RTN","BSDX07",51,0) - D APPADD(.ZZZ,3100123.09,3100123.093,3,"Dr Office",30,"Sam's Note",1) + ;BSDXATID is used for 2 purposes: "RTN","BSDX07",52,0) - I +$P(^BSDXTMP($J,1),U,2)'=0&(+$P(^BSDXTMP($J,1),U,2)'=-10) W "Error in TRESTART",! + ; if BSDXATID = "WALKIN" then BSDAPI is called to create a walkin appt. "RTN","BSDX07",53,0) - k bsdxrestart + ; if BSDXATID = a number, then it is the access type id (used for rebooking) "RTN","BSDX07",54,0) - ; Test for non-numeric patient + ;BSDXRADEXAM is used to store the Radiology Exam to which this appointment is tied to (optional) "RTN","BSDX07",55,0) - D APPADD(.ZZZ,3100123.09,3100123.093,"CAT,DOG","Dr Office",30,"Sam's Note",1) + ; "RTN","BSDX07",56,0) - I +$P(^BSDXTMP($J,1),U,2)'=-5 W "Error in -5",! + ;Return: "RTN","BSDX07",57,0) - ; Test for a non-existent patient + ; ADO.net Recordset having fields: "RTN","BSDX07",58,0) - D APPADD(.ZZZ,3100123.09,3100123.093,8989898989,"Dr Office",30,"Sam's Note",1) + ; AppointmentID and ErrorNumber "RTN","BSDX07",59,0) - I +$P(^BSDXTMP($J,1),U,2)'=-6 W "Error in -6",! + ; "RTN","BSDX07",60,0) - ; Test for a non-existent resource name + ; TODO: Specifying BSDXLEN and BSDXEND is redundant. For future programmers "RTN","BSDX07",61,0) - D APPADD(.ZZZ,3100123.09,3100123.093,3,"lkajsflkjsadf",30,"Sam's Note",1) + ; to sort out. Needs changes on client. "RTN","BSDX07",62,0) - I +$P(^BSDXTMP($J,1),U,2)'=-7 W "Error in -7",! + ; "RTN","BSDX07",63,0) - ; Test for corrupted resource + ;Test lines: "RTN","BSDX07",64,0) - ; Can't test for -8 since it requires DB corruption + ;BSDX ADD NEW APPOINTMENT^3091122.0930^3091122.1000^370^Dr Office^30^EXAM^WALKIN "RTN","BSDX07",65,0) - ; Test for inability to add appointment to BSDX Appointment + ; "RTN","BSDX07",66,0) - ; Also requires something wrong in the DB + ; Deal with optional arguments "RTN","BSDX07",67,0) - ; Test for inability to add appointment to 2,44 + S BSDXRADEXAM=$G(BSDXRADEXAM) "RTN","BSDX07",68,0) - ; Test by creating a duplicate appointment + ; "RTN","BSDX07",69,0) - D APPADD(.ZZZ,3100123.09,3100123.093,3,"Dr Office",30,"Sam's Note",1) + ; Return Array; set Return and clear array "RTN","BSDX07",70,0) - D APPADD(.ZZZ,3100123.09,3100123.093,3,"Dr Office",30,"Sam's Note",1) + S BSDXY=$NA(^BSDXTMP($J)) "RTN","BSDX07",71,0) - I +$P(^BSDXTMP($J,1),U,2)'=-10 W "Error in -10",! + K ^BSDXTMP($J) "RTN","BSDX07",72,0) - ; Test for normality: + ; "RTN","BSDX07",73,0) - D APPADD(.ZZZ,3110123.09,3110123.093,3,"Dr Office",30,"Sam's Note",1) + ; $ET "RTN","BSDX07",74,0) - ; Does Appt exist? + N $ET S $ET="G ETRAP^BSDX07" "RTN","BSDX07",75,0) - N APPID S APPID=+$P(^BSDXTMP($J,1),U) + ; "RTN","BSDX07",76,0) - I 'APPID W "Error Making Appt-1" QUIT + ; Counter "RTN","BSDX07",77,0) - I +^BSDXAPPT(APPID,0)'=3110123.09 W "Error Making Appt-2" + N BSDXI S BSDXI=0 "RTN","BSDX07",78,0) - I '$D(^DPT(3,"S",3110123.09)) W "Error Making Appt-3" + ; "RTN","BSDX07",79,0) - I '$D(^SC(2,"S",3110123.09)) W "Error Making Appt-4" + ; Lock BSDX node, only to synchronize access to the globals. "RTN","BSDX07",80,0) - QUIT + ; It's not expected that the error will ever happen as no filing "RTN","BSDX07",81,0) - ; + ; is supposed to take 5 seconds. "RTN","BSDX07",82,0) -APPADD(BSDXY,BSDXSTART,BSDXEND,BSDXPATID,BSDXRES,BSDXLEN,BSDXNOTE,BSDXATID,BSDXRADEXAM) ;EP + L +^BSDXPAT(BSDXPATID):5 I '$T D ERR(BSDXI,"-1~Patient record is locked. Please contact technical support.") Q "RTN","BSDX07",83,0) - ; + ; "RTN","BSDX07",84,0) - ;Called by RPC: BSDX ADD NEW APPOINTMENT + ; Header Node "RTN","BSDX07",85,0) - ; + S ^BSDXTMP($J,BSDXI)="I00020APPOINTMENTID^T00100ERRORID"_$C(30) "RTN","BSDX07",86,0) - ;Add new appointment to 3 files + ; "RTN","BSDX07",87,0) - ; - BSDX APPOINTMENT + ; Turn off SDAM APPT PROTOCOL BSDX Entries "RTN","BSDX07",88,0) - ; - Hosp Location Appointment SubSubfile if Resource is linked to clinic + N BSDXNOEV "RTN","BSDX07",89,0) - ; - Patient Appointment Subfile if Resource is linked to clinic + S BSDXNOEV=1 ;Don't execute BSDX ADD APPOINTMENT protocol "RTN","BSDX07",90,0) - ; + ; "RTN","BSDX07",91,0) - ;Paramters: + ; Set Error Message to be empty "RTN","BSDX07",92,0) - ;BSDXY: Global Return (RPC must be set to Global Array) + N BSDXERR S BSDXERR=0 "RTN","BSDX07",93,0) - ;BSDXSTART: FM Start Date + ; "RTN","BSDX07",94,0) - ;BSDXEND: FM End Date + ;;;test for error. See if %ZTER works "RTN","BSDX07",95,0) - ;BSDXPATID: Patient DFN + I $G(BSDXDIE) N X S X=1/0 "RTN","BSDX07",96,0) - ;BSDXRES is ResourceName in BSDX RESOURCE file (not IEN) + ;;;test "RTN","BSDX07",97,0) - ;BSDXLEN is the appointment duration in minutes + ; "RTN","BSDX07",98,0) - ;BSDXNOTE is the Appiontment Note + ; -- Start and End Date Processing -- "RTN","BSDX07",99,0) - ;BSDXATID is used for 2 purposes: + ; If C# sends the dates with extra zeros, remove them "RTN","BSDX07",100,0) - ; if BSDXATID = "WALKIN" then BSDAPI is called to create a walkin appt. + S BSDXSTART=+BSDXSTART,BSDXEND=+BSDXEND "RTN","BSDX07",101,0) - ; if BSDXATID = a number, then it is the access type id (used for rebooking) + ; Are the dates valid? Must be FM Dates > than 2010 "RTN","BSDX07",102,0) - ;BSDXRADEXAM is used to store the Radiology Exam to which this appointment is tied to (optional) + I BSDXSTART'>3100000 D ERR(BSDXI,"-2~BSDX07 Error: Invalid Start Time") Q "RTN","BSDX07",103,0) - ; + I BSDXEND'>3100000 D ERR(BSDXI,"-3~BSDX07 Error: Invalid End Time") Q "RTN","BSDX07",104,0) - ;Return: + ; "RTN","BSDX07",105,0) - ; ADO.net Recordset having fields: + ;; If Ending date doesn't have a time, this is an error --rm 1.5 "RTN","BSDX07",106,0) - ; AppointmentID and ErrorNumber + ; I $L(BSDXEND,".")=1 D ERR(BSDXI,"-4~BSDX07 Error: Invalid End Time") Q "RTN","BSDX07",107,0) - ; + ; "RTN","BSDX07",108,0) - ;Test lines: + ; If the Start Date is greater than the end date, swap dates "RTN","BSDX07",109,0) - ;BSDX ADD NEW APPOINTMENT^3091122.0930^3091122.1000^370^Dr Office^30^EXAM^WALKIN + N BSDXTMP "RTN","BSDX07",110,0) - ; + I BSDXSTART>BSDXEND S BSDXTMP=BSDXEND,BSDXEND=BSDXSTART,BSDXSTART=BSDXTMP "RTN","BSDX07",111,0) - ; Deal with optional arguments + ; "RTN","BSDX07",112,0) - S BSDXRADEXAM=$G(BSDXRADEXAM) + ; Check if the patient exists: "RTN","BSDX07",113,0) - ; Return Array; set Return and clear array + ; - DFN valid number? "RTN","BSDX07",114,0) - S BSDXY=$NA(^BSDXTMP($J)) + ; - Valid Patient in file 2? "RTN","BSDX07",115,0) - K ^BSDXTMP($J) + I '+BSDXPATID D ERR(BSDXI,"-5~BSDX07 Error: Invalid Patient ID") Q "RTN","BSDX07",116,0) - ; $ET + I '$D(^DPT(BSDXPATID,0)) D ERR(BSDXI,"-6~BSDX07 Error: Invalid Patient ID") Q "RTN","BSDX07",117,0) - N $ET S $ET="G ETRAP^BSDX07" + ; "RTN","BSDX07",118,0) - ; Counter + ;Validate Resource entry "RTN","BSDX07",119,0) - N BSDXI S BSDXI=0 + I '$D(^BSDXRES("B",BSDXRES)) D ERR(BSDXI,"-7~BSDX07 Error: Invalid Resource ID") Q "RTN","BSDX07",120,0) - ; Lock BSDX node, only to synchronize access to the globals. + N BSDXRESD ; Resource IEN "RTN","BSDX07",121,0) - ; It's not expected that the error will ever happen as no filing + S BSDXRESD=$O(^BSDXRES("B",BSDXRES,0)) "RTN","BSDX07",122,0) - ; is supposed to take 5 seconds. + N BSDXRNOD ; Resouce zero node "RTN","BSDX07",123,0) - L +^BSDXAPPT(BSDXPATID):5 I '$T D ERR(BSDXI,"-1~Patient record is locked. Please contact technical support.") Q + S BSDXRNOD=$G(^BSDXRES(BSDXRESD,0)) "RTN","BSDX07",124,0) - ; Header Node + I BSDXRNOD="" D ERR(BSDXI,"-8~BSDX07 Error: invalid Resource entry.") Q "RTN","BSDX07",125,0) - S ^BSDXTMP($J,BSDXI)="I00020APPOINTMENTID^T00100ERRORID"_$C(30) + ; "RTN","BSDX07",126,0) - ;Restartable Transaction; restore paramters when starting. + ; Walk-in (Unscheduled) Appointment? "RTN","BSDX07",127,0) - ; (Params restored are what's passed here + BSDXI) + N BSDXWKIN S BSDXWKIN=0 "RTN","BSDX07",128,0) - TSTART (BSDXY,BSDXSTART,BSDXEND,BSDXPATID,BSDXRES,BSDXLEN,BSDXNOTE,BSDXATID,BSDXI):T="BSDX ADD NEW APPOINTMENT^BSDX07" + I BSDXATID="WALKIN" S BSDXWKIN=1 "RTN","BSDX07",129,0) - ; + ; Reset Access Type ID if it doesn't say "WALKIN" and isn't a number "RTN","BSDX07",130,0) - ; Turn off SDAM APPT PROTOCOL BSDX Entries + I BSDXATID'?.N&(BSDXATID'="WALKIN") S BSDXATID="" "RTN","BSDX07",131,0) - N BSDXNOEV + ; "RTN","BSDX07",132,0) - S BSDXNOEV=1 ;Don't execute BSDX ADD APPOINTMENT protocol + ; Now, check if PIMS has any issues with us making the appt using MAKECK "RTN","BSDX07",133,0) - ; + N BSDXSCD S BSDXSCD=$P(BSDXRNOD,U,4) ; Hosp Location IEN "RTN","BSDX07",134,0) - ; Set Error Message to be empty + N BSDXERR S BSDXERR=0 ; Variable to hold value of $$MAKE and $$MAKECK "RTN","BSDX07",135,0) - N BSDXERR S BSDXERR=0 + N BSDXC ; Array to send to MAKE and MAKECK APIs "RTN","BSDX07",136,0) - ; + ; Only if we have a valid Hosp Location "RTN","BSDX07",137,0) - ;;;test for error inside transaction. See if %ZTER works + I +BSDXSCD,$D(^SC(BSDXSCD,0)) D "RTN","BSDX07",138,0) - I $G(bsdxdie) S X=1/0 + . S BSDXC("PAT")=BSDXPATID "RTN","BSDX07",139,0) - ;;;test + . S BSDXC("CLN")=BSDXSCD "RTN","BSDX07",140,0) - ;;;test for TRESTART + . S BSDXC("TYP")=3 ;3 for scheduled appts, 4 for walkins "RTN","BSDX07",141,0) - I $G(bsdxrestart) K bsdxrestart TRESTART + . S:BSDXWKIN BSDXC("TYP")=4 "RTN","BSDX07",142,0) - ;;;test + . S BSDXC("ADT")=BSDXSTART "RTN","BSDX07",143,0) - ; + . S BSDXC("LEN")=BSDXLEN "RTN","BSDX07",144,0) - ; -- Start and End Date Processing -- + . S BSDXC("OI")=$E($G(BSDXNOTE),1,150) ;File 44 has 150 character limit on OTHER field "RTN","BSDX07",145,0) - ; If C# sends the dates with extra zeros, remove them + . S BSDXC("OI")=$TR(BSDXC("OI"),";"," ") ;No semicolons allowed by MAKE^BSDXAPI "RTN","BSDX07",146,0) - S BSDXSTART=+BSDXSTART,BSDXEND=+BSDXEND + . S BSDXC("OI")=$$STRIP(BSDXC("OI")) ;Strip control characters from note "RTN","BSDX07",147,0) - ; Are the dates valid? Must be FM Dates > than 2010 + . S BSDXC("USR")=DUZ "RTN","BSDX07",148,0) - I BSDXSTART'>3100000 D ERR(BSDXI,"-2~BSDX07 Error: Invalid Start Time") Q + . S BSDXERR=$$MAKECK^BSDXAPI(.BSDXC) "RTN","BSDX07",149,0) - I BSDXEND'>3100000 D ERR(BSDXI,"-3~BSDX07 Error: Invalid End Time") Q + I BSDXERR D ERR(BSDXI,"-10~BSDX07 Error: MAKECK^BSDXAPI returned error code: "_BSDXERR) Q ; no need for roll back "RTN","BSDX07",150,0) - ; + ; "RTN","BSDX07",151,0) - ;; If Ending date doesn't have a time, this is an error --rm 1.5 + ; Done with all checks, let's make appointment in BSDX APPOINTMENT "RTN","BSDX07",152,0) - ; I $L(BSDXEND,".")=1 D ERR(BSDXI,"-4~BSDX07 Error: Invalid End Time") Q + N BSDXAPPTID "RTN","BSDX07",153,0) - ; + S BSDXAPPTID=$$BSDXADD(BSDXSTART,BSDXEND,BSDXPATID,BSDXRESD,BSDXATID,BSDXRADEXAM) "RTN","BSDX07",154,0) - ; If the Start Date is greater than the end date, swap dates + I 'BSDXAPPTID D ERR(BSDXI,"-9~BSDX07 Error: Unable to add appointment to BSDX APPOINTMENT file.") Q ; no roll back needed! No appts made. "RTN","BSDX07",155,0) - N BSDXTMP + I BSDXNOTE]"" D BSDXWP(BSDXAPPTID,BSDXNOTE) ; no error checks are made here "RTN","BSDX07",156,0) - I BSDXSTART>BSDXEND S BSDXTMP=BSDXEND,BSDXEND=BSDXSTART,BSDXSTART=BSDXTMP + ; I don't think it's important b/c users can detect right away if the WP "RTN","BSDX07",157,0) - ; + ; filing fails. "RTN","BSDX07",158,0) - ; Check if the patient exists: + ; "RTN","BSDX07",159,0) - ; - DFN valid number? + I $G(BSDXSIMERR1) D ERR(BSDXI,"-11~BSDX07 Error: Simulated Error"),ROLLBACK(BSDXAPPTID,.BSDXC) Q ; UT Line "RTN","BSDX07",160,0) - ; - Valid Patient in file 2? + ; "RTN","BSDX07",161,0) - I '+BSDXPATID D ERR(BSDXI,"-5~BSDX07 Error: Invalid Patient ID") Q + ; Only if we have a valid Hosp Loc can we make an appointment in 2/44 "RTN","BSDX07",162,0) - I '$D(^DPT(BSDXPATID,0)) D ERR(BSDXI,"-6~BSDX07 Error: Invalid Patient ID") Q + ; Use BSDXC array from before. "RTN","BSDX07",163,0) - ; + ; FYI: $$MAKE itself calls $$MAKECK to check again for being okay. "RTN","BSDX07",164,0) - ;Validate Resource entry + ; If an error happens here, we roll back both ^BSDXAPPT and 2/44 by deleting "RTN","BSDX07",165,0) - I '$D(^BSDXRES("B",BSDXRES)) D ERR(BSDXI,"-7~BSDX07 Error: Invalid Resource ID") Q + N BSDXERR S BSDXERR=0 ; Variable to hold value of $$MAKE and $$MAKECK "RTN","BSDX07",166,0) - N BSDXRESD ; Resource IEN + I +BSDXSCD,$D(^SC(BSDXSCD,0)) S BSDXERR=$$MAKE^BSDXAPI(.BSDXC) "RTN","BSDX07",167,0) - S BSDXRESD=$O(^BSDXRES("B",BSDXRES,0)) + I BSDXERR D ERR(BSDXI,"-10~BSDX07 Error: MAKE^BSDXAPI returned error code: "_BSDXERR),ROLLBACK(BSDXAPPTID,.BSDXC) Q "RTN","BSDX07",168,0) - N BSDXRNOD ; Resouce zero node + ; "RTN","BSDX07",169,0) - S BSDXRNOD=$G(^BSDXRES(BSDXRESD,0)) + ; Unlock "RTN","BSDX07",170,0) - I BSDXRNOD="" D ERR(BSDXI,"-8~BSDX07 Error: invalid Resource entry.") Q + L -^BSDXPAT(BSDXPATID) "RTN","BSDX07",171,0) - ; + ; "RTN","BSDX07",172,0) - ; Walk-in (Unscheduled) Appointment? + ;Return Recordset "RTN","BSDX07",173,0) - N BSDXWKIN S BSDXWKIN=0 + S BSDXI=BSDXI+1 "RTN","BSDX07",174,0) - I BSDXATID="WALKIN" S BSDXWKIN=1 + S ^BSDXTMP($J,BSDXI)=BSDXAPPTID_"^"_$C(30) "RTN","BSDX07",175,0) - ; Reset Access Type ID if it doesn't say "WALKIN" and isn't a number + S BSDXI=BSDXI+1 "RTN","BSDX07",176,0) - I BSDXATID'?.N&(BSDXATID'="WALKIN") S BSDXATID="" + S ^BSDXTMP($J,BSDXI)=$C(31) "RTN","BSDX07",177,0) - ; + Q "RTN","BSDX07",178,0) - ; Done with all checks, let's make appointment in BSDX APPOINTMENT -"RTN","BSDX07",179,0) - N BSDXAPPTID -"RTN","BSDX07",180,0) - S BSDXAPPTID=$$BSDXADD(BSDXSTART,BSDXEND,BSDXPATID,BSDXRESD,BSDXATID,BSDXRADEXAM) -"RTN","BSDX07",181,0) - I 'BSDXAPPTID D ERR(BSDXI,"-9~BSDX07 Error: Unable to add appointment to BSDX APPOINTMENT file.") Q -"RTN","BSDX07",182,0) - I BSDXNOTE]"" D BSDXWP(BSDXAPPTID,BSDXNOTE) -"RTN","BSDX07",183,0) - ; -"RTN","BSDX07",184,0) - ; Then Create Subfiles in 2/44 Appointment -"RTN","BSDX07",185,0) - N BSDXSCD S BSDXSCD=$P(BSDXRNOD,U,4) ; Hosp Location IEN -"RTN","BSDX07",186,0) - ; Only if we have a valid Hosp Loc can we make an appointment -"RTN","BSDX07",187,0) - I +BSDXSCD,$D(^SC(BSDXSCD,0)) D I +BSDXERR D ERR(BSDXI,"-10~BSDX07 Error: MAKE^BSDXAPI returned error code: "_BSDXERR) Q -"RTN","BSDX07",188,0) - . N BSDXC -"RTN","BSDX07",189,0) - . S BSDXC("PAT")=BSDXPATID -"RTN","BSDX07",190,0) - . S BSDXC("CLN")=BSDXSCD -"RTN","BSDX07",191,0) - . S BSDXC("TYP")=3 ;3 for scheduled appts, 4 for walkins -"RTN","BSDX07",192,0) - . S:BSDXWKIN BSDXC("TYP")=4 -"RTN","BSDX07",193,0) - . S BSDXC("ADT")=BSDXSTART -"RTN","BSDX07",194,0) - . S BSDXC("LEN")=BSDXLEN -"RTN","BSDX07",195,0) - . S BSDXC("OI")=$E($G(BSDXNOTE),1,150) ;File 44 has 150 character limit on OTHER field -"RTN","BSDX07",196,0) - . S BSDXC("OI")=$TR(BSDXC("OI"),";"," ") ;No semicolons allowed by MAKE^BSDXAPI -"RTN","BSDX07",197,0) - . S BSDXC("OI")=$$STRIP(BSDXC("OI")) ;Strip control characters from note -"RTN","BSDX07",198,0) - . S BSDXC("USR")=DUZ -"RTN","BSDX07",199,0) - . S BSDXERR=$$MAKE^BSDXAPI(.BSDXC) -"RTN","BSDX07",200,0) - . Q:BSDXERR -"RTN","BSDX07",201,0) - . ;Update RPMS Clinic availability -"RTN","BSDX07",202,0) - . D AVUPDT(BSDXSCD,BSDXSTART,BSDXLEN) -"RTN","BSDX07",203,0) - . Q -"RTN","BSDX07",204,0) - ; -"RTN","BSDX07",205,0) - ;Return Recordset -"RTN","BSDX07",206,0) - TCOMMIT -"RTN","BSDX07",207,0) - L -^BSDXAPPT(BSDXPATID) -"RTN","BSDX07",208,0) - S BSDXI=BSDXI+1 -"RTN","BSDX07",209,0) - S ^BSDXTMP($J,BSDXI)=BSDXAPPTID_"^"_$C(30) -"RTN","BSDX07",210,0) - S BSDXI=BSDXI+1 -"RTN","BSDX07",211,0) - S ^BSDXTMP($J,BSDXI)=$C(31) -"RTN","BSDX07",212,0) - Q -"RTN","BSDX07",213,0) -BSDXDEL(BSDXAPPTID) ;Deletes appointment BSDXAPPTID from BSDXAPPOINTMETN -"RTN","BSDX07",214,0) - N DA,DIK -"RTN","BSDX07",215,0) - S DIK="^BSDXAPPT(",DA=BSDXAPPTID -"RTN","BSDX07",216,0) - D ^DIK -"RTN","BSDX07",217,0) - Q -"RTN","BSDX07",218,0) - ; -"RTN","BSDX07",219,0) STRIP(BSDXZ) ;Replace control characters with spaces -"RTN","BSDX07",220,0) - N BSDXI -"RTN","BSDX07",221,0) - F BSDXI=1:1:$L(BSDXZ) I (32>$A($E(BSDXZ,BSDXI))) S BSDXZ=$E(BSDXZ,1,BSDXI-1)_" "_$E(BSDXZ,BSDXI+1,999) -"RTN","BSDX07",222,0) - Q BSDXZ -"RTN","BSDX07",223,0) - ; -"RTN","BSDX07",224,0) +"RTN","BSDX07",179,0) + N BSDXI +"RTN","BSDX07",180,0) + F BSDXI=1:1:$L(BSDXZ) I (32>$A($E(BSDXZ,BSDXI))) S BSDXZ=$E(BSDXZ,1,BSDXI-1)_" "_$E(BSDXZ,BSDXI+1,999) +"RTN","BSDX07",181,0) + Q BSDXZ +"RTN","BSDX07",182,0) + ; +"RTN","BSDX07",183,0) BSDXADD(BSDXSTART,BSDXEND,BSDXPATID,BSDXRESD,BSDXATID,BSDXRADEXAM) ;ADD BSDX APPOINTMENT ENTRY -"RTN","BSDX07",225,0) - ;Returns ien in BSDXAPPT or 0 if failed -"RTN","BSDX07",226,0) - ;Create entry in BSDX APPOINTMENT -"RTN","BSDX07",227,0) - N BSDXAPPTID -"RTN","BSDX07",228,0) - S BSDXFDA(9002018.4,"+1,",.01)=BSDXSTART -"RTN","BSDX07",229,0) - S BSDXFDA(9002018.4,"+1,",.02)=BSDXEND -"RTN","BSDX07",230,0) - S BSDXFDA(9002018.4,"+1,",.05)=BSDXPATID -"RTN","BSDX07",231,0) - S BSDXFDA(9002018.4,"+1,",.07)=BSDXRESD -"RTN","BSDX07",232,0) - S BSDXFDA(9002018.4,"+1,",.08)=$G(DUZ) -"RTN","BSDX07",233,0) - S BSDXFDA(9002018.4,"+1,",.09)=$$NOW^XLFDT -"RTN","BSDX07",234,0) - S:BSDXATID="WALKIN" BSDXFDA(9002018.4,"+1,",.13)="y" -"RTN","BSDX07",235,0) - S:BSDXATID?.N BSDXFDA(9002018.4,"+1,",.06)=BSDXATID -"RTN","BSDX07",236,0) - S BSDXFDA(9002018.4,"+1,",.14)=BSDXRADEXAM -"RTN","BSDX07",237,0) - N BSDXIEN,BSDXMSG -"RTN","BSDX07",238,0) - D UPDATE^DIE("","BSDXFDA","BSDXIEN","BSDXMSG") -"RTN","BSDX07",239,0) - S BSDXAPPTID=+$G(BSDXIEN(1)) -"RTN","BSDX07",240,0) - Q BSDXAPPTID -"RTN","BSDX07",241,0) - ; -"RTN","BSDX07",242,0) +"RTN","BSDX07",184,0) + ;Returns ien in BSDXAPPT or 0 if failed +"RTN","BSDX07",185,0) + ;Create entry in BSDX APPOINTMENT +"RTN","BSDX07",186,0) + N BSDXAPPTID,BSDXFDA +"RTN","BSDX07",187,0) + S BSDXFDA(9002018.4,"+1,",.01)=BSDXSTART +"RTN","BSDX07",188,0) + S BSDXFDA(9002018.4,"+1,",.02)=BSDXEND +"RTN","BSDX07",189,0) + S BSDXFDA(9002018.4,"+1,",.05)=BSDXPATID +"RTN","BSDX07",190,0) + S BSDXFDA(9002018.4,"+1,",.07)=BSDXRESD +"RTN","BSDX07",191,0) + S BSDXFDA(9002018.4,"+1,",.08)=$G(DUZ) +"RTN","BSDX07",192,0) + S BSDXFDA(9002018.4,"+1,",.09)=$$NOW^XLFDT +"RTN","BSDX07",193,0) + S:BSDXATID="WALKIN" BSDXFDA(9002018.4,"+1,",.13)="y" +"RTN","BSDX07",194,0) + S:BSDXATID?.N BSDXFDA(9002018.4,"+1,",.06)=BSDXATID +"RTN","BSDX07",195,0) + S BSDXFDA(9002018.4,"+1,",.14)=$G(BSDXRADEXAM) +"RTN","BSDX07",196,0) + N BSDXIEN,BSDXMSG +"RTN","BSDX07",197,0) + D UPDATE^DIE("","BSDXFDA","BSDXIEN","BSDXMSG") +"RTN","BSDX07",198,0) + S BSDXAPPTID=+$G(BSDXIEN(1)) +"RTN","BSDX07",199,0) + Q BSDXAPPTID +"RTN","BSDX07",200,0) + ; +"RTN","BSDX07",201,0) BSDXWP(BSDXAPPTID,BSDXNOTE) ; -"RTN","BSDX07",243,0) - ;Add WP field -"RTN","BSDX07",244,0) - I BSDXNOTE]"" S BSDXNOTE(.5)=BSDXNOTE,BSDXNOTE="" -"RTN","BSDX07",245,0) - I $D(BSDXNOTE(0)) S BSDXNOTE(.5)=BSDXNOTE(0) K BSDXNOTE(0) -"RTN","BSDX07",246,0) - I $D(BSDXNOTE(.5)) D -"RTN","BSDX07",247,0) - . D WP^DIE(9002018.4,BSDXAPPTID_",",1,"","BSDXNOTE","BSDXMSG") -"RTN","BSDX07",248,0) - Q -"RTN","BSDX07",249,0) - ; -"RTN","BSDX07",250,0) +"RTN","BSDX07",202,0) + ;Add WP field +"RTN","BSDX07",203,0) + N BSDXMSG +"RTN","BSDX07",204,0) + I BSDXNOTE]"" S BSDXNOTE(.5)=BSDXNOTE,BSDXNOTE="" +"RTN","BSDX07",205,0) + I $D(BSDXNOTE(0)) S BSDXNOTE(.5)=BSDXNOTE(0) K BSDXNOTE(0) +"RTN","BSDX07",206,0) + I $D(BSDXNOTE(.5)) D +"RTN","BSDX07",207,0) + . D WP^DIE(9002018.4,BSDXAPPTID_",",1,"","BSDXNOTE","BSDXMSG") +"RTN","BSDX07",208,0) + Q +"RTN","BSDX07",209,0) + ; +"RTN","BSDX07",210,0) ADDEVT(BSDXPATID,BSDXSTART,BSDXSC,BSDXSCDA) ;EP -"RTN","BSDX07",251,0) - ;Called by BSDX ADD APPOINTMENT protocol -"RTN","BSDX07",252,0) - ;BSDXSC=IEN of clinic in ^SC -"RTN","BSDX07",253,0) - ;BSDXSCDA=IEN for ^SC(BSDXSC,"S",BSDXSTART,1,BSDXSCDA). Use to get Length & Note -"RTN","BSDX07",254,0) - ; -"RTN","BSDX07",255,0) - N BSDXNOD,BSDXLEN,BSDXAPPTID,BSDXNODP,BSDXWKIN,BSDXRES -"RTN","BSDX07",256,0) - Q:+$G(BSDXNOEV) -"RTN","BSDX07",257,0) - I $D(^BSDXRES("ALOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ALOC",BSDXSC,0)) -"RTN","BSDX07",258,0) - E I $D(^BSDXRES("ASSOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ASSOC",BSDXSC,0)) -"RTN","BSDX07",259,0) - Q:'+$G(BSDXRES) -"RTN","BSDX07",260,0) - S BSDXNOD=$G(^SC(BSDXSC,"S",BSDXSTART,1,BSDXSCDA,0)) -"RTN","BSDX07",261,0) - Q:BSDXNOD="" -"RTN","BSDX07",262,0) - S BSDXNODP=$G(^DPT(BSDXPATID,"S",BSDXSTART,0)) -"RTN","BSDX07",263,0) - S BSDXWKIN="" -"RTN","BSDX07",264,0) - S:$P(BSDXNODP,U,7)=4 BSDXWKIN="WALKIN" ;Purpose of Visit field of DPT Appointment subfile -"RTN","BSDX07",265,0) - S BSDXLEN=$P(BSDXNOD,U,2) -"RTN","BSDX07",266,0) - Q:'+BSDXLEN -"RTN","BSDX07",267,0) - S BSDXEND=$$FMADD^XLFDT(BSDXSTART,0,0,BSDXLEN,0) -"RTN","BSDX07",268,0) - S BSDXAPPTID=$$BSDXADD(BSDXSTART,BSDXEND,BSDXPATID,BSDXRES,BSDXWKIN) -"RTN","BSDX07",269,0) - Q:'+BSDXAPPTID -"RTN","BSDX07",270,0) - S BSDXNOTE=$P(BSDXNOD,U,4) -"RTN","BSDX07",271,0) - I BSDXNOTE]"" D BSDXWP(BSDXAPPTID,BSDXNOTE) -"RTN","BSDX07",272,0) - D ADDEVT3(BSDXRES) -"RTN","BSDX07",273,0) - Q -"RTN","BSDX07",274,0) - ; -"RTN","BSDX07",275,0) +"RTN","BSDX07",211,0) + ;Called by BSDX ADD APPOINTMENT protocol +"RTN","BSDX07",212,0) + ;BSDXSC=IEN of clinic in ^SC +"RTN","BSDX07",213,0) + ;BSDXSCDA=IEN for ^SC(BSDXSC,"S",BSDXSTART,1,BSDXSCDA). Use to get Length & Note +"RTN","BSDX07",214,0) + ; +"RTN","BSDX07",215,0) + N BSDXNOD,BSDXLEN,BSDXAPPTID,BSDXNODP,BSDXWKIN,BSDXRES,BSDXNOTE,BSDXEND +"RTN","BSDX07",216,0) + Q:+$G(BSDXNOEV) +"RTN","BSDX07",217,0) + I $D(^BSDXRES("ALOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ALOC",BSDXSC,0)) +"RTN","BSDX07",218,0) + E I $D(^BSDXRES("ASSOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ASSOC",BSDXSC,0)) +"RTN","BSDX07",219,0) + Q:'+$G(BSDXRES) +"RTN","BSDX07",220,0) + S BSDXNOD=$G(^SC(BSDXSC,"S",BSDXSTART,1,BSDXSCDA,0)) +"RTN","BSDX07",221,0) + Q:BSDXNOD="" +"RTN","BSDX07",222,0) + S BSDXNODP=$G(^DPT(BSDXPATID,"S",BSDXSTART,0)) +"RTN","BSDX07",223,0) + S BSDXWKIN="" +"RTN","BSDX07",224,0) + S:$P(BSDXNODP,U,7)=4 BSDXWKIN="WALKIN" ;Purpose of Visit field of DPT Appointment subfile +"RTN","BSDX07",225,0) + S BSDXLEN=$P(BSDXNOD,U,2) +"RTN","BSDX07",226,0) + Q:'+BSDXLEN +"RTN","BSDX07",227,0) + S BSDXEND=$$FMADD^XLFDT(BSDXSTART,0,0,BSDXLEN,0) +"RTN","BSDX07",228,0) + S BSDXAPPTID=$$BSDXADD(BSDXSTART,BSDXEND,BSDXPATID,BSDXRES,BSDXWKIN) +"RTN","BSDX07",229,0) + Q:'+BSDXAPPTID +"RTN","BSDX07",230,0) + S BSDXNOTE=$P(BSDXNOD,U,4) +"RTN","BSDX07",231,0) + I BSDXNOTE]"" D BSDXWP(BSDXAPPTID,BSDXNOTE) +"RTN","BSDX07",232,0) + D ADDEVT3(BSDXRES) +"RTN","BSDX07",233,0) + Q +"RTN","BSDX07",234,0) + ; +"RTN","BSDX07",235,0) ADDEVT3(BSDXRES) ; -"RTN","BSDX07",276,0) - ;Call RaiseEvent to notify GUI clients -"RTN","BSDX07",277,0) - N BSDXRESN -"RTN","BSDX07",278,0) - S BSDXRESN=$G(^BSDXRES(BSDXRES,0)) -"RTN","BSDX07",279,0) - Q:BSDXRESN="" -"RTN","BSDX07",280,0) - S BSDXRESN=$P(BSDXRESN,"^") -"RTN","BSDX07",281,0) - ;D EVENT^BSDX23("SCHEDULE-"_BSDXRESN,"","","") -"RTN","BSDX07",282,0) - D EVENT^BMXMEVN("BSDX SCHEDULE",BSDXRESN) -"RTN","BSDX07",283,0) - Q -"RTN","BSDX07",284,0) - ; -"RTN","BSDX07",285,0) -ERR(BSDXI,BSDXERR) ;Error processing -"RTN","BSDX07",286,0) - S BSDXI=BSDXI+1 -"RTN","BSDX07",287,0) - S BSDXERR=$TR(BSDXERR,"^","~") -"RTN","BSDX07",288,0) - I $TL>0 TROLLBACK -"RTN","BSDX07",289,0) - S ^BSDXTMP($J,BSDXI)="0^"_BSDXERR_$C(30) -"RTN","BSDX07",290,0) - S BSDXI=BSDXI+1 -"RTN","BSDX07",291,0) - S ^BSDXTMP($J,BSDXI)=$C(31) -"RTN","BSDX07",292,0) - L -^BSDXAPPT(BSDXPATID) -"RTN","BSDX07",293,0) - Q -"RTN","BSDX07",294,0) - ; -"RTN","BSDX07",295,0) +"RTN","BSDX07",236,0) + ;Call RaiseEvent to notify GUI clients +"RTN","BSDX07",237,0) + N BSDXRESN +"RTN","BSDX07",238,0) + S BSDXRESN=$G(^BSDXRES(BSDXRES,0)) +"RTN","BSDX07",239,0) + Q:BSDXRESN="" +"RTN","BSDX07",240,0) + S BSDXRESN=$P(BSDXRESN,"^") +"RTN","BSDX07",241,0) + ;D EVENT^BSDX23("SCHEDULE-"_BSDXRESN,"","","") +"RTN","BSDX07",242,0) + D EVENT^BMXMEVN("BSDX SCHEDULE",BSDXRESN) +"RTN","BSDX07",243,0) + Q +"RTN","BSDX07",244,0) + ; +"RTN","BSDX07",245,0) +ROLLBACK(BSDXAPPTID,BSDXC) ; Private EP; Roll back appointment set +"RTN","BSDX07",246,0) + ; DO NOT USE except as an emergency measure - only if unforseen error occurs +"RTN","BSDX07",247,0) + ; Input: +"RTN","BSDX07",248,0) + ; Appointment ID to remove from ^BSDXAPPT +"RTN","BSDX07",249,0) + ; BSDXC array (see array format in $$MAKE^BSDXAPI) +"RTN","BSDX07",250,0) + N % +"RTN","BSDX07",251,0) + D BSDXDEL^BSDX07(BSDXAPPTID) +"RTN","BSDX07",252,0) + S:$D(BSDXC) %=$$UNMAKE^BSDXAPI(.BSDXC) ; rtn value always 0 +"RTN","BSDX07",253,0) + QUIT +"RTN","BSDX07",254,0) + ; +"RTN","BSDX07",255,0) +BSDXDEL(BSDXAPPTID) ;Private EP ; Deletes appointment BSDXAPPTID from ^BSDXAPPT +"RTN","BSDX07",256,0) + ; DO NOT USE except in emergencies to roll back an appointment set +"RTN","BSDX07",257,0) + N DA,DIK +"RTN","BSDX07",258,0) + S DIK="^BSDXAPPT(",DA=BSDXAPPTID +"RTN","BSDX07",259,0) + D ^DIK +"RTN","BSDX07",260,0) + Q +"RTN","BSDX07",261,0) + ; +"RTN","BSDX07",262,0) +ERR(BSDXI,BSDXERR) ;Error processing - different from error trap. +"RTN","BSDX07",263,0) + ; Unlock first +"RTN","BSDX07",264,0) + L -^BSDXPAT(BSDXPATID) +"RTN","BSDX07",265,0) + ; If last line is $C(31), we are done. No more errors to send to client. +"RTN","BSDX07",266,0) + I ^BSDXTMP($J,$O(^BSDXTMP($J," "),-1))=$C(31) QUIT +"RTN","BSDX07",267,0) + S BSDXI=BSDXI+1 +"RTN","BSDX07",268,0) + S BSDXERR=$TR(BSDXERR,"^","~") +"RTN","BSDX07",269,0) + S ^BSDXTMP($J,BSDXI)="0^"_BSDXERR_$C(30) +"RTN","BSDX07",270,0) + S BSDXI=BSDXI+1 +"RTN","BSDX07",271,0) + S ^BSDXTMP($J,BSDXI)=$C(31) +"RTN","BSDX07",272,0) + Q +"RTN","BSDX07",273,0) + ; +"RTN","BSDX07",274,0) ETRAP ;EP Error trap entry -"RTN","BSDX07",296,0) - N $ET S $ET="D ^%ZTER HALT" ; Emergency Error Trap -"RTN","BSDX07",297,0) - ; Rollback, otherwise ^XTER will be empty from future rollback -"RTN","BSDX07",298,0) - I $TL>0 TROLLBACK -"RTN","BSDX07",299,0) - D ^%ZTER -"RTN","BSDX07",300,0) - S $EC="" ; Clear Error -"RTN","BSDX07",301,0) - ; Log error message and send to client -"RTN","BSDX07",302,0) - I '$D(BSDXI) N BSDXI S BSDXI=0 -"RTN","BSDX07",303,0) - D ERR(BSDXI,"-100~BSDX07 Error: "_$G(%ZTERZE)) -"RTN","BSDX07",304,0) - Q -"RTN","BSDX07",305,0) - ; -"RTN","BSDX07",306,0) -DAY ;;^SUN^MON^TUES^WEDNES^THURS^FRI^SATUR -"RTN","BSDX07",307,0) - ; -"RTN","BSDX07",308,0) -DOW S %=$E(X,1,3),Y=$E(X,4,5),Y=Y>2&'(%#4)+$E("144025036146",Y) -"RTN","BSDX07",309,0) - F %=%:-1:281 S Y=%#4=1+1+Y -"RTN","BSDX07",310,0) - S Y=$E(X,6,7)+Y#7 -"RTN","BSDX07",311,0) - Q -"RTN","BSDX07",312,0) - ; -"RTN","BSDX07",313,0) -AVUPDT(BSDXSCD,BSDXSTART,BSDXLEN) ;Update RPMS Clinic availability -"RTN","BSDX07",314,0) - ;SEE SDM1 -"RTN","BSDX07",315,0) - N Y,DFN -"RTN","BSDX07",316,0) - N SL,STARTDAY,X,SC,SB,HSI,SI,STR,SDDIF,SDMAX,SDDATE,SDDMAX,SDSDATE,CCXN,MXOK,COV,SDPROG -"RTN","BSDX07",317,0) - N X1,SDEDT,X2,SD,SM,SS,S,SDLOCK,ST,I -"RTN","BSDX07",318,0) - S Y=BSDXSCD,DFN=BSDXPATID -"RTN","BSDX07",319,0) - S SL=$G(^SC(+Y,"SL")),X=$P(SL,U,3),STARTDAY=$S($L(X):X,1:8),SC=Y,SB=STARTDAY-1/100,X=$P(SL,U,6),HSI=$S(X=1:X,X:X,1:4),SI=$S(X="":4,X<3:4,X:X,1:4),STR="#@!$* XXWVUTSRQPONMLKJIHGFEDCBA0123456789jklmnopqrstuvwxyz",SDDIF=$S(HSI<3:8/HSI,1:2) K Y -"RTN","BSDX07",320,0) - ;Determine maximum days for scheduling -"RTN","BSDX07",321,0) - S SDMAX(1)=$P($G(^SC(+SC,"SDP")),U,2) S:'SDMAX(1) SDMAX(1)=365 -"RTN","BSDX07",322,0) - S (SDMAX,SDDMAX)=$$FMADD^XLFDT(DT,SDMAX(1)) -"RTN","BSDX07",323,0) - S SDDATE=BSDXSTART -"RTN","BSDX07",324,0) - S SDSDATE=SDDATE,SDDATE=SDDATE\1 -"RTN","BSDX07",325,0) -1 ;L Q:$D(SDXXX) S CCXN=0 K MXOK,COV,SDPROT Q:DFN<0 S SC=+SC -"RTN","BSDX07",326,0) - Q:$D(SDXXX) S CCXN=0 K MXOK,COV,SDPROT Q:DFN<0 S SC=+SC -"RTN","BSDX07",327,0) - S X1=DT,SDEDT=365 S:$D(^SC(SC,"SDP")) SDEDT=$P(^SC(SC,"SDP"),"^",2) -"RTN","BSDX07",328,0) - S X2=SDEDT D C^%DTC S SDEDT=X -"RTN","BSDX07",329,0) - S Y=BSDXSTART -"RTN","BSDX07",330,0) -EN1 S (X,SD)=Y,SM=0 D DOW -"RTN","BSDX07",331,0) -S I '$D(^SC(SC,"ST",$P(SD,"."),1)) S SS=+$O(^SC(+SC,"T"_Y,SD)) Q:SS'>0 Q:^(SS,1)="" S ^SC(+SC,"ST",$P(SD,"."),1)=$E($P($T(DAY),U,Y+2),1,2)_" "_$E(SD,6,7)_$J("",SI+SI-6)_^(1),^(0)=$P(SD,".") -"RTN","BSDX07",332,0) - S S=BSDXLEN -"RTN","BSDX07",333,0) - ;Check if BSDXLEN evenly divisible by appointment length -"RTN","BSDX07",334,0) - S RPMSL=$P(SL,U) -"RTN","BSDX07",335,0) - I BSDXLEN9 -"RTN","BSDX07",342,0) - L +^SC(SC,"ST",$P(SD,"."),1):5 G:'$T SC -"RTN","BSDX07",343,0) - S SDLOCK=0,S=^SC(SC,"ST",$P(SD,"."),1) -"RTN","BSDX07",344,0) - S I=SD#1-SB*100,ST=I#1*SI\.6+($P(I,".")*SI),SS=SL*HSI/60*SDDIF+ST+ST -"RTN","BSDX07",345,0) - I (I<1!'$F(S,"["))&(S'["CAN") L -^SC(SC,"ST",$P(SD,"."),1) Q -"RTN","BSDX07",346,0) - I SM<7 S %=$F(S,"[",SS-1) S:'%!($P(SL,"^",6)<3) %=999 I $F(S,"]",SS)'<%!(SDDIF=2&$E(S,ST+ST+1,SS-1)["[") S SM=7 -"RTN","BSDX07",347,0) - ; -"RTN","BSDX07",348,0) -SP I ST+ST>$L(S),$L(S)<80 S S=S_" " G SP -"RTN","BSDX07",349,0) - S SDNOT=1 -"RTN","BSDX07",350,0) - S ABORT=0 -"RTN","BSDX07",351,0) - F I=ST+ST:SDDIF:SS-SDDIF D Q:ABORT -"RTN","BSDX07",352,0) - . S ST=$E(S,I+1) S:ST="" ST=" " -"RTN","BSDX07",353,0) - . S Y=$E(STR,$F(STR,ST)-2) -"RTN","BSDX07",354,0) - . I S["CAN"!(ST="X"&($D(^SC(+SC,"ST",$P(SD,"."),"CAN")))) S ABORT=1 Q -"RTN","BSDX07",355,0) - . I Y="" S ABORT=1 Q -"RTN","BSDX07",356,0) - . S:Y'?1NL&(SM<6) SM=6 S ST=$E(S,I+2,999) S:ST="" ST=" " S S=$E(S,1,I)_Y_ST -"RTN","BSDX07",357,0) - . Q -"RTN","BSDX07",358,0) - S ^SC(SC,"ST",$P(SD,"."),1)=S -"RTN","BSDX07",359,0) - L -^SC(SC,"ST",$P(SD,"."),1) -"RTN","BSDX07",360,0) - Q +"RTN","BSDX07",275,0) + N $ET S $ET="D ^%ZTER HALT" ; Emergency Error Trap +"RTN","BSDX07",276,0) + D ^%ZTER +"RTN","BSDX07",277,0) + ; +"RTN","BSDX07",278,0) + I +$G(BSDXAPPTID) D ROLLBACK(BSDXAPPTID,.BSDXC) ; Rollback if BSDXAPPTID exists +"RTN","BSDX07",279,0) + ; +"RTN","BSDX07",280,0) + ; Log error message and send to client +"RTN","BSDX07",281,0) + I '$D(BSDXI) N BSDXI S BSDXI=0 +"RTN","BSDX07",282,0) + D ERR(BSDXI,"-100~BSDX07 Error: "_$G(%ZTERZE)) +"RTN","BSDX07",283,0) + Q:$Q 1_U_"Mumps Error" Q +"RTN","BSDX07",284,0) + ; "RTN","BSDX08") -0^8^B118482818 +0^8^B46874843 "RTN","BSDX08",1,0) -BSDX08 ; VW/UJO/SMH - WINDOWS SCHEDULING RPCS ; 4/28/11 10:17am +BSDX08 ; VW/UJO/SMH - WINDOWS SCHEDULING RPCS ; 7/9/12 4:22pm "RTN","BSDX08",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX08",3,0) ; "RTN","BSDX08",4,0) @@ -4207,683 +4065,475 @@ BSDX08 ; VW/UJO/SMH - WINDOWS SCHEDULING RPCS ; 4/28/11 10:17am "RTN","BSDX08",7,0) ; 3101022 UJO/SMH v1.42 "RTN","BSDX08",8,0) - ; - Transaction now restartable. Thanks to + ; - Transaction work. As of v 1.7, all work here has been superceded "RTN","BSDX08",9,0) - ; --> Zach Gonzalez and Rick Marshall for fix. + ; - Refactoring of AVUPDT - never tested though. "RTN","BSDX08",10,0) - ; - Extra TROLLBACK in Lock Statement when lock fails. -"RTN","BSDX08",11,0) - ; --> Removed--Rollback is already in ERR tag. -"RTN","BSDX08",12,0) - ; - Added new statements to old SD code in AVUPDT to obviate -"RTN","BSDX08",13,0) - ; --> need to restore variables in transaction -"RTN","BSDX08",14,0) - ; - Refactored this chunk of code. Don't really know whether it -"RTN","BSDX08",15,0) - ; --> worked in the first place. Waiting for bug report to know. -"RTN","BSDX08",16,0) ; - Refactored all of APPDEL. -"RTN","BSDX08",17,0) +"RTN","BSDX08",11,0) ; -"RTN","BSDX08",18,0) +"RTN","BSDX08",12,0) ; 3111125 UJO/SMH v1.5 -"RTN","BSDX08",19,0) +"RTN","BSDX08",13,0) ; - Added ability to remove checked in appointments. Added a couple -"RTN","BSDX08",20,0) +"RTN","BSDX08",14,0) ; of units tests for that under UT2. -"RTN","BSDX08",21,0) - ; - Minor reformatting because of how KIDS adds tabs. -"RTN","BSDX08",22,0) +"RTN","BSDX08",15,0) ; -"RTN","BSDX08",23,0) +"RTN","BSDX08",16,0) + ; 3120625 VEN/SMH v1.7 +"RTN","BSDX08",17,0) + ; - Transactions removed. Code refactored to work w/o txns. +"RTN","BSDX08",18,0) + ; - Moved AVUPDT to AVUPDTCN in BSDXAPI1. BSDXAPI takes care of calling +"RTN","BSDX08",19,0) + ; that. +"RTN","BSDX08",20,0) + ; +"RTN","BSDX08",21,0) ; Error Reference: -"RTN","BSDX08",24,0) +"RTN","BSDX08",22,0) ; -1~BSDX08: Appt record is locked. Please contact technical support. -"RTN","BSDX08",25,0) +"RTN","BSDX08",23,0) ; -2~BSDX08: Invalid Appointment ID -"RTN","BSDX08",26,0) +"RTN","BSDX08",24,0) ; -3~BSDX08: Invalid Appointment ID -"RTN","BSDX08",27,0) +"RTN","BSDX08",25,0) ; -4~BSDX08: Cancelled appointment does not have a Resouce ID -"RTN","BSDX08",28,0) +"RTN","BSDX08",26,0) ; -5~BSDX08: Resouce ID does not exist in BSDX RESOURCE -"RTN","BSDX08",29,0) +"RTN","BSDX08",27,0) ; -6~BSDX08: Invalid Hosp Location stored in Database -"RTN","BSDX08",30,0) +"RTN","BSDX08",28,0) ; -7~BSDX08: Patient does not have an appointment in PIMS Clinic -"RTN","BSDX08",31,0) +"RTN","BSDX08",29,0) ; -8^BSDX08: Unable to find associated PIMS appointment for this patient -"RTN","BSDX08",32,0) +"RTN","BSDX08",30,0) ; -9^BSDX08: BSDXAPI returned an error: (error) -"RTN","BSDX08",33,0) +"RTN","BSDX08",31,0) + ; -10^BSDX08: $$BSDXCAN failed (Fileman filing error) +"RTN","BSDX08",32,0) ; -100~BSDX08 Error: (Mumps Error) +"RTN","BSDX08",33,0) + ; "RTN","BSDX08",34,0) - ; -"RTN","BSDX08",35,0) APPDELD(BSDXY,BSDXAPTID,BSDXTYP,BSDXCR,BSDXNOT) ;EP -"RTN","BSDX08",36,0) +"RTN","BSDX08",35,0) ;Entry point for debugging +"RTN","BSDX08",36,0) + ;D DEBUG^%Serenji("APPDEL^BSDX08(.BSDXY,BSDXAPTID,BSDXTYP,BSDXCR,BSDXNOT)") "RTN","BSDX08",37,0) - D DEBUG^%Serenji("APPDEL^BSDX08(.BSDXY,BSDXAPTID,BSDXTYP,BSDXCR,BSDXNOT)") -"RTN","BSDX08",38,0) Q -"RTN","BSDX08",39,0) +"RTN","BSDX08",38,0) ; +"RTN","BSDX08",39,0) +APPDEL(BSDXY,BSDXAPTID,BSDXTYP,BSDXCR,BSDXNOT) ; Private EP "RTN","BSDX08",40,0) -UT ; Unit Tests + ;Called by RPC: BSDX CANCEL APPOINTMENT "RTN","BSDX08",41,0) - ; Test 1: Make normal appointment and cancel it. See if every thing works + ;Cancels existing appointment in BSDX APPOINTMENT and 44/2 subfiles "RTN","BSDX08",42,0) - N ZZZ + ;Input Parameters: "RTN","BSDX08",43,0) - D APPADD^BSDX07(.ZZZ,3110123.2,3110123.3,4,"Dr Office",10,"Sam's Note",1) + ; - BSDXAPTID is entry number in BSDX APPOINTMENT file "RTN","BSDX08",44,0) - S APPID=+$P(^BSDXTMP($J,1),U) + ; - BSDXTYP is C for clinic-cancelled and PC for patient cancelled "RTN","BSDX08",45,0) - D APPDEL^BSDX08(.ZZZ,APPID,"PC",1,"Sam's Cancel Note") + ; - BSDXCR is pointer to CANCELLATION REASON File (409.2) "RTN","BSDX08",46,0) - I $P(^BSDXAPPT(APPID,0),U,12)'>0 W "Error in Cancellation-1" + ; - BSDXNOT is user note "RTN","BSDX08",47,0) - I $O(^SC(2,"S",3110123.2,1,0))]"" W "Error in Cancellation-2" + ; "RTN","BSDX08",48,0) - I $P(^DPT(4,"S",3110123.2,0),U,2)'="PC" W "Error in Cancellation-3" + ; Returns error code in recordset field ERRORID. Empty string is success. "RTN","BSDX08",49,0) - I ^DPT(4,"S",3110123.2,"R")'="Sam's Cancel Note" W "Error in Cancellation-4" + ; Returns Global Array. Must use this type in RPC. "RTN","BSDX08",50,0) ; "RTN","BSDX08",51,0) - ; Test 2: Check for -1 + ; Return Array: set Return and clear array "RTN","BSDX08",52,0) - ; Make appt + S BSDXY=$NA(^BSDXTMP($J)) "RTN","BSDX08",53,0) - D APPADD^BSDX07(.ZZZ,3110125.2,3110125.3,4,"Dr Office",10,"Sam's Note",1) + K ^BSDXTMP($J) "RTN","BSDX08",54,0) - ; Lock the node in another job -"RTN","BSDX08",55,0) - S APPID=+$P(^BSDXTMP($J,1),U) -"RTN","BSDX08",56,0) - ; W "Lock ^BSDXAPPT("_APPID_") in another session. You have 10 seconds." H 10 -"RTN","BSDX08",57,0) - D APPDEL^BSDX08(.ZZZ,APPID,"PC",1,"Sam's Cancel Note") -"RTN","BSDX08",58,0) ; +"RTN","BSDX08",55,0) + ; Set min DUZ vars if they don't exist +"RTN","BSDX08",56,0) + D ^XBKVAR +"RTN","BSDX08",57,0) + ; +"RTN","BSDX08",58,0) + ; $ET "RTN","BSDX08",59,0) - ; Test 3: Check for -100 + N $ET S $ET="G ETRAP^BSDX08" "RTN","BSDX08",60,0) - S bsdxdie=1 + ; "RTN","BSDX08",61,0) - D APPADD^BSDX07(.ZZZ,3110126.2,3110126.3,4,"Dr Office",10,"Sam's Note",1) + ; Counter "RTN","BSDX08",62,0) - S APPID=+$P(^BSDXTMP($J,1),U) + N BSDXI S BSDXI=0 "RTN","BSDX08",63,0) - D APPDEL^BSDX08(.ZZZ,APPID,"PC",1,"Reasons") + ; "RTN","BSDX08",64,0) - I $P(^BSDXTMP($J,1),"~")'=-100 W "Error in -100",! + ; Header Node "RTN","BSDX08",65,0) - K bsdxdie + S ^BSDXTMP($J,BSDXI)="T00100ERRORID"_$C(30) "RTN","BSDX08",66,0) ; "RTN","BSDX08",67,0) - ; Test 4: Restartable transaction + ; Turn off SDAM APPT PROTOCOL BSDX Entries "RTN","BSDX08",68,0) - S bsdxrestart=1 + N BSDXNOEV "RTN","BSDX08",69,0) - D APPADD^BSDX07(.ZZZ,3110128.2,3110128.3,4,"Dr Office",10,"Sam's Note",1) + S BSDXNOEV=1 ;Don't execute BSDX CANCEL APPOINTMENT protocol "RTN","BSDX08",70,0) - S APPID=+$P(^BSDXTMP($J,1),U) + ; "RTN","BSDX08",71,0) - D APPDEL^BSDX08(.ZZZ,APPID,"PC",1,"Reasons") + ;;;test for error inside transaction. See if %ZTER works "RTN","BSDX08",72,0) - I $P(^DPT(4,"S",3110128.2,0),U,2)'="PC" W "Error in Restartable Transaction",! + I $G(BSDXDIE1) N X S X=1/0 "RTN","BSDX08",73,0) ; "RTN","BSDX08",74,0) - ; Test 5: for invalid Appointment ID (-2 and -3) + ; Check appointment ID and whether it exists "RTN","BSDX08",75,0) - D APPDEL^BSDX08(.ZZZ,0,"PC",1,"Reasons") + I '+BSDXAPTID D ERR(BSDXI,"-2~BSDX08: Invalid Appointment ID") Q "RTN","BSDX08",76,0) - I $P(^BSDXTMP($J,1),"~")'=-2 W "Error in -2",! + I '$D(^BSDXAPPT(BSDXAPTID,0)) D ERR(BSDXI,"-3~BSDX08: Invalid Appointment ID") Q "RTN","BSDX08",77,0) - D APPDEL^BSDX08(.ZZZ,999999,"PC",1,"Reasons") + ; "RTN","BSDX08",78,0) - I $P(^BSDXTMP($J,1),"~")'=-3 W "Error in -3",! + ; Lock BSDX node, only to synchronize access to the globals. "RTN","BSDX08",79,0) -UT2 ; More unit Tests + ; It's not expected that the error will ever happen as no filing "RTN","BSDX08",80,0) - ; + ; is supposed to take 5 seconds. "RTN","BSDX08",81,0) - ; Test 6: for Cancelling walkin and checked-in appointments + L +^BSDXAPPT(BSDXAPTID):5 E D ERR(BSDXI,"-1~BSDX08: Appt record is locked. Please contact technical support.") Q "RTN","BSDX08",82,0) - S BSDXSTART=$E($$NOW^XLFDT,1,12),BSDXEND=BSDXSTART+.0001 + ; "RTN","BSDX08",83,0) - D APPADD^BSDX07(.ZZZ,BSDXSTART,BSDXEND,4,"Dr Office",10,"Sam's Note",1) ; Add appt + ; Start Processing: "RTN","BSDX08",84,0) - S APPID=+$P(^BSDXTMP($J,1),U) + ; First, get data "RTN","BSDX08",85,0) - I APPID=0 W "Error in test 6",! + N BSDXNOD S BSDXNOD=^BSDXAPPT(BSDXAPTID,0) ; BSDX Appt Node "RTN","BSDX08",86,0) - D CHECKIN^BSDX25(.ZZZ,APPID,$$NOW^XLFDT) ; check-in + N BSDXPATID S BSDXPATID=$P(BSDXNOD,U,5) ; Patient ID "RTN","BSDX08",87,0) - D APPDEL^BSDX08(.ZZZ,APPID,"PC",10,"Cancel Note") ; Delete appt + N BSDXSTART S BSDXSTART=$P(BSDXNOD,U) ; Start Time "RTN","BSDX08",88,0) - I $P(^BSDXTMP($J,1),$C(30))'="" W "Error in test 6",! + ; "RTN","BSDX08",89,0) - ; + ; Check the resource ID and whether it exists "RTN","BSDX08",90,0) - ; Test 7: for cancelling walkin and checked-in appointments + N BSDXSC1 S BSDXSC1=$P(BSDXNOD,U,7) ;RESOURCEID "RTN","BSDX08",91,0) - S BSDXSTART=$E($$NOW^XLFDT,1,12)+.0001,BSDXEND=BSDXSTART+.0001 + ; If the resource id doesn't exist... "RTN","BSDX08",92,0) - D APPADD^BSDX07(.ZZZ,BSDXSTART,BSDXEND,4,"Dr Office",10,"Sam's Note",1) ; Add appt + I BSDXSC1="" D ERR(BSDXI,"-4~BSDX08: Cancelled appointment does not have a Resouce ID") QUIT "RTN","BSDX08",93,0) - S APPID=+$P(^BSDXTMP($J,1),U) + I '$D(^BSDXRES(BSDXSC1,0)) D ERR(BSDXI,"-5~BSDX08: Resouce ID does not exist in BSDX RESOURCE") QUIT "RTN","BSDX08",94,0) - I APPID=0 W "Error in test 6",! + ; "RTN","BSDX08",95,0) - D CHECKIN^BSDX25(.ZZZ,APPID,$$NOW^XLFDT) ; Checkin + ; "RTN","BSDX08",96,0) - S BSDXRES=$O(^BSDXRES("B","Dr Office","")) + ; Check if PIMS will let us cancel the appointment using $$CANCELCK^BSDXAPI "RTN","BSDX08",97,0) - S BSDXCLN=$P(^BSDXRES(BSDXRES,0),U,4) + ; Get zero node of resouce "RTN","BSDX08",98,0) - S BSDXRESULT=$$RMCI^BSDXAPI(4,BSDXCLN,BSDXSTART) ; remove checkin + N BSDXNOD S BSDXNOD=^BSDXRES(BSDXSC1,0) "RTN","BSDX08",99,0) - D APPDEL^BSDX08(.ZZZ,APPID,"PC",10,"Cancel Note") ; delete appt + ; Get Hosp location "RTN","BSDX08",100,0) - I $P(^BSDXTMP($J,1),$C(30))'="" W "Error in test 6",! + N BSDXLOC S BSDXLOC=$P(BSDXNOD,U,4) "RTN","BSDX08",101,0) - QUIT + ; Error indicator "RTN","BSDX08",102,0) -APPDEL(BSDXY,BSDXAPTID,BSDXTYP,BSDXCR,BSDXNOT) ;EP + N BSDXERR S BSDXERR=0 "RTN","BSDX08",103,0) - ;Called by RPC: BSDX CANCEL APPOINTMENT + ; "RTN","BSDX08",104,0) - ;Cancels existing appointment in BSDX APPOINTMENT and 44/2 subfiles + N BSDXC ; Array to pass to BSDXAPI "RTN","BSDX08",105,0) - ;Input Parameters: + ; "RTN","BSDX08",106,0) - ; - BSDXAPTID is entry number in BSDX APPOINTMENT file + I BSDXLOC D "RTN","BSDX08",107,0) - ; - BSDXTYP is C for clinic-cancelled and PC for patient cancelled + . S BSDXC("PAT")=BSDXPATID "RTN","BSDX08",108,0) - ; - BSDXCR is pointer to CANCELLATION REASON File (409.2) + . S BSDXC("CLN")=BSDXLOC "RTN","BSDX08",109,0) - ; - BSDXNOT is user note + . S BSDXC("TYP")=BSDXTYP "RTN","BSDX08",110,0) - ; + . S BSDXC("ADT")=BSDXSTART "RTN","BSDX08",111,0) - ; Returns error code in recordset field ERRORID. Empty string is success. + . S BSDXC("CDT")=$$NOW^XLFDT() "RTN","BSDX08",112,0) - ; Returns Global Array. Must use this type in RPC. + . S BSDXC("NOT")=BSDXNOT "RTN","BSDX08",113,0) - ; + . S:'+$G(BSDXCR) BSDXCR=11 ;Other "RTN","BSDX08",114,0) - ; Return Array: set Return and clear array + . S BSDXC("CR")=BSDXCR "RTN","BSDX08",115,0) - S BSDXY=$NA(^BSDXTMP($J)) + . S BSDXC("USR")=DUZ "RTN","BSDX08",116,0) - K ^BSDXTMP($J) + . ; "RTN","BSDX08",117,0) - ; + . S BSDXERR=$$CANCELCK^BSDXAPI(.BSDXC) ; 0 or 1^error message "RTN","BSDX08",118,0) - ; Set min DUZ vars if they don't exist + ; If error, quit. No need to rollback as no changes took place. "RTN","BSDX08",119,0) - D ^XBKVAR + I BSDXERR D ERR(BSDXI,"-9~BSDX08: BSDXAPI reports that "_$P(BSDXERR,U,2)) QUIT "RTN","BSDX08",120,0) ; "RTN","BSDX08",121,0) - ; $ET + I $G(BSDXDIE2) N X S X=1/0 "RTN","BSDX08",122,0) - N $ET S $ET="G ETRAP^BSDX08" + ; "RTN","BSDX08",123,0) - ; + ; Now cancel the appointment for real "RTN","BSDX08",124,0) - ; Counter + ; BSDXAPPT First; no need for rollback if error occured. "RTN","BSDX08",125,0) - N BSDXI S BSDXI=0 + N BSDXERR S BSDXERR=$$BSDXCAN(BSDXAPTID) ; Add a cancellation date in BSDX APPOINTMENT "RTN","BSDX08",126,0) - ; Header Node + I BSDXERR D ERR(BSDXI,"-10~BSDX08: $$BSDXCAN failed (Fileman filing error): "_$P(BSDXERR,U,2)) QUIT "RTN","BSDX08",127,0) - S ^BSDXTMP($J,BSDXI)="T00100ERRORID"_$C(30) + ; "RTN","BSDX08",128,0) - ; + ; Then PIMS: "RTN","BSDX08",129,0) - ; Lock BSDX node, only to synchronize access to the globals. + ; cancel appt in "S" nodes in file 2 and 44, then update Legacy PIMS Availability "RTN","BSDX08",130,0) - ; It's not expected that the error will ever happen as no filing + ; If error happens, must rollback ^BSDXAPPT "RTN","BSDX08",131,0) - ; is supposed to take 5 seconds. + I BSDXLOC S BSDXERR=$$CANCEL^BSDXAPI(.BSDXC) ; Cancel through BSDXAPI "RTN","BSDX08",132,0) - L +^BSDXAPPT(BSDXAPTID):5 I '$T D ERR(BSDXI,"-1~BSDX08: Appt record is locked. Please contact technical support.") Q + ; Rollback BSDXAPPT if error occurs "RTN","BSDX08",133,0) - ; + I BSDXERR D ERR(BSDXI,"-9^BSDX08: BSDXAPI returned an error: "_$P(BSDXERR,U,2)),ROLLBACK(BSDXAPTID) QUIT "RTN","BSDX08",134,0) - ;Restartable Transaction; restore paramters when starting. -"RTN","BSDX08",135,0) - ; (Params restored are what's passed here + BSDXI) -"RTN","BSDX08",136,0) - TSTART (BSDXY,BSDXAPTID,BSDXTYP,BSDXCR,BSDXNOT,BSDXI):T="BSDX CANCEL APPOINTEMENT^BSDX08" -"RTN","BSDX08",137,0) ; +"RTN","BSDX08",135,0) + L -^BSDXAPPT(BSDXAPTID) +"RTN","BSDX08",136,0) + S BSDXI=BSDXI+1 +"RTN","BSDX08",137,0) + S ^BSDXTMP($J,BSDXI)=""_$C(30) "RTN","BSDX08",138,0) - ; Turn off SDAM APPT PROTOCOL BSDX Entries + S BSDXI=BSDXI+1 "RTN","BSDX08",139,0) - N BSDXNOEV + S ^BSDXTMP($J,BSDXI)=$C(31) "RTN","BSDX08",140,0) - S BSDXNOEV=1 ;Don't execute BSDX CANCEL APPOINTMENT protocol + Q "RTN","BSDX08",141,0) ; "RTN","BSDX08",142,0) - ;;;test for error inside transaction. See if %ZTER works +BSDXCAN(BSDXAPTID) ; $$; Private; Cancel BSDX APPOINTMENT entry "RTN","BSDX08",143,0) - I $G(bsdxdie) S X=1/0 + ; Input: Appt IEN in ^BSDXAPPT "RTN","BSDX08",144,0) - ;;;test + ; Output: 0 for success and 1^Msg for failure "RTN","BSDX08",145,0) - ;;;test for TRESTART + N BSDXDATE,BSDXIENS,BSDXFDA,BSDXMSG "RTN","BSDX08",146,0) - I $G(bsdxrestart) K bsdxrestart TRESTART + S BSDXDATE=$$NOW^XLFDT() "RTN","BSDX08",147,0) - ;;;test + S BSDXIENS=BSDXAPTID_"," "RTN","BSDX08",148,0) - ; + S BSDXFDA(9002018.4,BSDXIENS,.12)=BSDXDATE "RTN","BSDX08",149,0) - ; Check appointment ID and whether it exists + D FILE^DIE("","BSDXFDA","BSDXMSG") "RTN","BSDX08",150,0) - I '+BSDXAPTID D ERR(BSDXI,"-2~BSDX08: Invalid Appointment ID") Q + I $D(BSDXMSG) Q 1_U_BSDXMSG("DIERR",1,"TEXT",1) "RTN","BSDX08",151,0) - I '$D(^BSDXAPPT(BSDXAPTID,0)) D ERR(BSDXI,"-3~BSDX08: Invalid Appointment ID") Q + QUIT 0 "RTN","BSDX08",152,0) ; "RTN","BSDX08",153,0) - ; Start Processing: +ROLLBACK(BSDXAPTID) ; Proc; Private; Rollback cancellation "RTN","BSDX08",154,0) - ; First, add cancellation date to appt entry in BSDX APPOINTMENT + ; Input same as $$BSDXCAN "RTN","BSDX08",155,0) - N BSDXNOD S BSDXNOD=^BSDXAPPT(BSDXAPTID,0) ; BSDX Appt Node + N BSDXIENS S BSDXIENS=BSDXAPTID_"," "RTN","BSDX08",156,0) - N BSDXPATID S BSDXPATID=$P(BSDXNOD,U,5) ; Patient ID + N BSDXFDA S BSDXFDA(9002018.4,BSDXIENS,.12)="@" "RTN","BSDX08",157,0) - N BSDXSTART S BSDXSTART=$P(BSDXNOD,U) ; Start Time + N BSDXMSG "RTN","BSDX08",158,0) - D BSDXCAN(BSDXAPTID) ; Add a cancellation date in BSDX APPOINTMENT -"RTN","BSDX08",159,0) - ; -"RTN","BSDX08",160,0) - ; Second, cancel appt in "S" nodes in file 2 and 44, then update Legacy PIMS Availability -"RTN","BSDX08",161,0) - N BSDXSC1 S BSDXSC1=$P(BSDXNOD,U,7) ;RESOURCEID -"RTN","BSDX08",162,0) - ; If the resouce id doesn't exist... -"RTN","BSDX08",163,0) - I BSDXSC1="" D ERR(BSDXI,"-4~BSDX08: Cancelled appointment does not have a Resouce ID") QUIT -"RTN","BSDX08",164,0) - I '$D(^BSDXRES(BSDXSC1,0)) D ERR(BSDXI,"-5~BSDX08: Resouce ID does not exist in BSDX RESOURCE") QUIT -"RTN","BSDX08",165,0) - ; Get zero node of resouce -"RTN","BSDX08",166,0) - S BSDXNOD=^BSDXRES(BSDXSC1,0) -"RTN","BSDX08",167,0) - ; Get Hosp location -"RTN","BSDX08",168,0) - N BSDXLOC S BSDXLOC=$P(BSDXNOD,U,4) -"RTN","BSDX08",169,0) - ; Error indicator for Hosp Location filing for getting out of routine -"RTN","BSDX08",170,0) - N BSDXERR S BSDXERR=0 -"RTN","BSDX08",171,0) - ; Only file in 2/44 if there is an associated hospital location -"RTN","BSDX08",172,0) - I BSDXLOC D QUIT:BSDXERR -"RTN","BSDX08",173,0) - . I '$D(^SC(BSDXLOC,0)) S BSDXERR=1 D ERR(BSDXI,"-6~BSDX08: Invalid Hosp Location stored in Database") QUIT -"RTN","BSDX08",174,0) - . ; Get the IEN of the appointment in the "S" node of ^SC -"RTN","BSDX08",175,0) - . N BSDXSCIEN -"RTN","BSDX08",176,0) - . S BSDXSCIEN=$$SCIEN^BSDXAPI(BSDXPATID,BSDXLOC,BSDXSTART) -"RTN","BSDX08",177,0) - . I BSDXSCIEN="" S BSDXERR=1 D ERR(BSDXI,"-7~BSDX08: Patient does not have an appointment in PIMS Clinic") QUIT -"RTN","BSDX08",178,0) - . ; Get the appointment node -"RTN","BSDX08",179,0) - . S BSDXNOD=$G(^SC(BSDXLOC,"S",BSDXSTART,1,BSDXSCIEN,0)) -"RTN","BSDX08",180,0) - . I BSDXNOD="" S BSDXERR=1 D ERR(BSDXI,"-8^BSDX08: Unable to find associated PIMS appointment for this patient") QUIT -"RTN","BSDX08",181,0) - . N BSDXLEN S BSDXLEN=$P(BSDXNOD,U,2) -"RTN","BSDX08",182,0) - . ; Cancel through BSDXAPI -"RTN","BSDX08",183,0) - . N BSDXZ -"RTN","BSDX08",184,0) - . D APCAN(.BSDXZ,BSDXLOC,BSDXPATID,BSDXSTART) -"RTN","BSDX08",185,0) - . I +BSDXZ>0 S BSDXERR=1 D ERR(BSDXI,"-9^BSDX08: BSDXAPI returned an error: "_$P(BSDXZ,U,2)) QUIT -"RTN","BSDX08",186,0) - . ; Update Legacy PIMS clinic Availability -"RTN","BSDX08",187,0) - . D AVUPDT(BSDXLOC,BSDXSTART,BSDXLEN) -"RTN","BSDX08",188,0) - ; -"RTN","BSDX08",189,0) - TCOMMIT -"RTN","BSDX08",190,0) - L -^BSDXAPPT(BSDXAPTID) -"RTN","BSDX08",191,0) - S BSDXI=BSDXI+1 -"RTN","BSDX08",192,0) - S ^BSDXTMP($J,BSDXI)=""_$C(30) -"RTN","BSDX08",193,0) - S BSDXI=BSDXI+1 -"RTN","BSDX08",194,0) - S ^BSDXTMP($J,BSDXI)=$C(31) -"RTN","BSDX08",195,0) - Q -"RTN","BSDX08",196,0) - ; -"RTN","BSDX08",197,0) -AVUPDT(BSDXSCD,BSDXSTART,BSDXLEN) ;Update Legacy PIMS Clinic availability -"RTN","BSDX08",198,0) - ;See SDCNP0 -"RTN","BSDX08",199,0) - N SD,S ; Start Date -"RTN","BSDX08",200,0) - S (SD,S)=BSDXSTART -"RTN","BSDX08",201,0) - N I ; Clinic IEN in 44 -"RTN","BSDX08",202,0) - S I=BSDXSCD -"RTN","BSDX08",203,0) - ; if day has no schedule in legacy PIMS, forget about this update. -"RTN","BSDX08",204,0) - Q:'$D(^SC(I,"ST",SD\1,1)) -"RTN","BSDX08",205,0) - N SL ; Clinic characteristics node (length of appt, when appts start etc) -"RTN","BSDX08",206,0) - S SL=^SC(I,"SL") -"RTN","BSDX08",207,0) - N X ; Hour Clinic Display Begins -"RTN","BSDX08",208,0) - S X=$P(SL,U,3) -"RTN","BSDX08",209,0) - N STARTDAY ; When does the day start? -"RTN","BSDX08",210,0) - S STARTDAY=$S($L(X):X,1:8) ; If defined, use it; otherwise, 8am -"RTN","BSDX08",211,0) - N SB ; ?? Who knows? Day Start - 1 divided by 100. -"RTN","BSDX08",212,0) - S SB=STARTDAY-1/100 -"RTN","BSDX08",213,0) - S X=$P(SL,U,6) ; Now X is Display increments per hour -"RTN","BSDX08",214,0) - N HSI ; Slots per hour, try 1 -"RTN","BSDX08",215,0) - S HSI=$S(X:X,1:4) ; if defined, use it; otherwise, 4 -"RTN","BSDX08",216,0) - N SI ; Slots per hour, try 2 -"RTN","BSDX08",217,0) - S SI=$S(X="":4,X<3:4,X:X,1:4) ; If slots "", or less than 3, then 4 -"RTN","BSDX08",218,0) - N STR ; ?? -"RTN","BSDX08",219,0) - S STR="#@!$* XXWVUTSRQPONMLKJIHGFEDCBA0123456789jklmnopqrstuvwxyz" -"RTN","BSDX08",220,0) - N SDDIF ; Slots per hour diff?? -"RTN","BSDX08",221,0) - S SDDIF=$S(HSI<3:8/HSI,1:2) -"RTN","BSDX08",222,0) - S SL=BSDXLEN ; Dammit, reusing variable; SL now Appt Length from GUI -"RTN","BSDX08",223,0) - S S=^SC(I,"ST",SD\1,1) ; reusing var again; S now Day Pattern from PIMS -"RTN","BSDX08",224,0) - N Y ; Hours since start of Date -"RTN","BSDX08",225,0) - S Y=SD#1-SB*100 ;SD#1=FM Time portion; -SB minus start of day; conv to hrs -"RTN","BSDX08",226,0) - N ST ; ?? -"RTN","BSDX08",227,0) - ; Y#1 -> Minutes; *SI -> * Slots per hour; \.6 trunc min to hour -"RTN","BSDX08",228,0) - ; Y\1 -> Hours since start of day; * SI: * slots -"RTN","BSDX08",229,0) - S ST=Y#1*SI\.6+(Y\1*SI) -"RTN","BSDX08",230,0) - N SS ; how many slots are supposed to be taken by appointment -"RTN","BSDX08",231,0) - S SS=SL*HSI/60 ; (nb: try SL: 30 min; HSI: 4 slots) -"RTN","BSDX08",232,0) - N I -"RTN","BSDX08",233,0) - I Y'<1 D ; If Hours since start of Date is greater than 1 -"RTN","BSDX08",234,0) - . ; loop through pattern. Tired of documenting. -"RTN","BSDX08",235,0) - . F I=ST+ST:SDDIF D Q:Y="" Q:SS'>0 -"RTN","BSDX08",236,0) - . . S Y=$E(STR,$F(STR,$E(S,I+1))) Q:Y="" -"RTN","BSDX08",237,0) - . . S S=$E(S,1,I)_Y_$E(S,I+2,999) -"RTN","BSDX08",238,0) - . . S SS=SS-1 -"RTN","BSDX08",239,0) - . . Q:SS'>0 -"RTN","BSDX08",240,0) - S ^SC(BSDXSCD,"ST",SD\1,1)=S ; new pattern; global set -"RTN","BSDX08",241,0) - Q -"RTN","BSDX08",242,0) - ; -"RTN","BSDX08",243,0) -APCAN(BSDXZ,BSDXLOC,BSDXDFN,BSDXSD) ; -"RTN","BSDX08",244,0) - ;Cancel appointment for patient BSDXDFN in clinic BSDXSC1 -"RTN","BSDX08",245,0) - ;at time BSDXSD -"RTN","BSDX08",246,0) - N BSDXC,%H -"RTN","BSDX08",247,0) - S BSDXC("PAT")=BSDXPATID -"RTN","BSDX08",248,0) - S BSDXC("CLN")=BSDXLOC -"RTN","BSDX08",249,0) - S BSDXC("TYP")=BSDXTYP -"RTN","BSDX08",250,0) - S BSDXC("ADT")=BSDXSD -"RTN","BSDX08",251,0) - S %H=$H D YMD^%DTC -"RTN","BSDX08",252,0) - S BSDXC("CDT")=X+% -"RTN","BSDX08",253,0) - S BSDXC("NOT")=BSDXNOT -"RTN","BSDX08",254,0) - S:'+$G(BSDXCR) BSDXCR=11 ;Other -"RTN","BSDX08",255,0) - S BSDXC("CR")=BSDXCR -"RTN","BSDX08",256,0) - S BSDXC("USR")=DUZ -"RTN","BSDX08",257,0) - ; -"RTN","BSDX08",258,0) - S BSDXZ=$$CANCEL^BSDXAPI(.BSDXC) -"RTN","BSDX08",259,0) - Q -"RTN","BSDX08",260,0) - ; -"RTN","BSDX08",261,0) -BSDXCAN(BSDXAPTID) ; -"RTN","BSDX08",262,0) - ;Cancel BSDX APPOINTMENT entry -"RTN","BSDX08",263,0) - N %DT,X,BSDXDATE,Y,BSDXIENS,BSDXFDA,BSDXMSG -"RTN","BSDX08",264,0) - S %DT="XT",X="NOW" D ^%DT ; X ^DD("DD") -"RTN","BSDX08",265,0) - S BSDXDATE=Y -"RTN","BSDX08",266,0) - S BSDXIENS=BSDXAPTID_"," -"RTN","BSDX08",267,0) - S BSDXFDA(9002018.4,BSDXIENS,.12)=BSDXDATE -"RTN","BSDX08",268,0) - K BSDXMSG -"RTN","BSDX08",269,0) D FILE^DIE("","BSDXFDA","BSDXMSG") -"RTN","BSDX08",270,0) - Q -"RTN","BSDX08",271,0) +"RTN","BSDX08",159,0) + ;I $D(BSDXMSG) ; Not sure what to do. We are already handling an error. +"RTN","BSDX08",160,0) + QUIT +"RTN","BSDX08",161,0) ; -"RTN","BSDX08",272,0) +"RTN","BSDX08",162,0) CANEVT(BSDXPAT,BSDXSTART,BSDXSC) ;EP Called by BSDX CANCEL APPOINTMENT event -"RTN","BSDX08",273,0) +"RTN","BSDX08",163,0) ;when appointments cancelled via PIMS interface. -"RTN","BSDX08",274,0) +"RTN","BSDX08",164,0) ;Propagates cancellation to BSDXAPPT and raises refresh event to running GUI clients -"RTN","BSDX08",275,0) +"RTN","BSDX08",165,0) N BSDXFOUND,BSDXRES -"RTN","BSDX08",276,0) +"RTN","BSDX08",166,0) Q:+$G(BSDXNOEV) -"RTN","BSDX08",277,0) +"RTN","BSDX08",167,0) Q:'+$G(BSDXSC) -"RTN","BSDX08",278,0) +"RTN","BSDX08",168,0) S BSDXFOUND=0 -"RTN","BSDX08",279,0) +"RTN","BSDX08",169,0) I $D(^BSDXRES("ALOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ALOC",BSDXSC,0)) S BSDXFOUND=$$CANEVT1(BSDXRES,BSDXSTART,BSDXPAT) -"RTN","BSDX08",280,0) +"RTN","BSDX08",170,0) I BSDXFOUND D CANEVT3(BSDXRES) Q -"RTN","BSDX08",281,0) +"RTN","BSDX08",171,0) I $D(^BXDXRES("ASSOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ASSOC",BSDXSC,0)) S BSDXFOUND=$$CANEVT1(BSDXRES,BSDXSTART,BSDXPAT) -"RTN","BSDX08",282,0) +"RTN","BSDX08",172,0) I BSDXFOUND D CANEVT3(BSDXRES) -"RTN","BSDX08",283,0) +"RTN","BSDX08",173,0) Q -"RTN","BSDX08",284,0) +"RTN","BSDX08",174,0) ; -"RTN","BSDX08",285,0) +"RTN","BSDX08",175,0) CANEVT1(BSDXRES,BSDXSTART,BSDXPAT) ; -"RTN","BSDX08",286,0) +"RTN","BSDX08",176,0) ;Get appointment id in BSDXAPT -"RTN","BSDX08",287,0) +"RTN","BSDX08",177,0) ;If found, call BSDXCAN(BSDXAPPT) and return 1 -"RTN","BSDX08",288,0) +"RTN","BSDX08",178,0) ;else return 0 -"RTN","BSDX08",289,0) +"RTN","BSDX08",179,0) N BSDXFOUND,BSDXAPPT -"RTN","BSDX08",290,0) +"RTN","BSDX08",180,0) S BSDXFOUND=0 -"RTN","BSDX08",291,0) +"RTN","BSDX08",181,0) Q:'+BSDXRES BSDXFOUND -"RTN","BSDX08",292,0) +"RTN","BSDX08",182,0) Q:'$D(^BSDXAPPT("ARSRC",BSDXRES,BSDXSTART)) BSDXFOUND -"RTN","BSDX08",293,0) +"RTN","BSDX08",183,0) S BSDXAPPT=0 F S BSDXAPPT=$O(^BSDXAPPT("ARSRC",BSDXRES,BSDXSTART,BSDXAPPT)) Q:'+BSDXAPPT D Q:BSDXFOUND -"RTN","BSDX08",294,0) +"RTN","BSDX08",184,0) + . N BSDXNOD +"RTN","BSDX08",185,0) . S BSDXNOD=$G(^BSDXAPPT(BSDXAPPT,0)) Q:BSDXNOD="" -"RTN","BSDX08",295,0) +"RTN","BSDX08",186,0) . I $P(BSDXNOD,U,5)=BSDXPAT,$P(BSDXNOD,U,12)="" S BSDXFOUND=1 Q -"RTN","BSDX08",296,0) - I BSDXFOUND,+$G(BSDXAPPT) D BSDXCAN(BSDXAPPT) -"RTN","BSDX08",297,0) +"RTN","BSDX08",187,0) + I BSDXFOUND,+$G(BSDXAPPT) N % S %=$$BSDXCAN(BSDXAPPT) I % D ^%ZTER +"RTN","BSDX08",188,0) Q BSDXFOUND -"RTN","BSDX08",298,0) +"RTN","BSDX08",189,0) ; -"RTN","BSDX08",299,0) +"RTN","BSDX08",190,0) CANEVT3(BSDXRES) ; -"RTN","BSDX08",300,0) +"RTN","BSDX08",191,0) ;Call RaiseEvent to notify GUI clients -"RTN","BSDX08",301,0) +"RTN","BSDX08",192,0) ; -"RTN","BSDX08",302,0) +"RTN","BSDX08",193,0) N BSDXRESN -"RTN","BSDX08",303,0) +"RTN","BSDX08",194,0) S BSDXRESN=$G(^BSDXRES(BSDXRES,0)) -"RTN","BSDX08",304,0) +"RTN","BSDX08",195,0) Q:BSDXRESN="" -"RTN","BSDX08",305,0) +"RTN","BSDX08",196,0) S BSDXRESN=$P(BSDXRESN,"^") -"RTN","BSDX08",306,0) +"RTN","BSDX08",197,0) ;D EVENT^BSDX23("SCHEDULE-"_BSDXRESN,"","","") -"RTN","BSDX08",307,0) +"RTN","BSDX08",198,0) D EVENT^BMXMEVN("BSDX SCHEDULE",BSDXRESN) -"RTN","BSDX08",308,0) +"RTN","BSDX08",199,0) Q -"RTN","BSDX08",309,0) +"RTN","BSDX08",200,0) ; -"RTN","BSDX08",310,0) +"RTN","BSDX08",201,0) ERR(BSDXI,BSDXERR) ;Error processing -"RTN","BSDX08",311,0) +"RTN","BSDX08",202,0) + ; Unlock first +"RTN","BSDX08",203,0) + L:$D(BSDXAPTID) -^BSDXAPPT(BSDXAPTID) +"RTN","BSDX08",204,0) + ; If last line is $C(31), we are done. No more errors to send to client. +"RTN","BSDX08",205,0) + I ^BSDXTMP($J,$O(^BSDXTMP($J," "),-1))=$C(31) QUIT +"RTN","BSDX08",206,0) S BSDXI=BSDXI+1 -"RTN","BSDX08",312,0) +"RTN","BSDX08",207,0) S BSDXERR=$TR(BSDXERR,"^","~") -"RTN","BSDX08",313,0) - I $TL>0 TROLLBACK -"RTN","BSDX08",314,0) +"RTN","BSDX08",208,0) S ^BSDXTMP($J,BSDXI)=BSDXERR_$C(30) -"RTN","BSDX08",315,0) +"RTN","BSDX08",209,0) S BSDXI=BSDXI+1 -"RTN","BSDX08",316,0) +"RTN","BSDX08",210,0) S ^BSDXTMP($J,BSDXI)=$C(31) -"RTN","BSDX08",317,0) - L -^BSDXAPPT(BSDXAPTID) -"RTN","BSDX08",318,0) +"RTN","BSDX08",211,0) QUIT -"RTN","BSDX08",319,0) +"RTN","BSDX08",212,0) ; -"RTN","BSDX08",320,0) +"RTN","BSDX08",213,0) ETRAP ;EP Error trap entry -"RTN","BSDX08",321,0) +"RTN","BSDX08",214,0) N $ET S $ET="D ^%ZTER HALT" ; Emergency Error Trap -"RTN","BSDX08",322,0) - ; Rollback, otherwise ^XTER will be empty from future rollback -"RTN","BSDX08",323,0) - I $TL>0 TROLLBACK -"RTN","BSDX08",324,0) +"RTN","BSDX08",215,0) D ^%ZTER -"RTN","BSDX08",325,0) - S $EC="" ; Clear Error -"RTN","BSDX08",326,0) - ; Log error message and send to client -"RTN","BSDX08",327,0) - I '$D(BSDXI) N BSDXI S BSDXI=0 -"RTN","BSDX08",328,0) - D ERR(BSDXI,"-100~BSDX08 Error: "_$G(%ZTERZE)) -"RTN","BSDX08",329,0) - QUIT -"RTN","BSDX08",330,0) +"RTN","BSDX08",216,0) ; -"RTN","BSDX08",331,0) +"RTN","BSDX08",217,0) + ; Roll back BSDXAPPT; +"RTN","BSDX08",218,0) + ; NB: What if a Mumps error happens inside fileman in BSDXAPI? +"RTN","BSDX08",219,0) + ; I have decided the M errors are out of scope for me to handle. +"RTN","BSDX08",220,0) + D:$G(BSDXAPTID) ROLLBACK(BSDXAPTID) +"RTN","BSDX08",221,0) + ; +"RTN","BSDX08",222,0) + ; Log error message and send to client +"RTN","BSDX08",223,0) + I '$D(BSDXI) N BSDXI S BSDXI=0 +"RTN","BSDX08",224,0) + D ERR(BSDXI,"-100~BSDX08 Error: "_$G(%ZTERZE)) +"RTN","BSDX08",225,0) + Q:$Q 1_U_"-100~Mumps Error" Q +"RTN","BSDX08",226,0) + ; +"RTN","BSDX08",227,0) ;;;NB: This is code that is unused in both original and port. -"RTN","BSDX08",332,0) +"RTN","BSDX08",228,0) ; ; If not appt in the "S" node is found in ^SC then check associated RPMS Clinic Multiple -"RTN","BSDX08",333,0) +"RTN","BSDX08",229,0) ; I BSDXSCIEN="" D I 'BSDXZ Q ;Q:BSDXZ -"RTN","BSDX08",334,0) +"RTN","BSDX08",230,0) ; . S BSDXERR="BSDX08: Unable to find associated RPMS appointment for this patient. " -"RTN","BSDX08",335,0) +"RTN","BSDX08",231,0) ; . S BSDXZ=1 -"RTN","BSDX08",336,0) +"RTN","BSDX08",232,0) ; . ; Check if there are associated RPMS clinics. (not currently used) Does the multiple exist? No, then quit -"RTN","BSDX08",337,0) +"RTN","BSDX08",233,0) ; . I '$D(^BSDXRES(BSDXSC1,20)) S BSDXZ=0 QUIT -"RTN","BSDX08",338,0) +"RTN","BSDX08",234,0) ; . ; Loop through the multiple. Get Location and then the ^SC "S" node IEN. -"RTN","BSDX08",339,0) +"RTN","BSDX08",235,0) ; . N BSDX1 S BSDX1=0 -"RTN","BSDX08",340,0) +"RTN","BSDX08",236,0) ; . F S BSDX1=$O(^BSDXRES(BSDXSC1,20,BSDX1)) Q:'+BSDX1 Q:BSDXZ=0 D -"RTN","BSDX08",341,0) +"RTN","BSDX08",237,0) ; . . Q:'$D(^BSDXRES(BSDXSC1,20,BSDX1,0)) -"RTN","BSDX08",342,0) +"RTN","BSDX08",238,0) ; . . S BSDXLOC=$P(^BSDXRES(BSDXSC1,20,BSDX1,0),U) -"RTN","BSDX08",343,0) +"RTN","BSDX08",239,0) ; . . S BSDXSCIEN=$$SCIEN^BSDXAPI(BSDXPATID,BSDXLOC,BSDXSTART) I +BSDXSCIEN S BSDXZ=0 Q "RTN","BSDX09") 0^9^B35856892 "RTN","BSDX09",1,0) -BSDX09 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; ; 4/28/11 10:18am +BSDX09 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; ; 6/21/12 11:03am "RTN","BSDX09",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX09",3,0) ; Licensed under LGPL "RTN","BSDX09",4,0) @@ -5279,7 +4929,7 @@ DFN(FILE,BSDXPAT) ; -- returns ien for file "RTN","BSDX11",1,0) BSDX11 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:18am "RTN","BSDX11",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX11",3,0) ; Licensed under LGPL "RTN","BSDX11",4,0) @@ -5425,7 +5075,7 @@ INSTALLD(BMXPKG) ; "RTN","BSDX12",1,0) BSDX12 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:18am "RTN","BSDX12",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX12",3,0) ; Licensed under LGPL "RTN","BSDX12",4,0) @@ -5581,7 +5231,7 @@ ERR(ERRNO) ;Error processing "RTN","BSDX13",1,0) BSDX13 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:19am "RTN","BSDX13",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX13",3,0) ; Licensed under LGPL "RTN","BSDX13",4,0) @@ -5855,7 +5505,7 @@ APTINBLK(BSDXAVID) ; "RTN","BSDX14",1,0) BSDX14 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:19am "RTN","BSDX14",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX14",3,0) ; Licensed under LGPL "RTN","BSDX14",4,0) @@ -6003,7 +5653,7 @@ ERROR ; "RTN","BSDX15",1,0) BSDX15 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:19am "RTN","BSDX15",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX15",3,0) ; Licensed under LGPL "RTN","BSDX15",4,0) @@ -6157,7 +5807,7 @@ ETRAP ;EP Error trap entry "RTN","BSDX16",1,0) BSDX16 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; ; 4/28/11 10:20am "RTN","BSDX16",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX16",3,0) ; Licensed under LGPL "RTN","BSDX16",4,0) @@ -6371,7 +6021,7 @@ ERR(BSDXERID,ERRTXT) ;Error processing "RTN","BSDX17",1,0) BSDX17 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:20am "RTN","BSDX17",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX17",3,0) ; Licensed under LGPL "RTN","BSDX17",4,0) @@ -6449,7 +6099,7 @@ SCHUSR(BSDXY) ;EP "RTN","BSDX18",1,0) BSDX18 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:20am "RTN","BSDX18",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX18",3,0) ; Licensed under LGPL "RTN","BSDX18",4,0) @@ -7073,7 +6723,7 @@ MADEXST(BSDXU,BSDXR) ; "RTN","BSDX19",1,0) BSDX19 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:21am "RTN","BSDX19",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX19",3,0) ; Licensed under LGPL "RTN","BSDX19",4,0) @@ -7255,7 +6905,7 @@ ERROR ; "RTN","BSDX20",1,0) BSDX20 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:21am "RTN","BSDX20",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX20",3,0) ; Licensed under LGPL "RTN","BSDX20",4,0) @@ -7417,7 +7067,7 @@ ETRAP ;EP Error trap entry "RTN","BSDX21",1,0) BSDX21 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:22am "RTN","BSDX21",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX21",3,0) ; Licensed under LGPL "RTN","BSDX21",4,0) @@ -7627,7 +7277,7 @@ ERROR ; "RTN","BSDX22",1,0) BSDX22 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:22am "RTN","BSDX22",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX22",3,0) ; Licensed under LGPL "RTN","BSDX22",4,0) @@ -7811,7 +7461,7 @@ ERROR ; "RTN","BSDX23",1,0) BSDX23 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:22am "RTN","BSDX23",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX23",3,0) ; Licensed under LGPL "RTN","BSDX23",4,0) @@ -8023,7 +7673,7 @@ RAISEVNT(BSDXY,BSDXEVENT,BSDXPARAM,BSDXSIP,BSDXSPT) ;EP "RTN","BSDX24",1,0) BSDX24 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:22am "RTN","BSDX24",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX24",3,0) ; Licensed under LGPL "RTN","BSDX24",4,0) @@ -8277,11 +7927,11 @@ SEARCH(BSDXY,BSDXRES,BSDXSTRT,BSDXEND,BSDXTYPES,BSDXAMPM,BSDXWKDY) ;EP "RTN","BSDX24",128,0) Q "RTN","BSDX25") -0^23^B58341725 +0^23^B75573201 "RTN","BSDX25",1,0) -BSDX25 ; VW/UJO/SMH - WINDOWS SCHEDULING RPCS ; 4/28/11 10:24am +BSDX25 ; VEN/SMH - WINDOWS SCHEDULING RPCS ; 7/9/12 5:00pm "RTN","BSDX25",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX25",3,0) ; Licensed under LGPL "RTN","BSDX25",4,0) @@ -8291,753 +7941,829 @@ BSDX25 ; VW/UJO/SMH - WINDOWS SCHEDULING RPCS ; 4/28/11 10:24am "RTN","BSDX25",6,0) ; 3110106: SMH -> Changed Check-in EP - Removed unused paramters. Will change C# "RTN","BSDX25",7,0) - ; + ; 3120630: VEN/SMH -> Extensive Refactoring to remove transactions. "RTN","BSDX25",8,0) - ; + ; -> Functionality still the same. "RTN","BSDX25",9,0) -UT ; Unit Tests + ; -> Unit Tests in UT25^BSDXUT2 "RTN","BSDX25",10,0) - ; Make appointment, checkin, then uncheckin + ; "RTN","BSDX25",11,0) - N ZZZ + ; "RTN","BSDX25",12,0) - N APPTTIME S APPTTIME=$E($$NOW^XLFDT(),1,12) +CHECKIND(BSDXY,BSDXAPPTID,BSDXCDT,BSDXCC,BSDXPRV,BSDXROU,BSDXVCL,BSDXVFM,BSDXOG) ;EP "RTN","BSDX25",13,0) - D APPADD^BSDX07(.ZZZ,APPTTIME,APPTTIME+.0001,3,"Dr Office",30,"Sam's Note",1) -"RTN","BSDX25",14,0) - N APPTID S APPTID=+^BSDXTMP($J,1) -"RTN","BSDX25",15,0) - N HL S HL=$$GET1^DIQ(9002018.4,APPTID,".07:.04","I") -"RTN","BSDX25",16,0) - D CHECKIN^BSDX25(.ZZZ,APPTID,$$NOW^XLFDT()) -"RTN","BSDX25",17,0) - IF '$P(^BSDXAPPT(APPTID,0),U,3) WRITE "ERROR IN CHECKIN 1",! -"RTN","BSDX25",18,0) - IF '+$G(^SC(HL,"S",APPTTIME,1,1,"C")) WRITE "ERROR IN CHECKIN 2",! -"RTN","BSDX25",19,0) - D RMCI^BSDX25(.ZZZ,APPTID) -"RTN","BSDX25",20,0) - IF $P(^BSDXAPPT(APPTID,0),U,3) WRITE "ERROR IN UNCHECKIN 1",! -"RTN","BSDX25",21,0) - IF $G(^SC(HL,"S",APPTTIME,1,1,"C")) WRITE "ERROR IN UNCHECKIN 2",! -"RTN","BSDX25",22,0) - D RMCI^BSDX25(.ZZZ,APPTID) ; again, test sanity in repeat -"RTN","BSDX25",23,0) - IF $P(^BSDXAPPT(APPTID,0),U,3) WRITE "ERROR IN UNCHECKIN 1",! -"RTN","BSDX25",24,0) - IF $G(^SC(HL,"S",APPTTIME,1,1,"C")) WRITE "ERROR IN UNCHECKIN 2",! -"RTN","BSDX25",25,0) - ; now test various error conditions -"RTN","BSDX25",26,0) - ; Test Error 1 -"RTN","BSDX25",27,0) - D RMCI^BSDX25(.ZZZ,) -"RTN","BSDX25",28,0) - IF +^BSDXTMP($J,1)'=-1 WRITE "ERROR IN ETest 1",! -"RTN","BSDX25",29,0) - ; Test Error 2 -"RTN","BSDX25",30,0) - D RMCI^BSDX25(.ZZZ,234987234398) -"RTN","BSDX25",31,0) - IF +^BSDXTMP($J,1)'=-2 WRITE "ERROR IN Etest 2",! -"RTN","BSDX25",32,0) - ; Tests for 3 to 5 difficult to produce -"RTN","BSDX25",33,0) - ; Error tests follow: Mumps error test; Transaction restartability -"RTN","BSDX25",34,0) - N bsdxdie S bsdxdie=1 -"RTN","BSDX25",35,0) - D RMCI^BSDX25(.ZZZ,APPTID) -"RTN","BSDX25",36,0) - IF +^BSDXTMP($J,1)'=-20 WRITE "ERROR IN Etest 3",! -"RTN","BSDX25",37,0) - K bsdxdie -"RTN","BSDX25",38,0) - N bsdxrestart S bsdxrestart=1 -"RTN","BSDX25",39,0) - D RMCI^BSDX25(.ZZZ,APPTID) -"RTN","BSDX25",40,0) - IF +^BSDXTMP($J,1)'=0 WRITE "Error in Etest 4",! -"RTN","BSDX25",41,0) - QUIT -"RTN","BSDX25",42,0) -CHECKIND(BSDXY,BSDXAPTID,BSDXCDT,BSDXCC,BSDXPRV,BSDXROU,BSDXVCL,BSDXVFM,BSDXOG) ;EP -"RTN","BSDX25",43,0) ;Entry point for debugging -"RTN","BSDX25",44,0) +"RTN","BSDX25",14,0) ; -"RTN","BSDX25",45,0) - ;I +$G(^BSDXDBUG("BREAK","CHECKIN")),+$G(^BSDXDBUG("BREAK"))=DUZ D DEBUG^%Serenji("CHECKIN^BSDX25(.BSDXY,BSDXAPTID,BSDXCDT,BSDXCC,BSDXPRV,BSDXROU,BSDXVCL,BSDXVFM,BSDXOG)",$P(^BSDXDBUG("BREAK"),U,2)) -"RTN","BSDX25",46,0) +"RTN","BSDX25",15,0) + ;I +$G(^BSDXDBUG("BREAK","CHECKIN")),+$G(^BSDXDBUG("BREAK"))=DUZ D DEBUG^%Serenji("CHECKIN^BSDX25(.BSDXY,BSDXAPPTID,BSDXCDT,BSDXCC,BSDXPRV,BSDXROU,BSDXVCL,BSDXVFM,BSDXOG)",$P(^BSDXDBUG("BREAK"),U,2)) +"RTN","BSDX25",16,0) Q -"RTN","BSDX25",47,0) +"RTN","BSDX25",17,0) ; -"RTN","BSDX25",48,0) -CHECKIN(BSDXY,BSDXAPTID,BSDXCDT) ; ,BSDXCC,BSDXPRV,BSDXROU,BSDXVCL,BSDXVFM,BSDXOG) ;EP Check in appointment -"RTN","BSDX25",49,0) +"RTN","BSDX25",18,0) +CHECKIN(BSDXY,BSDXAPPTID,BSDXCDT) ;Private EP Check in appointment +"RTN","BSDX25",19,0) + ; Old additional vars: ,BSDXCC,BSDXPRV,BSDXROU,BSDXVCL,BSDXVFM,BSDXOG) +"RTN","BSDX25",20,0) + ; Called by RPC: BSDX CHECKIN APPOINTMENT +"RTN","BSDX25",21,0) + ; +"RTN","BSDX25",22,0) ; Private to GUI; use BSDXAPI for general API to checkin patients -"RTN","BSDX25",50,0) +"RTN","BSDX25",23,0) ; Parameters: -"RTN","BSDX25",51,0) +"RTN","BSDX25",24,0) ; BSDXY: Global Out -"RTN","BSDX25",52,0) - ; BSDXAPTID: Appointment ID in ^BSDXAPPT -"RTN","BSDX25",53,0) +"RTN","BSDX25",25,0) + ; BSDXAPPTID: Appointment ID in ^BSDXAPPT +"RTN","BSDX25",26,0) ; BSDXCDT: Checkin Date --> Changed -"RTN","BSDX25",54,0) +"RTN","BSDX25",27,0) ; BSDXCC: Clinic Stop IEN (not used) -"RTN","BSDX25",55,0) +"RTN","BSDX25",28,0) ; BSDXPRV: Provider IEN (not used) -"RTN","BSDX25",56,0) +"RTN","BSDX25",29,0) ; BSDXROU: Print Routing Slip? (not used) -"RTN","BSDX25",57,0) +"RTN","BSDX25",30,0) ; BSDXVCL: PCC+ Clinic IEN (not used) -"RTN","BSDX25",58,0) +"RTN","BSDX25",31,0) ; BSDXVFM: PCC+ Form IEN (not used) -"RTN","BSDX25",59,0) - ; BSDXOG: PCC+ Outguide (true or false) -"RTN","BSDX25",60,0) +"RTN","BSDX25",32,0) + ; BSDXOG: PCC+ Outguide (true or false) (not used) +"RTN","BSDX25",33,0) ; -"RTN","BSDX25",61,0) +"RTN","BSDX25",34,0) ; Output: -"RTN","BSDX25",62,0) +"RTN","BSDX25",35,0) ; ADO.net table with 1 column ErrorID, 1 row result -"RTN","BSDX25",63,0) +"RTN","BSDX25",36,0) ; - 0 if all okay -"RTN","BSDX25",64,0) +"RTN","BSDX25",37,0) ; - Another number or text if not -"RTN","BSDX25",65,0) - -"RTN","BSDX25",66,0) - N BSDXNOD,BSDXPATID,BSDXSTART,DIK,DA,BSDXID,BSDXI,BSDXZ,BSDXIENS,BSDXVEN -"RTN","BSDX25",67,0) +"RTN","BSDX25",38,0) + ; +"RTN","BSDX25",39,0) + ; Error reference: +"RTN","BSDX25",40,0) + ; -1 -> Invalid Appointment ID +"RTN","BSDX25",41,0) + ; -2 -> Invalid Check-in Date +"RTN","BSDX25",42,0) + ; -3 -> Cannot check-in due to Fileman Filer failure +"RTN","BSDX25",43,0) + ; -4 -> Cannot lock ^BSDXAPPT(APPTID) +"RTN","BSDX25",44,0) + ; -10 -> BSDXAPI error +"RTN","BSDX25",45,0) + ; -100 -> Mumps Error +"RTN","BSDX25",46,0) + ; +"RTN","BSDX25",47,0) + ; Turn off SDAM Appointment Events BSDX Protocol Processing +"RTN","BSDX25",48,0) N BSDXNOEV -"RTN","BSDX25",68,0) +"RTN","BSDX25",49,0) S BSDXNOEV=1 ;Don't execute protocol +"RTN","BSDX25",50,0) + ; +"RTN","BSDX25",51,0) + ; Set min DUZ vars +"RTN","BSDX25",52,0) + D ^XBKVAR +"RTN","BSDX25",53,0) + ; +"RTN","BSDX25",54,0) + ; $ET +"RTN","BSDX25",55,0) + N $ET S $ET="G ERROR^BSDX25" +"RTN","BSDX25",56,0) + ; +"RTN","BSDX25",57,0) + ; Test for error trap for Unit Tests +"RTN","BSDX25",58,0) + I $G(BSDXDIE) N X S X=1/0 +"RTN","BSDX25",59,0) + ; +"RTN","BSDX25",60,0) + N BSDXI S BSDXI=0 +"RTN","BSDX25",61,0) + ; +"RTN","BSDX25",62,0) + S BSDXY=$NAME(^BSDXTMP($J)) +"RTN","BSDX25",63,0) + K @BSDXY +"RTN","BSDX25",64,0) + ; +"RTN","BSDX25",65,0) + S ^BSDXTMP($J,0)="T00020ERRORID"_$C(30) +"RTN","BSDX25",66,0) + ; +"RTN","BSDX25",67,0) + I '+BSDXAPPTID D ERR("-1~Invalid Appointment ID") QUIT +"RTN","BSDX25",68,0) + I '$D(^BSDXAPPT(BSDXAPPTID,0)) D ERR("-1~Invalid Appointment ID") QUIT "RTN","BSDX25",69,0) ; "RTN","BSDX25",70,0) - D ^XBKVAR S X="ERROR^BSDX25",@^%ZOSF("TRAP") + ; Lock BSDX node, only to synchronize access to the globals. "RTN","BSDX25",71,0) - S BSDXI=0 + ; It's not expected that the error will ever happen as no filing "RTN","BSDX25",72,0) - K ^BSDXTMP($J) + ; is supposed to take 5 seconds. "RTN","BSDX25",73,0) - S BSDXY="^BSDXTMP("_$J_")" + L +^BSDXAPPT(BSDXAPPTID):5 E D ERR("-4~Appt record is locked. Please contact technical support.") QUIT "RTN","BSDX25",74,0) - S ^BSDXTMP($J,0)="T00020ERRORID"_$C(30) + ; "RTN","BSDX25",75,0) - I '+BSDXAPTID D ERR("BSDX25: Invalid Appointment ID") Q -"RTN","BSDX25",76,0) - I '$D(^BSDXAPPT(BSDXAPTID,0)) D ERR("BSDX08: Invalid Appointment ID") Q -"RTN","BSDX25",77,0) ; Remove Date formatting v.1.5. Client will send date as FM Date. -"RTN","BSDX25",78,0) +"RTN","BSDX25",76,0) ;S:BSDXCDT["@0000" BSDXCDT=$P(BSDXCDT,"@") -"RTN","BSDX25",79,0) +"RTN","BSDX25",77,0) ;S %DT="T",X=BSDXCDT D ^%DT S BSDXCDT=Y +"RTN","BSDX25",78,0) + S BSDXCDT=+BSDXCDT ; Strip off zeros if C# sends them +"RTN","BSDX25",79,0) + I BSDXCDT'>2000000 D ERR("-2~Invalid Check-in Date") QUIT "RTN","BSDX25",80,0) - S BSDXCDT=+BSDXCDT ; Strip off zeros if C# sends them -"RTN","BSDX25",81,0) - I BSDXCDT=-1 D ERR(70) Q -"RTN","BSDX25",82,0) I BSDXCDT>$$NOW^XLFDT S BSDXCDT=$$NOW^XLFDT +"RTN","BSDX25",81,0) + ; +"RTN","BSDX25",82,0) + ; Some data "RTN","BSDX25",83,0) - ;Checkin BSDX APPOINTMENT entry + N BSDXNOD S BSDXNOD=^BSDXAPPT(BSDXAPPTID,0) ; Appointment Node "RTN","BSDX25",84,0) - D BSDXCHK(BSDXAPTID,BSDXCDT) + N BSDXPATID S BSDXPATID=$P(BSDXNOD,U,5) ; DFN "RTN","BSDX25",85,0) - S BSDXNOD=^BSDXAPPT(BSDXAPTID,0) + N BSDXSTART S BSDXSTART=$P(BSDXNOD,U) ; Appointment Start Time "RTN","BSDX25",86,0) - S BSDXPATID=$P(BSDXNOD,U,5) + ; "RTN","BSDX25",87,0) - S BSDXSTART=$P(BSDXNOD,U) + ; Get Hospital Location IEN from BSDXAPPT to BSDXRES (RESOUCE:HOSPITAL LOCATION) "RTN","BSDX25",88,0) - ; + N BSDXSC1 S BSDXSC1=$$GET1^DIQ(9002018.4,BSDXAPPTID_",",".07:.04","I") "RTN","BSDX25",89,0) - S BSDXSC1=$P(BSDXNOD,U,7) ;RESOURCEID + I BSDXSC1,'$D(^SC(BSDXSC1,0)) S BSDXSC1="" ; Null it off if it doesn't exist "RTN","BSDX25",90,0) - I BSDXSC1]"",$D(^BSDXRES(BSDXSC1,0)) D I +$G(BSDXZ) D ERR($P(BSDXZ,U,2)) Q -"RTN","BSDX25",91,0) - . S BSDXNOD=^BSDXRES(BSDXSC1,0) -"RTN","BSDX25",92,0) - . S BSDXSC1=$P(BSDXNOD,U,4) ;HOSPITAL LOCATION -"RTN","BSDX25",93,0) - . I BSDXSC1]"",$D(^SC(BSDXSC1,0)) D APCHK(.BSDXZ,BSDXSC1,BSDXPATID,BSDXCDT,BSDXSTART) -"RTN","BSDX25",94,0) ; +"RTN","BSDX25",91,0) + ; Check if we can check-in using BSDXAPI +"RTN","BSDX25",92,0) + N BSDXERR S BSDXERR=0 +"RTN","BSDX25",93,0) + I BSDXSC1 S BSDXERR=$$CHECKIC1^BSDXAPI(BSDXPATID,BSDXSC1,BSDXSTART) +"RTN","BSDX25",94,0) + I BSDXERR D ERR(-10_"~"_$P(BSDXERR,U,2)) QUIT "RTN","BSDX25",95,0) - S BSDXI=BSDXI+1 + ; "RTN","BSDX25",96,0) - S ^BSDXTMP($J,BSDXI)="0"_$C(30) + ; Checkin BSDX APPOINTMENT entry "RTN","BSDX25",97,0) - S BSDXI=BSDXI+1 + ; Failure Analysis: If we fail here, no changes were made. "RTN","BSDX25",98,0) - S ^BSDXTMP($J,BSDXI)=$C(31) + N BSDXERR S BSDXERR=$$BSDXCHK(BSDXAPPTID,BSDXCDT) "RTN","BSDX25",99,0) - Q + I BSDXERR D ERR("-3~Fileman Filer failed to check-in appt") QUIT "RTN","BSDX25",100,0) ; "RTN","BSDX25",101,0) -BSDXCHK(BSDXAPTID,BSDXCDT) ; + ; File check-in using BSDXAPI "RTN","BSDX25",102,0) - ; + ; Failure Analysis: If we fail here, we need to roll back first check-in. "RTN","BSDX25",103,0) - S BSDXIENS=BSDXAPTID_"," + N BSDXERR S BSDXERR=0 "RTN","BSDX25",104,0) - S BSDXFDA(9002018.4,BSDXIENS,.03)=BSDXCDT + I BSDXSC1 S BSDXERR=$$CHECKIN1^BSDXAPI(BSDXPATID,BSDXSC1,BSDXSTART) "RTN","BSDX25",105,0) - D FILE^DIE("","BSDXFDA","BSDXMSG") + I BSDXERR D QUIT "RTN","BSDX25",106,0) - Q + . N % S %=$$BSDXCHK(BSDXAPPTID,"@") ; No Error checking to prevent loop. "RTN","BSDX25",107,0) - ; + . D ERR(-10_"~"_$P(BSDXERR,U,2)) ; Send error message to client "RTN","BSDX25",108,0) -APCHK(BSDXZ,BSDXSC1,BSDXDFN,BSDXCDT,BSDXSTART) ; + ; "RTN","BSDX25",109,0) - ;Checkin appointment for patient BSDXDFN in clinic BSDXSC1 + L -^BSDXAPPT(BSDXAPPTID) "RTN","BSDX25",110,0) - ;at time BSDXSTART + S BSDXI=BSDXI+1 "RTN","BSDX25",111,0) - S BSDXZ=$$CHECKIN1^BSDXAPI(BSDXDFN,BSDXSC1,BSDXSTART) + S ^BSDXTMP($J,BSDXI)="0"_$C(30) "RTN","BSDX25",112,0) - Q + S BSDXI=BSDXI+1 "RTN","BSDX25",113,0) - ; + S ^BSDXTMP($J,BSDXI)=$C(31) "RTN","BSDX25",114,0) -RMCI(BSDXY,BSDXAPPTID) ; EP - Remove Check-in from BSDX APPT and 2/44 + Q "RTN","BSDX25",115,0) - ; Called by RPC [Fill in later] + ; "RTN","BSDX25",116,0) - ; +BSDXCHK(BSDXAPPTID,BSDXCDT) ; $$ Private Entry Point. File or delete check-in to "RTN","BSDX25",117,0) - ; Parameters to pass: + ; BSDX Appointment "RTN","BSDX25",118,0) - ; APPTID: IEN in file BSDX APPOINTMENT + ; Input: BSDXAPPTID -> Appointment ID "RTN","BSDX25",119,0) - ; + ; BSDXCDT -> Check-in date, or "@" to remove check-in. "RTN","BSDX25",120,0) - ; Return in global array: + ; "RTN","BSDX25",121,0) - ; Record set with Column ERRORID; value of 0 AOK; other value + ; Output: 1^Error for error "RTN","BSDX25",122,0) - ; --> means that something went wrong + ; 0 for success "RTN","BSDX25",123,0) - ; + ; "RTN","BSDX25",124,0) - ; Error Reference: + Q:$G(BSDXSIMERR1) 1_U_"Simulated Error 1" "RTN","BSDX25",125,0) - ; -1~Invalid Appointment ID (not passed) + ; "RTN","BSDX25",126,0) - ; -2~Invalid Appointment ID (Doesn't exist in ^BSDXAPPT) + N BSDXIENS,BSDXMSG,BSDXFDA ; Filer variables "RTN","BSDX25",127,0) - ; -3~DB has corruption. Call Tech Support. (Resource ID doesn't exist in BSDXAPPT) + S BSDXIENS=BSDXAPPTID_"," "RTN","BSDX25",128,0) - ; -4~DB has corruption. Call Tech Support. (Resource ID in BSDXAPPT doesnt exist in BSDXRES) + S BSDXFDA(9002018.4,BSDXIENS,.03)=BSDXCDT "RTN","BSDX25",129,0) - ; -5~BSDXAPI Error. Message depends on error. + D FILE^DIE("","BSDXFDA","BSDXMSG") "RTN","BSDX25",130,0) - ; -20~Mumps Error + Q:$D(BSDXMSG) 1_U_BSDXMSG("DIERR",1,"TEXT",1) "RTN","BSDX25",131,0) - ; + Q 0 "RTN","BSDX25",132,0) - N BSDXNOEV S BSDXNOEV=1 ;Don't execute protocol + ; "RTN","BSDX25",133,0) - ; +RMCI(BSDXY,BSDXAPPTID) ; Private EP - Remove Check-in from BSDX APPT and 2/44 "RTN","BSDX25",134,0) - N $ET S $ET="G ERROR^BSDX25" ; Error Trap + ; Called by RPC BSDX REMOVE CHECK-IN "RTN","BSDX25",135,0) - ; + ; "RTN","BSDX25",136,0) - ; Set return variable and kill contents + ; Parameters to pass: "RTN","BSDX25",137,0) - S BSDXY=$NAME(^BSDXTMP($J)) + ; APPTID: IEN in file BSDX APPOINTMENT "RTN","BSDX25",138,0) - K @BSDXY + ; "RTN","BSDX25",139,0) - ; + ; Return in global array: "RTN","BSDX25",140,0) - N BSDXI S BSDXI=0 ; Initialize Counter + ; Record set with Column ERRORID; value of 0 AOK; other value "RTN","BSDX25",141,0) - ; + ; --> means that something went wrong "RTN","BSDX25",142,0) - S ^BSDXTMP($J,BSDXI)="T00020ERRORID"_$C(30) ; Header of ADO recordset -"RTN","BSDX25",143,0) - ; -"RTN","BSDX25",144,0) - TSTART (BSDXI):SERIAL ; Perform Autolocking -"RTN","BSDX25",145,0) - ; -"RTN","BSDX25",146,0) - ;;;test -"RTN","BSDX25",147,0) - I $g(bsdxdie) S X=8/0 -"RTN","BSDX25",148,0) - ;;; -"RTN","BSDX25",149,0) - I $g(bsdxrestart) k bsdxrestart TRESTART -"RTN","BSDX25",150,0) - ;;;test -"RTN","BSDX25",151,0) - ; -"RTN","BSDX25",152,0) - ; Check for Appointment ID (passed and exists in file) -"RTN","BSDX25",153,0) - I '+$G(BSDXAPPTID) D ERR("-1~Invalid Appointment ID") QUIT -"RTN","BSDX25",154,0) - I '$D(^BSDXAPPT(BSDXAPPTID,0)) D ERR("-2~Invalid Appointment ID") QUIT -"RTN","BSDX25",155,0) - ; -"RTN","BSDX25",156,0) - ; Remove checkin from BSDX APPOINTMENT entry -"RTN","BSDX25",157,0) - D BSDXCHK(BSDXAPPTID,"@") -"RTN","BSDX25",158,0) - ; -"RTN","BSDX25",159,0) - ; Now, remove checkin from PIMS files 2/44 -"RTN","BSDX25",160,0) - N BSDXNOD S BSDXNOD=^BSDXAPPT(BSDXAPPTID,0) -"RTN","BSDX25",161,0) - N BSDXPATID S BSDXPATID=$P(BSDXNOD,U,5) ; DFN -"RTN","BSDX25",162,0) - N BSDXSTART S BSDXSTART=$P(BSDXNOD,U) ; Start Date -"RTN","BSDX25",163,0) - N BSDXSC1 S BSDXSC1=$P(BSDXNOD,U,7) ; Resource ID -"RTN","BSDX25",164,0) ; -"RTN","BSDX25",165,0) - ; If the resource doesn't exist, error out. DB is corrupt. -"RTN","BSDX25",166,0) - I 'BSDXSC1 D ERR("-3~DB has corruption. Call Tech Support.") QUIT -"RTN","BSDX25",167,0) - I '$D(^BSDXRES(BSDXSC1,0)) D ERR("-4~DB has corruption. Call Tech Support.") QUIT -"RTN","BSDX25",168,0) +"RTN","BSDX25",143,0) + ; Error Reference: +"RTN","BSDX25",144,0) + ; -1~Invalid Appointment ID (not passed) +"RTN","BSDX25",145,0) + ; -2~Invalid Appointment ID (Doesn't exist in ^BSDXAPPT) +"RTN","BSDX25",146,0) + ; -3~DB has corruption. Call Tech Support. (Resource ID doesn't exist in BSDXAPPT) +"RTN","BSDX25",147,0) + ; -4~DB has corruption. Call Tech Support. (Resource ID in BSDXAPPT doesnt exist in BSDXRES) +"RTN","BSDX25",148,0) + ; -5~BSDXAPI Error. Message depends on error. +"RTN","BSDX25",149,0) + ; -6~Data Filing Error in BSDXCHK +"RTN","BSDX25",150,0) + ; -7~Lock not acquired +"RTN","BSDX25",151,0) + ; -100~Mumps Error +"RTN","BSDX25",152,0) + ; +"RTN","BSDX25",153,0) + N BSDXNOEV S BSDXNOEV=1 ;Don't execute protocol +"RTN","BSDX25",154,0) ; +"RTN","BSDX25",155,0) + N $ET S $ET="G ERROR^BSDX25" ; Error Trap +"RTN","BSDX25",156,0) + ; +"RTN","BSDX25",157,0) + ; Set return variable and kill contents +"RTN","BSDX25",158,0) + S BSDXY=$NAME(^BSDXTMP($J)) +"RTN","BSDX25",159,0) + K @BSDXY +"RTN","BSDX25",160,0) + ; +"RTN","BSDX25",161,0) + N BSDXI S BSDXI=0 ; Initialize Counter +"RTN","BSDX25",162,0) + ; +"RTN","BSDX25",163,0) + S ^BSDXTMP($J,BSDXI)="T00020ERRORID"_$C(30) ; Header of ADO recordset +"RTN","BSDX25",164,0) + ; +"RTN","BSDX25",165,0) + ;;;test +"RTN","BSDX25",166,0) + I $G(BSDXDIE) N X S X=8/0 +"RTN","BSDX25",167,0) + ; +"RTN","BSDX25",168,0) + ; Check for Appointment ID (passed and exists in file) "RTN","BSDX25",169,0) - N BSDXNOD S BSDXNOD=^BSDXRES(BSDXSC1,0) ; Resource 0 node + I '+$G(BSDXAPPTID) D ERR("-1~Invalid Appointment ID") QUIT "RTN","BSDX25",170,0) - S BSDXSC1=$P(BSDXNOD,U,4) ;HOSPITAL LOCATION + I '$D(^BSDXAPPT(BSDXAPPTID,0)) D ERR("-2~Invalid Appointment ID") QUIT "RTN","BSDX25",171,0) ; "RTN","BSDX25",172,0) - N BSDXZ ; Scratch variable to hold error message + ; Lock "RTN","BSDX25",173,0) - I BSDXSC1]"",$D(^SC(BSDXSC1,0)) S BSDXZ=$$RMCI^BSDXAPI(BSDXPATID,BSDXSC1,BSDXSTART) + ; Timeout not expected to happen except in error conditions. "RTN","BSDX25",174,0) - I +$G(BSDXZ) D ERR("-5~"_$P(BSDXZ,U,2)) QUIT + L +^BSDXAPPT(BSDXAPPTID):5 E D ERR("-7~Appt record is locked. Please contact technical support.") QUIT "RTN","BSDX25",175,0) - ; + ; "RTN","BSDX25",176,0) - TCOMMIT ; Save Data into Globals + ; Get appointment Data "RTN","BSDX25",177,0) - ; + N BSDXNOD S BSDXNOD=^BSDXAPPT(BSDXAPPTID,0) "RTN","BSDX25",178,0) - ; Return ADO recordset + N BSDXPATID S BSDXPATID=$P(BSDXNOD,U,5) ; DFN "RTN","BSDX25",179,0) - S BSDXI=BSDXI+1 + N BSDXSTART S BSDXSTART=$P(BSDXNOD,U) ; Start Date "RTN","BSDX25",180,0) - S ^BSDXTMP($J,BSDXI)="0"_$C(30) + N BSDXRESID S BSDXRESID=$P(BSDXNOD,U,7) ; Resource ID "RTN","BSDX25",181,0) - S BSDXI=BSDXI+1 + ; "RTN","BSDX25",182,0) - S ^BSDXTMP($J,BSDXI)=$C(31) + ; If the resource doesn't exist, error out. DB is corrupt. "RTN","BSDX25",183,0) - Q + I 'BSDXRESID D ERR("-3~DB has corruption. Call Tech Support.") QUIT "RTN","BSDX25",184,0) - ; + I '$D(^BSDXRES(BSDXRESID,0)) D ERR("-4~DB has corruption. Call Tech Support.") QUIT "RTN","BSDX25",185,0) -CHKEVT(BSDXPAT,BSDXSTART,BSDXSC) ;EP Called by BSDX CHECKIN APPOINTMENT event + ; "RTN","BSDX25",186,0) - ;when appointments CHECKIN via PIMS interface. + ; Get HL Data "RTN","BSDX25",187,0) - ;Propagates CHECKIN to BSDXAPPT and raises refresh event to running GUI clients + N BSDXNOD S BSDXNOD=^BSDXRES(BSDXRESID,0) ; Resource 0 node "RTN","BSDX25",188,0) - ; + N BSDXSC1 S BSDXSC1=$P(BSDXNOD,U,4) ;HOSPITAL LOCATION IEN "RTN","BSDX25",189,0) - Q:+$G(BSDXNOEV) + I BSDXSC1,'$D(^SC(BSDXSC1,0)) S BSDXSC1="" ; Zero out if HL doesn't exist "RTN","BSDX25",190,0) - Q:'+$G(BSDXSC) + ; "RTN","BSDX25",191,0) - N BSDXSTAT,BSDXFOUND,BSDXRES + ; Is it okay to remove check-in from PIMS? "RTN","BSDX25",192,0) - S BSDXSTAT="" + N BSDXERR S BSDXERR=0 ; Scratch variable "RTN","BSDX25",193,0) - S:$G(SDATA("AFTER","STATUS"))["CHECKED IN" BSDXSTAT=$P(SDATA("AFTER","STATUS"),"^",4) + ; $$RMCICK = Remove Check-in Check "RTN","BSDX25",194,0) - S BSDXFOUND=0 + I BSDXSC1 S BSDXERR=$$RMCICK^BSDXAPI1(BSDXPATID,BSDXSC1,BSDXSTART) "RTN","BSDX25",195,0) - I $D(^BSDXRES("ALOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ALOC",BSDXSC,0)) S BSDXFOUND=$$CHKEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT) + I BSDXERR D ERR("-5~"_$P(BSDXERR,U,2)) QUIT "RTN","BSDX25",196,0) - I BSDXFOUND D CHKEVT3(BSDXRES) Q + ; "RTN","BSDX25",197,0) - I $D(^BXDXRES("ASSOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ASSOC",BSDXSC,0)) S BSDXFOUND=$$CHKEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT) + ; For possible rollback, get old check-in date (internal value) "RTN","BSDX25",198,0) - I BSDXFOUND D CHKEVT3(BSDXRES) + N BSDXCDT S BSDXCDT=$$GET1^DIQ(9002018.4,BSDXAPPTID_",",.03,"I") "RTN","BSDX25",199,0) - Q + ; "RTN","BSDX25",200,0) - ; + ; Remove checkin from BSDX APPOINTMENT entry "RTN","BSDX25",201,0) -CHKEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT) ; + ; No need to rollback here on failure. "RTN","BSDX25",202,0) - ;Get appointment id in BSDXAPT + N BSDXERR S BSDXERR=$$BSDXCHK(BSDXAPPTID,"@") "RTN","BSDX25",203,0) - ;If found, call BSDXNOS(BSDXAPPT) and return 1 + I BSDXERR D ERR("-6~Cannot file data in $$BSDXCHK") QUIT "RTN","BSDX25",204,0) - ;else return 0 + ; "RTN","BSDX25",205,0) - N BSDXFOUND,BSDXAPPT + ; Now, remove checkin from PIMS files 2/44 "RTN","BSDX25",206,0) - S BSDXFOUND=0 + ; Restore BSDXCDT into ^BSDXAPPT if we fail. "RTN","BSDX25",207,0) - Q:'+$G(BSDXRES) BSDXFOUND + N BSDXERR S BSDXERR=0 ; Scratch variable to hold error message "RTN","BSDX25",208,0) - Q:'$D(^BSDXAPPT("ARSRC",BSDXRES,BSDXSTART)) BSDXFOUND + I BSDXSC1 S BSDXERR=$$RMCI^BSDXAPI1(BSDXPATID,BSDXSC1,BSDXSTART) "RTN","BSDX25",209,0) - S BSDXAPPT=0 F S BSDXAPPT=$O(^BSDXAPPT("ARSRC",BSDXRES,BSDXSTART,BSDXAPPT)) Q:'+BSDXAPPT D Q:BSDXFOUND + I BSDXERR D QUIT "RTN","BSDX25",210,0) - . S BSDXNOD=$G(^BSDXAPPT(BSDXAPPT,0)) Q:BSDXNOD="" + . N % S %=$$BSDXCHK(BSDXAPPTID,BSDXCDT) ; No error checking here. "RTN","BSDX25",211,0) - . I $P(BSDXNOD,U,5)=BSDXPAT,$P(BSDXNOD,U,12)="" S BSDXFOUND=1 Q + . D ERR("-5~"_$P(BSDXERR,U,2)) ; Send error message to client "RTN","BSDX25",212,0) - I BSDXFOUND,+$G(BSDXAPPT) D BSDXCHK(BSDXAPPT,BSDXSTAT) + ; "RTN","BSDX25",213,0) - Q BSDXFOUND + ; Unlock "RTN","BSDX25",214,0) - ; + L -^BSDXAPPT(BSDXAPPTID) "RTN","BSDX25",215,0) -CHKEVT3(BSDXRES) ; + ; "RTN","BSDX25",216,0) - ;Call RaiseEvent to notify GUI clients + ; Return ADO recordset "RTN","BSDX25",217,0) - ; -"RTN","BSDX25",218,0) - N BSDXRESN -"RTN","BSDX25",219,0) - S BSDXRESN=$G(^BSDXRES(BSDXRES,0)) -"RTN","BSDX25",220,0) - Q:BSDXRESN="" -"RTN","BSDX25",221,0) - S BSDXRESN=$P(BSDXRESN,"^") -"RTN","BSDX25",222,0) - D EVENT^BMXMEVN("BSDX SCHEDULE",BSDXRESN) -"RTN","BSDX25",223,0) - Q -"RTN","BSDX25",224,0) - ; -"RTN","BSDX25",225,0) -ERROR ; -"RTN","BSDX25",226,0) - S $ETRAP="D ^%ZTER HALT" ; Emergency Error Trap for the wise -"RTN","BSDX25",227,0) - ; Rollback, otherwise ^XTER will be empty from future rollback -"RTN","BSDX25",228,0) - I $TL>0 TROLLBACK -"RTN","BSDX25",229,0) - D ^%ZTER -"RTN","BSDX25",230,0) - S $EC="" ; Clear Error -"RTN","BSDX25",231,0) - ; Log error message and send to client -"RTN","BSDX25",232,0) - D ERR("-20~Mumps Error") -"RTN","BSDX25",233,0) - Q -"RTN","BSDX25",234,0) - ; -"RTN","BSDX25",235,0) -ERR(BSDXERR) ;Error processing -"RTN","BSDX25",236,0) - I $TLEVEL>0 TROLLBACK -"RTN","BSDX25",237,0) - S BSDXERR=$G(BSDXERR) -"RTN","BSDX25",238,0) - S BSDXERR=$P(BSDXERR,"~")_"~"_$TEXT(+0)_":"_$P(BSDXERR,"~",2) ; Append Routine Name -"RTN","BSDX25",239,0) - S BSDXI=$G(BSDXI)+1 -"RTN","BSDX25",240,0) - S ^BSDXTMP($J,BSDXI)=BSDXERR_$C(30) -"RTN","BSDX25",241,0) S BSDXI=BSDXI+1 -"RTN","BSDX25",242,0) +"RTN","BSDX25",218,0) + S ^BSDXTMP($J,BSDXI)="0"_$C(30) +"RTN","BSDX25",219,0) + S BSDXI=BSDXI+1 +"RTN","BSDX25",220,0) S ^BSDXTMP($J,BSDXI)=$C(31) +"RTN","BSDX25",221,0) + Q +"RTN","BSDX25",222,0) + ; +"RTN","BSDX25",223,0) +CHKEVT(BSDXPAT,BSDXSTART,BSDXSC) ;EP Called by BSDX CHECKIN APPOINTMENT event +"RTN","BSDX25",224,0) + ;when appointments CHECKIN via PIMS interface. +"RTN","BSDX25",225,0) + ;Propagates CHECKIN to BSDXAPPT and raises refresh event to running GUI clients +"RTN","BSDX25",226,0) + ; +"RTN","BSDX25",227,0) + Q:+$G(BSDXNOEV) +"RTN","BSDX25",228,0) + Q:'+$G(BSDXSC) +"RTN","BSDX25",229,0) + N BSDXSTAT,BSDXFOUND,BSDXRES +"RTN","BSDX25",230,0) + S BSDXSTAT="" +"RTN","BSDX25",231,0) + S:$G(SDATA("AFTER","STATUS"))["CHECKED IN" BSDXSTAT=$P(SDATA("AFTER","STATUS"),"^",4) +"RTN","BSDX25",232,0) + S BSDXFOUND=0 +"RTN","BSDX25",233,0) + I $D(^BSDXRES("ALOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ALOC",BSDXSC,0)) S BSDXFOUND=$$CHKEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT) +"RTN","BSDX25",234,0) + I BSDXFOUND D CHKEVT3(BSDXRES) Q +"RTN","BSDX25",235,0) + I $D(^BXDXRES("ASSOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ASSOC",BSDXSC,0)) S BSDXFOUND=$$CHKEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT) +"RTN","BSDX25",236,0) + I BSDXFOUND D CHKEVT3(BSDXRES) +"RTN","BSDX25",237,0) + Q +"RTN","BSDX25",238,0) + ; +"RTN","BSDX25",239,0) +CHKEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT) ; +"RTN","BSDX25",240,0) + ;Get appointment id in BSDXAPT +"RTN","BSDX25",241,0) + ;If found, call BSDXNOS(BSDXAPPT) and return 1 +"RTN","BSDX25",242,0) + ;else return 0 "RTN","BSDX25",243,0) + N BSDXFOUND,BSDXAPPT +"RTN","BSDX25",244,0) + S BSDXFOUND=0 +"RTN","BSDX25",245,0) + Q:'+$G(BSDXRES) BSDXFOUND +"RTN","BSDX25",246,0) + Q:'$D(^BSDXAPPT("ARSRC",BSDXRES,BSDXSTART)) BSDXFOUND +"RTN","BSDX25",247,0) + S BSDXAPPT=0 F S BSDXAPPT=$O(^BSDXAPPT("ARSRC",BSDXRES,BSDXSTART,BSDXAPPT)) Q:'+BSDXAPPT D Q:BSDXFOUND +"RTN","BSDX25",248,0) + . N BSDXNOD S BSDXNOD=$G(^BSDXAPPT(BSDXAPPT,0)) Q:BSDXNOD="" +"RTN","BSDX25",249,0) + . I $P(BSDXNOD,U,5)=BSDXPAT,$P(BSDXNOD,U,12)="" S BSDXFOUND=1 Q +"RTN","BSDX25",250,0) + I BSDXFOUND,+$G(BSDXAPPT) D +"RTN","BSDX25",251,0) + . N BSDXERR S BSDXERR=$$BSDXCHK(BSDXAPPT,BSDXSTAT) +"RTN","BSDX25",252,0) + . I BSDXERR D ^%ZTER ; VEN/SMH - This is silent. This is a last resort +"RTN","BSDX25",253,0) + Q BSDXFOUND +"RTN","BSDX25",254,0) + ; +"RTN","BSDX25",255,0) +CHKEVT3(BSDXRES) ; +"RTN","BSDX25",256,0) + ;Call RaiseEvent to notify GUI clients +"RTN","BSDX25",257,0) + ; +"RTN","BSDX25",258,0) + N BSDXRESN +"RTN","BSDX25",259,0) + S BSDXRESN=$G(^BSDXRES(BSDXRES,0)) +"RTN","BSDX25",260,0) + Q:BSDXRESN="" +"RTN","BSDX25",261,0) + S BSDXRESN=$P(BSDXRESN,"^") +"RTN","BSDX25",262,0) + D EVENT^BMXMEVN("BSDX SCHEDULE",BSDXRESN) +"RTN","BSDX25",263,0) + Q +"RTN","BSDX25",264,0) + ; +"RTN","BSDX25",265,0) +ERROR ; +"RTN","BSDX25",266,0) + S $ETRAP="D ^%ZTER HALT" ; Emergency Error Trap for the wise +"RTN","BSDX25",267,0) + D ^%ZTER +"RTN","BSDX25",268,0) + ; VEN/SMH: NB: I make a conscious decision not to roll back anything +"RTN","BSDX25",269,0) + ; here in the error trap. Once the error is fixed, users can +"RTN","BSDX25",270,0) + ; undo or redo the check-in. +"RTN","BSDX25",271,0) + ; Individual portions of this routine may choose to do rolling back +"RTN","BSDX25",272,0) + ; of their own (e.g. a failed call to BSDXAPI causes rollback to occur +"RTN","BSDX25",273,0) + ; in CHECKIN and RMCI) +"RTN","BSDX25",274,0) + ; +"RTN","BSDX25",275,0) + ; Log error message and send to client +"RTN","BSDX25",276,0) + D ERR("-100~Mumps Error") +"RTN","BSDX25",277,0) + Q:$Q "-100^Mumps Error" Q +"RTN","BSDX25",278,0) + ; +"RTN","BSDX25",279,0) +ERR(BSDXERR) ;Error processing +"RTN","BSDX25",280,0) + ; Unlock first +"RTN","BSDX25",281,0) + L:$D(BSDXAPPTID) -^BSDXAPPT(BSDXAPPTID) +"RTN","BSDX25",282,0) + ; If last line is $C(31), we are done. No more errors to send to client. +"RTN","BSDX25",283,0) + I ^BSDXTMP($J,$O(^BSDXTMP($J," "),-1))=$C(31) QUIT +"RTN","BSDX25",284,0) + S BSDXERR=$G(BSDXERR) +"RTN","BSDX25",285,0) + S BSDXERR=$P(BSDXERR,"~")_"~"_$TEXT(+0)_":"_$P(BSDXERR,"~",2) ; Append Routine Name +"RTN","BSDX25",286,0) + S BSDXI=$G(BSDXI)+1 +"RTN","BSDX25",287,0) + S ^BSDXTMP($J,BSDXI)=BSDXERR_$C(30) +"RTN","BSDX25",288,0) + S BSDXI=BSDXI+1 +"RTN","BSDX25",289,0) + S ^BSDXTMP($J,BSDXI)=$C(31) +"RTN","BSDX25",290,0) QUIT "RTN","BSDX26") -0^24^B31065017 +0^24^B15866028 "RTN","BSDX26",1,0) -BSDX26 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:24am +BSDX26 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 7/10/12 10:27am "RTN","BSDX26",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX26",3,0) - ; Licensed under LGPL + ; Licensed under LGPL "RTN","BSDX26",4,0) - ; Change History: + ; Change History: "RTN","BSDX26",5,0) - ; 3101023 - UJO/SMH - Addition of restartable transaction; relocation of tx. + ; 3101023 - UJO/SMH - Addition of restartable transaction; relocation of tx. "RTN","BSDX26",6,0) - ; --> Thanks to Zach Gonzalez and Rick Marshall + ; 3101205 - UJO/SMH - Extensive refactoring. "RTN","BSDX26",7,0) - ; 3101205 - UJO/SMH - Extensive refactoring. + ; 3120625 - VEN/SMH - Removal of Transactions, reloation of UTs to BSDXUT1 "RTN","BSDX26",8,0) - ; + ; "RTN","BSDX26",9,0) - ; Error Reference: + ; Error Reference: "RTN","BSDX26",10,0) - ; -1: Appt ID is not a number + ; 1: Appt ID is not a number "RTN","BSDX26",11,0) - ; -2: Appt IEN is not in ^BSDXAPPT + ; 2: Appt IEN is not in ^BSDXAPPT "RTN","BSDX26",12,0) - ; -3: FM Failure to file WP field in ^BSDXAPPT + ; 3: FM Failure to file WP field in ^BSDXAPPT "RTN","BSDX26",13,0) - ; + ; 4: BSDXAPI reports failure to change note field in ^SC "RTN","BSDX26",14,0) -EDITAPTD(BSDXY,BSDXAPTID,BSDXNOTE) ;EP + ; 5: Failure to acquire lock on ^BSDXAPPT(APPTID) "RTN","BSDX26",15,0) - ;Entry point for debugging + ; 100: Mumps Error "RTN","BSDX26",16,0) - ; + ; "RTN","BSDX26",17,0) - D DEBUG^%Serenji("EDITAPT^BSDX26(.BSDXY,BSDXAPTID,BSDXNOTE)") + ; NB: Normally I use negative numbers for errors; this routine returns "RTN","BSDX26",18,0) - Q + ; -1 as a successful result! So I needed to use +ve numbers. "RTN","BSDX26",19,0) -UT ; Unit Tests + ; "RTN","BSDX26",20,0) - ; Test 1: Make sure this damn thing works +EDITAPTD(BSDXY,BSDXAPTID,BSDXNOTE) ;EP "RTN","BSDX26",21,0) - N ZZZ + ;Entry point for debugging "RTN","BSDX26",22,0) - N %H S %H=$H + ; "RTN","BSDX26",23,0) - N NOTE S NOTE="New Note "_%H + ;D DEBUG^%Serenji("EDITAPT^BSDX26(.BSDXY,BSDXAPTID,BSDXNOTE)") "RTN","BSDX26",24,0) - D EDITAPT(.ZZZ,188,NOTE) + Q "RTN","BSDX26",25,0) - I ^BSDXAPPT(188,1,1,0)'=NOTE W "ERROR",! B -"RTN","BSDX26",26,0) - ; Test 2: Test Errors -1 and -2 -"RTN","BSDX26",27,0) - N ZZZ -"RTN","BSDX26",28,0) - N NOTE S NOTE="Nothing important" -"RTN","BSDX26",29,0) - D EDITAPT(.ZZZ,"BLAHBLAH",NOTE) -"RTN","BSDX26",30,0) - I +^BSDXTMP($J,1)'=-1 W "ERROR IN -1",! B -"RTN","BSDX26",31,0) - D EDITAPT(.ZZZ,298734322,NOTE) -"RTN","BSDX26",32,0) - I +^BSDXTMP($J,1)'=-2 W "ERROR IN -2",! B -"RTN","BSDX26",33,0) - ; Test 4: M Error -"RTN","BSDX26",34,0) - N bsdxdie S bsdxdie=1 -"RTN","BSDX26",35,0) - D EDITAPT(.ZZZ,188,NOTE) -"RTN","BSDX26",36,0) - I +^BSDXTMP($J,1)'=-100 W "ERROR IN -100",! B -"RTN","BSDX26",37,0) - k bsdxdie -"RTN","BSDX26",38,0) - ; Test 5: Trestart -"RTN","BSDX26",39,0) - N bsdxrestart S bsdxrestart=1 -"RTN","BSDX26",40,0) - N %H S %H=$H -"RTN","BSDX26",41,0) - N NOTE S NOTE="New Note "_%H -"RTN","BSDX26",42,0) - D EDITAPT(.ZZZ,188,NOTE) -"RTN","BSDX26",43,0) - I ^BSDXAPPT(188,1,1,0)'=NOTE W "ERROR in TRESTART",! B -"RTN","BSDX26",44,0) - ; Test 6: for Hosp Location Update -"RTN","BSDX26",45,0) - N DATE S DATE=$$NOW^XLFDT() -"RTN","BSDX26",46,0) - S DATE=$E(DATE,1,12) ; Just get minutes b/c of HL file input transform -"RTN","BSDX26",47,0) - D APPADD^BSDX07(.ZZZ,DATE,DATE+.001,3,"Dr Office",30,"Old Note",1) -"RTN","BSDX26",48,0) - N APPID S APPID=+$P(^BSDXTMP($J,1),U) -"RTN","BSDX26",49,0) - D EDITAPT(.ZZZ,APPID,"New Note") -"RTN","BSDX26",50,0) - I ^BSDXAPPT(APTID,1,1,0)'="New Note" W "Error in HL Section",! B -"RTN","BSDX26",51,0) - I $P(^SC(2,"S",DATE,1,1,0),U,4)'="New Note" W "Error in HL Section",! B -"RTN","BSDX26",52,0) - QUIT -"RTN","BSDX26",53,0) - ; -"RTN","BSDX26",54,0) EDITAPT(BSDXY,BSDXAPTID,BSDXNOTE) ;EP Edit appointment (only note text can be edited) +"RTN","BSDX26",26,0) + ; Called by RPC: BSDX EDIT APPOINTMENT +"RTN","BSDX26",27,0) + ; +"RTN","BSDX26",28,0) + ; Edits Appointment Text in BSDX APPOINTMENT file & Hosp Location (44) file +"RTN","BSDX26",29,0) + ; +"RTN","BSDX26",30,0) + ; Parameters: +"RTN","BSDX26",31,0) + ; - BSDXY: Global Return (RPC must be set to Global Array) +"RTN","BSDX26",32,0) + ; - BSDXAPTID: Appointment IEN in BSDX APPOINTMENT +"RTN","BSDX26",33,0) + ; - BSDXNOTE: New note +"RTN","BSDX26",34,0) + ; +"RTN","BSDX26",35,0) + ; Return: +"RTN","BSDX26",36,0) + ; ADO.net Recordset having 1 field: ERRORID +"RTN","BSDX26",37,0) + ; If Okay: -1; otherwise, positive integer with message +"RTN","BSDX26",38,0) + ; +"RTN","BSDX26",39,0) + ; Return Array; set Return and clear array +"RTN","BSDX26",40,0) + S BSDXY=$NA(^BSDXTMP($J)) +"RTN","BSDX26",41,0) + K ^BSDXTMP($J) +"RTN","BSDX26",42,0) + ; ET +"RTN","BSDX26",43,0) + N $ET S $ET="G ETRAP^BSDX26" +"RTN","BSDX26",44,0) + ; Set up basic DUZ variables +"RTN","BSDX26",45,0) + D ^XBKVAR +"RTN","BSDX26",46,0) + ; Counter +"RTN","BSDX26",47,0) + N BSDXI S BSDXI=0 +"RTN","BSDX26",48,0) + ; Header Node +"RTN","BSDX26",49,0) + S ^BSDXTMP($J,BSDXI)="T00100ERRORID"_$C(30) +"RTN","BSDX26",50,0) + ; +"RTN","BSDX26",51,0) + ;;;test for error. See if %ZTER works +"RTN","BSDX26",52,0) + I $G(BSDXDIE) S X=1/0 +"RTN","BSDX26",53,0) + ; +"RTN","BSDX26",54,0) + ; Validate Appointment ID "RTN","BSDX26",55,0) - ; Called by RPC: BSDX EDIT APPOINTMENT + I '+BSDXAPTID D ERR(BSDXI,"1~BSDX26: Invalid Appointment ID") QUIT "RTN","BSDX26",56,0) - ; + I '$D(^BSDXAPPT(BSDXAPTID,0)) D ERR(BSDXI,"2~BSDX26: Invalid Appointment ID") QUIT "RTN","BSDX26",57,0) - ; Edits Appointment Text in BSDX APPOINTMENT file & Hosp Location (44) file + ; "RTN","BSDX26",58,0) - ; + ; Lock BSDX node, only to synchronize access to the globals. "RTN","BSDX26",59,0) - ; Parameters: + ; It's not expected that the error will ever happen as no filing "RTN","BSDX26",60,0) - ; - BSDXY: Global Return (RPC must be set to Global Array) + ; is supposed to take 5 seconds. "RTN","BSDX26",61,0) - ; - BSDXAPTID: Appointment IEN in BSDX APPOINTMENT + L +^BSDXAPPT(BSDXAPTID):5 E D ERR(BSDXI,"5~BSDX08: Appt record is locked. Please contact technical support.") QUIT "RTN","BSDX26",62,0) - ; - BSDXNOTE: New note + ; "RTN","BSDX26",63,0) - ; + ; Put the WP in decendant fields from the root to file as a WP field "RTN","BSDX26",64,0) - ; Return: + S BSDXNOTE(.5)=BSDXNOTE,BSDXNOTE="" "RTN","BSDX26",65,0) - ; ADO.net Recordset having 1 field: ERRORID + I $D(BSDXNOTE(0)) S BSDXNOTE(.5)=BSDXNOTE(0) K BSDXNOTE(0) "RTN","BSDX26",66,0) - ; If Okay: -1; otherwise, positive integer with message + ; "RTN","BSDX26",67,0) - ; + N BSDXMSG ; Message in case of error in filing. "RTN","BSDX26",68,0) - ; Return Array; set Return and clear array + ; "RTN","BSDX26",69,0) - S BSDXY=$NA(^BSDXTMP($J)) + ; Save Before State in case we need it for rollback "RTN","BSDX26",70,0) - K ^BSDXTMP($J) + K ^TMP($J) "RTN","BSDX26",71,0) - ; ET + M ^TMP($J,"BEFORE","BSDXAPPT")=^BSDXAPPT(BSDXAPTID) "RTN","BSDX26",72,0) - N $ET S $ET="G ETRAP^BSDX26" + ; "RTN","BSDX26",73,0) - ; Set up basic DUZ variables + ; Update note in BSDX APPOINTMENT "RTN","BSDX26",74,0) - D ^XBKVAR + I $D(BSDXNOTE(.5)) D "RTN","BSDX26",75,0) - ; Counter + . D WP^DIE(9002018.4,BSDXAPTID_",",1,"","BSDXNOTE","BSDXMSG") "RTN","BSDX26",76,0) - N BSDXI S BSDXI=0 + ; "RTN","BSDX26",77,0) - ; Header Node + ; Error handling. No need for rollback since nothing else changed. "RTN","BSDX26",78,0) - S ^BSDXTMP($J,BSDXI)="T00100ERRORID"_$C(30) + I $D(BSDXMSG) D ERR(BSDXI,"3~BSDX26: Fileman failure to file data into 9002018.4") QUIT "RTN","BSDX26",79,0) - ; Restartable txn for GT.M. Restored vars are Params + BSDXI. + ; "RTN","BSDX26",80,0) - TSTART (BSDXY,BSDXAPTID,BSDXNOTE,BSDXI):T="BSDX EDIT APPOINTMENT^BSDX26" + ; Now file in file 44: "RTN","BSDX26",81,0) - ; + N PTIEN S PTIEN=$$GET1^DIQ(9002018.4,BSDXAPTID,".05","I") ; Patient IEN "RTN","BSDX26",82,0) - ;;;test for error inside transaction. See if %ZTER works + N HLIEN S HLIEN=$$GET1^DIQ(9002018.4,BSDXAPTID,".07:.04","I") ; HL Location IEN pointed to by Resource ID "RTN","BSDX26",83,0) - I $G(bsdxdie) S X=1/0 + N DATE S DATE=+^BSDXAPPT(BSDXAPTID,0) ; Date of APPT "RTN","BSDX26",84,0) - ;;;test + N BSDXRES S BSDXRES=0 ; Result "RTN","BSDX26",85,0) - ;;;test for TRESTART + ; Update Note only if we have a linked hospital location. "RTN","BSDX26",86,0) - I $G(bsdxrestart) K bsdxrestart TRESTART + I HLIEN S BSDXRES=$$UPDATENT^BSDXAPI1(PTIEN,HLIEN,DATE,BSDXNOTE(.5)) "RTN","BSDX26",87,0) - ;;;test + ; If we get an error (denoted by -1 in BSDXRES), return error to client "RTN","BSDX26",88,0) - ; + ; AND restore the original note "RTN","BSDX26",89,0) - ; Validate Appointment ID + I BSDXRES D ERR(BSDXI,"4~BSDX26: BSDXAPI reports an error: "_BSDXRES),ROLLBACK(BSDXAPTID) QUIT "RTN","BSDX26",90,0) - I '+BSDXAPTID D ERR(BSDXI,"-1~BSDX26: Invalid Appointment ID") QUIT + ; "RTN","BSDX26",91,0) - I '$D(^BSDXAPPT(BSDXAPTID,0)) D ERR(BSDXI,"-2~BSDX26: Invalid Appointment ID") QUIT + ;Return Recordset indicating success "RTN","BSDX26",92,0) - ; Put the WP in decendant fields from the root to file as a WP field + L -^BSDXAPPT(BSDXAPTID) "RTN","BSDX26",93,0) - S BSDXNOTE(.5)=BSDXNOTE,BSDXNOTE="" + S BSDXI=BSDXI+1 "RTN","BSDX26",94,0) - I $D(BSDXNOTE(0)) S BSDXNOTE(.5)=BSDXNOTE(0) K BSDXNOTE(0) + S ^BSDXTMP($J,BSDXI)="-1"_$C(30) "RTN","BSDX26",95,0) - N BSDXMSG ; Message in case of error in filing. + S BSDXI=BSDXI+1 "RTN","BSDX26",96,0) - I $D(BSDXNOTE(.5)) D + S ^BSDXTMP($J,BSDXI)=$C(31) "RTN","BSDX26",97,0) - . D WP^DIE(9002018.4,BSDXAPTID_",",1,"","BSDXNOTE","BSDXMSG") + ; "RTN","BSDX26",98,0) - I $D(BSDXMSG) D ERR(BSDXI,"-3~BSDX26: Fileman failure to file data into 9002018.4") QUIT + K ^TMP($J) ; Done; remove TMP data "RTN","BSDX26",99,0) - ; + QUIT "RTN","BSDX26",100,0) - ; Now file in file 44: + ; "RTN","BSDX26",101,0) - N PTIEN S PTIEN=$$GET1^DIQ(9002018.4,BSDXAPTID,".05","I") ; Patient IEN +ROLLBACK(BSDXAPTID) ; Rollback note to original in ^BSDXAPPT "RTN","BSDX26",102,0) - N HLIEN S HLIEN=$$GET1^DIQ(9002018.4,BSDXAPTID,".07:.04","I") ; HL Location IEN pointed to by Resource ID + M ^BSDXAPPT(BSDXAPTID)=^TMP($J,"BEFORE","BSDXAPPT") "RTN","BSDX26",103,0) - N DATE S DATE=+^BSDXAPPT(BSDXAPTID,0) ; Date of APPT + K ^TMP($J) "RTN","BSDX26",104,0) - N BSDXRES S BSDXRES=0 ; Result + QUIT "RTN","BSDX26",105,0) - ; Update Note only if we have a linked hospital location. + ; "RTN","BSDX26",106,0) - I HLIEN S BSDXRES=$$UPDATENOTE^BSDXAPI(PTIEN,HLIEN,DATE,BSDXNOTE(.5)) -"RTN","BSDX26",107,0) - ; If we get an error (denoted by -1 in BSDXRES), return error to client -"RTN","BSDX26",108,0) - I BSDXRES<0 D ERR(BSDXI,"-4~BSDX26: BSDXAPI reports an error: "_BSDXRES) QUIT -"RTN","BSDX26",109,0) - ;Return Recordset -"RTN","BSDX26",110,0) - TCOMMIT -"RTN","BSDX26",111,0) - S BSDXI=BSDXI+1 -"RTN","BSDX26",112,0) - S ^BSDXTMP($J,BSDXI)="-1"_$C(30) -"RTN","BSDX26",113,0) - S BSDXI=BSDXI+1 -"RTN","BSDX26",114,0) - S ^BSDXTMP($J,BSDXI)=$C(31) -"RTN","BSDX26",115,0) - QUIT -"RTN","BSDX26",116,0) - ; -"RTN","BSDX26",117,0) ERR(BSDXI,BSDXERR) ;Error processing +"RTN","BSDX26",107,0) + ; Unlock first +"RTN","BSDX26",108,0) + L:$D(BSDXAPTID) -^BSDXAPPT(BSDXAPTID) +"RTN","BSDX26",109,0) + ; If last line is $C(31), we are done. No more errors to send to client. +"RTN","BSDX26",110,0) + I ^BSDXTMP($J,$O(^BSDXTMP($J," "),-1))=$C(31) QUIT +"RTN","BSDX26",111,0) + S BSDXI=BSDXI+1 +"RTN","BSDX26",112,0) + S BSDXERR=$TR(BSDXERR,"^","~") +"RTN","BSDX26",113,0) + S ^BSDXTMP($J,BSDXI)=BSDXERR_$C(30) +"RTN","BSDX26",114,0) + S BSDXI=BSDXI+1 +"RTN","BSDX26",115,0) + S ^BSDXTMP($J,BSDXI)=$C(31) +"RTN","BSDX26",116,0) + QUIT +"RTN","BSDX26",117,0) + ; "RTN","BSDX26",118,0) - S BSDXI=BSDXI+1 -"RTN","BSDX26",119,0) - S BSDXERR=$TR(BSDXERR,"^","~") -"RTN","BSDX26",120,0) - I $TL>0 TROLLBACK -"RTN","BSDX26",121,0) - S ^BSDXTMP($J,BSDXI)=BSDXERR_$C(30) -"RTN","BSDX26",122,0) - S BSDXI=BSDXI+1 -"RTN","BSDX26",123,0) - S ^BSDXTMP($J,BSDXI)=$C(31) -"RTN","BSDX26",124,0) - QUIT -"RTN","BSDX26",125,0) - ; -"RTN","BSDX26",126,0) ETRAP ;EP Error trap entry -"RTN","BSDX26",127,0) - N $ET S $ET="D ^%ZTER HALT" ; Emergency Error Trap -"RTN","BSDX26",128,0) - I $TL>0 TROLLBACK -"RTN","BSDX26",129,0) - D ^%ZTER -"RTN","BSDX26",130,0) - S $EC="" -"RTN","BSDX26",131,0) - I '$D(BSDXI) N BSDXI S BSDXI=0 -"RTN","BSDX26",132,0) - D ERR(BSDXI,"-100~BSDX26 Error: "_$G(%ZTERZE)) -"RTN","BSDX26",133,0) - Q +"RTN","BSDX26",119,0) + N $ET S $ET="D ^%ZTER HALT" ; Emergency Error Trap +"RTN","BSDX26",120,0) + D ^%ZTER +"RTN","BSDX26",121,0) + ; +"RTN","BSDX26",122,0) + I '$D(BSDXI) N BSDXI S BSDXI=0 +"RTN","BSDX26",123,0) + D ERR(BSDXI,"100~BSDX26 Error: "_$G(%ZTERZE)) +"RTN","BSDX26",124,0) + QUIT "RTN","BSDX27") 0^25^B133802805 "RTN","BSDX27",1,0) BSDX27 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:24am "RTN","BSDX27",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX27",3,0) ; Licensed under LGPL "RTN","BSDX27",4,0) @@ -9569,11 +9295,11 @@ CLDISP(BSDXY,BSDXCLST,BSDXBEG,BSDXEND) ;EP "RTN","BSDX27",267,0) Q "RTN","BSDX28") -0^26^B35687192 +0^26^B34678667 "RTN","BSDX28",1,0) -BSDX28 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:25am +BSDX28 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 7/6/12 10:57am "RTN","BSDX28",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX28",3,0) ; Licensed under LGPL "RTN","BSDX28",4,0) @@ -9649,39 +9375,39 @@ DFN ;If DFN is passed as `nnnn, just return that patient "RTN","BSDX28",39,0) PID ;PID Lookup "RTN","BSDX28",40,0) - ; If this ID exists, go get it. If "UJOPID" index doesn't exist, + ; If this ID exists, go get it. If "UJOPID" index doesn't exist, "RTN","BSDX28",41,0) - ; won't work anyways. + ; won't work anyways. "RTN","BSDX28",42,0) - I $D(^DPT("UJOPID",BSDXP)) DO SET BSDXY=BSDXRET_$C(31) QUIT + I $D(^DPT("UJOPID",BSDXP)) DO SET BSDXY=BSDXRET_$C(31) QUIT "RTN","BSDX28",43,0) - . S BSDXIEN=$O(^DPT("UJOPID",BSDXP,"")) + . S BSDXIEN=$O(^DPT("UJOPID",BSDXP,"")) "RTN","BSDX28",44,0) - . Q:'$D(^DPT(BSDXIEN,0)) + . Q:'$D(^DPT(BSDXIEN,0)) "RTN","BSDX28",45,0) - . S BSDXDPT=$G(^DPT(BSDXIEN,0)) + . S BSDXDPT=$G(^DPT(BSDXIEN,0)) "RTN","BSDX28",46,0) - . S BSDXZ=$P(BSDXDPT,U) ;NAME + . S BSDXZ=$P(BSDXDPT,U) ;NAME "RTN","BSDX28",47,0) - . S BSDXHRN=$P($G(^AUPNPAT(BSDXIEN,41,DUZ(2),0)),U,2) ;CHART + . S BSDXHRN=$P($G(^AUPNPAT(BSDXIEN,41,DUZ(2),0)),U,2) ;CHART "RTN","BSDX28",48,0) - . I BSDXHRN="" Q ;NO CHART AT THIS DUZ2 + . I BSDXHRN="" Q ;NO CHART AT THIS DUZ2 "RTN","BSDX28",49,0) - . ; Inactivated Chart get an * + . ; Inactivated Chart get an * "RTN","BSDX28",50,0) - . I $P($G(^AUPNPAT(BSDXIEN,41,DUZ(2),0)),U,3) S BSDXHRN=BSDXHRN_"(*)" Q + . I $P($G(^AUPNPAT(BSDXIEN,41,DUZ(2),0)),U,3) S BSDXHRN=BSDXHRN_"(*)" Q "RTN","BSDX28",51,0) - . S $P(BSDXZ,BSDXDLIM,2)=BSDXHRN + . S $P(BSDXZ,BSDXDLIM,2)=BSDXHRN "RTN","BSDX28",52,0) - . S $P(BSDXZ,BSDXDLIM,3)=$P(^DPT(BSDXIEN,.36),U,3) ;PID + . S $P(BSDXZ,BSDXDLIM,3)=$P(^DPT(BSDXIEN,.36),U,3) ;PID "RTN","BSDX28",53,0) - . S Y=$P(BSDXDPT,U,3) X ^DD("DD") + . S Y=$P(BSDXDPT,U,3) X ^DD("DD") "RTN","BSDX28",54,0) - . S $P(BSDXZ,BSDXDLIM,4)=Y ;DOB + . S $P(BSDXZ,BSDXDLIM,4)=Y ;DOB "RTN","BSDX28",55,0) - . S $P(BSDXZ,BSDXDLIM,5)=BSDXIEN + . S $P(BSDXZ,BSDXDLIM,5)=BSDXIEN "RTN","BSDX28",56,0) - . S BSDXRET=BSDXRET_BSDXZ_$C(30) + . S BSDXRET=BSDXRET_BSDXZ_$C(30) "RTN","BSDX28",57,0) ; "RTN","BSDX28",58,0) @@ -9725,161 +9451,159 @@ DOB ;DOB Lookup "RTN","BSDX28",77,0) ; "RTN","BSDX28",78,0) -CHART +CHART ;Chart# Lookup "RTN","BSDX28",79,0) - ;Chart# Lookup -"RTN","BSDX28",80,0) I +DUZ(2),BSDXP]"",$D(^AUPNPAT("D",BSDXP)) D S BSDXY=BSDXRET_$C(31) Q -"RTN","BSDX28",81,0) +"RTN","BSDX28",80,0) . S BSDXIEN=0 F S BSDXIEN=$O(^AUPNPAT("D",BSDXP,BSDXIEN)) Q:'+BSDXIEN I $D(^AUPNPAT("D",BSDXP,BSDXIEN,DUZ(2))) D Q +"RTN","BSDX28",81,0) + . . Q:'$D(^DPT(BSDXIEN,0)) "RTN","BSDX28",82,0) - . . Q:'$D(^DPT(BSDXIEN,0)) + . . S BSDXDPT=$G(^DPT(BSDXIEN,0)) "RTN","BSDX28",83,0) - . . S BSDXDPT=$G(^DPT(BSDXIEN,0)) + . . S BSDXZ=$P(BSDXDPT,U) ;NAME "RTN","BSDX28",84,0) - . . S BSDXZ=$P(BSDXDPT,U) ;NAME -"RTN","BSDX28",85,0) . . S BSDXHRN=BSDXP ;CHART -"RTN","BSDX28",86,0) +"RTN","BSDX28",85,0) . . I $D(^AUPNPAT(BSDXIEN,41,DUZ(2),0)),$P(^(0),U,3) S BSDXHRN=BSDXHRN_"(*)" Q ;HMW 20050721 Record Inactivated +"RTN","BSDX28",86,0) + . . S $P(BSDXZ,BSDXDLIM,2)=BSDXHRN "RTN","BSDX28",87,0) - . . S $P(BSDXZ,BSDXDLIM,2)=BSDXHRN + . . S $P(BSDXZ,BSDXDLIM,3)=$P(^DPT(BSDXIEN,.36),U,3) ;PID "RTN","BSDX28",88,0) - . . S $P(BSDXZ,BSDXDLIM,3)=$P(^DPT(BSDXIEN,.36),U,3) ;PID + . . S Y=$P(BSDXDPT,U,3) X ^DD("DD") "RTN","BSDX28",89,0) - . . S Y=$P(BSDXDPT,U,3) X ^DD("DD") + . . S $P(BSDXZ,BSDXDLIM,4)=Y ;DOB "RTN","BSDX28",90,0) - . . S $P(BSDXZ,BSDXDLIM,4)=Y ;DOB + . . S $P(BSDXZ,BSDXDLIM,5)=BSDXIEN "RTN","BSDX28",91,0) - . . S $P(BSDXZ,BSDXDLIM,5)=BSDXIEN + . . S BSDXRET=BSDXRET_BSDXZ_$C(30) "RTN","BSDX28",92,0) - . . S BSDXRET=BSDXRET_BSDXZ_$C(30) + . . Q "RTN","BSDX28",93,0) - . . Q + . Q "RTN","BSDX28",94,0) - . Q -"RTN","BSDX28",95,0) ; -"RTN","BSDX28",96,0) +"RTN","BSDX28",95,0) SSN ;SSN Lookup -"RTN","BSDX28",97,0) +"RTN","BSDX28",96,0) I (BSDXP?9N)!(BSDXP?3N1"-"2N1"-"4N),$D(^DPT("SSN",BSDXP)) D S BSDXY=BSDXRET_$C(31) Q -"RTN","BSDX28",98,0) +"RTN","BSDX28",97,0) . S BSDXIEN=0 F S BSDXIEN=$O(^DPT("SSN",BSDXP,BSDXIEN)) Q:'+BSDXIEN D Q -"RTN","BSDX28",99,0) +"RTN","BSDX28",98,0) . . Q:'$D(^DPT(BSDXIEN,0)) -"RTN","BSDX28",100,0) +"RTN","BSDX28",99,0) . . S BSDXDPT=$G(^DPT(BSDXIEN,0)) -"RTN","BSDX28",101,0) +"RTN","BSDX28",100,0) . . S BSDXZ=$P(BSDXDPT,U) ;NAME -"RTN","BSDX28",102,0) +"RTN","BSDX28",101,0) . . S BSDXHRN=$P($G(^AUPNPAT(BSDXIEN,41,DUZ(2),0)),U,2) ;CHART -"RTN","BSDX28",103,0) +"RTN","BSDX28",102,0) . . I BSDXHRN="" Q ;NO CHART AT THIS DUZ2 -"RTN","BSDX28",104,0) +"RTN","BSDX28",103,0) . . I $P($G(^AUPNPAT(BSDXIEN,41,DUZ(2),0)),U,3) S BSDXHRN=BSDXHRN_"(*)" Q ;HMW 20050721 Record Inactivated -"RTN","BSDX28",105,0) +"RTN","BSDX28",104,0) . . S $P(BSDXZ,BSDXDLIM,2)=BSDXHRN -"RTN","BSDX28",106,0) +"RTN","BSDX28",105,0) . . S $P(BSDXZ,BSDXDLIM,3)=$P(^DPT(BSDXIEN,.36),U,3) ;PID -"RTN","BSDX28",107,0) +"RTN","BSDX28",106,0) . . S Y=$P(BSDXDPT,U,3) X ^DD("DD") -"RTN","BSDX28",108,0) +"RTN","BSDX28",107,0) . . S $P(BSDXZ,BSDXDLIM,4)=Y ;DOB -"RTN","BSDX28",109,0) +"RTN","BSDX28",108,0) . . S $P(BSDXZ,BSDXDLIM,5)=BSDXIEN -"RTN","BSDX28",110,0) +"RTN","BSDX28",109,0) . . S BSDXRET=BSDXRET_BSDXZ_$C(30) -"RTN","BSDX28",111,0) +"RTN","BSDX28",110,0) . . Q +"RTN","BSDX28",111,0) + . Q "RTN","BSDX28",112,0) - . Q + ; "RTN","BSDX28",113,0) - ; -"RTN","BSDX28",114,0) S BSDXFILE=9000001 -"RTN","BSDX28",115,0) +"RTN","BSDX28",114,0) S BSDXIENS="" -"RTN","BSDX28",116,0) +"RTN","BSDX28",115,0) S BSDXFIELDS=".01" -"RTN","BSDX28",117,0) +"RTN","BSDX28",116,0) S BSDXFLAGS="M" -"RTN","BSDX28",118,0) +"RTN","BSDX28",117,0) S BSDXVALUE=BSDXP -"RTN","BSDX28",119,0) +"RTN","BSDX28",118,0) S BSDXNUMBER=BSDXC -"RTN","BSDX28",120,0) +"RTN","BSDX28",119,0) S BSDXINDEXES="" -"RTN","BSDX28",121,0) +"RTN","BSDX28",120,0) S BSDXSCREEN=$S(+DUZ(2):"I $D(^AUPNPAT(Y,41,DUZ(2),0))",1:"") -"RTN","BSDX28",122,0) +"RTN","BSDX28",121,0) S BSDXIDEN="" -"RTN","BSDX28",123,0) +"RTN","BSDX28",122,0) S BSDXTARG="BSDXRSLT" -"RTN","BSDX28",124,0) +"RTN","BSDX28",123,0) S BSDXMSG="" -"RTN","BSDX28",125,0) +"RTN","BSDX28",124,0) D FIND^DIC(BSDXFILE,BSDXIENS,BSDXFIELDS,BSDXFLAGS,BSDXVALUE,BSDXNUMBER,BSDXINDEXES,BSDXSCREEN,BSDXIDEN,BSDXTARG,BSDXMSG) -"RTN","BSDX28",126,0) +"RTN","BSDX28",125,0) I '+$G(BSDXRSLT("DILIST",0)) S BSDXY=BSDXRET_$C(31) Q -"RTN","BSDX28",127,0) +"RTN","BSDX28",126,0) N BSDXCNT S BSDXCNT=2 -"RTN","BSDX28",128,0) +"RTN","BSDX28",127,0) F BSDXX=1:1:$P(BSDXRSLT("DILIST",0),U) D -"RTN","BSDX28",129,0) +"RTN","BSDX28",128,0) . S BSDXIEN=BSDXRSLT("DILIST",2,BSDXX) -"RTN","BSDX28",130,0) +"RTN","BSDX28",129,0) . S BSDXZ=BSDXRSLT("DILIST","ID",BSDXX,.01) ;NAME -"RTN","BSDX28",131,0) +"RTN","BSDX28",130,0) . S BSDXHRN=$P($G(^AUPNPAT(BSDXIEN,41,DUZ(2),0)),U,2) ;CHART -"RTN","BSDX28",132,0) +"RTN","BSDX28",131,0) . I BSDXHRN="" Q ;NO CHART AT THIS DUZ2 -"RTN","BSDX28",133,0) +"RTN","BSDX28",132,0) . I $P($G(^AUPNPAT(BSDXIEN,41,DUZ(2),0)),U,3) S BSDXHRN=BSDXHRN_"(*)" Q ;HMW 20050721 Record Inactivated -"RTN","BSDX28",134,0) +"RTN","BSDX28",133,0) . S $P(BSDXZ,BSDXDLIM,2)=BSDXHRN -"RTN","BSDX28",135,0) +"RTN","BSDX28",134,0) . S BSDXDPT=$G(^DPT(BSDXIEN,0)) -"RTN","BSDX28",136,0) +"RTN","BSDX28",135,0) . S $P(BSDXZ,BSDXDLIM,3)=$P(^DPT(BSDXIEN,.36),U,3) ;PID -"RTN","BSDX28",137,0) +"RTN","BSDX28",136,0) . S Y=$P(BSDXDPT,U,3) X ^DD("DD") -"RTN","BSDX28",138,0) +"RTN","BSDX28",137,0) . S $P(BSDXZ,BSDXDLIM,4)=Y ;DOB -"RTN","BSDX28",139,0) +"RTN","BSDX28",138,0) . S $P(BSDXZ,BSDXDLIM,5)=BSDXIEN -"RTN","BSDX28",140,0) +"RTN","BSDX28",139,0) . S $P(BSDXRET,$C(30),BSDXCNT)=BSDXZ -"RTN","BSDX28",141,0) +"RTN","BSDX28",140,0) . S BSDXCNT=BSDXCNT+1 -"RTN","BSDX28",142,0) +"RTN","BSDX28",141,0) . Q -"RTN","BSDX28",143,0) +"RTN","BSDX28",142,0) S BSDXY=BSDXRET_$C(30)_$C(31) +"RTN","BSDX28",143,0) + Q "RTN","BSDX28",144,0) - Q + ; "RTN","BSDX28",145,0) - ; -"RTN","BSDX28",146,0) ERROR ; -"RTN","BSDX28",147,0) +"RTN","BSDX28",146,0) D ERR("RPMS Error") -"RTN","BSDX28",148,0) +"RTN","BSDX28",147,0) Q -"RTN","BSDX28",149,0) +"RTN","BSDX28",148,0) ; -"RTN","BSDX28",150,0) +"RTN","BSDX28",149,0) ERR(ERRNO) ;Error processing -"RTN","BSDX28",151,0) +"RTN","BSDX28",150,0) S BSDXRET="T00030NAME^T00030HRN^T00030SSN^D00030DOB^T00030IEN"_$C(30)_"^^^^"_$C(30)_$C(31) -"RTN","BSDX28",152,0) +"RTN","BSDX28",151,0) Q "RTN","BSDX29") -0^27^B51293105 +0^27^B52386520 "RTN","BSDX29",1,0) -BSDX29 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:25am +BSDX29 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 7/9/12 11:50am "RTN","BSDX29",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX29",3,0) ; Licensed under LGPL "RTN","BSDX29",4,0) @@ -9895,181 +9619,181 @@ BSDX29 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:25am "RTN","BSDX29",9,0) ; - Transaction moved; now restartable too. "RTN","BSDX29",10,0) - ; --> Thanks to Zach Gonzalez and Rick Marshall. -"RTN","BSDX29",11,0) ; - Refactoring of major portions of routine +"RTN","BSDX29",11,0) + ; v1.7 by VEN/SMH on 3120622 "RTN","BSDX29",12,0) - ; + ; - Removed transaction code; Locks added in update to prevent concurrent "RTN","BSDX29",13,0) -BSDXCPD(BSDXY,BSDXRES,BSDX44,BSDXBEG,BSDXEND) ;EP + ; update "RTN","BSDX29",14,0) - ;Entry point for debugging + ; "RTN","BSDX29",15,0) - ; +BSDXCPD(BSDXY,BSDXRES,BSDX44,BSDXBEG,BSDXEND) ;EP "RTN","BSDX29",16,0) - D DEBUG^%Serenji("BSDXCP^BSDX29(.BSDXY,BSDXRES,BSDX44,BSDXBEG,BSDXEND)") + ;Entry point for debugging "RTN","BSDX29",17,0) - Q + ; "RTN","BSDX29",18,0) - ; + ;D DEBUG^%Serenji("BSDXCP^BSDX29(.BSDXY,BSDXRES,BSDX44,BSDXBEG,BSDXEND)") "RTN","BSDX29",19,0) -BSDXCP(BSDXY,BSDXRES,BSDX44,BSDXBEG,BSDXEND) ;EP + Q "RTN","BSDX29",20,0) - ;Copy appointments from HOSPITAL LOCATION entry BSDX44 to BSDX RESOURCE entry BSDXRES -"RTN","BSDX29",21,0) - ;Beginning with appointments on day BSDXBEG and ending on BSDXEND, inclusive -"RTN","BSDX29",22,0) - ;Called by RPC: BSDX COPY APPOINTMENTS -"RTN","BSDX29",23,0) ; +"RTN","BSDX29",21,0) +BSDXCP(BSDXY,BSDXRES,BSDX44,BSDXBEG,BSDXEND) ;EP +"RTN","BSDX29",22,0) + ;Copy appointments from HOSPITAL LOCATION entry BSDX44 to BSDX RESOURCE entry BSDXRES +"RTN","BSDX29",23,0) + ;Beginning with appointments on day BSDXBEG and ending on BSDXEND, inclusive "RTN","BSDX29",24,0) - ; Parameters: + ;Called by RPC: BSDX COPY APPOINTMENTS "RTN","BSDX29",25,0) - ; - BSDXY: Global Return + ; "RTN","BSDX29",26,0) - ; - BSDXRES: BSDX RESOURCE to copy appointments to + ; Parameters: "RTN","BSDX29",27,0) - ; - BSDX44: Hospital Location IEN to copy appointments from + ; - BSDXY: Global Return "RTN","BSDX29",28,0) - ; - BSDXBEG: Beginning Date in FM Format + ; - BSDXRES: BSDX RESOURCE to copy appointments to "RTN","BSDX29",29,0) - ; - BSDXEND: End Date in FM Format + ; - BSDX44: Hospital Location IEN to copy appointments from "RTN","BSDX29",30,0) - ; + ; - BSDXBEG: Beginning Date in FM Format "RTN","BSDX29",31,0) - ;Returns ADO Recordset containing TASK_NUMBER and ERRORID + ; - BSDXEND: End Date in FM Format "RTN","BSDX29",32,0) ; "RTN","BSDX29",33,0) - ; Return Array + ;Returns ADO Recordset containing TASK_NUMBER and ERRORID "RTN","BSDX29",34,0) - S BSDXY=$NA(^BSDXTMP($J)) + ; "RTN","BSDX29",35,0) - K ^BSDXTMP($J) + ; Return Array "RTN","BSDX29",36,0) - ; $ET + S BSDXY=$NA(^BSDXTMP($J)) "RTN","BSDX29",37,0) - N $ET S $ET="G ETRAP^BSDX29" + K ^BSDXTMP($J) "RTN","BSDX29",38,0) - ; Counter + ; $ET "RTN","BSDX29",39,0) - N BSDXI S BSDXI=0 + N $ET S $ET="G ETRAP^BSDX29" "RTN","BSDX29",40,0) - ; Header Node + ; Counter "RTN","BSDX29",41,0) - S ^BSDXTMP($J,0)="T00010TASK_NUMBER^T00100ERRORID"_$C(30) + N BSDXI S BSDXI=0 "RTN","BSDX29",42,0) - ; + ; Header Node "RTN","BSDX29",43,0) - ; Make dates inclusive; add 1 to FM dates + S ^BSDXTMP($J,0)="T00010TASK_NUMBER^T00100ERRORID"_$C(30) "RTN","BSDX29",44,0) - S BSDXBEG=BSDXBEG-1 + ; "RTN","BSDX29",45,0) - S BSDXEND=BSDXEND+1 + ; Make dates inclusive; add 1 to FM dates "RTN","BSDX29",46,0) - ; + S BSDXBEG=$$FMADD^XLFDT(BSDXBEG,-1) "RTN","BSDX29",47,0) - ; Taskman variables + S BSDXEND=$$FMADD^XLFDT(BSDXEND,+1) "RTN","BSDX29",48,0) - N ZTSK,ZTRTN,ZTDTH,ZTDESC,ZTSAVE + ; "RTN","BSDX29",49,0) - ; Task Load + ; Taskman variables "RTN","BSDX29",50,0) - S ZTRTN="ZTM^BSDX29",ZTDTH=$H,ZTDESC="COPY PATIENT APPTS" + N ZTSK,ZTRTN,ZTDTH,ZTDESC,ZTSAVE,ZTIO "RTN","BSDX29",51,0) - S ZTSAVE("BSDXBEG")="",ZTSAVE("BSDXEND")="",ZTSAVE("BSDX44")="",ZTSAVE("BSDXRES")="" + ; Task Load "RTN","BSDX29",52,0) - D ^%ZTLOAD + S ZTRTN="ZTM^BSDX29",ZTDTH=$H,ZTDESC="COPY PATIENT APPTS",ZTIO="" "RTN","BSDX29",53,0) - ; Set up return ADO.net dataset + S ZTSAVE("BSDXBEG")="",ZTSAVE("BSDXEND")="",ZTSAVE("BSDX44")="",ZTSAVE("BSDXRES")="" "RTN","BSDX29",54,0) - N BSDXST S BSDXST=$S($G(ZTSK)>0:"OK",1:"Unable to create task.") + D ^%ZTLOAD "RTN","BSDX29",55,0) - S BSDXI=BSDXI+1 + ; Set up return ADO.net dataset "RTN","BSDX29",56,0) - S ^BSDXTMP($J,BSDXI)=$G(ZTSK)_"^"_BSDXST_$C(30)_$C(31) + N BSDXST S BSDXST=$S($G(ZTSK)>0:"OK",1:"Unable to create task.") "RTN","BSDX29",57,0) - QUIT + S BSDXI=BSDXI+1 "RTN","BSDX29",58,0) - ; + S ^BSDXTMP($J,BSDXI)=$G(ZTSK)_"^"_BSDXST_$C(30)_$C(31) "RTN","BSDX29",59,0) -ZTMD ;EP - Debug entry point + QUIT "RTN","BSDX29",60,0) - ;D DEBUG^%Serenji("ZTM^BSDX29") -"RTN","BSDX29",61,0) - Q -"RTN","BSDX29",62,0) ; +"RTN","BSDX29",61,0) +ZTMD ;EP - Debug entry point +"RTN","BSDX29",62,0) + ;D DEBUG^%Serenji("ZTM^BSDX29") "RTN","BSDX29",63,0) -ZTM ;EP - Taskman entry point + Q "RTN","BSDX29",64,0) - ; Variables set up in ZTSAVE above + ; "RTN","BSDX29",65,0) - ; +ZTM ;EP - Taskman entry point "RTN","BSDX29",66,0) - Q:'$D(ZTSK) + ; Variables set up in ZTSAVE above "RTN","BSDX29",67,0) - ; $ET + ; "RTN","BSDX29",68,0) - N $ET S $ET="G ZTMERR^BSDX29" + Q:'$D(ZTSK) "RTN","BSDX29",69,0) - ; Txn + ; "RTN","BSDX29",70,0) - TSTART (BSDXBEG,BSDXEND,BSDX44,BSDXRES):T="BSDX COPY APPOINTMENT^BSDX29" + ; $ET "RTN","BSDX29",71,0) - ;$O through ^SC(BSDX44,"S", + N $ET S $ET="G ZTMERR^BSDX29" "RTN","BSDX29",72,0) - N BSDXCNT S BSDXCNT=0 ; Count of Copied Appointments + ; "RTN","BSDX29",73,0) - N BSDXQUIT S BSDXQUIT=0 ; Quit Flag to be retrieved from an external proc + ;$O through ^SC(BSDX44,"S", "RTN","BSDX29",74,0) - ; Set Count + N BSDXCNT S BSDXCNT=0 ; Count of Copied Appointments "RTN","BSDX29",75,0) - S ^BSDXTMP("BSDXCOPY",ZTSK)=BSDXCNT + N BSDXQUIT S BSDXQUIT=0 ; Quit Flag to be retrieved from an external proc "RTN","BSDX29",76,0) - ; Loop through dates here. + ; Set Count "RTN","BSDX29",77,0) - F S BSDXBEG=$O(^SC(BSDX44,"S",BSDXBEG)) Q:'+BSDXBEG Q:BSDXBEG>BSDXEND Q:BSDXQUIT D + S ^BSDXTMP("BSDXCOPY",ZTSK)=BSDXCNT "RTN","BSDX29",78,0) - . ; Loop through Entries in each date in the subsubfile. + ; Loop through dates here. "RTN","BSDX29",79,0) - . ; Quit if we are at the end or if a remote process requests a quit. + F S BSDXBEG=$O(^SC(BSDX44,"S",BSDXBEG)) Q:'+BSDXBEG Q:BSDXBEG>BSDXEND Q:BSDXQUIT D "RTN","BSDX29",80,0) - . N BSDXIEN S BSDXIEN=0 + . ; Loop through Entries in each date in the subsubfile. "RTN","BSDX29",81,0) - . F S BSDXIEN=$O(^SC(BSDX44,"S",BSDXBEG,1,BSDXIEN)) Q:'+BSDXIEN Q:BSDXQUIT D + . ; Quit if we are at the end or if a remote process requests a quit. "RTN","BSDX29",82,0) - . . N BSDXNOD S BSDXNOD=$G(^SC(BSDX44,"S",BSDXBEG,1,BSDXIEN,0)) ; Node + . N BSDXIEN S BSDXIEN=0 "RTN","BSDX29",83,0) - . . Q:'+BSDXNOD ; Quit if no node + . F S BSDXIEN=$O(^SC(BSDX44,"S",BSDXBEG,1,BSDXIEN)) Q:'+BSDXIEN Q:BSDXQUIT D "RTN","BSDX29",84,0) - . . N BSDXCAN S BSDXCAN=$P(BSDXNOD,U,9) ; Cancel flag + . . N BSDXNOD S BSDXNOD=$G(^SC(BSDX44,"S",BSDXBEG,1,BSDXIEN,0)) ; Node "RTN","BSDX29",85,0) - . . Q:BSDXCAN="C" ; Quit if appt cancelled + . . Q:'+BSDXNOD ; Quit if no node "RTN","BSDX29",86,0) - . . N BSDXPAT S BSDXPAT=$P(BSDXNOD,U) ; Patient + . . N BSDXCAN S BSDXCAN=$P(BSDXNOD,U,9) ; Cancel flag "RTN","BSDX29",87,0) - . . N BSDXLEN S BSDXLEN=$P(BSDXNOD,U,2) ;duration in minutes + . . Q:BSDXCAN="C" ; Quit if appt cancelled -- smh - this will never happen; cancelled appointments are normally removed from 44 "RTN","BSDX29",88,0) - . . N BSDXCLRK S BSDXCLRK=$P(BSDXNOD,U,6) ;appt made by (clerk) + . . N BSDXPAT S BSDXPAT=$P(BSDXNOD,U) ; Patient "RTN","BSDX29",89,0) - . . N BSDXMADE S BSDXMADE=$P(BSDXNOD,U,7) ;date appt made + . . N BSDXLEN S BSDXLEN=$P(BSDXNOD,U,2) ;duration in minutes "RTN","BSDX29",90,0) - . . N BSDXNOTE S BSDXNOTE=$P(BSDXNOD,U,4) ;'OTHER' field contains note + . . N BSDXCLRK S BSDXCLRK=$P(BSDXNOD,U,6) ;appt made by (clerk) "RTN","BSDX29",91,0) - . . S BSDXCNT=BSDXCNT+$$XFER(BSDXRES,BSDXBEG,BSDXPAT,BSDXLEN,BSDXCLRK,BSDXMADE,BSDXNOTE) + . . N BSDXMADE S BSDXMADE=$P(BSDXNOD,U,7) ;date appt made "RTN","BSDX29",92,0) - . . I +BSDXCNT,BSDXCNT#10=0 S ^BSDXTMP("BSDXCOPY",ZTSK)=BSDXCNT_" records copied." ;every 10th record + . . N BSDXNOTE S BSDXNOTE=$P(BSDXNOD,U,4) ;'OTHER' field contains note "RTN","BSDX29",93,0) - . . I $D(^BSDXTMP("BSDXCOPY",ZTSK,"CANCEL")) S BSDXQUIT=1 ;Check for cancel flag + . . S BSDXCNT=BSDXCNT+$$XFER(BSDXRES,BSDXBEG,BSDXPAT,BSDXLEN,BSDXCLRK,BSDXMADE,BSDXNOTE) "RTN","BSDX29",94,0) - . . Q + . . I +BSDXCNT,BSDXCNT#10=0 S ^BSDXTMP("BSDXCOPY",ZTSK)=BSDXCNT_" records copied." ;every 10th record "RTN","BSDX29",95,0) - . Q + . . I $D(^BSDXTMP("BSDXCOPY",ZTSK,"CANCEL")) S BSDXQUIT=1 ;Check for cancel flag ; smh - not used currently (v1.7) "RTN","BSDX29",96,0) - I 'BSDXQUIT TCOMMIT + ; "RTN","BSDX29",97,0) - E TROLLBACK + ; "RTN","BSDX29",98,0) S ^BSDXTMP("BSDXCOPY",ZTSK)=$S(BSDXQUIT:"Cancelled. No records copied.",1:"Finished. "_BSDXCNT_" records copied.") "RTN","BSDX29",99,0) @@ -10081,257 +9805,269 @@ ZTMERR ; For now, error from TM is only in trap; not returned to client. "RTN","BSDX29",102,0) N $ET S $ET="D ^%ZTER HALT" ; Emergency Error Trap "RTN","BSDX29",103,0) - ; Rollback before logging the error -"RTN","BSDX29",104,0) - I $TL>0 TROLLBACK -"RTN","BSDX29",105,0) D ^%ZTER -"RTN","BSDX29",106,0) - S $EC="" ; Clear Error -"RTN","BSDX29",107,0) +"RTN","BSDX29",104,0) QUIT -"RTN","BSDX29",108,0) +"RTN","BSDX29",105,0) ; -"RTN","BSDX29",109,0) +"RTN","BSDX29",106,0) XFER(BSDXRES,BSDXBEG,BSDXPAT,BSDXLEN,BSDXCLRK,BSDXMADE,BSDXNOTE) ;EP +"RTN","BSDX29",107,0) + ; +"RTN","BSDX29",108,0) + ;Copy record to BSDX APPOINTMENT file +"RTN","BSDX29",109,0) + ;Return 1 if record copied, otherwise 0 "RTN","BSDX29",110,0) ; "RTN","BSDX29",111,0) - ;Copy record to BSDX APPOINTMENT file + N REF "RTN","BSDX29",112,0) - ;Return 1 if record copied, otherwise 0 + S REF=$NA(^BSDXLOCK(BSDXRES,BSDXBEG,BSDXPAT)) ; This combo is unique "RTN","BSDX29",113,0) - ; + L +@REF:0 E Q 0 "RTN","BSDX29",114,0) - ;$O Thru ^BSDXAPPT to determine if this appt already added + ; "RTN","BSDX29",115,0) - N BSDXEND,BSDXIEN,BSDXFND,BSDXPAT2 + ;$O Thru ^BSDXAPPT to determine if this appt already added "RTN","BSDX29",116,0) - S BSDXIEN=0,BSDXFND=0 + N BSDXEND,BSDXIEN,BSDXFND,BSDXPAT2,BSDXNOD "RTN","BSDX29",117,0) - F S BSDXIEN=$O(^BSDXAPPT("ARSRC",BSDXRES,BSDXBEG,BSDXIEN)) Q:'+BSDXIEN D Q:BSDXFND + S BSDXIEN=0,BSDXFND=0 "RTN","BSDX29",118,0) - . S BSDXNOD=$G(^BSDXAPPT(BSDXIEN,0)) + F S BSDXIEN=$O(^BSDXAPPT("ARSRC",BSDXRES,BSDXBEG,BSDXIEN)) Q:'+BSDXIEN D Q:BSDXFND "RTN","BSDX29",119,0) - . Q:'+BSDXNOD + . S BSDXNOD=$G(^BSDXAPPT(BSDXIEN,0)) "RTN","BSDX29",120,0) - . S BSDXPAT2=$P(BSDXNOD,U,5) + . Q:'+BSDXNOD "RTN","BSDX29",121,0) - . S BSDXFND=0 + . S BSDXPAT2=$P(BSDXNOD,U,5) "RTN","BSDX29",122,0) - . I BSDXPAT2=BSDXPAT S BSDXFND=1 + . S BSDXFND=0 "RTN","BSDX29",123,0) - . Q + . I BSDXPAT2=BSDXPAT S BSDXFND=1 "RTN","BSDX29",124,0) - Q:BSDXFND 0 + . Q "RTN","BSDX29",125,0) - ; + I BSDXFND L -@REF Q 0 "RTN","BSDX29",126,0) - ;Add to BSDX APPOINTMENT + ; "RTN","BSDX29",127,0) - S BSDXEND=BSDXBEG + ;Add to BSDX APPOINTMENT "RTN","BSDX29",128,0) - ;Calculate ending time from beginning time and duration. + S BSDXEND=BSDXBEG "RTN","BSDX29",129,0) - S BSDXEND=$$ADDMIN(BSDXBEG,BSDXLEN) + ;Calculate ending time from beginning time and duration. "RTN","BSDX29",130,0) - S BSDXIENS="+1," + S BSDXEND=$$ADDMIN(BSDXBEG,BSDXLEN) "RTN","BSDX29",131,0) - S BSDXFDA(9002018.4,BSDXIENS,.01)=BSDXBEG + N BSDXFDA,BSDXIENS "RTN","BSDX29",132,0) - S BSDXFDA(9002018.4,BSDXIENS,.02)=BSDXEND + S BSDXIENS="+1," "RTN","BSDX29",133,0) - S BSDXFDA(9002018.4,BSDXIENS,.05)=BSDXPAT + S BSDXFDA(9002018.4,BSDXIENS,.01)=BSDXBEG "RTN","BSDX29",134,0) - S BSDXFDA(9002018.4,BSDXIENS,.07)=BSDXRES + S BSDXFDA(9002018.4,BSDXIENS,.02)=BSDXEND "RTN","BSDX29",135,0) - S BSDXFDA(9002018.4,BSDXIENS,.08)=BSDXCLRK + S BSDXFDA(9002018.4,BSDXIENS,.05)=BSDXPAT "RTN","BSDX29",136,0) - S BSDXFDA(9002018.4,BSDXIENS,.09)=BSDXMADE + S BSDXFDA(9002018.4,BSDXIENS,.07)=BSDXRES "RTN","BSDX29",137,0) - ; + S BSDXFDA(9002018.4,BSDXIENS,.08)=BSDXCLRK "RTN","BSDX29",138,0) - K BSDXIEN + S BSDXFDA(9002018.4,BSDXIENS,.09)=BSDXMADE "RTN","BSDX29",139,0) - D UPDATE^DIE("","BSDXFDA","BSDXIEN","BSDXMSG") + ; "RTN","BSDX29",140,0) - S BSDXIEN=+$G(BSDXIEN(1)) + K BSDXIEN "RTN","BSDX29",141,0) - I '+BSDXIEN Q 0 + ; "RTN","BSDX29",142,0) - ; + D UPDATE^DIE("","BSDXFDA","BSDXIEN","BSDXMSG") "RTN","BSDX29",143,0) - ;Add WP field + S BSDXIEN=+$G(BSDXIEN(1)) "RTN","BSDX29",144,0) - I BSDXNOTE]"" S BSDXNOTE(.5)=BSDXNOTE,BSDXNOTE="" D + I '+BSDXIEN L -@REF Q 0 "RTN","BSDX29",145,0) - . D WP^DIE(9002018.4,BSDXIEN_",",1,"","BSDXNOTE","BSDXMSG") + ; "RTN","BSDX29",146,0) - ; + ;Add WP field "RTN","BSDX29",147,0) - Q 1 + I BSDXNOTE]"" S BSDXNOTE(.5)=BSDXNOTE,BSDXNOTE="" D "RTN","BSDX29",148,0) - ; + . D WP^DIE(9002018.4,BSDXIEN_",",1,"","BSDXNOTE","BSDXMSG") "RTN","BSDX29",149,0) -ERR(BSDXI,BSDXCNT,BSDXERR) ;Error processing + L -@REF "RTN","BSDX29",150,0) - S BSDXI=BSDXI+1 + ; "RTN","BSDX29",151,0) - S BSDXERR=$TR(BSDXERR,"^","~") + Q 1 "RTN","BSDX29",152,0) - S ^BSDXTMP($J,BSDXI)=BSDXCNT_"^"_BSDXERR_$C(30) + ; "RTN","BSDX29",153,0) - S BSDXI=BSDXI+1 +ERR(BSDXI,BSDXCNT,BSDXERR) ;Error processing "RTN","BSDX29",154,0) - S ^BSDXTMP($J,BSDXI)=$C(31) + ; If last line is $C(31), we are done. No more errors to send to client. "RTN","BSDX29",155,0) - Q + I ^BSDXTMP($J,$O(^BSDXTMP($J," "),-1))=$C(31) QUIT "RTN","BSDX29",156,0) - ; + S BSDXI=BSDXI+1 "RTN","BSDX29",157,0) -ETRAP ;EP Error trap entry + S BSDXERR=$TR(BSDXERR,"^","~") "RTN","BSDX29",158,0) - ; No Txn here. So don't rollback anything + S ^BSDXTMP($J,BSDXI)=BSDXCNT_"^"_BSDXERR_$C(30) "RTN","BSDX29",159,0) - N $ET S $ET="D ^%ZTER HALT" ; Emergency Error Trap + S BSDXI=BSDXI+1 "RTN","BSDX29",160,0) - D ^%ZTER + S ^BSDXTMP($J,BSDXI)=$C(31) "RTN","BSDX29",161,0) - S $EC="" ; Clear error + Q "RTN","BSDX29",162,0) - I '$D(BSDXI) N BSDXI S BSDXI=0 + ; "RTN","BSDX29",163,0) - D ERR(BSDXI,$G(BSDXCNT),"~100~BSDX29, Error: "_$G(%ZTERZE)) +ETRAP ;EP Error trap entry "RTN","BSDX29",164,0) - Q + ; No Txn here. So don't rollback anything "RTN","BSDX29",165,0) - ; + N $ET S $ET="D ^%ZTER HALT" ; Emergency Error Trap "RTN","BSDX29",166,0) -CPSTAT(BSDXY,BSDXTSK) ;EP - Note: As of Dec 6 2010: Inactive Code + D ^%ZTER "RTN","BSDX29",167,0) - ;Return status (copied record count) of tasked job having ZTSK=BSDXTSK + S $EC="" ; Clear error "RTN","BSDX29",168,0) - ; + I '$D(BSDXI) N BSDXI S BSDXI=0 "RTN","BSDX29",169,0) - S BSDXY="^BSDXTMP("_$J_")" + D ERR(BSDXI,$G(BSDXCNT),"~100~BSDX29, Error: "_$G(%ZTERZE)) "RTN","BSDX29",170,0) - N BSDXI,BSDXCNT + Q "RTN","BSDX29",171,0) - S BSDXI=0 + ; "RTN","BSDX29",172,0) - S X="ETRAP^BSDX29",@^%ZOSF("TRAP") +CPSTAT(BSDXY,BSDXTSK) ;EP - Note: As of Dec 6 2010: Inactive Code "RTN","BSDX29",173,0) - S ^BSDXTMP($J,0)="T00020RECORD_COUNT^T00020ERRORID"_$C(30) + ;Return status (copied record count) of tasked job having ZTSK=BSDXTSK "RTN","BSDX29",174,0) - S BSDXCNT=$G(^BSDXTMP("BSDXCOPY",BSDXTSK)) + ; "RTN","BSDX29",175,0) - I BSDXCNT["Finished" K ^BSDXTMP("BSDXCOPY",BSDXTSK) -"RTN","BSDX29",176,0) - I BSDXCNT["Cancelled" K ^BSDXTMP("BSDXCOPY",BSDXTSK) -"RTN","BSDX29",177,0) - ;I $D(^BSDXTMP("BSDXCOPY",BSDXTSK,"CANCEL")) K ^BSDXTMP("BSDXCOPY",BSDXTSK) -"RTN","BSDX29",178,0) - S BSDXI=BSDXI+1 -"RTN","BSDX29",179,0) - S ^BSDXTMP($J,BSDXI)=BSDXCNT_"^"_"OK"_$C(30)_$C(31) -"RTN","BSDX29",180,0) - Q -"RTN","BSDX29",181,0) - ; -"RTN","BSDX29",182,0) -CPCANC(BSDXY,BSDXTSK) ;EP Note: As of Dec 6 2010: Inactive code. -"RTN","BSDX29",183,0) - ;Signal tasked job having ZTSK=BSDXTSK to cancel -"RTN","BSDX29",184,0) - ;Returns current record count of copy process -"RTN","BSDX29",185,0) - ; -"RTN","BSDX29",186,0) S BSDXY="^BSDXTMP("_$J_")" -"RTN","BSDX29",187,0) +"RTN","BSDX29",176,0) N BSDXI,BSDXCNT -"RTN","BSDX29",188,0) +"RTN","BSDX29",177,0) S BSDXI=0 -"RTN","BSDX29",189,0) +"RTN","BSDX29",178,0) S X="ETRAP^BSDX29",@^%ZOSF("TRAP") -"RTN","BSDX29",190,0) +"RTN","BSDX29",179,0) S ^BSDXTMP($J,0)="T00020RECORD_COUNT^T00020ERRORID"_$C(30) -"RTN","BSDX29",191,0) +"RTN","BSDX29",180,0) S BSDXCNT=$G(^BSDXTMP("BSDXCOPY",BSDXTSK)) -"RTN","BSDX29",192,0) - I BSDXCNT["FINISHED" K ^BSDXTMP("BSDXCOPY",BSDXTSK) -"RTN","BSDX29",193,0) - E S ^BSDXTMP("BSDXCOPY",BSDXTSK,"CANCEL")="" -"RTN","BSDX29",194,0) +"RTN","BSDX29",181,0) + I BSDXCNT["Finished" K ^BSDXTMP("BSDXCOPY",BSDXTSK) +"RTN","BSDX29",182,0) + I BSDXCNT["Cancelled" K ^BSDXTMP("BSDXCOPY",BSDXTSK) +"RTN","BSDX29",183,0) + ;I $D(^BSDXTMP("BSDXCOPY",BSDXTSK,"CANCEL")) K ^BSDXTMP("BSDXCOPY",BSDXTSK) +"RTN","BSDX29",184,0) S BSDXI=BSDXI+1 -"RTN","BSDX29",195,0) +"RTN","BSDX29",185,0) S ^BSDXTMP($J,BSDXI)=BSDXCNT_"^"_"OK"_$C(30)_$C(31) -"RTN","BSDX29",196,0) +"RTN","BSDX29",186,0) Q +"RTN","BSDX29",187,0) + ; +"RTN","BSDX29",188,0) +CPCANC(BSDXY,BSDXTSK) ;EP Note: As of Dec 6 2010: Inactive code. +"RTN","BSDX29",189,0) + ;Signal tasked job having ZTSK=BSDXTSK to cancel +"RTN","BSDX29",190,0) + ;Returns current record count of copy process +"RTN","BSDX29",191,0) + ; +"RTN","BSDX29",192,0) + S BSDXY="^BSDXTMP("_$J_")" +"RTN","BSDX29",193,0) + N BSDXI,BSDXCNT +"RTN","BSDX29",194,0) + S BSDXI=0 +"RTN","BSDX29",195,0) + S X="ETRAP^BSDX29",@^%ZOSF("TRAP") +"RTN","BSDX29",196,0) + S ^BSDXTMP($J,0)="T00020RECORD_COUNT^T00020ERRORID"_$C(30) "RTN","BSDX29",197,0) - ; + S BSDXCNT=$G(^BSDXTMP("BSDXCOPY",BSDXTSK)) "RTN","BSDX29",198,0) -ADDMIN(BSDXSTRT,BSDXLEN) ; + I BSDXCNT["FINISHED" K ^BSDXTMP("BSDXCOPY",BSDXTSK) "RTN","BSDX29",199,0) - ; + E S ^BSDXTMP("BSDXCOPY",BSDXTSK,"CANCEL")="" "RTN","BSDX29",200,0) - ;Add BSDXLEN minutes to time BSDXSTRT and return end time + S BSDXI=BSDXI+1 "RTN","BSDX29",201,0) - N BSDXEND,BSDXH,BSDXM,BSDXSTIM,BSDXETIM + S ^BSDXTMP($J,BSDXI)=BSDXCNT_"^"_"OK"_$C(30)_$C(31) "RTN","BSDX29",202,0) - S BSDXEND=$P(BSDXSTRT,".") + Q "RTN","BSDX29",203,0) ; "RTN","BSDX29",204,0) - ;Convert start time to minutes past midnight +ADDMIN(BSDXSTRT,BSDXLEN) ; "RTN","BSDX29",205,0) - S BSDXSTIM=$P(BSDXSTRT,".",2) + ; "RTN","BSDX29",206,0) - S BSDXSTIM=BSDXSTIM_"0000" + ;Add BSDXLEN minutes to time BSDXSTRT and return end time "RTN","BSDX29",207,0) - S BSDXSTIM=$E(BSDXSTIM,1,4) + N BSDXEND,BSDXH,BSDXM,BSDXSTIM,BSDXETIM "RTN","BSDX29",208,0) - S BSDXH=$E(BSDXSTIM,1,2) + S BSDXEND=$P(BSDXSTRT,".") "RTN","BSDX29",209,0) - S BSDXH=BSDXH*60 + ; "RTN","BSDX29",210,0) - S BSDXH=BSDXH+$E(BSDXSTIM,3,4) + ;Convert start time to minutes past midnight "RTN","BSDX29",211,0) - ; + S BSDXSTIM=$P(BSDXSTRT,".",2) "RTN","BSDX29",212,0) - ;Add duration to find minutes past midnight of end time + S BSDXSTIM=BSDXSTIM_"0000" "RTN","BSDX29",213,0) - S BSDXETIM=BSDXH+BSDXLEN + S BSDXSTIM=$E(BSDXSTIM,1,4) "RTN","BSDX29",214,0) - ; + S BSDXH=$E(BSDXSTIM,1,2) "RTN","BSDX29",215,0) - ;Convert back to a time + S BSDXH=BSDXH*60 "RTN","BSDX29",216,0) - S BSDXH=BSDXETIM\60 + S BSDXH=BSDXH+$E(BSDXSTIM,3,4) "RTN","BSDX29",217,0) - S BSDXH="00"_BSDXH + ; "RTN","BSDX29",218,0) - S BSDXH=$E(BSDXH,$L(BSDXH)-1,$L(BSDXH)) + ;Add duration to find minutes past midnight of end time "RTN","BSDX29",219,0) - S BSDXM=BSDXETIM#60 + S BSDXETIM=BSDXH+BSDXLEN "RTN","BSDX29",220,0) - S BSDXM="00"_BSDXM + ; "RTN","BSDX29",221,0) - S BSDXM=$E(BSDXM,$L(BSDXM)-1,$L(BSDXM)) + ;Convert back to a time "RTN","BSDX29",222,0) - S BSDXETIM=BSDXH_BSDXM + S BSDXH=BSDXETIM\60 "RTN","BSDX29",223,0) - I BSDXETIM>2400 S BSDXETIM=2400 + S BSDXH="00"_BSDXH "RTN","BSDX29",224,0) - S $P(BSDXEND,".",2)=BSDXETIM + S BSDXH=$E(BSDXH,$L(BSDXH)-1,$L(BSDXH)) "RTN","BSDX29",225,0) + S BSDXM=BSDXETIM#60 +"RTN","BSDX29",226,0) + S BSDXM="00"_BSDXM +"RTN","BSDX29",227,0) + S BSDXM=$E(BSDXM,$L(BSDXM)-1,$L(BSDXM)) +"RTN","BSDX29",228,0) + S BSDXETIM=BSDXH_BSDXM +"RTN","BSDX29",229,0) + I BSDXETIM>2400 S BSDXETIM=2400 +"RTN","BSDX29",230,0) + S $P(BSDXEND,".",2)=BSDXETIM +"RTN","BSDX29",231,0) Q BSDXEND "RTN","BSDX2E") -0^^B25743409 +0^^B26008273 "RTN","BSDX2E",1,0) -BSDX2E ;IHS/OIT/MJL - ENVIRONMENT CHECK FOR WINDOWS SCHEDULING [4/28/11 10:28am] +BSDX2E ;IHS/OIT/MJL - ENVIRONMENT CHECK FOR WINDOWS SCHEDULING [7/11/12 9:37am] "RTN","BSDX2E",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX2E",3,0) ; Licensed under LGPL "RTN","BSDX2E",4,0) @@ -10379,7 +10115,7 @@ VERSION ; "RTN","BSDX2E",25,0) ; Q:'$$PATCHCK("PIMS*5.3*1003") D "RTN","BSDX2E",26,0) - Q:'$$VERCHK("BMX",2) + Q:'$$VERCHK("BMX",4) "RTN","BSDX2E",27,0) ; "RTN","BSDX2E",28,0) @@ -10513,7 +10249,7 @@ V0200 ;EP Version 1.5 PostInit "RTN","BSDX2E",92,0) . ; Error message "RTN","BSDX2E",93,0) - . I $D(BSDXMSG) W $C(7),"Error: ",BSDXMSG("DIERR",1,"TEXT",1) + . I $D(BSDXMSG) D MES^XPDUTL("Error: ",BSDXMSG("DIERR",1,"TEXT",1)) "RTN","BSDX2E",94,0) ; "RTN","BSDX2E",95,0) @@ -10543,7 +10279,7 @@ V0200 ;EP Version 1.5 PostInit "RTN","BSDX2E",107,0) ; If error "RTN","BSDX2E",108,0) - I $D(BSDXMSG) W $C(7),"Error: ",BSDXMSG("DIERR",1,"TEXT",1) + I $D(BSDXMSG) D MES^XPDUTL("Error: ",BSDXMSG("DIERR",1,"TEXT",1)) "RTN","BSDX2E",109,0) ; "RTN","BSDX2E",110,0) @@ -10565,7 +10301,7 @@ V0200 ;EP Version 1.5 PostInit "RTN","BSDX2E",118,0) D PUT^XPAR("PKG","BSDX AUTO PRINT AS",1,0,.BSDXERR) "RTN","BSDX2E",119,0) - I $G(BSDXERR) W $C(7),"Error: ",BSDXERR + I $G(BSDXERR) D MES^XPDUTL("Error: ",BSDXERR) "RTN","BSDX2E",120,0) QUIT "RTN","BSDX2E",121,0) @@ -10609,11 +10345,11 @@ SORRY(XPX) ; "RTN","BSDX2E",140,0) ; "RTN","BSDX30") -0^28^B6707992 +0^28^B3691453 "RTN","BSDX30",1,0) -BSDX30 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; [4/28/11 10:28am] +BSDX30 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; [7/6/12 11:03am] "RTN","BSDX30",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX30",3,0) ; Licensed under LGPL "RTN","BSDX30",4,0) @@ -10627,7 +10363,7 @@ SPACED(BSDXY,BSDXDIC,BSDXVAL) ;EP "RTN","BSDX30",8,0) ; "RTN","BSDX30",9,0) - D DEBUG^%Serenji("SPACE^BSDX30(.BSDXY,BSDXDIC,BSDXVAL)") + ; D DEBUG^%Serenji("SPACE^BSDX30(.BSDXY,BSDXDIC,BSDXVAL)") "RTN","BSDX30",10,0) Q "RTN","BSDX30",11,0) @@ -10711,7 +10447,7 @@ EHRPTD(BSDXY,BSDXWID,BSDXDFN) ; "RTN","BSDX30",50,0) ; "RTN","BSDX30",51,0) - D DEBUG^%Serenji("EHRPT^BSDX30(.BSDXY,BSDXWID,BSDXDFN)") + ; D DEBUG^%Serenji("EHRPT^BSDX30(.BSDXY,BSDXWID,BSDXDFN)") "RTN","BSDX30",52,0) Q "RTN","BSDX30",53,0) @@ -10753,491 +10489,481 @@ EHRPT(BSDXY,BSDXWID,BSDXDFN) ; "RTN","BSDX30",71,0) PEVENT(BSDXWID,DFN) ;EP - Raise patient selection event to EHR "RTN","BSDX30",72,0) - ; + ; VEN/SMH v1.7 3120706 - Not used in VISTA. "RTN","BSDX30",73,0) - ;Change patient context to patient DFN + ; No way right now to synchronize with CPRS. "RTN","BSDX30",74,0) - ;on all EHR client sessions associated with user DUZ + ; Code commented out for now. "RTN","BSDX30",75,0) - ;and workstation BSDXWID. -"RTN","BSDX30",76,0) ; +"RTN","BSDX30",76,0) + ;Change patient context to patient DFN "RTN","BSDX30",77,0) - ;If BSDXWID is "", the context change is sent to + ;on all EHR client sessions associated with user DUZ "RTN","BSDX30",78,0) - ;all EHR client sessions belonging to user DUZ. + ;and workstation BSDXWID. "RTN","BSDX30",79,0) ; "RTN","BSDX30",80,0) - Q:'$G(DUZ) + ;If BSDXWID is "", the context change is sent to "RTN","BSDX30",81,0) - ;N X + ;all EHR client sessions belonging to user DUZ. "RTN","BSDX30",82,0) - ;S X="CIANBUTL" X ^%ZOSF("TEST") Q:'$T + ; "RTN","BSDX30",83,0) - ;S X="CIANBEVT" X ^%ZOSF("TEST") Q:'$T + ;Q:'$G(DUZ) "RTN","BSDX30",84,0) - N UID,BRET + ;N X "RTN","BSDX30",85,0) - S BRET=0,UID=0 + ;S X="CIANBUTL" X ^%ZOSF("TEST") Q:'$T "RTN","BSDX30",86,0) - F S BRET=$$NXTUID^CIANBUTL(.UID,1) Q:'UID D + ;S X="CIANBEVT" X ^%ZOSF("TEST") Q:'$T "RTN","BSDX30",87,0) - . Q:DUZ'=$$GETVAR^CIANBUTL("DUZ",,,UID) + ;N UID,BRET "RTN","BSDX30",88,0) - . I BSDXWID'="" Q:BSDXWID'=$TR($$GETVAR^CIANBUTL("WID",,,UID),"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") + ;S BRET=0,UID=0 "RTN","BSDX30",89,0) - . D QUEUE^CIANBEVT("CONTEXT.PATIENT",+DFN,UID) + ;F S BRET=$$NXTUID^CIANBUTL(.UID,1) Q:'UID D "RTN","BSDX30",90,0) - Q + ;. Q:DUZ'=$$GETVAR^CIANBUTL("DUZ",,,UID) +"RTN","BSDX30",91,0) + ;. I BSDXWID'="" Q:BSDXWID'=$TR($$GETVAR^CIANBUTL("WID",,,UID),"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") +"RTN","BSDX30",92,0) + ;. D QUEUE^CIANBEVT("CONTEXT.PATIENT",+DFN,UID) +"RTN","BSDX30",93,0) + ;Q "RTN","BSDX31") -0^29^B68354291 +0^29^B45572120 "RTN","BSDX31",1,0) -BSDX31 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:28am +BSDX31 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 7/10/12 10:39am "RTN","BSDX31",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX31",3,0) - ; Licensed under LGPL + ; Licensed under LGPL "RTN","BSDX31",4,0) - ; Change Log: + ; Change Log: "RTN","BSDX31",5,0) - ; v1.42 Oct 23 2010 WV/SMH + ; v1.42 3101023 WV/SMH - Change transaction to restartable. "RTN","BSDX31",6,0) - ; - Change transaction to restartable. Thanks to Zach Gonzalez + ; v1.42 3101206 UJO/SMH - Extensive refactoring "RTN","BSDX31",7,0) - ; --> and Rick Marshall for their help. + ; v1.7 3120626 VEN/SMH - Removed transactions; extensive refactoring "RTN","BSDX31",8,0) - ; v1.42 Dec 6 2010: Extensive refactoring + ; - Moved APTNS (whatever it was) to BSDXAPI1 "RTN","BSDX31",9,0) - ; + ; as $$NOSHOW "RTN","BSDX31",10,0) - ; Error Reference: + ; - Made BSDXNOS extrinsic. "RTN","BSDX31",11,0) - ; -1: zero or null Appt ID + ; - Moved Unit Tests to BSDXUT1 "RTN","BSDX31",12,0) - ; -2: Invalid APPT ID (doesn't exist in ^BSDXAPPT) + ; - BSDXNOS deletes no-show rather than file 0 for "RTN","BSDX31",13,0) - ; -3: No-show flag is invalid + ; undoing a no show "RTN","BSDX31",14,0) - ; -4: Filing of No-show in ^BSDXAPPT failed + ; "RTN","BSDX31",15,0) - ; -5: Filing of No-show in ^DPT failed (BSDXAPI error) + ; Error Reference: "RTN","BSDX31",16,0) - ; -100: M Error + ; -1: zero or null Appt ID "RTN","BSDX31",17,0) - ; + ; -2: Invalid APPT ID (doesn't exist in ^BSDXAPPT) "RTN","BSDX31",18,0) - ; + ; -3: No-show flag is invalid "RTN","BSDX31",19,0) -NOSHOWD(BSDXY,BSDXAPTID,BSDXNS) ;EP + ; -4: Filing of No-show in ^BSDXAPPT failed "RTN","BSDX31",20,0) - ;Entry point for debugging + ; -5: Filing of No-show in ^DPT failed (BSDXAPI error) "RTN","BSDX31",21,0) - ; + ; -6: Invalid Resource ID "RTN","BSDX31",22,0) - D DEBUG^%Serenji("NOSHOW^BSDX31(.BSDXY,BSDXAPTID,BSDXNS)") + ; -7: Lock not acquired on ^BSDXAPPT(BSDXAPTID) "RTN","BSDX31",23,0) - Q + ; -100: M Error "RTN","BSDX31",24,0) - ; + ; "RTN","BSDX31",25,0) -UT ; Unit Tests + ; "RTN","BSDX31",26,0) - ; Test 1: Sanity Check +NOSHOWD(BSDXY,BSDXAPTID,BSDXNS) ;EP "RTN","BSDX31",27,0) - N ZZZ ; Garbage return variable + ;Entry point for debugging "RTN","BSDX31",28,0) - N DATE S DATE=$$NOW^XLFDT() + ; "RTN","BSDX31",29,0) - S DATE=$E(DATE,1,12) ; Just get minutes b/c of HL file input transform + ; D DEBUG^%Serenji("NOSHOW^BSDX31(.BSDXY,BSDXAPTID,BSDXNS)") "RTN","BSDX31",30,0) - D APPADD^BSDX07(.ZZZ,DATE,DATE+.0001,3,"Dr Office",30,"Old Note",1) + Q "RTN","BSDX31",31,0) - N APPID S APPID=+$P(^BSDXTMP($J,1),U) + ; "RTN","BSDX31",32,0) - D NOSHOW(.ZZZ,APPID,1) -"RTN","BSDX31",33,0) - I $P(^BSDXAPPT(APPID,0),U,10)'=1 W "ERROR T1",! B -"RTN","BSDX31",34,0) - I $P(^DPT(3,"S",DATE,0),U,2)'="N" W "ERROR T1",! B -"RTN","BSDX31",35,0) - ; Test 2: Undo noshow -"RTN","BSDX31",36,0) - D NOSHOW(.ZZZ,APPID,0) -"RTN","BSDX31",37,0) - I $P(^BSDXAPPT(APPID,0),U,10)'="0" W "ERROR T2",! B -"RTN","BSDX31",38,0) - I $P(^DPT(3,"S",DATE,0),U,2)'="" W "ERROR T2",! B -"RTN","BSDX31",39,0) - ; Test 3: -1 -"RTN","BSDX31",40,0) - D NOSHOW(.ZZZ,"",0) -"RTN","BSDX31",41,0) - I $P(^BSDXTMP($J,1),U)'=-1 W "ERROR T3",! B -"RTN","BSDX31",42,0) - ; Test 4: -2 -"RTN","BSDX31",43,0) - D NOSHOW(.ZZZ,2938748233,0) -"RTN","BSDX31",44,0) - I $P(^BSDXTMP($J,1),U)'=-2 W "ERROR T4",! B -"RTN","BSDX31",45,0) - ; Test 5: -3 -"RTN","BSDX31",46,0) - D NOSHOW(.ZZZ,APPID,3) -"RTN","BSDX31",47,0) - I $P(^BSDXTMP($J,1),U)'=-3 W "ERROR T5",! B -"RTN","BSDX31",48,0) - ; Test 6: Mumps error (-100) -"RTN","BSDX31",49,0) - s bsdxdie=1 -"RTN","BSDX31",50,0) - D NOSHOW(.ZZZ,APPID,1) -"RTN","BSDX31",51,0) - I $P(^BSDXTMP($J,1),U)'=-100 W "ERROR T6",! B -"RTN","BSDX31",52,0) - k bsdxdie -"RTN","BSDX31",53,0) - ; Test 7: Restartable transaction -"RTN","BSDX31",54,0) - s bsdxrestart=1 -"RTN","BSDX31",55,0) - D NOSHOW(.ZZZ,APPID,1) -"RTN","BSDX31",56,0) - I $P(^BSDXAPPT(APPID,0),U,10)'=1 W "ERROR T7",! B -"RTN","BSDX31",57,0) - QUIT -"RTN","BSDX31",58,0) NOSHOW(BSDXY,BSDXAPTID,BSDXNS) ;EP - No show a patient +"RTN","BSDX31",33,0) + ; Called by RPC: BSDX NOSHOW +"RTN","BSDX31",34,0) + ; Sets appointment noshow flag in BSDX APPOINTMENT file and "S" node in File 2 +"RTN","BSDX31",35,0) + ; +"RTN","BSDX31",36,0) + ; Parameters: +"RTN","BSDX31",37,0) + ; BSDXY: Global Return +"RTN","BSDX31",38,0) + ; BSDXAPTID is entry number in BSDX APPOINTMENT file +"RTN","BSDX31",39,0) + ; BSDXNS = 1: NOSHOW, 0: CANCEL NOSHO +"RTN","BSDX31",40,0) + ; +"RTN","BSDX31",41,0) + ; Returns ADO.net record set with fields +"RTN","BSDX31",42,0) + ; - ERRORID; ERRORTEXT +"RTN","BSDX31",43,0) + ; ERRORID of 1 is okay +"RTN","BSDX31",44,0) + ; Anything else is an error. +"RTN","BSDX31",45,0) + ; +"RTN","BSDX31",46,0) + ; Return Array; set and clear +"RTN","BSDX31",47,0) + S BSDXY=$NA(^BSDXTMP($J)) +"RTN","BSDX31",48,0) + K ^BSDXTMP($J) +"RTN","BSDX31",49,0) + ; +"RTN","BSDX31",50,0) + ; $ET +"RTN","BSDX31",51,0) + N $ET S $ET="G ETRAP^BSDX31" +"RTN","BSDX31",52,0) + ; +"RTN","BSDX31",53,0) + ; Basline vars +"RTN","BSDX31",54,0) + D ^XBKVAR ; Set up baseline variables (DUZ, DUZ(2)) if they don't exist +"RTN","BSDX31",55,0) + ; +"RTN","BSDX31",56,0) + ; Counter +"RTN","BSDX31",57,0) + N BSDXI S BSDXI=0 +"RTN","BSDX31",58,0) + ; "RTN","BSDX31",59,0) - ; Called by RPC: BSDX NOSHOW + ; Header Node "RTN","BSDX31",60,0) - ; Sets appointment noshow flag in BSDX APPOINTMENT file and "S" node in File 2 + S ^BSDXTMP($J,BSDXI)="I00100ERRORID^T00030ERRORTEXT"_$C(30) "RTN","BSDX31",61,0) - ; + ; "RTN","BSDX31",62,0) - ; Parameters: + ;;;test for error. See if %ZTER works "RTN","BSDX31",63,0) - ; BSDXY: Global Return + I $G(BSDXDIE) N X S X=1/0 "RTN","BSDX31",64,0) - ; BSDXAPTID is entry number in BSDX APPOINTMENT file + ;;;TEST "RTN","BSDX31",65,0) - ; BSDXNS = 1: NOSHOW, 0: CANCEL NOSHO + ; "RTN","BSDX31",66,0) - ; + ; Turn off SDAM APPT PROTOCOL BSDX Entries "RTN","BSDX31",67,0) - ; Returns ADO.net record set with fields + N BSDXNOEV S BSDXNOEV=1 ;Don't execute protocol "RTN","BSDX31",68,0) - ; - ERRORID; ERRORTEXT + ; "RTN","BSDX31",69,0) - ; ERRORID of 1 is okay + ; Appointment ID check "RTN","BSDX31",70,0) - ; Anything else is an error. + I '+BSDXAPTID D ERR(-1,"BSDX31: Invalid Appointment ID") Q "RTN","BSDX31",71,0) - ; + I '$D(^BSDXAPPT(BSDXAPTID,0)) D ERR(-2,"BSDX31: Invalid Appointment ID") Q "RTN","BSDX31",72,0) - ; Return Array; set and clear + ; "RTN","BSDX31",73,0) - S BSDXY=$NA(^BSDXTMP($J)) + ; Lock BSDX node, only to synchronize access to the globals. "RTN","BSDX31",74,0) - K ^BSDXTMP($J) + ; It's not expected that the error will ever happen as no filing "RTN","BSDX31",75,0) - ; $ET + ; is supposed to take 5 seconds. "RTN","BSDX31",76,0) - N $ET S $ET="G ETRAP^BSDX31" + L +^BSDXAPPT(BSDXAPTID):5 E D ERR(-7,"BSDX31: Appt record is locked. Please contact technical support.") Q "RTN","BSDX31",77,0) - ; Basline vars + ; "RTN","BSDX31",78,0) - D ^XBKVAR ; Set up baseline variables (DUZ, DUZ(2)) if they don't exist + ; Noshow value check - Must be 1 or 0 "RTN","BSDX31",79,0) - ; Counter + S BSDXNS=+BSDXNS "RTN","BSDX31",80,0) - N BSDXI S BSDXI=0 + I BSDXNS'=1&(BSDXNS'=0) D ERR(-3,"BSDX31: Invalid No Show value") Q "RTN","BSDX31",81,0) - ; Header Node + ; "RTN","BSDX31",82,0) - S ^BSDXTMP($J,BSDXI)="I00100ERRORID^T00030ERRORTEXT"_$C(30) + ; Get Some data "RTN","BSDX31",83,0) - ; Begin transaction + N BSDXNOD S BSDXNOD=^BSDXAPPT(BSDXAPTID,0) ; Node "RTN","BSDX31",84,0) - TSTART (BSDXI,BSDXY,BSDXAPTID,BSDXNS):T="BSDX NOSHOW CANCEL^BSDX29" + N BSDXPATID S BSDXPATID=$P(BSDXNOD,U,5) ; DFN "RTN","BSDX31",85,0) - ;;;test for error inside transaction. See if %ZTER works + N BSDXSTART S BSDXSTART=$P(BSDXNOD,U) ; Start Date/Time "RTN","BSDX31",86,0) - I $G(bsdxdie) S X=1/0 + N BSDXRES S BSDXRES=$P(BSDXNOD,U,7) ; Resource ID "RTN","BSDX31",87,0) - ;;;TEST + ; "RTN","BSDX31",88,0) - ;;;test for TRESTART + ; Check if Resource ID is missing or invalid "RTN","BSDX31",89,0) - I $G(bsdxrestart) K bsdxrestart TRESTART + I BSDXRES="" D ERR(-6,"BSDX31: Invalid Resource") QUIT "RTN","BSDX31",90,0) - ;;;test + I '$D(^BSDXRES(BSDXRES,0)) D ERR(-6,"BSDX31: Invalid Resource") QUIT "RTN","BSDX31",91,0) - ; Turn off SDAM APPT PROTOCOL BSDX Entries + ; "RTN","BSDX31",92,0) - N BSDXNOEV S BSDXNOEV=1 ;Don't execute protocol + ; Get the Hospital Location "RTN","BSDX31",93,0) - ; Appointment ID check + N BSDXRESNOD S BSDXRESNOD=^BSDXRES(BSDXRES,0) "RTN","BSDX31",94,0) - I '+BSDXAPTID D ERR(-1,"BSDX31: Invalid Appointment ID") Q + N BSDXLOC S BSDXLOC=$P(BSDXRESNOD,U,4) ;HOSPITAL LOCATION "RTN","BSDX31",95,0) - I '$D(^BSDXAPPT(BSDXAPTID,0)) D ERR(-2,"BSDX31: Invalid Appointment ID") Q + I BSDXLOC,'$D(^SC(BSDXLOC,0)) S BSDXLOC="" ; Unlink it if it doesn't exist "RTN","BSDX31",96,0) - ; Noshow value check - Must be 1 or 0 + ; I can go and then delete it from ^BSDXRES like Mailman code which tries "RTN","BSDX31",97,0) - S BSDXNS=+BSDXNS + ; to be too helpful... but I will postpone that until this is a need. "RTN","BSDX31",98,0) - I BSDXNS'=1&(BSDXNS'=0) D ERR(-3,"BSDX31: Invalid No Show value") Q + ; "RTN","BSDX31",99,0) - ; Get Some data + ; Check if it's okay to no-show patient. "RTN","BSDX31",100,0) - N BSDXNOD S BSDXNOD=^BSDXAPPT(BSDXAPTID,0) ; Node + N BSDXERR S BSDXERR=0 ; Error variable "RTN","BSDX31",101,0) - N BSDXPATID S BSDXPATID=$P(BSDXNOD,U,5) ; DFN + I BSDXLOC S BSDXERR=$$NOSHOWCK^BSDXAPI1(BSDXPATID,BSDXLOC,BSDXSTART,BSDXNS) "RTN","BSDX31",102,0) - N BSDXSTART S BSDXSTART=$P(BSDXNOD,U) ; Start Date/Time + I BSDXERR D ERR(-5,"BSDX31: "_$P(BSDXERR,U,2)) QUIT "RTN","BSDX31",103,0) - ; Edit BSDX APPOINTMENT entry + ; "RTN","BSDX31",104,0) - N BSDXMSG ; + ; Simulated Error "RTN","BSDX31",105,0) - D BSDXNOS(BSDXAPTID,BSDXNS,.BSDXMSG) ;Edit BSDX APPOINTMENT entry NOSHOW field + I $G(BSDXSIMERR1) D ERR(-4,"BSDX31: Simulated Error") QUIT "RTN","BSDX31",106,0) - I $D(BSDXMSG("DIERR")) S BSDXMSG=$G(BSDXMSG("DIERR",1,"TEXT",1)) D ERR(-4,"BSDX31: "_BSDXMSG) Q + ; Edit BSDX APPOINTMENT entry No-show field "RTN","BSDX31",107,0) - ; Edit File 2 "S" node entry + ; Failure Analysis: If we fail here, no rollback needed, as this is the 1st "RTN","BSDX31",108,0) - N BSDXZ,BSDXERR ; Error variables to control looping + ; call "RTN","BSDX31",109,0) - S BSDXSC1=$P(BSDXNOD,U,7) ;RESOURCEID + N BSDXMSG S BSDXMSG=$$BSDXNOS(BSDXAPTID,BSDXNS) "RTN","BSDX31",110,0) - ; If Resource ID exists, and HL exists (means that Resource is linked), No show in File 2 + I BSDXMSG D ERR(-4,"BSDX31: "_$P(BSDXMSG,U,2)) QUIT "RTN","BSDX31",111,0) - I BSDXSC1]"",$D(^BSDXRES(BSDXSC1,0)) D I $G(BSDXZ)]"" S BSDXERR="BSDX31: APNOSHO Returned: "_BSDXZ D ERR(-5,BSDXERR) Q + ; "RTN","BSDX31",112,0) - . S BSDXNOD=^BSDXRES(BSDXSC1,0) + ; Edit File 2 "S" node entry "RTN","BSDX31",113,0) - . S BSDXSC1=$P(BSDXNOD,U,4) ;HOSPITAL LOCATION + ; Failure Analysis: If we fail here, we need to rollback the BSDX "RTN","BSDX31",114,0) - . I BSDXSC1]"",$D(^SC(BSDXSC1,0)) D APNOSHO(.BSDXZ,BSDXSC1,BSDXPATID,BSDXSTART,BSDXNS) + ; Apptointment Entry "RTN","BSDX31",115,0) - ; + N BSDXERR S BSDXERR=0 ; Error variable "RTN","BSDX31",116,0) - TCOMMIT + ; If HL exist, (resource is linked to PIMS), file no show in File 2 "RTN","BSDX31",117,0) - S BSDXI=BSDXI+1 + I BSDXLOC S BSDXERR=$$NOSHOW^BSDXAPI1(BSDXPATID,BSDXLOC,BSDXSTART,BSDXNS) "RTN","BSDX31",118,0) - S ^BSDXTMP($J,BSDXI)="1^"_$C(30) ; 1 means everything okay + I BSDXERR D QUIT "RTN","BSDX31",119,0) - S BSDXI=BSDXI+1 + . D ERR(-5,"BSDX31: "_$P(BSDXERR,U,2)) "RTN","BSDX31",120,0) - S ^BSDXTMP($J,BSDXI)=$C(31) + . N % S %=$$BSDXNOS(BSDXAPTID,'BSDXNS) ; no error checking for filer "RTN","BSDX31",121,0) - QUIT + ; "RTN","BSDX31",122,0) - ; + ; Unlock "RTN","BSDX31",123,0) -APNOSHO(BSDXZ,BSDXSC1,BSDXDFN,BSDXSD,BSDXNS) ; + L -^BSDXAPPT(BSDXAPTID) "RTN","BSDX31",124,0) - ; update file 2 info + ; "RTN","BSDX31",125,0) - ;Set noshow for patient BSDXDFN in clinic BSDXSC1 + ; Return data in ADO.net table "RTN","BSDX31",126,0) - ;at time BSDXSD + S BSDXI=BSDXI+1 "RTN","BSDX31",127,0) - N BSDXC,%H,BSDXCDT,BSDXIEN + S ^BSDXTMP($J,BSDXI)="1^"_$C(30) ; 1 means everything okay "RTN","BSDX31",128,0) - N BSDXIENS,BSDXFDA,BSDXMSG + S BSDXI=BSDXI+1 "RTN","BSDX31",129,0) - S %H=$H D YMD^%DTC + S ^BSDXTMP($J,BSDXI)=$C(31) "RTN","BSDX31",130,0) - S BSDXCDT=X+% + QUIT "RTN","BSDX31",131,0) - ; + ; "RTN","BSDX31",132,0) - S BSDXIENS=BSDXSD_","_BSDXDFN_"," +BSDXNOS(BSDXAPTID,BSDXNS) ; $$ Private; File/unfile noshow in ^BSDXAPPT "RTN","BSDX31",133,0) - I +BSDXNS D + ; in v1.7 I delete the no-show value rather than file zero "RTN","BSDX31",134,0) - . S BSDXFDA(2.98,BSDXIENS,3)="N" + N BSDXFDA,BSDXIENS,BSDXMSG "RTN","BSDX31",135,0) - . S BSDXFDA(2.98,BSDXIENS,14)=DUZ + N BSDXVALUE ; What to file: 1 or delete it. "RTN","BSDX31",136,0) - . S BSDXFDA(2.98,BSDXIENS,15)=BSDXCDT + I BSDXNS S BSDXVALUE=1 "RTN","BSDX31",137,0) - E D + E S BSDXVALUE="@" "RTN","BSDX31",138,0) - . S BSDXFDA(2.98,BSDXIENS,3)="" + S BSDXIENS=BSDXAPTID_"," "RTN","BSDX31",139,0) - . S BSDXFDA(2.98,BSDXIENS,14)="" + S BSDXFDA(9002018.4,BSDXIENS,.1)=BSDXVALUE ;NOSHOW 1 or 0 "RTN","BSDX31",140,0) - . S BSDXFDA(2.98,BSDXIENS,15)="" + D FILE^DIE("","BSDXFDA","BSDXMSG") "RTN","BSDX31",141,0) - K BSDXIEN + QUIT:$D(BSDXMSG) -1_U_BSDXMSG("DIERR",1,"TEXT",1) "RTN","BSDX31",142,0) - D UPDATE^DIE("","BSDXFDA","BSDXIEN","BSDXMSG") + QUIT 0 "RTN","BSDX31",143,0) - S BSDXZ=$G(BSDXMSG("DIERR",1,"TEXT",1)) + ; "RTN","BSDX31",144,0) - Q -"RTN","BSDX31",145,0) - ; -"RTN","BSDX31",146,0) -BSDXNOS(BSDXAPTID,BSDXNS,BSDXMSG) ; -"RTN","BSDX31",147,0) - ; -"RTN","BSDX31",148,0) - N BSDXFDA,BSDXIENS -"RTN","BSDX31",149,0) - S BSDXIENS=BSDXAPTID_"," -"RTN","BSDX31",150,0) - S BSDXFDA(9002018.4,BSDXIENS,.1)=BSDXNS ;NOSHOW -"RTN","BSDX31",151,0) - D FILE^DIE("","BSDXFDA","BSDXMSG") -"RTN","BSDX31",152,0) - QUIT -"RTN","BSDX31",153,0) - ; -"RTN","BSDX31",154,0) NOSEVT(BSDXPAT,BSDXSTART,BSDXSC) ;EP Called by BSDX NOSHOW APPOINTMENT event +"RTN","BSDX31",145,0) + ;when appointments NOSHOW via PIMS interface. +"RTN","BSDX31",146,0) + ;Propagates NOSHOW to BSDXAPPT and raises refresh event to running GUI clients +"RTN","BSDX31",147,0) + ; +"RTN","BSDX31",148,0) + Q:+$G(BSDXNOEV) +"RTN","BSDX31",149,0) + Q:'+$G(BSDXSC) +"RTN","BSDX31",150,0) + Q:$G(SDATA("AFTER","STATUS"))["AUTO RE-BOOK" +"RTN","BSDX31",151,0) + N BSDXSTAT,BSDXFOUND,BSDXRES +"RTN","BSDX31",152,0) + S BSDXSTAT=1 +"RTN","BSDX31",153,0) + S:$G(SDATA("BEFORE","STATUS"))["NO-SHOW" BSDXSTAT=0 +"RTN","BSDX31",154,0) + S BSDXFOUND=0 "RTN","BSDX31",155,0) - ;when appointments NOSHOW via PIMS interface. + I $D(^BSDXRES("ALOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ALOC",BSDXSC,0)) S BSDXFOUND=$$NOSEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT) "RTN","BSDX31",156,0) - ;Propagates NOSHOW to BSDXAPPT and raises refresh event to running GUI clients + I BSDXFOUND D NOSEVT3(BSDXRES) Q "RTN","BSDX31",157,0) - ; + I $D(^BXDXRES("ASSOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ASSOC",BSDXSC,0)) S BSDXFOUND=$$NOSEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT) "RTN","BSDX31",158,0) - Q:+$G(BSDXNOEV) + I BSDXFOUND D NOSEVT3(BSDXRES) "RTN","BSDX31",159,0) - Q:'+$G(BSDXSC) + Q "RTN","BSDX31",160,0) - Q:$G(SDATA("AFTER","STATUS"))["AUTO RE-BOOK" + ; "RTN","BSDX31",161,0) - N BSDXSTAT,BSDXFOUND,BSDXRES -"RTN","BSDX31",162,0) - S BSDXSTAT=1 -"RTN","BSDX31",163,0) - S:$G(SDATA("BEFORE","STATUS"))["NO-SHOW" BSDXSTAT=0 -"RTN","BSDX31",164,0) - S BSDXFOUND=0 -"RTN","BSDX31",165,0) - I $D(^BSDXRES("ALOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ALOC",BSDXSC,0)) S BSDXFOUND=$$NOSEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT) -"RTN","BSDX31",166,0) - I BSDXFOUND D NOSEVT3(BSDXRES) Q -"RTN","BSDX31",167,0) - I $D(^BXDXRES("ASSOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ASSOC",BSDXSC,0)) S BSDXFOUND=$$NOSEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT) -"RTN","BSDX31",168,0) - I BSDXFOUND D NOSEVT3(BSDXRES) -"RTN","BSDX31",169,0) - Q -"RTN","BSDX31",170,0) - ; -"RTN","BSDX31",171,0) NOSEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT) ; +"RTN","BSDX31",162,0) + ;Get appointment id in BSDXAPT +"RTN","BSDX31",163,0) + ;If found, call BSDXNOS(BSDXAPPT) and return 1 +"RTN","BSDX31",164,0) + ;else return 0 +"RTN","BSDX31",165,0) + N BSDXFOUND,BSDXAPPT,BSDXNOD +"RTN","BSDX31",166,0) + S BSDXFOUND=0 +"RTN","BSDX31",167,0) + Q:'+$G(BSDXRES) BSDXFOUND +"RTN","BSDX31",168,0) + Q:'$D(^BSDXAPPT("ARSRC",BSDXRES,BSDXSTART)) BSDXFOUND +"RTN","BSDX31",169,0) + S BSDXAPPT=0 F S BSDXAPPT=$O(^BSDXAPPT("ARSRC",BSDXRES,BSDXSTART,BSDXAPPT)) Q:'+BSDXAPPT D Q:BSDXFOUND +"RTN","BSDX31",170,0) + . S BSDXNOD=$G(^BSDXAPPT(BSDXAPPT,0)) Q:BSDXNOD="" +"RTN","BSDX31",171,0) + . I $P(BSDXNOD,U,5)=BSDXPAT,$P(BSDXNOD,U,12)="" S BSDXFOUND=1 Q "RTN","BSDX31",172,0) - ;Get appointment id in BSDXAPT + I BSDXFOUND,+$G(BSDXAPPT) N BSDXMSG S BSDXMSG=$$BSDXNOS(BSDXAPPT,BSDXSTAT) "RTN","BSDX31",173,0) - ;If found, call BSDXNOS(BSDXAPPT) and return 1 + I BSDXMSG D ^%ZTER ; Last ditch error handling. This is supposed to be silently called from the protocol file. "RTN","BSDX31",174,0) - ;else return 0 + Q BSDXFOUND "RTN","BSDX31",175,0) - N BSDXFOUND,BSDXAPPT + ; "RTN","BSDX31",176,0) - S BSDXFOUND=0 -"RTN","BSDX31",177,0) - Q:'+$G(BSDXRES) BSDXFOUND -"RTN","BSDX31",178,0) - Q:'$D(^BSDXAPPT("ARSRC",BSDXRES,BSDXSTART)) BSDXFOUND -"RTN","BSDX31",179,0) - S BSDXAPPT=0 F S BSDXAPPT=$O(^BSDXAPPT("ARSRC",BSDXRES,BSDXSTART,BSDXAPPT)) Q:'+BSDXAPPT D Q:BSDXFOUND -"RTN","BSDX31",180,0) - . S BSDXNOD=$G(^BSDXAPPT(BSDXAPPT,0)) Q:BSDXNOD="" -"RTN","BSDX31",181,0) - . I $P(BSDXNOD,U,5)=BSDXPAT,$P(BSDXNOD,U,12)="" S BSDXFOUND=1 Q -"RTN","BSDX31",182,0) - I BSDXFOUND,+$G(BSDXAPPT) D BSDXNOS(BSDXAPPT,BSDXSTAT) -"RTN","BSDX31",183,0) - Q BSDXFOUND -"RTN","BSDX31",184,0) - ; -"RTN","BSDX31",185,0) NOSEVT3(BSDXRES) ; +"RTN","BSDX31",177,0) + ;Call RaiseEvent to notify GUI clients +"RTN","BSDX31",178,0) + ; +"RTN","BSDX31",179,0) + N BSDXRESN +"RTN","BSDX31",180,0) + S BSDXRESN=$G(^BSDXRES(BSDXRES,0)) +"RTN","BSDX31",181,0) + Q:BSDXRESN="" +"RTN","BSDX31",182,0) + S BSDXRESN=$P(BSDXRESN,"^") +"RTN","BSDX31",183,0) + D EVENT^BMXMEVN("BSDX SCHEDULE",BSDXRESN) +"RTN","BSDX31",184,0) + Q +"RTN","BSDX31",185,0) + ; "RTN","BSDX31",186,0) - ;Call RaiseEvent to notify GUI clients + ; "RTN","BSDX31",187,0) - ; -"RTN","BSDX31",188,0) - N BSDXRESN -"RTN","BSDX31",189,0) - S BSDXRESN=$G(^BSDXRES(BSDXRES,0)) -"RTN","BSDX31",190,0) - Q:BSDXRESN="" -"RTN","BSDX31",191,0) - S BSDXRESN=$P(BSDXRESN,"^") -"RTN","BSDX31",192,0) - D EVENT^BMXMEVN("BSDX SCHEDULE",BSDXRESN) -"RTN","BSDX31",193,0) - Q -"RTN","BSDX31",194,0) - ; -"RTN","BSDX31",195,0) - ; -"RTN","BSDX31",196,0) ERR(BSDXERID,ERRTXT) ;Error processing +"RTN","BSDX31",188,0) + ; Unlock first +"RTN","BSDX31",189,0) + L:$D(BSDXAPTID) -^BSDXAPPT(BSDXAPTID) +"RTN","BSDX31",190,0) + ; If last line is $C(31), we are done. No more errors to send to client. +"RTN","BSDX31",191,0) + I ^BSDXTMP($J,$O(^BSDXTMP($J," "),-1))=$C(31) QUIT +"RTN","BSDX31",192,0) + S BSDXI=BSDXI+1 +"RTN","BSDX31",193,0) + S ERRTXT=$TR(ERRTXT,"^","~") +"RTN","BSDX31",194,0) + S ^BSDXTMP($J,BSDXI)=BSDXERID_"^"_ERRTXT_$C(30) +"RTN","BSDX31",195,0) + S BSDXI=BSDXI+1 +"RTN","BSDX31",196,0) + S ^BSDXTMP($J,BSDXI)=$C(31) "RTN","BSDX31",197,0) - S BSDXI=BSDXI+1 + QUIT "RTN","BSDX31",198,0) - S ERRTXT=$TR(ERRTXT,"^","~") + ; "RTN","BSDX31",199,0) - I $TL>0 TROLLBACK -"RTN","BSDX31",200,0) - S ^BSDXTMP($J,BSDXI)=BSDXERID_"^"_ERRTXT_$C(30) -"RTN","BSDX31",201,0) - S BSDXI=BSDXI+1 -"RTN","BSDX31",202,0) - S ^BSDXTMP($J,BSDXI)=$C(31) -"RTN","BSDX31",203,0) - QUIT -"RTN","BSDX31",204,0) - ; -"RTN","BSDX31",205,0) ETRAP ;EP Error trap entry +"RTN","BSDX31",200,0) + N $ET S $ET="D ^%ZTER HALT" ; Emergency Error Trap +"RTN","BSDX31",201,0) + D ^%ZTER +"RTN","BSDX31",202,0) + ; +"RTN","BSDX31",203,0) + ; Send to client +"RTN","BSDX31",204,0) + I '$D(BSDXI) N BSDXI S BSDXI=0 +"RTN","BSDX31",205,0) + D ERR(-100,"BSDX31 Error: "_$G(%ZTERZE)) "RTN","BSDX31",206,0) - N $ET S $ET="D ^%ZTER HALT" ; Emergency Error Trap + Q:$Q 100_U_"Mumps Error" Q "RTN","BSDX31",207,0) - ; Rollback, otherwise ^XTER will be empty from future rollback + ; "RTN","BSDX31",208,0) - I $TL>0 TROLLBACK -"RTN","BSDX31",209,0) - D ^%ZTER -"RTN","BSDX31",210,0) - S $EC="" ; Clear Error -"RTN","BSDX31",211,0) - ; Send to client -"RTN","BSDX31",212,0) - I '$D(BSDXI) N BSDXI S BSDXI=0 -"RTN","BSDX31",213,0) - D ERR(-100,"BSDX31 Error: "_$G(%ZTERZE)) -"RTN","BSDX31",214,0) - QUIT -"RTN","BSDX31",215,0) - ; -"RTN","BSDX31",216,0) IMHERE(BSDXRES) ;EP -"RTN","BSDX31",217,0) - ;Entry point for BSDX IM HERE remote procedure -"RTN","BSDX31",218,0) - S BSDXRES=1 -"RTN","BSDX31",219,0) - Q -"RTN","BSDX31",220,0) - ; +"RTN","BSDX31",209,0) + ;Entry point for BSDX IM HERE remote procedure +"RTN","BSDX31",210,0) + S BSDXRES=1 +"RTN","BSDX31",211,0) + Q +"RTN","BSDX31",212,0) + ; "RTN","BSDX32") 0^30^B20186652 "RTN","BSDX32",1,0) BSDX32 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 5/11/11 10:39am "RTN","BSDX32",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX32",3,0) ; Licensed under LGPL "RTN","BSDX32",4,0) @@ -11447,7 +11173,7 @@ CLNSET(BSDXY) ;EP "RTN","BSDX33",1,0) BSDX33 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:29am "RTN","BSDX33",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX33",3,0) ; Licensed under LGPL "RTN","BSDX33",4,0) @@ -11705,7 +11431,7 @@ ERROR2 ; "RTN","BSDX34",1,0) BSDX34 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:29am "RTN","BSDX34",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX34",3,0) ; Licensed under LGPL "RTN","BSDX34",4,0) @@ -12059,9 +11785,9 @@ ERR(ERRNO) ;Error processing "RTN","BSDX35") 0^33^B8259199 "RTN","BSDX35",1,0) -BSDX35 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:29am +BSDX35 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 6/21/12 3:57pm "RTN","BSDX35",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDX35",3,0) ; Licensed under LGPL "RTN","BSDX35",4,0) @@ -12209,765 +11935,869 @@ ERR(ERRNO) ;Error processing "RTN","BSDX35",75,0) Q "RTN","BSDXAPI") -0^35^B149872646 +0^35^B171938499 "RTN","BSDXAPI",1,0) -BSDXAPI ; IHS/ANMC/LJF & VW/SMH - SCHEDULING APIs ; 4/28/11 10:30am +BSDXAPI ; IHS/LJF,HMW,MAW & VEN/SMH - SCHEDULING APIs ; 7/10/12 5:58pm "RTN","BSDXAPI",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDXAPI",3,0) ; Licensed under LGPL "RTN","BSDXAPI",4,0) ; "RTN","BSDXAPI",5,0) - ;Orignal routine is BSDAPI by IHS/LJF, HMW, and MAW + ; Orignal routine is BSDAPI by IHS/LJF, HMW, and MAW "RTN","BSDXAPI",6,0) - ;local mods (many) by WV/SMH + ; mods (many) by WV/SMH "RTN","BSDXAPI",7,0) - ;Move to BSDX namespace as BSDXAPI from BSDAPI by WV/SMH + ; Move to BSDX namespace as BSDXAPI from BSDAPI by WV/SMH "RTN","BSDXAPI",8,0) - ; Change History: + ; Change history is located in BSDXAPI1 (to save space). "RTN","BSDXAPI",9,0) - ; 2010-11-5: (1.42) + ; "RTN","BSDXAPI",10,0) - ; - Fixed errors having to do uncanceling patient appointments if it was a patient cancelled appointment. -"RTN","BSDXAPI",11,0) - ; - Use new style Fileman API for storing appointments in file 44 in $$MAKE due to problems with legacy API. -"RTN","BSDXAPI",12,0) - ; 2010-11-12: (1.42) -"RTN","BSDXAPI",13,0) - ; - Changed ="C" to ["C" in SCIEN. Cancelled appointments can be "PC" as well. -"RTN","BSDXAPI",14,0) - ; 2010-12-5 (1.42) -"RTN","BSDXAPI",15,0) - ; Added an entry point to update the patient note in file 44. -"RTN","BSDXAPI",16,0) - ; 2010-12-6 (1.42) -"RTN","BSDXAPI",17,0) - ; MAKE1 incorrectly put info field in BSDR("INFO") rather than BSDR("OI") -"RTN","BSDXAPI",18,0) - ; 2010-12-8 (1.42) -"RTN","BSDXAPI",19,0) - ; Removed restriction on max appt length. Even though this restriction -"RTN","BSDXAPI",20,0) - ; exists in fileman (120 minutes), PIMS ignores it. Therefore, I -"RTN","BSDXAPI",21,0) - ; will ignore it here too. -"RTN","BSDXAPI",22,0) - ; 2011-01-25 (v.1.5) -"RTN","BSDXAPI",23,0) - ; Added entry point $$RMCI to remove checked in appointments. -"RTN","BSDXAPI",24,0) - ; In $$CANCEL, if the appointment is checked in, delete check-in rather than -"RTN","BSDXAPI",25,0) - ; spitting an error message to the user saying 'Delete the check-in' -"RTN","BSDXAPI",26,0) - ; Changed all lines that look like this: -"RTN","BSDXAPI",27,0) - ; I $G(BSDR("ADT"))'?7N1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT")) -"RTN","BSDXAPI",28,0) - ; to: -"RTN","BSDXAPI",29,0) - ; I $G(BSDR("ADT"))'?7N.1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT")) -"RTN","BSDXAPI",30,0) - ; to allow for date at midnight which does not have a dot at the end. -"RTN","BSDXAPI",31,0) - ; 2011-01-26 (v.1.5) -"RTN","BSDXAPI",32,0) - ; More user friendly message if patient already has appointment in $$MAKE: -"RTN","BSDXAPI",33,0) - ; Spits out pt name and user friendly date. -"RTN","BSDXAPI",34,0) - ; -"RTN","BSDXAPI",35,0) - ; -"RTN","BSDXAPI",36,0) MAKE1(DFN,CLIN,TYP,DATE,LEN,INFO) ; Simplified PEP w/ parameters for $$MAKE - making appointment -"RTN","BSDXAPI",37,0) +"RTN","BSDXAPI",11,0) ; Call like this for DFN 23435 having an appointment at Hospital Location 33 -"RTN","BSDXAPI",38,0) +"RTN","BSDXAPI",12,0) ; have 3 (scheduled) or 4 (walkin) appt at Dec 20, 2009 @ 10:11:59 for 30 minutes appt -"RTN","BSDXAPI",39,0) +"RTN","BSDXAPI",13,0) ; for Baby foxes hallucinations. -"RTN","BSDXAPI",40,0) +"RTN","BSDXAPI",14,0) ; S RESULT=$$MAKE1^BSDXAPI(23435,33,(3 or 4),3091220.221159,30,"I see Baby foxes") -"RTN","BSDXAPI",41,0) +"RTN","BSDXAPI",15,0) + N BSDR +"RTN","BSDXAPI",16,0) S BSDR("PAT")=DFN ;DFN -"RTN","BSDXAPI",42,0) +"RTN","BSDXAPI",17,0) S BSDR("CLN")=CLIN ;Hosp Loc IEN -"RTN","BSDXAPI",43,0) +"RTN","BSDXAPI",18,0) S BSDR("TYP")=TYP ;3 sched or 4 walkin -"RTN","BSDXAPI",44,0) +"RTN","BSDXAPI",19,0) S BSDR("ADT")=DATE ;Appointment date in FM format -"RTN","BSDXAPI",45,0) +"RTN","BSDXAPI",20,0) S BSDR("LEN")=LEN ;Appt len upto 240 (min) -"RTN","BSDXAPI",46,0) +"RTN","BSDXAPI",21,0) S BSDR("OI")=INFO ;Reason for appt - up to 150 char -"RTN","BSDXAPI",47,0) +"RTN","BSDXAPI",22,0) S BSDR("USR")=DUZ ;Person who made appt - current user -"RTN","BSDXAPI",48,0) +"RTN","BSDXAPI",23,0) Q $$MAKE(.BSDR) -"RTN","BSDXAPI",49,0) +"RTN","BSDXAPI",24,0) ; -"RTN","BSDXAPI",50,0) +"RTN","BSDXAPI",25,0) MAKE(BSDR) ;PEP; call to store appt made -"RTN","BSDXAPI",51,0) +"RTN","BSDXAPI",26,0) ; -"RTN","BSDXAPI",52,0) +"RTN","BSDXAPI",27,0) ; Make call using: S ERR=$$MAKE^BSDXAPI(.ARRAY) -"RTN","BSDXAPI",53,0) +"RTN","BSDXAPI",28,0) ; -"RTN","BSDXAPI",54,0) +"RTN","BSDXAPI",29,0) ; Input Array - -"RTN","BSDXAPI",55,0) +"RTN","BSDXAPI",30,0) ; BSDR("PAT") = ien of patient in file 2 -"RTN","BSDXAPI",56,0) +"RTN","BSDXAPI",31,0) ; BSDR("CLN") = ien of clinic in file 44 -"RTN","BSDXAPI",57,0) +"RTN","BSDXAPI",32,0) ; BSDR("TYP") = 3 for scheduled appts, 4 for walkins -"RTN","BSDXAPI",58,0) +"RTN","BSDXAPI",33,0) ; BSDR("ADT") = appointment date and time -"RTN","BSDXAPI",59,0) +"RTN","BSDXAPI",34,0) ; BSDR("LEN") = appointment length in minutes (*1.42 limit removed) -"RTN","BSDXAPI",60,0) +"RTN","BSDXAPI",35,0) ; BSDR("OI") = reason for appt - up to 150 characters -"RTN","BSDXAPI",61,0) +"RTN","BSDXAPI",36,0) ; BSDR("USR") = user who made appt -"RTN","BSDXAPI",62,0) +"RTN","BSDXAPI",37,0) ; -"RTN","BSDXAPI",63,0) +"RTN","BSDXAPI",38,0) ;Output: error status and message -"RTN","BSDXAPI",64,0) +"RTN","BSDXAPI",39,0) ; = 0 or null: everything okay -"RTN","BSDXAPI",65,0) +"RTN","BSDXAPI",40,0) ; = 1^message: error and reason +"RTN","BSDXAPI",41,0) + ; +"RTN","BSDXAPI",42,0) + N BSDXMKCK S BSDXMKCK=$$MAKECK(.BSDR) ; Check if we can make appointment +"RTN","BSDXAPI",43,0) + I BSDXMKCK Q BSDXMKCK ; If we can't, quit with the reason why. +"RTN","BSDXAPI",44,0) + ; +"RTN","BSDXAPI",45,0) + ;Otherwise, we continue +"RTN","BSDXAPI",46,0) + ; +"RTN","BSDXAPI",47,0) + N BSDXFDA,BSDXIENS,BSDXMSG ; FILE/UPDATE^DIE variables +"RTN","BSDXAPI",48,0) + ; +"RTN","BSDXAPI",49,0) + I $D(^DPT(BSDR("PAT"),"S",BSDR("ADT"),0)),$P(^(0),U,2)["C" D +"RTN","BSDXAPI",50,0) + . ; "un-cancel" existing appt in file 2 +"RTN","BSDXAPI",51,0) + . S BSDXIENS=BSDR("ADT")_","_BSDR("PAT")_"," +"RTN","BSDXAPI",52,0) + . S BSDXFDA(2.98,BSDXIENS,".01")=BSDR("CLN") +"RTN","BSDXAPI",53,0) + . S BSDXFDA(2.98,BSDXIENS,"3")="" +"RTN","BSDXAPI",54,0) + . S BSDXFDA(2.98,BSDXIENS,"9")=BSDR("TYP") +"RTN","BSDXAPI",55,0) + . S BSDXFDA(2.98,BSDXIENS,"9.5")=9 +"RTN","BSDXAPI",56,0) + . S BSDXFDA(2.98,BSDXIENS,"14")="" +"RTN","BSDXAPI",57,0) + . S BSDXFDA(2.98,BSDXIENS,"15")="" +"RTN","BSDXAPI",58,0) + . S BSDXFDA(2.98,BSDXIENS,"16")="" +"RTN","BSDXAPI",59,0) + . S BSDXFDA(2.98,BSDXIENS,"17")="@" ; v 1.7; cancellation remarks were left over +"RTN","BSDXAPI",60,0) + . S BSDXFDA(2.98,BSDXIENS,"19")="" +"RTN","BSDXAPI",61,0) + . S BSDXFDA(2.98,BSDXIENS,"20")=$$NOW^XLFDT +"RTN","BSDXAPI",62,0) + . D FILE^DIE("","BSDXFDA","BSDXMSG") +"RTN","BSDXAPI",63,0) + Q:$D(BSDXMSG) 1_U_"Fileman edit to DPT error: Patient="_BSDR("PAT")_" Appt="_BSDR("ADT")_" Error="_BSDXMSG("DIERR",1,"TEXT",1) +"RTN","BSDXAPI",64,0) + ; +"RTN","BSDXAPI",65,0) + Q:$G(BSDXSIMERR2) 1_U_$NA(BSDXSIMERR2) ; Unit Test line "RTN","BSDXAPI",66,0) ; "RTN","BSDXAPI",67,0) - I '$D(^DPT(+$G(BSDR("PAT")),0)) Q 1_U_"Patient not on file: "_$G(BSDR("PAT")) + E D ; File new appointment/edit existing appointment in file 2 "RTN","BSDXAPI",68,0) - I '$D(^SC(+$G(BSDR("CLN")),0)) Q 1_U_"Clinic not on file: "_$G(BSDR("CLN")) + . S BSDXIENS="?+2,"_BSDR("PAT")_"," "RTN","BSDXAPI",69,0) - I ($G(BSDR("TYP"))<3)!($G(BSDR("TYP"))>4) Q 1_U_"Appt Type error: "_$G(BSDR("TYP")) + . S BSDXIENS(2)=BSDR("ADT") "RTN","BSDXAPI",70,0) - I $G(BSDR("ADT")) S BSDR("ADT")=+$E(BSDR("ADT"),1,12) ;remove seconds + . S BSDXFDA(2.98,BSDXIENS,.01)=BSDR("CLN") "RTN","BSDXAPI",71,0) - I $G(BSDR("ADT"))'?7N.1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT")) + . S BSDXFDA(2.98,BSDXIENS,"9")=BSDR("TYP") "RTN","BSDXAPI",72,0) - ; + . S BSDXFDA(2.98,BSDXIENS,"9.5")=9 "RTN","BSDXAPI",73,0) - ;I ($G(BSDR("LEN"))<5)!($G(BSDR("LEN"))>240) Q 1_U_"Appt Length error: "_$G(BSDR("LEN")) ; v 1.42 - no check on length is done anymore. see top comments for details. + . S BSDXFDA(2.98,BSDXIENS,"20")=$$NOW^XLFDT "RTN","BSDXAPI",74,0) - I '$D(^VA(200,+$G(BSDR("USR")),0)) Q 1_U_"User Who Made Appt Error: "_$G(BSDR("USR")) + . D UPDATE^DIE("","BSDXFDA","BSDXIENS","BSDXMSG") "RTN","BSDXAPI",75,0) - ;I $D(^DPT(BSDR("PAT"),"S",BSDR("ADT"),0)),$P(^(0),U,2)'["C" Q 1_U_"Patient "_BSDR("PAT")_" already has appt at "_BSDR("ADT") ; v.1.5 more user friendly err msg + Q:$D(BSDXMSG) 1_U_"FileMan add to DPT error: Patient="_BSDR("PAT")_" Appt="_BSDR("ADT")_" Error="_BSDXMSG("DIERR",1,"TEXT",1) "RTN","BSDXAPI",76,0) ; "RTN","BSDXAPI",77,0) - ; Following block to give an error message to user if there is already an appointment for patient. More verbose than others. + Q:$G(BSDXSIMERR3) 1_U_$NA(BSDXSIMERR3) ; Unit Test line "RTN","BSDXAPI",78,0) - N BSDXERR ; place to store error message + ; "RTN","BSDXAPI",79,0) - I $D(^DPT(BSDR("PAT"),"S",BSDR("ADT"),0)),$P(^(0),U,2)'["C" DO QUIT BSDXERR ; If there's an appt in the "S" node of file 2 and it's not cancelled + ; add appt to file 44. This adds it to the FIRST subfile (Appointment) "RTN","BSDXAPI",80,0) - . S BSDXERR=1_U_"Patient "_$P(^DPT(BSDR("PAT"),0),U)_" ("_BSDR("PAT")_") " + N DIC,DA,Y,X,DD,DO,DLAYGO,DINUM "RTN","BSDXAPI",81,0) - . S BSDXERR=BSDXERR_"already has appt at "_$$FMTE^XLFDT(BSDR("ADT")) -"RTN","BSDXAPI",82,0) - . N BSDXSCIEN S BSDXSCIEN=$P(^DPT(BSDR("PAT"),"S",BSDR("ADT"),0),U) ; Clinic IEN in ^SC (0 piece of 0 node of "S" multiple in file 2) -"RTN","BSDXAPI",83,0) - . N BSDXSCNAM S BSDXSCNAM=$P(^SC(BSDXSCIEN,0),U) ; PIMS Name of Clinic -"RTN","BSDXAPI",84,0) - . S BSDXERR=BSDXERR_$C(13,10)_"PIMS clinic: "_BSDXSCNAM ; tell the user of the PIMS clinic -"RTN","BSDXAPI",85,0) - . I $D(^BSDXRES("ALOC",BSDXSCIEN)) DO ; if the Clinic is linked to a BSDX Resource (we find out using the index ALOC in the BSDX RESOURCE file) -"RTN","BSDXAPI",86,0) - . . N BSDXRESIEN S BSDXRESIEN=$O(^BSDXRES("ALOC",BSDXSCIEN,"")) -"RTN","BSDXAPI",87,0) - . . QUIT:'BSDXRESIEN ; Safeguard if index is corrupt -"RTN","BSDXAPI",88,0) - . . N BSDXRESNAM S BSDXRESNAM=$P(^BSDXRES(BSDXRESIEN,0),U) -"RTN","BSDXAPI",89,0) - . . S BSDXERR=BSDXERR_$C(13,10)_"Scheduling GUI clinic: "_BSDXRESNAM ; tell the user of the BSDX clinic -"RTN","BSDXAPI",90,0) - ; -"RTN","BSDXAPI",91,0) - NEW DIC,DA,Y,X,DD,DO,DLAYGO -"RTN","BSDXAPI",92,0) - ; -"RTN","BSDXAPI",93,0) - I $D(^DPT(BSDR("PAT"),"S",BSDR("ADT"),0)),$P(^(0),U,2)["C" D -"RTN","BSDXAPI",94,0) - . ; "un-cancel" existing appt in file 2 -"RTN","BSDXAPI",95,0) - . N BSDXFDA,BSDXIENS,BSDXMSG -"RTN","BSDXAPI",96,0) - . S BSDXIENS=BSDR("ADT")_","_BSDR("PAT")_"," -"RTN","BSDXAPI",97,0) - . S BSDXFDA(2.98,BSDXIENS,".01")=BSDR("CLN") -"RTN","BSDXAPI",98,0) - . S BSDXFDA(2.98,BSDXIENS,"3")="" -"RTN","BSDXAPI",99,0) - . S BSDXFDA(2.98,BSDXIENS,"9")=BSDR("TYP") -"RTN","BSDXAPI",100,0) - . S BSDXFDA(2.98,BSDXIENS,"9.5")=9 -"RTN","BSDXAPI",101,0) - . S BSDXFDA(2.98,BSDXIENS,"14")="" -"RTN","BSDXAPI",102,0) - . S BSDXFDA(2.98,BSDXIENS,"15")="" -"RTN","BSDXAPI",103,0) - . S BSDXFDA(2.98,BSDXIENS,"16")="" -"RTN","BSDXAPI",104,0) - . S BSDXFDA(2.98,BSDXIENS,"19")="" -"RTN","BSDXAPI",105,0) - . S BSDXFDA(2.98,BSDXIENS,"20")=$$NOW^XLFDT -"RTN","BSDXAPI",106,0) - . D FILE^DIE("","BSDXFDA","BSDXMSG") -"RTN","BSDXAPI",107,0) - . N BSDXTEMP S BSDXTEMP=$G(BSDXMSG) -"RTN","BSDXAPI",108,0) - E D I $G(BSDXERR(1)) Q 1_U_"FileMan add to DPT error: Patient="_BSDR("PAT")_" Appt="_BSDR("ADT") -"RTN","BSDXAPI",109,0) - . N BSDXFDA,BSDXIENS,BSDXMSG -"RTN","BSDXAPI",110,0) - . S BSDXIENS="?+2,"_BSDR("PAT")_"," -"RTN","BSDXAPI",111,0) - . S BSDXIENS(2)=BSDR("ADT") -"RTN","BSDXAPI",112,0) - . S BSDXFDA(2.98,BSDXIENS,.01)=BSDR("CLN") -"RTN","BSDXAPI",113,0) - . S BSDXFDA(2.98,BSDXIENS,"9")=BSDR("TYP") -"RTN","BSDXAPI",114,0) - . S BSDXFDA(2.98,BSDXIENS,"9.5")=9 -"RTN","BSDXAPI",115,0) - . S BSDXFDA(2.98,BSDXIENS,"20")=$$NOW^XLFDT -"RTN","BSDXAPI",116,0) - . D UPDATE^DIE("","BSDXFDA","BSDXIENS","BSDXERR(1)") -"RTN","BSDXAPI",117,0) - ; add appt to file 44 -"RTN","BSDXAPI",118,0) - K DIC,DA,X,Y,DLAYGO,DD,DO -"RTN","BSDXAPI",119,0) I '$D(^SC(BSDR("CLN"),"S",0)) S ^SC(BSDR("CLN"),"S",0)="^44.001DA^^" -"RTN","BSDXAPI",120,0) +"RTN","BSDXAPI",82,0) I '$D(^SC(BSDR("CLN"),"S",BSDR("ADT"),0)) D I Y<1 Q 1_U_"Error adding date to file 44: Clinic="_BSDR("CLN")_" Date="_BSDR("ADT") -"RTN","BSDXAPI",121,0) +"RTN","BSDXAPI",83,0) . S DIC="^SC("_BSDR("CLN")_",""S"",",DA(1)=BSDR("CLN"),(X,DINUM)=BSDR("ADT") -"RTN","BSDXAPI",122,0) +"RTN","BSDXAPI",84,0) . S DIC("P")="44.001DA",DIC(0)="L",DLAYGO=44.001 -"RTN","BSDXAPI",123,0) +"RTN","BSDXAPI",85,0) . S Y=1 I '$D(@(DIC_X_")")) D FILE^DICN -"RTN","BSDXAPI",124,0) +"RTN","BSDXAPI",86,0) ; -"RTN","BSDXAPI",125,0) +"RTN","BSDXAPI",87,0) + Q:$G(BSDXSIMERR4) 1_U_$NA(BSDXSIMERR4) ; Unit Test line +"RTN","BSDXAPI",88,0) + ; +"RTN","BSDXAPI",89,0) + ; add appt for file 44, second subfile (Appointment/Patient) +"RTN","BSDXAPI",90,0) ; Sep 28 2010: Changed old style API to new style API. Keep for reference //smh -"RTN","BSDXAPI",126,0) +"RTN","BSDXAPI",91,0) ;K DIC,DA,X,Y,DLAYGO,DD,DO,DINUM -"RTN","BSDXAPI",127,0) +"RTN","BSDXAPI",92,0) ;S DIC="^SC("_BSDR("CLN")_",""S"","_BSDR("ADT")_",1," -"RTN","BSDXAPI",128,0) +"RTN","BSDXAPI",93,0) ;S DA(2)=BSDR("CLN"),DA(1)=BSDR("ADT"),X=BSDR("PAT") -"RTN","BSDXAPI",129,0) +"RTN","BSDXAPI",94,0) ;S DIC("DR")="1///"_BSDR("LEN")_";3///"_$E($G(BSDR("OI")),1,150)_";7///`"_BSDR("USR")_";8///"_$P($$NOW^XLFDT,".") -"RTN","BSDXAPI",130,0) +"RTN","BSDXAPI",95,0) ;S DIC("P")="44.003PA",DIC(0)="L",DLAYGO=44.003 -"RTN","BSDXAPI",131,0) +"RTN","BSDXAPI",96,0) ;D FILE^DICN -"RTN","BSDXAPI",132,0) +"RTN","BSDXAPI",97,0) ; -"RTN","BSDXAPI",133,0) +"RTN","BSDXAPI",98,0) N BSDXIENS S BSDXIENS="?+1,"_BSDR("ADT")_","_BSDR("CLN")_"," -"RTN","BSDXAPI",134,0) +"RTN","BSDXAPI",99,0) N BSDXFDA -"RTN","BSDXAPI",135,0) +"RTN","BSDXAPI",100,0) S BSDXFDA(44.003,BSDXIENS,.01)=BSDR("PAT") -"RTN","BSDXAPI",136,0) +"RTN","BSDXAPI",101,0) S BSDXFDA(44.003,BSDXIENS,1)=BSDR("LEN") -"RTN","BSDXAPI",137,0) +"RTN","BSDXAPI",102,0) S BSDXFDA(44.003,BSDXIENS,3)=$E($G(BSDR("OI")),1,150) -"RTN","BSDXAPI",138,0) +"RTN","BSDXAPI",103,0) S BSDXFDA(44.003,BSDXIENS,7)=BSDR("USR") -"RTN","BSDXAPI",139,0) +"RTN","BSDXAPI",104,0) S BSDXFDA(44.003,BSDXIENS,8)=$P($$NOW^XLFDT,".") -"RTN","BSDXAPI",140,0) +"RTN","BSDXAPI",105,0) N BSDXERR -"RTN","BSDXAPI",141,0) +"RTN","BSDXAPI",106,0) D UPDATE^DIE("","BSDXFDA","","BSDXERR") -"RTN","BSDXAPI",142,0) +"RTN","BSDXAPI",107,0) ; -"RTN","BSDXAPI",143,0) +"RTN","BSDXAPI",108,0) I $D(BSDXERR) Q 1_U_"Error adding appt to file 44: Clinic="_BSDR("CLN")_" Date="_BSDR("ADT")_" Patient="_BSDR("PAT")_" Error: "_BSDXERR("DIERR",1,"TEXT",1) -"RTN","BSDXAPI",144,0) +"RTN","BSDXAPI",109,0) ; -"RTN","BSDXAPI",145,0) +"RTN","BSDXAPI",110,0) + ;Q:$G(BSDXSIMERR5) 1_U_$NA(BSDXSIMERR5) ; Unit Test line +"RTN","BSDXAPI",111,0) + S:$G(BSDXSIMERR5) X=1/0 +"RTN","BSDXAPI",112,0) + ; +"RTN","BSDXAPI",113,0) + ; Update the Availablilities ; Doesn't fail. Global reads and sets. +"RTN","BSDXAPI",114,0) + D AVUPDTMK^BSDXAPI1(BSDR("CLN"),BSDR("ADT"),BSDR("LEN"),BSDR("PAT")) +"RTN","BSDXAPI",115,0) + ; +"RTN","BSDXAPI",116,0) ; call event driver -"RTN","BSDXAPI",146,0) +"RTN","BSDXAPI",117,0) NEW DFN,SDT,SDCL,SDDA,SDMODE -"RTN","BSDXAPI",147,0) +"RTN","BSDXAPI",118,0) S DFN=BSDR("PAT"),SDT=BSDR("ADT"),SDCL=BSDR("CLN"),SDMODE=2 -"RTN","BSDXAPI",148,0) +"RTN","BSDXAPI",119,0) S SDDA=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")) -"RTN","BSDXAPI",149,0) +"RTN","BSDXAPI",120,0) D MAKE^SDAMEVT(DFN,SDT,SDCL,SDDA,SDMODE) -"RTN","BSDXAPI",150,0) +"RTN","BSDXAPI",121,0) Q 0 -"RTN","BSDXAPI",151,0) +"RTN","BSDXAPI",122,0) ; +"RTN","BSDXAPI",123,0) +MAKECK(BSDR) ; $$ - Is it okay to make an appointment? ; PEP +"RTN","BSDXAPI",124,0) + ; Input: Same as $$MAKE +"RTN","BSDXAPI",125,0) + ; Output: 1^error or 0 for success +"RTN","BSDXAPI",126,0) + ; NB: This subroutine saves no data. Only checks whether it's okay. +"RTN","BSDXAPI",127,0) + ; +"RTN","BSDXAPI",128,0) + I '$D(^DPT(+$G(BSDR("PAT")),0)) Q 1_U_"Patient not on file: "_$G(BSDR("PAT")) +"RTN","BSDXAPI",129,0) + I '$D(^SC(+$G(BSDR("CLN")),0)) Q 1_U_"Clinic not on file: "_$G(BSDR("CLN")) +"RTN","BSDXAPI",130,0) + I ($G(BSDR("TYP"))<3)!($G(BSDR("TYP"))>4) Q 1_U_"Appt Type error: "_$G(BSDR("TYP")) +"RTN","BSDXAPI",131,0) + I $G(BSDR("ADT")) S BSDR("ADT")=+$E(BSDR("ADT"),1,12) ;remove seconds +"RTN","BSDXAPI",132,0) + I $G(BSDR("ADT"))'?7N.1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT")) +"RTN","BSDXAPI",133,0) + ; +"RTN","BSDXAPI",134,0) + ; Appt Length check removed in v 1.5 +"RTN","BSDXAPI",135,0) + ; +"RTN","BSDXAPI",136,0) + I '$D(^VA(200,+$G(BSDR("USR")),0)) Q 1_U_"User Who Made Appt Error: "_$G(BSDR("USR")) +"RTN","BSDXAPI",137,0) + ; More verbose error message in v1.5 +"RTN","BSDXAPI",138,0) + ; Following block to give an error message to user if there is already an appointment for patient. More verbose than others. +"RTN","BSDXAPI",139,0) + N BSDXERR ; place to store error message +"RTN","BSDXAPI",140,0) + I $D(^DPT(BSDR("PAT"),"S",BSDR("ADT"),0)),$P(^(0),U,2)'["C" DO QUIT BSDXERR ; If there's an appt in the "S" node of file 2 and it's not cancelled +"RTN","BSDXAPI",141,0) + . S BSDXERR=1_U_"Patient "_$P(^DPT(BSDR("PAT"),0),U)_" ("_BSDR("PAT")_") " +"RTN","BSDXAPI",142,0) + . S BSDXERR=BSDXERR_"already has appt at "_$$FMTE^XLFDT(BSDR("ADT")) +"RTN","BSDXAPI",143,0) + . N BSDXSCIEN S BSDXSCIEN=$P(^DPT(BSDR("PAT"),"S",BSDR("ADT"),0),U) ; Clinic IEN in ^SC (0 piece of 0 node of "S" multiple in file 2) +"RTN","BSDXAPI",144,0) + . N BSDXSCNAM S BSDXSCNAM=$P(^SC(BSDXSCIEN,0),U) ; PIMS Name of Clinic +"RTN","BSDXAPI",145,0) + . S BSDXERR=BSDXERR_$C(13,10)_"PIMS clinic: "_BSDXSCNAM ; tell the user of the PIMS clinic +"RTN","BSDXAPI",146,0) + . I $D(^BSDXRES("ALOC",BSDXSCIEN)) DO ; if the Clinic is linked to a BSDX Resource (we find out using the index ALOC in the BSDX RESOURCE file) +"RTN","BSDXAPI",147,0) + . . N BSDXRESIEN S BSDXRESIEN=$O(^BSDXRES("ALOC",BSDXSCIEN,"")) +"RTN","BSDXAPI",148,0) + . . QUIT:'BSDXRESIEN ; Safeguard if index is corrupt +"RTN","BSDXAPI",149,0) + . . N BSDXRESNAM S BSDXRESNAM=$P(^BSDXRES(BSDXRESIEN,0),U) +"RTN","BSDXAPI",150,0) + . . S BSDXERR=BSDXERR_$C(13,10)_"Scheduling GUI clinic: "_BSDXRESNAM ; tell the user of the BSDX clinic +"RTN","BSDXAPI",151,0) + Q 0 "RTN","BSDXAPI",152,0) -CHECKIN1(DFN,CLIN,APDATE) ; Simplified PEP w/ parameters for $$CHECKIN - Checking in + ; "RTN","BSDXAPI",153,0) - ; Call like this for DFN 23435 checking in now at Hospital Location 33 +UNMAKE(BSDR) ; Reverse Make - Private $$ "RTN","BSDXAPI",154,0) - ; for appt at Dec 20, 2009 @ 10:11:59 + ; Only used in Emergiencies where Fileman data filing fails. "RTN","BSDXAPI",155,0) - ; S RESULT=$$CHECKIN1^BSDXAPI(23435,33,3091220.221159) + ; If previous data exists, which caused an error, it's destroyed. "RTN","BSDXAPI",156,0) - S BSDR("PAT")=DFN ;DFN + ; NB: ^DIK stops for nobody "RTN","BSDXAPI",157,0) - S BSDR("CLN")=CLIN ;Hosp Loc IEN + ; NB: If Patient Appointment previously existed as cancelled, it's removed. "RTN","BSDXAPI",158,0) - S BSDR("ADT")=APDATE ;Appt Date + ; How can I tell if one previously existed when data is in an intermediate "RTN","BSDXAPI",159,0) - S BSDR("CDT")=$$NOW^XLFDT ;Check-in date defaults to now + ; State? Can I restore it if the other file failed? Restoration can cause "RTN","BSDXAPI",160,0) - S BSDR("USR")=DUZ ;Check-in user defaults to current + ; another error. If I restore the global, there will be cross-references "RTN","BSDXAPI",161,0) - Q $$CHECKIN(.BSDR) + ; missing (ASDCN specifically). "RTN","BSDXAPI",162,0) ; "RTN","BSDXAPI",163,0) -CHECKIN(BSDR) ;EP; call to add checkin info to appt; IHS/ITSC/LJF 12/23/2004 PATCH 1002 + ; Input: Same array as $$MAKE "RTN","BSDXAPI",164,0) - ; + ; Output: Always 0 "RTN","BSDXAPI",165,0) - ; Make call by using: S ERR=$$CHECKIN^BSDXAPI(.ARRAY) + NEW DIK,DA "RTN","BSDXAPI",166,0) - ; + S DIK="^DPT("_BSDR("PAT")_",""S""," "RTN","BSDXAPI",167,0) - ; Input array - + S DA(1)=BSDR("PAT"),DA=BSDR("ADT") "RTN","BSDXAPI",168,0) - ; BSDR("PAT") = ien of patient in file 2 + D ^DIK "RTN","BSDXAPI",169,0) - ; BSDR("CLN") = ien of clinic in file 44 + ; "RTN","BSDXAPI",170,0) - ; BSDR("ADT") = appt date/time + N IEN S IEN=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")) "RTN","BSDXAPI",171,0) - ; BSDR("CDT") = checkin date/time + I 'IEN QUIT 0 "RTN","BSDXAPI",172,0) - ; BSDR("USR") = checkin user + ; "RTN","BSDXAPI",173,0) - ; + NEW DIK,DA "RTN","BSDXAPI",174,0) - ; Output value - + S DIK="^SC("_BSDR("CLN")_",""S"","_BSDR("ADT")_",1," "RTN","BSDXAPI",175,0) - ; = 0 means everything worked + S DA(2)=BSDR("CLN"),DA(1)=BSDR("ADT"),DA=IEN "RTN","BSDXAPI",176,0) - ; = 1^message means error with reason message + D ^DIK "RTN","BSDXAPI",177,0) - ; + QUIT 0 "RTN","BSDXAPI",178,0) - I '$D(^DPT(+$G(BSDR("PAT")),0)) Q 1_U_"Patient not on file: "_$G(BSDR("PAT")) -"RTN","BSDXAPI",179,0) - I '$D(^SC(+$G(BSDR("CLN")),0)) Q 1_U_"Clinic not on file: "_$G(BSDR("CLN")) -"RTN","BSDXAPI",180,0) - I $G(BSDR("ADT")) S BSDR("ADT")=+$E(BSDR("ADT"),1,12) ;remove seconds -"RTN","BSDXAPI",181,0) - I $G(BSDR("ADT"))'?7N.1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT")) -"RTN","BSDXAPI",182,0) - I $G(BSDR("CDT")) S BSDR("CDT")=+$E(BSDR("CDT"),1,12) ;remove seconds -"RTN","BSDXAPI",183,0) - I $G(BSDR("CDT"))'?7N.1".".4N Q 1_U_"Checkin Date/Time error: "_$G(BSDR("CDT")) -"RTN","BSDXAPI",184,0) - I '$D(^VA(200,+$G(BSDR("USR")),0)) Q 1_U_"User Who Made Appt Error: "_$G(BSDR("USR")) -"RTN","BSDXAPI",185,0) ; +"RTN","BSDXAPI",179,0) +CHECKIN1(DFN,CLIN,APDATE) ; Simplified PEP w/ parameters for $$CHECKIN - Checking in +"RTN","BSDXAPI",180,0) + ; Call like this for DFN 23435 checking in now at Hospital Location 33 +"RTN","BSDXAPI",181,0) + ; for appt at Dec 20, 2009 @ 10:11:59 +"RTN","BSDXAPI",182,0) + ; S RESULT=$$CHECKIN1^BSDXAPI(23435,33,3091220.221159) +"RTN","BSDXAPI",183,0) + N BSDR +"RTN","BSDXAPI",184,0) + S BSDR("PAT")=DFN ;DFN +"RTN","BSDXAPI",185,0) + S BSDR("CLN")=CLIN ;Hosp Loc IEN "RTN","BSDXAPI",186,0) - ; find ien for appt in file 44 + S BSDR("ADT")=APDATE ;Appt Date "RTN","BSDXAPI",187,0) - NEW IEN,DIE,DA,DR + S BSDR("CDT")=$$NOW^XLFDT ;Check-in date defaults to now "RTN","BSDXAPI",188,0) - S IEN=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")) + S BSDR("USR")=DUZ ;Check-in user defaults to current "RTN","BSDXAPI",189,0) - I 'IEN Q 1_U_"Error trying to find appointment for checkin: Patient="_BSDR("PAT")_" Clinic="_BSDR("CLN")_" Appt="_BSDR("ADT") + Q $$CHECKIN(.BSDR) "RTN","BSDXAPI",190,0) ; "RTN","BSDXAPI",191,0) - ; remember before status +CHECKIN(BSDR) ;EP; call to add checkin info to appt; IHS/ITSC/LJF 12/23/2004 PATCH 1002 "RTN","BSDXAPI",192,0) - NEW SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL + ; "RTN","BSDXAPI",193,0) - S DFN=BSDR("PAT"),SDT=BSDR("ADT"),SDCL=BSDR("CLN"),SDMODE=2,SDDA=IEN + ; Make call by using: S ERR=$$CHECKIN^BSDXAPI(.ARRAY) "RTN","BSDXAPI",194,0) - S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL + ; "RTN","BSDXAPI",195,0) - D BEFORE^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL) + ; Input array - "RTN","BSDXAPI",196,0) - ; + ; BSDR("PAT") = ien of patient in file 2 "RTN","BSDXAPI",197,0) - ; set checkin + ; BSDR("CLN") = ien of clinic in file 44 "RTN","BSDXAPI",198,0) - S DIE="^SC("_BSDR("CLN")_",""S"","_BSDR("ADT")_",1," + ; BSDR("ADT") = appt date/time "RTN","BSDXAPI",199,0) - S DA(2)=BSDR("CLN"),DA(1)=BSDR("ADT"),DA=IEN + ; BSDR("CDT") = checkin date/time "RTN","BSDXAPI",200,0) - S DR="309///"_BSDR("CDT")_";302///`"_BSDR("USR")_";305///"_$$NOW^XLFDT + ; BSDR("USR") = checkin user "RTN","BSDXAPI",201,0) - D ^DIE -"RTN","BSDXAPI",202,0) ; +"RTN","BSDXAPI",202,0) + ; Output value - "RTN","BSDXAPI",203,0) - ; set after status + ; = 0 means everything worked "RTN","BSDXAPI",204,0) - S SDDA=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")) + ; = 1^message means error with reason message "RTN","BSDXAPI",205,0) - S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL + ; "RTN","BSDXAPI",206,0) - D AFTER^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL) + I $G(BSDXDIE2) N X S X=1/0 "RTN","BSDXAPI",207,0) ; "RTN","BSDXAPI",208,0) - ; call event driver + N BSDXERR S BSDXERR=$$CHECKICK(.BSDR) "RTN","BSDXAPI",209,0) - D EVT^SDAMEVT(.SDATA,4,SDMODE,SDCIHDL) + I BSDXERR Q BSDXERR "RTN","BSDXAPI",210,0) - Q 0 -"RTN","BSDXAPI",211,0) ; +"RTN","BSDXAPI",211,0) + ; find ien for appt in file 44 "RTN","BSDXAPI",212,0) -CANCEL1(DFN,CLIN,TYP,APDATE,REASON,INFO) ; PEP w/ parameters for $$CANCEL - cancelling appointment + NEW IEN,DIE,DA,DR "RTN","BSDXAPI",213,0) - ; Call like this for DFN 23435 cancelling an appointment at Hospital Location 33, + S IEN=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")) "RTN","BSDXAPI",214,0) - ; cancellation initiated by patient ("PC" rather than clinic "C"), + ; "RTN","BSDXAPI",215,0) - ; cancelling appt at Dec 20, 2009 @ 10:11:59 because of reason 1 in file 409.2 IEN (weather) + ; remember before status "RTN","BSDXAPI",216,0) - ; because foxes come out during bad weather. + ; Failure analysis: Only ^TMP global is set here. "RTN","BSDXAPI",217,0) - ; S RESULT=$$CANCEL1^BSDXAPI(23435,33,"PC",3091220.221159,1,"Afraid of foxes") + NEW SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL,SDMODE "RTN","BSDXAPI",218,0) - S BSDR("PAT")=DFN + S DFN=BSDR("PAT"),SDT=BSDR("ADT"),SDCL=BSDR("CLN"),SDMODE=2,SDDA=IEN "RTN","BSDXAPI",219,0) - S BSDR("CLN")=CLIN + S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL "RTN","BSDXAPI",220,0) - S BSDR("TYP")=TYP + D BEFORE^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL) "RTN","BSDXAPI",221,0) - S BSDR("ADT")=APDATE + ; "RTN","BSDXAPI",222,0) - S BSDR("CDT")=$$NOW^XLFDT + ; set checkin; Old Code -- keep for ref VEN/SMH 3 Jul 2012 "RTN","BSDXAPI",223,0) - S BSDR("USR")=DUZ + ; S DIE="^SC("_BSDR("CLN")_",""S"","_BSDR("ADT")_",1," "RTN","BSDXAPI",224,0) - S BSDR("CR")=REASON + ; S DA(2)=BSDR("CLN"),DA(1)=BSDR("ADT"),DA=IEN "RTN","BSDXAPI",225,0) - S BSDR("NOT")=INFO + ; S DR="309///"_BSDR("CDT")_";302///`"_BSDR("USR")_";305///"_$$NOW^XLFDT "RTN","BSDXAPI",226,0) - Q $$CANCEL(.BSDR) + ; D ^DIE "RTN","BSDXAPI",227,0) ; "RTN","BSDXAPI",228,0) -CANCEL(BSDR) ;PEP; called to cancel appt + I $D(BSDXSIMERR3) Q 1_U_"Simulated Error" "RTN","BSDXAPI",229,0) ; "RTN","BSDXAPI",230,0) - ; Make call using: S ERR=$$CANCEL^BSDXAPI(.ARRAY) + ; Failure analysis: If this fails, no other changes were made in this routine "RTN","BSDXAPI",231,0) - ; + N BSDXIENS S BSDXIENS=IEN_","_BSDR("ADT")_","_BSDR("CLN")_"," "RTN","BSDXAPI",232,0) - ; Input Array - + N BSDXFDA "RTN","BSDXAPI",233,0) - ; BSDR("PAT") = ien of patient in file 2 + S BSDXFDA(44.003,BSDXIENS,309)=BSDR("CDT") "RTN","BSDXAPI",234,0) - ; BSDR("CLN") = ien of clinic in file 44 + S BSDXFDA(44.003,BSDXIENS,302)=BSDR("USR") "RTN","BSDXAPI",235,0) - ; BSDR("TYP") = C for canceled by clinic; PC for patient canceled + S BSDXFDA(44.003,BSDXIENS,305)=$$NOW^XLFDT() "RTN","BSDXAPI",236,0) - ; BSDR("ADT") = appointment date and time + N BSDXERR "RTN","BSDXAPI",237,0) - ; BSDR("CDT") = cancel date and time + D UPDATE^DIE("","BSDXFDA","BSDXERR") "RTN","BSDXAPI",238,0) - ; BSDR("USR") = user who canceled appt -"RTN","BSDXAPI",239,0) - ; BSDR("CR") = cancel reason - pointer to file 409.2 -"RTN","BSDXAPI",240,0) - ; BSDR("NOT") = cancel remarks - optional notes to 160 characters -"RTN","BSDXAPI",241,0) ; +"RTN","BSDXAPI",239,0) + I $D(BSDXERR) Q 1_U_"Error checking in appointment to file 44. Error: "_BSDXERR("DIERR",1,"TEXT",1) +"RTN","BSDXAPI",240,0) + ; +"RTN","BSDXAPI",241,0) + ; set after status "RTN","BSDXAPI",242,0) - ;Output: error status and message + S SDDA=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")) "RTN","BSDXAPI",243,0) - ; = 0 or null: everything okay + S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL "RTN","BSDXAPI",244,0) - ; = 1^message: error and reason + D AFTER^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL) "RTN","BSDXAPI",245,0) ; "RTN","BSDXAPI",246,0) - I '$D(^DPT(+$G(BSDR("PAT")),0)) Q 1_U_"Patient not on file: "_$G(BSDR("PAT")) + ; Point of no Return "RTN","BSDXAPI",247,0) - I '$D(^SC(+$G(BSDR("CLN")),0)) Q 1_U_"Clinic not on file: "_$G(BSDR("CLN")) + ; call event driver "RTN","BSDXAPI",248,0) - I ($G(BSDR("TYP"))'="C"),($G(BSDR("TYP"))'="PC") Q 1_U_"Cancel Status error: "_$G(BSDR("TYP")) + D EVT^SDAMEVT(.SDATA,4,SDMODE,SDCIHDL) "RTN","BSDXAPI",249,0) - I $G(BSDR("ADT")) S BSDR("ADT")=+$E(BSDR("ADT"),1,12) ;remove seconds + Q 0 "RTN","BSDXAPI",250,0) - I $G(BSDR("ADT"))'?7N.1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT")) + ; "RTN","BSDXAPI",251,0) - I $G(BSDR("CDT")) S BSDR("CDT")=+$E(BSDR("CDT"),1,12) ;remove seconds +CHECKIC1(DFN,CLIN,APDATE) ; Simplified PEP w/ parameters for $$CHECKICK - "RTN","BSDXAPI",252,0) - I $G(BSDR("CDT"))'?7N.1".".4N Q 1_U_"Cancel Date/Time error: "_$G(BSDR("CDT")) + ; Check-in Check "RTN","BSDXAPI",253,0) - I '$D(^VA(200,+$G(BSDR("USR")),0)) Q 1_U_"User Who Canceled Appt Error: "_$G(BSDR("USR")) + ; Call like this for DFN 23435 checking in now at Hospital Location 33 "RTN","BSDXAPI",254,0) - I '$D(^SD(409.2,+$G(BSDR("CR")))) Q 1_U_"Cancel Reason error: "_$G(BSDR("CR")) + ; for appt at Dec 20, 2009 @ 10:11:59 "RTN","BSDXAPI",255,0) - ; + ; S RESULT=$$CHECKIC1^BSDXAPI(23435,33,3091220.221159) "RTN","BSDXAPI",256,0) - NEW IEN,DIE,DA,DR + N BSDR "RTN","BSDXAPI",257,0) - S IEN=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")) + S BSDR("PAT")=DFN ;DFN "RTN","BSDXAPI",258,0) - I 'IEN Q 1_U_"Error trying to find appointment for cancel: Patient="_BSDR("PAT")_" Clinic="_BSDR("CLN")_" Appt="_BSDR("ADT") + S BSDR("CLN")=CLIN ;Hosp Loc IEN "RTN","BSDXAPI",259,0) - ; + S BSDR("ADT")=APDATE ;Appt Date "RTN","BSDXAPI",260,0) - ; BSDX 1.5 3110125 + S BSDR("CDT")=$$NOW^XLFDT ;Check-in date defaults to now "RTN","BSDXAPI",261,0) - ; UJO/SMH - Add ability to remove check-in if the patient is checked in + S BSDR("USR")=DUZ ;Check-in user defaults to current "RTN","BSDXAPI",262,0) - ; I $$CI(BSDR("PAT"),BSDR("CLN"),BSDR("ADT"),IEN) Q 1_U_"Patient already checked in; cannot cancel until checkin deleted: Patient="_BSDR("PAT")_" Clinic="_BSDR("CLN")_" Appt="_BSDR("ADT") + Q $$CHECKICK(.BSDR) "RTN","BSDXAPI",263,0) - ; Remove check-in if the patient is checked in. + ; "RTN","BSDXAPI",264,0) - N BSDXRESULT S BSDXRESULT=0 ; Result; should be zero if success; -1 + message if failure +CHECKICK(BSDR) ; $$ PEP; - Is it okay to check-in patient? "RTN","BSDXAPI",265,0) - I $$CI(BSDR("PAT"),BSDR("CLN"),BSDR("ADT"),IEN) SET BSDXRESULT=$$RMCI(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")) + ; Input: Same as $$CHECKIN "RTN","BSDXAPI",266,0) - I BSDXRESULT Q BSDXRESULT + ; Output: 0 if okay or 1^message if error "RTN","BSDXAPI",267,0) ; "RTN","BSDXAPI",268,0) - ; remember before status + I $G(BSDXSIMERR2) Q 1_U_"Simulated Error" "RTN","BSDXAPI",269,0) - NEW SDATA,DFN,SDT,SDCL,SDDA,SDCPHDL + ; "RTN","BSDXAPI",270,0) - S DFN=BSDR("PAT"),SDT=BSDR("ADT"),SDCL=BSDR("CLN"),SDMODE=2,SDDA=IEN + I '$D(^DPT(+$G(BSDR("PAT")),0)) Q 1_U_"Patient not on file: "_$G(BSDR("PAT")) "RTN","BSDXAPI",271,0) - S SDCPHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL + I '$D(^SC(+$G(BSDR("CLN")),0)) Q 1_U_"Clinic not on file: "_$G(BSDR("CLN")) "RTN","BSDXAPI",272,0) - D BEFORE^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCPHDL) + I $G(BSDR("ADT")) S BSDR("ADT")=+$E(BSDR("ADT"),1,12) ;remove seconds "RTN","BSDXAPI",273,0) - ; + I $G(BSDR("ADT"))'?7N.1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT")) "RTN","BSDXAPI",274,0) - ; get user who made appt and date appt made from ^SC + I $G(BSDR("CDT")) S BSDR("CDT")=+$E(BSDR("CDT"),1,12) ;remove seconds "RTN","BSDXAPI",275,0) - ; because data in ^SC will be deleted + I $G(BSDR("CDT"))'?7N.1".".4N Q 1_U_"Checkin Date/Time error: "_$G(BSDR("CDT")) "RTN","BSDXAPI",276,0) - NEW USER,DATE + I '$D(^VA(200,+$G(BSDR("USR")),0)) Q 1_U_"User Who Made Appt Error: "_$G(BSDR("USR")) "RTN","BSDXAPI",277,0) - S USER=$P($G(^SC(SDCL,"S",SDT,1,IEN,0)),U,6) + ; "RTN","BSDXAPI",278,0) - S DATE=$P($G(^SC(SDCL,"S",SDT,1,IEN,0)),U,7) + ; find ien for appt in file 44 "RTN","BSDXAPI",279,0) - ; + N IEN S IEN=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")) "RTN","BSDXAPI",280,0) - ; update file 2 info + I 'IEN Q 1_U_"Error trying to find appointment for checkin: Patient="_BSDR("PAT")_" Clinic="_BSDR("CLN")_" Appt="_BSDR("ADT") "RTN","BSDXAPI",281,0) - NEW DIE,DA,DR -"RTN","BSDXAPI",282,0) - S DIE="^DPT("_DFN_",""S"",",DA(1)=DFN,DA=SDT -"RTN","BSDXAPI",283,0) - S DR="3///"_BSDR("TYP")_";14///`"_BSDR("USR")_";15///"_BSDR("CDT")_";16///`"_BSDR("CR")_";19///`"_USER_";20///"_DATE -"RTN","BSDXAPI",284,0) - S:$G(BSDR("NOT"))]"" DR=DR_";17///"_$E(BSDR("NOT"),1,160) -"RTN","BSDXAPI",285,0) - D ^DIE -"RTN","BSDXAPI",286,0) - ; -"RTN","BSDXAPI",287,0) - ; delete data in ^SC -"RTN","BSDXAPI",288,0) - NEW DIK,DA -"RTN","BSDXAPI",289,0) - S DIK="^SC("_BSDR("CLN")_",""S"","_BSDR("ADT")_",1," -"RTN","BSDXAPI",290,0) - S DA(2)=BSDR("CLN"),DA(1)=BSDR("ADT"),DA=IEN -"RTN","BSDXAPI",291,0) - D ^DIK -"RTN","BSDXAPI",292,0) - ; -"RTN","BSDXAPI",293,0) - ; call event driver -"RTN","BSDXAPI",294,0) - D CANCEL^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDMODE,SDCPHDL) -"RTN","BSDXAPI",295,0) Q 0 -"RTN","BSDXAPI",296,0) +"RTN","BSDXAPI",282,0) ; +"RTN","BSDXAPI",283,0) +CANCEL1(DFN,CLIN,TYP,APDATE,REASON,INFO) ; PEP w/ parameters for $$CANCEL - cancelling appointment +"RTN","BSDXAPI",284,0) + ; Call like this for DFN 23435 cancelling an appointment at Hospital Location 33, +"RTN","BSDXAPI",285,0) + ; cancellation initiated by patient ("PC" rather than clinic "C"), +"RTN","BSDXAPI",286,0) + ; cancelling appt at Dec 20, 2009 @ 10:11:59 because of reason 1 in file 409.2 IEN (weather) +"RTN","BSDXAPI",287,0) + ; because foxes come out during bad weather. +"RTN","BSDXAPI",288,0) + ; S RESULT=$$CANCEL1^BSDXAPI(23435,33,"PC",3091220.221159,1,"Afraid of foxes") +"RTN","BSDXAPI",289,0) + N BSDR +"RTN","BSDXAPI",290,0) + S BSDR("PAT")=DFN +"RTN","BSDXAPI",291,0) + S BSDR("CLN")=CLIN +"RTN","BSDXAPI",292,0) + S BSDR("TYP")=TYP +"RTN","BSDXAPI",293,0) + S BSDR("ADT")=APDATE +"RTN","BSDXAPI",294,0) + S BSDR("CDT")=$$NOW^XLFDT +"RTN","BSDXAPI",295,0) + S BSDR("USR")=DUZ +"RTN","BSDXAPI",296,0) + S BSDR("CR")=REASON "RTN","BSDXAPI",297,0) -CI(PAT,CLINIC,DATE,SDIEN) ;PEP; -- returns 1 if appt already checked-in + S BSDR("NOT")=INFO "RTN","BSDXAPI",298,0) - NEW X + Q $$CANCEL(.BSDR) "RTN","BSDXAPI",299,0) - S X=$G(SDIEN) ;ien sent in call + ; "RTN","BSDXAPI",300,0) - I 'X S X=$$SCIEN(PAT,CLINIC,DATE) I 'X Q 0 +CANCEL(BSDR) ;PEP; called to cancel appt "RTN","BSDXAPI",301,0) - S X=$P($G(^SC(CLINIC,"S",DATE,1,X,"C")),U) + ; "RTN","BSDXAPI",302,0) - Q $S(X:1,1:0) + ; Make call using: S ERR=$$CANCEL^BSDXAPI(.ARRAY) "RTN","BSDXAPI",303,0) ; "RTN","BSDXAPI",304,0) -RMCI(PAT,CLINIC,DATE) ;PEP; -- Remove Check-in; $$ + ; Input Array - "RTN","BSDXAPI",305,0) - ; PAT = DFN + ; BSDR("PAT") = ien of patient in file 2 "RTN","BSDXAPI",306,0) - ; CLINIC = SC IEN + ; BSDR("CLN") = ien of clinic in file 44 "RTN","BSDXAPI",307,0) - ; DATE = FM Date/Time of Appointment + ; BSDR("TYP") = C for canceled by clinic; PC for patient canceled "RTN","BSDXAPI",308,0) - ; + ; BSDR("ADT") = appointment date and time "RTN","BSDXAPI",309,0) - ; Returns: + ; BSDR("CDT") = cancel date and time "RTN","BSDXAPI",310,0) - ; 0 if okay + ; BSDR("USR") = user who canceled appt "RTN","BSDXAPI",311,0) - ; -1 if failure + ; BSDR("CR") = cancel reason - pointer to file 409.2 "RTN","BSDXAPI",312,0) - ; + ; BSDR("NOT") = cancel remarks - optional notes to 160 characters "RTN","BSDXAPI",313,0) - ; Call like this: $$RMCI(233,33,3110102.1130) + ; "RTN","BSDXAPI",314,0) - ; + ;Output: error status and message "RTN","BSDXAPI",315,0) - ; Move my variables into the ones used by SDAPIs (just a convenience) + ; = 0 or null: everything okay "RTN","BSDXAPI",316,0) - NEW SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL + ; = 1^message: error and reason "RTN","BSDXAPI",317,0) - S DFN=PAT,SDT=DATE,SDCL=CLINIC,SDMODE=2,SDDA=$$SCIEN(DFN,SDCL,SDT) + ; "RTN","BSDXAPI",318,0) - ; + ; Okay to Cancel? Call Cancel Check. "RTN","BSDXAPI",319,0) - I SDDA<1 QUIT 0 ; Appt cancelled; cancelled appts rm'ed from file 44 + N BSDXCANCK S BSDXCANCK=$$CANCELCK(.BSDR) "RTN","BSDXAPI",320,0) - ; + I BSDXCANCK Q BSDXCANCK "RTN","BSDXAPI",321,0) - ; remember before status + ; "RTN","BSDXAPI",322,0) - S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL + ; BSDX 1.5 3110125 "RTN","BSDXAPI",323,0) - D BEFORE^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL) + ; UJO/SMH - Add ability to remove check-in if the patient is checked in "RTN","BSDXAPI",324,0) - ; + ; VEN/SMH on 3120625/v1.7 - PIMS doesn't care if patient is already checked in "RTN","BSDXAPI",325,0) - ; remove check-in using filer. + ; Lets you remove appointment anyways! Not like RPMS. "RTN","BSDXAPI",326,0) - N BSDXIENS S BSDXIENS=SDDA_","_DATE_","_CLINIC_"," + ; Plus... deleting checkin affects S node on 44, which is DELETED anyways! "RTN","BSDXAPI",327,0) - S BSDXFDA(44.003,BSDXIENS,309)="@" ; CHECKED-IN + ; "RTN","BSDXAPI",328,0) - S BSDXFDA(44.003,BSDXIENS,302)="@" ; CHECK IN USER + ; remember before status "RTN","BSDXAPI",329,0) - S BSDXFDA(44.003,BSDXIENS,305)="@" ; CHECK IN ENTERED + NEW SDATA,DFN,SDT,SDCL,SDDA,SDCPHDL,SDMODE "RTN","BSDXAPI",330,0) - N BSDXERR + NEW IEN S IEN=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")) "RTN","BSDXAPI",331,0) - D FILE^DIE("","BSDXFDA","BSDXERR") + S DFN=BSDR("PAT"),SDT=BSDR("ADT"),SDCL=BSDR("CLN"),SDMODE=2,SDDA=IEN "RTN","BSDXAPI",332,0) - I $D(BSDXERR) QUIT "-1~Can't file for Pat "_PAT_" in Clinic "_CLINIC_" at "_DATE_". Fileman reported an error: "_BSDXERR("DIERR",1,"TEXT",1) + S SDCPHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL "RTN","BSDXAPI",333,0) - ; + D BEFORE^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCPHDL) "RTN","BSDXAPI",334,0) - ; set after status + ; NB: Here only ^TMP globals are set with before values. "RTN","BSDXAPI",335,0) - S SDDA=$$SCIEN(DFN,SDCL,SDT) + ; "RTN","BSDXAPI",336,0) - S SDCIHDL=$$HANDLE^SDAMEVT(1),SDATA=SDDA_U_DFN_U_SDT_U_SDCL + ; get user who made appt and date appt made from ^SC "RTN","BSDXAPI",337,0) - D AFTER^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDCIHDL) + ; because data in ^SC will be deleted "RTN","BSDXAPI",338,0) - ; + ; Appointment Length: ditto "RTN","BSDXAPI",339,0) - ; call event driver + NEW USER,DATE "RTN","BSDXAPI",340,0) - D EVT^SDAMEVT(.SDATA,4,SDMODE,SDCIHDL) + S USER=$P($G(^SC(SDCL,"S",SDT,1,IEN,0)),U,6) "RTN","BSDXAPI",341,0) - QUIT 0 + S DATE=$P($G(^SC(SDCL,"S",SDT,1,IEN,0)),U,7) "RTN","BSDXAPI",342,0) - ; + N BSDXLEN S BSDXLEN=$$APPLEN(DFN,SDCL,SDT) ; appt length "RTN","BSDXAPI",343,0) -SCIEN(PAT,CLINIC,DATE) ;PEP; returns ien for appt in ^SC + ; "RTN","BSDXAPI",344,0) - NEW X,IEN + ; update file 2 info --old code; keep for reference "RTN","BSDXAPI",345,0) - S X=0 F S X=$O(^SC(CLINIC,"S",DATE,1,X)) Q:'X Q:$G(IEN) D + ;NEW DIE,DA,DR "RTN","BSDXAPI",346,0) - . Q:$P($G(^SC(CLINIC,"S",DATE,1,X,0)),U,9)["C" ;cancelled + ;S DIE="^DPT("_DFN_",""S"",",DA(1)=DFN,DA=SDT "RTN","BSDXAPI",347,0) - . I +$G(^SC(CLINIC,"S",DATE,1,X,0))=PAT S IEN=X + ;S DR="3///"_BSDR("TYP")_";14///`"_BSDR("USR")_";15///"_BSDR("CDT")_";16///`"_BSDR("CR")_";19///`"_USER_";20///"_DATE "RTN","BSDXAPI",348,0) - Q $G(IEN) + ;S:$G(BSDR("NOT"))]"" DR=DR_";17///"_$E(BSDR("NOT"),1,160) "RTN","BSDXAPI",349,0) - ; + ;D ^DIE "RTN","BSDXAPI",350,0) -APPTYP(PAT,DATE) ;PEP; -- returns type of appt (scheduled or walk-in) + N BSDXIENS S BSDXIENS=SDT_","_DFN_"," "RTN","BSDXAPI",351,0) - NEW X S X=$P($G(^DPT(PAT,"S",DATE,0)),U,7) + N BSDXFDA "RTN","BSDXAPI",352,0) - Q $S(X=3:"SCHED",X=4:"WALK-IN",1:"??") + S BSDXFDA(2.98,BSDXIENS,3)=BSDR("TYP") "RTN","BSDXAPI",353,0) - ; + S BSDXFDA(2.98,BSDXIENS,14)=BSDR("USR") "RTN","BSDXAPI",354,0) -CO(PAT,CLINIC,DATE,SDIEN) ;PEP; -- returns 1 if appt already checked-out + S BSDXFDA(2.98,BSDXIENS,15)=BSDR("CDT") "RTN","BSDXAPI",355,0) - NEW X + S BSDXFDA(2.98,BSDXIENS,16)=BSDR("CR") "RTN","BSDXAPI",356,0) - S X=$G(SDIEN) ;ien sent in call + S BSDXFDA(2.98,BSDXIENS,19)=USER "RTN","BSDXAPI",357,0) - I 'X S X=$$SCIEN(PAT,CLINIC,DATE) I 'X Q 0 + S BSDXFDA(2.98,BSDXIENS,20)=DATE "RTN","BSDXAPI",358,0) - S X=$P($G(^SC(CLINIC,"S",DATE,1,X,"C")),U,3) + S:$G(BSDR("NOT"))]"" BSDXFDA(2.98,BSDXIENS,17)=$E(BSDR("NOT"),1,160) "RTN","BSDXAPI",359,0) - Q $S(X:1,1:0) -"RTN","BSDXAPI",360,0) - ; -"RTN","BSDXAPI",361,0) -UPDATENOTE(PAT,CLINIC,DATE,NOTE) ; PEP; Update Note in ^SC for patient's appointment @ DATE -"RTN","BSDXAPI",362,0) - ; PAT = DFN -"RTN","BSDXAPI",363,0) - ; CLINIC = SC IEN -"RTN","BSDXAPI",364,0) - ; DATE = FM Date/Time of Appointment -"RTN","BSDXAPI",365,0) - ; -"RTN","BSDXAPI",366,0) - ; Returns: -"RTN","BSDXAPI",367,0) - ; 0 if okay -"RTN","BSDXAPI",368,0) - ; -1 if failure -"RTN","BSDXAPI",369,0) - N SCIEN S SCIEN=$$SCIEN(PAT,CLINIC,DATE) ; ien of appt in ^SC -"RTN","BSDXAPI",370,0) - I SCIEN<1 QUIT 0 ; Appt cancelled; cancelled appts rm'ed from file 44 -"RTN","BSDXAPI",371,0) - N BSDXIENS S BSDXIENS=SCIEN_","_DATE_","_CLINIC_"," -"RTN","BSDXAPI",372,0) - S BSDXFDA(44.003,BSDXIENS,3)=$E(NOTE,1,150) -"RTN","BSDXAPI",373,0) N BSDXERR -"RTN","BSDXAPI",374,0) +"RTN","BSDXAPI",360,0) D FILE^DIE("","BSDXFDA","BSDXERR") +"RTN","BSDXAPI",361,0) + I $D(BSDXERR) Q 1_U_"Cannot cancel appointment in File 2" +"RTN","BSDXAPI",362,0) + ; Failure point 1: If we fail here, nothing has happened yet. +"RTN","BSDXAPI",363,0) + ; +"RTN","BSDXAPI",364,0) + ; delete data in ^SC -- this does not (typically) fail. Fileman won't stop +"RTN","BSDXAPI",365,0) + NEW DIK,DA +"RTN","BSDXAPI",366,0) + S DIK="^SC("_BSDR("CLN")_",""S"","_BSDR("ADT")_",1," +"RTN","BSDXAPI",367,0) + S DA(2)=BSDR("CLN"),DA(1)=BSDR("ADT"),DA=IEN +"RTN","BSDXAPI",368,0) + D ^DIK +"RTN","BSDXAPI",369,0) + ; Failure point 2: not expected to happen here +"RTN","BSDXAPI",370,0) + ; +"RTN","BSDXAPI",371,0) + ; Update PIMS availability -- this doesn't fail. Global gets/sets only. +"RTN","BSDXAPI",372,0) + D AVUPDTCN^BSDXAPI1(SDCL,SDT,BSDXLEN) +"RTN","BSDXAPI",373,0) + ; +"RTN","BSDXAPI",374,0) + ; call event driver -- point of no return "RTN","BSDXAPI",375,0) - I $D(BSDXERR) QUIT "-1~Can't file for Pat "_PAT_" in Clinic "_CLINIC_" at "_DATE_". Fileman reported an error: "_BSDXERR("DIERR",1,"TEXT",1) + D CANCEL^SDAMEVT(.SDATA,DFN,SDT,SDCL,SDDA,SDMODE,SDCPHDL) "RTN","BSDXAPI",376,0) - QUIT 0 + ; +"RTN","BSDXAPI",377,0) + Q 0 +"RTN","BSDXAPI",378,0) + ; +"RTN","BSDXAPI",379,0) +CANCELCK(BSDR) ; $$ PEP; Okay to Cancel Appointment? +"RTN","BSDXAPI",380,0) + ; Input: .BSDR array as documented in $$CANCEL +"RTN","BSDXAPI",381,0) + ; Output: 0 or 1^Error message +"RTN","BSDXAPI",382,0) + I '$D(^DPT(+$G(BSDR("PAT")),0)) Q 1_U_"Patient not on file: "_$G(BSDR("PAT")) +"RTN","BSDXAPI",383,0) + I '$D(^SC(+$G(BSDR("CLN")),0)) Q 1_U_"Clinic not on file: "_$G(BSDR("CLN")) +"RTN","BSDXAPI",384,0) + I ($G(BSDR("TYP"))'="C"),($G(BSDR("TYP"))'="PC") Q 1_U_"Cancel Status error: "_$G(BSDR("TYP")) +"RTN","BSDXAPI",385,0) + I $G(BSDR("ADT")) S BSDR("ADT")=+$E(BSDR("ADT"),1,12) ;remove seconds +"RTN","BSDXAPI",386,0) + I $G(BSDR("ADT"))'?7N.1".".4N Q 1_U_"Appt Date/Time error: "_$G(BSDR("ADT")) +"RTN","BSDXAPI",387,0) + I $G(BSDR("CDT")) S BSDR("CDT")=+$E(BSDR("CDT"),1,12) ;remove seconds +"RTN","BSDXAPI",388,0) + I $G(BSDR("CDT"))'?7N.1".".4N Q 1_U_"Cancel Date/Time error: "_$G(BSDR("CDT")) +"RTN","BSDXAPI",389,0) + I '$D(^VA(200,+$G(BSDR("USR")),0)) Q 1_U_"User Who Canceled Appt Error: "_$G(BSDR("USR")) +"RTN","BSDXAPI",390,0) + I '$D(^SD(409.2,+$G(BSDR("CR")))) Q 1_U_"Cancel Reason error: "_$G(BSDR("CR")) +"RTN","BSDXAPI",391,0) + ; +"RTN","BSDXAPI",392,0) + NEW IEN S IEN=$$SCIEN(BSDR("PAT"),BSDR("CLN"),BSDR("ADT")) +"RTN","BSDXAPI",393,0) + I 'IEN Q 1_U_"Error trying to find appointment for cancel: Patient="_BSDR("PAT")_" Clinic="_BSDR("CLN")_" Appt="_BSDR("ADT") +"RTN","BSDXAPI",394,0) + ; +"RTN","BSDXAPI",395,0) + ; Check-out check. New in v1.7 +"RTN","BSDXAPI",396,0) + I $$CO(BSDR("PAT"),BSDR("CLN"),BSDR("ADT"),IEN) Q 1_U_"Cannot delete. Appointment has already been checked-out!" +"RTN","BSDXAPI",397,0) + Q 0 +"RTN","BSDXAPI",398,0) + ; +"RTN","BSDXAPI",399,0) +CI(PAT,CLINIC,DATE,SDIEN) ;PEP; -- returns 1 if appt already checked-in +"RTN","BSDXAPI",400,0) + NEW X +"RTN","BSDXAPI",401,0) + S X=$G(SDIEN) ;ien sent in call +"RTN","BSDXAPI",402,0) + I 'X S X=$$SCIEN(PAT,CLINIC,DATE) I 'X Q 0 +"RTN","BSDXAPI",403,0) + S X=$P($G(^SC(CLINIC,"S",DATE,1,X,"C")),U) +"RTN","BSDXAPI",404,0) + Q $S(X:1,1:0) +"RTN","BSDXAPI",405,0) + ; +"RTN","BSDXAPI",406,0) +CO(PAT,CLINIC,DATE,SDIEN) ;PEP; -- returns 1 if appt already checked-out +"RTN","BSDXAPI",407,0) + NEW X +"RTN","BSDXAPI",408,0) + S X=$G(SDIEN) ;ien sent in call +"RTN","BSDXAPI",409,0) + I 'X S X=$$SCIEN(PAT,CLINIC,DATE) I 'X Q 0 +"RTN","BSDXAPI",410,0) + S X=$P($G(^SC(CLINIC,"S",DATE,1,X,"C")),U,3) +"RTN","BSDXAPI",411,0) + Q $S(X:1,1:0) +"RTN","BSDXAPI",412,0) + ; +"RTN","BSDXAPI",413,0) +SCIEN(PAT,CLINIC,DATE) ;PEP; returns ien for appt in ^SC +"RTN","BSDXAPI",414,0) + NEW X,IEN +"RTN","BSDXAPI",415,0) + S X=0 F S X=$O(^SC(CLINIC,"S",DATE,1,X)) Q:'X Q:$G(IEN) D +"RTN","BSDXAPI",416,0) + . Q:$P($G(^SC(CLINIC,"S",DATE,1,X,0)),U,9)["C" ;cancelled +"RTN","BSDXAPI",417,0) + . I +$G(^SC(CLINIC,"S",DATE,1,X,0))=PAT S IEN=X +"RTN","BSDXAPI",418,0) + Q $G(IEN) +"RTN","BSDXAPI",419,0) + ; +"RTN","BSDXAPI",420,0) +APPLEN(PAT,CLINIC,DATE) ; $$ PEP; returns an appointment's length +"RTN","BSDXAPI",421,0) + ; Get either the appointment length or zero +"RTN","BSDXAPI",422,0) + N SCIEN S SCIEN=$$SCIEN(PAT,CLINIC,DATE) +"RTN","BSDXAPI",423,0) + Q:SCIEN $P(^SC(CLINIC,"S",DATE,1,SCIEN,0),U,2) +"RTN","BSDXAPI",424,0) + Q 0 +"RTN","BSDXAPI",425,0) +APPTYP(PAT,DATE) ;PEP; -- returns type of appt (scheduled or walk-in) +"RTN","BSDXAPI",426,0) + NEW X S X=$P($G(^DPT(PAT,"S",DATE,0)),U,7) +"RTN","BSDXAPI",427,0) + Q $S(X=3:"SCHED",X=4:"WALK-IN",1:"??") +"RTN","BSDXAPI",428,0) + ; "RTN","BSDXAPI1") 0^37^B99176581 "RTN","BSDXAPI1",1,0) BSDXAPI1 ; VEN/SMH - SCHEDULING APIs - Continued!!! ; 7/9/12 2:22pm "RTN","BSDXAPI1",2,0) - ;;1.7;BSDX;;Oct 04, 2012;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDXAPI1",3,0) ; Licensed under LGPL "RTN","BSDXAPI1",4,0) @@ -13569,11 +13399,11 @@ DOW S %=$E(X,1,3),Y=$E(X,4,5),Y=Y>2&'(%#4)+$E("144025036146",Y) "RTN","BSDXAPI1",302,0) ; "RTN","BSDXGPRV") -0^36^B4880199 +0^36^B4677493 "RTN","BSDXGPRV",1,0) -BSDXGPRV ; WV/SMH - WINDOWS SCHEDULING RPCS ; 4/28/11 10:31am +BSDXGPRV ; WV/SMH - WINDOWS SCHEDULING RPCS ; 7/6/12 11:07am "RTN","BSDXGPRV",2,0) - ;;1.6;BSDX;;Aug 31, 2011;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDXGPRV",3,0) ; Licensed under LGPL "RTN","BSDXGPRV",4,0) @@ -13609,7 +13439,7 @@ PD(BSDXY,HLIEN) ;EP Debugging entry point "RTN","BSDXGPRV",19,0) ; "RTN","BSDXGPRV",20,0) - D DEBUG^%Serenji("P^BSDXGPRV(.BSDXY,HLIEN)","192.168.254.130") + ;D DEBUG^%Serenji("P^BSDXGPRV(.BSDXY,HLIEN)","192.168.254.130") "RTN","BSDXGPRV",21,0) ; "RTN","BSDXGPRV",22,0) @@ -13639,7 +13469,7 @@ P(BSDXY,HLIEN) ; Public Entry point; Get Providers for Hosp Location "RTN","BSDXGPRV",34,0) I '$D(^SC(HLIEN,0)) D ERR("HOSPITAL LOCATION NOT FOUND") QUIT "RTN","BSDXGPRV",35,0) - D ^XBKVAR + D ^XBKVAR "RTN","BSDXGPRV",36,0) N $ET S $ET="G ERROR^BSDXGPRV" "RTN","BSDXGPRV",37,0) @@ -13695,7 +13525,7 @@ P(BSDXY,HLIEN) ; Public Entry point; Get Providers for Hosp Location "RTN","BSDXUT",1,0) BSDXUT ; VEN/SMH - Unit Tests for Scheduling GUI ; 6/29/12 12:20pm "RTN","BSDXUT",2,0) - ;;1.7;BSDX;;Oct 04, 2012;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDXUT",3,0) ; Licensed under LGPL "RTN","BSDXUT",4,0) @@ -14315,7 +14145,7 @@ TIMEHL(HLIEN) ; $$ - Create a next available appointment time^ending time by HL; "RTN","BSDXUT1",1,0) BSDXUT1 ; VEN/SMH - Unit Tests for Scheduling GUI - cont. ; 7/9/12 12:31pm "RTN","BSDXUT1",2,0) - ;;1.7;BSDX;;Oct 04, 2012;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDXUT1",3,0) ; "RTN","BSDXUT1",4,0) @@ -15221,7 +15051,7 @@ UT31 ; Unit Tests for BSDX31 "RTN","BSDXUT2",1,0) BSDXUT2 ; VEN/SMH - Unit Tests for Scheduling GUI - cont. ; 7/9/12 3:18pm "RTN","BSDXUT2",2,0) - ;;1.7;BSDX;;Oct 04, 2012;Build 25 + ;;1.7;BSDX;;Jun 01, 2013;Build 25 "RTN","BSDXUT2",3,0) ; "RTN","BSDXUT2",4,0)