Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: APSPRXN

APSPRXN.m

Go to the documentation of this file.
  1. APSPRXN ;IHS/MSC/MGH - Unmapp ;04-Sep-2013 12:45;DU
  1. ;;7.0;IHS PHARMACY MODIFICATIONS;**1017**;Sep 23, 2004;Build 40
  1. EN ;EP
  1. N APSPNUM,APSPQ,APSPARY,APSPNAME,QFLG,APSPCNT
  1. S APSPQ=""
  1. ;All or selection of drugs
  1. W @IOF
  1. W !,"Drugs without RxNorm codes",!!
  1. D DEV
  1. Q
  1. DEV ;EP
  1. N XBRP,XBNS
  1. S XBRP="OUT^APSPRXN"
  1. S XBNS="APS*"
  1. D ^XBDBQUE
  1. Q
  1. OUT ;EP
  1. N IEN,NODE,INACT,DRUG,INACTDT,NDC,VA,VANDC,VAIEN,RXNORM
  1. U IO
  1. D HDR
  1. S IEN=0 F S IEN=$O(^PSDRUG(IEN)) Q:IEN=""!('+IEN) D
  1. .S (VANDC,VA)=""
  1. .S INACTDT=$$GET1^DIQ(50,IEN,100,"I")
  1. .Q:+INACTDT
  1. .S RXNORM=$$GET1^DIQ(50,IEN,9999999.27)
  1. .Q:+RXNORM
  1. .S DRUG=$$GET1^DIQ(50,IEN,.01,"E")
  1. .S NDC=$$GET1^DIQ(50,IEN,31)
  1. .S NDC=$TR(NDC,"-","")
  1. .S VAIEN=$$GET1^DIQ(50,IEN,22,"I")
  1. .I VAIEN'="" D
  1. ..S VA=$$GET1^DIQ(50.68,VAIEN,.01)
  1. ..S VANDC=$$GET1^DIQ(50.68,VAIEN,13)
  1. .I $L(VANDC)=12 S VANDC=$E(VANDC,2,12)
  1. .S APSPARY(DRUG)=IEN_U_NDC_U_VA_U_VANDC
  1. S APSPQ=0
  1. S DRUG="" F S DRUG=$O(APSPARY(DRUG)) Q:DRUG=""!(+APSPQ) D
  1. .S NODE=$G(APSPARY(DRUG))
  1. .S IEN=$P(NODE,U,1),NDC=$P(NODE,U,2),VA=$P(NODE,U,3),VANDC=$P(NODE,U,4)
  1. .W !,IEN,?8,$E(DRUG,1,50),?58,NDC
  1. .W !,?10,$E(VA,1,44),?58,VANDC,!
  1. .I $Y+4>IOSL,IOST["C-" D PAUS Q:APSPQ D HDR
  1. .Q:APSPQ=1
  1. K APSPARY
  1. Q
  1. PAUS ;
  1. N DTOUT,DUOUT,DIR
  1. S DIR("?")="Enter '^' to Halt or Press Return to continue"
  1. S DIR(0)="FO",DIR("A")="Press Return to continue or '^' to Halt"
  1. D ^DIR
  1. I $D(DUOUT) S APSPQ=1
  1. Q
  1. HDR ;
  1. I IOST["C-" W @IOF
  1. W !,"Active Drugs missing RxNorm codes"
  1. W !,"IEN",?8,"Drug Name",?58,"NDC"
  1. W !,?10,"VA Product",?58,"VA NDC",!
  1. Q
  1. REMAP ;EP Option to reset a local NDC and map to RxNorm or just set an RxNorm
  1. N APSPNUM,RXNORM
  1. W @IOF
  1. W !,"Update NDC and RxNorm",!!
  1. ASK ;
  1. N D,DIC,Y,DA,DR,DIE,IEN,NDC,NDCAP,ZDATA,NAME,IN,OUT,%,DLAYGO
  1. W ! S DIC="^PSDRUG(",DIC(0)="QEALMNTV",D="BCAP",DLAYGO=50,DIC("T")="" D IX^DIC K DIC,D I Y<0 Q
  1. S IEN=$P(Y,U,1)
  1. S NAME=$P(Y,U,2)
  1. S APSPNUM=$$DIR^APSPUTIL("S^NDC:Match on NDC;NAME:Name Lookup",,,.APSPQ)
  1. Q:APSPNUM=""!(APSPNUM="^")
  1. S RXNORM=""
  1. I APSPNUM="NDC" D
  1. .S DIE="^PSDRUG(",DR=31,DA=IEN D ^DIE
  1. .S NDC=$$GET1^DIQ(50,IEN,31)
  1. .S NDC=$$STRIP^XLFSTR(NDC,"-")
  1. .S:$L(NDC)=12 NDC=$E(NDC,2,12)
  1. .W !,"Querying Apelon site..."
  1. .S IN=NDC_"^N" S ZDATA=$$DI2RX^BSTSAPI(IN)
  1. .S RXNORM=$P(ZDATA,U,1)
  1. .I RXNORM'="" D STORE(RXNORM) W !,RXNORM_" code stored"
  1. .E W !,"Unable to map this NDC code"
  1. I APSPNUM="NAME" D
  1. .N CNT,CT,RXCODE,DESC,DATA
  1. .K ARR,^TMP($J)
  1. .S CT=0
  1. .W !,"Querying Apelon site..."
  1. .S IN=$P(NAME," ",1)_"^F^1552^^^^P"
  1. .S OUT="^TMP(""APSPRX"",$J)"
  1. .S ZDATA=$$SEARCH^BSTSAPI(.OUT,.IN)
  1. .I ZDATA>0 D
  1. ..S CNT="" F S CNT=$O(@OUT@(CNT)) Q:CNT="" D
  1. ...;S DATA=$G(@OUT@(CNT,"CON"))_U_$G(@OUT@(CNT,"PRE","TRM"))
  1. ...S DATA=$G(@OUT@(CNT,"PRE","TRM"))
  1. ...S DESC=$G(@OUT@(CNT,"PRE","TRM"))
  1. ...S ^TMP($J,CNT,0)=DATA
  1. ...S ^TMP($J,"B",DATA)=CNT
  1. ...S CT=CT+1
  1. ..S ^TMP($J,0)=U_U_CT_U_CT
  1. ..W !!,"Enter ? to see the list of RxNorm Name Matches"
  1. ..W !,"Enter ^ to quit the selection",!
  1. ..S DIC="^TMP($J," S DIC(0)="AEQ",DIC("A")="Select RxNORM Item: "
  1. ..D ^DIC
  1. ..S RXNORM=Y
  1. ..S RXCODE=$G(^TMP("APSPRX",$J,$P(RXNORM,U,1),"PRE","DSC"))
  1. ..I RXCODE'=-1&(RXCODE'="") D STORE(RXCODE) W !,RXCODE_" code stored"
  1. W !!,"Do you want to continue?" S %=2 D YN^DICN
  1. I %=1 G ASK
  1. Q
  1. STORE(RXNORM) ;store code
  1. NEW DA,DIE,DR,X,Y
  1. S DA=IEN
  1. S DIE="^PSDRUG("
  1. S DR="9999999.27///^S X=RXNORM"
  1. D ^DIE
  1. Q