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

BJPNGNOT.m

Go to the documentation of this file.
  1. BJPNGNOT ;GDIT/HS/BEE-Prenatal Care Module Get Note Detail for PIP ; 08 May 2012 12:00 PM
  1. ;;2.0;PRENATAL CARE MODULE;**4,8**;Feb 24, 2015;Build 25
  1. ;
  1. Q
  1. ;
  1. NOTES(DATA,DFN,PR,API,TYPE,NOCMP,VIEN) ;EP - BJPN GET PROB NOTES
  1. ;
  1. ;Get BJPN CARE PLANS, GOALS, VISIT INSTRUCTIONS
  1. ;
  1. ;This RPC returns notes entered for problems on the PIP
  1. ;
  1. ;Input: DFN - Patient IEN
  1. ; PR - Problem IEN(s)
  1. ; API - 1 if called from an API (Optional)
  1. ; TYPE - (C) Care Plans, (G) Goals, (I) Visit Instructions,
  1. ; (O) OB Notes, (T) Treatment Plan/Education, null for All
  1. ; NOCMP - (1) Do not recompile data (called by PIP call)
  1. ; VIEN - If passed in, limit visit instructions returned to that visit
  1. ;
  1. S DFN=$G(DFN),PR=$G(PR),API=$G(API),TYPE=$G(TYPE),NOCMP=$G(NOCMP)
  1. I TYPE'="",TYPE'="C",TYPE'="G",TYPE'="I",TYPE'="T",TYPE'="O" S BMXSEC="Invalid TYPE value" Q
  1. ;
  1. NEW UID,II,PIPIEN,SORT,PC,PARY,NEDT,TMP,SIGN,LTYPE,C8,C9
  1. S UID=$S(API=1:$J,$G(ZTSK):"Z"_ZTSK,1:$J)
  1. S DATA=$NA(^TMP("BJPNGNOT",UID))
  1. K @DATA
  1. I $G(DT)=""!($G(U)="") D DT^DICRW
  1. S VIEN=$G(VIEN)
  1. ;
  1. ;Define delimiters
  1. S C8=$C(28),C9=$C(29)
  1. ;
  1. ;Assemble TYPE list
  1. S LTYPE=$S(TYPE="":"GCIOT",1:TYPE) S:LTYPE["T" LTYPE=LTYPE_"E"
  1. ;
  1. ;Assemble Problem List Array
  1. I $G(PR)]"" F II=1:1:$L(PR,$C(28)) S PC=$P(PR,$C(28),II) I PC]"" S PARY(PC)=""
  1. ;
  1. S II=0
  1. NEW $ESTACK,$ETRAP S $ETRAP="D ERR^BJPNPRL D UNWIND^%ZTER" ; SAC 2009 2.2.3.17
  1. ;
  1. ;Define Header
  1. S @DATA@(II)="I00010PIPIEN^I00010PRBIEN^T00001PREGNANT^T04096NOTES"_$C(30)
  1. ;
  1. ;Verify DFN
  1. I DFN="" G XNOTES
  1. ;
  1. ;Definitive EDD date range check
  1. D GETPAR^CIAVMRPC(.NEDT,"BJPN POST DEDD DAYS","SYS",1,"I","")
  1. ;
  1. ;If blank default to 70
  1. I +$G(NEDT)<1 S NEDT=70
  1. ;
  1. ;Call EHR API and format results into usable data - skip if flag and already compiled
  1. S TMP=$NA(^TMP("BJPNIPL",UID)) ;Define compiled data reference
  1. I '$G(NOCMP)!($O(@TMP@(""))="") D COMP^BJPNUTIL(DFN,UID)
  1. ;
  1. ;Array(n)=Type (G OR C) [1] ^ C Plan IEN [2] ^ Prob IEN [4] ^ Who entered [4] ^ Date Entered [5] ^ Status [6] ^ SIGN FLAG [7]
  1. ; =~t [1] ^ Text of the item [2]
  1. ;Array(n)="I" [1] ^ Instr IEN[2] ^ Prob IEN [3] ^ Vst Date [4] ^ Facility [5] ^ Prv IEN [6] ^ Location [7] ^ Entered Dt [8] ^ Visit IEN [9] ^V cat [10] ^ Locked [11] ^ Prov Name [12] ^ signed [13]
  1. ; =~t [1] ^Text of the item [2]
  1. ;Array(n)="O" [1] ^ Instr IEN[2] ^ Prob IEN [3] ^ Vst Date [4] ^ Facility [5] ^ Prv IEN [6] ^ Location [7] ^ Entered Dt [8] ^ Visit IEN [9] ^V cat [10] ^ Locked [11] ^ Prov Name [12] ^ signed [13]
  1. ; =~t [1] ^Text of the item [2]
  1. ;Array(n)="T" [1] ^ TR IEN[2] ^ SNOMED term [3] ^ Prob IEN [4] ^ Vst Date [5] ^ Facility [6] ^ Prv IEN [7] ^ Location [8] ^ Entered Dt [9] ^ Visit IEN [10] ^ V Cat [11] ^Locked [12] ^ Prov name [13]
  1. ;Array(n)="E" [1] ^ Topic [2] ^ Date [3]
  1. ;
  1. ;Loop through problem list and pull goals and care plans
  1. S PIPIEN="" F S PIPIEN=$O(^BJPNPL("D",DFN,PIPIEN)) Q:PIPIEN="" D
  1. . ;
  1. . ;Only include selected problems
  1. . I $D(PARY),'$D(PARY(PIPIEN)) Q
  1. . ;
  1. . NEW CNT,MDT,BGO,PRBIEN,ITYPE,TYPE,NOTES,DEL
  1. . ;
  1. . ;Get IPL pointer
  1. . S PRBIEN=$$GET1^DIQ(90680.01,PIPIEN_",",".1","I") Q:PRBIEN=""
  1. . ;
  1. . ;Skip deletes
  1. . S DEL=$$GET1^DIQ(90680.01,PIPIEN_",",2.01,"I") Q:DEL]"" ;PIP Delete
  1. . S DEL=$$GET1^DIQ(9000011,PRBIEN_",",2.02,"I") I DEL]"" D Q ;IPL Delete
  1. .. ;
  1. .. ;If deleted on IPL, need to delete 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. . ;
  1. . ;Reset Array variable
  1. . S NOTES=""
  1. . ;
  1. . ;Loop through by each TYPE
  1. . F ITYPE=1:1:$L(LTYPE) S TYPE=$E(LTYPE,ITYPE) D
  1. .. ;Loop through compiled results for type
  1. .. S BGO="" F S BGO=$O(@TMP@(TYPE,PRBIEN,BGO),-1) Q:BGO="" D
  1. ... ;
  1. ... NEW APIRES,VISIT,DEDD,BRNG,ERNG,NIEN,X1,X2,X,VDT
  1. ... NEW DTTM,MDBY,ILMBY,NOTE,NSTS,SIGN,ACT
  1. ... ;
  1. ... S SIGN=""
  1. ... S APIRES=$G(@TMP@(TYPE,PRBIEN,BGO,0)) Q:APIRES=""
  1. ... ;
  1. ... ;Pull Visit - If V VISIT INSTRUCTIONS/V OB (GOALS and CARE PLANS are not visit driven)
  1. ... S (VISIT,VDT)=""
  1. ... I (TYPE="I")!(TYPE="O") S VISIT=$P(APIRES,U,9),VDT=$P(APIRES,U,4)
  1. ... S:TYPE="T" VISIT=$P(APIRES,U,10),VDT=$P(APIRES,U,5)
  1. ... I TYPE="E" D
  1. .... NEW VEDIEN
  1. .... S VEDIEN=$P(APIRES,U,6) Q:VEDIEN=""
  1. .... S VISIT=$$GET1^DIQ(9000010.16,VEDIEN_",",.03,"I")
  1. .... S VDT=$$GET1^DIQ(9000010,VISIT,.01,"I")
  1. ... ;
  1. ... ;Filter on visit
  1. ... ;BJPN*2.0*4;Do not filter on visit
  1. ... ;I ((TYPE="I")!(TYPE="T")!(TYPE="E")),VIEN]"",VIEN'=VISIT Q
  1. ... ;
  1. ... ;Note IEN (Pointer to entry)
  1. ... I TYPE'="E" S NIEN=$P(APIRES,U,2)
  1. ... E S NIEN=$P(APIRES,U,6)
  1. ... Q:NIEN=""
  1. ... ;
  1. ... ;Pull Definitive EDD
  1. ... S DEDD=$$GET1^DIQ(90680.01,PIPIEN_",",.09,"I")
  1. ... S X1=DEDD,X2=-280 D C^%DTC S BRNG=X
  1. ... S X1=DEDD,X2=NEDT D C^%DTC S ERNG=X
  1. ... ;
  1. ... ;Get note date/time entered and by - V VISIT INSTRUCTIONS
  1. ... S (DTTM,ILMBY)=""
  1. ... I TYPE="I" D
  1. .... S DTTM=$$GET1^DIQ(9000010.58,NIEN_",",1216,"I")
  1. .... S ILMBY=$$GET1^DIQ(9000010.58,NIEN_",",1217,"I")
  1. .... S SIGN=$P(APIRES,U,13)
  1. ... ;
  1. ... ;Get note date/time entered and by - V OB
  1. ... I TYPE="O" D
  1. .... S DTTM=$$GET1^DIQ(9000010.43,NIEN_",",1216,"I")
  1. .... S ILMBY=$$GET1^DIQ(9000010.43,NIEN_",",1217,"I")
  1. .... S SIGN=$P(APIRES,U,13)
  1. ... ;
  1. ... ;Get note date/time entered and by - CARE PLAN
  1. ... I TYPE'="I",TYPE'="O",TYPE'="T",TYPE'="E" D
  1. .... NEW IENS,DA
  1. .... S DA=$O(^AUPNCPL(NIEN,11,"B","A",""),-1) Q:DA=""
  1. .... S DA(1)=NIEN,IENS=$$IENS^DILF(.DA)
  1. .... S DTTM=$$GET1^DIQ(9000092.11,IENS,".03","I")
  1. .... S ILMBY=$$GET1^DIQ(9000092.11,IENS,".02","I")
  1. .... S SIGN=$P(APIRES,U,7)
  1. ... ;
  1. ... ;Get treatment plan date/time and by - V TREATMENT/REGIMEN
  1. ... I TYPE="T" D
  1. .... S DTTM=$$GET1^DIQ(9000010.61,NIEN_",",1216,"I")
  1. .... S ILMBY=$$GET1^DIQ(9000010.61,NIEN_",",1217,"I")
  1. ... ;
  1. ... ;Get education plan date/time and by - V PATIENT ED
  1. ... I TYPE="E" D
  1. .... S DTTM=$$GET1^DIQ(9000010.16,NIEN_",",1216,"I")
  1. .... S ILMBY=$$GET1^DIQ(9000010.16,NIEN_",",1217,"I")
  1. ... ;
  1. ... Q:DTTM=""
  1. ... S MDBY=$$GET1^DIQ(200,ILMBY_",",".01","E")
  1. ... ;
  1. ... ;Get Note
  1. ... I TYPE="T" S NOTE=$P($G(@TMP@(TYPE,PRBIEN,BGO,0)),U,14)
  1. ... E I TYPE="E" S NOTE=$P(APIRES,U,2)
  1. ... E D
  1. .... S NOTE=""
  1. .... NEW NIEN
  1. .... S NIEN=0 F S NIEN=$O(@TMP@(TYPE,PRBIEN,BGO,NIEN)) Q:NIEN="" D
  1. ..... NEW NNT,L
  1. ..... S NNT=$P($G(@TMP@(TYPE,PRBIEN,BGO,NIEN)),U,2)
  1. ..... S L=$E(NOTE,$L(NOTE))
  1. ..... S NOTE=NOTE_$S(NOTE]"":$C(13)_$C(10),1:"")_NNT
  1. ... Q:NOTE=""
  1. ... ;
  1. ... ;Note Status
  1. ... S NSTS="A"
  1. ... I DEDD]"",DTTM'<BRNG,DTTM'>ERNG S NSTS="C"
  1. ... I ((TYPE="G")!(TYPE="C")),$P(APIRES,U,6)="A" S NSTS="C"
  1. ... ;
  1. ... ;Set Inactive Goals/Care Plans
  1. ... S ACT=""
  1. ... I ((TYPE="G")!(TYPE="C")),$P(APIRES,U,6)'="A" S ACT="(i) ",NSTS="A"
  1. ... ;
  1. ... ;Determined signed/unsigned
  1. ... S SIGN=$S(TYPE="T":"",SIGN]"":"S",1:"U")
  1. ... ;
  1. ... ;Set up record
  1. ... S NOTES=NOTES_$S(NOTES]"":C8,1:"")_$S(TYPE="E":"T",1:TYPE)_C9_NIEN_C9_VISIT_C9_VDT_C9_NSTS_C9_$$FMTE^BJPNPRL($P(DTTM,"."),"5ZD")_C9_MDBY_C9_ACT_NOTE_C9_ILMBY_C9_SIGN
  1. . ;
  1. . ;Log entry
  1. . S II=II+1,@DATA@(II)=PIPIEN_U_PRBIEN_U_U_NOTES_$C(30)
  1. ;
  1. XNOTES S II=II+1,@DATA@(II)=$C(31)
  1. Q
  1. ;
  1. SCHK(DATA,PRIEN,EXCVIEN) ;EP - BJPN CHECK PRB STATUS
  1. ;
  1. ;This RPC accepts an IPL problem IEN and returns whether the scope can be changed.
  1. ;The scope can only be changed to prior if there is no VI, OB, TR, ED for the current
  1. ;pregnancy.
  1. ;
  1. ;Input: PRIEN - Problem IEN
  1. ; EXCVIEN - Exclude VIEN in POV check
  1. ;
  1. NEW UID,II,DEL,CSCP,CDEL,DFN,TMP,BGO,API,GGO,CGO,CPGSTS,NEDT,BRNG,ERNG,DEDD
  1. NEW VGO,VOB,VTR,VED,VTYPE,APIRES,PIPIEN,X,SIEN,STATUS,RET,NIEN,PIEN
  1. ;
  1. S UID=$S($G(ZTSK):"Z"_ZTSK,1:$J)
  1. S DATA=$NA(^TMP("BJPNGNOT",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^BJPNGNOT D UNWIND^%ZTER" ; SAC 2009 2.2.3.17
  1. ;
  1. ;Verify PRIEN was entered
  1. I $G(PRIEN)="" G XSCHK
  1. S EXCVIEN=$G(EXCVIEN)
  1. ;
  1. S DFN=$$GET1^DIQ(9000011,PRIEN_",",.02,"I")
  1. ;
  1. ;Preset to yes
  1. S CSCP="Y",CDEL="Y^"
  1. ;Set up Header
  1. S @DATA@(II)="T00001ALLOW_PRIOR^T00001CAN_DELETE^T01024CANNOT_DELETE_REASON"_$C(30)
  1. ;
  1. ;Check if problem deleted
  1. S DEL=$$GET1^DIQ(9000011,PRIEN_",",2.02,"I") I DEL]"" S II=II+1,@DATA@(II)="^^Problem has already been deleted"_$C(30) G XSCHK
  1. ;
  1. ;Definitive EDD date range check
  1. D GETPAR^CIAVMRPC(.NEDT,"BJPN POST DEDD DAYS","SYS",1,"I","")
  1. ;
  1. ;If blank default to 70
  1. I +$G(NEDT)<1 S NEDT=70
  1. ;
  1. ;Pull the PIPIEN and DEDD, Pregnancy Window
  1. S (DEDD,BRNG,ERNG,PIPIEN)=""
  1. S PIEN="" F S PIEN=$O(^BJPNPL("E",PRIEN,PIEN),-1) Q:PIEN="" D I PIPIEN]"" Q
  1. . Q:$$GET1^DIQ(90680.01,PIEN_",",2.01,"I")]"" ;Exclude deletes
  1. . S PIPIEN=PIEN
  1. ;
  1. I PIPIEN]"" D
  1. . NEW X1,X2,X
  1. . S DEDD=$$GET1^DIQ(90680.01,PIPIEN_",",.09,"I")
  1. . S X1=DEDD,X2=-280 D C^%DTC S BRNG=X
  1. . S X1=DEDD,X2=NEDT D C^%DTC S ERNG=X
  1. ;
  1. ;The following code was adapted from CHK^BGOPROB2. Rather than make that call it was placed here
  1. ;so that extra code could be inserted to check for VI/OB in the pregnancy window
  1. ;
  1. ;CHK(RET,PRIEN) ;Check to see if it is OK to delete a problem
  1. ;Check and see if there are any V Care Plan entries for this problem
  1. ;If there are, the problem cannot be deleted Patch 13&14
  1. S RET=1
  1. I +$O(^AUPNPROB(+PRIEN,14,"B",0))!(+$O(^AUPNPROB(+PRIEN,15,"B",0))) D
  1. . NEW PTTYP
  1. . ;
  1. . S CDEL="^Problem has been used for a visit and cannot be deleted. Check Problem Details.",RET=-1
  1. . ;
  1. . F PTTYP=14,15 D Q:CSCP=""
  1. .. NEW VIEN
  1. .. ;
  1. .. ;Loop through visits on problem for I/O types
  1. .. S VIEN="" F S VIEN=$O(^AUPNPROB(+PRIEN,PTTYP,"B",VIEN)) Q:VIEN="" D I CSCP="" Q
  1. ... ;
  1. ... ;Filter out visit if it was just unchecked
  1. ... I EXCVIEN>0,EXCVIEN=VIEN Q
  1. ... ;
  1. ... NEW NSTS,DTTM
  1. ... ;Check if POV in pregnancy window
  1. ... S NSTS="A"
  1. ... S DTTM=$$GET1^DIQ(9000010,VIEN,".01","I")
  1. ... I DEDD]"",DTTM'<BRNG,DTTM'>ERNG S NSTS="C"
  1. ... I NSTS="C" S CSCP=""
  1. ;
  1. ;Look for care plan or Goal
  1. S X=0 I RET=1 F S X=$O(^AUPNCPL("B",+PRIEN,X)) Q:X=""!(+RET<0) D
  1. . S SIEN=$C(0) S SIEN=$O(^AUPNCPL(X,11,SIEN),-1)
  1. . S STATUS=$P($G(^AUPNCPL(X,11,SIEN,0)),U,1)
  1. . I STATUS'="E" S CDEL="^Care Plan entries are stored. Check Problem Details. Problem cannot be deleted",RET=-1
  1. ;
  1. ;Look for visit instructions
  1. S NIEN=0 F S NIEN=$O(^AUPNVVI("B",+PRIEN,NIEN)) Q:NIEN=""!(CSCP="") D
  1. . NEW NSTS,DTTM
  1. . I $$GET1^DIQ(9000010.58,X,.06,"I")=1 Q
  1. . I RET=1 S CDEL="^Visit instructions are stored. Check Problem Details. Problem cannot be deleted",RET=-1
  1. . ;
  1. . S NSTS="A"
  1. . S DTTM=$$GET1^DIQ(9000010.58,NIEN_",",1216,"I")
  1. . I DEDD]"",DTTM'<BRNG,DTTM'>ERNG S NSTS="C"
  1. . I NSTS="C" S CSCP=""
  1. ;
  1. ;Look for OB notes
  1. I CSCP="Y" S NIEN=0 F S NIEN=$O(^AUPNVOB("B",+PRIEN,NIEN)) Q:NIEN=""!(CSCP="") D
  1. . NEW NSTS,DTTM
  1. . I $$GET1^DIQ(9000010.43,NIEN,.06,"I")=1 Q
  1. . I RET=1 S CDEL="^OB notes are stored. Check Problem Details. Problem cannot be deleted",RET=-1
  1. . ;
  1. . S NSTS="A"
  1. . S DTTM=$$GET1^DIQ(9000010.43,NIEN_",",1216,"I")
  1. . I DEDD]"",DTTM'<BRNG,DTTM'>ERNG S NSTS="C"
  1. . I NSTS="C" S CSCP=""
  1. ;
  1. S II=II+1,@DATA@(II)=CSCP_U_CDEL_$C(30)
  1. ;
  1. XSCHK S II=II+1,@DATA@(II)=$C(31)
  1. Q
  1. ;
  1. LVI(PRBIEN,TMP,VGO,BRNG,CDEL) ;Return latest visit instruction
  1. ;
  1. ;Since an instruction is on file, cannot delete
  1. S CDEL=""
  1. ;
  1. NEW INST,ND,BY,WHEN,NIEN,DTTM
  1. S INST=""
  1. S ND=$G(@TMP@("I",PRBIEN,VGO,0))
  1. S BY=$P(ND,U,12)
  1. S WHEN=$P(ND,U,8)
  1. S NIEN=$P(ND,U,2)
  1. S DTTM=$$GET1^DIQ(9000010.58,NIEN_",",1216,"I")
  1. I DTTM'<BRNG D
  1. . S INST=$P($G(@TMP@("I",PRBIEN,VGO,1)),U,2)
  1. . I INST]"",BY]"" S INST=INST_$C(13)_$C(10)_"Modified by: "_BY_" "_WHEN
  1. Q INST
  1. ;
  1. LOB(PRBIEN,TMP,VOB,BRNG,CDEL) ;Return latest OB Note
  1. ;
  1. ;Since an OB is on file, cannot delete
  1. S CDEL=""
  1. ;
  1. NEW OB,ND,BY,WHEN,NIEN,DTTM
  1. S OB=""
  1. S ND=$G(@TMP@("O",PRBIEN,VOB,0))
  1. S BY=$P(ND,U,12)
  1. S WHEN=$P(ND,U,8)
  1. S NIEN=$P(ND,U,2)
  1. S DTTM=$$GET1^DIQ(9000010.43,NIEN_",",1216,"I")
  1. I DTTM'<BRNG D
  1. . S OB=$P($G(@TMP@("O",PRBIEN,VOB,1)),U,2)
  1. . I OB]"",BY]"" S OB=OB_$C(13)_$C(10)_"Modified by: "_BY_" "_WHEN
  1. Q OB
  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