- GMPLSAVE ; ISL/MKB,KER,JER -- Save Problem List data ;08/02/12 08:47
- ;;2.0;Problem List;**26,31,35,37,38,36**;Aug 25, 1994;Build 65
- ;
- ; External References
- ; DBIA 3990 $$CODEN^ICDCODE
- ; DBIA 10018 ^DIE
- ; DBIA 10013 ^DIK
- ; DBIA 10013 IX1^DIK
- ; DBIA 10103 $$HTFM^XLFDT
- ;
- EN ; Save Changes made to Existing Problem
- N FLD,NOW,CHNGE,I,NIFN,TEXT,OLDTEXT,FAC,NODE,AUDITED,DR,DA,DIE,DIK,GMPICD,GMPBULL
- S:'GMPORIG(.01) GMPORIG(.01)=$$NOS^GMPLX
- S:'GMPFLD(.01) GMPFLD(.01)=$$NOS^GMPLX
- S GMPICD=$P($G(GMPFLD(.01)),U,2)
- S:$D(GMPFLD(.01)) GMPFLD(.01)=+GMPFLD(.01)
- S:$P(GMPFLD(.01),U)=-1 GMPFLD(.01)=$$NOS^GMPLX ;chk for error from ICD
- S:'GMPORIG(1.01) GMPORIG(1.01)="1^Unresolved"
- S:'GMPFLD(1.01) GMPFLD(1.01)="1^Unresolved"
- I $G(GMPFLD(1.01))["SNOMED CT" D
- . N SCTS,SCTC,SCTD,SCTT
- . S SCTS=GMPFLD(1.01)
- . S SCTT=$P($P(SCTS," (SNOMED CT "),U,2)
- . S SCTC=$P($P(SCTS,"SNOMED CT ",2),")"),GMPFLD(80001)=SCTC_U_SCTC
- . S SCTD=$$GETDES^LEXTRAN1("SCT",SCTT)
- . I +SCTD=1 S SCTD=$P(SCTD,U,2),GMPFLD(80002)=SCTD_U_SCTD
- . I (+$G(GMPFLD(.01))=+$$NOS^GMPLX) S GMPFLD(80005)="1^PENDING"
- I $G(GMPFLD(1.01))["VHAT" D
- . N VHATC,VHATD,VHATS,VHATT
- . S VHATS=GMPFLD(1.01)
- . S VHATT=$P($P(VHATS," (VHAT "),U,2)
- . S VHATC=$P($P(VHATS,"VHAT ",2),")")
- . S GMPFLD(80003)=VHATC_U_VHATC
- . S VHATD=$$GETDES^LEXTRAN1("VHAT",VHATT)
- . I +VHATD=1 S VHATD=$P(VHATD,U,2),GMPFLD(80004)=VHATD_U_VHATD
- S:'GMPFLD(.05) I=$P(GMPFLD(.05),U,2),GMPFLD(.05)=$$PROVNARR^GMPLX(I,+GMPFLD(1.01))
- S NOW=$$HTFM^XLFDT($H),AUDITED=0
- S DR="1.02////"_$S('$D(GMPLUSER):"T",1:GMPFLD(1.02))
- I GMPORIG(1.02)="T",GMPFLD(1.02)="P" D
- . S CHNGE=GMPIFN_"^1.02^"_NOW_U_DUZ_"^T^P^Verified^"_DUZ
- . D AUDIT^GMPLX(CHNGE,"")
- I $P($G(GMPORIG(.12)),U)="I",$P(GMPFLD(.12),U)="A" D REACTV S AUDITED=1
- I +$G(GMPORIG(1.01))'=(+GMPFLD(1.01)) D REFORM S AUDITED=1
- S GMPFLD(.01)=+GMPFLD(.01) ;to remove text left by ?? lex (~)
- I (+$G(GMPFLD(.01))'=+$$NOS^GMPLX),($G(GMPROV)=.5) S GMPFLD(80005)="2^COMPLETED"
- F FLD=.01,.05,.12,.13,1.01,1.05,1.06,1.07,1.08,1.09,1.1,1.11,1.12,1.13,1.14,1.15,1.16,1.17,1.18,80001,80002,80003,80004,80005 D
- . Q:'$D(GMPFLD(FLD)) Q:$P($G(GMPORIG(FLD)),U)=$P($G(GMPFLD(FLD)),U)
- . S DR=DR_";"_FLD_"////"_$S($P(GMPFLD(FLD),U)'="":$P(GMPFLD(FLD),U),1:"@")
- . Q:AUDITED S CHNGE=GMPIFN_U_FLD_U_NOW_U_DUZ_U_$P(GMPORIG(FLD),U)_U_$P(GMPFLD(FLD),U)_"^^"_+$G(GMPROV)
- . D AUDIT^GMPLX(CHNGE,"")
- S DA=GMPIFN,DIE="^AUPNPROB(" D ^DIE S GMPSAVED=1
- D COEXPRS(GMPIFN,GMPICD)
- I (GMPICD=$P($$NOS^GMPLX,U,2)),(+$P($G(GMPFLD(80001)),U)>0) D NTRTBULL(.GMPBULL,$P(GMPFLD(1.01),U,2),$P($G(GMPFLD(80001)),U,2),$G(GMPSRCH))
- NOTES ; Save Changes to Notes
- F I=0:0 S I=$O(GMPORIG(10,I)) Q:I'>0 I GMPORIG(10,I)'=GMPFLD(10,I) D
- . S NIFN=+GMPFLD(10,I),FAC=$P(GMPFLD(10,I),U,2),TEXT=$P(GMPFLD(10,I),U,3),OLDTEXT=$P(GMPORIG(10,I),U,3)
- . S NODE=$G(^AUPNPROB(GMPIFN,11,FAC,11,NIFN,0))
- . I TEXT'="" S $P(^AUPNPROB(GMPIFN,11,FAC,11,NIFN,0),U,3)=TEXT D
- .. I TEXT=OLDTEXT Q
- .. S CHNGE=GMPIFN_"^1101^"_NOW_U_DUZ_"^C^^Note Modified^"_+$G(GMPROV)
- . I TEXT=OLDTEXT Q
- . I TEXT="" S CHNGE=GMPIFN_"^1101^"_NOW_U_DUZ_"^A^^Deleted Note^"_+$G(GMPROV)
- . D AUDIT^GMPLX(CHNGE,NODE)
- . I TEXT="" D
- .. S DIK="^AUPNPROB("_GMPIFN_",11,"_FAC_",11,"
- .. S DA(2)=GMPIFN,DA(1)=FAC,DA=NIFN D ^DIK
- I $D(GMPFLD(10,"NEW"))>9 D NEWNOTE
- EXIT ; Quit Saving Changes
- D:$G(GMPSAVED) DTMOD^GMPLX(GMPIFN)
- Q
- ;
- REFORM ; Audit Entry that has been Reformulated
- S CHNGE=GMPIFN_"^1.01^"_NOW_U_DUZ_U_+GMPORIG(1.01)_U_+GMPFLD(1.01)_"^Reformulated^"_+$G(GMPROV)
- S NODE=$G(^AUPNPROB(GMPIFN,0))_U_$G(^AUPNPROB(GMPIFN,1))
- D AUDIT^GMPLX(CHNGE,NODE)
- Q
- ;
- REACTV ; Audit Entry that has been Reactivated
- S CHNGE=GMPIFN_"^.12^"_NOW_U_DUZ_"^I^A^Reactivated^"_+$G(GMPROV)
- S NODE=$G(^AUPNPROB(GMPIFN,0))_U_$G(^AUPNPROB(GMPIFN,1))
- D AUDIT^GMPLX(CHNGE,NODE)
- Q
- ;
- NEW ; Save Collected Values in new Problem Entry
- ; Output DA (left defined)
- N DATA,APCDLOOK,APCDALVR,NUM,I,DIK,GMPICD,GMPIFN,X
- S:'GMPFLD(.01) GMPFLD(.01)=$$NOS^GMPLX
- S:$P(+GMPFLD(.01),U)=-1 GMPFLD(.01)=$$NOS^GMPLX ;chk for error from ICD
- S GMPICD=$P(GMPFLD(.01),U,2)
- S GMPFLD(.01)=+GMPFLD(.01) ;to remove text left by ?? lex (~)
- S:'GMPFLD(1.01) GMPFLD(1.01)="1^Unresolved"
- S:'GMPFLD(.05) X=$P(GMPFLD(.05),U,2),GMPFLD(.05)=$$PROVNARR^GMPLX(X,+GMPFLD(1.01))
- S:$G(GMPFLD(1.09))']"" GMPFLD(1.09)=$$DT^XLFDT
- I $G(GMPFLD(1.01))["SNOMED CT" D
- . N SCTC,SCTD,SCTS,SCTT
- . S SCTS=GMPFLD(1.01)
- . S SCTT=$P($P(SCTS," (SNOMED CT "),U,2)
- . S SCTC=$P($P(SCTS,"SNOMED CT ",2),")")
- . S GMPFLD(80001)=SCTC_U_SCTC
- . S SCTD=$$GETDES^LEXTRAN1("SCT",SCTT)
- . I +SCTD=1 S SCTD=$P(SCTD,U,2),GMPFLD(80002)=SCTD_U_SCTD
- I $G(GMPFLD(1.01))["VHAT" D
- . N VHATC,VHATD,VHATS,VHATT
- . S VHATS=GMPFLD(1.01)
- . S VHATT=$P($P(VHATS," (VHAT "),U,2)
- . S VHATC=$P($P(VHATS,"VHAT ",2),")")
- . S GMPFLD(80003)=VHATC_U_VHATC
- . S VHATD=$$GETDES^LEXTRAN1("VHAT",VHATT)
- . I +VHATD=1 S VHATD=$P(VHATD,U,2),GMPFLD(80004)=VHATD_U_VHATD
- S DA=$$NEWPROB(+GMPFLD(.01),+GMPDFN) Q:DA'>0
- S NUM=$$NEXTNMBR(+GMPDFN,+GMPVAMC),GMPSAVED=1 S:'NUM NUM=""
- ; Set Node 0
- S DATA=^AUPNPROB(DA,0)_U_DT_"^^"_$P(GMPFLD(.05),U)_U_+GMPVAMC_U_+NUM_U_DT_"^^^^"_$P(GMPFLD(.12),U)_U_$P(GMPFLD(.13),U)
- S ^AUPNPROB(DA,0)=DATA
- ; Set Node 1
- S DATA=$P(GMPFLD(1.01),U) F I=1.02:.01:1.18 S DATA=DATA_U_$S($P($G(GMPFLD(+I)),U)="@":"",1:$P($G(GMPFLD(+I)),U))
- S ^AUPNPROB(DA,1)=DATA
- ; Set Node 800
- I $S($L($P($G(GMPFLD(80001)),U)):1,$L($P($G(GMPFLD(80003)),U)):1,$L($P($G(GMPFLD(80004)),U)):1,$L($P($G(GMPFLD(80005)),U)):1,1:0) D
- . I $P($G(GMPFLD(.01)),U)=$P($$NOS^GMPLX,U) S GMPFLD(80005)="1^PENDING"
- . S DATA=$P($G(GMPFLD(80001)),U)_U_$P($G(GMPFLD(80002)),U)_U_$P($G(GMPFLD(80003)),U)_U_$P($G(GMPFLD(80004)),U)_U_$P($G(GMPFLD(80005)),U)
- . S ^AUPNPROB(DA,800)=DATA
- ; Set Node 801
- I $S($L($P($G(GMPFLD(80101)),U)):1,$L($P($G(GMPFLD(80102)),U)):1,1:0) D
- . S DATA=$P($G(GMPFLD(80101)),U)_U_$P($G(GMPFLD(80102)),U)
- . S ^AUPNPROB(DA,801)=DATA
- ; Handle multiple ICDs
- D COEXPRS(DA,GMPICD)
- ; Set X-Refs
- S DIK="^AUPNPROB(",(APCDLOOK,APCDALVR)=1 D IX1^DIK
- I $D(GMPFLD(10,"NEW"))>9 S GMPIFN=DA D NEWNOTE
- I (GMPICD=$P($$NOS^GMPLX,U,2)),(+$P($G(GMPFLD(80001)),U)>0) D NTRTBULL(.GMPBULL,$P(GMPFLD(1.01),U,2),$P($G(GMPFLD(80001)),U,2),$G(GMPSRCH))
- ; broadcast event
- N DFN S GMPIFN=DA,DFN=+GMPDFN
- S X=+$O(^ORD(101,"B","GMPL EVENT",0))_";ORD(101," D:X EN1^XQOR
- Q
- ;
- NEWPROB(ICD,DFN) ; Creates New Problem Entry in file #9000011
- N I,HDR,LAST,TOTAL,DA
- L +^AUPNPROB(0):1 I '$T D Q -1
- . W !!,"Someone else is currently editing this file."
- . W !,"Please try again later.",!
- S HDR=$G(^AUPNPROB(0)) Q:HDR="" -1
- S LAST=$P(HDR,U,3),TOTAL=$P(HDR,U,4)
- F I=(LAST+1):1 Q:'$D(^AUPNPROB(I,0))
- S DA=I,^AUPNPROB(DA,0)=ICD_U_DFN
- S ^AUPNPROB("B",ICD,DA)="",^AUPNPROB("AC",DFN,DA)=""
- S $P(^AUPNPROB(0),U,3,4)=DA_U_(TOTAL+1) L -^AUPNPROB(0)
- Q DA
- ;
- NEWNOTE ; Creates New Note Entries for Problem
- ; Requires GMPIFN Pointer to Problem
- ; GMPROV Current Provider
- ; GMPVAMC Facility
- N HDR,LAST,TOTAL,I,FAC,NIFN
- L +^AUPNPROB(GMPIFN,11):1 I '$T Q
- S FAC=+$O(^AUPNPROB(GMPIFN,11,"B",GMPVAMC,0)) I 'FAC D
- . S:'$D(^AUPNPROB(GMPIFN,11,0)) ^(0)="^9000011.11PA^^"
- . S HDR=^AUPNPROB(GMPIFN,11,0),LAST=$P(HDR,U,3),TOTAL=$P(HDR,U,4)
- . F I=(LAST+1):1 Q:'$D(^AUPNPROB(GMPIFN,11,I,0))
- . S ^AUPNPROB(GMPIFN,11,I,0)=GMPVAMC,^AUPNPROB(GMPIFN,11,"B",GMPVAMC,I)=""
- . S FAC=I,$P(^AUPNPROB(GMPIFN,11,0),U,3,4)=FAC_U_(TOTAL+1)
- I FAC'>0 G NNQ
- NN1 ; Get New Note
- S:'$D(^AUPNPROB(GMPIFN,11,FAC,11,0)) ^(0)="^9000011.1111IA^^"
- S HDR=^AUPNPROB(GMPIFN,11,FAC,11,0),LAST=$P(HDR,U,3),TOTAL=$P(HDR,U,4)
- F I=(LAST+1):1 Q:'$D(^AUPNPROB(GMPIFN,11,FAC,11,I,0))
- S NIFN=I
- F I=0:0 S I=$O(GMPFLD(10,"NEW",I)) Q:I'>0 D
- . S ^AUPNPROB(GMPIFN,11,FAC,11,NIFN,0)=NIFN_"^^"_GMPFLD(10,"NEW",I)_"^A^"_DT_U_+$G(GMPROV)
- . S ^AUPNPROB(GMPIFN,11,FAC,11,"B",NIFN,NIFN)=""
- . S TOTAL=TOTAL+1,LAST=NIFN,NIFN=NIFN+1
- S $P(^AUPNPROB(GMPIFN,11,FAC,11,0),U,3,4)=LAST_U_TOTAL
- NNQ ; Quit Getting New Notes
- L -^AUPNPROB(GMPIFN,11)
- Q
- ;
- NEXTNMBR(DFN,VAMC) ; Returns Next Available Problem Number
- N I,J,NUM S NUM=1,I="" I '$D(^AUPNPROB("AA",DFN,VAMC)) Q NUM
- F S I=$O(^AUPNPROB("AA",DFN,VAMC,I)) Q:I="" S J=$E(I,2,999),NUM=+J
- S NUM=NUM+1
- Q NUM
- NTRTBULL(GMPY,GMPTERM,GMPSCT,GMPSRCH) ; Send NTRT Request bulletin to NTRT mailgroup
- N GMPSITE,GMPSVC,GMPUSER,GMPWRAP,XMBNM,XMDUZ,XMY,XMB,XMZ S GMPSITE=$$SITE^VASITE
- I '$L(GMPTERM) S GMPY="0^Empty String - a valid term must be sent." Q
- I '+$G(DUZ)!'$D(^VA(200,+$G(DUZ))) S GMPY="0^A valid user must be identified." Q
- I '+$G(GMPSCT) S GMPSCT="N/A"
- D USERINFO^XUSRB2(.GMPUSER) S GMPSVC=$G(GMPUSER(5))
- S XMB="GMPL PROBLEM NTRT BULLETIN"
- S XMDUZ="GMPL PROBLEM NTRT BULLETIN"
- S XMY("G.PROBLEM LIST NTRT@forum.domain.ext")=""
- S GMPWRAP=$$WRAP^GMPLX1(GMPTERM,53)
- S XMB(1)=GMPTERM
- S XMB(2)=GMPSCT
- S XMB(3)=$$GET1^DIQ(200,DUZ_",",.01)
- S XMB(4)=$$FMTE^XLFDT($E(($$NOW^XLFDT),1,12),2)
- S XMB(5)=GMPSVC
- S XMB(6)=$P(GMPSITE,U,2)_" ("_$P(GMPSITE,U,3)_")"
- S XMB(7)=$G(GMPSRCH)
- D ^XMB,KILL^XM S GMPY=1
- Q
- COEXPRS(GMPDA,GMPICD) ; File multiple ICDs
- N GMPC,GMPI,GMPN,GMPORIG,NOW,GMPOCNT,GMPNCNT,CODSYS S NOW=$$NOW^XLFDT
- ; Initialize CODSYS to "ICD" when ICD-10-CM is implemented, new codes will get "D10"
- S CODSYS="ICD"
- ; Merge previous entries into local GMPORIG array
- I $D(^AUPNPROB(GMPDA,803)) M GMPORIG=^AUPNPROB(GMPDA,803)
- ; If not sparce ICD string, remove previous entries & initialize sub-file root
- I '$$SPRCICD(GMPICD) K ^AUPNPROB(GMPDA,803) S ^AUPNPROB(GMPDA,803,0)="^9000011.803PA^^"
- ; Update sub-file
- S GMPC=0,GMPN=$L(GMPICD,"/")
- F GMPI=2:1:GMPN D
- . N GMPCODE,GMPDA1,GMPD30,GMPNOS S GMPNOS=$$NOS^GMPLX
- . S GMPDA1=GMPI-1,GMPC=GMPC+1,GMPCODE=$P(GMPICD,"/",GMPI) Q:(GMPCODE="")
- . S GMPD30=$G(^AUPNPROB(GMPDA,803,GMPDA1,0))
- . I (GMPCODE=$P(GMPNOS,U,2)),($P(GMPD30,U)]""),($P(GMPD30,U)'=$P(GMPNOS,U,2)) Q
- . S ^AUPNPROB(GMPDA,803,GMPDA1,0)=GMPCODE_U_CODSYS_U_DT,^AUPNPROB(GMPDA,803,"B",GMPCODE,GMPDA1)=""
- . S $P(^AUPNPROB(GMPDA,803,0),U,3,4)=GMPDA1_U_GMPC
- I '$D(GMPORIG) Q
- S GMPOCNT=+$P($G(GMPORIG(0)),U,4),GMPNCNT=+$P($G(^AUPNPROB(GMPDA,803,0)),U,4)
- ; Iterate through GMPORIG and audit changes
- S GMPI=0 F S GMPI=$O(GMPORIG(GMPI)) Q:+GMPI'>0 D
- . N CHANGE,OLD0,NEW0
- . S OLD0=$G(GMPORIG(GMPI,0)),NEW0=$G(^AUPNPROB(GMPDA,803,GMPI,0))
- . I $P(NEW0,U)=$P(OLD0,U) Q ; no substantive change change
- . I NEW0'="" S CHANGE=GMPDA_"^302^"_NOW_U_DUZ_U_$P(OLD0,U)_U_$P(NEW0,U)_"^SNOMED CT Concept re-mapped by Enterprise Terminology Service^"_+$G(GMPROV)
- . E S CHANGE=GMPDA_"^302^"_NOW_U_DUZ_U_$P(OLD0,U)_U_"^Deleted Secondary Dx for SNOMED CT Concept^"_+$G(GMPROV)
- . D AUDIT^GMPLX(CHANGE,OLD0)
- I GMPNCNT>GMPOCNT D
- . S GMPI=GMPOCNT
- . F S GMPI=$O(^AUPNPROB(GMPDA,803,GMPI)) Q:+GMPI'>0 D
- . . N NEW0,CHANGE S NEW0=$G(^AUPNPROB(GMPDA,803,GMPI,0))
- . . S CHANGE=GMPDA_"^302^"_NOW_U_DUZ_U_U_$P(NEW0,U)_"^Added as Secondary Dx for SNOMED CT Concept^"_+$G(GMPROV)
- . . D AUDIT^GMPLX(CHANGE,"")
- Q
- SPRCICD(GMPICD) ; Is ICD string sparce (i.e., called from SDS API w/order > 2)?
- N GMPI,GMPY S GMPY=0
- F GMPI=2:1:$L(GMPICD,"/") I $S($P(GMPICD,"/",GMPI)="":1,$P(GMPICD,"/",GMPI)=$P($$NOS^GMPLX,U,2):1,1:0) S GMPY=1
- Q GMPY
- GMPLSAVE ; ISL/MKB,KER,JER -- Save Problem List data ;08/02/12 08:47
- +1 ;;2.0;Problem List;**26,31,35,37,38,36**;Aug 25, 1994;Build 65
- +2 ;
- +3 ; External References
- +4 ; DBIA 3990 $$CODEN^ICDCODE
- +5 ; DBIA 10018 ^DIE
- +6 ; DBIA 10013 ^DIK
- +7 ; DBIA 10013 IX1^DIK
- +8 ; DBIA 10103 $$HTFM^XLFDT
- +9 ;
- EN ; Save Changes made to Existing Problem
- +1 NEW FLD,NOW,CHNGE,I,NIFN,TEXT,OLDTEXT,FAC,NODE,AUDITED,DR,DA,DIE,DIK,GMPICD,GMPBULL
- +2 IF 'GMPORIG(.01)
- SET GMPORIG(.01)=$$NOS^GMPLX
- +3 IF 'GMPFLD(.01)
- SET GMPFLD(.01)=$$NOS^GMPLX
- +4 SET GMPICD=$PIECE($GET(GMPFLD(.01)),U,2)
- +5 IF $DATA(GMPFLD(.01))
- SET GMPFLD(.01)=+GMPFLD(.01)
- +6 ;chk for error from ICD
- IF $PIECE(GMPFLD(.01),U)=-1
- SET GMPFLD(.01)=$$NOS^GMPLX
- +7 IF 'GMPORIG(1.01)
- SET GMPORIG(1.01)="1^Unresolved"
- +8 IF 'GMPFLD(1.01)
- SET GMPFLD(1.01)="1^Unresolved"
- +9 IF $GET(GMPFLD(1.01))["SNOMED CT"
- Begin DoDot:1
- +10 NEW SCTS,SCTC,SCTD,SCTT
- +11 SET SCTS=GMPFLD(1.01)
- +12 SET SCTT=$PIECE($PIECE(SCTS," (SNOMED CT "),U,2)
- +13 SET SCTC=$PIECE($PIECE(SCTS,"SNOMED CT ",2),")")
- SET GMPFLD(80001)=SCTC_U_SCTC
- +14 SET SCTD=$$GETDES^LEXTRAN1("SCT",SCTT)
- +15 IF +SCTD=1
- SET SCTD=$PIECE(SCTD,U,2)
- SET GMPFLD(80002)=SCTD_U_SCTD
- +16 IF (+$GET(GMPFLD(.01))=+$$NOS^GMPLX)
- SET GMPFLD(80005)="1^PENDING"
- End DoDot:1
- +17 IF $GET(GMPFLD(1.01))["VHAT"
- Begin DoDot:1
- +18 NEW VHATC,VHATD,VHATS,VHATT
- +19 SET VHATS=GMPFLD(1.01)
- +20 SET VHATT=$PIECE($PIECE(VHATS," (VHAT "),U,2)
- +21 SET VHATC=$PIECE($PIECE(VHATS,"VHAT ",2),")")
- +22 SET GMPFLD(80003)=VHATC_U_VHATC
- +23 SET VHATD=$$GETDES^LEXTRAN1("VHAT",VHATT)
- +24 IF +VHATD=1
- SET VHATD=$PIECE(VHATD,U,2)
- SET GMPFLD(80004)=VHATD_U_VHATD
- End DoDot:1
- +25 IF 'GMPFLD(.05)
- SET I=$PIECE(GMPFLD(.05),U,2)
- SET GMPFLD(.05)=$$PROVNARR^GMPLX(I,+GMPFLD(1.01))
- +26 SET NOW=$$HTFM^XLFDT($HOROLOG)
- SET AUDITED=0
- +27 SET DR="1.02////"_$SELECT('$DATA(GMPLUSER):"T",1:GMPFLD(1.02))
- +28 IF GMPORIG(1.02)="T"
- IF GMPFLD(1.02)="P"
- Begin DoDot:1
- +29 SET CHNGE=GMPIFN_"^1.02^"_NOW_U_DUZ_"^T^P^Verified^"_DUZ
- +30 DO AUDIT^GMPLX(CHNGE,"")
- End DoDot:1
- +31 IF $PIECE($GET(GMPORIG(.12)),U)="I"
- IF $PIECE(GMPFLD(.12),U)="A"
- DO REACTV
- SET AUDITED=1
- +32 IF +$GET(GMPORIG(1.01))'=(+GMPFLD(1.01))
- DO REFORM
- SET AUDITED=1
- +33 ;to remove text left by ?? lex (~)
- SET GMPFLD(.01)=+GMPFLD(.01)
- +34 IF (+$GET(GMPFLD(.01))'=+$$NOS^GMPLX)
- IF ($GET(GMPROV)=.5)
- SET GMPFLD(80005)="2^COMPLETED"
- +35 FOR FLD=.01,.05,.12,.13,1.01,1.05,1.06,1.07,1.08,1.09,1.1,1.11,1.12,1.13,1.14,1.15,1.16,1.17,1.18,80001,80002,80003,80004,80005
- Begin DoDot:1
- +36 IF '$DATA(GMPFLD(FLD))
- QUIT
- IF $PIECE($GET(GMPORIG(FLD)),U)=$PIECE($GET(GMPFLD(FLD)),U)
- QUIT
- +37 SET DR=DR_";"_FLD_"////"_$SELECT($PIECE(GMPFLD(FLD),U)'="":$PIECE(GMPFLD(FLD),U),1:"@")
- +38 IF AUDITED
- QUIT
- SET CHNGE=GMPIFN_U_FLD_U_NOW_U_DUZ_U_$PIECE(GMPORIG(FLD),U)_U_$PIECE(GMPFLD(FLD),U)_"^^"_+$GET(GMPROV)
- +39 DO AUDIT^GMPLX(CHNGE,"")
- End DoDot:1
- +40 SET DA=GMPIFN
- SET DIE="^AUPNPROB("
- DO ^DIE
- SET GMPSAVED=1
- +41 DO COEXPRS(GMPIFN,GMPICD)
- +42 IF (GMPICD=$PIECE($$NOS^GMPLX,U,2))
- IF (+$PIECE($GET(GMPFLD(80001)),U)>0)
- DO NTRTBULL(.GMPBULL,$PIECE(GMPFLD(1.01),U,2),$PIECE($GET(GMPFLD(80001)),U,2),$GET(GMPSRCH))
- NOTES ; Save Changes to Notes
- +1 FOR I=0:0
- SET I=$ORDER(GMPORIG(10,I))
- IF I'>0
- QUIT
- IF GMPORIG(10,I)'=GMPFLD(10,I)
- Begin DoDot:1
- +2 SET NIFN=+GMPFLD(10,I)
- SET FAC=$PIECE(GMPFLD(10,I),U,2)
- SET TEXT=$PIECE(GMPFLD(10,I),U,3)
- SET OLDTEXT=$PIECE(GMPORIG(10,I),U,3)
- +3 SET NODE=$GET(^AUPNPROB(GMPIFN,11,FAC,11,NIFN,0))
- +4 IF TEXT'=""
- SET $PIECE(^AUPNPROB(GMPIFN,11,FAC,11,NIFN,0),U,3)=TEXT
- Begin DoDot:2
- +5 IF TEXT=OLDTEXT
- QUIT
- +6 SET CHNGE=GMPIFN_"^1101^"_NOW_U_DUZ_"^C^^Note Modified^"_+$GET(GMPROV)
- End DoDot:2
- +7 IF TEXT=OLDTEXT
- QUIT
- +8 IF TEXT=""
- SET CHNGE=GMPIFN_"^1101^"_NOW_U_DUZ_"^A^^Deleted Note^"_+$GET(GMPROV)
- +9 DO AUDIT^GMPLX(CHNGE,NODE)
- +10 IF TEXT=""
- Begin DoDot:2
- +11 SET DIK="^AUPNPROB("_GMPIFN_",11,"_FAC_",11,"
- +12 SET DA(2)=GMPIFN
- SET DA(1)=FAC
- SET DA=NIFN
- DO ^DIK
- End DoDot:2
- End DoDot:1
- +13 IF $DATA(GMPFLD(10,"NEW"))>9
- DO NEWNOTE
- EXIT ; Quit Saving Changes
- +1 IF $GET(GMPSAVED)
- DO DTMOD^GMPLX(GMPIFN)
- +2 QUIT
- +3 ;
- REFORM ; Audit Entry that has been Reformulated
- +1 SET CHNGE=GMPIFN_"^1.01^"_NOW_U_DUZ_U_+GMPORIG(1.01)_U_+GMPFLD(1.01)_"^Reformulated^"_+$GET(GMPROV)
- +2 SET NODE=$GET(^AUPNPROB(GMPIFN,0))_U_$GET(^AUPNPROB(GMPIFN,1))
- +3 DO AUDIT^GMPLX(CHNGE,NODE)
- +4 QUIT
- +5 ;
- REACTV ; Audit Entry that has been Reactivated
- +1 SET CHNGE=GMPIFN_"^.12^"_NOW_U_DUZ_"^I^A^Reactivated^"_+$GET(GMPROV)
- +2 SET NODE=$GET(^AUPNPROB(GMPIFN,0))_U_$GET(^AUPNPROB(GMPIFN,1))
- +3 DO AUDIT^GMPLX(CHNGE,NODE)
- +4 QUIT
- +5 ;
- NEW ; Save Collected Values in new Problem Entry
- +1 ; Output DA (left defined)
- +2 NEW DATA,APCDLOOK,APCDALVR,NUM,I,DIK,GMPICD,GMPIFN,X
- +3 IF 'GMPFLD(.01)
- SET GMPFLD(.01)=$$NOS^GMPLX
- +4 ;chk for error from ICD
- IF $PIECE(+GMPFLD(.01),U)=-1
- SET GMPFLD(.01)=$$NOS^GMPLX
- +5 SET GMPICD=$PIECE(GMPFLD(.01),U,2)
- +6 ;to remove text left by ?? lex (~)
- SET GMPFLD(.01)=+GMPFLD(.01)
- +7 IF 'GMPFLD(1.01)
- SET GMPFLD(1.01)="1^Unresolved"
- +8 IF 'GMPFLD(.05)
- SET X=$PIECE(GMPFLD(.05),U,2)
- SET GMPFLD(.05)=$$PROVNARR^GMPLX(X,+GMPFLD(1.01))
- +9 IF $GET(GMPFLD(1.09))']""
- SET GMPFLD(1.09)=$$DT^XLFDT
- +10 IF $GET(GMPFLD(1.01))["SNOMED CT"
- Begin DoDot:1
- +11 NEW SCTC,SCTD,SCTS,SCTT
- +12 SET SCTS=GMPFLD(1.01)
- +13 SET SCTT=$PIECE($PIECE(SCTS," (SNOMED CT "),U,2)
- +14 SET SCTC=$PIECE($PIECE(SCTS,"SNOMED CT ",2),")")
- +15 SET GMPFLD(80001)=SCTC_U_SCTC
- +16 SET SCTD=$$GETDES^LEXTRAN1("SCT",SCTT)
- +17 IF +SCTD=1
- SET SCTD=$PIECE(SCTD,U,2)
- SET GMPFLD(80002)=SCTD_U_SCTD
- End DoDot:1
- +18 IF $GET(GMPFLD(1.01))["VHAT"
- Begin DoDot:1
- +19 NEW VHATC,VHATD,VHATS,VHATT
- +20 SET VHATS=GMPFLD(1.01)
- +21 SET VHATT=$PIECE($PIECE(VHATS," (VHAT "),U,2)
- +22 SET VHATC=$PIECE($PIECE(VHATS,"VHAT ",2),")")
- +23 SET GMPFLD(80003)=VHATC_U_VHATC
- +24 SET VHATD=$$GETDES^LEXTRAN1("VHAT",VHATT)
- +25 IF +VHATD=1
- SET VHATD=$PIECE(VHATD,U,2)
- SET GMPFLD(80004)=VHATD_U_VHATD
- End DoDot:1
- +26 SET DA=$$NEWPROB(+GMPFLD(.01),+GMPDFN)
- IF DA'>0
- QUIT
- +27 SET NUM=$$NEXTNMBR(+GMPDFN,+GMPVAMC)
- SET GMPSAVED=1
- IF 'NUM
- SET NUM=""
- +28 ; Set Node 0
- +29 SET DATA=^AUPNPROB(DA,0)_U_DT_"^^"_$PIECE(GMPFLD(.05),U)_U_+GMPVAMC_U_+NUM_U_DT_"^^^^"_$PIECE(GMPFLD(.12),U)_U_$PIECE(GMPFLD(.13),U)
- +30 SET ^AUPNPROB(DA,0)=DATA
- +31 ; Set Node 1
- +32 SET DATA=$PIECE(GMPFLD(1.01),U)
- FOR I=1.02:.01:1.18
- SET DATA=DATA_U_$SELECT($PIECE($GET(GMPFLD(+I)),U)="@":"",1:$PIECE($GET(GMPFLD(+I)),U))
- +33 SET ^AUPNPROB(DA,1)=DATA
- +34 ; Set Node 800
- +35 IF $SELECT($LENGTH($PIECE($GET(GMPFLD(80001)),U)):1,$LENGTH($PIECE($GET(GMPFLD(80003)),U)):1,$LENGTH($PIECE($GET(GMPFLD(80004)),U)):1,$LENGTH($PIECE($GET(GMPFLD(80005)),U)):1,1:0)
- Begin DoDot:1
- +36 IF $PIECE($GET(GMPFLD(.01)),U)=$PIECE($$NOS^GMPLX,U)
- SET GMPFLD(80005)="1^PENDING"
- +37 SET DATA=$PIECE($GET(GMPFLD(80001)),U)_U_$PIECE($GET(GMPFLD(80002)),U)_U_$PIECE($GET(GMPFLD(80003)),U)_U_$PIECE($GET(GMPFLD(80004)),U)_U_$PIECE($GET(GMPFLD(80005)),U)
- +38 SET ^AUPNPROB(DA,800)=DATA
- End DoDot:1
- +39 ; Set Node 801
- +40 IF $SELECT($LENGTH($PIECE($GET(GMPFLD(80101)),U)):1,$LENGTH($PIECE($GET(GMPFLD(80102)),U)):1,1:0)
- Begin DoDot:1
- +41 SET DATA=$PIECE($GET(GMPFLD(80101)),U)_U_$PIECE($GET(GMPFLD(80102)),U)
- +42 SET ^AUPNPROB(DA,801)=DATA
- End DoDot:1
- +43 ; Handle multiple ICDs
- +44 DO COEXPRS(DA,GMPICD)
- +45 ; Set X-Refs
- +46 SET DIK="^AUPNPROB("
- SET (APCDLOOK,APCDALVR)=1
- DO IX1^DIK
- +47 IF $DATA(GMPFLD(10,"NEW"))>9
- SET GMPIFN=DA
- DO NEWNOTE
- +48 IF (GMPICD=$PIECE($$NOS^GMPLX,U,2))
- IF (+$PIECE($GET(GMPFLD(80001)),U)>0)
- DO NTRTBULL(.GMPBULL,$PIECE(GMPFLD(1.01),U,2),$PIECE($GET(GMPFLD(80001)),U,2),$GET(GMPSRCH))
- +49 ; broadcast event
- +50 NEW DFN
- SET GMPIFN=DA
- SET DFN=+GMPDFN
- +51 SET X=+$ORDER(^ORD(101,"B","GMPL EVENT",0))_";ORD(101,"
- IF X
- DO EN1^XQOR
- +52 QUIT
- +53 ;
- NEWPROB(ICD,DFN) ; Creates New Problem Entry in file #9000011
- +1 NEW I,HDR,LAST,TOTAL,DA
- +2 LOCK +^AUPNPROB(0):1
- IF '$TEST
- Begin DoDot:1
- +3 WRITE !!,"Someone else is currently editing this file."
- +4 WRITE !,"Please try again later.",!
- End DoDot:1
- QUIT -1
- +5 SET HDR=$GET(^AUPNPROB(0))
- IF HDR=""
- QUIT -1
- +6 SET LAST=$PIECE(HDR,U,3)
- SET TOTAL=$PIECE(HDR,U,4)
- +7 FOR I=(LAST+1):1
- IF '$DATA(^AUPNPROB(I,0))
- QUIT
- +8 SET DA=I
- SET ^AUPNPROB(DA,0)=ICD_U_DFN
- +9 SET ^AUPNPROB("B",ICD,DA)=""
- SET ^AUPNPROB("AC",DFN,DA)=""
- +10 SET $PIECE(^AUPNPROB(0),U,3,4)=DA_U_(TOTAL+1)
- LOCK -^AUPNPROB(0)
- +11 QUIT DA
- +12 ;
- NEWNOTE ; Creates New Note Entries for Problem
- +1 ; Requires GMPIFN Pointer to Problem
- +2 ; GMPROV Current Provider
- +3 ; GMPVAMC Facility
- +4 NEW HDR,LAST,TOTAL,I,FAC,NIFN
- +5 LOCK +^AUPNPROB(GMPIFN,11):1
- IF '$TEST
- QUIT
- +6 SET FAC=+$ORDER(^AUPNPROB(GMPIFN,11,"B",GMPVAMC,0))
- IF 'FAC
- Begin DoDot:1
- +7 IF '$DATA(^AUPNPROB(GMPIFN,11,0))
- SET ^(0)="^9000011.11PA^^"
- +8 SET HDR=^AUPNPROB(GMPIFN,11,0)
- SET LAST=$PIECE(HDR,U,3)
- SET TOTAL=$PIECE(HDR,U,4)
- +9 FOR I=(LAST+1):1
- IF '$DATA(^AUPNPROB(GMPIFN,11,I,0))
- QUIT
- +10 SET ^AUPNPROB(GMPIFN,11,I,0)=GMPVAMC
- SET ^AUPNPROB(GMPIFN,11,"B",GMPVAMC,I)=""
- +11 SET FAC=I
- SET $PIECE(^AUPNPROB(GMPIFN,11,0),U,3,4)=FAC_U_(TOTAL+1)
- End DoDot:1
- +12 IF FAC'>0
- GOTO NNQ
- NN1 ; Get New Note
- +1 IF '$DATA(^AUPNPROB(GMPIFN,11,FAC,11,0))
- SET ^(0)="^9000011.1111IA^^"
- +2 SET HDR=^AUPNPROB(GMPIFN,11,FAC,11,0)
- SET LAST=$PIECE(HDR,U,3)
- SET TOTAL=$PIECE(HDR,U,4)
- +3 FOR I=(LAST+1):1
- IF '$DATA(^AUPNPROB(GMPIFN,11,FAC,11,I,0))
- QUIT
- +4 SET NIFN=I
- +5 FOR I=0:0
- SET I=$ORDER(GMPFLD(10,"NEW",I))
- IF I'>0
- QUIT
- Begin DoDot:1
- +6 SET ^AUPNPROB(GMPIFN,11,FAC,11,NIFN,0)=NIFN_"^^"_GMPFLD(10,"NEW",I)_"^A^"_DT_U_+$GET(GMPROV)
- +7 SET ^AUPNPROB(GMPIFN,11,FAC,11,"B",NIFN,NIFN)=""
- +8 SET TOTAL=TOTAL+1
- SET LAST=NIFN
- SET NIFN=NIFN+1
- End DoDot:1
- +9 SET $PIECE(^AUPNPROB(GMPIFN,11,FAC,11,0),U,3,4)=LAST_U_TOTAL
- NNQ ; Quit Getting New Notes
- +1 LOCK -^AUPNPROB(GMPIFN,11)
- +2 QUIT
- +3 ;
- NEXTNMBR(DFN,VAMC) ; Returns Next Available Problem Number
- +1 NEW I,J,NUM
- SET NUM=1
- SET I=""
- IF '$DATA(^AUPNPROB("AA",DFN,VAMC))
- QUIT NUM
- +2 FOR
- SET I=$ORDER(^AUPNPROB("AA",DFN,VAMC,I))
- IF I=""
- QUIT
- SET J=$EXTRACT(I,2,999)
- SET NUM=+J
- +3 SET NUM=NUM+1
- +4 QUIT NUM
- NTRTBULL(GMPY,GMPTERM,GMPSCT,GMPSRCH) ; Send NTRT Request bulletin to NTRT mailgroup
- +1 NEW GMPSITE,GMPSVC,GMPUSER,GMPWRAP,XMBNM,XMDUZ,XMY,XMB,XMZ
- SET GMPSITE=$$SITE^VASITE
- +2 IF '$LENGTH(GMPTERM)
- SET GMPY="0^Empty String - a valid term must be sent."
- QUIT
- +3 IF '+$GET(DUZ)!'$DATA(^VA(200,+$GET(DUZ)))
- SET GMPY="0^A valid user must be identified."
- QUIT
- +4 IF '+$GET(GMPSCT)
- SET GMPSCT="N/A"
- +5 DO USERINFO^XUSRB2(.GMPUSER)
- SET GMPSVC=$GET(GMPUSER(5))
- +6 SET XMB="GMPL PROBLEM NTRT BULLETIN"
- +7 SET XMDUZ="GMPL PROBLEM NTRT BULLETIN"
- +8 SET XMY("G.PROBLEM LIST NTRT@forum.domain.ext")=""
- +9 SET GMPWRAP=$$WRAP^GMPLX1(GMPTERM,53)
- +10 SET XMB(1)=GMPTERM
- +11 SET XMB(2)=GMPSCT
- +12 SET XMB(3)=$$GET1^DIQ(200,DUZ_",",.01)
- +13 SET XMB(4)=$$FMTE^XLFDT($EXTRACT(($$NOW^XLFDT),1,12),2)
- +14 SET XMB(5)=GMPSVC
- +15 SET XMB(6)=$PIECE(GMPSITE,U,2)_" ("_$PIECE(GMPSITE,U,3)_")"
- +16 SET XMB(7)=$GET(GMPSRCH)
- +17 DO ^XMB
- DO KILL^XM
- SET GMPY=1
- +18 QUIT
- COEXPRS(GMPDA,GMPICD) ; File multiple ICDs
- +1 NEW GMPC,GMPI,GMPN,GMPORIG,NOW,GMPOCNT,GMPNCNT,CODSYS
- SET NOW=$$NOW^XLFDT
- +2 ; Initialize CODSYS to "ICD" when ICD-10-CM is implemented, new codes will get "D10"
- +3 SET CODSYS="ICD"
- +4 ; Merge previous entries into local GMPORIG array
- +5 IF $DATA(^AUPNPROB(GMPDA,803))
- MERGE GMPORIG=^AUPNPROB(GMPDA,803)
- +6 ; If not sparce ICD string, remove previous entries & initialize sub-file root
- +7 IF '$$SPRCICD(GMPICD)
- KILL ^AUPNPROB(GMPDA,803)
- SET ^AUPNPROB(GMPDA,803,0)="^9000011.803PA^^"
- +8 ; Update sub-file
- +9 SET GMPC=0
- SET GMPN=$LENGTH(GMPICD,"/")
- +10 FOR GMPI=2:1:GMPN
- Begin DoDot:1
- +11 NEW GMPCODE,GMPDA1,GMPD30,GMPNOS
- SET GMPNOS=$$NOS^GMPLX
- +12 SET GMPDA1=GMPI-1
- SET GMPC=GMPC+1
- SET GMPCODE=$PIECE(GMPICD,"/",GMPI)
- IF (GMPCODE="")
- QUIT
- +13 SET GMPD30=$GET(^AUPNPROB(GMPDA,803,GMPDA1,0))
- +14 IF (GMPCODE=$PIECE(GMPNOS,U,2))
- IF ($PIECE(GMPD30,U)]"")
- IF ($PIECE(GMPD30,U)'=$PIECE(GMPNOS,U,2))
- QUIT
- +15 SET ^AUPNPROB(GMPDA,803,GMPDA1,0)=GMPCODE_U_CODSYS_U_DT
- SET ^AUPNPROB(GMPDA,803,"B",GMPCODE,GMPDA1)=""
- +16 SET $PIECE(^AUPNPROB(GMPDA,803,0),U,3,4)=GMPDA1_U_GMPC
- End DoDot:1
- +17 IF '$DATA(GMPORIG)
- QUIT
- +18 SET GMPOCNT=+$PIECE($GET(GMPORIG(0)),U,4)
- SET GMPNCNT=+$PIECE($GET(^AUPNPROB(GMPDA,803,0)),U,4)
- +19 ; Iterate through GMPORIG and audit changes
- +20 SET GMPI=0
- FOR
- SET GMPI=$ORDER(GMPORIG(GMPI))
- IF +GMPI'>0
- QUIT
- Begin DoDot:1
- +21 NEW CHANGE,OLD0,NEW0
- +22 SET OLD0=$GET(GMPORIG(GMPI,0))
- SET NEW0=$GET(^AUPNPROB(GMPDA,803,GMPI,0))
- +23 ; no substantive change change
- IF $PIECE(NEW0,U)=$PIECE(OLD0,U)
- QUIT
- +24 IF NEW0'=""
- SET CHANGE=GMPDA_"^302^"_NOW_U_DUZ_U_$PIECE(OLD0,U)_U_$PIECE(NEW0,U)_"^SNOMED CT Concept re-mapped by Enterprise Terminology Service^"_+$GET(GMPROV)
- +25 IF '$TEST
- SET CHANGE=GMPDA_"^302^"_NOW_U_DUZ_U_$PIECE(OLD0,U)_U_"^Deleted Secondary Dx for SNOMED CT Concept^"_+$GET(GMPROV)
- +26 DO AUDIT^GMPLX(CHANGE,OLD0)
- End DoDot:1
- +27 IF GMPNCNT>GMPOCNT
- Begin DoDot:1
- +28 SET GMPI=GMPOCNT
- +29 FOR
- SET GMPI=$ORDER(^AUPNPROB(GMPDA,803,GMPI))
- IF +GMPI'>0
- QUIT
- Begin DoDot:2
- +30 NEW NEW0,CHANGE
- SET NEW0=$GET(^AUPNPROB(GMPDA,803,GMPI,0))
- +31 SET CHANGE=GMPDA_"^302^"_NOW_U_DUZ_U_U_$PIECE(NEW0,U)_"^Added as Secondary Dx for SNOMED CT Concept^"_+$GET(GMPROV)
- +32 DO AUDIT^GMPLX(CHANGE,"")
- End DoDot:2
- End DoDot:1
- +33 QUIT
- SPRCICD(GMPICD) ; Is ICD string sparce (i.e., called from SDS API w/order > 2)?
- +1 NEW GMPI,GMPY
- SET GMPY=0
- +2 FOR GMPI=2:1:$LENGTH(GMPICD,"/")
- IF $SELECT($PIECE(GMPICD,"/",GMPI)="":1,$PIECE(GMPICD,"/",GMPI)=$PIECE($$NOS^GMPLX,U,2):1,1:0)
- SET GMPY=1
- +3 QUIT GMPY