BSDX25 ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; ;;2.0;IHS WINDOWS SCHEDULING;;NOV 01, 2007 ; ; CHECKIND(BSDXY,BSDXAPTID,BSDXCDT,BSDXCC,BSDXPRV,BSDXROU,BSDXVCL,BSDXVFM,BSDXOG) ;EP ;Entry point for debugging ; ;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)) ;E G ENDBG Q ; CHECKIN(BSDXY,BSDXAPTID,BSDXCDT,BSDXCC,BSDXPRV,BSDXROU,BSDXVCL,BSDXVFM,BSDXOG) ;EP Check in appointment ; ENDBG ; N BSDXNOD,BSDXPATID,BSDXSTART,DIK,DA,BSDXID,BSDXI,BSDXZ,BSDXIENS,BSDXVEN N BSDXNOEV S BSDXNOEV=1 ;Don't execute protocol ; D ^XBKVAR S X="ERROR^BSDX25",@^%ZOSF("TRAP") S BSDXI=0 K ^BSDXTMP($J) S BSDXY="^BSDXTMP("_$J_")" S ^BSDXTMP($J,0)="T00020ERRORID"_$C(30) I '+BSDXAPTID D ERR("BSDX25: Invalid Appointment ID") Q I '$D(^BSDXAPPT(BSDXAPTID,0)) D ERR("BSDX08: Invalid Appointment ID") Q ; S:BSDXCDT["@0000" BSDXCDT=$P(BSDXCDT,"@") S %DT="T",X=BSDXCDT D ^%DT S BSDXCDT=Y I BSDXCDT=-1 D ERR(70) Q I BSDXCDT>$$NOW^XLFDT S BSDXCDT=$$NOW^XLFDT ;Checkin BSDX APPOINTMENT entry D BSDXCHK(BSDXAPTID,BSDXCDT) S BSDXNOD=^BSDXAPPT(BSDXAPTID,0) S BSDXPATID=$P(BSDXNOD,U,5) S BSDXSTART=$P(BSDXNOD,U) ; S BSDXSC1=$P(BSDXNOD,U,7) ;RESOURCEID I BSDXSC1]"",$D(^BSDXRES(BSDXSC1,0)) D I +$G(BSDXZ) D ERR($P(BSDXZ,U,2)) Q . S BSDXNOD=^BSDXRES(BSDXSC1,0) . S BSDXSC1=$P(BSDXNOD,U,4) ;HOSPITAL LOCATION . I BSDXSC1]"",$D(^SC(BSDXSC1,0)) D APCHK(.BSDXZ,BSDXSC1,BSDXPATID,BSDXCDT,BSDXSTART) ; S BSDXI=BSDXI+1 ;S ^BSDXTMP($J,BSDXI)="-1"_$C(30) S ^BSDXTMP($J,BSDXI)="0"_$C(30) S BSDXI=BSDXI+1 S ^BSDXTMP($J,BSDXI)=$C(31) Q ; BSDXCHK(BSDXAPTID,BSDXCDT) ; ; S BSDXIENS=BSDXAPTID_"," S BSDXFDA(9002018.4,BSDXIENS,.03)=BSDXCDT D FILE^DIE("","BSDXFDA","BSDXMSG") Q ; APCHK(BSDXZ,BSDXSC1,BSDXDFN,BSDXCDT,BSDXSTART) ; ;Checkin appointment for patient BSDXDFN in clinic BSDXSC1 ;at time BSDXSTART S BSDXZ=$$CHECKIN1^BSDXAPI(BSDXDFN,BSDXSC1,BSDXSTART) Q ; CHKEVT(BSDXPAT,BSDXSTART,BSDXSC) ;EP Called by BSDX CHECKIN APPOINTMENT event ;when appointments CHECKIN via PIMS interface. ;Propagates CHECKIN to BSDXAPPT and raises refresh event to running GUI clients ; Q:+$G(BSDXNOEV) Q:'+$G(BSDXSC) N BSDXSTAT,BSDXFOUND,BSDXRES S BSDXSTAT="" S:$G(SDATA("AFTER","STATUS"))["CHECKED IN" BSDXSTAT=$P(SDATA("AFTER","STATUS"),"^",4) S BSDXFOUND=0 I $D(^BSDXRES("ALOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ALOC",BSDXSC,0)) S BSDXFOUND=$$CHKEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT) I BSDXFOUND D CHKEVT3(BSDXRES) Q I $D(^BXDXRES("ASSOC",BSDXSC)) S BSDXRES=$O(^BSDXRES("ASSOC",BSDXSC,0)) S BSDXFOUND=$$CHKEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT) I BSDXFOUND D CHKEVT3(BSDXRES) Q ; CHKEVT1(BSDXRES,BSDXSTART,BSDXPAT,BSDXSTAT) ; ;Get appointment id in BSDXAPT ;If found, call BSDXNOS(BSDXAPPT) and return 1 ;else return 0 N BSDXFOUND,BSDXAPPT S BSDXFOUND=0 Q:'+$G(BSDXRES) BSDXFOUND Q:'$D(^BSDXAPPT("ARSRC",BSDXRES,BSDXSTART)) BSDXFOUND S BSDXAPPT=0 F S BSDXAPPT=$O(^BSDXAPPT("ARSRC",BSDXRES,BSDXSTART,BSDXAPPT)) Q:'+BSDXAPPT D Q:BSDXFOUND . S BSDXNOD=$G(^BSDXAPPT(BSDXAPPT,0)) Q:BSDXNOD="" . I $P(BSDXNOD,U,5)=BSDXPAT,$P(BSDXNOD,U,12)="" S BSDXFOUND=1 Q I BSDXFOUND,+$G(BSDXAPPT) D BSDXCHK(BSDXAPPT,BSDXSTAT) Q BSDXFOUND ; CHKEVT3(BSDXRES) ; ;Call RaiseEvent to notify GUI clients ; N BSDXRESN S BSDXRESN=$G(^BSDXRES(BSDXRES,0)) Q:BSDXRESN="" S BSDXRESN=$P(BSDXRESN,"^") ;D EVENT^BSDX23("SCHEDULE-"_BSDXRESN,"","","") D EVENT^BMXMEVN("BSDX SCHEDULE",BSDXRESN) Q ; ERROR ; D ERR("RPMS Error") Q ; ERR(ERRNO) ;Error processing I +ERRNO S BSDXERR=ERRNO+134234112 ;vbObjectError E S BSDXERR=ERRNO S BSDXI=BSDXI+1 S ^BSDXTMP($J,BSDXI)=BSDXERR_$C(30) S BSDXI=BSDXI+1 S ^BSDXTMP($J,BSDXI)=$C(31) Q