Corrected bugs in CCRMEDS3 and refactored CCRMEDS2

This commit is contained in:
sam 2008-11-23 21:27:27 +00:00
parent b5fdfa0728
commit 5e1f9b172e
2 changed files with 94 additions and 65 deletions

View File

@ -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

View File

@ -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