- PXKCO ;ISL/JVS,ESW - Provider-Dx-CPT-VSIT at check-out ; 11/20/02 4:43pm
- ;;1.0;PCE PATIENT CARE ENCOUNTER;**28,41,96**;Aug 12, 1996
- ;Routine-set varibles-Check-out
- ; VARIABLE LIST
- ;
- ; PXKAFT = After picture of the encounter provider entry
- ; PXKBEF = Before picture of the encounter provider entry
- ; PXKDFN = The DFN of the patient(IEN in file 2 or 9000001)
- ; PXKNODA,PXKNODB = Before and After Enounter NODE
- ; PXKPR,PXKAPR,PXKBPR = PROVIDER IEN in VA(200
- ; PXKREF = Reference to the temp global
- ; PXKSOR = Source of data(CO,EF,WS,DE)
- ; PXKOE = outpatient encounter IEN in SCE
- ; PXKOA = Operating/attending(e.g "O" or "A")
- ; PXKORG = Orginating process
- ; PXKPRI = IFN of OUTPATIENT PROVIDER (#409.44) file entry
- ; PXKPS,PXKAPS = primary/secondary(e.g. "P" or "S")
- ; PXKVDT = Visit date and time in fileman format
- ; PXKVST = Encounter equavalent visit IEN in VISIT file
- ;
- W !,"This is NOT an entry point!!" Q
- ;
- EN1 ;Pims Check-out entry point
- N VSIT
- I '$D(SDHDL) Q
- ;
- EN ;---ENTRY POINT
- N PXKREF,PXKORG,STOP,PXKOE
- S PXKREF="^TMP(""SDEVT"",$J,SDHDL)",STOP=0
- ;
- ; -- SDHDL is the current process
- ; It's always defined.
- ;
- S PXKORG=0
- F S PXKORG=$O(@PXKREF@(PXKORG)) S:"1234"'[PXKORG STOP=1 Q:STOP=1 Q:'PXKORG D
- .Q:STOP=1
- .N PXKNODB,PXKNODA
- .S PXKOE=0 F S PXKOE=$O(@PXKREF@(PXKORG,"SDOE",PXKOE)) Q:'PXKOE D
- ..K VSIT
- ..N NODE,NODE0,PXKDIV
- ..S PXKNODB=$G(@PXKREF@(PXKORG,"SDOE",PXKOE,0,"BEFORE"))
- ..S PXKNODA=$G(@PXKREF@(PXKORG,"SDOE",PXKOE,0,"AFTER"))
- ..S VSIT("IENB")=$P(PXKNODB,"^",5) ;BEFORE IEN
- ..S VSIT("IEN")=$P(PXKNODA,"^",5) ;VISIT IEN
- ..Q:$G(VSIT("IEN"))<1
- ..;
- ..S NODE0=$G(^AUPNVSIT(VSIT("IEN"),0))
- ..S NODE=$G(^AUPNVSIT(VSIT("IEN"),150))
- ..Q:NODE0=""
- ..;
- ..;gathering the changed data elements
- ..I $P(NODE0,U,21)'=$P(PXKNODA,U,13) S VSIT("ELG")=$P(PXKNODA,"^",13) ;ELIGIBILITY
- ..I $P(PXKNODB,U,3)'=$P(PXKNODA,U,3) S VSIT("DSS")=$P(PXKNODA,"^",3) ;CLINIC STOP CODE
- ..I $P(PXKNODB,U,11)'=$P(PXKNODA,U,11) S PXKDIV=$P($G(PXKNODA),"^",11) ;DIVISION
- ..I $D(PXKDIV) S VSIT("INS")=$S(+$P(NODE0,U,6)>0:$P(NODE0,U,6),+PXKDIV>0:$P($G(^DG(40.8,+PXKDIV,0)),"^",7),1:"") ;INSTITUTION; PX/96 - accept INSTITUTION if passed to PCE.
- ..;
- ..I '$D(VSIT("ELG")),'$D(VSIT("DSS")),'$D(VSIT("INS")) Q
- ..;
- ..;check for necessary changes to SVC and PRI
- ..I ($D(VSIT("DSS"))),($P(PXKNODA,U,8)'=4),(NODE]"") DO
- ...S VSIT("SVC")=$$SVC("A",VSIT("DSS"),$P(NODE,U,2),$P(PXKNODA,U,4))
- ...S VSIT("PRI")=$$PRI($P(NODE,U,3),VSIT("DSS"))
- ..;
- ..D UPD^VSIT
- ..K VSIT
- Q
- ;
- SVC(SVC,DSS,PXKIO,LOC) ;
- ;This tag performs the same tests for the Service Catagory that are in
- ;the visit tracking routine VSITDEF. This has been added as part of
- ;patch SD*5.3*66
- ;INPUTS SVC - The service category to start with.
- ; DSS - The Clinic stop code or DSS Identifier.
- ; PXKIO - The Patient status.
- ; LOC - The location of the visit.
- ;
- ;OUTPUT SVC - The service category need based upon DSS and PXKIO
- ;
- I SVC="E" G SVCQ
- I $P(^DIC(40.7,+DSS,0),"^",1)["TELE" S SVC="T" G SVCQ ;any TELEphone
- I $O(^VSIT(150.1,"B",$P(^DIC(40.7,+DSS,0),"^",2),0)) S SVC="X"
- I SVC="",+DSS=$P($G(^SC(+LOC,0)),"^",7) S SVC="A"
- I SVC="" S SVC="X"
- I PXKIO S SVC=$S(SVC="A":"I",SVC="X":"D",1:SVC)
- E S SVC=$S(SVC="I":"A",SVC="D":"X",1:SVC)
- SVCQ Q SVC
- ;
- PRI(PRI,DSS) ;
- ;This tag performs the same checks for the encounter type as in VSITDEF
- ;It has been added as part of SD*5.3*66
- ;INPUT PRI - Encounter type
- ; DSS - The Clinic stop code or DSS ID.
- ;
- ;OUTPUT PRI - The Encounter type based upon DSS
- ;
- I PRI="P",$O(^VSIT(150.1,"B",+$P($G(^DIC(40.7,+DSS,0)),"^",2),0)) S PRI="O"
- E I PRI="O",'$O(^VSIT(150.1,"B",+$P($G(^DIC(40.7,+DSS,0)),"^",2),0)) S PRI="P"
- Q PRI
- PXKCO ;ISL/JVS,ESW - Provider-Dx-CPT-VSIT at check-out ; 11/20/02 4:43pm
- +1 ;;1.0;PCE PATIENT CARE ENCOUNTER;**28,41,96**;Aug 12, 1996
- +2 ;Routine-set varibles-Check-out
- +3 ; VARIABLE LIST
- +4 ;
- +5 ; PXKAFT = After picture of the encounter provider entry
- +6 ; PXKBEF = Before picture of the encounter provider entry
- +7 ; PXKDFN = The DFN of the patient(IEN in file 2 or 9000001)
- +8 ; PXKNODA,PXKNODB = Before and After Enounter NODE
- +9 ; PXKPR,PXKAPR,PXKBPR = PROVIDER IEN in VA(200
- +10 ; PXKREF = Reference to the temp global
- +11 ; PXKSOR = Source of data(CO,EF,WS,DE)
- +12 ; PXKOE = outpatient encounter IEN in SCE
- +13 ; PXKOA = Operating/attending(e.g "O" or "A")
- +14 ; PXKORG = Orginating process
- +15 ; PXKPRI = IFN of OUTPATIENT PROVIDER (#409.44) file entry
- +16 ; PXKPS,PXKAPS = primary/secondary(e.g. "P" or "S")
- +17 ; PXKVDT = Visit date and time in fileman format
- +18 ; PXKVST = Encounter equavalent visit IEN in VISIT file
- +19 ;
- +20 WRITE !,"This is NOT an entry point!!"
- QUIT
- +21 ;
- EN1 ;Pims Check-out entry point
- +1 NEW VSIT
- +2 IF '$DATA(SDHDL)
- QUIT
- +3 ;
- EN ;---ENTRY POINT
- +1 NEW PXKREF,PXKORG,STOP,PXKOE
- +2 SET PXKREF="^TMP(""SDEVT"",$J,SDHDL)"
- SET STOP=0
- +3 ;
- +4 ; -- SDHDL is the current process
- +5 ; It's always defined.
- +6 ;
- +7 SET PXKORG=0
- +8 FOR
- SET PXKORG=$ORDER(@PXKREF@(PXKORG))
- IF "1234"'[PXKORG
- SET STOP=1
- IF STOP=1
- QUIT
- IF 'PXKORG
- QUIT
- Begin DoDot:1
- +9 IF STOP=1
- QUIT
- +10 NEW PXKNODB,PXKNODA
- +11 SET PXKOE=0
- FOR
- SET PXKOE=$ORDER(@PXKREF@(PXKORG,"SDOE",PXKOE))
- IF 'PXKOE
- QUIT
- Begin DoDot:2
- +12 KILL VSIT
- +13 NEW NODE,NODE0,PXKDIV
- +14 SET PXKNODB=$GET(@PXKREF@(PXKORG,"SDOE",PXKOE,0,"BEFORE"))
- +15 SET PXKNODA=$GET(@PXKREF@(PXKORG,"SDOE",PXKOE,0,"AFTER"))
- +16 ;BEFORE IEN
- SET VSIT("IENB")=$PIECE(PXKNODB,"^",5)
- +17 ;VISIT IEN
- SET VSIT("IEN")=$PIECE(PXKNODA,"^",5)
- +18 IF $GET(VSIT("IEN"))<1
- QUIT
- +19 ;
- +20 SET NODE0=$GET(^AUPNVSIT(VSIT("IEN"),0))
- +21 SET NODE=$GET(^AUPNVSIT(VSIT("IEN"),150))
- +22 IF NODE0=""
- QUIT
- +23 ;
- +24 ;gathering the changed data elements
- +25 ;ELIGIBILITY
- IF $PIECE(NODE0,U,21)'=$PIECE(PXKNODA,U,13)
- SET VSIT("ELG")=$PIECE(PXKNODA,"^",13)
- +26 ;CLINIC STOP CODE
- IF $PIECE(PXKNODB,U,3)'=$PIECE(PXKNODA,U,3)
- SET VSIT("DSS")=$PIECE(PXKNODA,"^",3)
- +27 ;DIVISION
- IF $PIECE(PXKNODB,U,11)'=$PIECE(PXKNODA,U,11)
- SET PXKDIV=$PIECE($GET(PXKNODA),"^",11)
- +28 ;INSTITUTION; PX/96 - accept INSTITUTION if passed to PCE.
- IF $DATA(PXKDIV)
- SET VSIT("INS")=$SELECT(+$PIECE(NODE0,U,6)>0:$PIECE(NODE0,U,6),+PXKDIV>0:$PIECE($GET(^DG(40.8,+PXKDIV,0)),"^",7),1:"")
- +29 ;
- +30 IF '$DATA(VSIT("ELG"))
- IF '$DATA(VSIT("DSS"))
- IF '$DATA(VSIT("INS"))
- QUIT
- +31 ;
- +32 ;check for necessary changes to SVC and PRI
- +33 IF ($DATA(VSIT("DSS")))
- IF ($PIECE(PXKNODA,U,8)'=4)
- IF (NODE]"")
- Begin DoDot:3
- +34 SET VSIT("SVC")=$$SVC("A",VSIT("DSS"),$PIECE(NODE,U,2),$PIECE(PXKNODA,U,4))
- +35 SET VSIT("PRI")=$$PRI($PIECE(NODE,U,3),VSIT("DSS"))
- End DoDot:3
- +36 ;
- +37 DO UPD^VSIT
- +38 KILL VSIT
- End DoDot:2
- End DoDot:1
- +39 QUIT
- +40 ;
- SVC(SVC,DSS,PXKIO,LOC) ;
- +1 ;This tag performs the same tests for the Service Catagory that are in
- +2 ;the visit tracking routine VSITDEF. This has been added as part of
- +3 ;patch SD*5.3*66
- +4 ;INPUTS SVC - The service category to start with.
- +5 ; DSS - The Clinic stop code or DSS Identifier.
- +6 ; PXKIO - The Patient status.
- +7 ; LOC - The location of the visit.
- +8 ;
- +9 ;OUTPUT SVC - The service category need based upon DSS and PXKIO
- +10 ;
- +11 IF SVC="E"
- GOTO SVCQ
- +12 ;any TELEphone
- IF $PIECE(^DIC(40.7,+DSS,0),"^",1)["TELE"
- SET SVC="T"
- GOTO SVCQ
- +13 IF $ORDER(^VSIT(150.1,"B",$PIECE(^DIC(40.7,+DSS,0),"^",2),0))
- SET SVC="X"
- +14 IF SVC=""
- IF +DSS=$PIECE($GET(^SC(+LOC,0)),"^",7)
- SET SVC="A"
- +15 IF SVC=""
- SET SVC="X"
- +16 IF PXKIO
- SET SVC=$SELECT(SVC="A":"I",SVC="X":"D",1:SVC)
- +17 IF '$TEST
- SET SVC=$SELECT(SVC="I":"A",SVC="D":"X",1:SVC)
- SVCQ QUIT SVC
- +1 ;
- PRI(PRI,DSS) ;
- +1 ;This tag performs the same checks for the encounter type as in VSITDEF
- +2 ;It has been added as part of SD*5.3*66
- +3 ;INPUT PRI - Encounter type
- +4 ; DSS - The Clinic stop code or DSS ID.
- +5 ;
- +6 ;OUTPUT PRI - The Encounter type based upon DSS
- +7 ;
- +8 IF PRI="P"
- IF $ORDER(^VSIT(150.1,"B",+$PIECE($GET(^DIC(40.7,+DSS,0)),"^",2),0))
- SET PRI="O"
- +9 IF '$TEST
- IF PRI="O"
- IF '$ORDER(^VSIT(150.1,"B",+$PIECE($GET(^DIC(40.7,+DSS,0)),"^",2),0))
- SET PRI="P"
- +10 QUIT PRI