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

APCDGAP2.m

Go to the documentation of this file.
  1. APCDGAP2 ;IHS/CMI/LAB - PATIENT GOALS APIs;11-Nov-2011 11:31;DU
  1. ;;2.0;IHS PCC SUITE;**7**;MAY 14, 2009
  1. ;
  1. ;
  1. ;
  1. ;
  1. ADDREV(APCDGIEN,APCDREVD,APCDREVT,RETVAL) ;PEP - ADD A REVIEW TO A GOAL 9000093.13
  1. ;INPUT: ien of goal,review date,review text,return value
  1. ;OUTPUT: ien of review entry in multiple or 0^error text
  1. ;
  1. I '$G(APCDGIEN) S RETVAL="0^invalid ien" Q
  1. I '$D(^AUPNGOAL(APCDGIEN)) S RETVAL="0^invalid ien, not entry" Q
  1. S APCDREVD=$G(APCDREVD)
  1. S APCDREVT=$G(APCDREVT)
  1. I APCDREVD="" S RETVAL="0^invalid review date" Q
  1. I APCDREVT="" S RETVAL="0^review text null" Q
  1. ;edit incoming values
  1. NEW DIE,DA,DR,X,Y,%DT,APCDFU,APCDI,APCDRD,APCDIENS,APCDFDA,APCDERR
  1. S X=$G(APCDREVD)
  1. S %DT=""
  1. D ^%DT
  1. I Y=-1 S RETVAL="0^review date invalid" Q
  1. S APCDRD=Y
  1. S Y=""
  1. D CHK^DIE(9000093.13,.02,"",APCDREVT,.Y)
  1. I Y="^" S RETVAL="0^invalid review note" Q
  1. ;add review to multiple
  1. S APCDIENS=""
  1. S APCDFDA(9000093.13,"+2,"_APCDGIEN_",",.01)=APCDRD
  1. S APCDFDA(9000093.13,"+2,"_APCDGIEN_",",.02)=APCDREVT
  1. D UPDATE^DIE("","APCDFDA","APCDIENS","APCDERR(1)")
  1. I $D(APCDERR(1)) S RETVAL=APCDERR("DIERR",1,"TEXT",1)
  1. S RETVAL=APCDIENS(2)
  1. Q
  1. ;
  1. ADDSTEP(APCDGIEN,SDAT,SRETVAL) ;PEP - add a step to a goal
  1. ;Add a Step to an existing goal
  1. ; SDAT - array of steps to be added if adding steps
  1. ; SDAT(n)=facility^step number^step type^step start date^step f/u date^provider^step text
  1. ; one entry in array for each step being added
  1. ; step number is optional, if not passed the next available step number will be used
  1. ; values can be internal or external
  1. ; user created / user last update fields auto stuffed with DUZ
  1. ; date created / date last updated fields auto stuffed with DT and NOW^XLFDT
  1. ;
  1. ; Example:
  1. ; SDAT(1)="5217^1^NUTRITION^3101029^3101231^1239^EAT LESS THAN 1200 CAAPCDTESTES PER DAY
  1. ; SDAT(2)="5217^2^PHYSICAL ACTIVITY^3101029^3101231^1239^WALK 60 MINUTES PER DAY
  1. NEW APCDF,APCDC,APCDSTEX,APCDSIEN,APCDIENS,APCDLOC,APCDE,APCDI,APCDERR,APCDGDAT,APCDSTD,APCDSNUM,APCDSTT,APCDSD,APCDFUD,APCDPROV,APCDNIEN
  1. NEW X,Y,DIC,DA
  1. K SRETVAL
  1. S APCDC=0 F S APCDC=$O(SDAT(APCDC)) Q:APCDC'=+APCDC D
  1. .S SRETVAL(APCDC)=""
  1. SREQ .;Required fields
  1. .F APCDF=1,3:1:7 I $P(SDAT(APCDC),U,1)="" S SRETVAL(APCDC)="0^"_APCDF_" field value missing, required to create a STEP"
  1. .;check all incoming data values and convert all to internal values
  1. .;check facility
  1. .S X=$P(SDAT(APCDC),U,1)
  1. .I X="" S X=DUZ(2)
  1. .I X'?1.N S X=$O(^DIC(4,"B",X,0))
  1. .I X="" S SRETVAL(APCDC)="0^Facility value invalid" Q
  1. .S APCDLOC=X
  1. .;
  1. .S X=$P(SDAT(APCDC),U,2) I X]"" I +X'=X!(X>9999)!(X<1) S SRETVAL(APCDC)="0^Step number invalid, must be a number between 1-9999" Q
  1. .I X="" S X=$$NEXTSN(APCDGIEN,APCDLOC)
  1. .S APCDSNUM=X
  1. .S Y=$O(^AUPNGOAL(APCDGIEN,21,"B",APCDLOC,0))
  1. .I Y,$D(^AUPNGOAL(APCDGIEN,21,Y,11,"B",APCDSNUM)) S SRETVAL(APCDC)="0^Step number already in use" Q
  1. .;check step type
  1. .S Y=$P(SDAT(APCDC),U,3) I Y?1.N,'$D(^APCDTPGT(Y)) D E("invalid patient goal type") Q
  1. .I Y'?1.N S X=Y,DIC="^APCDTPGT(",DIC(0)="" D ^DIC D Q:Y=-1
  1. ..I Y=-1 D E("invalid patient goal type") Q
  1. .S APCDSTT=+Y
  1. .;start date
  1. .S X=$P(SDAT(APCDC),U,4)
  1. .S %DT=""
  1. .D ^%DT
  1. .I Y=-1 S SRETVAL(APCDC)="0^start date invalid" Q
  1. .S APCDSD=Y
  1. .;follow up date
  1. .S X=$P(SDAT(APCDC),U,5)
  1. .S %DT=""
  1. .D ^%DT
  1. .I Y=-1 S SRETVAL(APCDC)="0^Goal start date invalid" Q
  1. .I Y<APCDSD S RETVAL="0^Follow up date cannot be prior to start date" Q
  1. .S APCDFUD=Y
  1. .;provider
  1. .S X=$P(SDAT(APCDC),U,6)
  1. .I X=""!(X?1.N) S (APCDPROV,X)=DUZ
  1. .S Y=""
  1. .I X'?1.N D CHK^DIE(9000093.211101,.1,"",X,.Y)
  1. .I Y="^" S SRETVAL(APCDC)="0^Provider value invalid" Q
  1. .I '$G(APCDPROV) S APCDPROV=Y
  1. .;step text
  1. .S X=$P(SDAT(APCDC),U,7)
  1. .D CHK^DIE(9000093.211101,1101,"",X,.Y)
  1. .I Y="^" S RETVAL="0^provider" Q
  1. .S APCDSTEX=Y
  1. .S APCDNIEN=$O(^AUPNGOAL(APCDGIEN,21,"B",APCDLOC,0))
  1. .I APCDNIEN="" S X="`"_APCDLOC,DIC="^AUPNGOAL("_APCDGIEN_",21,",DA(1)=APCDGIEN,DIC(0)="L",DIC("P")=$P(^DD(9000093,2100,0),U,2) D ^DIC K DIC,DA,DR,Y,X S APCDNIEN=$O(^AUPNGOAL(APCDGIEN,21,"B",APCDLOC,0))
  1. .I APCDNIEN="" S SRETVAL(APCDC)="0^ERROR UPDATING STEP LOCATION MULTIPLE" Q
  1. .K DIC
  1. .S X=APCDSNUM,DA(1)=APCDNIEN,DA(2)=APCDGIEN,DIC="^AUPNGOAL("_APCDGIEN_",21,"_APCDNIEN_",11,",DIC("P")=$P(^DD(9000093.21,1101,0),U,2),DIC(0)="L"
  1. .D ^DIC K DA,DR
  1. .I Y=-1 S SRETVAL(APCDC)="0^ERROR when updating step number multiple" Q
  1. .S DIE=DIC K DIC S (APCDSIEN,DA)=+Y
  1. .S DR=".02////^S X=DUZ;.03////^S X=DT;.07////^S X=DUZ;.08////^S X=$$NOW^XLFDT;.04////"_APCDSTT_";.05////"_APCDSD_";.06////"_APCDFUD_";.09////A;.1////^S X=APCDPROV;1101////"_APCDSTEX
  1. .D ^DIE
  1. .I $D(Y) S SRETVAL(APCDC)="0^error updating multiple for step entry" K DIE,DA,DR,Y Q
  1. .S SRETVAL(APCDC)=APCDSIEN
  1. Q
  1. DELSTEP(APCDGIEN,APCDLIEN,APCDSIEN,APCDSPRV,APCDSDTD,APCDSREA,APCDSOTH,RET) ;PEP - DELETE A STEP
  1. ;delete a step
  1. ; INP = Problem IEN,Location IEN,Note IEN
  1. ; OUTPUT = 1 if delete successful or 0^error message
  1. NEW DA
  1. S RET=""
  1. I '$G(APCDGIEN) S RET="0^invalid goal ien" Q
  1. I '$D(^AUPNGOAL(APCDGIEN,0)) S RET="0^invalid goal ien" Q
  1. I '$G(APCDLIEN) S RET="0^invalid location ien" Q
  1. I '$G(APCDSIEN) S RET="0^invalid note ien" Q
  1. S APCDLIEN=$O(^AUPNGOAL(APCDGIEN,21,"B",APCDLIEN,0))
  1. I 'APCDLIEN S RET="0^could not find location entry in multiple" Q
  1. I '$D(^AUPNGOAL(APCDGIEN,21,APCDLIEN,11,APCDSIEN)) S RET="0^invalid step ien, does not exist" Q
  1. S APCDSPRV=$G(APCDSPRV) I 'APCDSPRV S APCDSPRV=DUZ
  1. S APCDSDTD=$G(APCDSDTD) I 'APCDSDTD S APCDSDTD=$$NOW^XLFDT()
  1. S APCDSREA=$G(APCDSREA)
  1. S APCDSOTH=$G(APCDSOTH)
  1. S DA=APCDSIEN
  1. S DA(1)=APCDLIEN
  1. S DA(2)=APCDGIEN
  1. S DIE="^AUPNGOAL("_APCDGIEN_",21,"_APCDLIEN_",11,",DIC("P")=$P(^DD(9000093.21,1101,0),U,2)
  1. S DR=".09////D;2.01////"_APCDSPRV_";2.02////"_APCDSDTD_";2.03///"_APCDSREA_";2.04///"_APCDSOTH D ^DIE K DIE,DR,DA,Y
  1. I $D(Y) S RETVAL="0^error updating step status" Q
  1. S RET=1
  1. Q
  1. EDITSTEP(GIEN,LIEN,SIEN,APCDFUD,APCDSTAT,RET) ;PEP - edit a step entry
  1. ;edit a step entry
  1. ;per requirements only the followup date and status can be edited
  1. ;INPUT: goal ien, location ien, note ien, new f/u date, status
  1. ;OUTPUT: 1 if edit successful, 0^error message if not successful
  1. I '$G(GIEN) S RETVAL="0^invalid ien" Q
  1. I '$D(^AUPNGOAL(GIEN)) S RETVAL="0^invalid ien, not entry" Q
  1. S APCDFUD=$G(APCDFUD)
  1. S APCDSTAT=$G(APCDSTAT)
  1. I '$G(LIEN) S RET="0^invalid location ien" Q
  1. I '$G(SIEN) S RET="0^invalid note ien" Q
  1. S LIEN=$O(^AUPNGOAL(GIEN,21,"B",LIEN,0))
  1. I 'LIEN S RET="0^could not find location entry in multiple" Q
  1. I '$D(^AUPNGOAL(GIEN,21,LIEN,11,SIEN)) S RET="0^invalid note ien, does not exist" Q
  1. ;edit incoming values
  1. NEW DIE,DA,DR,X,Y,%DT,APCDFU,APCDI,APCDRD,APCDIENS,APCDFDA,APCDERR
  1. S X=$G(APCDFUD)
  1. I X="" G S1
  1. S %DT=""
  1. D ^%DT
  1. I Y=-1 S RETVAL="0^Goal followup date invalid" Q
  1. S APCDFU=Y
  1. S X=$P(^AUPNGOAL(GIEN,21,LIEN,11,SIEN,0),U,5) I X>APCDFU S RETVAL="0^STEP followup date cannot be less than start date" Q
  1. S1 ;
  1. S X=$G(APCDSTAT),APCDI=""
  1. D CHK^DIE(9000093,.11,"",X,.APCDI)
  1. I APCDI="^" S RETVAL="0^invalid status value" Q
  1. S DA=SIEN
  1. S DA(1)=LIEN
  1. S DA(2)=GIEN
  1. S DIE="^AUPNGOAL("_GIEN_",21,"_LIEN_",11,",DIC("P")=$P(^DD(9000093.21,1101,0),U,2)
  1. S DR=".09////"_APCDSTAT_";.06////"_APCDFU_";.07////^S X=DUZ;.08////^S X=$$NOW^XLFDT" D ^DIE K DIE,DR,DA,Y
  1. I $D(Y) S RET="0^error updating step status" Q
  1. S RET=1
  1. Q
  1. NEXTSN(I,F) ;PEP - return next step number for this goal, facility
  1. NEW X,Y,J
  1. S J=$O(^AUPNGOAL(I,21,"B",F,0))
  1. I 'J Q 1
  1. S (Y,X)=0 F S Y=$O(^AUPNGOAL(I,21,J,11,"B",Y)) S:Y X=Y I 'Y S X=X+1 K Y Q
  1. Q X
  1. NEXTGN(P,F) ;PEP - return next available goal number for patient P, facility F
  1. I $G(P)="" Q ""
  1. I $G(F)="" Q ""
  1. I '$D(^AUPNPAT(P)) Q ""
  1. I '$D(^AUTTLOC(F)) Q ""
  1. Q $E($O(^AUPNGOAL("AA",P,F,""),-1),2,999)\1+1
  1. ;
  1. E(V) ;
  1. S APCDC=APCDC+1,$P(RETVAL,"|",APCDC)=V
  1. Q