- HMPDVSIT ;SLC/MKB,ASMR/RRB,BL - Visit/Encounter extract;Aug 29, 2016 20:06:27
- ;;2.0;ENTERPRISE HEALTH MANAGEMENT PLATFORM;**3**;Sep 01, 2011;Build 15
- ;Per VA Directive 6402, this routine should not be modified.
- ;
- ; External References DBIA#
- ; ------------------- -----
- ; ^AUPNVSIT 2028
- ; ^DIC(40.7 557
- ; ^DIC(42 10039
- ; ^DIC(45.7 1154
- ; ^DPT( 10035
- ; ^SC 10040
- ; ^VA(200 10060
- ; DGPTFAPI 3157
- ; DIC 2051
- ; DILFD 2055
- ; DIQ 2056
- ; ICDEX 5747
- ; ICPTCOD 1995
- ; PXAPI,^TMP("PXKENC",$J 1894
- ; SDOE 2546
- ; VADPT 10061
- ; VADPT2 325
- ; XUAF4 2171
- Q
- ; ------------ Get encounter(s) from VistA ------------
- ;
- EN(DFN,BEG,END,MAX,ID) ; -- find patient's visits and appointments
- N HMPCNT,HMPITM,HMPDT,HMPLOC,HMPDA
- S DFN=+$G(DFN) I '(DFN>0) D LOGDPT^HMPLOG(DFN) Q ;DE4496 19 August 2016
- S BEG=$G(BEG,1410101),END=$G(END,4141015),MAX=$G(MAX,9999)
- ;
- ; get one visit
- I $G(ID) D EN1(ID,.HMPITM),XML(.HMPITM) G ENQ
- ;
- ; -- get all visits
- I END,END'["." S END=END_".24" ;assume end of day
- S HMPCNT=0
- ;F S IDX=$Q(@IDX,-1) Q:DFN'=$P(IDX,",",2) Q:$P(IDX,",",3)<BEG I $P(IDX,",",5)["P" D
- S HMPDT=END F S HMPDT=$O(^AUPNVSIT("AET",DFN,HMPDT),-1) Q:HMPDT<BEG D Q:HMPCNT'<MAX ;ICR 2028 DE2818 ASF 11/21/15
- . S HMPLOC=0 F S HMPLOC=$O(^AUPNVSIT("AET",DFN,HMPDT,HMPLOC)) Q:HMPLOC<1 D
- .. S HMPDA=0 F S HMPDA=$O(^AUPNVSIT("AET",DFN,HMPDT,HMPLOC,"P",HMPDA)) Q:HMPDA<1 D
- ... K HMPITM D EN1(HMPDA,.HMPITM) Q:'$D(HMPITM)
- ... D XML(.HMPITM) S HMPCNT=HMPCNT+1
- ENQ ; end
- K ^TMP("HMPTEXT",$J)
- Q
- ;
- ENAA(DFN,BEG,END,MAX,ID) ; -- find patient's visits and appointments [AA]
- N IDT,DA,HMPCNT,HMPITM
- S DFN=+$G(DFN) I '(DFN>0) D LOGDPT^HMPLOG(DFN) Q ;DE4496 19 August 2016
- S BEG=$G(BEG,1410101),END=$G(END,4141015),MAX=$G(MAX,9999)
- I $G(ID) D EN1(ID,.HMPITM),XML(.HMPITM) Q ;one visit
- D IDT S HMPCNT=0
- S IDT=BEG F S IDT=$O(^AUPNVSIT("AA",DFN,IDT)) Q:IDT<1!(IDT>END) D Q:HMPCNT'<MAX ;ICR 2028 DE2818 ASF 11/21/15
- . S DA=0 F S DA=$O(^AUPNVSIT("AA",DFN,IDT,DA)) Q:DA<1 D
- .. K HMPITM D EN1(DA,.HMPITM) Q:'$D(HMPITM)
- .. D XML(.HMPITM) S HMPCNT=HMPCNT+1
- Q
- IDT ; -- invert BEG and END dates for visit format:
- ; IDT=(9999999-$P(VDT,"."))_"."_$P(VDT,".",2)
- N X S X=BEG
- S BEG=(9999999-$P(END,"."))
- S END=(9999999-$P(X,"."))_".2359"
- Q
- ;
- EN1(IEN,VST) ; -- return a visit in VST("attribute")=value
- N X0,X15,X,FAC,LOC,CATG,INPT,DA
- K VST,^TMP("HMPTEXT",$J)
- S IEN=+$G(IEN) Q:IEN<1 ;invalid
- D ENCEVENT^PXAPI(IEN)
- S X0=$G(^TMP("PXKENC",$J,IEN,"VST",IEN,0)),X15=$G(^(150))
- Q:$P(X15,U,3)'="P" Q:$P(X0,U,7)="E" ;want primary, not historical
- I $P(X0,U,7)="H" D ADM(IEN,+X0,.VST) Q
- S VST("id")=IEN,VST("dateTime")=+X0
- S FAC=+$P(X0,U,6),CATG=$P(X0,U,7),LOC=+$P(X0,U,22)
- S:FAC VST("facility")=$$STA^XUAF4(FAC)_U_$P($$NS^XUAF4(FAC),U)
- S:'FAC VST("facility")=$$FAC^HMPD(LOC)
- S VST("serviceCategory")=CATG_U_$$CATG(CATG)
- S VST("visitString")=LOC_";"_+X0_";"_CATG
- S INPT=$P(X15,U,2) S:INPT="" INPT=$S("H^I^R^D"[CATG:1,1:0)
- S X=$$CPT(IEN) S:X VST("type")=$P($$CPT^ICPTCOD(X),U,2,3)
- I 'X S VST("type")=U_$S('INPT&LOC:$P($G(^SC(LOC,0)),U)_" VISIT",1:$$CATG(CATG)) ;ICR 10040 DE2818 ASF 11/21/15
- S VST("patientClass")=$S(INPT:"IMP",1:"AMB")
- S X=$P(X0,U,8) S:X VST("stopCode")=$$AMIS(X) I LOC D
- . N L0 S L0=$G(^SC(LOC,0)) ;ICR 10040 DE2818 ASF 11/21/15
- . I 'X S VST("stopCode")=$$AMIS($P(L0,U,7))
- . S VST("location")=$P(L0,U),VST("service")=$$SERV($P(L0,U,20))
- . S X=$P(L0,U,18) S:X VST("creditStopCode")=$$AMIS(X)
- S VST("reason")=$$POV(IEN)
- ; provider(s)
- S DA=0 F S DA=$O(^TMP("PXKENC",$J,IEN,"PRV",DA)) Q:DA<1 S X0=$G(^(DA,0)) D
- . S VST("provider",DA)=+X0_U_$P($G(^VA(200,+X0,0)),U)_$S($P(X0,U,4)="P":"^P^1",1:"^S^") ;ICR 10060 DE2818 ASF 11/21/15
- ; note(s)
- D TIU(IEN)
- K ^TMP("PXKENC",$J,IEN)
- Q
- ;
- TIU(VISIT) ; -- add notes to VST("document")
- N X,Y,I,HMPX,LT,NT,DA,CNT,HMPY
- D FIND^DIC(8925,,.01,"QX",+$G(VISIT),,"V",,,"HMPX")
- S Y="",(I,CNT)=0
- F S I=$O(HMPX("DILIST",1,I)) Q:I<1 D
- . S LT=$G(HMPX("DILIST","ID",I,.01)) Q:$P(LT," ")="Addendum"
- . S DA=$G(HMPX("DILIST",2,I))
- . S NT=$$GET1^DIQ(8925,+DA_",",".01:1501")
- . S CNT=CNT+1,VST("document",CNT)=DA_U_LT_U_NT
- . S:$G(HMPTEXT) VST("document",CNT,"content")=$$TEXT^HMPDTIU(DA)
- Q
- ;
- POV(VISIT) ; -- return the primary Purpose of Visit as ICD^ProviderNarrative
- N DA,Y,X,X0,ICD S Y=""
- S DA=0 F S DA=$O(^TMP("PXKENC",$J,VISIT,"POV",DA)) Q:DA<1 S X0=$G(^(DA,0)) I $P(X0,U,12)="P" D Q:$L(Y)
- . S X=+$P(X0,U,4),ICD=$$ICD(+X0)
- . S Y=ICD_U_$$EXTERNAL^DILFD(9000010.07,.04,,X)
- Q Y
- ;
- ICD(IEN) ; -- return code^description for ICD code, or "^" if error
- N X0,HMPX,N,I,X,Y S IEN=+$G(IEN)
- S X0=$$ICDDX^ICDEX(IEN) I X0<0 Q "^" ;Sep 1, 2016 - PB - DE5033 changed to use new API to get ICD code
- S Y=$P(X0,U,2)_U_$P(X0,U,4) ;ICD Code^Dx name
- S N=$$ICDD^ICDEX($P(Y,U),"HMPX") ;ICD Description Sep 1, 2016 - PB - DE5033 changed to use new API to get ICD code
- I N>0,$L($G(HMPX(1))) S $P(Y,U,2)=HMPX(1)
- Q Y
- ;
- CPT(VISIT) ; -- Return CPT code of encounter type
- N DA,Y,X,X0 S Y=""
- S DA=0 F S DA=$O(^TMP("PXKENC",$J,VISIT,"CPT",DA)) Q:DA<1 S X0=$G(^(DA,0)) D Q:$L(Y)
- . S X=$P(X0,U) I X?1"992"2N S Y=X Q
- Q Y
- ;
- AMIS(X) ; -- return the AMIS code^name of Credit Stop X
- N Y,X0 S Y=""
- S X0=$G(^DIC(40.7,+$G(X),0)) S:$L(X0) Y=$P(X0,U,2)_U_$P(X0,U) ;ICR 557 DE2818 ASF 11/21/15
- Q Y
- ;
- CATG(X) ; -- Return name of visit Service Category code X
- N Y S Y=""
- I X="A" S Y="AMBULATORY"
- I X="H" S Y="HOSPITALIZATION"
- I X="I" S Y="IN HOSPITAL"
- I X="C" S Y="CHART REVIEW"
- I X="T" S Y="TELECOMMUNICATIONS"
- I X="N" S Y="NOT FOUND"
- I X="S" S Y="DAY SURGERY"
- I X="O" S Y="OBSERVATION"
- I X="E" S Y="EVENT (HISTORICAL)"
- I X="R" S Y="NURSING HOME"
- I X="D" S Y="DAILY HOSPITALIZATION DATA"
- I X="X" S Y="ANCILLARY PACKAGE DAILY DATA"
- Q Y
- ;
- SERV(FTS) ; -- Return #42.4 Service for a Facility Treating Specialty
- N Y S Y="",FTS=+$G(FTS)
- S Y=$$GET1^DIQ(45.7,FTS_",","1:3","E")
- Q Y
- ;
- ADM(IEN,DATE,ADM) ; -- return an admission in ADM("attribute")=value
- N VAINDT,VADMVT,VAIP,VAIN,VAERR,HLOC,ICD,I K ADM
- S IEN=+$G(IEN),DATE=+$G(DATE) Q:IEN<1 Q:DATE<1
- S VAINDT=DATE D ADM^VADPT2 Q:VADMVT<1
- I VADMVT=$G(^DPT(DFN,.105)) D INPT Q ;current inpatient ICR 10035 DE2818 ASF 11/21/15
- S VAIP("E")=VADMVT D IN5^VADPT Q:'$G(VAIP(1)) ;deleted
- S ADM("id")=IEN,ADM("patientClass")="IMP"
- ; ADM("admitType")=$P($G(VAIP(4)),U,2)
- S DATE=+$G(VAIP(13,1)),(ADM("dateTime"),ADM("arrivalDateTime"))=DATE,I=0
- S:$G(VAIP(7)) I=I+1,ADM("provider",I)=VAIP(7)_"^P^1" ;primary
- S:$G(VAIP(18)) I=I+1,ADM("provider",I)=VAIP(18)_"^A" ;attending
- S ADM("specialty")=$P($G(VAIP(8)),U,2)
- S X=$$SERV(+$G(VAIP(8))),ADM("service")=X
- S ICD=$$POV(IEN) S:'ICD ICD=$$PTF(DFN,VAIP(12)) ;PTF>ICD
- S ADM("reason")=ICD_U_$G(VAIP(9)) ;ICD code^description^Dx text
- S HLOC=+$G(^DIC(42,+$G(VAIP(5)),44)) ;ICR 10039 DE2818 ASF 11/21/15
- S:HLOC ADM("location")=$P($G(^SC(HLOC,0)),U) ;ICR 10040 DE2818 ASF 11/21/15
- S ADM("facility")=$$FAC^HMPD(+HLOC),ADM("roomBed")=$P(VAIP(6),U,2)
- S ADM("serviceCategory")="H^HOSPITALIZATION"
- S X=$$CPT(IEN),ADM("type")=$S(X:$P($$CPT^ICPTCOD(X),U,2,3),1:U_$$CATG("H"))
- I $G(VAIP(17)) D
- . S ADM("departureDateTime")=+$G(VAIP(17,1))
- . ; ADM("disposition")=$G(VAIP(17,3)) ;Discharge Mvt Type
- S ADM("visitString")=HLOC_";"_DATE_";H"
- D TIU(IEN) ;notes/summary
- Q
- ;
- INPT ; -- return current admission in ADM("attribute")=value [from ADM]
- K VAINDT D INP^VADPT Q:VAIN(1)<1
- S ADM("id")=IEN,ADM("patientClass")="IMP"
- ; ADM("admitType")=$P($G(VAIN(8)),U,2)
- S DATE=+$G(VAIN(7)),(ADM("dateTime"),ADM("arrivalDateTime"))=DATE,I=0
- S:$G(VAIN(2)) I=I+1,ADM("provider",I)=VAIN(2)_"^P^1" ;primary
- S:$G(VAIN(11)) I=I+1,ADM("provider",I)=VAIN(11)_"^A" ;attending
- S ADM("specialty")=$P($G(VAIN(3)),U,2)
- S X=$$SERV(+$G(VAIN(3))),ADM("service")=X
- S ICD=$$POV(IEN) S:'ICD ICD=$$PTF(DFN,VAIN(10)) ;PTF>ICD
- S ADM("reason")=ICD_U_$G(VAIN(9)) ;ICD code^description^Dx text
- S HLOC=+$G(^DIC(42,+$G(VAIN(4)),44)) ;ICR 10039 DE2818 ASF 11/21/15
- S:HLOC ADM("location")=$P($G(^SC(HLOC,0)),U) ;ICR 10040 DE2818 ASF 11/21/15
- S ADM("facility")=$$FAC^HMPD(+HLOC),ADM("roomBed")=$P(VAIN(5),U,2)
- S ADM("serviceCategory")="H^HOSPITALIZATION"
- S X=$$CPT(IEN),ADM("type")=$S(X:$P($$CPT^ICPTCOD(X),U,2,3),1:U_$$CATG("H"))
- ; ADM("visitString")=HLOC_";"_DATE_";H"
- D TIU(IEN) ;notes/summary
- Q
- ;
- PTF(DFN,PTF) ; -- return ICD code^description for a PTF record
- N HMPPTF,N,HMPX
- D:$G(PTF) RPC^DGPTFAPI(.HMPPTF,+PTF) I $G(HMPPTF(0))<1 Q "^"
- S Y=$P($G(HMPPTF(1)),U,3)_U
- S N=$$ICDD^ICDEX(Y,"HMPX") ;ICD Description Sep 1, 2016 - PB - DE5033 changed to use new API to get ICD code
- I N>0,$L($G(HMPX(1))) S Y=Y_HMPX(1)
- Q Y
- ;
- ENC(IEN,ENC) ; -- return an encounter in ENC("attribute")=value
- N X0,DATE,HLOC,TYPE,STS,X,Y K ENC
- S IEN=+$G(IEN) Q:IEN<1 ;invalid ien
- S ENC("id")="E"_IEN,X0=$$GETOE^SDOE(IEN) ;^SCE(IEN,0) node ICR 10040 DE2818 ASF 11/21/15
- S DATE=+X0,ENC("dateTime")=DATE
- S HLOC=+$P(X0,U,4) I HLOC D
- . S HLOC=HLOC_U_$P($G(^SC(HLOC,0)),U) ;ICR 10040 DE2818 ASF 11/21/15
- . S ENC("location")=$P(HLOC,U,2)
- . S X=$$GET1^DIQ(44,+HLOC_",",9.5,"I")
- . I X S ENC("service")=$$SERV(X)
- S ENC("facility")=$$FAC^HMPD(+HLOC)
- S STS=$$EXTERNAL^DILFD(409.68,.12,,$P(X0,U,12))
- S X=$S(STS?1"INP".E:"IMP",1:"AMB"),ENC("patientClass")=X,TYPE=$E(X)
- S ENC("type")=U_$S(HLOC:$P(HLOC,U,2)_" VISIT",1:$$CATG(TYPE))
- S ENC("serviceCategory")=TYPE_U_$$CATG(TYPE)
- S ENC("visitString")=+HLOC_";"_DATE_";"_TYPE
- Q
- ;
- ; ------------ Return data to middle tier ------------
- ;
- XML(VISIT) ; -- Return patient visit as XML
- N ATT,X,Y,NAMES,I,J
- D ADD("<visit>") S HMPTOTL=$G(HMPTOTL)+1
- S ATT="" F S ATT=$O(VISIT(ATT)) Q:ATT="" D D:$L(Y) ADD(Y)
- . I $O(VISIT(ATT,0)) D S Y="" Q ;multiples
- .. D ADD("<"_ATT_"s>")
- .. S I=0 F S I=$O(VISIT(ATT,I)) Q:I<1 D
- ... S X=$G(VISIT(ATT,I)),NAMES=""
- ... I ATT="document" S NAMES="id^localTitle^nationalTitle^Z"
- ... I ATT="provider" S NAMES="code^name^role^primary^Z"
- ... S Y="<"_ATT_" "_$$LOOP ;_"/>" D ADD(Y)
- ... S X=$G(VISIT(ATT,I,"content")) I '$L(X) S Y=Y_"/>" D ADD(Y) Q
- ... S Y=Y_">" D ADD(Y)
- ... S Y="<content xml:space='preserve'>" D ADD(Y)
- ... S J=0 F S J=$O(@X@(J)) Q:J<1 S Y=$$ESC^HMPD(@X@(J)) D ADD(Y)
- ... D ADD("</content>"),ADD("</"_ATT_">")
- .. D ADD("</"_ATT_"s>")
- . S X=$G(VISIT(ATT)),Y="" Q:'$L(X)
- . S NAMES="code^name^"_$S(ATT="reason":"narrative^",1:"")_"Z"
- . I X'["^" S Y="<"_ATT_" value='"_$$ESC^HMPD(X)_"' />" Q
- . I $L(X)>1 S Y="<"_ATT_" "_$$LOOP_"/>"
- D ADD("</visit>")
- Q
- ;
- LOOP() ; -- build sub-items string from NAMES and X
- N STR,P,TAG S STR=""
- F P=1:1 S TAG=$P(NAMES,U,P) Q:TAG="Z" I $L($P(X,U,P)) S STR=STR_TAG_"='"_$$ESC^HMPD($P(X,U,P))_"' "
- Q STR
- ;
- ADD(X) ; -- Add a line @HMP@(n)=X
- S HMPI=$G(HMPI)+1
- S @HMP@(HMPI)=X
- Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HHMPDVSIT 11345 printed Feb 18, 2025@23:20:10 Page 2
- HMPDVSIT ;SLC/MKB,ASMR/RRB,BL - Visit/Encounter extract;Aug 29, 2016 20:06:27
- +1 ;;2.0;ENTERPRISE HEALTH MANAGEMENT PLATFORM;**3**;Sep 01, 2011;Build 15
- +2 ;Per VA Directive 6402, this routine should not be modified.
- +3 ;
- +4 ; External References DBIA#
- +5 ; ------------------- -----
- +6 ; ^AUPNVSIT 2028
- +7 ; ^DIC(40.7 557
- +8 ; ^DIC(42 10039
- +9 ; ^DIC(45.7 1154
- +10 ; ^DPT( 10035
- +11 ; ^SC 10040
- +12 ; ^VA(200 10060
- +13 ; DGPTFAPI 3157
- +14 ; DIC 2051
- +15 ; DILFD 2055
- +16 ; DIQ 2056
- +17 ; ICDEX 5747
- +18 ; ICPTCOD 1995
- +19 ; PXAPI,^TMP("PXKENC",$J 1894
- +20 ; SDOE 2546
- +21 ; VADPT 10061
- +22 ; VADPT2 325
- +23 ; XUAF4 2171
- +24 QUIT
- +25 ; ------------ Get encounter(s) from VistA ------------
- +26 ;
- EN(DFN,BEG,END,MAX,ID) ; -- find patient's visits and appointments
- +1 NEW HMPCNT,HMPITM,HMPDT,HMPLOC,HMPDA
- +2 ;DE4496 19 August 2016
- SET DFN=+$GET(DFN)
- IF '(DFN>0)
- DO LOGDPT^HMPLOG(DFN)
- QUIT
- +3 SET BEG=$GET(BEG,1410101)
- SET END=$GET(END,4141015)
- SET MAX=$GET(MAX,9999)
- +4 ;
- +5 ; get one visit
- +6 IF $GET(ID)
- DO EN1(ID,.HMPITM)
- DO XML(.HMPITM)
- GOTO ENQ
- +7 ;
- +8 ; -- get all visits
- +9 ;assume end of day
- IF END
- IF END'["."
- SET END=END_".24"
- +10 SET HMPCNT=0
- +11 ;F S IDX=$Q(@IDX,-1) Q:DFN'=$P(IDX,",",2) Q:$P(IDX,",",3)<BEG I $P(IDX,",",5)["P" D
- +12 ;ICR 2028 DE2818 ASF 11/21/15
- SET HMPDT=END
- FOR
- SET HMPDT=$ORDER(^AUPNVSIT("AET",DFN,HMPDT),-1)
- if HMPDT<BEG
- QUIT
- Begin DoDot:1
- +13 SET HMPLOC=0
- FOR
- SET HMPLOC=$ORDER(^AUPNVSIT("AET",DFN,HMPDT,HMPLOC))
- if HMPLOC<1
- QUIT
- Begin DoDot:2
- +14 SET HMPDA=0
- FOR
- SET HMPDA=$ORDER(^AUPNVSIT("AET",DFN,HMPDT,HMPLOC,"P",HMPDA))
- if HMPDA<1
- QUIT
- Begin DoDot:3
- +15 KILL HMPITM
- DO EN1(HMPDA,.HMPITM)
- if '$DATA(HMPITM)
- QUIT
- +16 DO XML(.HMPITM)
- SET HMPCNT=HMPCNT+1
- End DoDot:3
- End DoDot:2
- End DoDot:1
- if HMPCNT'<MAX
- QUIT
- ENQ ; end
- +1 KILL ^TMP("HMPTEXT",$JOB)
- +2 QUIT
- +3 ;
- ENAA(DFN,BEG,END,MAX,ID) ; -- find patient's visits and appointments [AA]
- +1 NEW IDT,DA,HMPCNT,HMPITM
- +2 ;DE4496 19 August 2016
- SET DFN=+$GET(DFN)
- IF '(DFN>0)
- DO LOGDPT^HMPLOG(DFN)
- QUIT
- +3 SET BEG=$GET(BEG,1410101)
- SET END=$GET(END,4141015)
- SET MAX=$GET(MAX,9999)
- +4 ;one visit
- IF $GET(ID)
- DO EN1(ID,.HMPITM)
- DO XML(.HMPITM)
- QUIT
- +5 DO IDT
- SET HMPCNT=0
- +6 ;ICR 2028 DE2818 ASF 11/21/15
- SET IDT=BEG
- FOR
- SET IDT=$ORDER(^AUPNVSIT("AA",DFN,IDT))
- if IDT<1!(IDT>END)
- QUIT
- Begin DoDot:1
- +7 SET DA=0
- FOR
- SET DA=$ORDER(^AUPNVSIT("AA",DFN,IDT,DA))
- if DA<1
- QUIT
- Begin DoDot:2
- +8 KILL HMPITM
- DO EN1(DA,.HMPITM)
- if '$DATA(HMPITM)
- QUIT
- +9 DO XML(.HMPITM)
- SET HMPCNT=HMPCNT+1
- End DoDot:2
- End DoDot:1
- if HMPCNT'<MAX
- QUIT
- +10 QUIT
- IDT ; -- invert BEG and END dates for visit format:
- +1 ; IDT=(9999999-$P(VDT,"."))_"."_$P(VDT,".",2)
- +2 NEW X
- SET X=BEG
- +3 SET BEG=(9999999-$PIECE(END,"."))
- +4 SET END=(9999999-$PIECE(X,"."))_".2359"
- +5 QUIT
- +6 ;
- EN1(IEN,VST) ; -- return a visit in VST("attribute")=value
- +1 NEW X0,X15,X,FAC,LOC,CATG,INPT,DA
- +2 KILL VST,^TMP("HMPTEXT",$JOB)
- +3 ;invalid
- SET IEN=+$GET(IEN)
- if IEN<1
- QUIT
- +4 DO ENCEVENT^PXAPI(IEN)
- +5 SET X0=$GET(^TMP("PXKENC",$JOB,IEN,"VST",IEN,0))
- SET X15=$GET(^(150))
- +6 ;want primary, not historical
- if $PIECE(X15,U,3)'="P"
- QUIT
- if $PIECE(X0,U,7)="E"
- QUIT
- +7 IF $PIECE(X0,U,7)="H"
- DO ADM(IEN,+X0,.VST)
- QUIT
- +8 SET VST("id")=IEN
- SET VST("dateTime")=+X0
- +9 SET FAC=+$PIECE(X0,U,6)
- SET CATG=$PIECE(X0,U,7)
- SET LOC=+$PIECE(X0,U,22)
- +10 if FAC
- SET VST("facility")=$$STA^XUAF4(FAC)_U_$PIECE($$NS^XUAF4(FAC),U)
- +11 if 'FAC
- SET VST("facility")=$$FAC^HMPD(LOC)
- +12 SET VST("serviceCategory")=CATG_U_$$CATG(CATG)
- +13 SET VST("visitString")=LOC_";"_+X0_";"_CATG
- +14 SET INPT=$PIECE(X15,U,2)
- if INPT=""
- SET INPT=$SELECT("H^I^R^D"[CATG:1,1:0)
- +15 SET X=$$CPT(IEN)
- if X
- SET VST("type")=$PIECE($$CPT^ICPTCOD(X),U,2,3)
- +16 ;ICR 10040 DE2818 ASF 11/21/15
- IF 'X
- SET VST("type")=U_$SELECT('INPT&LOC:$PIECE($GET(^SC(LOC,0)),U)_" VISIT",1:$$CATG(CATG))
- +17 SET VST("patientClass")=$SELECT(INPT:"IMP",1:"AMB")
- +18 SET X=$PIECE(X0,U,8)
- if X
- SET VST("stopCode")=$$AMIS(X)
- IF LOC
- Begin DoDot:1
- +19 ;ICR 10040 DE2818 ASF 11/21/15
- NEW L0
- SET L0=$GET(^SC(LOC,0))
- +20 IF 'X
- SET VST("stopCode")=$$AMIS($PIECE(L0,U,7))
- +21 SET VST("location")=$PIECE(L0,U)
- SET VST("service")=$$SERV($PIECE(L0,U,20))
- +22 SET X=$PIECE(L0,U,18)
- if X
- SET VST("creditStopCode")=$$AMIS(X)
- End DoDot:1
- +23 SET VST("reason")=$$POV(IEN)
- +24 ; provider(s)
- +25 SET DA=0
- FOR
- SET DA=$ORDER(^TMP("PXKENC",$JOB,IEN,"PRV",DA))
- if DA<1
- QUIT
- SET X0=$GET(^(DA,0))
- Begin DoDot:1
- +26 ;ICR 10060 DE2818 ASF 11/21/15
- SET VST("provider",DA)=+X0_U_$PIECE($GET(^VA(200,+X0,0)),U)_$SELECT($PIECE(X0,U,4)="P":"^P^1",1:"^S^")
- End DoDot:1
- +27 ; note(s)
- +28 DO TIU(IEN)
- +29 KILL ^TMP("PXKENC",$JOB,IEN)
- +30 QUIT
- +31 ;
- TIU(VISIT) ; -- add notes to VST("document")
- +1 NEW X,Y,I,HMPX,LT,NT,DA,CNT,HMPY
- +2 DO FIND^DIC(8925,,.01,"QX",+$GET(VISIT),,"V",,,"HMPX")
- +3 SET Y=""
- SET (I,CNT)=0
- +4 FOR
- SET I=$ORDER(HMPX("DILIST",1,I))
- if I<1
- QUIT
- Begin DoDot:1
- +5 SET LT=$GET(HMPX("DILIST","ID",I,.01))
- if $PIECE(LT," ")="Addendum"
- QUIT
- +6 SET DA=$GET(HMPX("DILIST",2,I))
- +7 SET NT=$$GET1^DIQ(8925,+DA_",",".01:1501")
- +8 SET CNT=CNT+1
- SET VST("document",CNT)=DA_U_LT_U_NT
- +9 if $GET(HMPTEXT)
- SET VST("document",CNT,"content")=$$TEXT^HMPDTIU(DA)
- End DoDot:1
- +10 QUIT
- +11 ;
- POV(VISIT) ; -- return the primary Purpose of Visit as ICD^ProviderNarrative
- +1 NEW DA,Y,X,X0,ICD
- SET Y=""
- +2 SET DA=0
- FOR
- SET DA=$ORDER(^TMP("PXKENC",$JOB,VISIT,"POV",DA))
- if DA<1
- QUIT
- SET X0=$GET(^(DA,0))
- IF $PIECE(X0,U,12)="P"
- Begin DoDot:1
- +3 SET X=+$PIECE(X0,U,4)
- SET ICD=$$ICD(+X0)
- +4 SET Y=ICD_U_$$EXTERNAL^DILFD(9000010.07,.04,,X)
- End DoDot:1
- if $LENGTH(Y)
- QUIT
- +5 QUIT Y
- +6 ;
- ICD(IEN) ; -- return code^description for ICD code, or "^" if error
- +1 NEW X0,HMPX,N,I,X,Y
- SET IEN=+$GET(IEN)
- +2 ;Sep 1, 2016 - PB - DE5033 changed to use new API to get ICD code
- SET X0=$$ICDDX^ICDEX(IEN)
- IF X0<0
- QUIT "^"
- +3 ;ICD Code^Dx name
- SET Y=$PIECE(X0,U,2)_U_$PIECE(X0,U,4)
- +4 ;ICD Description Sep 1, 2016 - PB - DE5033 changed to use new API to get ICD code
- SET N=$$ICDD^ICDEX($PIECE(Y,U),"HMPX")
- +5 IF N>0
- IF $LENGTH($GET(HMPX(1)))
- SET $PIECE(Y,U,2)=HMPX(1)
- +6 QUIT Y
- +7 ;
- CPT(VISIT) ; -- Return CPT code of encounter type
- +1 NEW DA,Y,X,X0
- SET Y=""
- +2 SET DA=0
- FOR
- SET DA=$ORDER(^TMP("PXKENC",$JOB,VISIT,"CPT",DA))
- if DA<1
- QUIT
- SET X0=$GET(^(DA,0))
- Begin DoDot:1
- +3 SET X=$PIECE(X0,U)
- IF X?1"992"2N
- SET Y=X
- QUIT
- End DoDot:1
- if $LENGTH(Y)
- QUIT
- +4 QUIT Y
- +5 ;
- AMIS(X) ; -- return the AMIS code^name of Credit Stop X
- +1 NEW Y,X0
- SET Y=""
- +2 ;ICR 557 DE2818 ASF 11/21/15
- SET X0=$GET(^DIC(40.7,+$GET(X),0))
- if $LENGTH(X0)
- SET Y=$PIECE(X0,U,2)_U_$PIECE(X0,U)
- +3 QUIT Y
- +4 ;
- CATG(X) ; -- Return name of visit Service Category code X
- +1 NEW Y
- SET Y=""
- +2 IF X="A"
- SET Y="AMBULATORY"
- +3 IF X="H"
- SET Y="HOSPITALIZATION"
- +4 IF X="I"
- SET Y="IN HOSPITAL"
- +5 IF X="C"
- SET Y="CHART REVIEW"
- +6 IF X="T"
- SET Y="TELECOMMUNICATIONS"
- +7 IF X="N"
- SET Y="NOT FOUND"
- +8 IF X="S"
- SET Y="DAY SURGERY"
- +9 IF X="O"
- SET Y="OBSERVATION"
- +10 IF X="E"
- SET Y="EVENT (HISTORICAL)"
- +11 IF X="R"
- SET Y="NURSING HOME"
- +12 IF X="D"
- SET Y="DAILY HOSPITALIZATION DATA"
- +13 IF X="X"
- SET Y="ANCILLARY PACKAGE DAILY DATA"
- +14 QUIT Y
- +15 ;
- SERV(FTS) ; -- Return #42.4 Service for a Facility Treating Specialty
- +1 NEW Y
- SET Y=""
- SET FTS=+$GET(FTS)
- +2 SET Y=$$GET1^DIQ(45.7,FTS_",","1:3","E")
- +3 QUIT Y
- +4 ;
- ADM(IEN,DATE,ADM) ; -- return an admission in ADM("attribute")=value
- +1 NEW VAINDT,VADMVT,VAIP,VAIN,VAERR,HLOC,ICD,I
- KILL ADM
- +2 SET IEN=+$GET(IEN)
- SET DATE=+$GET(DATE)
- if IEN<1
- QUIT
- if DATE<1
- QUIT
- +3 SET VAINDT=DATE
- DO ADM^VADPT2
- if VADMVT<1
- QUIT
- +4 ;current inpatient ICR 10035 DE2818 ASF 11/21/15
- IF VADMVT=$GET(^DPT(DFN,.105))
- DO INPT
- QUIT
- +5 ;deleted
- SET VAIP("E")=VADMVT
- DO IN5^VADPT
- if '$GET(VAIP(1))
- QUIT
- +6 SET ADM("id")=IEN
- SET ADM("patientClass")="IMP"
- +7 ; ADM("admitType")=$P($G(VAIP(4)),U,2)
- +8 SET DATE=+$GET(VAIP(13,1))
- SET (ADM("dateTime"),ADM("arrivalDateTime"))=DATE
- SET I=0
- +9 ;primary
- if $GET(VAIP(7))
- SET I=I+1
- SET ADM("provider",I)=VAIP(7)_"^P^1"
- +10 ;attending
- if $GET(VAIP(18))
- SET I=I+1
- SET ADM("provider",I)=VAIP(18)_"^A"
- +11 SET ADM("specialty")=$PIECE($GET(VAIP(8)),U,2)
- +12 SET X=$$SERV(+$GET(VAIP(8)))
- SET ADM("service")=X
- +13 ;PTF>ICD
- SET ICD=$$POV(IEN)
- if 'ICD
- SET ICD=$$PTF(DFN,VAIP(12))
- +14 ;ICD code^description^Dx text
- SET ADM("reason")=ICD_U_$GET(VAIP(9))
- +15 ;ICR 10039 DE2818 ASF 11/21/15
- SET HLOC=+$GET(^DIC(42,+$GET(VAIP(5)),44))
- +16 ;ICR 10040 DE2818 ASF 11/21/15
- if HLOC
- SET ADM("location")=$PIECE($GET(^SC(HLOC,0)),U)
- +17 SET ADM("facility")=$$FAC^HMPD(+HLOC)
- SET ADM("roomBed")=$PIECE(VAIP(6),U,2)
- +18 SET ADM("serviceCategory")="H^HOSPITALIZATION"
- +19 SET X=$$CPT(IEN)
- SET ADM("type")=$SELECT(X:$PIECE($$CPT^ICPTCOD(X),U,2,3),1:U_$$CATG("H"))
- +20 IF $GET(VAIP(17))
- Begin DoDot:1
- +21 SET ADM("departureDateTime")=+$GET(VAIP(17,1))
- +22 ; ADM("disposition")=$G(VAIP(17,3)) ;Discharge Mvt Type
- End DoDot:1
- +23 SET ADM("visitString")=HLOC_";"_DATE_";H"
- +24 ;notes/summary
- DO TIU(IEN)
- +25 QUIT
- +26 ;
- INPT ; -- return current admission in ADM("attribute")=value [from ADM]
- +1 KILL VAINDT
- DO INP^VADPT
- if VAIN(1)<1
- QUIT
- +2 SET ADM("id")=IEN
- SET ADM("patientClass")="IMP"
- +3 ; ADM("admitType")=$P($G(VAIN(8)),U,2)
- +4 SET DATE=+$GET(VAIN(7))
- SET (ADM("dateTime"),ADM("arrivalDateTime"))=DATE
- SET I=0
- +5 ;primary
- if $GET(VAIN(2))
- SET I=I+1
- SET ADM("provider",I)=VAIN(2)_"^P^1"
- +6 ;attending
- if $GET(VAIN(11))
- SET I=I+1
- SET ADM("provider",I)=VAIN(11)_"^A"
- +7 SET ADM("specialty")=$PIECE($GET(VAIN(3)),U,2)
- +8 SET X=$$SERV(+$GET(VAIN(3)))
- SET ADM("service")=X
- +9 ;PTF>ICD
- SET ICD=$$POV(IEN)
- if 'ICD
- SET ICD=$$PTF(DFN,VAIN(10))
- +10 ;ICD code^description^Dx text
- SET ADM("reason")=ICD_U_$GET(VAIN(9))
- +11 ;ICR 10039 DE2818 ASF 11/21/15
- SET HLOC=+$GET(^DIC(42,+$GET(VAIN(4)),44))
- +12 ;ICR 10040 DE2818 ASF 11/21/15
- if HLOC
- SET ADM("location")=$PIECE($GET(^SC(HLOC,0)),U)
- +13 SET ADM("facility")=$$FAC^HMPD(+HLOC)
- SET ADM("roomBed")=$PIECE(VAIN(5),U,2)
- +14 SET ADM("serviceCategory")="H^HOSPITALIZATION"
- +15 SET X=$$CPT(IEN)
- SET ADM("type")=$SELECT(X:$PIECE($$CPT^ICPTCOD(X),U,2,3),1:U_$$CATG("H"))
- +16 ; ADM("visitString")=HLOC_";"_DATE_";H"
- +17 ;notes/summary
- DO TIU(IEN)
- +18 QUIT
- +19 ;
- PTF(DFN,PTF) ; -- return ICD code^description for a PTF record
- +1 NEW HMPPTF,N,HMPX
- +2 if $GET(PTF)
- DO RPC^DGPTFAPI(.HMPPTF,+PTF)
- IF $GET(HMPPTF(0))<1
- QUIT "^"
- +3 SET Y=$PIECE($GET(HMPPTF(1)),U,3)_U
- +4 ;ICD Description Sep 1, 2016 - PB - DE5033 changed to use new API to get ICD code
- SET N=$$ICDD^ICDEX(Y,"HMPX")
- +5 IF N>0
- IF $LENGTH($GET(HMPX(1)))
- SET Y=Y_HMPX(1)
- +6 QUIT Y
- +7 ;
- ENC(IEN,ENC) ; -- return an encounter in ENC("attribute")=value
- +1 NEW X0,DATE,HLOC,TYPE,STS,X,Y
- KILL ENC
- +2 ;invalid ien
- SET IEN=+$GET(IEN)
- if IEN<1
- QUIT
- +3 ;^SCE(IEN,0) node ICR 10040 DE2818 ASF 11/21/15
- SET ENC("id")="E"_IEN
- SET X0=$$GETOE^SDOE(IEN)
- +4 SET DATE=+X0
- SET ENC("dateTime")=DATE
- +5 SET HLOC=+$PIECE(X0,U,4)
- IF HLOC
- Begin DoDot:1
- +6 ;ICR 10040 DE2818 ASF 11/21/15
- SET HLOC=HLOC_U_$PIECE($GET(^SC(HLOC,0)),U)
- +7 SET ENC("location")=$PIECE(HLOC,U,2)
- +8 SET X=$$GET1^DIQ(44,+HLOC_",",9.5,"I")
- +9 IF X
- SET ENC("service")=$$SERV(X)
- End DoDot:1
- +10 SET ENC("facility")=$$FAC^HMPD(+HLOC)
- +11 SET STS=$$EXTERNAL^DILFD(409.68,.12,,$PIECE(X0,U,12))
- +12 SET X=$SELECT(STS?1"INP".E:"IMP",1:"AMB")
- SET ENC("patientClass")=X
- SET TYPE=$EXTRACT(X)
- +13 SET ENC("type")=U_$SELECT(HLOC:$PIECE(HLOC,U,2)_" VISIT",1:$$CATG(TYPE))
- +14 SET ENC("serviceCategory")=TYPE_U_$$CATG(TYPE)
- +15 SET ENC("visitString")=+HLOC_";"_DATE_";"_TYPE
- +16 QUIT
- +17 ;
- +18 ; ------------ Return data to middle tier ------------
- +19 ;
- XML(VISIT) ; -- Return patient visit as XML
- +1 NEW ATT,X,Y,NAMES,I,J
- +2 DO ADD("<visit>")
- SET HMPTOTL=$GET(HMPTOTL)+1
- +3 SET ATT=""
- FOR
- SET ATT=$ORDER(VISIT(ATT))
- if ATT=""
- QUIT
- Begin DoDot:1
- +4 ;multiples
- IF $ORDER(VISIT(ATT,0))
- Begin DoDot:2
- +5 DO ADD("<"_ATT_"s>")
- +6 SET I=0
- FOR
- SET I=$ORDER(VISIT(ATT,I))
- if I<1
- QUIT
- Begin DoDot:3
- +7 SET X=$GET(VISIT(ATT,I))
- SET NAMES=""
- +8 IF ATT="document"
- SET NAMES="id^localTitle^nationalTitle^Z"
- +9 IF ATT="provider"
- SET NAMES="code^name^role^primary^Z"
- +10 ;_"/>" D ADD(Y)
- SET Y="<"_ATT_" "_$$LOOP
- +11 SET X=$GET(VISIT(ATT,I,"content"))
- IF '$LENGTH(X)
- SET Y=Y_"/>"
- DO ADD(Y)
- QUIT
- +12 SET Y=Y_">"
- DO ADD(Y)
- +13 SET Y="<content xml:space='preserve'>"
- DO ADD(Y)
- +14 SET J=0
- FOR
- SET J=$ORDER(@X@(J))
- if J<1
- QUIT
- SET Y=$$ESC^HMPD(@X@(J))
- DO ADD(Y)
- +15 DO ADD("</content>")
- DO ADD("</"_ATT_">")
- End DoDot:3
- +16 DO ADD("</"_ATT_"s>")
- End DoDot:2
- SET Y=""
- QUIT
- +17 SET X=$GET(VISIT(ATT))
- SET Y=""
- if '$LENGTH(X)
- QUIT
- +18 SET NAMES="code^name^"_$SELECT(ATT="reason":"narrative^",1:"")_"Z"
- +19 IF X'["^"
- SET Y="<"_ATT_" value='"_$$ESC^HMPD(X)_"' />"
- QUIT
- +20 IF $LENGTH(X)>1
- SET Y="<"_ATT_" "_$$LOOP_"/>"
- End DoDot:1
- if $LENGTH(Y)
- DO ADD(Y)
- +21 DO ADD("</visit>")
- +22 QUIT
- +23 ;
- LOOP() ; -- build sub-items string from NAMES and X
- +1 NEW STR,P,TAG
- SET STR=""
- +2 FOR P=1:1
- SET TAG=$PIECE(NAMES,U,P)
- if TAG="Z"
- QUIT
- IF $LENGTH($PIECE(X,U,P))
- SET STR=STR_TAG_"='"_$$ESC^HMPD($PIECE(X,U,P))_"' "
- +3 QUIT STR
- +4 ;
- ADD(X) ; -- Add a line @HMP@(n)=X
- +1 SET HMPI=$GET(HMPI)+1
- +2 SET @HMP@(HMPI)=X
- +3 QUIT