Changeset 412 for ccr/trunk/p


Ignore:
Timestamp:
Mar 17, 2009, 7:40:10 PM (15 years ago)
Author:
George Lilly
Message:

namespacing

Location:
ccr/trunk/p
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • ccr/trunk/p/CCRMEDS.m

    r396 r412  
    11CCRMEDS ; CCDCCR/GPL - CCR/CCD PROCESSING FOR MEDICATIONS ;07/23/08  14:33
    22 ;;0.1;CCDCCR;;JUL 16,2008;
    3  ;Copyright 2008 WorldVistA.  Licensed under the terms of the GNU
    4  ;General Public License See attached copy of the License.
     3 ;Copyright 2008,2009 George Lilly, University of Minnesota and Sam Habiel.
     4 ;Licensed under the terms of the GNU General Public License.
     5 ;See attached copy of the License.
    56 ;
    67 ;This program is free software; you can redistribute it and/or modify
     
    3334 ; INPATIENT MEDS IN EXTRACT^CCRMEDS4
    3435 ; ALL OTHERS HERE
    35  S MEDTVMAP=$NA(^TMP("GPLCCR",$J,"MEDMAP"))
     36 S MEDTVMAP=$NA(^TMP("C0CCCR",$J,"MEDMAP"))
    3637 K @MEDTVMAP ; CLEAR VARIABLE ARRAY
    3738 S @MEDTVMAP@(0)=0 ; INITIALIZE NUMBER OF MEDS PROCESSED
    38  S MEDTARYTMP=$NA(^TMP("GPLCCR",$J,"MEDARYTMP"))
     39 S MEDTARYTMP=$NA(^TMP("C0CCCR",$J,"MEDARYTMP"))
    3940 K @MEDTARYTMP ; KILL XML ARRAY
    4041 I $G(DUZ("AG"))="I" D  Q  ;
     
    5455 . S HASOP=1 ; SET FLAG TO KNOW HOW TO ADD XML
    5556 . I @MEDOUTXML@(0)>0 D  ; IF WE NEED TO COMBINE MEDS
    56  . . D INSINNER^GPLXPATH(MEDOUTXML,PENDINGXML) ;ADD PENDING TO ACTIVE
    57  . E  D CP^GPLXPATH(PENDINGXML,MEDOUTXML) ; NO ACTIVE MEDS, JUST COPY
     57 . . D INSINNER^C0CXPATH(MEDOUTXML,PENDINGXML) ;ADD PENDING TO ACTIVE
     58 . E  D CP^C0CXPATH(PENDINGXML,MEDOUTXML) ; NO ACTIVE MEDS, JUST COPY
    5859 . S MEDCNT=MEDCNT+@MEDTVMAP@(0) ; SAVE COUNT TO KNOW HOW TO ADD TO MAP
    5960 . ; W MEDCNT,!
     
    6566 . ; S HASOP=1 ; SET FLAG TO KNOW HOW TO ADD XML
    6667 . I @MEDOUTXML@(0)>0 D  ; IF WE NEED TO COMBINE MEDS
    67  . . D INSINNER^GPLXPATH(MEDOUTXML,PENDINGXML) ;ADD NON-VA TO MEDS
    68  . E  D CP^GPLXPATH(PENDINGXML,MEDOUTXML) ; NO PREVIOUS MEDS, JUST COPY
     68 . . D INSINNER^C0CXPATH(MEDOUTXML,PENDINGXML) ;ADD NON-VA TO MEDS
     69 . E  D CP^C0CXPATH(PENDINGXML,MEDOUTXML) ; NO PREVIOUS MEDS, JUST COPY
    6970 . S MEDCNT=MEDCNT+@MEDTVMAP@(0) ; SAVE COUNT TO KNOW HOW TO ADD TO MAP
    7071 . ; W MEDCNT,!
     
    8182 . Q
    8283 ; I DEBUG ZWR MEDRSLT
    83  M GPLMEDS=MEDRSLT
    84  S MEDTVMAP=$NA(^TMP("GPLCCR",$J,"MEDMAP"))
    85  S MEDTARYTMP=$NA(^TMP("GPLCCR",$J,"MEDARYTMP"))
     84 M C0CMEDS=MEDRSLT
     85 S MEDTVMAP=$NA(^TMP("C0CCCR",$J,"MEDMAP"))
     86 S MEDTARYTMP=$NA(^TMP("C0CCCR",$J,"MEDARYTMP"))
    8687 ; I 'HASOP K @MEDTVMAP,@MEDTARYTMP KILL MOVED TO TOP OF ROUTINE
    8788 ; FIRST GO THROUGH MEDRSLT ARRAY AND COUNT MEDS AND LINES IN MEDS
     
    188189 . S MEDARYTMP=$NA(@MEDTARYTMP@(ZI))
    189190 . K @MEDARYTMP
    190  . D MAP^GPLXPATH(MEDXML,MEDVMAP,MEDARYTMP)
     191 . D MAP^C0CXPATH(MEDXML,MEDVMAP,MEDARYTMP)
    191192 . I ZI=1&('HASOP) D  ; FIRST ONE IS JUST A COPY MAKE SURE OP IS NOT THERE
    192193 . . ; W "FIRST ONE",!
    193  . . D CP^GPLXPATH(MEDARYTMP,MEDOUTXML)
     194 . . D CP^C0CXPATH(MEDARYTMP,MEDOUTXML)
    194195 . E  D  ; AFTER THE FIRST OR IF THERE ARE OP, INSERT INNER XML
    195  . . D INSINNER^GPLXPATH(MEDOUTXML,MEDARYTMP)
     196 . . D INSINNER^C0CXPATH(MEDOUTXML,MEDARYTMP)
    196197 N MEDTMP,MEDI
    197  D MISSING^GPLXPATH(MEDOUTXML,"MEDTMP") ; SEARCH XML FOR MISSING VARS
     198 D MISSING^C0CXPATH(MEDOUTXML,"MEDTMP") ; SEARCH XML FOR MISSING VARS
    198199 I MEDTMP(0)>0 D  ; IF THERE ARE MISSING VARS - MARKED AS @@X@@
    199200 . W "MEDICATION MISSING ",!
  • ccr/trunk/p/CCRMEDS1.m

    r396 r412  
    3636 ; http://www.va.gov/vdl/documents/Clinical/Pharm-Outpatient_Pharmacy/phar_1_api_r0807.pdf
    3737 ; Output of API is ^TMP($J,"SUBSCRIPT",DFN,RXIENS).
    38  ; D PARY^GPLXPATH(MINXML)
     38 ; D PARY^C0CXPATH(MINXML)
    3939 N MEDS,MAP
    4040 K ^TMP($J,"CCDCCR") ; PLEASE DON'T KILL ALL OF ^TMP($J) HERE!!!!
     
    4747 N RXIEN S RXIEN=0
    4848 N MEDCOUNT S MEDCOUNT=0
    49  S MEDMAP=$NA(^TMP("GPLCCR",$J,"MEDMAP")) ; THIS IS THE VARIABLE MAP
     49 S MEDMAP=$NA(^TMP("C0CCCR",$J,"MEDMAP")) ; THIS IS THE VARIABLE MAP
    5050 S MEDCOUNT=@MEDMAP@(0) ; ACCOUNT FOR MEDS ALREADY IN ARRAY
    5151 F  S RXIEN=$O(MEDS(RXIEN)) Q:RXIEN=""  D  ; FOR EACH MEDICATION IN THE LIST
    5252 . S MEDCOUNT=MEDCOUNT+1
    5353 . I DEBUG W "RXIEN IS ",RXIEN,!
    54  . S MAP=$NA(^TMP("GPLCCR",$J,"MEDMAP",MEDCOUNT))
     54 . S MAP=$NA(^TMP("C0CCCR",$J,"MEDMAP",MEDCOUNT))
    5555 . ; K @MAP DO NOT KILL HERE, WAS CLEARED IN CCRMEDS
    5656 . S @MEDMAP@(0)=@MEDMAP@(0)+1 ; INCREMENT TOTAL MEDS IN VAR ARRAY
     
    204204 . S @MAP@("MEDFULLFILLMENTINSTRUCTIONS")=$G(^PSRX(RXIEN,"PRC",1,0))
    205205 . S @MAP@("MEDRFNO")=MED(9)
    206  . N RESULT S RESULT=$NA(^TMP("GPLCCR",$J,"MAPPED"))
     206 . N RESULT S RESULT=$NA(^TMP("C0CCCR",$J,"MAPPED"))
    207207 . K @RESULT
    208  . D MAP^GPLXPATH(MINXML,MAP,RESULT)
    209  . ; D PARY^GPLXPATH(RESULT)
     208 . D MAP^C0CXPATH(MINXML,MAP,RESULT)
     209 . ; D PARY^C0CXPATH(RESULT)
    210210 . ; MAPPING DIRECTIONS
    211211 . N MEDDIR1,DIRXML1 S DIRXML1="MEDDIR1" ; VARIABLE AND NAME VARIABLE TEMPLATE
    212212 . N MEDDIR2,DIRXML2 S DIRXML2="MEDDIR2" ; VARIABLE AND NAME VARIABLE RESULT
    213  . D QUERY^GPLXPATH(MINXML,"//Medications/Medication/Directions",DIRXML1)
    214  . D REPLACE^GPLXPATH(RESULT,"","//Medications/Medication/Directions")
     213 . D QUERY^C0CXPATH(MINXML,"//Medications/Medication/Directions",DIRXML1)
     214 . D REPLACE^C0CXPATH(RESULT,"","//Medications/Medication/Directions")
    215215 . ; N MDZ1,MDZNA
    216216 . I DIRCNT>0 D  ; IF THERE ARE DIRCTIONS
    217217 . . F MDZ1=1:1:DIRCNT  D  ; FOR EACH DIRECTION
    218218 . . . S MDZNA=$NA(@MAP@("M","DIRECTIONS",MDZ1))
    219  . . . D MAP^GPLXPATH(DIRXML1,MDZNA,DIRXML2)
    220  . . . D INSERT^GPLXPATH(RESULT,DIRXML2,"//Medications/Medication")
    221  . D:MEDCOUNT=1 CP^GPLXPATH(RESULT,OUTXML) ; First one is a copy
    222  . D:MEDCOUNT>1 INSINNER^GPLXPATH(OUTXML,RESULT) ; AFTER THE FIRST, INSERT INNER XML
     219 . . . D MAP^C0CXPATH(DIRXML1,MDZNA,DIRXML2)
     220 . . . D INSERT^C0CXPATH(RESULT,DIRXML2,"//Medications/Medication")
     221 . D:MEDCOUNT=1 CP^C0CXPATH(RESULT,OUTXML) ; First one is a copy
     222 . D:MEDCOUNT>1 INSINNER^C0CXPATH(OUTXML,RESULT) ; AFTER THE FIRST, INSERT INNER XML
    223223 N MEDTMP,MEDI
    224  D MISSING^GPLXPATH(OUTXML,"MEDTMP") ; SEARCH XML FOR MISSING VARS
     224 D MISSING^C0CXPATH(OUTXML,"MEDTMP") ; SEARCH XML FOR MISSING VARS
    225225 I MEDTMP(0)>0 D  ; IF THERE ARE MISSING VARS - MARKED AS @@X@@
    226226 . W "MEDICATION MISSING ",!
  • ccr/trunk/p/CCRMEDS2.m

    r396 r412  
    5151 N MEDCOUNT S MEDCOUNT=0
    5252 N MEDFIRST S MEDFIRST=1 ; FLAG FOR FIRST MED IN THIS SECTION FOR MERGING
    53  S MEDMAP=$NA(^TMP("GPLCCR",$J,"MEDMAP")) ; THIS IS THE VARIABLE MAP
     53 S MEDMAP=$NA(^TMP("C0CCCR",$J,"MEDMAP")) ; THIS IS THE VARIABLE MAP
    5454 S MEDCOUNT=@MEDMAP@(0) ; ACCOUNT FOR MEDS ALREADY IN ARRAY
    5555 F  S RXIEN=$O(MEDS(RXIEN)) Q:RXIEN="B"  D  ; FOR EACH MEDICATION IN THE LIST
     
    5757 . S MEDCOUNT=MEDCOUNT+1
    5858 . I DEBUG W "RXIEN IS ",RXIEN,!
    59  . S MAP=$NA(^TMP("GPLCCR",$J,"MEDMAP",MEDCOUNT))
     59 . S MAP=$NA(^TMP("C0CCCR",$J,"MEDMAP",MEDCOUNT))
    6060 . ; K @MAP DON'T KILL MAP HERE, IT IS DONE IN CCRMEDS
    6161 . S @MEDMAP@(0)=@MEDMAP@(0)+1 ; INCREMENT TOTAL MEDS IN VAR ARRAY
     
    243243 . ; W @MAP@("MEDFULLFILLMENTINSTRUCTIONS"),!
    244244 . S @MAP@("MEDRFNO")=$$GET1^DIQ(52.41,RXIEN,13)
    245  . N RESULT S RESULT=$NA(^TMP("GPLCCR",$J,"MAPPED"))
     245 . N RESULT S RESULT=$NA(^TMP("C0CCCR",$J,"MAPPED"))
    246246 . K @RESULT
    247  . D MAP^GPLXPATH(MINXML,MAP,RESULT)
    248  . ; D PARY^GPLXPATH(RESULT)
     247 . D MAP^C0CXPATH(MINXML,MAP,RESULT)
     248 . ; D PARY^C0CXPATH(RESULT)
    249249 . ; MAPPING DIRECTIONS
    250250 . N MEDDIR1,DIRXML1 S DIRXML1="MEDDIR1" ; VARIABLE AND NAME VARIABLE TEMPLATE
    251251 . N MEDDIR2,DIRXML2 S DIRXML2="MEDDIR2" ; VARIABLE AND NAME VARIABLE RESULT
    252  . D QUERY^GPLXPATH(MINXML,"//Medications/Medication/Directions",DIRXML1)
    253  . D REPLACE^GPLXPATH(RESULT,"","//Medications/Medication/Directions")
     252 . D QUERY^C0CXPATH(MINXML,"//Medications/Medication/Directions",DIRXML1)
     253 . D REPLACE^C0CXPATH(RESULT,"","//Medications/Medication/Directions")
    254254 . ; N MDZ1,MDZNA
    255255 . I DIRCNT>0 D  ; IF THERE ARE DIRCTIONS
    256256 . . F MDZ1=1:1:DIRCNT  D  ; FOR EACH DIRECTION
    257257 . . . S MDZNA=$NA(@MAP@("M","DIRECTIONS",MDZ1))
    258  . . . D MAP^GPLXPATH(DIRXML1,MDZNA,DIRXML2)
    259  . . . D INSERT^GPLXPATH(RESULT,DIRXML2,"//Medications/Medication")
     258 . . . D MAP^C0CXPATH(DIRXML1,MDZNA,DIRXML2)
     259 . . . D INSERT^C0CXPATH(RESULT,DIRXML2,"//Medications/Medication")
    260260 . I MEDFIRST D  ;
    261261 . . S MEDFIRST=0 ; RESET FIRST FLAG
    262  . . D CP^GPLXPATH(RESULT,OUTXML) ; First one is a copy
    263  . D:'MEDFIRST INSINNER^GPLXPATH(OUTXML,RESULT) ; AFTER FIRST, INSERT INNER XML
     262 . . D CP^C0CXPATH(RESULT,OUTXML) ; First one is a copy
     263 . D:'MEDFIRST INSINNER^C0CXPATH(OUTXML,RESULT) ; AFTER FIRST, INSERT INNER XML
    264264 N MEDTMP,MEDI
    265  D MISSING^GPLXPATH(OUTXML,"MEDTMP") ; SEARCH XML FOR MISSING VARS
     265 D MISSING^C0CXPATH(OUTXML,"MEDTMP") ; SEARCH XML FOR MISSING VARS
    266266 I MEDTMP(0)>0 D  ; IF THERE ARE MISSING VARS - MARKED AS @@X@@
    267267 . W "MEDICATION MISSING ",!
  • ccr/trunk/p/CCRMEDS3.m

    r396 r412  
    5050 I DEBUG ZWR MEDS
    5151 N FDAIEN S FDAIEN=0 ; For use in $Order in the MEDS array.
    52  S MEDMAP=$NA(^TMP("GPLCCR",$J,"MEDMAP"))
     52 S MEDMAP=$NA(^TMP("C0CCCR",$J,"MEDMAP"))
    5353 N MEDCOUNT S MEDCOUNT=@MEDMAP@(0) ; We already have meds in the array
    5454 N MEDFIRST S MEDFIRST=1 ; FLAG FOR FIRST MED PROCESSED HERE
     
    5757 . I MED(5,"I")!MED(6,"I") QUIT  ; If disconinued, we don't want to pull it.
    5858 . S MEDCOUNT=MEDCOUNT+1
    59  . S MAP=$NA(^TMP("GPLCCR",$J,"MEDMAP",MEDCOUNT))
     59 . S MAP=$NA(^TMP("C0CCCR",$J,"MEDMAP",MEDCOUNT))
    6060 . S @MEDMAP@(0)=@MEDMAP@(0)+1 ; INCREMENT TOTAL MEDS IN VAR ARRAY
    6161 . N RXIEN S RXIEN=$P(FDAIEN,",") ; First piece of FDAIEN is the number of the med for this patient
     
    203203 . E  S @MAP@("MEDFULLFILLMENTINSTRUCTIONS")=""
    204204 . S @MAP@("MEDRFNO")=""
    205  . N RESULT S RESULT=$NA(^TMP("GPLCCR",$J,"MAPPED"))
     205 . N RESULT S RESULT=$NA(^TMP("C0CCCR",$J,"MAPPED"))
    206206 . K @RESULT
    207  . D MAP^GPLXPATH(MINXML,MAP,RESULT)
    208  . ; D PARY^GPLXPATH(RESULT)
     207 . D MAP^C0CXPATH(MINXML,MAP,RESULT)
     208 . ; D PARY^C0CXPATH(RESULT)
    209209 . ; MAPPING DIRECTIONS
    210210 . N MEDDIR1,DIRXML1 S DIRXML1="MEDDIR1" ; VARIABLE AND NAME VARIABLE TEMPLATE
    211211 . N MEDDIR2,DIRXML2 S DIRXML2="MEDDIR2" ; VARIABLE AND NAME VARIABLE RESULT
    212  . D QUERY^GPLXPATH(MINXML,"//Medications/Medication/Directions",DIRXML1)
    213  . D REPLACE^GPLXPATH(RESULT,"","//Medications/Medication/Directions")
     212 . D QUERY^C0CXPATH(MINXML,"//Medications/Medication/Directions",DIRXML1)
     213 . D REPLACE^C0CXPATH(RESULT,"","//Medications/Medication/Directions")
    214214 . ; N MDZ1,MDZNA
    215215 . I DIRCNT>0 D  ; IF THERE ARE DIRCTIONS
    216216 . . F MDZ1=1:1:DIRCNT  D  ; FOR EACH DIRECTION
    217217 . . . S MDZNA=$NA(@MAP@("M","DIRECTIONS",MDZ1))
    218  . . . D MAP^GPLXPATH(DIRXML1,MDZNA,DIRXML2)
    219  . . . D INSERT^GPLXPATH(RESULT,DIRXML2,"//Medications/Medication")
     218 . . . D MAP^C0CXPATH(DIRXML1,MDZNA,DIRXML2)
     219 . . . D INSERT^C0CXPATH(RESULT,DIRXML2,"//Medications/Medication")
    220220 . I MEDFIRST D  ;
    221221 . . S MEDFIRST=0 ; RESET FIRST FLAG
    222  . . D CP^GPLXPATH(RESULT,OUTXML) ; First one is a copy
    223  . D:'MEDFIRST INSINNER^GPLXPATH(OUTXML,RESULT) ; AFTER FIRST, INSERT INNER XML
     222 . . D CP^C0CXPATH(RESULT,OUTXML) ; First one is a copy
     223 . D:'MEDFIRST INSINNER^C0CXPATH(OUTXML,RESULT) ; AFTER FIRST, INSERT INNER XML
    224224 N MEDTMP,MEDI
    225  D MISSING^GPLXPATH(OUTXML,"MEDTMP") ; SEARCH XML FOR MISSING VARS
     225 D MISSING^C0CXPATH(OUTXML,"MEDTMP") ; SEARCH XML FOR MISSING VARS
    226226 I MEDTMP(0)>0 D  ; IF THERE ARE MISSING VARS - MARKED AS @@X@@
    227227 . W "MEDICATION MISSING ",!
  • ccr/trunk/p/CCRMEDS6.m

    r396 r412  
    5858 N J S J="" F  S J=$O(MEDS1(J)) Q:J=""  I $E(MEDS1(J),1,3)="~OP" S MEDCNT=MEDCNT+1 S MEDS(MEDCNT)=MEDS1(J)
    5959 K MEDS1
    60  S MEDMAP=$NA(^TMP("GPLCCR",$J,"MEDMAP")) ; this is the variable map
     60 S MEDMAP=$NA(^TMP("C0CCCR",$J,"MEDMAP")) ; this is the variable map
    6161 S @MEDMAP@(0)=0 ; Initial count of meds
    6262 S MEDCNT="" ; Initialize for $Order
    6363 F  S MEDCNT=$O(MEDS(MEDCNT)) Q:MEDCNT=""  D  ; for each medication in the list
    6464 . I DEBUG W "MEDCNT IS ",MEDCNT,!
    65  . S MAP=$NA(^TMP("GPLCCR",$J,"MEDMAP",MEDCNT))
     65 . S MAP=$NA(^TMP("C0CCCR",$J,"MEDMAP",MEDCNT))
    6666 . ; K @MAP DO NOT KILL HERE, WAS CLEARED IN CCRMEDS
    6767 . S @MEDMAP@(0)=@MEDMAP@(0)+1 ; increment total meds in var array
     
    274274 . ;
    275275 . ; ------ BEGIN XML INSERTION
    276  . N RESULT S RESULT=$NA(^TMP("GPLCCR",$J,"MAPPED"))
     276 . N RESULT S RESULT=$NA(^TMP("C0CCCR",$J,"MAPPED"))
    277277 . K @RESULT
    278  . D MAP^GPLXPATH(MINXML,MAP,RESULT)
    279  . ; D PARY^GPLXPATH(RESULT)
     278 . D MAP^C0CXPATH(MINXML,MAP,RESULT)
     279 . ; D PARY^C0CXPATH(RESULT)
    280280 . ; MAPPING DIRECTIONS
    281281 . N MEDDIR1,DIRXML1 S DIRXML1="MEDDIR1" ; VARIABLE AND NAME VARIABLE TEMPLATE
    282282 . N MEDDIR2,DIRXML2 S DIRXML2="MEDDIR2" ; VARIABLE AND NAME VARIABLE RESULT
    283  . D QUERY^GPLXPATH(MINXML,"//Medications/Medication/Directions",DIRXML1)
    284  . D REPLACE^GPLXPATH(RESULT,"","//Medications/Medication/Directions")
     283 . D QUERY^C0CXPATH(MINXML,"//Medications/Medication/Directions",DIRXML1)
     284 . D REPLACE^C0CXPATH(RESULT,"","//Medications/Medication/Directions")
    285285 . ; N MDZ1,MDZNA
    286286 . N DIRCNT S DIRCNT=""
     
    288288 . . F DIRCNT=$O(@MAP@("M","DIRECTIONS",DIRCNT)) D  ; FOR EACH DIRECTION
    289289 . . . S MDZNA=$NA(@MAP@("M","DIRECTIONS",DIRCNT))
    290  . . . D MAP^GPLXPATH(DIRXML1,MDZNA,DIRXML2)
    291  . . . D INSERT^GPLXPATH(RESULT,DIRXML2,"//Medications/Medication")
    292  . D:MEDCNT=1 CP^GPLXPATH(RESULT,OUTXML) ; First one is a copy
    293  . D:MEDCNT>1 INSINNER^GPLXPATH(OUTXML,RESULT) ; AFTER THE FIRST, INSERT INNER XML
     290 . . . D MAP^C0CXPATH(DIRXML1,MDZNA,DIRXML2)
     291 . . . D INSERT^C0CXPATH(RESULT,DIRXML2,"//Medications/Medication")
     292 . D:MEDCNT=1 CP^C0CXPATH(RESULT,OUTXML) ; First one is a copy
     293 . D:MEDCNT>1 INSINNER^C0CXPATH(OUTXML,RESULT) ; AFTER THE FIRST, INSERT INNER XML
    294294 N MEDTMP,MEDI
    295  D MISSING^GPLXPATH(OUTXML,"MEDTMP") ; SEARCH XML FOR MISSING VARS
     295 D MISSING^C0CXPATH(OUTXML,"MEDTMP") ; SEARCH XML FOR MISSING VARS
    296296 I MEDTMP(0)>0 D  ; IF THERE ARE MISSING VARS - MARKED AS @@X@@
    297297 . W "MEDICATION MISSING ",!
Note: See TracChangeset for help on using the changeset viewer.