[1595] | 1 | C0PCUR ; VEN/SMH - Get current medications ; 5/8/12 9:24pm
|
---|
| 2 | ;;1.0;C0P;;Apr 25, 2012;Build 103
|
---|
| 3 | ;
|
---|
| 4 | ;Copyright 2009 Sam Habiel. Licensed under the terms of the GNU
|
---|
| 5 | ;General Public License 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 | GET(C0PMEDS,C0PDFN) ; Private Proc - Get Current C0PMEDS
|
---|
| 22 | ; Input:
|
---|
| 23 | ; C0PMEDS by reference
|
---|
| 24 | ; C0PDFN by Value
|
---|
| 25 | ; Output: (modified PSOORRL output)
|
---|
| 26 | ; C0PMEDS(D0,0): Order#_File;Pkg^Drug Name^Infusion Rate^Stop Date ^Refills Remaining^Total Dose^Units per Dose^Placer#^Status^Last Filldate^Days Supply^Qty^NOT TO BE GIVEN^Pending Renewal (1 or 0)
|
---|
| 27 | ; C0PMEDS(D0,"DRUG"): Drug IEN
|
---|
| 28 | ; C0PMEDS(D0,"A",0) = # of lines
|
---|
| 29 | ; C0PMEDS(D0,"A",D1,0) = Additive Name^Amount^Bottle
|
---|
| 30 | ; C0PMEDS(D0,"ADM",0) = # of lines
|
---|
| 31 | ; C0PMEDS(D0,"ADM",D1,0) = Administration Times
|
---|
| 32 | ; C0PMEDS(D0,"B",0) = # of lines
|
---|
| 33 | ; C0PMEDS(D0,"B",D1,0) = Solution Name^Amount
|
---|
| 34 | ; C0PMEDS(D0,"MDR",0) = # of lines
|
---|
| 35 | ; C0PMEDS(D0,"MDR",D1,0) = Medication Route abbreviation
|
---|
| 36 | ; C0PMEDS(D0,"P",0) = IEN^Name of Ordering Provider (#200)
|
---|
| 37 | ; C0PMEDS(D0,"SCH",0) = # of lines
|
---|
| 38 | ; C0PMEDS(D0,"SCH",D1,0) = Schedule Name
|
---|
| 39 | ; C0PMEDS(D0,"SIG",0) = # of lines
|
---|
| 40 | ; C0PMEDS(D0,"SIG",D1,0) = Sig (outpatient) or Instructions (inpatient)
|
---|
| 41 | ; C0PMEDS(D0,"SIO",0) = # of lines
|
---|
| 42 | ; C0PMEDS(D0,"SIO",D1,0) = Special Instructions/Other Print Info
|
---|
| 43 | ; C0PMEDS(D0,"START"): Start Date (timson)
|
---|
| 44 | ; added by gpl
|
---|
| 45 | ; C0PMEDS(D0,"NVAIEN") = IEN of the drug in the NVA subfile
|
---|
| 46 | ; C0PMEDS(D0,"COMMENTS") = First line of the comment WP field in NVA
|
---|
| 47 | K ^TMP("PS",$J)
|
---|
| 48 | N BEG,END,CTX
|
---|
| 49 | S (BEG,END,CTX)=""
|
---|
| 50 | S CTX=$$GET^XPAR("ALL","ORCH CONTEXT C0PMEDS") ; PSOORRL defaults to 120d
|
---|
| 51 | I CTX=";" D DEL^XPAR("USR.`"_DUZ,"ORCH CONTEXT C0PMEDS")
|
---|
| 52 | S CTX=$$GET^XPAR("ALL","ORCH CONTEXT C0PMEDS")
|
---|
| 53 | S BEG=$$DT($P(CTX,";")),END=$$DT($P(CTX,";",2))
|
---|
| 54 | D OCL^PSOORRL(C0PDFN,BEG,END) ;DBIA #2400
|
---|
| 55 | M C0PMEDS=^TMP("PS",$J)
|
---|
| 56 | N C0PI S C0PI="" ; THIS IS THE RETURNED LIST OF MEDS
|
---|
| 57 | N ZI S ZI=0 ; THIS WILL BE THE MATCHING IEN IN THE NVA MULTIPLE
|
---|
| 58 | F S C0PI=$O(C0PMEDS(C0PI)) Q:C0PI="" D
|
---|
| 59 | . K ^TMP("PS",$J) ; again
|
---|
| 60 | . N LSIEN S LSIEN=$P(C0PMEDS(C0PI,0),U,1) ; LIST IEN xN;O OR xR;O gpl
|
---|
| 61 | . D OEL^PSOORRL(C0PDFN,LSIEN)
|
---|
| 62 | . S C0PMEDS(C0PI,"START")=$P(^TMP("PS",$J,0),U,5) ; Start Date in fm
|
---|
| 63 | . S:+$G(^TMP("PS",$J,"DD",1,0)) C0PMEDS(C0PI,"DRUG")=+^(0) ; Drug IEN
|
---|
| 64 | . ;I '$D(GPLTEST) Q ; let me test and others still work
|
---|
| 65 | . ; now go look for the NVAIEN in the subfile - gpl
|
---|
| 66 | . ;W !,"LSIEN "_LSIEN_"C0PI "_C0PI
|
---|
| 67 | . I $P(LSIEN,";",1)["N" D ; only for NVA drugs
|
---|
| 68 | . . ;N ZI S ZI=0
|
---|
| 69 | . . N FOUND S FOUND=0
|
---|
| 70 | . . ;F Q:FOUND=1 S ZI=$O(^PS(55,C0PDFN,"NVA",ZI)) Q:+ZI=0 D ;EACH NVA
|
---|
| 71 | . . S ZI=$O(^PS(55,C0PDFN,"NVA",ZI)) D ; NEXT NVA IEN (MAKE SURE IT MATCHES)
|
---|
| 72 | . . . N ZN S ZN=$NA(^PS(55,C0PDFN,"NVA",ZI))
|
---|
| 73 | . . . I '$D(@ZN@(0)) Q ; BAD NVA NODE
|
---|
| 74 | . . . I $P(@ZN@(0),U,2)=$G(C0PMEDS(C0PI,"DRUG")) S FOUND=1 ;DRUG NUMBERS MATCH
|
---|
| 75 | . . . E D ; CHECK FOR FREE TEXT DRUG MATCH
|
---|
| 76 | . . . . N Z1 S Z1=$P($P(@ZN@(0),U,3),"|",1) ; free txt drug from NVA
|
---|
| 77 | . . . . N Z2 S Z2=$P(C0PMEDS(C0PI,"SIG",1,0),"|",1) ; free txt from list
|
---|
| 78 | . . . . I Z1=Z2 S FOUND=1
|
---|
| 79 | . . . I FOUND=1 D ; found the NVA subfile entry
|
---|
| 80 | . . . . S C0PMEDS(C0PI,"NVAIEN")=ZI ; NVA ien
|
---|
| 81 | . . . . ;S C0PMEDS(C0PI,"COMMENTS")=$G(@ZN@(1,1,0)) ; first line of comments
|
---|
| 82 | . . . . N ZC ; to store the comment wp field
|
---|
| 83 | . . . . N ZM S ZM=$$GET1^DIQ(55.05,ZI_","_C0PDFN,14,,"ZC")
|
---|
| 84 | . . . . M C0PMEDS(C0PI,"COMMENTS")=ZC ; the comments
|
---|
| 85 | . . . . ;N ZC S ZC=0
|
---|
| 86 | . . . . ;F S ZC=$G(@ZN@(1,ZC)) Q:+ZC=0 D ; pull out the comments
|
---|
| 87 | . . . . ;. S C0PMEDS(C0PI,"COMMENTS",ZC)=$G(@ZN@(1,ZC,0)) ;line of comment
|
---|
| 88 | . . . . ;M C0PMEDS(C0PI,"COMMENTS")=@ZN@(1) ; all the lines of comments
|
---|
| 89 | . . . E D ; ERROR .. THESE SHOULD MATCH. There is a bug.
|
---|
| 90 | . . . . D ERROR^C0PMAIN(",U113059007,",$ST($ST,"PLACE"),"ERX-NVA","Non-VA Meds Error") QUIT
|
---|
| 91 | QUIT
|
---|
| 92 | DT(X) ; -- Returns FM date for X
|
---|
| 93 | N Y,%DT S %DT="T",Y="" D:X'="" ^%DT
|
---|
| 94 | Q Y
|
---|
| 95 | ;
|
---|
| 96 | MEDLIST(ZMLIST,ZDFN,ZPARMS,NOERX,SUMMARY) ; RETURNS THE MEDLIST FOR PATIENT DFN
|
---|
| 97 | ; USES C0C PACKAGE ROUTINES TO PULL ALL MEDS FOR THE PATIENT
|
---|
| 98 | ; IF NOERX=1 IT WILL FILTER OUT EPRESCRIBING MEDS FROM THE LIST
|
---|
| 99 | ; SUMMARY IS PASSED BY NAME AND IS THE PLACE TO PUT A SUMMARY IF PROVIDED
|
---|
| 100 | N ZCCRT,ZCCRR
|
---|
| 101 | D INITXPF^C0PWS1("C0PF") ; SET FILE NUMBER AND PARAMATERS
|
---|
| 102 | D GETTEMP^C0CMXP("ZCCRT","CCRMEDS","C0PF")
|
---|
| 103 | K ^TMP("C0CRIM","VARS",ZDFN) ; KILL RIM VARIABLES TO MAKE SURE THEY ARE FRESH
|
---|
| 104 | I '$D(ZPARMS) S ZPARMS="MEDALL"
|
---|
| 105 | D SET^C0CPARMS(ZPARMS) ; SET PARAMATER TO PULL ALL MEDS
|
---|
| 106 | I '$D(DEBUG) S DEBUG=0
|
---|
| 107 | D EXTRACT^C0CMED("ZCCRT",ZDFN,"ZCCRR")
|
---|
| 108 | M @ZMLIST=^TMP("C0CRIM","VARS",ZDFN,"MEDS")
|
---|
| 109 | I $G(SUMMARY)="" Q ; NO SUMMARY NEEDED
|
---|
| 110 | S ZI=""
|
---|
| 111 | F S ZI=$O(@ZMLIST@(ZI)) Q:ZI="" D ;
|
---|
| 112 | . S @SUMMARY@(ZI,"MED")=$G(@ZMLIST@(ZI,"MEDPRODUCTNAMETEXT"))
|
---|
| 113 | . ;W @SUMMARY@(ZI,"MED")
|
---|
| 114 | . S @SUMMARY@(ZI,"STATUS")=$G(@ZMLIST@(ZI,"MEDSTATUSTEXT"))
|
---|
| 115 | . S @SUMMARY@(ZI,"CODESYSTEM")=$G(@ZMLIST@(ZI,"MEDPRODUCTNAMECODINGINGSYSTEM"))
|
---|
| 116 | . S @SUMMARY@(ZI,"CODE")=$G(@ZMLIST@(ZI,"MEDPRODUCTNAMECODEVALUE"))
|
---|
| 117 | . S @SUMMARY@(ZI,"COMMENT")=$G(@ZMLIST@(ZI,"MEDFULLFILLMENTINSTRUCTIONS"))
|
---|
| 118 | Q
|
---|
| 119 | ;
|
---|
| 120 | ANALYZE(ZSTR,ZNUM) ; ANALYZE MED LISTS FOR ZNUM PATIENTS STARTING AT
|
---|
| 121 | ; PATIENT ZSTR. IF ZSTR="" START WHERE WE LEFT OFF
|
---|
| 122 | ; FIRST TIME, START WITH THE FIRST PATIENT
|
---|
| 123 | N C0PZI
|
---|
| 124 | I ZSTR="" D ; WANT TO START WHERE WE LEFT OFF OR AT THE FIRST PATIENT
|
---|
| 125 | . S C0PZI=$G(^TMP("C0PAMED","LAST"))
|
---|
| 126 | . I C0PZI="" S C0PZI=0
|
---|
| 127 | . S C0PZI=$O(^DPT(C0PZI)) ; FIRST PATIENT TO DO
|
---|
| 128 | E S C0PZI=ZSTR ; STARTING PATIENT IS SPECIFIED
|
---|
| 129 | N SUMM
|
---|
| 130 | N ZN S ZN=0
|
---|
| 131 | N DONE S DONE=0
|
---|
| 132 | F ZN=1:1:ZNUM Q:DONE D ; TRY AND DO ZNUM PATIENTS
|
---|
| 133 | . W !,"C0PZI=",C0PZI
|
---|
| 134 | . I +C0PZI=0 S DONE=1 Q ; OUT OF PATIENTS
|
---|
| 135 | . S SUMM=$NA(^TMP("C0PAMED",C0PZI)) ; PLACE TO PUT SUMMARY
|
---|
| 136 | . W "SUMM ",SUMM
|
---|
| 137 | . K G ; MED LIST RETURN VARIABLE
|
---|
| 138 | . D MEDLIST("G",C0PZI,"MEDACTIVE",,SUMM) ; PULL THE MEDS FOR THIS PATIENT
|
---|
| 139 | . S ^TMP("C0PAMED","LAST")=C0PZI ; SAVE WHERE WE ARE
|
---|
| 140 | . S C0PZI=$O(^DPT(C0PZI)) ; NEXT PATIENT
|
---|
| 141 | Q
|
---|
| 142 | ;
|
---|
| 143 | RESET ; CLEAR OUT THE ANALYZE ARRAY
|
---|
| 144 | K ^TMP("C0PAMED")
|
---|
| 145 | Q
|
---|
| 146 | ;
|
---|
| 147 | INDEX ; INDEX THE ANALYSES
|
---|
| 148 | N ZI,ZJ
|
---|
| 149 | S (ZI,ZJ)=""
|
---|
| 150 | F S ZI=$O(^TMP("C0PAMED",ZI)) Q:ZI="" D ;
|
---|
| 151 | . S ZJ=""
|
---|
| 152 | . F S ZJ=$O(^TMP("C0PAMED",ZI,ZJ)) Q:ZJ="" D ;
|
---|
| 153 | . . N ZMED
|
---|
| 154 | . . S ZMED=$G(^TMP("C0PAMED",ZI,ZJ,"MED"))
|
---|
| 155 | . . I ZMED'="" S ^TMP("C0PAMED","MED",ZMED,ZI)=""
|
---|
| 156 | . . N ZCODE
|
---|
| 157 | . . S ZCODE=$G(^TMP("C0PAMED",ZI,ZJ,"CODE"))
|
---|
| 158 | . . I ZCODE'="" S ^TMP("C0PAMED","CODE",ZCODE,ZI)=""
|
---|
| 159 | D COUNT
|
---|
| 160 | Q
|
---|
| 161 | ;
|
---|
| 162 | COUNT ; COUNT THE MEDS AND THE CODES
|
---|
| 163 | N ZI,ZN S ZN=0
|
---|
| 164 | S ZI=""
|
---|
| 165 | F S ZI=$O(^TMP("C0PAMED","MED",ZI)) Q:ZI="" D ;
|
---|
| 166 | . S ZN=ZN+1
|
---|
| 167 | W !,"MED COUNT: ",ZN
|
---|
| 168 | S ZN=0
|
---|
| 169 | S ZI=""
|
---|
| 170 | F S ZI=$O(^TMP("C0PAMED","CODE",ZI)) Q:ZI="" D ;
|
---|
| 171 | . S ZN=ZN+1
|
---|
| 172 | W !,"CODE COUNT: ",ZN
|
---|
| 173 | Q
|
---|
| 174 | ;
|
---|
| 175 | ; NB: EP below not used in C0P 1.0 --smh 5/9/2012
|
---|
| 176 | OUTSIDE(ZRTN,ZMEDS) ; WRAP THE MEDS IN THE OUTSIDEPRESRIPTION XML
|
---|
| 177 | ; Here's what the xml looks like. It's stored in the Template field
|
---|
| 178 | ; of the OUTSIDEPRESCRIPTION record in file C0P XML TEMPLATE file
|
---|
| 179 | ;<OutsidePrescription>
|
---|
| 180 | ; <externalId>@@PRESCRIPTIONID@@</externalId>
|
---|
| 181 | ; <date>@@MEDDATE@@</date>
|
---|
| 182 | ; <doctorName>@@DOCTORNAME@@</doctorName>
|
---|
| 183 | ; <drug>@@MEDTEXT@@</drug>
|
---|
| 184 | ; <dispenseNumber>@@DISPENSENUMBER@@</dispenseNumber>
|
---|
| 185 | ; <sig>@@SIG@@</sig>
|
---|
| 186 | ; <refillCount>@@REFILLCOUNT@@</refillCount>
|
---|
| 187 | ; <prescriptionType>@@PRESCRIPTIONTYPE@@</prescriptionType>
|
---|
| 188 | ;</OutsidePrescription>
|
---|
| 189 | N C0PZI,ZTEMP,C0PF
|
---|
| 190 | S C0PZI=""
|
---|
| 191 | D INITXPF^C0PWS1("C0PF") ; SET UP FILE POINTERS
|
---|
| 192 | D GETTEMP^C0CMXP("ZTEMP","OUTSIDEPRESCRIPTION","C0PF")
|
---|
| 193 | ; BREAK
|
---|
| 194 | Q
|
---|