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

APCDAPRB.m

Go to the documentation of this file.
  1. APCDAPRB ; IHS/CMI/LAB - PROMPT FOR PROBLEM ;
  1. ;;2.0;IHS PCC SUITE;**5,6,10,11,16,17**;MAY 14, 2009;Build 18
  1. ;
  1. START ;EP
  1. X:$D(^DD(9000011,.01,12.1)) ^DD(9000011,.01,12.1) S DIC="^ICD9(",DIC(0)="AEMQ",DIC("A")="Enter Problem Diagnosis: " D ^DIC K DIC
  1. G:Y="" XIT
  1. I Y=-1,X=""!(X="^") S APCDTSKI=1,APCDLOOK="" G XIT
  1. I Y=-1 S APCDTERR=1,APCDLOOK="" G XIT
  1. S APCDLOOK="`"_+Y,APCDTNQP=X
  1. XIT K Y,X,DO,D,DD,DIPGM
  1. Q
  1. PL ;EP
  1. I $G(APCDDATE)="" S APCDDATE=DT
  1. I $G(APCDLOC)="" S APCDLOC=DUZ(2)
  1. S DFN=APCDPAT,Y=APCDPAT D ^AUPNPAT K Y
  1. S APCDPLL=APCDLOC,APCDPLD=$P(APCDDATE,".")
  1. S APCDPLV=$G(APCDVSIT)
  1. I APCDPLV<0 S APCDPLV=""
  1. D EN^XBNEW("PL1^APCDAPRB","DFN;APCDPLL;APCDPLD;APCDPLV;VALM*")
  1. Q
  1. PL1 ;EP
  1. D TERM^VALM0
  1. D ENDE^APCDPL
  1. Q
  1. PO ;EP
  1. S DIE="^AUPNPAT(",DR="[APCD PO (ADD)]",DA=APCDPAT D ^DIE K DA,DR,DIE
  1. Q
  1. MPO ;EP
  1. S DIE="^AUPNPAT(",DR="[APCD MPO (MPO)]",DA=APCDPAT D ^DIE K DA,DR,DIE
  1. Q
  1. RPO ;EP
  1. S DIE="^AUPNPAT(",DR="[APCD RPO (RPO)]",DA=APCDPAT D ^DIE K DA,DR,DIE
  1. Q
  1. IPO ;EP
  1. S DIE="^AUPNPAT(",DR="[APCD IPO (IPO)]",DA=APCDPAT D ^DIE K DA,DR,DIE
  1. Q
  1. APO ;EP
  1. S DIE="^AUPNPAT(",DR="[APCD APO (APO)]",DA=APCDPAT D ^DIE K DA,DR,DIE
  1. Q
  1. MNN ;EP
  1. S DIE="^AUPNPAT(",DR="[APCD MNN (MNN)]",DA=APCDPAT D ^DIE K DA,DR,DIE
  1. Q
  1. RNO ;EP
  1. S DIE="^AUPNPAT(",DR="[APCD RNO (RNO)]",DA=APCDPAT D ^DIE K DA,DR,DIE
  1. Q
  1. PDSP ;EP
  1. S DIE="^AUPNPAT(",DR="[APCD PDSP (PDSP)]",DA=APCDPAT D ^DIE K DA,DR,DIE
  1. Q
  1. NON ;EP called from APCD NO (ADD) template
  1. D ^XBNEW("NO^APCDAPRB:APCD*")
  1. Q
  1. NOP ;EP called from APCD PO (ADD) template
  1. NEW APCDADDP
  1. S APCDADDP=1
  1. D ^XBNEW("NO1^APCDAPRB:APCD*")
  1. Q
  1. NO ;EP add a note to a problem
  1. D ^APCDPROB
  1. K DIR,DIRUT S DIR(0)="F^1:12",DIR("A")="Enter Problem Number" K DA D ^DIR K DIR
  1. G:$D(DIRUT) NOX
  1. S APCDPR=Y
  1. D ^APCDPLK
  1. I APCDPERR=1 W $C(7),$C(7),"Not a valid problem number.",! K APCDPERR G NO
  1. ;display existing notes, get next note number
  1. NO1 ;EP
  1. S APCDPROB=APCDPDFN
  1. I APCDPROB["`" S APCDPROB=$P(APCDPROB,"`",2)
  1. I $G(APCDPR)]"" W !!,"Problem Number: ",APCDPR,?40,"Diagnosis: ",$P($$ICDDX^ICDEX($P(^AUPNPROB(APCDPROB,0),U)),U,2)
  1. I $O(^AUPNPROB(APCDPROB,11,0)) D
  1. .W !,"Problem Notes: " S L=0 F S L=$O(^AUPNPROB(APCDPROB,11,L)) Q:L'=+L I $O(^AUPNPROB(APCDPROB,11,L,11,0)) W !?5,$P(^DIC(4,$P(^AUPNPROB(APCDPROB,11,L,0),U),0),U) D
  1. ..S X=0 F S X=$O(^AUPNPROB(APCDPROB,11,L,11,X)) Q:X'=+X W !?10,"Note#",$P(^AUPNPROB(APCDPROB,11,L,11,X,0),U)," ",$$FMTE^XLFDT($P(^(0),U,5),5),?28,$P(^AUPNPROB(APCDPROB,11,L,11,X,0),U,3)
  1. W ! S DIR(0)="Y",DIR("A")="Add a new Problem Note for this Problem",DIR("B")="N" K DA D ^DIR K DIR
  1. G:$D(DIRUT) NOX
  1. G:Y=0 NOX
  1. ;get next note number
  1. NUM ;
  1. ;add location multiple if necessary, otherwise get ien in multiple
  1. S APCDNIEN=$O(^AUPNPROB(APCDPROB,11,"B",APCDLOC,0))
  1. I APCDNIEN="" S X="`"_APCDLOC,DIC="^AUPNPROB("_APCDPROB_",11,",DA(1)=APCDPROB,DIC(0)="L",DIC("P")=$P(^DD(9000011,1101,0),U,2) D ^DIC K DIC,DA,DR,Y,X S APCDNIEN=$O(^AUPNPROB(APCDPROB,11,"B",APCDLOC,0))
  1. I APCDNIEN="" W $C(7),$C(7),"ERROR UPDATING NOTE LOCATION MULTIPLE" G NOX
  1. S (Y,X)=0 F S Y=$O(^AUPNPROB(APCDPROB,11,APCDNIEN,11,"B",Y)) S:Y X=Y I 'Y S X=X+1 K Y Q
  1. S APCDNUM=X
  1. W !!,"Adding ",$P(^DIC(4,APCDLOC,0),U)," Note #",X
  1. K DIC S X=APCDNUM,DA(1)=APCDNIEN,DA(2)=APCDPROB,DIC="^AUPNPROB("_APCDPROB_",11,"_APCDNIEN_",11,",DIC("P")=$P(^DD(9000011.11,1101,0),U,2),DIC(0)="L" D ^DIC K DA,DR
  1. I Y=-1 W !!,$C(7),$C(7),"ERROR when updating note number multiple",! G NOX
  1. S DIE=DIC K DIC W ?10 S %=$S($G(APCDDATE):$P(APCDDATE,"."),1:DT),DA=+Y,DR=".03;.04////A;;.09////^S X=DUZ;.05///^S X=%" D ^DIE K DIE,DR,DA,Y W !!
  1. S DIE="^AUPNPROB(",DA=APCDPROB,%=$S($G(APCDDATE):$P(APCDDATE,"."),1:DT),DR=".03////"_%_";.14////"_DUZ D ^DIE K DIE,DA,DR,Y
  1. S DA=APCDPROB
  1. I '$G(APCDADDP) D PLUDE
  1. G NO1
  1. Q
  1. NOX ;
  1. K Y,APCDPROB,X,L,APCDNUM,APCDNIEN,DIC,DA,DD
  1. Q
  1. PLUDE ;EP - called from data entry input templates
  1. ;get provider who updated and date
  1. ;NEW APCDPRBI
  1. S APCDTPRD=$G(APCDTPRD)
  1. S APCDPRBI=DA
  1. S APCDP=$G(APCDPAT)
  1. I 'APCDP S APCDP=$G(DFN)
  1. S APCDV=$G(APCDVSIT)
  1. I APCDV<0 S APCDV=""
  1. S APCDD=$G(APCDDATE)
  1. ;
  1. D EN^XBNEW("PLUDE1^APCDAPRB","APCDP;APCDV;APCDD;APCDPRBI;APCDTPRD")
  1. Q
  1. QUALP ;EP - called from input templates
  1. NEW APCDADDP
  1. S APCDADDP=1
  1. D ^XBNEW("QUAL1^APCDAPRB:APCD*")
  1. Q
  1. QUAL ;EP add a note to a problem
  1. D ^APCDPROB
  1. K DIR,DIRUT S DIR(0)="F^1:12",DIR("A")="Enter Problem Number" K DA D ^DIR K DIR
  1. G:$D(DIRUT) NOX
  1. S APCDPR=Y
  1. D ^APCDPLK
  1. I APCDPERR=1 W $C(7),$C(7),"Not a valid problem number.",! K APCDPERR G NO
  1. ;display existing notes, get next note number
  1. QUAL1 ;EP
  1. S APCDPROB=APCDPDFN
  1. I APCDPROB["`" S APCDPROB=$P(APCDPROB,"`",2)
  1. QUAL2 W !!?3,"Severity:"
  1. I '$O(^AUPNPROB(APCDPROB,13,0)) S APCDC=0 W " None recorded" G FM12
  1. D EN^DDIOL($$REPEAT^XLFSTR("-",75),"","!?3")
  1. K APCDCM S X=0,APCDC=0 F S X=$O(^AUPNPROB(APCDPROB,13,X)) Q:X'=+X D
  1. .S APCDC=APCDC+1,APCDCM(APCDC)=X
  1. .W !?2,APCDC,") ",$$GET1^DIQ(9000011.13,X_","_APCDPROB,.01)
  1. FM12 ;
  1. D EN^DDIOL("","","!!")
  1. K DIR
  1. S DIR(0)="S^A:Add a Severity"_$S(APCDC:";E:Edit an Existing Severity;D:Delete an Existing Severity",1:"")_";N:No Change"
  1. S DIR("A")="Which action",DIR("B")="N" KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) G FM13
  1. I Y="N" S APCDDONE=1 G FM13
  1. S Y="FM"_Y
  1. D @Y
  1. G QUAL2
  1. FM13 ;
  1. K Y
  1. Q
  1. ;
  1. FME ;
  1. D EN^DDIOL("","","!")
  1. K DIR
  1. S DIR(0)="N^1:"_APCDC_":0",DIR("A")="Edit Which One" KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) Q
  1. K DIC,DA,DR
  1. I $P(^AUPNPROB(APCDPROB,13,APCDCM(Y),0),U,2)]"",$P(^AUPNPROB(APCDPROB,13,APCDCM(Y),0),U,2)'=DUZ D Q
  1. .W !!,"You did not enter that Severity, therefore you cannot edit it. It was entered by:",!,$P(^VA(200,$P(^AUPNPROB(APCDPROB,13,APCDCM(Y),0),U,2),0),U,1),! Q
  1. S DA=APCDCM(Y),DR=".01",DA(1)=APCDPROB
  1. S DIE="^AUPNPROB("_APCDPROB_",13,"
  1. D ^DIE
  1. K DIE
  1. Q
  1. FMD ;
  1. D EN^DDIOL("","","!")
  1. K DIR
  1. S DIR(0)="N^1:"_APCDC_":0",DIR("A")="Delete Which One" KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) Q
  1. I $P(^AUPNPROB(APCDPROB,13,APCDCM(Y),0),U,2)]"",$P(^AUPNPROB(APCDPROB,13,APCDCM(Y),0),U,2)'=DUZ D Q
  1. .W !!,"You did not enter that qualifier, therefore you cannot delete it. It was entered by:",!,$P(^VA(200,$P(^AUPNPROB(APCDPROB,13,APCDCM(Y),0),U,2),0),U,1),! Q
  1. K DIC,DA,DR
  1. S DA=APCDCM(Y),DA(1)=APCDPROB,DIK="^AUPNPROB("_APCDPROB_",13," D ^DIK K DA,DIK
  1. Q
  1. FMA ;
  1. S DIR(0)="FO^1:30",DIR("A")="Enter Qualifier" KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) Q
  1. I Y="" Q
  1. S DIC(0)="L",DIC="^AUPNPROB("_APCDPROB_",13,",DIC("DR")=".02////"_DUZ_";.03///^S X=$$NOW^XLFDT;.04////"_DUZ_";.05///^S X=$$NOW^XLFDT",DA(1)=APCDPROB
  1. D FILE^DICN
  1. Q
  1. ;
  1. PLUDE1 ;EP - called from xbnew
  1. ;get date pl updated
  1. S DIR(0)="D^::EPTSX",DIR("A")="Enter the Date the Problem List was Updated by the Provider"
  1. S DIR("B")=$S($G(APCDD):$$FMTE^XLFDT($P(APCDD,".")),$G(APCDV):$$FMTE^XLFDT($$VD^APCLV(APCDV)),1:$$FMTE^XLFDT(DT)),DIR("?")="This is the visit date or the date the provider updated the problem list."
  1. KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) W !!,"This is required." G PLUDE1
  1. I $P(Y,".")>DT W !!,"Future Dates now allowed.",! G PLUDE1
  1. S APCDD=Y
  1. PLUDE1P ;GET PROVIDER
  1. S DIR(0)="9000010.54,1204",DIR("A")="Enter the INDIVIDUAL who Updated the Problem List"
  1. S DIR("A",1)="Enter the individual that updated the problem list. "
  1. S DIR("A",2)="If you are transcribing an update from a PCC Provider, then enter"
  1. S DIR("A",3)="the individual who requested the change. If you are data "
  1. S DIR("A",4)="entry/coder correcting the problem entry such as correcting the "
  1. S DIR("A",5)="ICD9 code, then enter yourself."
  1. S DIR("B")=$S($G(APCDTPRD):$P(^VA(200,APCDTPRD,0),U,1),$G(APCDV):$$PRIMPROV^APCLV(APCDV,"N"),1:"") KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) W !!,"This is required." G PLUDE1P
  1. S APCDPRV=+Y
  1. D PLU($G(APCDPRBI),APCDV,APCDP,APCDD,APCDPRV,.APCDRET)
  1. I $P(APCDRET,U,1)=0 W !!,"error: ",$P(APCDRET,U,2)
  1. Q
  1. PLU(APCDPIEN,APCDV,APCDP,APCDD,APCDPRV,RETVAL) ;PEP - called to update Problem list update fields
  1. ;this API can be called to have a V UPDATED/REVIEWED entry and populate the
  1. ;.11, .12, and .13 fields
  1. ;input: APCDPIEN - ien of problem list entry
  1. ; APCDV - ien of visit, if in the context of a visit
  1. ; APCDP - DFN
  1. ; APCDD - Date and optionally time of problem list update (fileman format)
  1. ; APCDPRV = ien of provider updating the problem list
  1. ;this API will create a new V UPDATED/REVIEWED entry if there isn't currently one
  1. ;for Provider APCDP on date APCDD
  1. ;if not in the context of a visit (APCDV = null) then an event visit will be created
  1. ;with a V UPDATED/REVIEWED v file entry
  1. ;
  1. ;RETURN VALUE:
  1. ; ien of V UPDATED/REVIEWED entry that was created
  1. ; or 0^error message
  1. S APCDPIEN=$G(APCDPIEN)
  1. S APCDV=$G(APCDV)
  1. S APCDP=$G(APCDP)
  1. I 'APCDP S RETVAL="0^not a valid patient DFN" Q
  1. I '$D(^AUPNPAT(APCDP,0)) S RETVAL="0^not a valid patient DFN" Q
  1. S APCDD=$G(APCDD)
  1. I 'APCDD S RETVAL="0^no valid date passed" Q
  1. S APCDPRV=$G(APCDPRV)
  1. I 'APCDPRV S RETVAL="0^no valid provider ien passed" Q
  1. S RETVAL=""
  1. ;
  1. I APCDV D PLUV Q
  1. ;NO VISIT SO CREATE EVENT VISIT AND CALL PLUV
  1. D EVSIT
  1. Q
  1. PLUV ;have a visit so create a v updated/reviewed for provider APCDPRV if one does
  1. ;not exist on this visit already.
  1. NEW APCDX,APCDVD,APCDVRI,APCDVAL
  1. S APCDVAL=$O(^AUTTCRA("C","PLU",0))
  1. I APCDVAL="" S RETVAL="0^action item missing" Q
  1. S APCDVRI=""
  1. S APCDX=0 F S APCDX=$O(^AUPNVRUP("AD",APCDV,APCDX)) Q:APCDX=""!(APCDVRI) D
  1. .;is this entry a problem list review entry?
  1. .Q:$P(^AUPNVRUP(APCDX,0),U,1)'=APCDVAL ;this one isn't a PLU entry
  1. .Q:$P($G(^AUPNVRUP(APCDX,2)),U,1)
  1. .Q:$P($G(^AUPNVRUP(APCDX,12)),U,4)'=APCDPRV ;not this provider
  1. .S APCDVRI=APCDX ;found one so don't create one
  1. .Q
  1. I APCDVRI S RETVAL=APCDVRI Q
  1. ;create V UPDATED/REVIEWED entry
  1. NEW APCDALVR
  1. S APCDALVR("APCDPAT")=APCDP
  1. S APCDALVR("APCDVSIT")=APCDV
  1. S APCDALVR("APCDATMP")="[APCDALVR 9000010.54 (ADD)]"
  1. S APCDALVR("APCDTCLA")="`"_APCDVAL
  1. S APCDALVR("APCDTCDT")=APCDD
  1. S APCDALVR("APCDTEPR")="`"_APCDPRV
  1. D ^APCDALVR
  1. I $D(APCDALVR("APCDAFLG")) S RETVAL=0_"^Error creating V UPDATED/REVIEWED entry. PCC not updated."
  1. K APCDALVR
  1. Q
  1. BSD ;
  1. NEW APCDBSDV
  1. K APCDIN
  1. S APCDIN("PAT")=APCDP
  1. S APCDIN("VISIT DATE")=APCDD_".12"
  1. S APCDIN("SITE")=DUZ(2)
  1. S APCDIN("VISIT TYPE")=$S($P($G(^APCCCTRL(DUZ(2),0)),U,4)]"":$P(^APCCCTRL(DUZ(2),0),U,4),1:"O")
  1. S APCDIN("SRV CAT")="E"
  1. S APCDIN("TIME RANGE")=0
  1. S APCDIN("USR")=DUZ
  1. K APCDALVR
  1. K APCDBSDV
  1. D GETVISIT^APCDAPI4(.APCDIN,.APCDBSDV)
  1. S T=$P(APCDBSDV(0),U,2)
  1. I T]"" S RETVAL="0^could not create event visit" Q ;errored
  1. S V=$O(APCDBSDV(0)) S APCDV=V
  1. I $G(APCDBSDV(V))="ADD" D DEDT^APCDEA2(APCDV)
  1. Q
  1. EVSIT ;EP - get/create event visit
  1. I $L($T(^BSDAPI4)) D Q
  1. .D BSD
  1. .D PLUV
  1. K APCDVSIT
  1. K APCDALVR
  1. S APCDALVR("APCDAUTO")=""
  1. S APCDALVR("APCDPAT")=APCDP
  1. S APCDALVR("APCDCAT")="E"
  1. S APCDALVR("APCDLOC")=DUZ(2)
  1. S APCDALVR("APCDTYPE")=$S($P($G(^APCCCTRL(DUZ(2),0)),U,4)]"":$P(^APCCCTRL(DUZ(2),0),U,4),1:"O")
  1. S APCDALVR("APCDDATE")=APCDD_".12"
  1. D ^APCDALV
  1. S APCDV=$G(APCDALVR("APCDVSIT"))
  1. I $G(APCDALVR("APCDVSIT","NEW")) D DEDT^APCDEA2(APCDVSIT)
  1. K APCDALVR
  1. D PLUV
  1. Q
  1. ANYACTP(P,EDATE) ;EP - does this patient have any active problems?
  1. I '$G(P) Q 0
  1. S EDATE=$G(EDATE)
  1. NEW X,Y,Z
  1. S Z=0
  1. S X=0 F S X=$O(^AUPNPROB("AC",P,X)) Q:X'=+X!(Z) D
  1. .Q:'$D(^AUPNPROB(X,0))
  1. .Q:$P(^AUPNPROB(X,0),U,12)="I"
  1. .Q:$P(^AUPNPROB(X,0),U,12)="D"
  1. .I EDATE,$P(^AUPNPROB(X,0),U,8)>EDATE Q
  1. .S Z=1
  1. .Q
  1. Q Z
  1. PLR(APCDTDA) ;EP - called from nap template to create PLR entry
  1. D EN^XBNEW("PLR1^APCDAPRB","APCDTDA")
  1. Q
  1. PLR1 ;
  1. ;create PLR entry on this visit
  1. ;create V UPDATED/REVIEWED entry
  1. NEW APCDALVR,APCDVAL
  1. S APCDVAL=$O(^AUTTCRA("C","PLR",0))
  1. S APCDALVR("APCDPAT")=$P(^AUPNVRUP(APCDTDA,0),U,2)
  1. S APCDALVR("APCDVSIT")=$P(^AUPNVRUP(APCDTDA,0),U,3)
  1. S APCDALVR("APCDATMP")="[APCDALVR 9000010.54 (ADD)]"
  1. S APCDALVR("APCDTCLA")="`"_APCDVAL
  1. S APCDALVR("APCDTCDT")=$P($G(^AUPNVRUP(APCDTDA,12)),U,1)
  1. I $P($G(^AUPNVRUP(APCDTDA,12)),U,4) S APCDALVR("APCDTEPR")="`"_$P(^AUPNVRUP(APCDTDA,12),U,4)
  1. D ^APCDALVR
  1. I $D(APCDALVR("APCDAFLG")) S RETVAL=0_"^Error creating V UPDATED/REVIEWED entry. PCC not updated."
  1. K APCDALVR
  1. Q
  1. CPS ;EP - CALLED FROM INPUT TEMPLATE APCD CPS TO UPDATE PROBLEM STATUS
  1. NEW APCDADFN
  1. S APCDADFN=DA
  1. D EN^XBNEW("CPS1^APCDAPRB","APCDADFN")
  1. K APCDADFN
  1. Q
  1. CPS1 ;EP
  1. ;CALL READER TO GET VALUE
  1. S DIR(0)="SBA^A:CHRONIC;I:INACTIVE;S:SUB-ACUTE;E:EPISODIC;O:SOCIAL;R:ROUTINE/ADMIN"
  1. S DIR("A")=" STATUS: ",DIR("B")=$$VAL^XBDIQ1(9000011,APCDADFN,.12) KILL DA D ^DIR KILL DIR
  1. S DIR("?")="NOTE: You cannot delete a problem with this mnemonic, use RPO to delete a problem."
  1. KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) Q
  1. S DIE="^AUPNPROB(",DA=APCDADFN,DR=".12///"_Y
  1. D ^DIE
  1. K DA,DIE,DR
  1. Q
  1. CPSA ;EP - CALLED FROM INPUT TEMPLATE APCD CPS TO UPDATE PROBLEM STATUS
  1. NEW APCDADFN
  1. S APCDADFN=DA
  1. D EN^XBNEW("CPSA1^APCDAPRB","APCDADFN")
  1. K APCDADFN
  1. Q
  1. CPSA1 ;EP
  1. ;CALL READER TO GET VALUE
  1. S DIR(0)="SBA^A:CHRONIC;I:INACTIVE;S:SUB-ACUTE;E:EPISODIC;O:SOCIAL;R:ROUTINE/ADMIN"
  1. S DIR("?")="This is the current activity status of this problem. If more detail, is needed, a notation may be filed with this problem"
  1. S DIR("A")=" STATUS: ",DIR("B")="CHRONIC" KILL DA D ^DIR KILL DIR
  1. KILL DA D ^DIR KILL DIR
  1. I $D(DIRUT) W "^ not allowed" G CPSA1
  1. I Y="" W " Required" G CPSA1
  1. S DIE="^AUPNPROB(",DA=APCDADFN,DR=".12///"_Y
  1. D ^DIE
  1. K DA,DIE,DR
  1. Q