Changeset 312
- Timestamp:
- Jan 4, 2009, 5:55:58 PM (16 years ago)
- Location:
- ccr/trunk/p
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
ccr/trunk/p/C0CRXNRD.m
r311 r312 68 68 D CLOSE^%ZISH("FILE") 69 69 U $P ; reset back to principle device 70 Q 71 ; 72 READSRC(PATH) ; Open the read RxNorm Sources file: RXNSAB.RRF 73 I PATH="" QUIT 74 N FILENAME S FILENAME="RXNSAB.RRF" 75 D OPEN^%ZISH("FILE",PATH,FILENAME,"R") 76 IF POP W "Error reading file..., Please check...",! BREAK 77 F I=1:1 Q:$$STATUS^%ZISH D 78 . U IO 79 . N LINE R LINE 80 . IF $$STATUS^%ZISH QUIT 81 . U $P W I,! U IO ; Write I to the screen, then go back to reading the file 82 . N VCUI,RCUI,VSAB,RSAB,SON,SF,SVER,SCIT ; Fileman fields numbers below 83 . S VCUI=$P(LINE,"|",1) ; .01 84 . S RCUI=$P(LINE,"|",2) ; 2 85 . S VSAB=$P(LINE,"|",3) ; 3 86 . S RSAB=$P(LINE,"|",4) ; 4 87 . S SON=$P(LINE,"|",5) ; 5 88 . S SF=$P(LINE,"|",6) ; 6 89 . S SVER=$P(LINE,"|",7) ; 7 90 . S SCIT=$P(LINE,"|",25) ; 25 91 . ; Remove embedded "^" 92 . S SCIT=$TR(SCIT,"^") 93 . ; Convert SCIT into an array of 80 characters on each line 94 . ; In each line, chop 80 characters off, reset SCIT to be the rest 95 . N SCITLINE S SCITLINE=$L(SCIT)\80+1 96 . F J=1:1:SCITLINE S SCIT(J)=$E(SCIT,1,80) S SCIT=$E(SCIT,81,$L(SCIT)) 97 . ; Now, construct the FDA array 98 . N RXNFDA 99 . S RXNFDA(176.003,"+"_I_",",.01)=VCUI 100 . S RXNFDA(176.003,"+"_I_",",2)=RCUI 101 . S RXNFDA(176.003,"+"_I_",",3)=VSAB 102 . S RXNFDA(176.003,"+"_I_",",4)=RSAB 103 . S RXNFDA(176.003,"+"_I_",",5)=SON 104 . S RXNFDA(176.003,"+"_I_",",6)=SF 105 . S RXNFDA(176.003,"+"_I_",",7)=SVER 106 . D UPDATE^DIE("","RXNFDA") 107 . I $D(^TMP("DIERR",$J)) U $P BREAK 108 . ; Now, file WP field SCIT 109 . D WP^DIE(176.003,I_",",25,,$NA(SCIT)) 110 D CLOSE^%ZISH("FILE") 111 Q 70 112 71 -
ccr/trunk/p/CCRMEDS1.m
r204 r312 69 69 . S @MAP@("MEDSOURCEACTORID")="ACTORPROVIDER_"_$P(MED(4),U) 70 70 . S @MAP@("MEDPRODUCTNAMETEXT")=$P(MED(6),U,2) 71 . S @MAP@("MEDPRODUCTNAMECODEVALUE")=MED(27) 72 . S @MAP@("MEDPRODUCTNAMECODINGINGSYSTEM")="NDC" 73 . S @MAP@("MEDPRODUCTNAMECODEVERSION")="none" 71 . ; 12/30/08: I will be using RxNorm for coding... 72 . ; 176.001 is the file for Concepts; 176.003 is the file for 73 . ; sources (i.e. for RxNorm Version) 74 . ; 75 . ; We need the VUID first for the National Drug File entry first 76 . ; We get the VUID of the drug, by looking up the VA Product entry 77 . ; (file 50.68) using the call NDF^PSS50, returned in node 22. 78 . ; Field 99.99 is the VUID. 79 . ; 80 . ; We use the VUID to look up the RxNorm in file 176.001; same idea. 81 . ; Get IEN first using $$FIND1^DIC, then get the RxNorm number by 82 . ; $$GET1^DIQ. 83 . ; 84 . ; I get the RxNorm name and version from the RxNorm Sources (file 85 . ; 176.003), by searching for "RXNORM", then get the data. 86 . N MEDIEN S MEDIEN=$P(MED(6),U) 87 . D NDF^PSS50(MEDIEN,,,,,"NDF") 88 . N NDFDATA M NDFDATA=^TMP($J,"NDF",MEDIEN) 89 . N NDFIEN S NDFIEN=$P(NDFDATA(20),U) 90 . N VAPROD S VAPROD=$P(NDFDATA(22),U) 91 . ; 92 . ; NDFIEN is not necessarily defined; it won't be if the drug 93 . ; is not matched to the national drug file (e.g. if the drug is 94 . ; new on the market, compounded, or is a fake drug [blue pill]. 95 . ; To protect against failure, I will put an if/else block 96 . ; 97 . N VUID,RXNIEN,RXNORM,SRCIEN,RXNNAME,RXNVER 98 . I NDFIEN D 99 . . S VUID=$$GET1^DIQ(50.68,VAPROD,99.99) 100 . . S RXNIEN=$$FIND1^DIC(176.001,,,VUID,"VUID") 101 . . S RXNORM=$$GET1^DIQ(176.001,RXNIEN,.01) 102 . . S SRCIEN=$$FIND1^DIC(176.003,,"B","RXNORM") 103 . . S RXNNAME=$$GET1^DIQ(176.003,SRCIEN,6) 104 . . S RXNVER=$$GET1^DIQ(176.003,SRCIEN,7) 105 . ; 106 . E S (RXNORM,RXNNAME,RXNVER)="" 107 . ; End if/else block 108 . S @MAP@("MEDPRODUCTNAMECODEVALUE")=RXNORM 109 . S @MAP@("MEDPRODUCTNAMECODINGINGSYSTEM")=RXNNAME 110 . S @MAP@("MEDPRODUCTNAMECODEVERSION")=RXNVER 111 . ; 74 112 . S @MAP@("MEDBRANDNAMETEXT")=MED(6.5) 75 . N MEDIEN S MEDIEN=$P(MED(6),U)76 113 . D DOSE^PSS50(MEDIEN,,,,,"DOSE") 77 114 . N DOSEDATA M DOSEDATA=^TMP($J,"DOSE",MEDIEN) … … 81 118 . ; $$CPRS^PSNAPIS which returns dosage-form^va class^strengh^unit 82 119 . ; This call takes nodes 1 and 3 of ^PSDRUG(D0,"ND") as parameters 83 . ; NDF Entry IEN, and VA Product Name120 . ; NDF Entry IEN, and VA Product IEN 84 121 . ; These can be obtained using NDF^PSS50 (IEN,,,,,"SUBSCRIPT") 85 . ; Documented in the same manual. 86 . D NDF^PSS50(MEDIEN,,,,,"CONC") 87 . N NDFDATA M NDFDATA=^TMP($J,"CONC",MEDIEN) 88 . N NDFIEN S NDFIEN=$P(NDFDATA(20),U) 89 . N VAPROD S VAPROD=$P(NDFDATA(22),U) 122 . ; These have been collected above. 90 123 . N CONCDATA 91 124 . ; If a drug was not matched to NDF, then the NDFIEN is gonna be "" -
ccr/trunk/p/CCRMEDS2.m
r295 r312 85 85 . ; with that 86 86 . N MEDIEN S MEDIEN=$P(MED(11),U) 87 . I +MEDIEN>0 D 88 . . S @MAP@("MEDPRODUCTNAMECODEVALUE")=$$GET1^DIQ(50,MEDIEN,31,"E") 89 . . S @MAP@("MEDPRODUCTNAMECODINGINGSYSTEM")="NDC" 90 . . S @MAP@("MEDPRODUCTNAMECODEVERSION")="none" 87 . I +MEDIEN>0 D ; start of if/else block 88 . . ; 12/30/08: I will be using RxNorm for coding... 89 . . ; 176.001 is the file for Concepts; 176.003 is the file for 90 . . ; sources (i.e. for RxNorm Version) 91 . . ; 92 . . ; We need the VUID first for the National Drug File entry first 93 . . ; We get the VUID of the drug, by looking up the VA Product entry 94 . . ; (file 50.68) using the call NDF^PSS50, returned in node 22. 95 . . ; Field 99.99 is the VUID. 96 . . ; 97 . . ; We use the VUID to look up the RxNorm in file 176.001; same idea. 98 . . ; Get IEN first using $$FIND1^DIC, then get the RxNorm number by 99 . . ; $$GET1^DIQ. 100 . . ; 101 . . ; I get the RxNorm name and version from the RxNorm Sources (file 102 . . ; 176.003), by searching for "RXNORM", then get the data. 103 . . D NDF^PSS50(MEDIEN,,,,,"NDF") 104 . . N NDFDATA M NDFDATA=^TMP($J,"NDF",MEDIEN) 105 . . N NDFIEN S NDFIEN=$P(NDFDATA(20),U) 106 . . N VAPROD S VAPROD=$P(NDFDATA(22),U) 107 . . ; 108 . . ; NDFIEN is not necessarily defined; it won't be if the drug 109 . . ; is not matched to the national drug file (e.g. if the drug is 110 . . ; new on the market, compounded, or is a fake drug [blue pill]. 111 . . ; To protect against failure, I will put an if/else block 112 . . N VUID,RXNIEN,RXNORM,SRCIEN,RXNNAME,RXNVER 113 . . I NDFIEN D 114 . . . S VUID=$$GET1^DIQ(50.68,VAPROD,99.99) 115 . . . S RXNIEN=$$FIND1^DIC(176.001,,,VUID,"VUID") 116 . . . S RXNORM=$$GET1^DIQ(176.001,RXNIEN,.01) 117 . . . S SRCIEN=$$FIND1^DIC(176.003,,"B","RXNORM") 118 . . . S RXNNAME=$$GET1^DIQ(176.003,SRCIEN,6) 119 . . . S RXNVER=$$GET1^DIQ(176.003,SRCIEN,7) 120 . . ; 121 . . E S (RXNORM,RXNNAME,RXNVER)="" 122 . . ; End if/else block 123 . . S @MAP@("MEDPRODUCTNAMECODEVALUE")=RXNORM 124 . . S @MAP@("MEDPRODUCTNAMECODINGINGSYSTEM")=RXNNAME 125 . . S @MAP@("MEDPRODUCTNAMECODEVERSION")=RXNVER 126 . . ; 91 127 . . S @MAP@("MEDBRANDNAMETEXT")="" 92 128 . . D DOSE^PSS50(MEDIEN,,,,,"DOSE") … … 99 135 . . ; NDF Entry IEN, and VA Product Name 100 136 . . ; These can be obtained using NDF^PSS50 (IEN,,,,,"SUBSCRIPT") 101 . . ; Documented in the same manual. 102 . . D NDF^PSS50(MEDIEN,,,,,"CONC") 103 . . N NDFDATA M NDFDATA=^TMP($J,"CONC",MEDIEN) 104 . . N NDFIEN S NDFIEN=$P(NDFDATA(20),U) 105 . . N VAPROD S VAPROD=$P(NDFDATA(22),U) 137 . . ; Documented in the same manual; executed above. 106 138 . . N CONCDATA 107 139 . . ; If a drug was not matched to NDF, then the NDFIEN is gonna be "" … … 134 166 . . S @MAP@("MEDQUANTITYVALUE")="" 135 167 . . S @MAP@("MEDQUANTITYUNIT")="" 136 . ; 168 . ; end of if/else block 137 169 . ; 138 170 . ; --- START OF DIRECTIONS --- -
ccr/trunk/p/CCRMEDS3.m
r295 r312 21 21 Q 22 22 ; 23 EXTRACT(MINXML,DFN,OUTXML) ; EXTRACT MEDICATIONS INTO PROVIDED XML TEMPLATE23 EXTRACT(MINXML,DFN,OUTXML) ; Extract medications into provided xml template 24 24 ; 25 25 ; MINXML is the Input XML Template, passed by name … … 78 78 . ; It' node 1, internal form. 79 79 . N MEDIEN S MEDIEN=MED(1,"I") 80 . I +MEDIEN D 81 . . S @MAP@("MEDPRODUCTNAMECODEVALUE")=$$GET1^DIQ(50,MEDIEN,31,"E") 82 . . S @MAP@("MEDPRODUCTNAMECODINGINGSYSTEM")="NDC" 83 . . S @MAP@("MEDPRODUCTNAMECODEVERSION")="none" 80 . I +MEDIEN D ; start of if/else block 81 . . ; 12/30/08: I will be using RxNorm for coding... 82 . . ; 176.001 is the file for Concepts; 176.003 is the file for 83 . . ; sources (i.e. for RxNorm Version) 84 . . ; 85 . . ; We need the VUID first for the National Drug File entry first 86 . . ; We get the VUID of the drug, by looking up the VA Product entry 87 . . ; (file 50.68) using the call NDF^PSS50, returned in node 22. 88 . . ; Field 99.99 is the VUID. 89 . . ; 90 . . ; We use the VUID to look up the RxNorm in file 176.001; same idea. 91 . . ; Get IEN first using $$FIND1^DIC, then get the RxNorm number by 92 . . ; $$GET1^DIQ. 93 . . ; 94 . . ; I get the RxNorm name and version from the RxNorm Sources (file 95 . . ; 176.003), by searching for "RXNORM", then get the data. 96 . . D NDF^PSS50(MEDIEN,,,,,"NDF") 97 . . N NDFDATA M NDFDATA=^TMP($J,"NDF",MEDIEN) 98 . . N NDFIEN S NDFIEN=$P(NDFDATA(20),U) 99 . . N VAPROD S VAPROD=$P(NDFDATA(22),U) 100 . . ; 101 . . ; NDFIEN is not necessarily defined; it won't be if the drug 102 . . ; is not matched to the national drug file (e.g. if the drug is 103 . . ; new on the market, compounded, or is a fake drug [blue pill]. 104 . . ; To protect against failure, I will put an if/else block 105 . . N VUID,RXNIEN,RXNORM,SRCIEN,RXNNAME,RXNVER 106 . . I NDFIEN D 107 . . . S VUID=$$GET1^DIQ(50.68,VAPROD,99.99) 108 . . . S RXNIEN=$$FIND1^DIC(176.001,,,VUID,"VUID") 109 . . . S RXNORM=$$GET1^DIQ(176.001,RXNIEN,.01) 110 . . . S SRCIEN=$$FIND1^DIC(176.003,,"B","RXNORM") 111 . . . S RXNNAME=$$GET1^DIQ(176.003,SRCIEN,6) 112 . . . S RXNVER=$$GET1^DIQ(176.003,SRCIEN,7) 113 . . ; 114 . . E S (RXNORM,RXNNAME,RXNVER)="" 115 . . ; End if/else block 116 . . S @MAP@("MEDPRODUCTNAMECODEVALUE")=RXNORM 117 . . S @MAP@("MEDPRODUCTNAMECODINGINGSYSTEM")=RXNNAME 118 . . S @MAP@("MEDPRODUCTNAMECODEVERSION")=RXNVER 119 . . ; 84 120 . . S @MAP@("MEDBRANDNAMETEXT")="" 85 121 . . D DOSE^PSS50(MEDIEN,,,,,"DOSE") … … 92 128 . . ; NDF Entry IEN, and VA Product Name 93 129 . . ; These can be obtained using NDF^PSS50 (IEN,,,,,"SUBSCRIPT") 94 . . ; Documented in the same manual .130 . . ; Documented in the same manual; executed above. 95 131 . . ; 96 . . ; If the drug is not matched to the National Drug File97 . . ; there will be no NDF Data.98 . . N NDFDATA,CONCDATA99 . . D NDF^PSS50(MEDIEN,,,,,"CONC")100 . . M NDFDATA=^TMP($J,"CONC",MEDIEN)101 . . N NDFIEN S NDFIEN=$P(NDFDATA(20),U)102 . . N VAPROD S VAPROD=$P(NDFDATA(22),U)103 132 . . ; If a drug was not matched to NDF, then the NDFIEN is gonna be "" 104 133 . . ; and this will crash the call. So... … … 130 159 . . S @MAP@("MEDQUANTITYVALUE")="" 131 160 . . S @MAP@("MEDQUANTITYUNIT")="" 132 . ; 161 . ; End If/Else 133 162 . ; --- START OF DIRECTIONS --- 134 163 . ; Dosage is field 2, route is 3, schedule is 4
Note:
See TracChangeset
for help on using the changeset viewer.