Corrected bugs in CCRMEDS3 and refactored CCRMEDS2
This commit is contained in:
parent
b5fdfa0728
commit
5e1f9b172e
88
p/CCRMEDS2.m
88
p/CCRMEDS2.m
|
@ -78,46 +78,62 @@ EXTRACT(MINXML,DFN,OUTXML) ; EXTRACT MEDICATIONS INTO PROVIDED XML TEM
|
|||
. ; NDC not supplied in API, but is rather trivial to obtain
|
||||
. ; MED(11) piece 1 has the IEN of the drug (file 50)
|
||||
. ; IEN is field 31 in the drug file.
|
||||
. ;
|
||||
. ; MEDIEN (node 11 in the returned output) might not necessarily be defined
|
||||
. ; It is not defined when a dose in not chosen in CPRS. There is a long
|
||||
. ; series of fields that depend on it. We will use If and Else to deal
|
||||
. ; with that
|
||||
. N MEDIEN S MEDIEN=$P(MED(11),U)
|
||||
. S @MAP@("MEDPRODUCTNAMECODEVALUE")=$$GET1^DIQ(50,MEDIEN,31,"E")
|
||||
. S @MAP@("MEDPRODUCTNAMECODINGINGSYSTEM")="NDC"
|
||||
. S @MAP@("MEDPRODUCTNAMECODEVERSION")="none"
|
||||
. S @MAP@("MEDBRANDNAMETEXT")=""
|
||||
. D DOSE^PSS50(MEDIEN,,,,,"DOSE")
|
||||
. I $D(^TMP($J,"DOSE",MEDIEN)) D ; GPL ; CALL SUCCESSFUL
|
||||
. I +MEDIEN>0 D
|
||||
. . S @MAP@("MEDPRODUCTNAMECODEVALUE")=$$GET1^DIQ(50,MEDIEN,31,"E")
|
||||
. . S @MAP@("MEDPRODUCTNAMECODINGINGSYSTEM")="NDC"
|
||||
. . S @MAP@("MEDPRODUCTNAMECODEVERSION")="none"
|
||||
. . S @MAP@("MEDBRANDNAMETEXT")=""
|
||||
. . D DOSE^PSS50(MEDIEN,,,,,"DOSE")
|
||||
. . N DOSEDATA M DOSEDATA=^TMP($J,"DOSE",MEDIEN)
|
||||
. . S @MAP@("MEDSTRENGTHVALUE")=DOSEDATA(901)
|
||||
. . S @MAP@("MEDSTRENGTHUNIT")=$P(DOSEDATA(902),U,2)
|
||||
. E D ; GPL CALL UNSUCCESSUFL
|
||||
. . S @MAP@("MEDSTRENGTHVALUE")="" ; NO DOSE INFORMATION AVAILABLE
|
||||
. . S @MAP@("MEDSTRENGTHUNIT")="" ;
|
||||
. ; Units, concentration, etc, come from another call
|
||||
. ; $$CPRS^PSNAPIS which returns dosage-form^va class^strengh^unit
|
||||
. ; This call takes nodes 1 and 3 of ^PSDRUG(D0,"ND") as parameters
|
||||
. ; NDF Entry IEN, and VA Product Name
|
||||
. ; These can be obtained using NDF^PSS50 (IEN,,,,,"SUBSCRIPT")
|
||||
. ; Documented in the same manual.
|
||||
. D NDF^PSS50(MEDIEN,,,,,"CONC")
|
||||
. N NDFDATA M NDFDATA=^TMP($J,"CONC",MEDIEN)
|
||||
. N NDFIEN S NDFIEN=$P(NDFDATA(20),U)
|
||||
. N VAPROD S VAPROD=$P(NDFDATA(22),U)
|
||||
. N CONCDATA
|
||||
. ; If a drug was not matched to NDF, then the NDFIEN is gonna be ""
|
||||
. ; and this will crash the call. So...
|
||||
. I NDFIEN="" S CONCDATA=""
|
||||
. E S CONCDATA=$$CPRS^PSNAPIS(NDFIEN,VAPROD)
|
||||
. S @MAP@("MEDFORMTEXT")=$P(CONCDATA,U,1)
|
||||
. S @MAP@("MEDCONCVALUE")=$P(CONCDATA,U,3)
|
||||
. S @MAP@("MEDCONCUNIT")=$P(CONCDATA,U,4)
|
||||
. S @MAP@("MEDSIZETEXT")=$P(NDFDATA(23),U,2)_" "_$P(NDFDATA(24),U,2)
|
||||
. S @MAP@("MEDQUANTITYVALUE")=$$GET1^DIQ(52.41,RXIEN,12)
|
||||
. ; Oddly, there is no easy place to find the dispense unit.
|
||||
. ; It's not included in the original call, so we have to go to the drug file.
|
||||
. ; That would be DATA^PSS50(IEN,,,,,"SUBSCRIPT")
|
||||
. ; Node 14.5 is the Dispense Unit
|
||||
. D DATA^PSS50(MEDIEN,,,,,"QTY")
|
||||
. N QTYDATA M QTYDATA=^TMP($J,"QTY",MEDIEN)
|
||||
. S @MAP@("MEDQUANTITYUNIT")=QTYDATA(14.5)
|
||||
. . ; Units, concentration, etc, come from another call
|
||||
. . ; $$CPRS^PSNAPIS which returns dosage-form^va class^strengh^unit
|
||||
. . ; This call takes nodes 1 and 3 of ^PSDRUG(D0,"ND") as parameters
|
||||
. . ; NDF Entry IEN, and VA Product Name
|
||||
. . ; These can be obtained using NDF^PSS50 (IEN,,,,,"SUBSCRIPT")
|
||||
. . ; Documented in the same manual.
|
||||
. . D NDF^PSS50(MEDIEN,,,,,"CONC")
|
||||
. . N NDFDATA M NDFDATA=^TMP($J,"CONC",MEDIEN)
|
||||
. . N NDFIEN S NDFIEN=$P(NDFDATA(20),U)
|
||||
. . N VAPROD S VAPROD=$P(NDFDATA(22),U)
|
||||
. . N CONCDATA
|
||||
. . ; If a drug was not matched to NDF, then the NDFIEN is gonna be ""
|
||||
. . ; and this will crash the call. So...
|
||||
. . I NDFIEN="" S CONCDATA=""
|
||||
. . E S CONCDATA=$$CPRS^PSNAPIS(NDFIEN,VAPROD)
|
||||
. . S @MAP@("MEDFORMTEXT")=$P(CONCDATA,U,1)
|
||||
. . S @MAP@("MEDCONCVALUE")=$P(CONCDATA,U,3)
|
||||
. . S @MAP@("MEDCONCUNIT")=$P(CONCDATA,U,4)
|
||||
. . S @MAP@("MEDSIZETEXT")=$P(NDFDATA(23),U,2)_" "_$P(NDFDATA(24),U,2)
|
||||
. . S @MAP@("MEDQUANTITYVALUE")=$$GET1^DIQ(52.41,RXIEN,12)
|
||||
. . ; Oddly, there is no easy place to find the dispense unit.
|
||||
. . ; It's not included in the original call, so we have to go to the drug file.
|
||||
. . ; That would be DATA^PSS50(IEN,,,,,"SUBSCRIPT")
|
||||
. . ; Node 14.5 is the Dispense Unit
|
||||
. . D DATA^PSS50(MEDIEN,,,,,"QTY")
|
||||
. . N QTYDATA M QTYDATA=^TMP($J,"QTY",MEDIEN)
|
||||
. . S @MAP@("MEDQUANTITYUNIT")=QTYDATA(14.5)
|
||||
. E D
|
||||
. . S @MAP@("MEDPRODUCTNAMECODEVALUE")=""
|
||||
. . S @MAP@("MEDPRODUCTNAMECODINGINGSYSTEM")=""
|
||||
. . S @MAP@("MEDPRODUCTNAMECODEVERSION")=""
|
||||
. . S @MAP@("MEDBRANDNAMETEXT")=""
|
||||
. . S @MAP@("MEDSTRENGTHVALUE")=""
|
||||
. . S @MAP@("MEDSTRENGTHUNIT")=""
|
||||
. . S @MAP@("MEDFORMTEXT")=""
|
||||
. . S @MAP@("MEDCONCVALUE")=""
|
||||
. . S @MAP@("MEDCONCUNIT")=""
|
||||
. . S @MAP@("MEDSIZETEXT")=""
|
||||
. . S @MAP@("MEDQUANTITYVALUE")=""
|
||||
. . S @MAP@("MEDQUANTITYUNIT")=""
|
||||
. ;
|
||||
. ;
|
||||
. ; --- START OF DIRECTIONS ---
|
||||
. ; Sig data is not in any API. We obtain it using the IEN from
|
||||
|
|
71
p/CCRMEDS3.m
71
p/CCRMEDS3.m
|
@ -74,25 +74,28 @@ EXTRACT(MINXML,DFN,OUTXML) ; EXTRACT MEDICATIONS INTO PROVIDED XML TEM
|
|||
. S @MAP@("MEDSOURCEACTORID")="ACTORPROVIDER_"_MED(12,"I")
|
||||
. S @MAP@("MEDPRODUCTNAMETEXT")=MED(.01,"E")
|
||||
. ; NDC is field 31 in the drug file.
|
||||
. ; The actual drug entry in the drug file is not necessarily supplied.
|
||||
. ; The actual drug entry in the drug file (MEDIEN) is not necessarily supplied.
|
||||
. ; It' node 1, internal form.
|
||||
. N MEDIEN S MEDIEN=MED(1,"I")
|
||||
. S @MAP@("MEDPRODUCTNAMECODEVALUE")=$S($L(MEDIEN):$$GET1^DIQ(50,MEDIEN,31,"E"),1:"")
|
||||
. S @MAP@("MEDPRODUCTNAMECODINGINGSYSTEM")=$S($L(MEDIEN):"NDC",1:"")
|
||||
. S @MAP@("MEDPRODUCTNAMECODEVERSION")=$S($L(MEDIEN):"none",1:"")
|
||||
. S @MAP@("MEDBRANDNAMETEXT")=""
|
||||
. I $L(MEDIEN) D DOSE^PSS50(MEDIEN,,,,,"DOSE")
|
||||
. I $L(MEDIEN) N DOSEDATA M DOSEDATA=^TMP($J,"DOSE",MEDIEN)
|
||||
. S @MAP@("MEDSTRENGTHVALUE")=$S($L(MEDIEN):DOSEDATA(901),1:"")
|
||||
. S @MAP@("MEDSTRENGTHUNIT")=$S($L(DOSEDATA(902))>0:$P(DOSEDATA(902),U,2),1:"") ; SAM PLEASE CHECK
|
||||
. ; Units, concentration, etc, come from another call
|
||||
. ; $$CPRS^PSNAPIS which returns dosage-form^va class^strengh^unit
|
||||
. ; This call takes nodes 1 and 3 of ^PSDRUG(D0,"ND") as parameters
|
||||
. ; NDF Entry IEN, and VA Product Name
|
||||
. ; These can be obtained using NDF^PSS50 (IEN,,,,,"SUBSCRIPT")
|
||||
. ; Documented in the same manual.
|
||||
. N NDFDATA,CONCDATA
|
||||
. I $L(MEDIEN) D
|
||||
. I +MEDIEN D
|
||||
. . S @MAP@("MEDPRODUCTNAMECODEVALUE")=$$GET1^DIQ(50,MEDIEN,31,"E")
|
||||
. . S @MAP@("MEDPRODUCTNAMECODINGINGSYSTEM")="NDC"
|
||||
. . S @MAP@("MEDPRODUCTNAMECODEVERSION")="none"
|
||||
. . S @MAP@("MEDBRANDNAMETEXT")=""
|
||||
. . D DOSE^PSS50(MEDIEN,,,,,"DOSE")
|
||||
. . N DOSEDATA M DOSEDATA=^TMP($J,"DOSE",MEDIEN)
|
||||
. . S @MAP@("MEDSTRENGTHVALUE")=DOSEDATA(901)
|
||||
. . S @MAP@("MEDSTRENGTHUNIT")=$P(DOSEDATA(902),U,2)
|
||||
. . ; Units, concentration, etc, come from another call
|
||||
. . ; $$CPRS^PSNAPIS which returns dosage-form^va class^strengh^unit
|
||||
. . ; This call takes nodes 1 and 3 of ^PSDRUG(D0,"ND") as parameters
|
||||
. . ; NDF Entry IEN, and VA Product Name
|
||||
. . ; These can be obtained using NDF^PSS50 (IEN,,,,,"SUBSCRIPT")
|
||||
. . ; Documented in the same manual.
|
||||
. . ;
|
||||
. . ; If the drug is not matched to the National Drug File
|
||||
. . ; there will be no NDF Data.
|
||||
. . N NDFDATA,CONCDATA
|
||||
. . D NDF^PSS50(MEDIEN,,,,,"CONC")
|
||||
. . M NDFDATA=^TMP($J,"CONC",MEDIEN)
|
||||
. . N NDFIEN S NDFIEN=$P(NDFDATA(20),U)
|
||||
|
@ -101,21 +104,31 @@ EXTRACT(MINXML,DFN,OUTXML) ; EXTRACT MEDICATIONS INTO PROVIDED XML TEM
|
|||
. . ; and this will crash the call. So...
|
||||
. . I NDFIEN="" S CONCDATA=""
|
||||
. . E S CONCDATA=$$CPRS^PSNAPIS(NDFIEN,VAPROD)
|
||||
. E S (NDFDATA,CONCDATA)="" ; This line is defensive programming to prevent undef errors.
|
||||
. S @MAP@("MEDFORMTEXT")=$S($L(MEDIEN):$P(CONCDATA,U,1),1:"")
|
||||
. S @MAP@("MEDCONCVALUE")=$S($L(MEDIEN):$P(CONCDATA,U,3),1:"")
|
||||
. S @MAP@("MEDCONCUNIT")=$S($L(MEDIEN):$P(CONCDATA,U,4),1:"")
|
||||
. S @MAP@("MEDSIZETEXT")=$S($L(MEDIEN):$P(NDFDATA(23),U,2)_" "_$P(NDFDATA(24),U,2),1:"")
|
||||
. S @MAP@("MEDQUANTITYVALUE")="" ; not provided for in Non-VA meds.
|
||||
. ; Oddly, there is no easy place to find the dispense unit.
|
||||
. ; It's not included in the original call, so we have to go to the drug file.
|
||||
. ; That would be DATA^PSS50(IEN,,,,,"SUBSCRIPT")
|
||||
. ; Node 14.5 is the Dispense Unit
|
||||
. I $L(MEDIEN) D
|
||||
. . S @MAP@("MEDFORMTEXT")=$P(CONCDATA,U,1)
|
||||
. . S @MAP@("MEDCONCVALUE")=$P(CONCDATA,U,3)
|
||||
. . S @MAP@("MEDCONCUNIT")=$P(CONCDATA,U,4)
|
||||
. . S @MAP@("MEDSIZETEXT")=$P(NDFDATA(23),U,2)_" "_$P(NDFDATA(24),U,2)
|
||||
. . S @MAP@("MEDQUANTITYVALUE")="" ; not provided for in Non-VA meds.
|
||||
. . ; Oddly, there is no easy place to find the dispense unit.
|
||||
. . ; It's not included in the original call, so we have to go to the drug file.
|
||||
. . ; That would be DATA^PSS50(IEN,,,,,"SUBSCRIPT")
|
||||
. . ; Node 14.5 is the Dispense Unit
|
||||
. . D DATA^PSS50(MEDIEN,,,,,"QTY")
|
||||
. . N QTYDATA M QTYDATA=^TMP($J,"QTY",MEDIEN)
|
||||
. . S @MAP@("MEDQUANTITYUNIT")=QTYDATA(14.5)
|
||||
. E S @MAP@("MEDQUANTITYUNIT")=""
|
||||
. E D
|
||||
. . S @MAP@("MEDPRODUCTNAMECODEVALUE")=""
|
||||
. . S @MAP@("MEDPRODUCTNAMECODINGINGSYSTEM")=""
|
||||
. . S @MAP@("MEDPRODUCTNAMECODEVERSION")=""
|
||||
. . S @MAP@("MEDBRANDNAMETEXT")=""
|
||||
. . S @MAP@("MEDSTRENGTHVALUE")=""
|
||||
. . S @MAP@("MEDSTRENGTHUNIT")=""
|
||||
. . S @MAP@("MEDFORMTEXT")=""
|
||||
. . S @MAP@("MEDCONCVALUE")=""
|
||||
. . S @MAP@("MEDCONCUNIT")=""
|
||||
. . S @MAP@("MEDSIZETEXT")=""
|
||||
. . S @MAP@("MEDQUANTITYVALUE")=""
|
||||
. . S @MAP@("MEDQUANTITYUNIT")=""
|
||||
. ;
|
||||
. ; --- START OF DIRECTIONS ---
|
||||
. ; Dosage is field 2, route is 3, schedule is 4
|
||||
|
|
Loading…
Reference in New Issue