Ignore:
Timestamp:
Dec 4, 2009, 12:11:15 AM (14 years ago)
Author:
George Lilly
Message:

revised back to 6/30/08 version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • WorldVistAEHR/trunk/r/CLINICAL_REMINDERS-PXRM/PXRMMH.m

    r613 r623  
    1 PXRMMH  ; SLC/PKR - Handle mental health findings. ;11/23/2007
    2         ;;2.0;CLINICAL REMINDERS;**4,6**;Feb 04, 2005;Build 123
    3         ;
    4         ;=======================================================
    5 EVALFI(DFN,DEFARR,ENODE,FIEVAL) ;Evaluate mental health findings.
    6         D EVALFI^PXRMINDX(DFN,.DEFARR,ENODE,.FIEVAL)
    7         Q
    8         ;
    9         ;=======================================================
    10 EVALPL(FINDPA,ENODE,TERMARR,PLIST)      ;Evaluate mental health term findings
    11         ;for patient lists.
    12         D EVALPL^PXRMINDL(.FINDPA,ENODE,.TERMARR,PLIST)
    13         Q
    14         ;
    15         ;=======================================================
    16 EVALTERM(DFN,FINDPA,ENODE,TERMARR,TFIEVAL)      ;Evaluate mental
    17         ;health instrument terms.
    18         D EVALTERM^PXRMINDX(DFN,.FINDPA,ENODE,.TERMARR,.TFIEVAL)
    19         Q
    20         ;
    21         ;=======================================================
    22 GETDATA(DASP,FIEVT)     ;Return the data for a MH Administrations entry.
    23         ;Some tests require the YSP key in order to get a score.
    24         N DAS,DATA,IND,SCALE
    25         S DAS=$P(DASP,"S",1)
    26         S SCALE=+$P(DASP,"S",2)
    27         ;DBIA #5043
    28         D ENDAS71^YTQPXRM6(.DATA,DAS)
    29         I $G(DATA(1))="[ERROR]" Q
    30         I SCALE=0 S SCALE=+$O(DATA("SI",""))
    31         S FIEVT("MH TEST")=$P(DATA(2),U,3)
    32         S IND=0
    33         F  S IND=$O(DATA("SI",IND)) Q:IND=""  S FIEVT("S",IND)=$P(DATA("SI",IND),U,3,4)
    34         S IND=0
    35         F  S IND=$O(DATA("R",IND)) Q:IND=""  S FIEVT("R",IND)=$P(DATA("R",IND),U,6)
    36         I $D(DATA("SI",SCALE)) S FIEVT("VALUE")=FIEVT("S",SCALE),FIEVT("SCALE NAME")=$P(DATA("SI",SCALE),U,2)
    37         Q
    38         ;
    39         ;=======================================================
    40 MHVOUT(INDENT,IFIEVAL,NLINES,TEXT)      ;Produce the MHV output.
    41         N DATE,IND,JND,MHTEST,NOUT,SCALE,SNAME,SCORE,TEXTOUT
    42         S MHTEST="Mental Health Test: "_IFIEVAL("MH TEST")_" = "
    43         S IND=0
    44         F  S IND=+$O(IFIEVAL(IND)) Q:IND=0  D
    45         . S DATE="("_$$EDATE^PXRMDATE(IFIEVAL(IND,"DATE"))_")"
    46         . S TEMP=MHTEST_DATE
    47         . S SNAME=$G(IFIEVAL(IND,"SCALE NAME"))
    48         . I SNAME'="" S TEMP=TEMP_" scale: "_SNAME_" -"
    49         . S SCORE=$G(IFIEVAL(IND,"VALUE"))
    50         . I SCORE'="" S TEMP=TEMP_"  raw score: "_$P(SCORE,U,1)_", transformed score: "_$P(SCORE,U,2)
    51         . D FORMATS^PXRMTEXT(INDENT+2,PXRMRM,TEMP,.NOUT,.TEXTOUT)
    52         . F JND=1:1:NOUT S NLINES=NLINES+1,TEXT(NLINES)=TEXTOUT(JND)
    53         S NLINES=NLINES+1,TEXT(NLINES)=""
    54         Q
    55         ;
    56         ;=======================================================
    57 OUTPUT(INDENT,IFIEVAL,NLINES,TEXT)      ;Produce the clinical
    58         ;maintenance output.
    59         N IND,JND,MHTEST,NOUT,SCALE,SNAME,SCORE,TEXTOUT
    60         S MHTEST=IFIEVAL("MH TEST")
    61         S NLINES=NLINES+1
    62         S TEXT(NLINES)=$$INSCHR^PXRMEXLC(INDENT," ")_"Mental Health Test: "_MHTEST
    63         S IND=0
    64         F  S IND=+$O(IFIEVAL(IND)) Q:IND=0  D
    65         . S TEMP=$$EDATE^PXRMDATE(IFIEVAL(IND,"DATE"))
    66         . S SNAME=$G(IFIEVAL(IND,"SCALE NAME"))
    67         . I SNAME'="" S TEMP=TEMP_" scale: "_SNAME_" -"
    68         . S SCORE=$G(IFIEVAL(IND,"VALUE"))
    69         . I SCORE'="" S TEMP=TEMP_"  raw score: "_$P(SCORE,U,1)_", transformed score: "_$P(SCORE,U,2)
    70         . D FORMATS^PXRMTEXT(INDENT+2,PXRMRM,TEMP,.NOUT,.TEXTOUT)
    71         . F JND=1:1:NOUT S NLINES=NLINES+1,TEXT(NLINES)=TEXTOUT(JND)
    72         S NLINES=NLINES+1,TEXT(NLINES)=""
    73         Q
    74         ;
    75         ;=======================================================
    76 SCHELP(MHIEN)   ;Xecutable help for MH SCALE
    77         N DATA,IND,JND,NUM,SCALE,SNUM
    78         I MHIEN=0 D  Q
    79         . S SCALE(1)="This is not a valid Mental Health finding, selecting an MH scale does"
    80         . S SCALE(2)="not make sense"
    81         . D EN^DDIOL(.SCALE)
    82         ;DBIA #5053
    83         D SCALES^YTQPXRM5(.DATA,MHIEN)
    84         I DATA(1)="ERROR" D  Q
    85         . S SCALE(1)="There are no scales for this test."
    86         . D EN^DDIOL(.SCALE)
    87         S SCALE(1)="Valid scales are:"
    88         S SCALE(2)="SCALE NUMBER  SCALE NAME"
    89         S SCALE(3)="------------------------"
    90         S IND=0,JND=3
    91         F  S IND=$O(DATA("S",IND)) Q:IND=""  D
    92         . S JND=JND+1
    93         . S NUM=6-$L(IND)
    94         . S SCALE(JND)=$$INSCHR^PXRMEXLC(NUM," ")_(IND)_"        "_$P(DATA("S",IND),U,1)
    95         D EN^DDIOL(.SCALE)
    96         Q
    97         ;
    98         ;=======================================================
    99 SCHELPD(DA)     ;Xecutable help for MH SCALE in Result Group file 801.41
    100         N MHIEN
    101         S MHIEN=+$P($G(^PXRMD(801.41,DA,50)),U)
    102         D SCHELP^PXRMMH(MHIEN)
    103         Q
    104         ;=======================================================
    105 SCHELPF ;Xecutable help for MH SCALE in 811.9 findings.
    106         N FIND0,MHIEN
    107         S FIND0=^PXD(811.9,DA(1),20,DA,0)
    108         I FIND0["YTT(601.71" S MHIEN=$P(FIND0,";",1)
    109         E  S MHIEN=0
    110         D SCHELP(MHIEN)
    111         Q
    112         ;
    113         ;=======================================================
    114 SCHELPT ;Xecutable help for MH SCALE in 811.5 findings.
    115         N MHIEN,TFIND0
    116         S TFIND0=^PXRMD(811.5,DA(1),20,DA,0)
    117         I TFIND0["YTT(601.71" S MHIEN=$P(TFIND0,";",1)
    118         E  S MHIEN=0
    119         D SCHELP(MHIEN)
    120         Q
    121         ;
    122         ;=======================================================
    123 SCNAME(TEST,SCNUM)      ;Given the test ien and scale number return the
    124         ;scale name.
    125         N DATA,SCNAME
    126         D SCALES^YTQPXRM5(.DATA,TEST)
    127         Q $G(DATA("S",SCNUM))
    128         ;
    129         ;=======================================================
    130 SEVALFI(DFN,ITEM,NGET,SDIR,BDT,EDT,NFOUND,FLIST)        ;
    131         N FIEV,FINDING,IND,YS,DATA
    132         S YS("CODE")=ITEM,YS("DFN")=DFN
    133         S YS("BEGIN")=BDT,YS("END")=EDT
    134         ;PTTEST^YTQPXRM2 does not understand "*" for a limit so use 99.
    135         I NGET="*" S NGET=99
    136         S YS("LIMIT")=$S(SDIR=-1:NGET,1:-NGET)
    137         ;DBIA #5035
    138         D PTTEST^YTQPXRM2(.DATA,.YS)
    139         S NFOUND=$P(DATA(1),U,2)
    140         I NFOUND=0 Q
    141         F IND=1:1:NFOUND S FLIST(IND)=DATA(IND+1)
    142         Q
    143         ;
    144         ;=======================================================
    145 SEVALPL(ITEM,NOCC,BDT,EDT,PLIST)        ;Use MH API to get patient list. Called
    146         ;from PXRMINDL.
    147         N YS
    148         ;YTAPI10A does not understand "*" for a limit so use 99.
    149         ;OCCUR^YTQPXRM1 does not understand "*" for a limit so use 99.
    150         I NOCC="*" S NOCC=99
    151         S YS("CODE")=ITEM,YS("BEGIN")=BDT,YS("END")=EDT,YS("LIMIT")=NOCC
    152         ;DBIA #5034
    153         D OCCUR^YTQPXRM1(PLIST,.YS)
    154         Q
    155         ;
    156         ;=======================================================
    157 VSCALE(X,FIND0) ;Make sure that the mental health scale is valid.
    158         ;Either the scale number or the scale name can be used.
    159         N DATA,IND,MHIEN,MHTEST,SCALE,VALID
    160         S MHTEST=$P(FIND0,U,1)
    161         S MHIEN=$P(MHTEST,";",1)
    162         D SCALES^YTQPXRM5(.DATA,MHIEN)
    163         I +X>0 S VALID=$S($D(DATA("S",X)):1,1:0)
    164         E  D
    165         . S IND=1,VALID=0
    166         . F  S IND=$O(DATA("S",IND)) Q:(VALID)!(IND="")  D
    167         .. I X=$P(DATA("S",IND),U,1) S VALID=1 Q
    168         I 'VALID D EN^DDIOL(X_" is not a valid scale for this test!")
    169         I $O(DATA(""),-1)>20 H 1
    170         Q VALID
    171         ;
    172         ;=======================================================
    173 VSCALED(X,DA)   ;Make sure that the mental health scale is valid for a result
    174         ;group.
    175         I X="" Q 1
    176         ;Do not execute as part of a verify fields.
    177         I $G(DIUTIL)="VERIFY FIELDS" Q 1
    178         ;Do not execute as part of exchange.
    179         I $G(PXRMEXCH) Q 1
    180         N MHTEST
    181         S MHTEST=$P($G(^PXRMD(801.41,DA,50)),U)
    182         Q $$VSCALE(X,MHTEST)
    183         ;
    184         ;=======================================================
    185 VSCALEF(X)      ;Make sure that the mental health scale is valid for a finding.
    186         I X="" Q 1
    187         ;Do not execute as part of a verify fields.
    188         I $G(DIUTIL)="VERIFY FIELDS" Q 1
    189         ;Do not execute as part of exchange.
    190         I $G(PXRMEXCH) Q 1
    191         N FIND0
    192         S FIND0=^PXD(811.9,DA(1),20,DA,0)
    193         Q $$VSCALE(X,FIND0)
    194         ;
    195         ;=======================================================
    196 VSCALET(X)      ;Make sure that the mental health scale is valid for a
    197         ;term finding.
    198         I X="" Q 1
    199         ;Do not execute as part of a verify fields.
    200         I $G(DIUTIL)="VERIFY FIELDS" Q 1
    201         ;Do not execute as part of exchange.
    202         I $G(PXRMEXCH) Q 1
    203         N TFIND0
    204         S TFIND0=^PXRMD(811.5,DA(1),20,DA,0)
    205         Q $$VSCALE(X,TFIND0)
    206         ;
    207         ;=======================================================
    208 WARN    ;Warn the user that they must select a scale if they intend to use
    209         ;a condition.
    210         W !,"Remember that the score is returned as raw score^transformed score,"
    211         W !,"so if your Condition uses the raw score use +V or $P(V,U,1) and if"
    212         W !,"it uses the transformed score use $P(V,U,2)."
    213         Q
    214         ;
     1PXRMMH ; SLC/PKR - Handle mental health findings. ;04/05/2005
     2 ;;2.0;CLINICAL REMINDERS;**4**;Feb 04, 2005;Build 21
     3 ;
     4 ;=======================================================
     5EVALFI(DFN,DEFARR,ENODE,FIEVAL) ;Evaluate mental health findings.
     6 D EVALFI^PXRMINDX(DFN,.DEFARR,ENODE,.FIEVAL)
     7 Q
     8 ;
     9 ;=======================================================
     10EVALPL(FINDPA,ENODE,TERMARR,PLIST) ;Evaluate mental health term findings
     11 ;for patient lists.
     12 D EVALPL^PXRMINDL(.FINDPA,ENODE,.TERMARR,PLIST)
     13 Q
     14 ;=======================================================
     15EVALTERM(DFN,FINDPA,ENODE,TERMARR,TFIEVAL) ;Evaluate mental
     16 ;health instrument terms.
     17 D EVALTERM^PXRMINDX(DFN,.FINDPA,ENODE,.TERMARR,.TFIEVAL)
     18 Q
     19 ;
     20 ;=======================================================
     21GETDATA(DAS,FIEVT) ;Return the data for a Psych Instrument Patient entry.
     22 ;Some tests require the YSP key in order to get a score.
     23 N DASP,IND,SCALE,YSDATA
     24 ;DBIA #4442
     25 S DASP=$P(DAS,"S",1)
     26 S SCALE=$P(DAS,"S",2)
     27 D ENDAS^YTAPI10(.YSDATA,DASP)
     28 I $G(YSDATA(0))="[ERROR]" Q
     29 S FIEVT("MH TEST")=$P(YSDATA(2),U,3)
     30 I FIEVT("MH TEST")["GAF" S FIEVT("RATING")=$P(YSDATA(3),U,2) Q
     31 ;If no scale is specified use the first set of results.
     32 S IND=$S(SCALE="":6,1:SCALE+5)
     33 S FIEVT("YSDATA")=$G(YSDATA(IND))
     34 S FIEVT("SCALE NAME")=$P(FIEVT("YSDATA"),U,2)
     35 S (FIEVT("RAW SCORE"),FIEVT("VALUE"))=$P(FIEVT("YSDATA"),U,3)
     36 S FIEVT("TRANSFORMED SCORE")=$P(FIEVT("YSDATA"),U,4)
     37 Q
     38 ;
     39 ;=======================================================
     40MHVOUT(INDENT,IFIEVAL,NLINES,TEXT) ;Produce the MHV output.
     41 N DATE,IND,JND,MHTEST,NAME,NOUT,RATING,RSCORE,SCORE,TEXTOUT,TSCORE
     42 S MHTEST=IFIEVAL("MH TEST")
     43 ;Remove the dashes surrounding the name.
     44 S MHTEST=$TR(MHTEST,"-","")
     45 S NAME="Mental Health Test: "_MHTEST_" = "
     46 S IND=0
     47 F  S IND=+$O(IFIEVAL(IND)) Q:IND=0  D
     48 . S DATE=IFIEVAL(IND,"DATE")
     49 . S RSCORE=$G(IFIEVAL(IND,"RAW SCORE"))
     50 . S TSCORE=$G(IFIEVAL(IND,"TRANSFORMED SCORE"))
     51 . S RATING=$G(IFIEVAL(IND,"RATING"))
     52 . S SCORE=$S(RATING'="":RATING,TSCORE'="":TSCORE,RSCORE'="":RSCORE,1:"")
     53 . S TEMP=NAME_SCORE_" ("_$$EDATE^PXRMDATE(IFIEVAL(IND,"DATE"))_")"
     54 . D FORMATS^PXRMTEXT(INDENT+2,PXRMRM,TEMP,.NOUT,.TEXTOUT)
     55 . F JND=1:1:NOUT S NLINES=NLINES+1,TEXT(NLINES)=TEXTOUT(JND)
     56 S NLINES=NLINES+1,TEXT(NLINES)=""
     57 Q
     58 ;
     59 ;=======================================================
     60OUTPUT(INDENT,IFIEVAL,NLINES,TEXT) ;Produce the clinical
     61 ;maintenance output.
     62 N DATE,IND,JND,MHTEST,NOUT,RATING,RSCORE,TEXTOUT,TSCORE
     63 S MHTEST=IFIEVAL("MH TEST")
     64 ;Remove the dashes surrounding the name.
     65 S MHTEST=$TR(MHTEST,"-","")
     66 S NLINES=NLINES+1
     67 S TEXT(NLINES)=$$INSCHR^PXRMEXLC(INDENT," ")_"Mental Health Test: "_MHTEST
     68 S IND=0
     69 F  S IND=+$O(IFIEVAL(IND)) Q:IND=0  D
     70 . S DATE=IFIEVAL(IND,"DATE")
     71 . S TEMP=$$EDATE^PXRMDATE(IFIEVAL(IND,"DATE"))
     72 . S RSCORE=$G(IFIEVAL(IND,"RAW SCORE"))
     73 . I RSCORE'="" S TEMP=TEMP_" raw score - "_RSCORE
     74 . S TSCORE=$G(IFIEVAL(IND,"TRANSFORMED SCORE"))
     75 . I TSCORE'="" S TEMP=TEMP_"; transformed score - "_TSCORE
     76 . S RATING=$G(IFIEVAL(IND,"RATING"))
     77 . I RATING'="" S TEMP=TEMP_" Rating: "_RATING
     78 . D FORMATS^PXRMTEXT(INDENT+2,PXRMRM,TEMP,.NOUT,.TEXTOUT)
     79 . F JND=1:1:NOUT S NLINES=NLINES+1,TEXT(NLINES)=TEXTOUT(JND)
     80 S NLINES=NLINES+1,TEXT(NLINES)=""
     81 Q
     82 ;
     83 ;=======================================================
     84SCHELP(MHIEN) ;Xecutable help for MH SCALE
     85 N IND,JND,NUM,SCALE,TEMP,TEMP1
     86 I MHIEN=0 D  Q
     87 . S SCALE(1)="This is not a valid Mental Health finding, selecting an MH scale does"
     88 . S SCALE(2)="not make sense"
     89 . D EN^DDIOL(.SCALE)
     90 S SCALE(1)="SCALE NUMBER  SCALE NAME"
     91 S SCALE(2)="------------------------"
     92 S IND=0
     93 S JND=2
     94 F  S IND=$O(^YTT(601,MHIEN,"S",IND)) Q:+IND=0  D
     95 . S TEMP=^YTT(601,MHIEN,"S",IND,0)
     96 . S JND=JND+1
     97 . S TEMP1=$P(TEMP,U,1)
     98 . S NUM=6-$L(TEMP1)
     99 . S SCALE(JND)=$$INSCHR^PXRMEXLC(NUM," ")_TEMP1_"        "_$P(TEMP,U,2)
     100 D EN^DDIOL(.SCALE)
     101 Q
     102 ;
     103 ;=======================================================
     104SCHELPF ;Xecutable help for MH SCALE in 811.9 findings.
     105 N FIND0,MHIEN
     106 S FIND0=^PXD(811.9,DA(1),20,DA,0)
     107 I FIND0["YTT(601" S MHIEN=$P(FIND0,";",1)
     108 E  S MHIEN=0
     109 D SCHELP(MHIEN)
     110 Q
     111 ;
     112 ;=======================================================
     113SCHELPT ;Xecutable help for MH SCALE in 811.5 findings.
     114 N MHIEN,TFIND0
     115 S TFIND0=^PXRMD(811.5,DA(1),20,DA,0)
     116 I TFIND0["YTT(601" S MHIEN=$P(TFIND0,";",1)
     117 E  S MHIEN=0
     118 D SCHELP(MHIEN)
     119 Q
     120 ;
     121 ;=======================================================
     122SEVALFI(DFN,ITEM,NGET,SDIR,BDT,EDT,NFOUND,FLIST) ;
     123 N FIEV,FINDING,IND,YS,YSDATA
     124 S YS("CODE")=ITEM,YS("DFN")=DFN
     125 S YS("BEGIN")=BDT,YS("END")=EDT
     126 ;YTAPI10A does not understand "*" for a limit so use 99.
     127 I NGET="*" S NGET=99
     128 S YS("LIMIT")=$S(SDIR=-1:NGET,1:-NGET)
     129 ;DBIA #4458
     130 D PTTEST^YTAPI10A(.YSDATA,.YS)
     131 S NFOUND=$P(YSDATA(1),U,2)
     132 I NFOUND=0 Q
     133 F IND=1:1:NFOUND S FLIST(IND)=YSDATA(IND+1)
     134 Q
     135 ;
     136 ;=======================================================
     137SEVALPL(ITEM,NOCC,BDT,EDT,PLIST) ;Use MH API to get patient list. Called
     138 ;from PXRMINDL.
     139 N YS
     140 ;YTAPI10A does not understand "*" for a limit so use 99.
     141 I NOCC="*" S NOCC=99
     142 S YS("CODE")=ITEM,YS("BEGIN")=BDT,YS("END")=EDT,YS("LIMIT")=NOCC
     143 ;DBIA #4458
     144 D OCCUR^YTAPI10A(PLIST,.YS)
     145 Q
     146 ;
     147 ;=======================================================
     148VSCALE(X,FIND0) ;Make sure that the mental health scale is valid.
     149 ;Either the scale number or the scale name can be used.
     150 N MHIEN,MHTEST,SCALE,VALID
     151 S MHTEST=$P(FIND0,U,1)
     152 S MHIEN=$P(MHTEST,";",1)
     153 I +X>0 D  Q VALID
     154 . S VALID=$S($D(^YTT(601,MHIEN,"S",X)):1,1:0)
     155 E  D
     156 . S SCALE=$O(^YTT(601,MHIEN,"S","C",X,""))
     157 . S VALID=$S(SCALE="":0,1:1)
     158 Q VALID
     159 ;
     160 ;=======================================================
     161VSCALEF(X) ;Make sure that the mental health scale is valid for a finding.
     162 I X="" Q 1
     163 ;Do not execute as part of a verify fields.
     164 I $G(DIUTIL)="VERIFY FIELDS" Q 1
     165 ;Do not execute as part of exchange.
     166 I $G(PXRMEXCH) Q 1
     167 N FIND0
     168 S FIND0=^PXD(811.9,DA(1),20,DA,0)
     169 Q $$VSCALE(X,FIND0)
     170 ;
     171 ;=======================================================
     172VSCALET(X) ;Make sure that the mental health scale is valid for a
     173 ;term finding.
     174 I X="" Q 1
     175 ;Do not execute as part of a verify fields.
     176 I $G(DIUTIL)="VERIFY FIELDS" Q 1
     177 ;Do not execute as part of exchange.
     178 I $G(PXRMEXCH) Q 1
     179 N TFIND0
     180 S TFIND0=^PXRMD(811.5,DA(1),20,DA,0)
     181 Q $$VSCALE(X,TFIND0)
     182 ;
Note: See TracChangeset for help on using the changeset viewer.