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

BJPN20P1.m

Go to the documentation of this file.
  1. BJPN20P1 ;GDIT/HS/BEE-Prenatal Care Module 2.0 Post Install (Cont.) ; 08 May 2012 12:00 PM
  1. ;;2.0;PRENATAL CARE MODULE;;Feb 24, 2015;Build 63
  1. ;
  1. Q
  1. ;
  1. VOB(BJPNPL,PRBIEN,NEWPRB) ;Copy Care Plan Notes to Visit Instructions, POV info, auditing
  1. ;
  1. I $G(BJPNPL)="" Q
  1. ;
  1. NEW VBIEN,HIST
  1. ;
  1. ;Loop through VOB entries for PIP problem
  1. S VBIEN="" F S VBIEN=$O(^AUPNVOB("B",BJPNPL,VBIEN)) Q:VBIEN="" D
  1. . ;
  1. . NEW NTIEN,VIEN,DFN,VDT,EVD,EVD,EPRV,LGIEN,SC,SCND,DA,IENS,VALUE,CHGIEN,AUD,PBAUD,PAUD
  1. . NEW LMDT,LMBY,ENDT,ENBY,INACTIVE,ACTIVE,BPIEN
  1. . ;
  1. . ;Retrieve patient/visit info
  1. . S VIEN=$$GET1^DIQ(9000010.43,VBIEN_",",".03","I") Q:VIEN=""
  1. . S DFN=$$GET1^DIQ(9000010.43,VBIEN_",",".02","I") Q:DFN=""
  1. . S EVD=$$GET1^DIQ(9000010.43,VBIEN_",",1201,"I")
  1. . S:EVD="" EVD=$$GET1^DIQ(9000010,VIEN_",",".01","I")
  1. . S EPRV=$$GET1^DIQ(9000010.43,VBIEN_",",1204,"I")
  1. . ;
  1. . ;Look for notes
  1. . S NTIEN=0 F S NTIEN=$O(^AUPNVOB(VBIEN,21,NTIEN)) Q:'NTIEN D
  1. .. NEW RET,INP,INSTR,DA,IENS,NTDT,NTPV,VVI,EIE,EIEO,ON,BY
  1. .. ;
  1. .. ;Pull info for each note
  1. .. S DA(1)=VBIEN,DA=NTIEN,IENS=$$IENS^DILF(.DA)
  1. .. S NTDT=$$GET1^DIQ(9000010.431,IENS,".02","I") S:NTDT="" NTDT=EVD ;Date
  1. .. S NTPV=$$GET1^DIQ(9000010.431,IENS,".03","I") S:NTPV="" NTPV=EPRV ;Provider
  1. .. S INSTR(0)=$$GET1^DIQ(9000010.431,IENS,".01","I") Q:INSTR(0)=""
  1. .. S INP=U_VIEN_U_PRBIEN_U_DFN_U_NTDT_U_NTPV
  1. .. ;
  1. .. ;API Call to add instruction
  1. .. ;INP = VVI IEN [1] ^ Visit IEN [2] ^ Problem IEN [3] ^ Patient IEN [4]^ Evnt Dt [5] ^ Provider [6]
  1. .. ;INSTR(N)= Array of instructions
  1. .. ;
  1. .. ;Make the API call to add
  1. .. D SET^BJPN20P1(.RET,INP,.INSTR)
  1. .. I '+RET Q
  1. .. S VVI=+RET
  1. .. ;
  1. .. ;Now sign the instruction
  1. .. S RET="" D SIGN^BJPN20P1(.RET,VVI,NTPV,NTDT)
  1. .. ;
  1. .. ;Now see if instruction needs deleted
  1. .. ;
  1. .. S EIE=$$GET1^DIQ(9000010.431,IENS,"2.03","I") Q:EIE=""
  1. .. S EIEO=$$GET1^DIQ(9000010.431,IENS,"2.04","I")
  1. .. S BY=$$GET1^DIQ(9000010.431,IENS,"2.01","I")
  1. .. S ON=$$GET1^DIQ(9000010.431,IENS,"2.02","I")
  1. .. ;
  1. .. ;API Call to enter in error
  1. .. ;INP= Visit instruction ien [1] ^ Reason for eie [2] ^ comment if other [3]
  1. .. ;EIE(RET,INP) ;Mark an entry entered in error
  1. .. S INP=VVI_U_EIE_U_EIEO_U_BY_U_ON
  1. .. D EIE^BJPN20P1(.RET,INP)
  1. . ;
  1. . ;Get the log type
  1. . S VALUE=$P($G(^AUPNVOB(VBIEN,22,1,0)),U,2)
  1. . ;
  1. . ;Process Problem Adds
  1. . S PBAUD=0 I VALUE="Added Problem To PIP" S PBAUD=1
  1. . ;
  1. . ;Handle POV updates/removes
  1. . ;
  1. . ;Determine service category and which node to use
  1. . S SC=$$GET1^DIQ(9000010,VIEN_",",".07","I") Q:SC=""
  1. . S SCND=14 S:SC="H" SCND=15
  1. . S DA(1)=VBIEN,DA=1,IENS=$$IENS^DILF(.DA)
  1. . ;
  1. . ;Set the POV
  1. . I VALUE="Set Problem As POV For Visit" D
  1. .. ;Add POV to the problem multiple
  1. .. Q:PRBIEN=""
  1. .. Q:$D(^AUPNPROB(PRBIEN,SCND,"B",VIEN)) ;Already set
  1. .. N PRIEN,FDA,IEN,ERR
  1. .. S PRIEN="+1,"_PRBIEN_","
  1. .. S FDA("9000011."_SCND,PRIEN,.01)=VIEN
  1. .. D UPDATE^DIE(,"FDA","IEN","ERR")
  1. . ;
  1. . ;Remove the POV
  1. . I VALUE="Removed Problem As POV For Visit" D
  1. .. N IEN,FDA,OKAY,ERR
  1. .. Q:PRBIEN=""
  1. .. ;
  1. .. ;Skip entries set by IPL
  1. .. I $D(^TMP("BJPNCVVOB",$J,PRBIEN,SCND,VIEN)) Q
  1. .. ;
  1. .. ;Remove the entry
  1. .. S IEN="" S IEN=$O(^AUPNPROB(PRBIEN,SCND,"B",VIEN,IEN)) Q:'+IEN D
  1. .. S FDA("9000011."_SCND,IEN_","_PRBIEN_",",.01)="@"
  1. .. D UPDATE^DIE("","FDA","OKAY","ERR")
  1. . ;
  1. . ;Remove the problem from the PIP
  1. . I VALUE="Problem Deleted From PIP" S PBAUD=2
  1. . ;
  1. . ;Audit the entries
  1. . ;
  1. . ;Get Last Modified/Entered info
  1. . S LMDT=$$GET1^DIQ(9000010.43,VBIEN_",",1218,"I")
  1. . S LMBY=$$GET1^DIQ(9000010.43,VBIEN_",",1219,"I")
  1. . S ENDT=$$GET1^DIQ(9000010.43,VBIEN_",",1216,"I")
  1. . S ENBY=$$GET1^DIQ(9000010.43,VBIEN_",",1217,"I")
  1. . S AUD=ENDT_U_ENBY_U_LMDT_U_LMBY
  1. . ;
  1. . ;Get the pointer to the PIP
  1. . S BPIEN=$$GET1^DIQ(9000010.43,VBIEN_",",.01,"I")
  1. . ;
  1. . S CHGIEN=0 F S CHGIEN=$O(^AUPNVOB(VBIEN,22,CHGIEN)) Q:'CHGIEN D
  1. .. NEW NODE,XFLD
  1. .. S NODE=$G(^AUPNVOB(VBIEN,22,CHGIEN,0))
  1. .. I $P(NODE,U)="F" D
  1. ... NEW FLD,INVALUE,XNVALUE,IOVALUE,XOVALUE
  1. ... S (XFLD,FLD)=$P(NODE,U,2) Q:'+FLD
  1. ... I FLD[":" Q ;Skip note entries
  1. ... ;
  1. ... ;Get the new field values
  1. ... S INVALUE=$$GET1^DIQ(9000010.43,VBIEN,FLD,"I")
  1. ... S XNVALUE=$$GET1^DIQ(9000010.43,VBIEN,FLD,"E")
  1. ... ;Convert 9000010.43 field to 90680.01 field
  1. ... S FLD=$S(FLD=".06":".06",FLD=".11":".05",FLD=".08":".07",FLD=".09":".08",FLD=".1":".09",FLD=".12":".04",FLD=1218:"1.03",FLD=1219:"1.04",FLD=1216:"1.01",FLD="1217":"1.02",FLD=".05":".05",1:"")
  1. ... ;
  1. ... ;Convert SNOMED if needed
  1. ... I FLD=".04" S (INVALUE,XNVALUE)=$$GET1^DIQ(90680.02,INVALUE_",",".03","I")
  1. ... ;
  1. ... ;Skip provider text
  1. ... I XFLD=".07" Q
  1. ... ;
  1. ... I FLD="" Q
  1. ... ;
  1. ... ;Get the old field values
  1. ... S IOVALUE=$G(HIST(FLD,"I"))
  1. ... S XOVALUE=$G(HIST(FLD,"X"))
  1. ... ;
  1. ... ;Quit if field hasn't changed
  1. ... I IOVALUE=INVALUE,(+FLD<1.01)!(+FLD>1.04) Q
  1. ... ;
  1. ... ;Handling for change to inactive/active
  1. ... I FLD=".08",INVALUE'="A" S INACTIVE=1
  1. ... I FLD=".08",INVALUE="A" S ACTIVE=1
  1. ... ;
  1. ... ;Set up audit entries
  1. ... S AUD(FLD,"I")=IOVALUE_U_INVALUE
  1. ... S AUD(FLD,"X")=XOVALUE_U_XNVALUE
  1. ... ;
  1. ... ;If change in SNOMED, also save Concept ID
  1. ... I FLD=".04",NEWPRB D
  1. .... NEW CONCID
  1. .... S PAUD(80002,"I")=$G(HIST(80002,"I"))_U_INVALUE
  1. .... S PAUD(80002,"X")=$G(HIST(80002,"X"))_U_XNVALUE
  1. .... S HIST(80002,"I")=INVALUE
  1. .... S HIST(80002,"X")=XNVALUE
  1. .... S CONCID=$P($$DESC^BSTSAPI(INVALUE_"^^1"),U)
  1. .... I CONCID]"" D
  1. ..... S PAUD(80001,"I")=$G(HIST(80001,"I"))_U_CONCID
  1. ..... S PAUD(80001,"X")=$G(HIST(80001,"X"))_U_CONCID
  1. ..... S HIST(80001,"I")=CONCID
  1. ..... S HIST(80001,"X")=CONCID
  1. ... ;
  1. ... ;Update history with new values
  1. ... S HIST(FLD,"I")=INVALUE
  1. ... S HIST(FLD,"X")=XNVALUE
  1. . ;
  1. . ;Put in Add entry
  1. . I PBAUD=1 S AUD(".01","I")="^"_BPIEN,AUD(".01","X")="^"_BPIEN
  1. . ;
  1. . ;File PIP audit entries
  1. . I $D(AUD) D AUD^BJPN20AU(.AUD,"90680.01",BJPNPL)
  1. . ;
  1. . ;Manually update Last Modified information
  1. . I LMDT]"" S $P(^AUPNPROB(PRBIEN,0),U,3)=LMDT
  1. . I LMBY]"" S $P(^AUPNPROB(PRBIEN,0),U,14)=LMBY
  1. . I ENDT]"" S $P(^AUPNPROB(PRBIEN,0),U,8)=$P(ENDT,".")
  1. . I ENBY]"" S $P(^AUPNPROB(PRBIEN,1),U,3)=ENBY
  1. . ;
  1. . ;Update PIP info in BJPNPL
  1. . I +$G(PBAUD)!(+$G(INACTIVE))!(+$G(ACTIVE)) D
  1. .. ;
  1. .. NEW UPPIP,DA,DIC,DLAYGO,X,Y,%,ERROR,IENS
  1. .. S DA(1)=BJPNPL,DIC="^BJPNPL("_DA(1)_",5,",DLAYGO=90680.015,DIC(0)=""
  1. .. S X=$G(ENDT) S:X="" X=$G(LMDT)
  1. .. I X="" D NOW^%DTC S X=%
  1. .. K DO,DD D FILE^DICN
  1. .. I +Y<0 Q
  1. .. S DA(1)=BJPNPL,DA=+Y,IENS=$$IENS^DILF(.DA)
  1. .. S X=$G(ENBY) S:X="" X=$G(LMBY)
  1. .. S UPPIP(90680.015,IENS,".02")=$S(+$G(INACTIVE):0,1:1)
  1. .. I X]"" S UPPIP(90680.015,IENS,".03")=X
  1. .. D FILE^DIE("","UPPIP","ERROR")
  1. . ;
  1. . ;File IPL audit entry
  1. . I +$G(PBAUD)!($D(PAUD)>9) D
  1. .. NEW CDINFO
  1. .. S PAUD=ENDT_U_ENBY_U_LMDT_U_LMBY
  1. .. S PAUD(1.03,"I")=U_$P($G(AUD(1.02,"I")),U,2) ;Entered By - Internal
  1. .. S PAUD(1.03,"X")=U_$P($G(AUD(1.02,"X")),U,2) ;Entered By - External
  1. .. S PAUD(1.04,"I")=U_$P($G(AUD(1.02,"I")),U,2) ;Enc Provider - Internal
  1. .. S PAUD(1.04,"X")=U_$P($G(AUD(1.02,"X")),U,2) ;Enc Provider - External
  1. .. S PAUD(.14,"I")=U_$P($G(AUD(1.02,"I")),U,2) ;User Last Modified - Internal
  1. .. S PAUD(.14,"X")=U_$P($G(AUD(1.02,"X")),U,2) ;User Last Modified - External
  1. .. S PAUD(.03,"I")=U_$P($G(AUD(1.01,"I")),U,2) ;Date Last Modified - Internal
  1. .. S PAUD(.03,"X")=U_$P($G(AUD(1.01,"X")),U,2) ;Date Last Modified - External
  1. .. ;
  1. .. ;Save first problem entry
  1. .. I (+$G(PBAUD)=1) D
  1. ... S PAUD(.01,"I")=U_$P($G(^AUPNPROB(PRBIEN,0)),U) ;Prob Dx - Internal
  1. ... S CDINFO=$$ICDDX^AUPNVUTL($P(PAUD(.01,"I"),U,2),$P(PAUD(.03,"I"),U,2))
  1. ... I $P(CDINFO,U)>1 S PAUD(.01,"X")=U_$P(CDINFO,U,2) ;Prob Dx - External
  1. ... S PAUD(.08,"I")=U_$P($P($G(AUD(1.01,"I")),U,2),".") ;Date Entered - Internal
  1. ... S PAUD(.08,"X")=U_$P($P($G(AUD(1.01,"X")),U,2),"@") ;Date Entered - External
  1. ... S PAUD(.12,"I")=U_"E" ;Status - Internal
  1. ... S PAUD(.12,"X")=U_"EPISODIC" ;Status - External
  1. ... S PAUD(.19,"I")=U_"1" ;PIP
  1. ... S PAUD(.19,"X")=U_"YES, ACTIVE IN PIP" ;PIP - External
  1. .. ;
  1. .. ;Manually update the fields
  1. .. I LMDT]"" S $P(^AUPNPROB(PRBIEN,0),U,3)=LMDT
  1. .. I LMBY]"" S $P(^AUPNPROB(PRBIEN,0),U,14)=LMBY
  1. .. I ENDT]"" S $P(^AUPNPROB(PRBIEN,0),U,8)=$P(ENDT,".")
  1. .. I ENBY]"" S $P(^AUPNPROB(PRBIEN,1),U,3)=ENBY
  1. .. ;S $P(^AUPNPROB(PRBIEN,1),U,3)=$P($G(PAUD(1.03,"I")),U,2) ;Entered By
  1. .. ;S $P(^AUPNPROB(PRBIEN,1),U,4)=$P($G(PAUD(1.04,"I")),U,2) ;Enc Prov
  1. .. ;S $P(^AUPNPROB(PRBIEN,0),U,14)=$P($G(PAUD(.14,"I")),U,2) ;User Last Modified
  1. .. ;S $P(^AUPNPROB(PRBIEN,0),U,3)=$P($G(PAUD(.03,"I")),U,2) ;Date Last Modified
  1. .. ;S $P(^AUPNPROB(PRBIEN,0),U,8)=$P($G(PAUD(.08,"I")),U,2) ;Date Entered
  1. .. ;
  1. .. ;Audit the entries
  1. .. D AUD^BJPN20AU(.PAUD,"9000011",PRBIEN)
  1. . ;
  1. . ;Handle PIP problem deletes - remove PIP value and audit
  1. . I $G(PBAUD)=2 D
  1. .. S PAUD(.14,"I")=U_$P($G(AUD(1.02,"I")),U,2) ;User Last Modified - Internal
  1. .. S PAUD(.14,"X")=U_$P($G(AUD(1.02,"X")),U,2) ;User Last Modified - External
  1. .. S PAUD(.03,"I")=U_$P($G(AUD(1.01,"I")),U,2) ;Date Last Modified - Internal
  1. .. S PAUD(.03,"X")=U_$P($G(AUD(1.01,"X")),U,2) ;Date Last Modified - External
  1. .. S PAUD(".19","I")="1^"
  1. .. S PAUD(".19","X")="YES, ACTIVE IN PIP^"
  1. .. ;
  1. .. ;Manually update PIP field
  1. .. S $P(^AUPNPROB(PRBIEN,0),U,19)=""
  1. .. ;
  1. .. ;Audit the entries
  1. .. D AUD^BJPN20AU(.PAUD,"9000011",PRBIEN)
  1. ;
  1. Q
  1. ;
  1. ;This call is based off the SET call in BGOVVI
  1. ;It overrides locked visit checking so older care plan notes can be converted
  1. ;into visit instructions.
  1. ;
  1. ;Set data into this file
  1. ;INP = VVI IEN [1] ^ Visit IEN [2] ^ Problem IEN [3] ^ Patient IEN [4]^ Evnt Dt [5] ^ Provider [6]
  1. ;INSTR(N)= Array of instructions
  1. SET(RET,INP,INSTR) ;EP
  1. N VFIEN,NEW,VIEN,PROB,EVDT,DFN,PRV,FDA,IEN,FNUM,VFNEW
  1. S FNUM=$$FNUM^BGOVVI
  1. S VFIEN=+INP
  1. I VFIEN="" S NEW=1
  1. S VFNEW='VFIEN
  1. S VIEN=$P(INP,U,2)
  1. S PROB=$P(INP,U,3)
  1. I 'PROB S RET="-1^No problem in input string" Q
  1. I 'VIEN S RET=$$ERR^BGOUTL(1008) Q
  1. S DFN=$P(INP,U,4)
  1. S EVDT=$P(INP,U,5)
  1. I EVDT="" S EVDT=$$NOW^XLFDT
  1. S PRV=$P(INP,U,6) I PRV="" S PRV=DUZ
  1. ;Do not check visit status
  1. ;S RET=$$CHKVISIT^BGOUTL(VIEN,DFN)
  1. ;Q:RET
  1. I 'VFIEN D Q:'VFIEN
  1. .D VFNEW^BGOUTL2(.RET,FNUM,PROB,VIEN)
  1. .S:RET>0 VFIEN=RET ;,RET=""
  1. S FDA=$NA(FDA(FNUM,VFIEN_","))
  1. S @FDA@(1201)=EVDT
  1. S @FDA@(1204)="`"_PRV
  1. I VFNEW D
  1. .S @FDA@(1216)="N"
  1. .S @FDA@(1217)="`"_PRV
  1. S @FDA@(1218)="N"
  1. S @FDA@(1219)="`"_PRV
  1. S RET=$$UPDATE^BGOUTL(.FDA,"E@")
  1. I RET,VFNEW,$$DELETE^BGOUTL(FNUM,VFIEN)
  1. Q:RET
  1. ;Add in the text of the item
  1. N VAL,ICNT,I
  1. S ICNT=0
  1. S I="" F S I=$O(INSTR(I)) Q:I="" D
  1. .S ICNT=ICNT+1
  1. .S VAL(ICNT,0)=$G(INSTR(I))
  1. D WP^DIE(9000010.58,VFIEN_",",1100,,"VAL")
  1. S RET=VFIEN
  1. ;
  1. ;Fix the last modified and entered dates
  1. I +VFIEN D
  1. . NEW AUPNVVI
  1. . S AUPNVVI(9000010.58,VFIEN_",",1218)=EVDT
  1. . S AUPNVVI(9000010.58,VFIEN_",",1219)=PRV
  1. . S AUPNVVI(9000010.58,VFIEN_",",1216)=EVDT
  1. . S AUPNVVI(9000010.58,VFIEN_",",1217)=PRV
  1. . D FILE^DIE("","AUPNVVI","ERROR")
  1. ;
  1. Q
  1. ;
  1. ;This call mimics the SIGN call in BGOVVI. It allows for the date to be passed in
  1. ;Mark record when signed
  1. SIGN(RET,VVII,BY,ONDT) ;EP
  1. N FDA,AIEN,ERR
  1. S RET="",ERR=""
  1. I $$GET1^DIQ(9000010.58,VVII,.05)'="" S RET="-1^Already signed" Q RET
  1. S AIEN=VVII_","
  1. S:$G(ONDT)="" ONDT=$$NOW^XLFDT
  1. S FDA(9000010.58,AIEN,.04)=BY
  1. S FDA(9000010.58,AIEN,.05)=ONDT
  1. D FILE^DIE("","FDA","ERR")
  1. ;
  1. ;Fix the last modified and entered dates
  1. I +AIEN D
  1. . NEW AUPNVVI
  1. . S AUPNVVI(9000010.58,AIEN_",",1218)=ONDT
  1. . S AUPNVVI(9000010.58,AIEN_",",1219)=BY
  1. . S AUPNVVI(9000010.58,AIEN_",",1216)=ONDT
  1. . S AUPNVVI(9000010.58,AIEN_",",1217)=BY
  1. . D FILE^DIE("","AUPNVVI","ERROR")
  1. I ERR S RET=-1_U_"Unable to sign Visit Instructions"
  1. Q RET
  1. ;
  1. ;This call mimics EIE in BGOVVI. It permits the user and dt to be passed in
  1. ;Input parameter
  1. ;INP= Visit instruction ien [1] ^ Reason for eie [2] ^ comment if other [3] ^ BY [4] ^ Date [5]
  1. EIE(RET,INP) ;Mark an entry entered in error
  1. N FNUM,IEN2,FDA,IEN,REASON,CMMT,IENS,RET,BY,ON
  1. S RET=""
  1. S IENS=$P(INP,U,1)
  1. S REASON=$P(INP,U,2)
  1. S CMMT=$P(INP,U,3)
  1. S BY=$P(INP,U,4) S:BY="" BY=DUZ
  1. S ON=$P(INP,U,5) S:ON="" ON=$$NOW^XLFDT()
  1. S FNUM=9000010.58
  1. S IEN2=IENS_","
  1. S FDA=$NA(FDA(FNUM,IEN2))
  1. S @FDA@(.06)=1
  1. S @FDA@(.07)=BY
  1. S @FDA@(.08)=ON
  1. S @FDA@(.08)=REASON
  1. S @FDA@(.09)=CMMT
  1. S RET=$$UPDATE^BGOUTL(.FDA,,.IEN)
  1. ;
  1. ;Fix the last modified and entered dates
  1. I +IEN2 D
  1. . NEW AUPNVVI
  1. . S AUPNVVI(9000010.58,IEN2_",",1218)=ON
  1. . S AUPNVVI(9000010.58,IEN2_",",1219)=BY
  1. . S AUPNVVI(9000010.58,IEN2_",",1216)=ON
  1. . S AUPNVVI(9000010.58,IEN2_",",1217)=BY
  1. . D FILE^DIE("","AUPNVVI","ERROR")
  1. ;
  1. Q