Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: BJPNUTIL

BJPNUTIL.m

Go to the documentation of this file.
  1. BJPNUTIL ;GDIT/HS/BEE-Prenatal Care Module Utility Calls ; 08 May 2012 12:00 PM
  1. ;;2.0;PRENATAL CARE MODULE;**6,7,8,9**;Feb 24, 2015;Build 12
  1. ;
  1. Q
  1. ;
  1. GETCOI(DATA,TEXT,VIEN,COUNT) ;BJPN SELECT INJURY CAUSE
  1. ;
  1. ;Accept search string, return list of matching Cause of Injury values to choose
  1. ;Uses call to Lexicon to generate list
  1. ;
  1. ;Input
  1. ; TEXT - String to search on
  1. ; VIEN - Visit IEN
  1. ;COUNT - Number records to return (optional - default to 25)
  1. ;
  1. NEW UID,II,VDT,SEX,DFN,RET
  1. ;
  1. S UID=$S($G(ZTSK):"Z"_ZTSK,1:$J)
  1. S DATA=$NA(^TMP("BJPNUTIL",UID))
  1. K @DATA
  1. I $G(DT)=""!($G(U)="") D DT^DICRW
  1. ;
  1. S II=0
  1. NEW $ESTACK,$ETRAP S $ETRAP="D ERR^BJPNUTIL D UNWIND^%ZTER" ; SAC 2009 2.2.3.17
  1. ;
  1. ;Define header
  1. S @DATA@(0)="I00010IEN^T00020CODE^T00200DESCRIPTION"_$C(30)
  1. ;
  1. I $G(TEXT)="" S BMXSEC="Missing text to search on" G XGETCOI
  1. I $G(VIEN)="" S BMXSEC="Missing Visit IEN" G XGETCOI
  1. S:'+$G(COUNT) COUNT=25
  1. ;
  1. ;Get visit date and gender
  1. S VDT=$P($$GET1^DIQ(9000010,VIEN_",",.01,"I"),".") S:VDT="" VDT=DT
  1. S DFN=$$GET1^DIQ(9000010,VIEN_",",.05,"I")
  1. S SEX=$$GET1^DIQ(2,DFN_",",.02,"I")
  1. ;
  1. ;Make call
  1. D LEX(TEXT,COUNT,1,VDT,SEX,.RET)
  1. S RET="" F S RET=$O(RET(RET)) Q:RET="" S II=II+1,@DATA@(II)=RET(RET)_$C(30)
  1. ;
  1. XGETCOI S II=II+1,@DATA@(II)=$C(31)
  1. Q
  1. ;
  1. LEX(SEARCH,COUNT,FILTER,DATE,GENDER,RET) ;EP - Perform Lexicon Lookup
  1. ;
  1. ; SEARCH - String to search on (Required)
  1. ; COUNT - Number records to return (Optional) - Def 999
  1. ; FILTER - 0 - Regular Search - Filter out Cause of Injury Codes (Default)
  1. ; 1 - Cause of Injury Search - Return only Cause of Injury Codes
  1. ; 2 - Full Search - Return all results - no filtering
  1. ; DATE - Date to search on (def to today)
  1. ; GENDER - Patient gender (M/F/U) (Optional)
  1. ; RET - Return array
  1. ;
  1. ;Input checks
  1. I $G(SEARCH)="" Q
  1. S COUNT=$G(COUNT) S:'+COUNT COUNT=999
  1. S FILTER=$G(FILTER) S:FILTER="" FILTER=0
  1. S DATE=$G(DATE) S:DATE="" DATE=DT
  1. S GENDER=$G(GENDER)
  1. ;
  1. NEW ICD10,CSET,DIC,AUPNSEX,LEX,DELIMITER,DPLIST,TOTREC,ICD
  1. ;
  1. K ^TMP("LEXSCH"),^TMP("LEXFND"),LEX("LIST")
  1. ;
  1. ;Set gender variable used in filtering call
  1. S:($G(GENDER)]"") AUPNSEX=GENDER
  1. ;
  1. ;Determine if ICD-10
  1. S ICD10=0 I $$VERSION^XPDUTL("AICD")>3.51,$$IMP^ICDEXA(30)'>DATE S ICD10=1
  1. S CSET=$S(ICD10=0:"ICD",1:"10D")
  1. ;
  1. D CONFIG^LEXSET(CSET,CSET,DATE)
  1. ;
  1. ;Choose filter
  1. S DIC("S")="I $$FILTER^BJPNUTIL(+Y,LEXVDT,$G(ICD10),$G(FILTER))"
  1. ;
  1. ;Search
  1. D LOOK^LEXA(SEARCH,$G(CSET),$G(COUNT),$G(CSET),$G(DATE))
  1. ;
  1. ;Determine delimiter
  1. S DELIMITER=$S(ICD10=0:"ICD-9-CM ",1:"ICD-10-CM ")
  1. ;
  1. S TOTREC=0,LEX="0" F S LEX=$O(LEX("LIST",LEX)) Q:LEX="" D
  1. . I '+LEX Q
  1. . NEW CODE,LIEN,DIEN,DESC
  1. . ;
  1. . ;Get code
  1. . S CODE=$P($P(LEX("LIST",LEX),DELIMITER,2),")")
  1. . ;
  1. . ;Look for code in file 80
  1. . I $$AICD() S ICD=$$ICDDX^ICDEX(CODE)
  1. . E S ICD=$$ICDDX^ICDCODE(CODE)
  1. . ;
  1. . ;Tack on period
  1. . I $P(ICD,U)="-1",CODE'["." D
  1. .. S CODE=CODE_"."
  1. .. I $$AICD() S ICD=$$ICDDX^ICDEX(CODE)
  1. .. E S ICD=$$ICDDX^ICDCODE(CODE)
  1. . ;
  1. . ;Filter out duplicates
  1. . I $D(DPLIST(CODE)) Q
  1. . ;
  1. . ;Not found
  1. . I $P(ICD,U)="-1" Q
  1. . ;
  1. . ;Create entry
  1. . S DIEN=$P(ICD,U) Q:DIEN=""
  1. . S CODE=$P(ICD,U,2)
  1. . S DESC=$P(ICD,U,4)
  1. . S TOTREC=TOTREC+1,RET(TOTREC)=DIEN_U_CODE_U_DESC
  1. . S DPLIST(CODE)=""
  1. Q
  1. ;
  1. ;Filter on Cause of Injury
  1. FILTER(ALEX,ALEXVDT,ICD10,FILTER) ;Filtering for Lexicon lookup
  1. ;
  1. ;Input parameters
  1. ; ALEX - IEN of file 757.01
  1. ; ALEXVDT - Date to use for screening by codes
  1. ; ICD10 - 1 - ICD10, 0 - ICD9
  1. ; FILTER - 0 - No Cause of Injury, 1 - Only Cause of Injury, 2 - All codes
  1. ;
  1. NEW RETURN,APCDDATE
  1. ;
  1. ;Default to return
  1. S RETURN=1
  1. ;
  1. ;For FILTER equal 2 - Return all
  1. I $G(FILTER)=2 Q RETURN
  1. ;
  1. ;ICD9 - Filter 0
  1. I FILTER=0,ICD10=0 D Q RETURN
  1. . N ALEXICD
  1. . S ALEXVDT=$S(+$G(ALEXVDT)>0:ALEXVDT,1:$$DT^XLFDT)
  1. . S ALEX=$$ICDONE^LEXU(ALEX,ALEXVDT) I ALEX="" S RETURN="" Q
  1. . S ALEXICD=$$ICDDX^AUPNVUTL(ALEX,ALEXVDT,"E")
  1. . I $P(ALEXICD,"^",2)="INVALID CODE" S RETURN="" Q
  1. . S APCDDATE=ALEXVDT
  1. . I '$$CHK^AUPNSICD($P(ALEXICD,U,1)) S RETURN="" Q
  1. ;
  1. ;ICD10 - Filter 0
  1. I FILTER=0,ICD10=1 D Q RETURN
  1. . N ALEXICD
  1. . S ALEX=$$ONE^LEXU(ALEX,ALEXVDT,"10D") I ALEX="" S RETURN="" Q
  1. . S ALEXICD=$$ICDDX^AUPNVUTL(ALEX,ALEXVDT,"E")
  1. . I $P(ALEXICD,"^",2)="INVALID CODE" S RETURN="" Q
  1. . S APCDDATE=ALEXVDT
  1. . I '$$CHK^AUPNSICD($P(ALEXICD,U,1)) S RETURN="" Q
  1. ;
  1. ;Both ICD9/ICD10 - Filter 1
  1. I FILTER=1 D Q RETURN
  1. . N ALEXICD,ALEVXDT,%
  1. . S ALEX=$$ONE^LEXU(ALEX,ALEXVDT,$S(ICD10=1:"10D",1:"ICD")) I ALEX="" S RETURN="" Q
  1. . S ALEXICD=$$ICDDX^AUPNVUTL(ALEX,ALEXVDT,"E")
  1. . I $P(ALEXICD,"^",2)="INVALID CODE" S RETURN="" Q
  1. . I '$$CHK^BJPNUTIL($P(ALEXICD,U,1),ICD10,ALEXVDT) S RETURN="" Q
  1. ;
  1. Q
  1. ;
  1. CHK(Y,ICD10,ALEXVDT) ;EP - SCREEN NON CAUSE OF INJURY AND INACTIVE CODES
  1. NEW A,I,%
  1. I $G(DUZ("AG"))'="I" Q 1
  1. S:ALEXVDT="" ALEXVDT=DT
  1. S I=$S($G(ICD10)=0:1,1:30)
  1. S %=$$ICDDX^AUPNVUTL(Y,ALEXVDT) I 1
  1. I $P(%,U,20)]"",$P(%,U,20)'=I Q 0 ;not correct coding system
  1. S I="CHKDX"_I
  1. G @I
  1. ;
  1. CHKDX1 ;CODING SYSTEM 1 - ICD9
  1. ;
  1. ;Only return E codes
  1. I $E($P(%,U,2),1)'="E" Q 0
  1. ;
  1. ;Skip inactive codes
  1. I '$P(%,U,10) Q 0 ;INACTIVE
  1. ;
  1. ;If 'USE WITH SEX' field has value check that value against AUPNSEX
  1. I '$D(AUPNSEX) Q 1
  1. I $P(%,U,11)]"",$P(%,U,11)'=AUPNSEX Q 0
  1. Q 1
  1. ;
  1. CHKDX30 ;coding system 30-ICD10
  1. NEW RET
  1. S RET=0
  1. I $E($P(%,U,2),1)="V" S RET=1
  1. I 'RET,$E($P(%,U,2),1)="W" S RET=1
  1. I 'RET,$E($P(%,U,2),1)="X" S RET=1
  1. I 'RET,$E($P(%,U,2),1)="Y" D
  1. . NEW EXC
  1. . S EXC=$E($P(%,U,2),1,3)
  1. . ;
  1. . ;Handle exceptions to list
  1. . I EXC'="Y92",EXC'="Y93" S RET=1
  1. . S RET=0
  1. ;
  1. I '$P(%,U,10) S RET=0 ;STATUS IS INACTIVE
  1. ;
  1. ;If 'USE WITH SEX' field has value check against AUPNSEX
  1. I '$D(AUPNSEX) Q RET
  1. I $P(%,U,11)]"",$P(%,U,11)'=AUPNSEX S RET=0
  1. Q RET
  1. ;
  1. AICD() ;EP - Return 1 if AICD 4.0
  1. Q $S($$VERSION^XPDUTL("AICD")="4.0":1,1:0)
  1. ;
  1. LOG(BJPNCAT,BJPNACT,BJPNCALL,BJPNDESC,BJPNVDFN) ;EP - Log Prenatal Audit entry
  1. ;
  1. NEW BJPNDFN,X,RES
  1. ;
  1. ;See if BUSA has been installed
  1. S X="BUSAAPI" X ^%ZOSF("TEST") I '$T Q "BUSA has not been installed"
  1. ;
  1. ;Check input
  1. I ",S,P,D,O,"'[(","_$G(BJPNCAT)_",") Q "Invalid Audit Category"
  1. I (BJPNCAT="P"),(",A,D,Q,P,E,C,"'[(","_$G(BJPNACT)_",")) Q "Invalid Audit Action"
  1. I $G(BJPNDESC)="" Q "Invalid Audit Log Description"
  1. S:$G(BJPNCALL)="" BJPNCALL="AMER Audit API Call"
  1. ;
  1. ;Handle single patients passed in
  1. I $D(BJPNVDFN)=1,$G(BJPNVDFN)]"" D
  1. . S BJPNDFN(1)=BJPNVDFN
  1. ;
  1. ;Handle multiple patients passed in
  1. I $D(BJPNVDFN)>9 D
  1. . NEW II,CNT
  1. . S II="",CNT=0 F S II=$O(BJPNVDFN(II)) Q:II="" S CNT=CNT+1,BJPNDFN(CNT)=BJPNVDFN(II)
  1. ;
  1. ;Perform audit call
  1. S RES=$$LOG^BUSAAPI("A",BJPNCAT,BJPNACT,BJPNCALL,BJPNDESC,"BJPNDFN")
  1. Q RES
  1. ;
  1. ASTHMA(DATA,CODE,SNOMED) ;EP - BJPN CHECK FOR ASTHMA
  1. ;
  1. NEW UID,II,RET
  1. ;
  1. S UID=$S($G(ZTSK):"Z"_ZTSK,1:$J)
  1. S DATA=$NA(^TMP("BJPNUTIL",UID))
  1. K @DATA
  1. I $G(DT)=""!($G(U)="") D DT^DICRW
  1. ;
  1. S II=0
  1. NEW $ESTACK,$ETRAP S $ETRAP="D ERR^BJPNUTIL D UNWIND^%ZTER" ; SAC 2009 2.2.3.17
  1. ;
  1. ;Define header
  1. S @DATA@(0)="I00001RESULT"_$C(30)
  1. ;
  1. I $G(CODE)="",$G(SNOMED)="" S BMXSEC="Both ICD code and SNOMED cannot be null" G XASTHMA
  1. ;
  1. ;Call MSC to perform check
  1. D CHKASM^BGOASLK(.RET,$G(CODE),$G(SNOMED))
  1. S II=II+1,@DATA@(II)=+$G(RET)_$C(30)
  1. ;
  1. XASTHMA S II=II+1,@DATA@(II)=$C(31)
  1. Q
  1. ;
  1. ISINJ(DATA,SNOMED,VIEN) ;EP - BJPN CHECK FOR INJURY
  1. ;
  1. NEW UID,II,RET
  1. ;
  1. S UID=$S($G(ZTSK):"Z"_ZTSK,1:$J)
  1. S DATA=$NA(^TMP("BJPNUTIL",UID))
  1. K @DATA
  1. I $G(DT)=""!($G(U)="") D DT^DICRW
  1. ;
  1. S II=0
  1. NEW $ESTACK,$ETRAP S $ETRAP="D ERR^BJPNUTIL D UNWIND^%ZTER" ; SAC 2009 2.2.3.17
  1. ;
  1. ;Define header
  1. S @DATA@(0)="I00001RESULT"_$C(30)
  1. ;
  1. I $G(SNOMED)="" S BMXSEC="Missing Concept Id" G XISINJ
  1. I $G(VIEN)="" S BMXSEC="Missing VIEN" G XISINJ
  1. ;
  1. ;Call MSC to perform check
  1. D INJURY^BGOVPOV2(.RET,SNOMED,VIEN)
  1. S II=II+1,@DATA@(II)=+$G(RET)_$C(30)
  1. ;
  1. XISINJ S II=II+1,@DATA@(II)=$C(31)
  1. Q
  1. ;
  1. ASTCLS(DATA,FAKE) ;EP - BJPN GET ASTHMA CLASSES
  1. ;
  1. NEW UID,II
  1. ;
  1. S UID=$S($G(ZTSK):"Z"_ZTSK,1:$J)
  1. S DATA=$NA(^TMP("BJPNUTIL",UID))
  1. K @DATA
  1. I $G(DT)=""!($G(U)="") D DT^DICRW
  1. ;
  1. S II=0
  1. NEW $ESTACK,$ETRAP S $ETRAP="D ERR^BJPNUTIL D UNWIND^%ZTER" ; SAC 2009 2.2.3.17
  1. ;
  1. ;Define header
  1. S @DATA@(0)="T00050ASTHMA_CLASSIFICATIONS"_$C(30)
  1. ;
  1. ;Hardset entries
  1. S II=II+1,@DATA@(II)="INTERMITTENT"_$C(30)
  1. S II=II+1,@DATA@(II)="MILD PERSISTENT"_$C(30)
  1. S II=II+1,@DATA@(II)="MODERATE PERSISTENT"_$C(30)
  1. S II=II+1,@DATA@(II)="SEVERE PERSISTENT"_$C(30)
  1. ;
  1. XASTCLS S II=II+1,@DATA@(II)=$C(31)
  1. Q
  1. ;
  1. ASTCON(DATA,FAKE) ;EP - BJPN GET ASTHMA CONTROL
  1. ;
  1. NEW UID,II
  1. ;
  1. S UID=$S($G(ZTSK):"Z"_ZTSK,1:$J)
  1. S DATA=$NA(^TMP("BJPNUTIL",UID))
  1. K @DATA
  1. I $G(DT)=""!($G(U)="") D DT^DICRW
  1. ;
  1. S II=0
  1. NEW $ESTACK,$ETRAP S $ETRAP="D ERR^BJPNUTIL D UNWIND^%ZTER" ; SAC 2009 2.2.3.17
  1. ;
  1. ;Define header
  1. S @DATA@(0)="T00050ASTHMA_CONTROL"_$C(30)
  1. ;
  1. ;Hardset entries
  1. S II=II+1,@DATA@(II)="WELL CONTROLLED"_$C(30)
  1. S II=II+1,@DATA@(II)="NOT WELL CONTROLLED"_$C(30)
  1. S II=II+1,@DATA@(II)="VERY POORLY CONTROLLED"_$C(30)
  1. ;
  1. XASTCON S II=II+1,@DATA@(II)=$C(31)
  1. Q
  1. ;
  1. INJPLC(DATA,FAKE) ;EP - BJPN GET INJURY PLACE LIST
  1. ;
  1. NEW UID,II
  1. ;
  1. S UID=$S($G(ZTSK):"Z"_ZTSK,1:$J)
  1. S DATA=$NA(^TMP("BJPNUTIL",UID))
  1. K @DATA
  1. I $G(DT)=""!($G(U)="") D DT^DICRW
  1. ;
  1. S II=0
  1. NEW $ESTACK,$ETRAP S $ETRAP="D ERR^BJPNUTIL D UNWIND^%ZTER" ; SAC 2009 2.2.3.17
  1. ;
  1. ;Define header
  1. S @DATA@(0)="T00005INJ_PLACE_CD^T00050INJURY_PLACE"_$C(30)
  1. ;
  1. ;Hardset entries
  1. S II=II+1,@DATA@(II)="A^HOME-INSIDE"_$C(30)
  1. S II=II+1,@DATA@(II)="B^HOME-OUTSIDE"_$C(30)
  1. S II=II+1,@DATA@(II)="C^FARM"_$C(30)
  1. S II=II+1,@DATA@(II)="D^SCHOOL"_$C(30)
  1. S II=II+1,@DATA@(II)="E^INDUSTRIAL PREMISES"_$C(30)
  1. S II=II+1,@DATA@(II)="F^RECREATIONAL AREA"_$C(30)
  1. S II=II+1,@DATA@(II)="G^STREET/HIGHWAY"_$C(30)
  1. S II=II+1,@DATA@(II)="H^PUBLIC BUILDING"_$C(30)
  1. S II=II+1,@DATA@(II)="I^RESIDENT INSTITUTION"_$C(30)
  1. S II=II+1,@DATA@(II)="J^HUNTING/FISHING"_$C(30)
  1. S II=II+1,@DATA@(II)="K^OTHER"_$C(30)
  1. S II=II+1,@DATA@(II)="L^UNKNOWN"_$C(30)
  1. ;
  1. XINJPLC S II=II+1,@DATA@(II)=$C(31)
  1. Q
  1. ;
  1. DXCAUSE(DATA,FAKE) ;EP - BJPN GET DX CAUSE
  1. ;
  1. NEW UID,II,RET,ARR
  1. ;
  1. S UID=$S($G(ZTSK):"Z"_ZTSK,1:$J)
  1. S DATA=$NA(^TMP("BJPNUTIL",UID))
  1. K @DATA
  1. I $G(DT)=""!($G(U)="") D DT^DICRW
  1. ;
  1. S II=0
  1. NEW $ESTACK,$ETRAP S $ETRAP="D ERR^BJPNUTIL D UNWIND^%ZTER" ; SAC 2009 2.2.3.17
  1. ;
  1. ;Define header
  1. S @DATA@(0)="T00010CODE^T00050DX_CAUSE"_$C(30)
  1. ;
  1. D GETSET^BGOUTL3(.RET,9000010.07,.07)
  1. ;
  1. S ARR="" F S ARR=$O(RET(ARR)) Q:ARR="" S II=II+1,@DATA@(II)=$P(RET(ARR),U)_U_$P(RET(ARR),U,2)_$C(30)
  1. ;
  1. XDXCAUSE S II=II+1,@DATA@(II)=$C(31)
  1. Q
  1. ;
  1. COMP(DFN,UID,VIEN,PRBIEN) ;EP - Call EHR API and format results into usable data
  1. ;
  1. NEW RET,TMP,T,BGO,LAT
  1. ;
  1. ;If no problem passed in get all
  1. I $G(PRBIEN)="" D GET^BGOPROB(.RET,DFN,"ASEORPI","A",99999,2)
  1. ;
  1. ;If problem passed in, get one
  1. I +$G(PRBIEN) D GETONE^BGOPROB1(.RET,+PRBIEN,2)
  1. ;
  1. ;Reset compile global - data to be used by this call and future RPC calls
  1. K ^TMP("BJPNIPL",UID)
  1. ;
  1. ;Populate info
  1. S TMP=$NA(^TMP("BJPNIPL",UID))
  1. S (T,BGO)="" F S BGO=$O(@RET@(BGO)) Q:BGO="" D
  1. . NEW N
  1. . S N=$G(@RET@(BGO))
  1. . S P=$G(P)
  1. . I $P(N,U)="P" S P=$P(N,U,2) S:P]"" B=BGO,@TMP@("P",P,B)=N,T="P" Q ;Problems
  1. . I $P(N,U)="C" S P=$P(N,U,3) S:P]"" B=BGO,@TMP@("C",P,B,0)=N,T="C" Q ;Care Plans
  1. . I $P(N,U)="G" S P=$P(N,U,3) S:P]"" B=BGO,@TMP@("G",P,B,0)=N,T="G" Q ;Goals
  1. . I $P(N,U)="I" S P=$P(N,U,3) S:P]"" B=BGO,@TMP@("I",P,B,0)=N,T="I" Q ;Visit Instructions
  1. . I $P(N,U)="O" S P=$P(N,U,3) S:P]"" B=BGO,@TMP@("O",P,B,0)=N,T="O" Q ;OB Note
  1. . I $P(N,U)="T" S P=$P(N,U,4) S:P]"" B=BGO,@TMP@("T",P,B,0)=N,T="T" Q ;Treatment Regimen
  1. . I $P(N,U)="E" S:P]"" B=BGO,@TMP@("E",P,B,0)=$$PTED^BJPNPUTL(N) ;Education
  1. . I $P(N,U)="A" S:P]"" B=BGO,@TMP@("A",P,B,0)=N ;Asthma
  1. . I $P(N,U)="Q" S:P]"" B=BGO,@TMP@("Q",P,B,0)=N ;Qualifiers
  1. . ;
  1. . ;C/G/I/O/T Text
  1. . I $E(N,1)="~",P]"",T]"",B]"" S @TMP@(T,P,B,$O(@TMP@(T,P,B,""),-1)+1)=N
  1. ;
  1. ;Get POVs
  1. I $G(VIEN)]"" D
  1. . NEW FNDPS,PVLST,FINFO
  1. . S PVLST=""
  1. . D GET^BGOVPOV(.RET,VIEN)
  1. . S BGO="" F S BGO=$O(@RET@(BGO)) Q:BGO="" D
  1. .. NEW N,P,PS,PENT,B,PVIEN,RETDATA
  1. .. S N=$G(@RET@(BGO))
  1. .. S P=$P(N,U,24) ;Problem
  1. .. ;
  1. .. Q:P="" ;Quite if no problem
  1. .. Q:'$D(@TMP@("P",P)) ;Quit if not in list
  1. .. S B=$O(@TMP@("P",P,"")) Q:B="" ;Quit if no entry
  1. .. ;
  1. .. S PS=$P(N,U,16) ;Primary/Secondary
  1. .. I PS="PRIMARY" S FNDPS(P)="Y"
  1. .. S PVIEN=$P(N,U) ;POV IEN
  1. .. I PVIEN]"" S PVLST=PVLST_$S(PVLST]"":$C(29),1:"")_PVIEN
  1. .. ;
  1. .. ;Look for episodicity and injury info
  1. .. I $G(FINFO(P))="" D
  1. ... NEW EP,REV,INJCASS,PLC,INJDT,INJCEXT,INJCINT,AF,FRACT
  1. ... S EP=$P(N,U,6) S:EP]"" FINFO(P)=1 ;Episodicity
  1. ... S REV=$P(N,U,11) S:REV]"" FINFO(P)=1 ;Injury Revisit
  1. ... S INJCASS=$P(N,U,12) S:INJCASS]"" FINFO(P)=1 ;Inj Association
  1. ... S PLC=$P($P(N,U,15),"~") S:PLC]"" FINFO(P)=1 ;Inj Place
  1. ... S INJDT=$P(N,U,13) S:INJDT]"" FINFO(P)=1 ;Injury Date
  1. ... S INJCEXT=$P(N,U,14) S:INJCEXT]"" FINFO(P)=1 ;Ext Inj Cause
  1. ... S INJCINT=$P(N,U,25) S:INJCINT]"" FINFO(P)=1 ;Int Inj Cause
  1. ... ;BJPN*2.0*6;Include abnormal findings
  1. ... S AF=$P($P(N,U,28),";")
  1. ... S:AF]"" AF=$O(^BSTS(9002318.6,"C","AF",AF,""))
  1. ... S:AF]"" FINFO(P)=1 ;Abnormal Findings
  1. ... ;BJPN*2.0*9;Include Fracture
  1. ... S FRACT=$P(N,U,30)
  1. ... S FINFO(P,"FRACT")=FRACT
  1. ... S FINFO(P,"AF")=AF
  1. ... S FINFO(P,"EP")=EP
  1. ... S FINFO(P,"REV")=REV
  1. ... S FINFO(P,"INJCASS")=INJCASS
  1. ... S FINFO(P,"PLC")=PLC
  1. ... S FINFO(P,"INJDT")=INJDT
  1. ... S FINFO(P,"INJCEXT")=INJCEXT
  1. ... S FINFO(P,"INJCINT")=INJCINT
  1. .. ;
  1. .. ;BJPN*2.0*9;Added fracture in 40
  1. .. ;Set the Primary/Secondary,POV IEN, Episodicity in the problem entry
  1. .. S RETDATA=$G(FNDPS(P))_U_PVLST_U_$G(FINFO(P,"EP"))_U_$G(FINFO(P,"REV"))_U_$G(FINFO(P,"PLC"))
  1. .. S RETDATA=RETDATA_U_$G(FINFO(P,"INJDT"))_U_$G(FINFO(P,"INJCEXT"))_U_$G(FINFO(P,"INJCINT"))_U_$G(FINFO(P,"INJCASS"))_U_$G(FINFO(P,"AF"))_U_$G(FINFO(P,"FRACT"))
  1. .. S $P(@TMP@("P",P,B),U,30,40)=RETDATA
  1. ;
  1. Q
  1. ;
  1. INJURY(DATA,CODE,SNOMED) ;EP - BJPN INJURY CHECK
  1. ;
  1. NEW UID,II,RET
  1. ;
  1. S UID=$S($G(ZTSK):"Z"_ZTSK,1:$J)
  1. S DATA=$NA(^TMP("BJPNUTIL",UID))
  1. K @DATA
  1. I $G(DT)=""!($G(U)="") D DT^DICRW
  1. ;
  1. S II=0
  1. NEW $ESTACK,$ETRAP S $ETRAP="D ERR^BJPNUTIL D UNWIND^%ZTER" ; SAC 2009 2.2.3.17
  1. ;
  1. ;Define header
  1. S @DATA@(0)="I00001RESULT"_$C(30)
  1. ;
  1. I $G(CODE)="" S BMXSEC="Missing ICD code value" G XINJURY
  1. I $G(SNOMED)="" S BMXSEC="Missing SNOMED code" G XINJURY
  1. ;
  1. ;Call MSC to perform check
  1. D CHKASM^BGOASLK(.RET,CODE,SNOMED)
  1. S II=II+1,@DATA@(II)=+$G(RET)_$C(30)
  1. ;
  1. XINJURY S II=II+1,@DATA@(II)=$C(31)
  1. Q
  1. ;
  1. ERR ;
  1. D ^%ZTER
  1. NEW Y,ERRDTM
  1. S Y=$$NOW^XLFDT() X ^DD("DD") S ERRDTM=Y
  1. Q