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

BTIUPG1.m

Go to the documentation of this file.
  1. BTIUPG1 ; IHS/JM - PATIENT GOAL TIU OBJECT ROUTINE ;20-Mar-2013 15:09;DU
  1. ;;1.0;TEXT INTEGRATION UTILITIES;**1011**;NOV 04,2004;Build 13
  1. GETGOALS(DFN,TARGET,STATUS,NOSTEPS,NONOTES,TYPES) ;
  1. ;
  1. ; Patient Goals TIU Object API
  1. ;
  1. ;Required Parameters:
  1. ;
  1. ; DFN Patient identifier
  1. ;
  1. ; TARGET Where the medication data will be stored
  1. ;
  1. ;Optional Parameters:
  1. ;
  1. ; STATUS String containing one or more flags of goal types to display.
  1. ; "A" - Show active goals
  1. ; "I" - Show inactive goals
  1. ; "D" - Show declined goals
  1. ; Defaults is to show all goals
  1. ;
  1. ; NOSTEPS 0 = Show Goal Steps (Default)
  1. ; 1 = Do Not Show Steps
  1. ;
  1. ; NONOTES 0 = Show Goal Notes (Default)
  1. ; 1 = Do Not Show Notes
  1. ;
  1. ; TYPES String for limiting output to specific patient goal types,
  1. ; as defined in File# 9001002.4 PATIENT GOAL TYPES. Multiple
  1. ; types must be delimited by a semicolon ";". Example input
  1. ; might be "PHYSICAL ACTIVITY;NUTRITION;DIABETES CURRICULUM",
  1. ; which would return all goals with any of these goal types.
  1. ; This parameter is case sensitive and must match the exact
  1. ; text found in File# 9001002.4 PATIENT GOAL TYPES.
  1. ; Default is to display all goal types.
  1. ;
  1. N GOALS,LINEINDX,ACTIVE,INACTIVE,DECLINE,SHOWSTEP,SHOWNOTE,FILTER
  1. N TEXT,MAXLEN,IDX,FLTRTXT,DASHES,GDATA,GFOUND,GSTATUS,GACTIVE
  1. N GINACTIV,GDECLINE,PROCESS,GTYPES,GTYPECNT,FIDX,TEMP,TEXT2
  1. N LISTIDX,ACTIVLST,INACTLST,DECLNLST,FIRST,SUBIDX,SUBDATA,SUBFIRST
  1. N GIEN,STEPDATA,MULTILST,SHOWN,GSHOWN
  1. K @TARGET
  1. S LINEINDX=0,MAXLEN=73
  1. D GETGOAL^BEHOPGAP(.GOALS,DFN)
  1. I $D(@GOALS)=0 G NOGOALS
  1. S $P(DASHES,"=",MAXLEN)="="
  1. S SHOWSTEP='(+$G(NOSTEPS))
  1. S SHOWNOTE='(+$G(NONOTES))
  1. S STATUS=$G(STATUS)
  1. S (ACTIVE,INACTIVE,DECLINE)=1
  1. I $TR(STATUS,"AID","")'=STATUS D
  1. . S ACTIVE=STATUS["A"
  1. . S INACTIVE=STATUS["I"
  1. . S DECLINE=STATUS["D"
  1. ;
  1. ; Display Report Criteria
  1. ;
  1. S TEXT=""
  1. I (ACTIVE&INACTIVE&DECLINE) S TEXT="All"
  1. E D
  1. . I ACTIVE S TEXT="Active"
  1. . I INACTIVE D APPEND(.TEXT,"Inactive"," and")
  1. . I DECLINE D APPEND(.TEXT,"Declined"," and")
  1. D APPEND(.TEXT,"Patient Goals,")
  1. I SHOWSTEP D APPEND(.TEXT,"including") I 1
  1. E D APPEND(.TEXT,"excluding")
  1. D APPEND(.TEXT,"steps")
  1. I SHOWSTEP=SHOWNOTE D APPEND(.TEXT,"and") I 1
  1. E D
  1. . S TEXT=TEXT_","
  1. . I SHOWNOTE D APPEND(.TEXT,"including") I 1
  1. . E D APPEND(.TEXT,"excluding")
  1. D APPEND(.TEXT,"notes.")
  1. D ADD(TEXT)
  1. ;
  1. ; Display Filters
  1. ;
  1. S FILTER=$G(TYPES)
  1. I $L(FILTER)>0 D
  1. . S TEXT=""
  1. . F IDX=1:1 S FLTRTXT=$P(FILTER,";",IDX) Q:FLTRTXT="" D APPEND(.TEXT,FLTRTXT,",")
  1. . S TEXT=": "_TEXT
  1. . I FILTER[";" S TEXT="s"_TEXT
  1. . S TEXT="Only showing goals of type"_TEXT_"."
  1. . D ADD(TEXT)
  1. ;
  1. ; GETGOAL^BEHOPGAP and GETSTEP^BEHOPGAP return data in the same ^TMP global.
  1. ; To avoid overwriting data when processing steps, the original goal data
  1. ; is moved to a temporary "GOALS" node of the TARGET ^TMP global
  1. ;
  1. I SHOWSTEP D
  1. . M @TARGET@("GOALS")=@GOALS
  1. . K @GOALS
  1. . S GOALS=$NA(@TARGET@("GOALS"))
  1. ;
  1. ; Display Data
  1. ;
  1. S MULTILST=((ACTIVE+INACTIVE+DECLINE)>1)
  1. I 'MULTILST D ADD(DASHES)
  1. S FILTER=";"_FILTER_";"
  1. S ACTIVLST=1,INACTLST=2,DECLNLST=3
  1. S (GFOUND,SHOWN)=0
  1. ;
  1. ; Call LSTGOALS up to 3 times in order to sort goals by status
  1. ;
  1. F LISTIDX=1:1:3 D
  1. . I (LISTIDX=ACTIVLST)&('ACTIVE) Q
  1. . I (LISTIDX=INACTLST)&('INACTIVE) Q
  1. . I (LISTIDX=DECLNLST)&('DECLINE) Q
  1. . D LSTGOALS
  1. G SUMMARY
  1. ;
  1. LSTGOALS ;
  1. I MULTILST D ; If more than one status, display a sub-header
  1. . D ADD("")
  1. . S TEXT=$S(LISTIDX=ACTIVLST:"Active",LISTIDX=INACTLST:"Inactive",LISTIDX=DECLNLST:"Declined",1:"")
  1. . D APPEND(.TEXT,"Patient Goals")
  1. . D ADD(TEXT) D ADD(DASHES)
  1. ;
  1. ; Loop through the goal data
  1. ;
  1. S IDX=0,FIRST=1,GSHOWN=0
  1. N CNT S CNT=0
  1. F S IDX=$O(@GOALS@(IDX)) Q:IDX="" D
  1. . S GDATA=$G(@GOALS@(IDX,0))
  1. . ;
  1. . ; Determine if goal should be displayed
  1. . ;
  1. . S GSTATUS=$P($P(GDATA,U,10),";")
  1. . I GSTATUS="D" Q ; Ignore deleted goals
  1. . S GFOUND=1
  1. . S (GACTIVE,GINACTIV)=0
  1. . S GDECLINE=($P(GDATA,U,2)'="GOAL SET")
  1. . I 'GDECLINE D
  1. .. S GACTIVE=(GSTATUS="A")!(GSTATUS="MA")
  1. .. S GINACTIV=(GSTATUS="S")!(GSTATUS="ME")
  1. . S PROCESS=0
  1. . I (LISTIDX=ACTIVLST)&(ACTIVE&GACTIVE) S PROCESS=1
  1. . I (LISTIDX=INACTLST)&(INACTIVE&GINACTIV) S PROCESS=1
  1. . I (LISTIDX=DECLNLST)&(DECLINE&GDECLINE) S PROCESS=1
  1. . I 'PROCESS Q
  1. . S GTYPES=$G(@GOALS@(IDX,10))
  1. . I FILTER'=";;" D
  1. .. S PROCESS=0
  1. .. F FIDX=1:1 S TEMP=$P(GTYPES,U,FIDX) Q:(PROCESS!(TEMP="")) D
  1. ... S TEMP=";"_TEMP_";"
  1. ... I FILTER[TEMP S PROCESS=1
  1. . I 'PROCESS Q
  1. . ;
  1. . ; Display Goal - column format not used because text fields
  1. . ; can be up to 120 characters long
  1. . ;
  1. . I FIRST S FIRST=0
  1. . E D ADD("")
  1. . S (SHOWN,GSHOWN)=1
  1. . S CNT=CNT+1
  1. . S TEXT="Goal "_CNT_") "_$G(@GOALS@(IDX,11))
  1. . ;S TEXT="Goal "_$P(GDATA,U,11)_") "_$G(@GOALS@(IDX,11))
  1. . D ADD(TEXT)
  1. . ;
  1. . ; Display Goal Types
  1. . ;
  1. . S TEXT2="",TEXT=" Goal Type",GTYPECNT=0
  1. . F FIDX=1:1 S TEMP=$P(GTYPES,U,FIDX) Q:TEMP="" S TEXT2=TEXT2_TEMP_", ",GTYPECNT=GTYPECNT+1
  1. . S TEXT2=$E(TEXT2,1,$L(TEXT2)-2) ; Strip last comma
  1. . I GTYPECNT>1 S TEXT=TEXT_"s"
  1. . S TEXT=TEXT_": "_TEXT2
  1. . D ADD(TEXT)
  1. . ;
  1. . ; Display Goal start/followup dates, status and reason
  1. . ;
  1. . S TEXT=" Start: "_$$DATESTR($P(GDATA,U,8))
  1. . I 'GDECLINE D APPEND(.TEXT," Follow Up: "_$$DATESTR($P(GDATA,U,9)))
  1. . D APPEND(.TEXT," Status: "_$S(GDECLINE:"Declined",1:$$STSTEXT(GSTATUS)))
  1. . D ADD(TEXT)
  1. . D ADD(" Reason: "_$G(@GOALS@(IDX,12)))
  1. . ;
  1. . ; Show Notes
  1. . ;
  1. . I SHOWNOTE,($D(@GOALS@(IDX,13))>9) D
  1. .. S SUBIDX=0,SUBFIRST=1
  1. .. F S SUBIDX=$O(@GOALS@(IDX,13,SUBIDX)) Q:SUBIDX="" D
  1. ... I SUBFIRST S SUBFIRST=0 S TEXT=" Notes: "
  1. ... E S TEXT=" " ; Additional notes line up with start of first note
  1. ... S SUBDATA=$G(@GOALS@(IDX,13,SUBIDX))
  1. ... S TEXT=TEXT_$$DATESTR($P(SUBDATA,U,2))_" "_$P(SUBDATA,U,3)
  1. ... D ADD(TEXT)
  1. . ;
  1. . ; Show Steps, but only for active goals - same design as GUI Component
  1. . ;
  1. . N CNT
  1. . I SHOWSTEP&(LISTIDX=ACTIVLST) D
  1. .. S GIEN=$P(GDATA,U),SUBIDX=0,SUBFIRST=1
  1. .. D GETSTEP^BEHOPGAP(.STEPDATA,GIEN)
  1. .. S CNT=0
  1. .. F S SUBIDX=$O(@STEPDATA@(SUBIDX)) Q:SUBIDX="" D
  1. ... S SUBDATA=$G(@STEPDATA@(SUBIDX,0))
  1. ... S CNT=CNT+1
  1. ... I SUBFIRST S SUBFIRST=0 S TEXT=" Step "
  1. ... E S TEXT=" "
  1. ... S TEXT=TEXT_CNT_") Start: "_$$DATESTR($P(SUBDATA,U,8))_" "
  1. ... ;S TEXT=TEXT_$P(SUBDATA,U,4)_") Start: "_$$DATESTR($P(SUBDATA,U,8))_" "
  1. ... D APPEND(.TEXT,"Follow Up: "_$$DATESTR($P(SUBDATA,U,9)))
  1. ... D APPEND(.TEXT," Status: "_$$STSTEXT($P($P(SUBDATA,U,12),";")))
  1. ... D ADD(TEXT)
  1. ... ; Line up step text with above line
  1. ... S TEXT=" "_$E(" ",1,$L($P(SUBDATA,U,4)))_$G(@STEPDATA@(SUBIDX,1))
  1. ... D ADD(TEXT)
  1. I 'GSHOWN D ADD("None Found.")
  1. Q
  1. ;
  1. SUMMARY ;
  1. ;
  1. ; Display goal count
  1. ;
  1. I 'GFOUND G NOGOALS ; Happens when only deleted goals are found
  1. I 'SHOWN D ADD("No Patient Goals found that match the above criteria.")
  1. G DONE
  1. ;
  1. NOGOALS ;
  1. K @TARGET
  1. D ADD("No patient goal information found.")
  1. G DONE
  1. ;
  1. DONE ;
  1. D ADD("")
  1. K @TARGET@("GOALS")
  1. Q "~@"_$NA(@TARGET)
  1. ;
  1. APPEND(VALUE,TXT,MIDDLE) ;
  1. I $L(VALUE)>0 D
  1. . I $L($G(MIDDLE))>0 S VALUE=VALUE_MIDDLE
  1. . S VALUE=VALUE_" "
  1. S VALUE=VALUE_TXT
  1. Q
  1. ;
  1. ADD(TXT) ; Saves TXT in TARGET
  1. N TXT2,SUBCOUNT,SUBLINE
  1. I $L(TXT)>MAXLEN D I 1
  1. . S TXT2=$$WRAP^TIULS(TXT,MAXLEN)
  1. . F SUBCOUNT=1:1 S SUBLINE=$P(TXT2,"|",SUBCOUNT) Q:SUBLINE="" D ADD2(SUBLINE)
  1. E D ADD2(TXT)
  1. Q
  1. ;
  1. ADD2(TXT) ;
  1. S LINEINDX=LINEINDX+1
  1. S @TARGET@(LINEINDX,0)=TXT
  1. Q
  1. ;
  1. DATESTR(DATE) ; returns Fileman date converted to MM/DD/YY format
  1. Q $S(+DATE>0:$E(DATE,4,5)_"/"_$E(DATE,6,7)_"/"_($E(DATE,1,3)+1700),1:"")
  1. ;
  1. STSTEXT(CODE) ;
  1. Q $S(CODE="A":"Active",CODE="MA":"Maintained",CODE="S":"Stopped",CODE="ME":"Met",1:"")