Changeset 1730 for ccr/trunk/rxnorm/trunk/routines/C0CRXNLK.m
- Timestamp:
- Apr 27, 2016, 7:02:22 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ccr/trunk/rxnorm/trunk/routines/C0CRXNLK.m
r1665 r1730 1 1 C0CRXNLK ; VEN/SMH - RxNorm Lookup Utilities ;2014-07-22 2:27 PM 2 ;;2. 3;RXNORM FOR VISTA;;Jul 22, 2014;Build 163 ;(c) Sam Habiel 201 32 ;;2.5;RXNORM FOR VISTA;;Apr 27, 2016;Build 16 3 ;(c) Sam Habiel 2016 4 4 ; See accompanying license. Don't use otherwise. 5 5 ; … … 7 7 N DIQUIET S DIQUIET=1 8 8 D DT^DICRW 9 D EN^ XTMUNIT($T(+0),1)9 D EN^%ut($T(+0),2) 10 10 QUIT 11 11 ; … … 22 22 Q ^(IEN) 23 23 ; 24 GCN2RXNT ; @TEST -Test Get RxNorm CUI using GCN24 GCN2RXNT ; @TEST Test Get RxNorm CUI using GCN 25 25 Q:'$D(^C0CRXN(176.001,"STC","NDDF")) 26 26 N L F L=1:1 N LN S LN=$T(GCN2RXND+L) Q:LN["<<END>>" Q:LN="" D 27 27 . N GCN S GCN=$P(LN,";",3) 28 28 . N RXN S RXN=$P(LN,";",4) 29 . D CHKEQ^ XTMUNIT($$GCN2RXN(GCN),RXN,"Translation from GCN to RXCUI failed")29 . D CHKEQ^%ut($$GCN2RXN(GCN),RXN,"Translation from GCN to RXCUI failed") 30 30 QUIT 31 31 ; 32 32 GCN2RXND ; @DATA - Data for Tests ;;GCN;EXPECTED RXNCUI 33 ;;16033;99163234 33 ;;8208;310429 35 34 ;;1275;628953 … … 49 48 Q GCNS 50 49 ; 51 RXN2GCNT ; @TEST -Test Get GCN from RXNCUI50 RXN2GCNT ; @TEST Test Get GCN from RXNCUI 52 51 Q:'$D(^C0CRXN(176.001,"STX","NDDF")) 53 52 N L F L=1:1 N LN S LN=$T(RXN2GCND+L) Q:LN["<<END>>" Q:LN="" D 54 53 . N RXN S RXN=$P(LN,";",3) 55 54 . N GCN S GCN=$P(LN,";",4) 56 . D CHKEQ^ XTMUNIT($$RXN2GCN(RXN),GCN,"Translation from RXCUI to GCN failed")55 . D CHKEQ^%ut($$RXN2GCN(RXN),GCN,"Translation from RXCUI to GCN failed") 57 56 QUIT 58 57 ; … … 60 59 RXN2GCND ; @DATA - Data for Tests ;;RXNORM CUI;Expected GCN; Human Readable Drug name for dear reader 61 60 ;;998689;5145;Acetabulol 200mg tab 62 ;;745679; 5037;Albuterol Inhaler61 ;;745679;28090;Albuterol Inhaler 63 62 ;;197320;2536;Allopurinol 300mg tab 64 ;;993691; 3948^46236;Bupropion 75mg tab63 ;;993691;46236;Bupropion 75mg tab 65 64 ;;197591;3768;Diazepam 5mg tab 66 65 ;;<<END>> … … 79 78 Q C0PVUID 80 79 ; 81 RXN2VUIT ; @TEST -Get VUIDs given RxNorm values80 RXN2VUIT ; @TEST Get VUIDs given RxNorm values 82 81 N L F L=1:1 N LN S LN=$T(RXN2VUID+L) Q:LN["<<END>>" Q:LN="" D 83 82 . N RXN S RXN=$P(LN,";",3) 84 83 . N VUIDS S VUIDS=$P(LN,";",4) 85 . D CHKEQ^ XTMUNIT($P($$RXN2VUI(RXN),U),$P(VUIDS,U),"Translation from RXNCUI to VUID failed")84 . D CHKEQ^%ut($P($$RXN2VUI(RXN),U),$P(VUIDS,U),"Translation from RXNCUI to VUID failed") 86 85 QUIT 87 86 ; 88 87 RXN2VUID ; @DATA - Data items for previous test 89 ;;991632;400645590 88 ;;310429;4002369^4013941 91 ;;628953;40008 74^4000856^4013966^4015798^401579989 ;;628953;4000856^4013966^4015798^4015799 92 90 ;;197604;4003335^4015937 93 ;;884173;4002469^4013919 91 ;;884173;4002469^4013919^4032795 94 92 ;;<<END>> 95 93 ; … … 105 103 Q O 106 104 ; 107 VUI2VAPT ; @TEST -Get VA Product IEN from VUID105 VUI2VAPT ; @TEST Get VA Product IEN from VUID 108 106 N L F L=1:1 N LN S LN=$T(VUI2VAPD+L) Q:LN["<<END>>" Q:LN="" D 109 107 . N VUID S VUID=$P(LN,";",3) 110 108 . N VAP S VAP=$P(LN,";",4) 111 . D CHKEQ^ XTMUNIT($$VUI2VAP(VUID),VAP,"Translation from VUID to VA PRODUCT failed")109 . D CHKEQ^%ut($$VUI2VAP(VUID),VAP,"Translation from VUID to VA PRODUCT failed") 112 110 QUIT 113 111 ; … … 166 164 N IEN S IEN=$O(^C0CRXN(176.001,"STC","NDDF","IN",BASE,"")) Q ^(IEN) 167 165 ; 168 FDI2RXNT ; @TEST -Test Get RxNorm CUI for FDB Ingredient/Base166 FDI2RXNT ; @TEST Test Get RxNorm CUI for FDB Ingredient/Base 169 167 Q:'$D(^C0CRXN(176.001,"STC","NDDF")) 170 D CHKEQ^ XTMUNIT($$FDI2RXN(14739),1362160,"$$FDI2RXN failed")168 D CHKEQ^%ut($$FDI2RXN(14739),1362160,"$$FDI2RXN failed") 171 169 QUIT 172 170 ; … … 177 175 ; Input: RXNCUI By Value 178 176 ; Output: VUID 179 N IEN S IEN=$O(^C0CRXN(176.001,"STX","VANDF","IN",RXNCUI,"")) Q ^(IEN) 180 ; 181 RXN2VINT ; @TEST - Test Get VUID Ingredient for RxNorm CUI 182 D CHKEQ^XTMUNIT($$RXN2VIN(1366467),4031768,"$$RXN2VIN failed") 177 N IEN S IEN=$O(^C0CRXN(176.001,"STX","VANDF","IN",RXNCUI,"")) 178 I IEN Q ^(IEN) 179 E Q "" 180 ; 181 RXN2VINT ; @TEST Test Get VUID Ingredient for RxNorm CUI 182 D CHKEQ^%ut($$RXN2VIN(1366467),4031768,"$$RXN2VIN failed") 183 183 QUIT 184 184 ; … … 192 192 Q C0PIEN_"^"_C0P01 193 193 ; 194 VIN2VAGT ; @TEST -Test Get VA Generic for VUID Ingredient195 D CHKEQ^ XTMUNIT(+$$VIN2VAG(4023636),2832,"$$VIN2VAG failed")194 VIN2VAGT ; @TEST Test Get VA Generic for VUID Ingredient 195 D CHKEQ^%ut(+$$VIN2VAG(4023636),2832,"$$VIN2VAG failed") 196 196 QUIT 197 197 ; … … 218 218 Q $$VIN2DIN($$RXN2VIN($$FDI2RXN(BASE))) 219 219 ; 220 VUI2RXN(VUID) ; $$ Public - Get RXNCUI for VUID (any VUID type) 221 ; Input: VUID By Value 222 ; Output: RXNCUIs delimited by ^ 223 ; Get all entries whose code is the VUID and are in the VA NDF which are clinical drugs 224 D FIND^DIC(176.001,,"@;.01","PQX",VUID,,"CODE","I $P(^(0),U,12,13)=""VANDF^CD""") 225 ; Deserialise it into a single string 226 ; ^TMP("DILIST",4844,0)="1^*^0^" 227 ; ^TMP("DILIST",4844,0,"MAP")="IEN^.01" 228 ; ^TMP("DILIST",4844,1,0)="1006351^1364462" 229 N RXNS S RXNS="" 230 N I F I=0:0 S I=$O(^TMP("DILIST",$J,I)) Q:'I S RXNS=RXNS_$P(^(I,0),U,2)_U 231 S RXNS=$E(RXNS,1,$L(RXNS)-1) 232 QUIT RXNS 220 VUI2RXN(VUID,TTY) ; $$ Public Stephanie's Unified VUID searcher. Get RXNCUI given VUID 221 ;GIVEN A VUID IN ONE OF SEVERAL FILES RETURN THE ASSOCIATED RXNORM CODE IN 176.001 222 ; TTY="IN", "CD", or "PT" 223 ; IN = DRUG INGRIDENT FILE & VA GENERIC file 224 ; CD = VA PRODUCT FILE 225 ; PT = VA DRUG CLASS 226 ; 227 ; SAB="VANDF" 228 ; CODE=VUID 229 ; 230 I $O(^C0CRXN(176.001,"STC","VANDF",TTY,VUID,"")) Q ^($O(^(""))) 231 Q "" 232 ; 233 VUI2RXNT ; @TEST VUID to RxNorm CUI tests 234 D CHKEQ^%ut($$VUI2RXN(4010151,"CD"),314231) 235 D CHKEQ^%ut($$VUI2RXN(4020940,"IN"),16681) 236 D CHKEQ^%ut($$VUI2RXN(4021568,"PT"),883) 237 D CHKEQ^%ut($$VUI2RXN(1234234,"CD"),"") 238 QUIT 233 239 ; 234 240 VUI2GCN(VUID) ; $$ Public - Get GCNs for a given VUID (any VUID type) … … 236 242 ; Output: GCNs delimited by ^ 237 243 ; TODO: Unit Test 238 N RXNS S RXNS=$$VUI2RXN(VUID )244 N RXNS S RXNS=$$VUI2RXN(VUID,"AB") 239 245 Q:RXNS="" "" ; VUID not a drug or ingredient (can be food) 240 246 N GCNS S GCNS="" … … 251 257 N VUID S VUID=+^PSNDF(50.68,VAP,"VUID") ; Get VUID 252 258 I 'VUID S $EC=",U1," ; Must exist 253 Q $$VUI2RXN(VUID )259 Q $$VUI2RXN(VUID,"AB") 254 260 ; 255 261 MED2SCDN(DA) ; $$ Public - Medication to Semantic Clinical Drug Name … … 258 264 N RXNCUI S RXNCUI=$$MED2RXN(DA) 259 265 Q:'RXNCUI "" 266 Q $$SCDNAME(RXNCUI) 267 ; 268 SCDNAME(RXNCUI) ; $$ Public - Semantic Clinical Drug Name for RxNorm CUI 260 269 N IEN S IEN=$O(^C0CRXN(176.001,"STC","RXNORM","SCD",RXNCUI,"")) ; Let's try generic drug 261 270 I 'IEN S IEN=$O(^C0CRXN(176.001,"STC","RXNORM","SBD",RXNCUI,"")) ; Let's try non-bioequivalent Brands then … … 265 274 Q $P(^C0CRXN(176.001,IEN,0),U,15) 266 275 ; 276 ANYNAME(RXNCUI) ; $$ Public - Get the RxNorm name, no matter what it is 277 N RESULT S RESULT="" 278 N TTY S TTY="" 279 F S TTY=$O(^C0CRXN(176.001,"STC","RXNORM",TTY)) Q:TTY="" D Q:RESULT]"" 280 . N IEN S IEN=$O(^C0CRXN(176.001,"STC","RXNORM",TTY,RXNCUI,"")) 281 . Q:'IEN 282 . S RESULT=$P(^C0CRXN(176.001,IEN,0),U,15) 283 QUIT RESULT 284 ; 267 285 RXN2NDI(RXNCUI) ; $$ Public - Get NDDF Ingredient for RXNCUI 268 286 ; Input: RXNCUI By Value … … 276 294 ; Output: NDDF Base code 277 295 ; TODO:Not tested... 278 Q $$RXN2NDI($$VUI2RXN(VUID ))296 Q $$RXN2NDI($$VUI2RXN(VUID,"IN")) 279 297 ; 280 298 ; --- … … 287 305 N IEN S IEN=$O(^C0CRXN(176.002,"ASAA","RXNORM","NDC",NDC,"")) Q ^(IEN) 288 306 ; 289 NDC2RXNT ; @TEST -Test Get RxCUI given the NDC & Get RxCUI given the 50.67 NDC290 D CHKEQ^ XTMUNIT($$NDC2RXN("30142-0917-71"),198439,"$$NDC2RXN failed")291 D CHKEQ^ XTMUNIT($$NDC2RXN2("000031868518","VANDF"),996520,"$$NDC2RXN2 failed")307 NDC2RXNT ; @TEST Test Get RxCUI given the NDC & Get RxCUI given the 50.67 NDC 308 D CHKEQ^%ut($$NDC2RXN("30142-0917-71"),198439,"$$NDC2RXN failed") 309 D CHKEQ^%ut($$NDC2RXN2("000031868518","VANDF"),996520,"$$NDC2RXN2 failed") 292 310 QUIT 293 311 ; … … 304 322 ; Output: 0 or 1 305 323 Q ''$D(^C0CRXN(176.001,"STC","RXNORM","SBD",RXN)) 306 ISBRANDT ; @TEST -Test Is this RxCUI for a brand drug?307 D CHKEQ^ XTMUNIT($$ISBRAND(205535),1,"$$ISBRAND failed") ; Brand Prozac308 D CHKEQ^ XTMUNIT($$ISBRAND(310384),0,"$$ISBRAND failed") ; Generic Fluoxetine324 ISBRANDT ; @TEST Test Is this RxCUI for a brand drug? 325 D CHKEQ^%ut($$ISBRAND(205535),1,"$$ISBRAND failed") ; Brand Prozac 326 D CHKEQ^%ut($$ISBRAND(310384),0,"$$ISBRAND failed") ; Generic Fluoxetine 309 327 QUIT 310 328 ; … … 315 333 ; Output: RxCUI of Generic 316 334 Q $O(^C0CRXN(176.005,"B",RXN,"has_tradename","")) 317 BR2GENT ; @TEST -Test Convert Brand RxCUI to Generic RxCUI (many to 1)318 D CHKEQ^ XTMUNIT($$BR2GEN(205535),310384,"$$BR2GEN failed")335 BR2GENT ; @TEST Test Convert Brand RxCUI to Generic RxCUI (many to 1) 336 D CHKEQ^%ut($$BR2GEN(205535),310384,"$$BR2GEN failed") 319 337 QUIT 320 338 ; … … 327 345 Q RTN 328 346 ; 329 GEN2BRT ; @TEST -Test Convert Generic RxCUI to Brand RxCUIs (1 to many).330 D CHKTF^ XTMUNIT($$GEN2BR(310384)[205535,"$$GEN2BR failed")347 GEN2BRT ; @TEST Test Convert Generic RxCUI to Brand RxCUIs (1 to many). 348 D CHKTF^%ut($$GEN2BR(310384)[205535,"$$GEN2BR failed") 331 349 QUIT 332 350 ; … … 345 363 . S BNS=BNS_$P(^C0CRXN(176.001,BNIEN,0),U,15)_U 346 364 QUIT $E(BNS,1,$L(BNS)-1) 347 RXN2BNST ; @TEST -Test Get all Brand Names associated with an RXN348 D CHKTF^ XTMUNIT($$RXN2BNS(205535)["Prozac","$$RXN2BNS failed")349 QUIT 350 ; 351 ; --- 352 ; 353 RXN2NDC(RXN) ; Get NDC codes for RxNorm code365 RXN2BNST ; @TEST Test Get all Brand Names associated with an RXN 366 D CHKTF^%ut($$RXN2BNS(205535)["Prozac","$$RXN2BNS failed") 367 QUIT 368 ; 369 ; --- 370 ; 371 RXN2NDC(RXN) ; $$ Public - Get NDC codes for RxNorm code 354 372 N NDCS S NDCS="" 355 373 N I F I=0:0 S I=$O(^C0CRXN(176.002,"ASAR","RXNORM","NDC",RXN,I)) Q:'I S NDCS=NDCS_^(I)_"^" 356 374 S $E(NDCS,$L(NDCS))="" 357 375 QUIT NDCS 358 RXN2NDCT ; @TEST - Test Get NDC codes for RxNorm code 359 D CHKTF^XTMUNIT($$RXN2NDC(197379)["^"_16714003309,"$$RXN2NDC failed") 360 QUIT 376 RXN2NDCT ; @TEST Test Get NDC codes for RxNorm code 377 D CHKTF^%ut($$RXN2NDC(197379)["^"_16714003309,"$$RXN2NDC failed") 378 QUIT 379 ; 380 LVUID(RXN) ; $$ Public - Locate VUID, given RxNorm. Iterative Search 381 ; ^C0CRXN(176.001,"STC","RXNORM","IN",46239,IEN 382 N TTY S TTY="" 383 N intermediateRxCUI 384 N finalVUID 385 i '$$EXIST(RXN) q "0^not found in RxNorm" 386 ; 387 F S TTY=$O(^C0CRXN(176.001,"STC","RXNORM",TTY)) Q:TTY="" D q:$g(intermediateRxCUI) q:$g(finalVUID) 388 . N IEN S IEN=$O(^C0CRXN(176.001,"STC","RXNORM",TTY,RXN,"")) 389 . I 'IEN quit ; s err="0^not found in RxNorm" quit 390 . ; W ^C0CRXN(176.001,IEN,0),! 391 . I TTY="BN" s intermediateRxCUI=$$BR2GEN(RXN) quit ; try searching with generic 392 . I TTY="IN"!(TTY="MIN") s finalVUID=$$RXN2VIN(RXN) quit ; match VUID 393 . I TTY="PIN" s intermediateRxCUI=$$formOf(RXN) quit ; try searching with ingredient 394 . I TTY="SCD" d 395 .. s finalVUID=$$RXN2VUI(RXN) 396 .. i finalVUID="" s finalVUID=$$containerOf(RXN) 397 .. I finalVUID="" s finalVUID=$$tradeName(RXN) 398 . I TTY="GPCK" d 399 .. s finalVUID=$$tradeName(RXN) 400 i $get(intermediateRxCUI) q $$LVUID(intermediateRxCUI) ; recurse 401 i $get(finalVUID) quit finalVUID 402 quit "0^no mapping found in RxNorm" 403 ; 404 formOf(RXN) ; RXN is form of result 405 q $o(^C0CRXN(176.005,"B",RXN,"has_form","")) 406 containerOf(RXN) ; loop through all contains and see if one hits it. 407 n container 408 n vuid s vuid="" 409 f container=0:0 s container=$o(^C0CRXN(176.005,"B",RXN,"contains",container)) q:'container d q:$g(vuid) 410 . s vuid=$$RXN2VUI(container) 411 quit vuid 412 tradeName(RXN) ; loop through all tradenames and see if there's a match 413 n vuid s vuid="" 414 n tncui f tncui=0:0 s tncui=$o(^C0CRXN(176.005,"B",RXN,"tradename_of",tncui)) q:'tncui d q:$g(vuid) 415 . s vuid=$$RXN2VUI(tncui) 416 quit vuid 417 ; 418 loopVUIDs ; [Public] Paste VUIDs to get the RxNorm Numbers 419 ; ZEXCEPT: DTIME 420 n rxn 421 f r rxn:$g(DTIME,300) q:rxn="" q:rxn=$c(4) d 422 . w "|" 423 . w $$LVUID(rxn),"|",$$ANYNAME(rxn),! 424 quit
Note:
See TracChangeset
for help on using the changeset viewer.