Ignore:
Timestamp:
Jan 4, 2012, 12:05:49 AM (12 years ago)
Author:
George Lilly
Message:

ohum new version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ccr/branches/ohum/p/C0CNMED2.m

    r1332 r1333  
    11C0CMED  ; WV/CCDCCR/GPL/SMH - CCR/CCD Medications Driver; Mar 23 2009
    2  ;;1.0;C0C;;May 19, 2009;Build 38
    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.
    6  ;
    7  ; This program is free software; you can redistribute it and/or modify
    8  ; it under the terms of the GNU General Public License as published by
    9  ; the Free Software Foundation; either version 2 of the License, or
    10  ; (at your option) any later version.
    11  ;
    12  ; This program is distributed in the hope that it will be useful,
    13  ; but WITHOUT ANY WARRANTY; without even the implied warranty of
    14  ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    15  ; GNU General Public License for more details.
    16  ;
    17  ; You should have received a copy of the GNU General Public License along
    18  ; with this program; if not, write to the Free Software Foundation, Inc.,
    19  ; 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    20  ;
    21  ; --Revision History
    22  ; July 2008 - Initial Version/GPL
    23  ; July 2008 - March 2009 various revisions
    24  ; March 2009 - Reconstruction of routine as driver for other med routines/SMH
    25  ; June 2011 - Redone to support all meds using the FOIA NHIN routines/gpl
    26  ;
    27  Q
    28  ;
    29  ; THIS VERSION IS DEPRECATED BECAUSE IT DOES NOT GENEREATE XML IN
    30  ; THE RIGHT ORDER... AND IT HAS TO BE IN THE RIGHT ORDER... :(
    31  ; GPL
    32  ;
    33 EXTRACT(MEDXML,DFN,MEDOUTXML) ; Private; Extract medications into provided XML template
    34  ; DFN passed by reference
    35  ; MEDXML and MEDOUTXML are passed by Name
    36  ; MEDXML is the input template
    37  ; MEDOUTXML is the output template
    38  ; Both of them refer to ^TMP globals where the XML documents are stored
    39  ;
    40  N GN
    41  D EN^C0CNHIN(.GN,DFN,"MED;",1) ; RETRIEVE NHIN ARRAY OF MEDS
    42  ; this call uses GET^NHINV to retrieve xml of the meds and then
    43  ; parses with MXML and uses DOMO^C0CDOM to extract an NHIN array
    44  ;
    45  ; we now create an NHIN Array of the Meds section of the CCR
    46  ;
    47  N ZI S ZI=""
    48  F  S ZI=$O(GN("med",ZI)) Q:ZI=""  D  ; for each med
    49  . N GA S GA=$NA(GN("med",ZI))
    50  . N GM S GM="Medication" ; to keep the lines shorter
    51  . S GC(GM,ZI,"CCRDataObjectID")="MED_"_ZI
    52  . N ZD,ZD2 S ZD=$G(@GA@("ordered@value")) ; FILEMAN DATE
    53  . I ZD="" S ZD=$G(@GA@("start@value")) ; for inpatient meds
    54  . S ZD2=$$FMDTOUTC^C0CUTIL(ZD,"DT")
    55  . S GC(GM,ZI,"DateTime[1].ExactDateTime")=ZD2
    56  . S GC(GM,ZI,"DateTime[1].Type.Text")="Documented Date"
    57  . ;S GC(GM,ZI,"DateTime[2].ExactDateTime")=""
    58  . ;S GC(GM,ZI,"DateTime[2].Type.Text")=""
    59  . N GSIG S GSIG=$G(@GA@("sig"))
    60  . I GSIG["|" S GSIG=$P(GSIG,"|",2) ; eRx has name of drug separated by |
    61  . S GC(GM,ZI,"Description.Text")=GSIG
    62  . N GD S GD="Directions.Direction" ; MAKING THE STRINGS SHORTER
    63  . ;S GC(GM,ZI,GD_".DeliveryMethod.Text")="@@MEDDELIVERYMETHOD@@"
    64  . ;S GC(GM,ZI,GD_".Description.Text")=""
    65  . ;S GC(GM,ZI,GD_".DirectionSequenceModifier")="@@MEDDIRSEQ@@"
    66  . ;S GC(GM,ZI,GD_".Dose.Rate.Units.Unit")="@@MEDRATEUNIT@@"
    67  . ;S GC(GM,ZI,GD_".Dose.Rate.Value")="@@MEDRATEVALUE@@"
    68  . ;S GC(GM,ZI,GD_".Dose.Units.Unit")="@@MEDDOSEUNIT@@"
    69  . ;S GC(GM,ZI,GD_".Dose.Value")="@@MEDDOSEVALUE@@"
    70  . ;S GC(GM,ZI,GD_".DoseIndicator.Text")="@@MEDDOSEINDICATOR@@"
    71  . ;S GC(GM,ZI,GD_".Duration.Units.Unit")="@@MEDDURATIONUNIT@@"
    72  . ;S GC(GM,ZI,GD_".Duration.Value")="@@MEDDURATIONVALUE@@"
    73  . ;S GC(GM,ZI,GD_".Frequency.Value")="@@MEDFREQUENCYVALUE@@"
    74  . ;S GC(GM,ZI,GD_".Indication.PRNFlag.Text")="@@MEDPRNFLAG@@"
    75  . ;S GC(GM,ZI,GD_".Indication.Problem.CCRDataObjectID")=""
    76  . ;S GC(GM,ZI,GD_".Indication.Problem.Description.Code.CodingSystem")=""
    77  . ;S GC(GM,ZI,GD_".Indication.Problem.Description.Code.Value")=""
    78  . ;S GC(GM,ZI,GD_".Indication.Problem.Description.Code.Version")=""
    79  . ;S GC(GM,ZI,GD_".Indication.Problem.Description.Text")=""
    80  . ;S GC(GM,ZI,GD_".Indication.Problem.Source.Actor.ActorID")=""
    81  . ;S GC(GM,ZI,GD_".Indication.Problem.Type.Text")=""
    82  . ;S GC(GM,ZI,GD_".Interval.Units.Unit")="@@MEDINTERVALUNIT@@"
    83  . ;S GC(GM,ZI,GD_".Interval.Value")="@@MEDINTERVALVALUE@@"
    84  . ;S GC(GM,ZI,GD_".MultipleDirectionModifier.Text")="@@MEDMULDIRMOD@@"
    85  . S GC(GM,ZI,GD_".Route.Text")=$G(@GA@("doses.dose@route"))
    86  . ;S GC(GM,ZI,GD_".StopIndicator.Text")="@@MEDSTOPINDICATOR@@"
    87  . ;S GC(GM,ZI,GD_".Vehicle.Text")="@@MEDVEHICLETEXT@@"
    88  . ;S GC(GM,ZI,"FullfillmentInstructions.Text")=""
    89  . ;S GC(GM,ZI,"IDs.ID")="@@MEDRXNO@@"
    90  . ;S GC(GM,ZI,"IDs.Type.Text")="@@MEDRXNOTXT@@"
    91  . ;S GC(GM,ZI,"PatientInstructions.Instruction.Text")="@@MEDPTINSTRUCTIONS@@"
    92  . ;S GC(GM,ZI,"Product.BrandName.Text")="@@MEDBRANDNAMETEXT@@"
    93  . S GC(GM,ZI,"Product.Concentration.Units.Unit")=$G(@GA@("doses.dose@units"))
    94  . S GC(GM,ZI,"Product.Concentration.Value")=$G(@GA@("doses.dose@dose"))
    95  . S GC(GM,ZI,"Product.Form.Text")=$G(@GA@("form@value"))
    96  . N GV S GV=$G(@GA@("products.product.vaProduct@vuid"))
    97  . N GR S GR=$$RXNCUI3^C0PLKUP(GV)
    98  . S GC(GM,ZI,"Product.ProductName.Code.CodingSystem")=$S(GR:"RxNorm",1:"VUID")
    99  . S GC(GM,ZI,"Product.ProductName.Code.Value")=$S(GR:GR,1:GV)
    100  . S GC(GM,ZI,"Product.ProductName.Code.Version")="08AB_081201F"
    101  . S GC(GM,ZI,"Product.ProductName.Text")=$G(@GA@("name@value"))
    102  . S GC(GM,ZI,"Product.Strength.Units.Unit")=$G(@GA@("doses.dose@units"))
    103  . S GC(GM,ZI,"Product.Strength.Value")=$G(@GA@("doses.dose@dose"))
    104  . ;S GC(GM,ZI,"Quantity.Units.Unit")="@@MEDQUANTITYUNIT@@"
    105  . ;S GC(GM,ZI,"Quantity.Value")="@@MEDQUANTITYVALUE@@"
    106  . ;S GC(GM,ZI,"Refills.Refill.Number")="@@MEDRFNO@@"
    107  . N GDUZ S GDUZ=$G(@GA@("orderingProvider@code")) ;PROVIDER DUZ
    108  . S GC(GM,ZI,"Source.Actor.ActorID")="PROVIDER_"_GDUZ
    109  . S GC(GM,ZI,"Status.Text")=$G(@GA@("status@value"))
    110  . S GC(GM,ZI,"Type.Text")="Medication"
    111  N C0CDOCID
    112  S C0CDOCID=$$DOMI^C0CDOM("GC",,"Medications") ; insert to dom
    113  D OUTXML^C0CDOM(MEDOUTXML,C0CDOCID,1) ; render the xml
    114  N ZSIZE S ZSIZE=$O(@MEDOUTXML@(""),-1)
    115  S @MEDOUTXML@(0)=ZSIZE ; RETURN STATUS IS NUMBER OF LINES OF XML
    116  W !,MEDOUTXML
    117  ;ZWR GN
    118  ;ZWR GC
    119  ;B
    120  Q
    121  ;
     2        ;;1.0;C0C;;May 19, 2009;Build 1
     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.
     6        ;
     7        ; This program is free software; you can redistribute it and/or modify
     8        ; it under the terms of the GNU General Public License as published by
     9        ; the Free Software Foundation; either version 2 of the License, or
     10        ; (at your option) any later version.
     11        ;
     12        ; This program is distributed in the hope that it will be useful,
     13        ; but WITHOUT ANY WARRANTY; without even the implied warranty of
     14        ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15        ; GNU General Public License for more details.
     16        ;
     17        ; You should have received a copy of the GNU General Public License along
     18        ; with this program; if not, write to the Free Software Foundation, Inc.,
     19        ; 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     20        ;
     21        ; --Revision History
     22        ; July 2008 - Initial Version/GPL
     23        ; July 2008 - March 2009 various revisions
     24        ; March 2009 - Reconstruction of routine as driver for other med routines/SMH
     25        ; June 2011 - Redone to support all meds using the FOIA NHIN routines/gpl
     26        ;
     27        Q
     28        ;
     29        ; THIS VERSION IS DEPRECATED BECAUSE IT DOES NOT GENEREATE XML IN
     30        ; THE RIGHT ORDER... AND IT HAS TO BE IN THE RIGHT ORDER... :(
     31        ; GPL
     32        ;
     33EXTRACT(MEDXML,DFN,MEDOUTXML)   ; Private; Extract medications into provided XML template
     34        ; DFN passed by reference
     35        ; MEDXML and MEDOUTXML are passed by Name
     36        ; MEDXML is the input template
     37        ; MEDOUTXML is the output template
     38        ; Both of them refer to ^TMP globals where the XML documents are stored
     39        ;
     40        N GN
     41        D EN^C0CNHIN(.GN,DFN,"MED;",1) ; RETRIEVE NHIN ARRAY OF MEDS
     42        ; this call uses GET^NHINV to retrieve xml of the meds and then
     43        ; parses with MXML and uses DOMO^C0CDOM to extract an NHIN array
     44        ;
     45        ; we now create an NHIN Array of the Meds section of the CCR
     46        ;
     47        N ZI S ZI=""
     48        F  S ZI=$O(GN("med",ZI)) Q:ZI=""  D  ; for each med
     49        . N GA S GA=$NA(GN("med",ZI))
     50        . N GM S GM="Medication" ; to keep the lines shorter
     51        . S GC(GM,ZI,"CCRDataObjectID")="MED_"_ZI
     52        . N ZD,ZD2 S ZD=$G(@GA@("ordered@value")) ; FILEMAN DATE
     53        . I ZD="" S ZD=$G(@GA@("start@value")) ; for inpatient meds
     54        . S ZD2=$$FMDTOUTC^C0CUTIL(ZD,"DT")
     55        . S GC(GM,ZI,"DateTime[1].ExactDateTime")=ZD2
     56        . S GC(GM,ZI,"DateTime[1].Type.Text")="Documented Date"
     57        . ;S GC(GM,ZI,"DateTime[2].ExactDateTime")=""
     58        . ;S GC(GM,ZI,"DateTime[2].Type.Text")=""
     59        . N GSIG S GSIG=$G(@GA@("sig"))
     60        . I GSIG["|" S GSIG=$P(GSIG,"|",2) ; eRx has name of drug separated by |
     61        . S GC(GM,ZI,"Description.Text")=GSIG
     62        . N GD S GD="Directions.Direction" ; MAKING THE STRINGS SHORTER
     63        . ;S GC(GM,ZI,GD_".DeliveryMethod.Text")="@@MEDDELIVERYMETHOD@@"
     64        . ;S GC(GM,ZI,GD_".Description.Text")=""
     65        . ;S GC(GM,ZI,GD_".DirectionSequenceModifier")="@@MEDDIRSEQ@@"
     66        . ;S GC(GM,ZI,GD_".Dose.Rate.Units.Unit")="@@MEDRATEUNIT@@"
     67        . ;S GC(GM,ZI,GD_".Dose.Rate.Value")="@@MEDRATEVALUE@@"
     68        . ;S GC(GM,ZI,GD_".Dose.Units.Unit")="@@MEDDOSEUNIT@@"
     69        . ;S GC(GM,ZI,GD_".Dose.Value")="@@MEDDOSEVALUE@@"
     70        . ;S GC(GM,ZI,GD_".DoseIndicator.Text")="@@MEDDOSEINDICATOR@@"
     71        . ;S GC(GM,ZI,GD_".Duration.Units.Unit")="@@MEDDURATIONUNIT@@"
     72        . ;S GC(GM,ZI,GD_".Duration.Value")="@@MEDDURATIONVALUE@@"
     73        . ;S GC(GM,ZI,GD_".Frequency.Value")="@@MEDFREQUENCYVALUE@@"
     74        . ;S GC(GM,ZI,GD_".Indication.PRNFlag.Text")="@@MEDPRNFLAG@@"
     75        . ;S GC(GM,ZI,GD_".Indication.Problem.CCRDataObjectID")=""
     76        . ;S GC(GM,ZI,GD_".Indication.Problem.Description.Code.CodingSystem")=""
     77        . ;S GC(GM,ZI,GD_".Indication.Problem.Description.Code.Value")=""
     78        . ;S GC(GM,ZI,GD_".Indication.Problem.Description.Code.Version")=""
     79        . ;S GC(GM,ZI,GD_".Indication.Problem.Description.Text")=""
     80        . ;S GC(GM,ZI,GD_".Indication.Problem.Source.Actor.ActorID")=""
     81        . ;S GC(GM,ZI,GD_".Indication.Problem.Type.Text")=""
     82        . ;S GC(GM,ZI,GD_".Interval.Units.Unit")="@@MEDINTERVALUNIT@@"
     83        . ;S GC(GM,ZI,GD_".Interval.Value")="@@MEDINTERVALVALUE@@"
     84        . ;S GC(GM,ZI,GD_".MultipleDirectionModifier.Text")="@@MEDMULDIRMOD@@"
     85        . S GC(GM,ZI,GD_".Route.Text")=$G(@GA@("doses.dose@route"))
     86        . ;S GC(GM,ZI,GD_".StopIndicator.Text")="@@MEDSTOPINDICATOR@@"
     87        . ;S GC(GM,ZI,GD_".Vehicle.Text")="@@MEDVEHICLETEXT@@"
     88        . ;S GC(GM,ZI,"FullfillmentInstructions.Text")=""
     89        . ;S GC(GM,ZI,"IDs.ID")="@@MEDRXNO@@"
     90        . ;S GC(GM,ZI,"IDs.Type.Text")="@@MEDRXNOTXT@@"
     91        . ;S GC(GM,ZI,"PatientInstructions.Instruction.Text")="@@MEDPTINSTRUCTIONS@@"
     92        . ;S GC(GM,ZI,"Product.BrandName.Text")="@@MEDBRANDNAMETEXT@@"
     93        . S GC(GM,ZI,"Product.Concentration.Units.Unit")=$G(@GA@("doses.dose@units"))
     94        . S GC(GM,ZI,"Product.Concentration.Value")=$G(@GA@("doses.dose@dose"))
     95        . S GC(GM,ZI,"Product.Form.Text")=$G(@GA@("form@value"))
     96        . N GV S GV=$G(@GA@("products.product.vaProduct@vuid"))
     97        . N GR S GR=$$RXNCUI3^C0PLKUP(GV)
     98        . S GC(GM,ZI,"Product.ProductName.Code.CodingSystem")=$S(GR:"RxNorm",1:"VUID")
     99        . S GC(GM,ZI,"Product.ProductName.Code.Value")=$S(GR:GR,1:GV)
     100        . S GC(GM,ZI,"Product.ProductName.Code.Version")="08AB_081201F"
     101        . S GC(GM,ZI,"Product.ProductName.Text")=$G(@GA@("name@value"))
     102        . S GC(GM,ZI,"Product.Strength.Units.Unit")=$G(@GA@("doses.dose@units"))
     103        . S GC(GM,ZI,"Product.Strength.Value")=$G(@GA@("doses.dose@dose"))
     104        . ;S GC(GM,ZI,"Quantity.Units.Unit")="@@MEDQUANTITYUNIT@@"
     105        . ;S GC(GM,ZI,"Quantity.Value")="@@MEDQUANTITYVALUE@@"
     106        . ;S GC(GM,ZI,"Refills.Refill.Number")="@@MEDRFNO@@"
     107        . N GDUZ S GDUZ=$G(@GA@("orderingProvider@code")) ;PROVIDER DUZ
     108        . S GC(GM,ZI,"Source.Actor.ActorID")="PROVIDER_"_GDUZ
     109        . S GC(GM,ZI,"Status.Text")=$G(@GA@("status@value"))
     110        . S GC(GM,ZI,"Type.Text")="Medication"
     111        N C0CDOCID
     112        S C0CDOCID=$$DOMI^C0CDOM("GC",,"Medications") ; insert to dom
     113        D OUTXML^C0CDOM(MEDOUTXML,C0CDOCID,1) ; render the xml
     114        N ZSIZE S ZSIZE=$O(@MEDOUTXML@(""),-1)
     115        S @MEDOUTXML@(0)=ZSIZE ; RETURN STATUS IS NUMBER OF LINES OF XML
     116        W !,MEDOUTXML
     117        ;ZWR GN
     118        ;ZWR GC
     119        ;B
     120        Q
     121        ;
Note: See TracChangeset for help on using the changeset viewer.