| 1 | TMGTIU02 ;TMG/TIU Text Object Expansion Fns;04/15/10
 | 
|---|
| 2 |          ;;1.0;TMG-LIB;**1**;04/15/10
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;"Kevin Toppenberg MD
 | 
|---|
| 5 |  ;"GNU General Public License (GPL) applies
 | 
|---|
| 6 |  ;"04/15/10
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  ;"=======================================================================
 | 
|---|
| 9 |  ;"PUBLIC FUNCTIONS
 | 
|---|
| 10 |  ;"=======================================================================
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 |  ;"=======================================================================
 | 
|---|
| 13 |  ;"PRIVATE FUNCTIONS
 | 
|---|
| 14 |  ;"=======================================================================
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  ;"=======================================================================
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 | GETPTFLD(DFN,PARAM) ;
 | 
|---|
| 19 |         ;"Purpose: This is the server-side code for the TIU TEXT OBJECT, which
 | 
|---|
| 20 |         ;"      will allow the user to retrieve a field from the PATIENT file.
 | 
|---|
| 21 |         ;"NOTE: This requires that patch TMG-CPRS-TEXTOBJ-PARAM*1.0*1 or later
 | 
|---|
| 22 |         ;"      be installed, to allow passing in of parameters from the CPRS client.
 | 
|---|
| 23 |         ;"Input: DFN -- This should be the IEN of the currently open patient
 | 
|---|
| 24 |         ;"       Param -- Field(s)^Flags^FormatString.  Details below
 | 
|---|
| 25 |         ;"            Field(s) -- required.  Options for input:
 | 
|---|
| 26 |         ;"                -  A single field number or name
 | 
|---|
| 27 |         ;"                -  A list of field numbers (or names), separated by semicolons
 | 
|---|
| 28 |         ;"                -  A range of field numbers (or names), in the form M:N,
 | 
|---|
| 29 |         ;"                         where M and N are the end points of the inclusive range.
 | 
|---|
| 30 |         ;"                         All field numbers within this range are retrieved.
 | 
|---|
| 31 |         ;"                -  A '*' for all fields at the top level (no sub-multiple record).
 | 
|---|
| 32 |         ;"                -  A '**' for all fields including all fields and data in sub-multiple fields.
 | 
|---|
| 33 |         ;"                -  Field number (or name) of a multiple followed by an * to indicate all
 | 
|---|
| 34 |         ;"                         fields and records in the sub-multiple for that field.
 | 
|---|
| 35 |         ;"                Invalid field names will be ignored
 | 
|---|
| 36 |         ;"            Flags -- Optional.
 | 
|---|
| 37 |         ;"                -  'F' -- include field name in results with value.  e.g. "AGE: 43" instead of just "43"
 | 
|---|
| 38 |         ;"                -         This flag is ignored if a FormatString is provided (see below)
 | 
|---|
| 39 |         ;"                -  'S' -- Keep all data values on a single line, separated by ';'.
 | 
|---|
| 40 |         ;"                -         If flag not provided, and multiple data fields are requested,
 | 
|---|
| 41 |         ;"                -         then the default is that each data value will be separated by a
 | 
|---|
| 42 |         ;"                -         CRLF [$C(13)_$C(10)]
 | 
|---|
| 43 |         ;"                -         This flag is ignored if a FormatString is provided (see below)
 | 
|---|
| 44 |         ;"                -  'R' -- Resolve fields to NAMES, even if a field NUMBER was used for input request
 | 
|---|
| 45 |         ;"                -         Note: this will affect the sorting order of the output (see FormatString
 | 
|---|
| 46 |         ;"                -         info below).  I.e. if R not specified, and field NUMBERS are used for input,
 | 
|---|
| 47 |         ;"                -         then results will be returned in numerical field number order by default.
 | 
|---|
| 48 |         ;"                -         If R is specified, then field numbers are converted to field NAMES, and that
 | 
|---|
| 49 |         ;"                -         is used to determine the order of output.
 | 
|---|
| 50 |         ;"                -  'N' -- Don't return values for empty fields.  This is helpful if ALL fields
 | 
|---|
| 51 |         ;"                -         were requested via '*'
 | 
|---|
| 52 |         ;"            FormatString -- A string to determine how results are passed back....
 | 
|---|
| 53 |         ;"                NOTE: without a format string, results will be passed back in the order returned
 | 
|---|
| 54 |         ;"                      by fileman.  I.e. if user requested fields "SEX;.01;AGE", then Fileman will
 | 
|---|
| 55 |         ;"                      place results into an array, which MUMPS will sort alphabetically, e.g.
 | 
|---|
| 56 |         ;"                      .01, then AGE, then SEX.  If "*" fields are requested, it would be even
 | 
|---|
| 57 |         ;"                      more complex.  A format string will allow the user to specify ORDER.
 | 
|---|
| 58 |         ;"                Format: e.g. "Any arbitrary text %FieldNameOrNum% more text %FieldNameOrNum% ..."
 | 
|---|
| 59 |         ;"                  (The goal was to follow the method used by printf in the c language.)
 | 
|---|
| 60 |         ;"                  -  Any arbitrary text can be included.
 | 
|---|
| 61 |         ;"                  -  Field numbers or names should be enclosed by the '%' character
 | 
|---|
| 62 |         ;"                       These will be replaced with actual data values.
 | 
|---|
| 63 |         ;"                  - '\n' can be included to specify line breaks
 | 
|---|
| 64 |         ;"                  - '%%' will be used to show a '%' in the output text
 | 
|---|
| 65 |         ;"                  - Invalid, or non-matching, field names/numbers will be ignored.
 | 
|---|
| 66 |         ;"
 | 
|---|
| 67 |         ;"Results: returns a string that will be sent back to CPRS, to be included in a text note
 | 
|---|
| 68 |         ;"NOTE: I have chosen to make this function work with only file 2 (PATIENT FILE).  I think
 | 
|---|
| 69 |         ;"      it could be a security violation if any CPRS user was able to look at any arbitrary file.
 | 
|---|
| 70 |         ;"
 | 
|---|
| 71 |         ;"Examples of PARAM inputs:
 | 
|---|
| 72 |         ;"    '.01'     -- returns .01 field, which is the patients NAME, e.g. "SMITH,JOHN A"
 | 
|---|
| 73 |         ;"    'NAME'    -- returns same value as above, e.g. "SMITH,JOHN A"
 | 
|---|
| 74 |         ;"    'NAME^F'  -- e.g result "NAME: SMITH,JOHN A"
 | 
|---|
| 75 |         ;"    'NAME;SEX;AGE^F' --> "AGE: 34"_$C(13)_$C(10)_"NAME: SMITH,JOHN A"_$C(13)_$C(10)_"SEX: MALE"
 | 
|---|
| 76 |         ;"    'NAME;SEX;AGE^S' --> "34; SMITH,JOHN A; MALE"
 | 
|---|
| 77 |         ;"    'NAME;SEX;AGE^^"NAME: %NAME%, %AGE% yrs., %SEX%"' --> "NAME: SMITH,JOHN A, 34 YRS., MALE"
 | 
|---|
| 78 |         ;"
 | 
|---|
| 79 |         NEW TMGFLDS,TMGFLAGS
 | 
|---|
| 80 |         NEW TMGFILE SET TMGFILE=2
 | 
|---|
| 81 |         NEW RESULT SET RESULT=""
 | 
|---|
| 82 |         SET PARAM=$GET(PARAM)
 | 
|---|
| 83 |         SET TMGFLDS=$PIECE(PARAM,"^",1)
 | 
|---|
| 84 |         IF TMGFLDS="" DO  GOTO GPDN
 | 
|---|
| 85 |         . SET RESULT="ERROR: No input parameter.  Example of use: |TMG PATIENT FLD{AGE}|"
 | 
|---|
| 86 |         SET DFN=$GET(DFN)
 | 
|---|
| 87 |         IF +DFN'>0 DO  GOTO GPDN
 | 
|---|
| 88 |         . SET RESULT="ERROR: Internal patient value DFN not defined.  Contact IRM"
 | 
|---|
| 89 |         NEW TMGIENS SET TMGIENS=DFN_","
 | 
|---|
| 90 |         SET TMGFLAGS=""
 | 
|---|
| 91 |         NEW TMGTEMP SET TMGTEMP=$$UP^XLFSTR($PIECE(PARAM,"^",2))
 | 
|---|
| 92 |         IF TMGTEMP["N" SET TMGFLAGS=TMGFLAGS_"N"
 | 
|---|
| 93 |         IF TMGTEMP["F" SET TMGFLAGS=TMGFLAGS_"R"
 | 
|---|
| 94 |         NEW TMGFORMAT SET TMGFORMAT=$PIECE(PARAM,"^",3)
 | 
|---|
| 95 |         NEW TMGOUT,TMGMSG
 | 
|---|
| 96 |         DO GETS^DIQ(TMGFILE,TMGIENS,TMGFLDS,TMGFLAGS,"TMGOUT","TMGMSG")
 | 
|---|
| 97 |         IF $DATA(TMGMSG("DIERR")) DO  GOTO GPDN
 | 
|---|
| 98 |         . SET RESULT=$$GetErrStr^TMGDEBUG(.TMGMSG)
 | 
|---|
| 99 |         NEW FLD,FLDNAME
 | 
|---|
| 100 |         SET FLD=""
 | 
|---|
| 101 |         IF TMGFORMAT="" DO
 | 
|---|
| 102 |         . FOR  SET FLD=$ORDER(TMGOUT(TMGFILE,TMGIENS,FLD)) QUIT:(FLD="")  DO
 | 
|---|
| 103 |         . . IF $DATA(TMGOUT(TMGFILE,TMGIENS,FLD,0)) QUIT  ;"For now, WP fields are not supported.  Could add later if needed.
 | 
|---|
| 104 |         . . NEW VALUE SET VALUE=$GET(TMGOUT(TMGFILE,TMGIENS,FLD))
 | 
|---|
| 105 |         . . IF VALUE="",TMGTEMP["N" QUIT
 | 
|---|
| 106 |         . . IF RESULT'="" DO
 | 
|---|
| 107 |         . . . IF TMGTEMP["S" SET RESULT=RESULT_"; "
 | 
|---|
| 108 |         . . . ELSE  SET RESULT=RESULT_$CHAR(13)_$CHAR(10)
 | 
|---|
| 109 |         . . IF TMGTEMP["F" DO
 | 
|---|
| 110 |         . . . IF FLD'=+FLD SET FLDNAME=FLD
 | 
|---|
| 111 |         . . . ELSE  SET FLDNAME=$PIECE($GET(^DD(TMGFILE,FLD,0)),"^",1)
 | 
|---|
| 112 |         . . . SET RESULT=RESULT_FLDNAME_": "
 | 
|---|
| 113 |         . . SET RESULT=RESULT_VALUE
 | 
|---|
| 114 |         ELSE  DO  ;"Handle format strings.
 | 
|---|
| 115 |         . SET RESULT=TMGFORMAT
 | 
|---|
| 116 |         . FOR  QUIT:(RESULT'["%")  DO
 | 
|---|
| 117 |         . . NEW SUBA,SUBB
 | 
|---|
| 118 |         . . SET SUBA=$PIECE(RESULT,"%",1)
 | 
|---|
| 119 |         . . SET FLD=$PIECE(RESULT,"%",2)
 | 
|---|
| 120 |         . . SET SUBB=$PIECE(RESULT,"%",3,999)
 | 
|---|
| 121 |         . . NEW VALUE
 | 
|---|
| 122 |         . . IF FLD="" SET VALUE="<@!@>"  ;"protect %%, later convert back to '%'
 | 
|---|
| 123 |         . . ELSE  SET VALUE=$GET(TMGOUT(TMGFILE,TMGIENS,FLD))
 | 
|---|
| 124 |         . . IF VALUE="" DO
 | 
|---|
| 125 |         . . . IF FLD=+FLD DO
 | 
|---|
| 126 |         . . . . SET FLD=$PIECE($GET(^DD(TMGFILE,FLD,0)),"^",1) ;"Convert # to name
 | 
|---|
| 127 |         . . . ELSE  DO
 | 
|---|
| 128 |         . . . . SET FLD=$ORDER(^DD(TMGFILE,"B",FLD,"")) ;"Convert name to #
 | 
|---|
| 129 |         . . . IF FLD'="" SET VALUE=$GET(TMGOUT(TMGFILE,TMGIENS,FLD))
 | 
|---|
| 130 |         . . . IF VALUE="" SET VALUE="??"
 | 
|---|
| 131 |         . . SET RESULT=SUBA_VALUE_SUBB
 | 
|---|
| 132 |         . NEW TMGALT
 | 
|---|
| 133 |         . SET TMGALT("<@!@>")="%"
 | 
|---|
| 134 |         . SET TMGALT("\n")=$CHAR(13)_$CHAR(10)
 | 
|---|
| 135 |         . SET RESULT=$$REPLACE^XLFSTR(RESULT,.TMGALT)
 | 
|---|
| 136 |         ;
 | 
|---|
| 137 | GPDN    QUIT RESULT | 
|---|