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

BEHOPGAP.m

Go to the documentation of this file.
  1. BEHOPGAP ;IHS/MSC/MGH - PATIENT GOALS APIs;05-Dec-2011 13:44;DU
  1. ;;1.1;BEH COMPONENTS;**058001**;MAY 14, 2009;Build 2
  1. ;
  1. ;
  1. ADDGOAL(RETVAL,DFN,GDAT) ;PEP -- add Patient Goal
  1. ;This API is called to add a new entry to the PATIENT GOALS file
  1. ;Input:
  1. ; - DFN = Patient DFN
  1. ; - GDAT = array of field data
  1. ; Details:
  1. ; DATA(0)=?GOAL?^ GOAL SET STATUS^WHERE SET^GOAL NUMBER^PROVIDER^START DATE^FOLLOWUP DATE^ USER
  1. ; DATA(1)=?TYPE?^ GOAL TYPE^GOAL TYPE^GOAL TYPE ETC çGOAL TYPES ARE FROM A SEPARATE FILE
  1. ; DATA(2)=?NAME?^GOAL NAME (FREE TEXT)
  1. ; DATA(3)=?REASON?^GOAL REASON(FREE TEXT)
  1. ; note: field .11 is always stuffed with A (Active) on an add so no need to pass in that field value
  1. ; note: field .02 is always stuffed with the value of DFN
  1. ; note: fields .03 and .05 are stuffed with DT and $$NOW
  1. ; note: fields .04 and .12 area stuffed with DUZ
  1. ;
  1. ; - RETVAL = string that returns value of call success/failure
  1. ;
  1. ;RETURN VALUE - RETVAL=ien of patient goal entry created OR 0^error message
  1. ;
  1. ;
  1. S RETVAL=""
  1. N GARRAY,I,J,DATA,FAC
  1. S I="" F S I=$O(GDAT(I)) Q:I="" D
  1. .I $P($G(GDAT(I)),U,1)="GOAL" D
  1. ..S DATA=$G(GDAT(I))
  1. ..S GARRAY(".01",1)=$P(DATA,U,2) ;goal set status
  1. ..I $P(DATA,U,3)="" S GARRAY(".06",1)=+$G(DUZ(2))
  1. ..E S GARRAY(".06",1)=$P(DATA,U,3) ;facility, DUZ(2) used if not sent
  1. ..S GARRAY(".07",1)=$P(DATA,U,4) ;goal number
  1. ..S GARRAY(".08",1)=$P(DATA,U,5) ;provider documenting, DUZ used if not sent
  1. ..S GARRAY(".09",1)=$P(DATA,U,6) ;goal start date ,date only
  1. ..S GARRAY(".1",1)=$P(DATA,U,7) ;goal followup date ,date only
  1. ..S GARRAY(".12",1)=$P(DATA,U,8) ;user last updated, DUZ used if not sent
  1. .I $P($G(GDAT(I)),U,1)="TYPE" D
  1. ..S J=2 F S TYPE=$P($G(GDAT(I)),U,J) Q:TYPE="" D
  1. ...S GARRAY("1000",J-1)=TYPE ;goal type can be multiple
  1. ...S J=J+1
  1. .I $P($G(GDAT(I)),U,1)="NAME" D ;goal name
  1. ..S GARRAY("1101",1)=$P($G(GDAT(I)),U,2)
  1. .I $P($G(GDAT(I)),U,1)="REASON" D ;goal reason
  1. ..S GARRAY("1201",1)=$P($G(GDAT(I)),U,2)
  1. D ADDGOAL^APCDGAPI(DFN,.GARRAY,.RETVAL)
  1. I +RETVAL=0 D
  1. .I $P(RETVAL,U,1)'=0 S RETVAL=0_U_RETVAL
  1. Q
  1. DELGOAL(RETVAL,GIEN,PRV,DDTE,DREA,DOTHER) ;PEP - called to delete a goal
  1. ;marks the goal status as "deleted", does not physically delete the goal
  1. ;INPUT -
  1. ; GIEN=goal IEN
  1. ; PRV= Provider who deleted goal uses DUZ if not passed
  1. ; DDTE=Date deleted, uses NOW If nothing passed
  1. ; DREA=Reason deleted (set of codes)
  1. ; DOTHER=Text if reason chosen is other
  1. ;
  1. ;OUTPUT - return value is 1 if delete successful or 0^error message if not successful
  1. I '$G(GIEN) S RETVAL="0^invalid ien" Q
  1. N APCDGIEN
  1. S APCDGIEN=GIEN
  1. I (DREA="O"!(DREA="OTHER"))&(DOTHER="") S RETVAL="0^Other delete reason needs a comment" Q
  1. D DELGOAL^APCDGAPI(APCDGIEN,PRV,DDTE,DREA,DOTHER,.RETVAL)
  1. Q
  1. EDITGOAL(RETVAL,GIEN,FUD,STAT,REVD,REVT) ;PEP- edit a goal entry
  1. ;only the following fields can be edited per requirements: F/U DATE (.09), STATUS (.11)
  1. ;you can also add a review date and review/follow up text, to edit a review comment use EDITREV API
  1. ;INPUT :
  1. ; GIEN=ien of goal
  1. ; FUD= new followup date
  1. ; STAT= new status
  1. ; REVD= review date (optional)
  1. ; REVT= review comment (optional)
  1. ; if adding a review both review date and comment are required, if both are not passed they
  1. ; are ignored
  1. ;OUTPUT : 1 if edit successful, 0^error message if not successful
  1. ;
  1. S RETVAL=""
  1. I '$G(GIEN) S RETVAL="0^invalid ien" Q
  1. S REVD=$G(REVD)
  1. S REVT=$G(REVT)
  1. D EDITGOAL^APCDGAPI(GIEN,FUD,STAT,REVD,REVT,.RETVAL)
  1. I RETVAL="" S RETVAL=1
  1. Q
  1. ;
  1. NEXTGN(RET,DFN,FAC) ;PEP - return next available goal number for patient P, facility F
  1. S RET=$$NEXTGN^APCDGAPI(DFN,FAC)
  1. Q
  1. ;
  1. GETGOAL(RET,DFN) ;PEP Return a list of a patient's goals
  1. ; (goal no,0)=IEN(1)^GSET(2)^CREATED(3)^BY(4)^LASTMODIFIED(5)^FACILITY(6)
  1. ; ^PROVIDER(7)^STARTDT(8)^FOLLOWUPDT(9)^STATUS(10)^GOAL NUMBER (11)
  1. ; (goal no,10)=TYPE1^TYPE2^TYPE3...
  1. ; (goal no,11)=GOALNAME
  1. ; (goal no,12)=GOALREASON
  1. ; (goal no,13,n)=REVIEW DATE(1)^NOTE(2)
  1. N GRIEN,FILE,FIELDS,IEN,ARRAY,ERRARRY,GNAME,GTYP,CNT,SFAC,REV,REVDT,REVTXT,CNT,TIEN
  1. N GSET,GOALNO,GDATE,GBY,GMOD,GFAC,GPROV,GSTART,GFUP,GSTAT,GTYPE,GREASON,GSTATE
  1. S FILE=9000093
  1. S RET=$$TMPGBL,GRIEN=""
  1. F S GRIEN=$O(^AUPNGOAL("AC",DFN,GRIEN)) Q:'GRIEN D
  1. .S IEN=GRIEN_","
  1. .;Get all the data that is needed for the zero nodes
  1. .D GETS^DIQ(FILE,GRIEN,"*","IE","ARRAY","ERRARRY")
  1. .S GSET=$G(ARRAY(FILE,IEN,.01,"E"))
  1. .S GDATE=$G(ARRAY(FILE,IEN,.03,"I"))
  1. .S GBY=$G(ARRAY(FILE,IEN,.04,"E"))
  1. .S GMOD=$G(ARRAY(FILE,IEN,.05,"I"))
  1. .S GFAC=$G(ARRAY(FILE,IEN,.06,"E"))
  1. .S GOALNO=$G(ARRAY(FILE,IEN,.07,"E"))
  1. .S GPROV=$G(ARRAY(FILE,IEN,.08,"E"))
  1. .S GSTART=$G(ARRAY(FILE,IEN,.09,"I"))
  1. .S GFUP=$G(ARRAY(FILE,IEN,.1,"I"))
  1. .S GSTAT=$G(ARRAY(FILE,IEN,.11,"I"))
  1. .S GSTATE=$G(ARRAY(FILE,IEN,.11,"E"))
  1. .I GSTAT'="" S GSTAT=GSTAT_";"_GSTATE
  1. .Q:GSTAT="D"
  1. .;Get the text needed for the 11 and 12 nodes
  1. .S GNAME=$G(ARRAY(FILE,IEN,1101,"E"))
  1. .S GREASON=$G(ARRAY(FILE,IEN,1201,"E"))
  1. .S @RET@(GOALNO,0)=GRIEN_U_GSET_U_GDATE_U_GBY_U_GMOD_U_GFAC_U_GPROV_U_GSTART_U_GFUP_U_GSTAT_U_GOALNO
  1. .;Get the data from the goal type multiple (goals may have more than 1 type)
  1. .S GTYPE=""
  1. .S TIEN=0 F S TIEN=$O(^AUPNGOAL(GRIEN,10,TIEN)) Q:'+TIEN D
  1. ..S GTYP=$G(^AUPNGOAL(GRIEN,10,TIEN,0))
  1. ..I GTYPE="" S GTYPE=$P($G(^APCDTPGT(GTYP,0)),U,1)
  1. ..E S GTYPE=GTYPE_U_$P($G(^APCDTPGT(GTYP,0)),U,1)
  1. .S @RET@(GOALNO,10)=GTYPE
  1. .S @RET@(GOALNO,11)=GNAME
  1. .S @RET@(GOALNO,12)=GREASON
  1. .S CNT=0,REV=0 F S REV=$O(^AUPNGOAL(GRIEN,13,REV)) Q:'+REV D
  1. ..S REVDT=$P($G(^AUPNGOAL(GRIEN,13,REV,0)),U,1)
  1. ..S REVTXT=$P($G(^AUPNGOAL(GRIEN,13,REV,0)),U,2)
  1. ..S CNT=CNT+1
  1. ..S @RET@(GOALNO,13,CNT)="REVIEW"_U_REVDT_U_REVTXT
  1. Q
  1. GETSTEP(RET,GIEN) ;Get the step data
  1. ;Input GIEN=goal IEN
  1. ;Ouptut global array of steps for a particular goal
  1. ;format equals
  1. ;zero node=Goal ien [1] ^ facility [2] ^ step ien [3] ^ Step number [4] ^ Created by [5] ^ created date [6] ^
  1. ;Step type [7] ^ step start dt [8] ^ step followup date [9] ^ user last modififed [10] ^ last modified date [11]
  1. ;^ step status [12] ^ provider [13]
  1. ;one node= Step text
  1. N FILE,SFAC,CNT
  1. S FILE=9000093,CNT=0
  1. S RET=$$TMPGBL
  1. S SFAC=0 F S SFAC=$O(^AUPNGOAL(GIEN,21,SFAC)) Q:'+SFAC D
  1. .S FAC=$P($G(^AUPNGOAL(GIEN,21,SFAC,0)),U,1)
  1. .S FNAME=$P($G(^DIC(4,FAC,0)),U,1)
  1. .D STEPS(GIEN,SFAC,FAC,FNAME)
  1. Q
  1. STEPS(GOAL,SFAC,FAC,FNAME) ;Get the step data for each goal
  1. N SIEN,LKP,GFLDS,FILE1,GDATA,GERR,STATUS
  1. N STEPNO,SBY,SWHEN,STYPE,SSTART,SFUP,SUPD,SMOD,SSTATUS,SPROV,STEXT
  1. S SIEN=0 F S SIEN=$O(^AUPNGOAL(GOAL,21,SFAC,11,SIEN)) Q:'+SIEN D
  1. .S LKP=SIEN_","_SFAC_","_GOAL_",",FILE1=9000093.211101
  1. .S STEPNO=$$GET1^DIQ(FILE1,LKP,".01")
  1. .S SBY=$$GET1^DIQ(FILE1,LKP,".02")
  1. .S SWHEN=$$GET1^DIQ(FILE1,LKP,".03","I")
  1. .S STYPE=$$GET1^DIQ(FILE1,LKP,".04")
  1. .S SSTART=$$GET1^DIQ(FILE1,LKP,".05","I")
  1. .S SFUP=$$GET1^DIQ(FILE1,LKP,".06","I")
  1. .S SUPD=$$GET1^DIQ(FILE1,LKP,".07")
  1. .S SMOD=$$GET1^DIQ(FILE1,LKP,".08","I")
  1. .S SSTATUS=$$GET1^DIQ(FILE1,LKP,".09")
  1. .Q:SSTATUS="DELETED"
  1. .S STATUS=$$GET1^DIQ(FILE1,LKP,".09","I")
  1. .S SPROV=$$GET1^DIQ(FILE1,LKP,".1")
  1. .S @RET@(SIEN,0)=GIEN_U_FAC_";"_FNAME_U_SIEN_U_STEPNO_U_SBY_U_SWHEN_U_STYPE_U_SSTART_U_SFUP_U_SUPD_U_SMOD_U_STATUS_";"_SSTATUS_U_SPROV
  1. .S STEXT=$$GET1^DIQ(FILE1,LKP,1101)
  1. .S @RET@(SIEN,1)=STEXT
  1. Q
  1. ADDREV(RETVAL,GIEN,REVD,REVT) ;PEP - ADD A REVIEW TO A GOAL 9000093.13
  1. ;INPUT:
  1. ;GIEN= ien of goal
  1. ;REVD= review date
  1. ;REVT= review text
  1. ;OUTPUT: ien of review entry in multiple or 0^error text
  1. ;
  1. I '$G(GIEN) S RETVAL="0^invalid ien" Q
  1. D ADDREV^APCDGAP2(GIEN,REVD,REVT,.RETVAL)
  1. Q
  1. ;
  1. ADDSTEP(RETVAL,GIEN,SDAT) ;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. N I,J,SDAT2
  1. S I="" F S I=$O(SDAT(I)) Q:I="" D
  1. .S J=I+1
  1. .S SDAT2(J)=SDAT(I)
  1. D ADDSTEP^APCDGAP2(GIEN,.SDAT2,.RETVAL)
  1. S RETVAL=RETVAL(1)
  1. Q
  1. DELSTEP(RET,GIEN,LIEN,SIEN,PRV,SDTE,SREA,SOTHER) ;PEP - DELETE A STEP
  1. ;delete a step
  1. ; INP =
  1. ; GIEN=Goal IEN
  1. ; LINE=Location
  1. ; SIEN=Step IEN
  1. ; PRV= Who deleted (defaults to DUZ if not sent)
  1. ; SDTE= When deleted (defaults to NOW If not sent)
  1. ; SREA= Reason deleted (set of codes)
  1. ; SOTHER=Text if reason is other
  1. ; OUTPUT = 1 if delete successful or 0^error message
  1. S RET=""
  1. I '$G(GIEN) S RET="0^invalid goal ien" Q
  1. S SOTHER=$G(SOTHER)
  1. S X=SDTE D ^%DT S SDTE=Y
  1. I (SREA="O"!(SREA="OTHER"))&(SOTHER="") S RET="0^Text must be sent with OTHER reason" Q
  1. D DELSTEP^APCDGAP2(GIEN,LIEN,SIEN,PRV,SDTE,SREA,SOTHER,.RET)
  1. Q
  1. EDITSTEP(RETVAL,GIEN,LIEN,SIEN,FUD,STAT) ;PEP - edit a step entry
  1. ;edit a step entry
  1. ;per requirements only the followup date and status can be edited
  1. ;INPUT:
  1. ; GIEN=goal ien
  1. ; LIEN=location ien
  1. ; SIEN=Step ien
  1. ; FUD= new f/u date
  1. ; STAT=status
  1. ;OUTPUT: 1 if edit successful, 0^error message if not successful
  1. I '$G(GIEN) S RETVAL="0^invalid ien" Q
  1. D EDITSTEP^APCDGAP2(GIEN,LIEN,SIEN,FUD,STAT,.RETVAL)
  1. Q
  1. NEXTSN(RET,GIEN,FAC) ;PEP - return next step number for this goal, facility
  1. S RET=$$NEXTSN^APCDGAP2(GIEN,FAC)
  1. Q
  1. TMPGBL() ;EP
  1. K ^TMP("BEHOGOAL",$J) Q $NA(^($J))