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

BJPNSPRB.m

Go to the documentation of this file.
  1. BJPNSPRB ;GDIT/HS/BEE-Prenatal Care Module Add/Edit RPCs - Other ; 08 May 2012 12:00 PM
  1. ;;2.0;PRENATAL CARE MODULE;**6,7,9**;Feb 24, 2015;Build 12
  1. ;
  1. Q
  1. ;
  1. PCHECK(DATA,DFN,CONCID,VIEN,DESCID,LAT,PRBIEN,CHG) ;EP - BJPN CHECK FOR PROBLEM
  1. ;
  1. ;BJPN*2.0*7;Call now being made to PCHECK^BJPNSPRB
  1. D PCHECK^BJPNPCHK(.DATA,DFN,CONCID,VIEN,DESCID,LAT,PRBIEN,CHG)
  1. Q
  1. ;
  1. PROB(DATA,PRBIEN,PIPIEN,VIEN) ;EP - BJPN GET PROBLEM
  1. ;
  1. ;This RPC returns the detail for a particular problem
  1. ; * The IPL pointer is required - all relevant IPL data will be returned
  1. ; * The PIP pointer is optional - if present the relevant PIP data will be returned
  1. ;
  1. ;Input:
  1. ; PRBIEN - Pointer to IPL
  1. ; PIPIEN - Pointer to PIP (optional)
  1. ; VIEN - Visit IEN
  1. ;
  1. NEW UID,II,RET,BGO,TMP,B,P,T,VDT,DFN,ONSET,LOC,EPROB,IPROB,IPRIO,CLASS,EP,INJREV,INJPLC,INJDT,EPSMD,EVAR
  1. NEW DEL,DESCID,CONCID,DESCTM,PTEXT,PNARR,BGO,API,XPRI,XSTS,XLMDT,XLMBY,IPLSTS,PRIMARY,QUAL,ASTHMA
  1. NEW ICD,ADDICD,ICDCNT,ADICD,HICD,GGO,CGO,VGO,GOAL,CARE,INST,DEDD,POV,IPOV,ITYPE,PRV,XPRV,XSCO,PVIEN
  1. NEW INJASS,INJCIEN,INJCCOD,INJCDSC,INJCHK,ABN,PLAT,ILAT,ELAT,FRACT
  1. ;
  1. S UID=$S($G(ZTSK):"Z"_ZTSK,1:$J)
  1. S DATA=$NA(^TMP("BJPNSPRB",UID))
  1. K @DATA
  1. I $G(DT)=""!($G(U)="") D DT^DICRW
  1. ;
  1. ;Set up Header
  1. S II=0
  1. S @DATA@(II)="I00010PIPIEN^I00010PRBIEN^T00012PRIORITY^T00001PIP_STATUS^T00025SCOPE"
  1. S @DATA@(II)=@DATA@(II)_"^T00025DESC_ID^T00500DESC_TERM^T00025CONC_ID^T00001IPL_PRIORITY^T00001CLASS"
  1. S @DATA@(II)=@DATA@(II)_"^D00030LM_DT^T00050LM_BY^T00010IPL_STS^T00120ICD^T04096HOVER_ICD"
  1. S @DATA@(II)=@DATA@(II)_"^T00160PROVIDER_TEXT^T00360PROVIDER_NARRATIVE^T04096LAST_GOAL"
  1. S @DATA@(II)=@DATA@(II)_"^T04096LAST_CARE_PLAN^T04096LAST_VISIT_INSTRUCTION"
  1. S @DATA@(II)=@DATA@(II)_"^I00010HIDE_PRV^T00035PRV^D00015DEFINITIVE_EDD^T00001POV"
  1. S @DATA@(II)=@DATA@(II)_"^T00001INPATIENT_POV^T00001PRIMARY^T00001PATIENT_TYPE^T00030ONSET_DT"
  1. S @DATA@(II)=@DATA@(II)_"^T00050LOCATION^T00015EXTERNAL_PROB^T00015INTERNAL_PROB"
  1. S @DATA@(II)=@DATA@(II)_"^T00015POV_IEN^T00250ASTHMA^T00050EPISODICITY^T00025EPISODICITY_SMD^T00050INJURY_REVISIT"
  1. S @DATA@(II)=@DATA@(II)_"^T00050INJURY_PLACE^D00030INJURY_DT^T00050INJ_ASSOC^I00020INJ_CAUSE_IEN"
  1. S @DATA@(II)=@DATA@(II)_"^T00020INJ_CAUSE_CODE^T00200INJ_CAUSE_DESC^T00001INJ_CHECKED^T04096QUALIFIERS^T00001ABNORMAL"
  1. S @DATA@(II)=@DATA@(II)_"^T00001PROMPT_LATERALITY^T00040INT_LATERALITY^T00040EXT_LATERALITY^T00040FRACTURE"_$C(30)
  1. ;
  1. NEW $ESTACK,$ETRAP S $ETRAP="D ERR^BJPNSPRB D UNWIND^%ZTER" ; SAC 2009 2.2.3.17
  1. ;
  1. ;Verify PRBIEN and VIEN (at minimum) were entered
  1. I $G(PRBIEN)="" S BMXSEC="Required IPL PRBIEN is missing" G XPROB
  1. I $G(VIEN)="" S BMXSEC="Required visit IEN is missing" G XPROB
  1. S PIPIEN=$G(PIPIEN) S:PIPIEN=0 PIPIEN=""
  1. ;
  1. ;Get the DFN
  1. S DFN=$$GET1^DIQ(9000011,PRBIEN_",",.02,"I") I DFN="" S BMXSEC="Invalid DFN value in IPL entry" G XPROB
  1. ;
  1. ;If PIPIEN, verify it matches to PRBIEN
  1. I $G(PIPIEN)]"",'$D(^BJPNPL("F",DFN,PRBIEN,PIPIEN)) S BMXSEC="The PIPIEN does not point to the IPL entry" G XPROB
  1. ;
  1. ;Get the visit date or default to DT if visit not passed in
  1. I $G(VIEN)]"" S VDT=$P($$GET1^DIQ(9000010,VIEN_",",".01","I"),".")
  1. S:$G(VDT)="" VDT=DT
  1. ;
  1. ;Call EHR API and format results into usable data
  1. D COMP^BJPNUTIL(DFN,UID,VIEN,PRBIEN)
  1. S TMP=$NA(^TMP("BJPNIPL",UID)) ;Define compiled data reference
  1. ;
  1. ;Get IPL and PIP information
  1. ;
  1. ;Skip deletes
  1. S DEL=$$GET1^DIQ(9000011,PRBIEN_",",2.02,"I") I DEL]"" D S BMXSEC="The input IPL problem has been deleted" G XPROB ;IPL Delete
  1. . ;
  1. . ;If deleted on IPL, need to make sure it is deleted in PIP
  1. . NEW BJPNUPD,ERROR
  1. . S BJPNUPD(90680.01,PIPIEN_",",2.01)=$$GET1^DIQ(9000011,PRBIEN_",",2.01,"I") ;Deleted By
  1. . S BJPNUPD(90680.01,PIPIEN_",",2.02)=$$GET1^DIQ(9000011,PRBIEN_",",2.02,"I") ;Del Dt/Tm
  1. . S BJPNUPD(90680.01,PIPIEN_",",2.03)=$$GET1^DIQ(9000011,PRBIEN_",",2.03,"I") ;Del Rsn
  1. . S BJPNUPD(90680.01,PIPIEN_",",2.04)=$$GET1^DIQ(9000011,PRBIEN_",",2.04,"I") ;Del Other
  1. . D FILE^DIE("","BJPNUPD","ERROR")
  1. S DEL=$$GET1^DIQ(90680.01,PIPIEN_",",2.01,"I") I DEL]"" S PIPIEN="",BMXSEC="The input PIP problem has been deleted" G XPROB
  1. ;
  1. ;Retrieve the entry from the API results
  1. S BGO=$O(@TMP@("P",PRBIEN,"")) I BGO="" G XPROB ;Quit if no IPL entry
  1. S API=$G(@TMP@("P",PRBIEN,BGO)) I API="" G XPROB ;Quit if no problem string
  1. ;
  1. ;SNOMED DescId and ConcId
  1. S DESCID=$P(API,U,4)
  1. S:DESCID="" DESCID=$$GET1^DIQ(9000011,PRBIEN_",",80002,"I") I DESCID="" G XPROB ;Quit if no Desc ID
  1. S DESCTM=$P($$DESC^BSTSAPI(DESCID_"^^1"),U,2) I DESCTM="" G XPROB ;Quit if no Description Term
  1. S CONCID=$P(API,U,3)
  1. S:CONCID="" CONCID=$$GET1^DIQ(9000011,PRBIEN_",",80001,"I") I CONCID="" G XPROB ;Quit if no Concept ID
  1. ;
  1. ;Onset Date
  1. S ONSET=$$GET1^DIQ(9000011,PRBIEN_",",.13,"I")
  1. I ONSET]"" D
  1. . I $E(ONSET,4,7)="0000" S ONSET="20"_$E(ONSET,2,3) Q ;Year only
  1. . I $E(ONSET,6,7)="00" S ONSET=+$E(ONSET,4,5)_"/20"_$E(ONSET,2,3) Q ;Month/Year
  1. . S ONSET=$$FMTE^BJPNPRL(ONSET)
  1. ;
  1. ;Location
  1. S LOC=$$GET1^DIQ(9000011,PRBIEN_",",.06,"I")
  1. ;
  1. ;External problem
  1. S EPROB=$P(API,U,5)
  1. ;
  1. ;Internal problem
  1. S IPROB=$$GET1^DIQ(9000011,PRBIEN_",",.07,"I")
  1. ;
  1. ;PIP Priority
  1. I +PIPIEN S XPRI=$$GET1^DIQ(90680.01,PIPIEN_",",.06,"E")
  1. E S XPRI=""
  1. ;
  1. ;IPL Priority
  1. S IPRIO="" I PRBIEN]"" D
  1. . NEW PRIEN
  1. . S PRIEN=$O(^BGOPROB("B",PRBIEN,"")) Q:PRIEN=""
  1. . S IPRIO=$$GET1^DIQ(90362.22,PRIEN_",",.02,"I")
  1. . S:IPRIO="" IPRIO=0
  1. ;
  1. ;Status
  1. I +PIPIEN S XSTS=$$GET1^DIQ(90680.01,PIPIEN_",",.08,"E")
  1. E S XSTS=""
  1. ;
  1. ;Scope
  1. I +PIPIEN S XSCO=$$GET1^DIQ(90680.01,PIPIEN_",",.07,"E")
  1. E S XSCO=""
  1. ;
  1. ;Class
  1. S CLASS=$$GET1^DIQ(9000011,PRBIEN_",",.04,"I")
  1. ;
  1. ;Last Modified Date
  1. S XLMDT=$$FMTE^BJPNPRL($$GET1^DIQ(9000011,PRBIEN_",",.03,"I"))
  1. ;
  1. ;Last Modified By
  1. S XLMBY=$$GET1^DIQ(9000011,PRBIEN_",",.14,"E")
  1. ;
  1. ;IPL Status - Convert manually lower case can be displayed
  1. S IPLSTS=$P(API,U,6)
  1. S:IPLSTS="" IPLSTS=$$GET1^DIQ(9000011,PRBIEN_",",.12,"E")
  1. S IPLSTS=$S(IPLSTS="CHRONIC":"Chronic",IPLSTS="INACTIVE":"Inactive",IPLSTS="D":"DELETED",IPLSTS="SUB-ACUTE":"Sub-Acute",IPLSTS="EPISODIC":"Episodic",IPLSTS="SOCIAL":"Social",IPLSTS="ROUTINE/ADMIN":"Admin",1:"")
  1. ;
  1. ;ICD Information - Pull primary and additional ICD values
  1. S ICD=$P(API,U,9)
  1. S ADDICD=$P(API,U,13)
  1. I ADDICD]"" F ICDCNT=1:1:$L(ADDICD,"|") S ADICD=$P(ADDICD,"|",ICDCNT) I ADICD]"" S ICD=ICD_$S(ICD]"":"|",1:"")_ADICD
  1. ;
  1. ;ICD Hover field - Not used for problem add/edit
  1. S HICD=""
  1. ;
  1. ;Provider Text
  1. S PNARR=$P(API,U,8)
  1. S PTEXT=$P(PNARR," | ",2)
  1. ;
  1. ;Get latest Goal note
  1. S GGO=$O(@TMP@("G",PRBIEN,""))
  1. S GOAL="" I GGO]"" S GOAL=$P($G(@TMP@("G",PRBIEN,GGO,1)),U,2)
  1. ;
  1. ;Get latest Care Plan note
  1. S CGO=$O(@TMP@("C",PRBIEN,""))
  1. S CARE="" I CGO]"" S CARE=$P($G(@TMP@("C",PRBIEN,CGO,1)),U,2)
  1. ;
  1. ;Get latest V Visit Instruction
  1. S VGO=$O(@TMP@("I",PRBIEN,""))
  1. S INST="" I VGO]"" S INST=$P($G(@TMP@("I",PRBIEN,VGO,1)),U,2)
  1. ;
  1. ;Visit POV
  1. S (IPOV,POV,ITYPE)="" I VIEN]"" D
  1. . S ITYPE=$$GET1^DIQ(9000010,VIEN_",",.07,"I") Q:ITYPE=""
  1. . S ITYPE=$S(ITYPE="H":"H",1:"A")
  1. . I $O(^AUPNPROB(PRBIEN,14,"B",VIEN,"")) S POV="Y"
  1. . I $O(^AUPNPROB(PRBIEN,15,"B",VIEN,"")) S IPOV="Y"
  1. ;
  1. ;Get Primary/Secondary value
  1. S PRIMARY=$P(API,U,30)
  1. ;
  1. ;Get V POV IEN
  1. S PVIEN=$P(API,U,31)
  1. ;
  1. ;Get the Episodicity
  1. S EP=$P(API,U,32)
  1. S EPSMD=$$VALTERM^BSTSAPI("EVAR",EP_"^^1")
  1. S EPSMD=$G(EVAR(1,"CON"))
  1. ;
  1. ;Get the injury revisit
  1. S INJREV=$P(API,U,33)
  1. ;
  1. ;Get the injury place
  1. S INJPLC=$P(API,U,34)
  1. ;
  1. ;Get the injury date
  1. S INJDT=$P(API,U,35)
  1. ;
  1. S INJASS=$P(API,U,38)
  1. S INJCIEN="" I PVIEN]"" S INJCIEN=$$GET1^DIQ(9000010.07,PVIEN_",",.09,"I")
  1. S INJCCOD=$P(API,U,37)
  1. S INJCDSC=$P(API,U,36)
  1. S INJCHK="" I (INJPLC]"")!(INJCCOD]"")!(INJCDSC]"")!(INJASS]"")!(INJCIEN]"")!(INJDT]"") S INJCHK="Y"
  1. ;
  1. ;Definitive EDD
  1. I +PIPIEN S DEDD=$$FMTE^BJPNPRL($$GET1^DIQ(90680.01,PIPIEN_",",.09,"I"))
  1. E S DEDD=""
  1. ;
  1. ;PRV fields
  1. S (PRV,XPRV)=""
  1. S PRV=$$PPRV^BJPNPKL(VIEN)
  1. S:PRV]"" XPRV=$$GET1^DIQ(200,PRV_",",.01,"E")
  1. ;
  1. ;Qualifiers - Loop through entries and assemble
  1. S QUAL="",BGO="" F S BGO=$O(@TMP@("Q",PRBIEN,BGO)) Q:BGO="" D
  1. . ;
  1. . NEW STR,N
  1. . S N=$G(@TMP@("Q",PRBIEN,BGO,0))
  1. . ;Return: TYPE (C/S) [1] 29 IEN [2] 29 CONCID [3] 29 TERM [4] 29 LMDT [5] 29 LMBY [6]
  1. . S STR=$P(N,U,2)_$C(29)_$P(N,U,3)_$C(29)_$P(N,U,4)_$C(29)_$P(N,U,5)_$C(29)_$C(29)
  1. . ;
  1. . ;If IEN is populated and severity - get last modified by
  1. . I +$P(N,U,3),$P(N,U,2)="S" D
  1. .. NEW DA,IENS,BY,LMDT,LMBY
  1. .. S DA(1)=PRBIEN,DA=$P(N,U,3),IENS=$$IENS^DILF(.DA)
  1. .. S LMDT=$$GET1^DIQ(9000011.13,IENS,.05,"I")
  1. .. S LMBY=$$GET1^DIQ(9000011.13,IENS,.04,"I")
  1. .. I LMDT="" D
  1. ... S LMDT=$$GET1^DIQ(9000011.13,IENS,.03,"I")
  1. ... S LMBY=$$GET1^DIQ(9000011.13,IENS,.02,"I")
  1. .. S $P(STR,$C(29),5)=LMBY
  1. .. S $P(STR,$C(29),6)=LMDT
  1. . ;
  1. . S QUAL=QUAL_$S(QUAL="":"",1:$C(28))_STR
  1. ;
  1. ;Asthma
  1. S ASTHMA="",BGO=$O(@TMP@("A",PRBIEN,"")) I BGO]"" D
  1. . S ASTHMA=$TR($G(@TMP@("A",PRBIEN,BGO,0)),"^",$C(29))
  1. ;
  1. ;Abnormal Findings
  1. S ABN=$P(API,U,39)
  1. ;
  1. ;BJPN*2.0*7;Added laterality
  1. S PLAT=$P(API,U,19),PLAT=$S(PLAT=1:"Y",1:"N") ;Prompt for laterality
  1. S ILAT=$P(API,U,20)
  1. S ELAT="" I $TR(ILAT,"|")]"" S ELAT=$$CVPARM^BSTSMAP1("LAT",$P(ILAT,"|"))_"|"_$$CVPARM^BSTSMAP1("LAT",$P(ILAT,"|",2))
  1. ;
  1. ;BJPN*2.0*9;Added Fracture Healing
  1. S FRACT=$P(API,U,40)
  1. ;
  1. ;Set up entry
  1. S II=II+1,@DATA@(II)=PIPIEN_U_PRBIEN_U_XPRI_U_XSTS_U_XSCO_U_DESCID_U_DESCTM_U_CONCID_U_IPRIO_U_CLASS_U_XLMDT_U_XLMBY_U_IPLSTS
  1. S @DATA@(II)=@DATA@(II)_U_ICD_U_HICD_U_PTEXT_U_PNARR_U_GOAL_U_CARE_U_INST_U_PRV_U_XPRV
  1. S @DATA@(II)=@DATA@(II)_U_DEDD_U_POV_U_IPOV_U_PRIMARY_U_ITYPE_U_ONSET_U_LOC_U_EPROB
  1. S @DATA@(II)=@DATA@(II)_U_IPROB_U_PVIEN_U_ASTHMA_U_EP_U_EPSMD_U_INJREV_U_INJPLC_U_INJDT
  1. S @DATA@(II)=@DATA@(II)_U_INJASS_U_INJCIEN_U_INJCCOD_U_INJCDSC_U_INJCHK_U_QUAL_U_ABN_U_PLAT_U_ILAT_U_ELAT_U_FRACT
  1. S @DATA@(II)=@DATA@(II)_$C(30)
  1. ;
  1. XPROB S II=II+1,@DATA@(II)=$C(31)
  1. Q
  1. ;
  1. SUBSET(DATA,SUBSET) ;EP - BJPN GET SUBSET
  1. ;
  1. ;This RPC accepts a SNOMED subset value and returns the entries in the subset
  1. ;
  1. ;Input parameter:
  1. ; SUBSET - The SNOMED subset to look up and return a list of members
  1. ;
  1. NEW CNT,UID,II,RET,OUT
  1. ;
  1. S UID=$S($G(ZTSK):"Z"_ZTSK,1:$J)
  1. S DATA=$NA(^TMP("BJPNSPRB",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^BJPNSPRB D UNWIND^%ZTER" ; SAC 2009 2.2.3.17
  1. ;
  1. ;Define Header
  1. S @DATA@(0)="T00300TEXT^T00025DESC_ID^T00025CONC_ID"_$C(30)
  1. ;
  1. ;Input checks
  1. I $G(SUBSET)="" S BMXSEC="Missing Subset" G XSUBSET
  1. ;
  1. ;Call EHR API to retrieve the list of information
  1. S OUT="RET"
  1. ;
  1. ;Default to local search
  1. S $P(SUBSET,U,3)=1
  1. ;
  1. D SUBLST^BSTSAPI(OUT,SUBSET)
  1. ;
  1. ;Loop through results and output
  1. S CNT="" F S CNT=$O(RET(CNT)) Q:CNT="" D
  1. . NEW N
  1. . S N=$G(RET(CNT))
  1. . S II=II+1,@DATA@(II)=$P(N,U,3)_U_$P(N,U,2)_U_$P(N,U)_$C(30)
  1. ;
  1. XSUBSET 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. S II=II+1,@DATA@(II)=$C(31)
  1. Q