| 1 | PSNAPIS ;BIR/DMA-APIs for NDF ; 07/02/03 14:07
 | 
|---|
| 2 |  ;;4.0; NATIONAL DRUG FILE;**2,3,47,70**; 30 Oct 98
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;Reference to ^PSDRUG supported by DBIA #2192
 | 
|---|
| 5 |  ;Reference to ^PS(50.606 supported by DBIA #2174
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 | PSA(NDC,LIST) ;ENTRY FOR DRUG ACCOUNTABILITY
 | 
|---|
| 8 |  N Y,PN,PN1,P50,J
 | 
|---|
| 9 |  S Y=$Q(^PSNDF(50.67,"NDC",NDC)) I $QS(Y,3)'=NDC Q 0
 | 
|---|
| 10 |  S Y=^PSNDF(50.67,$QS(Y,4),0),Y=$P(Y,"^",6),PN=$P(^PSNDF(50.68,Y,0),"^"),PN1=$E(PN,1,30)
 | 
|---|
| 11 |  S P50=0,J=0 F  S P50=$O(^PSDRUG("VAPN",PN1,P50)) Q:'P50  I $P(^PSDRUG(P50,"ND"),"^",2)=PN S LIST(P50)=$P(^PSDRUG(P50,0),"^"),J=J+1
 | 
|---|
| 12 |  Q J
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 | PSJING(DA1,K,LIST) ;ENTRY FOR INGREDIENTS
 | 
|---|
| 15 |  N X,CT
 | 
|---|
| 16 |  ;DA1 IS SUPERFLUOUS, BUT WE LEAVE IN FOR COMPATABILITY
 | 
|---|
| 17 |  I 'K!('$D(^PSNDF(50.68,+K))) Q 0
 | 
|---|
| 18 |  S DA=0 F CT=0:1 S DA=$O(^PSNDF(50.68,K,2,DA)) Q:'DA  S X=^(DA,0),LIST(+X)=+X_"^"_$P(^PS(50.416,+X,0),"^")_"^"_$P(X,"^",2)_"^" S:$P(X,"^",3)]"" LIST(+X)=LIST(+X)_$P($G(^PS(50.607,$P(X,"^",3),0)),"^")
 | 
|---|
| 19 |  Q CT
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 | PSJDF(DA,K) ;GET DOSE FORM
 | 
|---|
| 22 |  N X,DF
 | 
|---|
| 23 |  ;AGAIN DA IS SUPERFLUOUS
 | 
|---|
| 24 |  I 'K!('$D(^PSNDF(50.68,+K))) Q 0
 | 
|---|
| 25 |  S X=$P(^PSNDF(50.68,K,0),"^",3),DF=$P($G(^PS(50.606,X,0)),"^")
 | 
|---|
| 26 |  Q X_"^"_DF
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 | PSJST(DA,K) ;ENTRY FOR STRENGTH
 | 
|---|
| 29 |  I 'K!('$D(^PSNDF(50.68,K))) Q 0
 | 
|---|
| 30 |  Q 1_"^"_$P(^PSNDF(50.68,K,0),"^",4)
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 | CLASS(CL) ;ENTRY FOR OE/RR TO GET CLASS $D
 | 
|---|
| 33 |  I CL']"" Q 0
 | 
|---|
| 34 |  Q $D(^PS(50.605,"C",CL))>0
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 | DRUG(DA) ;ENTRY FOR OE/RR TO GET DRUG $D
 | 
|---|
| 37 |  I DA']"" Q 0
 | 
|---|
| 38 |  Q $D(^PSNDF(50.6,"B",DA))!$D(^PSNDF(50.67,"T",DA))
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 | PROD0(P1,P2) ;GET INFO IN THE FORM OF THE OLD 0 PRODUCT NODE
 | 
|---|
| 41 |  N A,B
 | 
|---|
| 42 |  ;P1 IS SUPERFLUOUS
 | 
|---|
| 43 |  I P2']"" Q ""
 | 
|---|
| 44 |  S A=$G(^PSNDF(50.68,P2,0)),B=$G(^(1))
 | 
|---|
| 45 |  Q $P(A,"^")_"^"_$P(A,"^",3,5)_"^^^"_$P(B,"^",5,6)
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 | PROD2(P1,P2) ;GET OLD 2 NODE
 | 
|---|
| 48 |  ;P1 STILL SUPERFLUOUS
 | 
|---|
| 49 |  I P2']"" Q ""
 | 
|---|
| 50 |  Q $P($G(^PSNDF(50.68,P2,1)),"^",1,3)_"^"_$P($G(^PSNDF(50.64,+$P(^PSNDF(50.68,P2,1),"^",4),0)),"^")
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 | DCLASS(DA,K) ;GET CLASS FOR PRODUCT
 | 
|---|
| 53 |  I K']"" Q ""
 | 
|---|
| 54 |  S X=+$P($G(^PSNDF(50.68,+K,3)),"^"),Y=$P($G(^PS(50.605,X,0)),"^",2)
 | 
|---|
| 55 |  Q X_"^"_Y
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 | DCLCODE(DA,K) ;RETURN VA CLASS CODE
 | 
|---|
| 58 |  I K']"" Q ""
 | 
|---|
| 59 |  S X=+$P($G(^PSNDF(50.68,+K,3)),"^"),X=$P($G(^PS(50.605,X,0)),"^")
 | 
|---|
| 60 |  Q X
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 |  ;DA IS SUPERFLUOUS
 | 
|---|
| 63 | VAGN(DA) ;GET VA GENERIC NAME
 | 
|---|
| 64 |  I 'DA!'$D(^PSNDF(50.6,+DA,0)) Q 0
 | 
|---|
| 65 |  Q $P(^PSNDF(50.6,+DA,0),"^")
 | 
|---|
| 66 |  ;
 | 
|---|
| 67 | FORMI(DA,K) ;GET FORMULARY INDICATOR FOR VA PRODUCT
 | 
|---|
| 68 |  ;DA IS SUPERFLUOUS
 | 
|---|
| 69 |  ;1 if yes, 0 if no, null if not entered
 | 
|---|
| 70 |  Q $P($G(^PSNDF(50.68,+K,5)),"^")
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 | FORMR(DA,K) ;GET EXISTENCE OF FORMULARY RESTRICTIONS
 | 
|---|
| 73 |  ;DA IS SUPERFLUOUS
 | 
|---|
| 74 |  Q $O(^PSNDF(50.68,+K,6,0))]""
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 | DFSU(DA,K) ;RETURN DOSE FORM, STRENGTH, AND UNITS FOR PDM AND CPRS
 | 
|---|
| 77 |  N U1,UN
 | 
|---|
| 78 |  I 'K!('$D(^PSNDF(50.68,+K,0))) Q 0
 | 
|---|
| 79 |  S U1=+$P(^PSNDF(50.68,+K,0),"^",5),UN=$P($G(^PS(50.607,U1,0)),"^")
 | 
|---|
| 80 |  Q $$PSJDF(DA,K)_"^"_$$PSJST(DA,K)_"^"_U1_"^"_UN
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 | VAP(DA,LIST) ;GIVEN GENERIC RETURN ARRAY LIST(IEN)=IEN^PRODUCT^DF PTR^DOSE FOMR
 | 
|---|
| 83 |  N PR,J,X
 | 
|---|
| 84 |  I 'DA!'$D(^PSNDF(50.6,+DA)) Q 0
 | 
|---|
| 85 |  S PR=0,J=0 F  S PR=$O(^PSNDF(50.6,"APRO",DA,PR)) Q:'PR  S X=^PSNDF(50.68,PR,0),DAT=$P($G(^(7)),"^",3) D
 | 
|---|
| 86 |  .S LIST(PR)=PR_"^"_$P(X,"^")_"^"_$P(X,"^",3)_"^"_$P($G(^PS(50.606,+$P(X,"^",3),0)),"^")_"^"_$P(^PSNDF(50.68,PR,3),"^")_"^"_$P($G(^PS(50.605,+$P(^PSNDF(50.68,PR,3),"^"),0)),"^"),J=J+1 I DAT,(DAT<DT) S LIST(PR)=LIST(PR)_"^I"
 | 
|---|
| 87 |  Q J
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 | PSPT(DA,K,LIST) ;GIVEN PRODUCT K RETURN LIST(INE1^IEN2)=IEN1^PSIZE^IEN1^PTYPE
 | 
|---|
| 90 |  N NDC,J,PT,PS
 | 
|---|
| 91 |  ;DA SUPERFLUOUS
 | 
|---|
| 92 |  I 'K!'$D(^PSNDF(50.68,+K)) Q 0
 | 
|---|
| 93 |  S NDC=0 F J=0:1 S NDC=$O(^PSNDF(50.68,"ANDC",K,NDC)) Q:'NDC  S X=^PSNDF(50.67,NDC,0),PS=$P(X,"^",8),PT=$P(X,"^",9),LIST(PS_"^"_PT)=PS_"^"_$P($G(^PS(50.609,PS,0)),"^")_"^"_PT_"^"_$P($G(^PS(50.608,PT,0)),"^")
 | 
|---|
| 94 |  Q J
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 | DSS(DA,K,DATE) ;RETURN DSS FEEDER KEY
 | 
|---|
| 97 |  ;NEW STYLE IF DATE IS MISSING OR NOT LESS THAN 199810
 | 
|---|
| 98 |  ;OLD STYLE OTHERWISE
 | 
|---|
| 99 |  S DATE=$G(DATE,999999)
 | 
|---|
| 100 |  I DATE'<199810 Q $S($D(^PSNDF(50.68,+K)):$$RJ^XLFSTR(K,5,0),1:"00000")
 | 
|---|
| 101 |  I $D(^PSNDF(50.6,+DA)),$D(^PSNDF(50.68,+K,7)) Q $$RJ^XLFSTR(DA,4,0)_$$RJ^XLFSTR($P(^PSNDF(50.68,+K,7),"^",9),3,0)
 | 
|---|
| 102 |  Q "0000000"
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 | CPRS(DA,K) ;CALL FOR CPRS
 | 
|---|
| 105 |  N CL,X,DF,ST,UN
 | 
|---|
| 106 |  ;RETURNS X=DOSE FORM^CLASS^STRENGTH^UNITS
 | 
|---|
| 107 |  I '$D(^PSNDF(50.68,+K)) Q 0
 | 
|---|
| 108 |  S CL=$P($G(^PS(50.605,+$P(^PSNDF(50.68,K,3),"^"),0)),"^")
 | 
|---|
| 109 |  S X=^PSNDF(50.68,K,0),DF=+$P(X,"^",3),ST=$P(X,"^",4),UN=+$P(X,"^",5)
 | 
|---|
| 110 |  Q $P($G(^PS(50.606,DF,0)),"^")_"^"_CL_"^"_ST_"^"_$P($G(^PS(50.607,UN,0)),"^")
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 | CIRN(NDC,LIST) ;CALL FOR CIRN
 | 
|---|
| 113 |  N DA,X,A
 | 
|---|
| 114 |  I NDC["-" S NDC=$$RJ^XLFSTR($P(NDC,"-"),6,0)_$$RJ^XLFSTR($P(NDC,"-",2),4,0)_$$RJ^XLFSTR($P(NDC,"-",3),2,0)
 | 
|---|
| 115 |  K LIST S LIST="000000000000" F J=1:1:7 S LIST(J)=""
 | 
|---|
| 116 |  S DA=$O(^PSNDF(50.67,"NDC",NDC,0)) Q:'DA  S X=^PSNDF(50.67,DA,0),LIST(7)=$P(X,"^",2)_"^"_$P(X,"^",4,6)_"^",A=0 F  S A=$O(^PSNDF(50.67,DA,1,A)) Q:'A  S LIST(7)=LIST(7)_^(A,0)_" "
 | 
|---|
| 117 |  S LIST(6)=$P(X,"^",9),LIST(5)=$P(X,"^",8),A=$P(X,"^",6),X=^PSNDF(50.68,A,0)
 | 
|---|
| 118 |   S LIST(2)=$P(X,"^",3)_"^^"_$P(^PSNDF(50.68,A,3),"^"),LIST(3)=$P(X,"^",4),LIST(4)=$P(X,"^",5)
 | 
|---|
| 119 |  S LIST(0)=$P(X,"^",2),LIST(1)=^PSNDF(50.6,$P(X,"^",2),0),LIST=NDC
 | 
|---|
| 120 |  F J=1:1:7 I LIST(J)="NO DATA" S LIST(J)=""
 | 
|---|
| 121 |  Q
 | 
|---|
| 122 |  ;
 | 
|---|
| 123 | B() ;RETURNS THE GLOBAL ROOT OF THE "B" CROSSREFERENCE IN NDF
 | 
|---|
| 124 |  Q "^PSNDF(50.6,""B"")"
 | 
|---|
| 125 |  ;
 | 
|---|
| 126 | T() ;RETURNS THE GLOBAL ROOT OF THE "T" CROSSREFERENCE IN NDF
 | 
|---|
| 127 |  Q "^PSNDF(50.67,""T"")"
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 | TTOG(TRADE,LIST) ;RETURNS LIST(IEN)=IEN_"^"GENERIC FOR EVERY ENTRY IN 50.6 WHICH MATCHES THE TRADE NAME
 | 
|---|
| 130 |  I TRADE="" Q 0
 | 
|---|
| 131 |  N X,CT
 | 
|---|
| 132 |  I '$O(^PSNDF(50.67,"T",TRADE,0)) Q 0
 | 
|---|
| 133 |  S (X,CT)=0 F  S X=$O(^PSNDF(50.67,"T",TRADE,X)) Q:'X  S Y=$P(^PSNDF(50.67,X,0),"^",6),Y=$P(^PSNDF(50.68,Y,0),"^",2) I '$D(LIST(Y)) S LIST(Y)=Y_"^"_$P(^PSNDF(50.6,Y,0),"^"),CT=CT+1
 | 
|---|
| 134 |  Q CT
 | 
|---|
| 135 |  ;
 | 
|---|
| 136 | CLIST(DA,LIST) ;RETURNS LIST(IEN)=IEN IN 50.605^CLASS CODE
 | 
|---|
| 137 |  ;FOR EVERY CLASS IN PSNDF(50.6,DA)
 | 
|---|
| 138 |  I 'DA Q 0
 | 
|---|
| 139 |  I '$D(^PSNDF(50.6,+DA)) Q 0
 | 
|---|
| 140 |  N K,CT S (K,CT)=0 F  S K=$O(^PSNDF(50.6,"APRO",DA,K)) Q:'K  S IEN=$P(^PSNDF(50.68,K,3),"^") I '$D(LIST(IEN)) S LIST(IEN)=IEN_"^"_$P(^PS(50.605,IEN,0),"^"),CT=CT+1
 | 
|---|
| 141 |  Q CT
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 | TGTOG(NAME) ;GIVEN NAME TRY TO FIND IT IN T OR B CROSS REFERENCE AND RETURN IEN
 | 
|---|
| 144 |  N X
 | 
|---|
| 145 |  I NAME="" Q 0
 | 
|---|
| 146 |  S X=$O(^PSNDF(50.6,"B",NAME,0)) I X Q X
 | 
|---|
| 147 |  I '$O(^PSNDF(50.67,"T",NAME,0)) Q 0
 | 
|---|
| 148 |  S X=$O(^PSNDF(50.67,"T",NAME,0)),X=$P(^PSNDF(50.67,X,0),"^",6),X=$P(^PSNDF(50.68,X,0),"^",2) Q X
 | 
|---|
| 149 |  ;
 | 
|---|
| 150 | TGTOG2(NAME,LIST) ;PARTIAL LOOKUP ON T OR B
 | 
|---|
| 151 |  I NAME="" Q
 | 
|---|
| 152 |  N NAM,X,Y,CT
 | 
|---|
| 153 |  S CT=0
 | 
|---|
| 154 |  S NAM=$E(NAME,1,$L(NAME)-1)_$C($A($E(NAME,$L(NAME)))-1)_"z" F  S NAM=$O(^PSNDF(50.6,"B",NAM)),X=0 Q:NAM'[NAME  F  S X=$O(^PSNDF(50.6,"B",NAM,X)) Q:'X  S LIST(X)=X_"^"_$P(^PSNDF(50.6,X,0),"^"),CT=CT+1
 | 
|---|
| 155 |  S NAM=$E(NAME,1,$L(NAME)-1)_$C($A($E(NAME,$L(NAME)))-1)_"z" F  S NAM=$O(^PSNDF(50.67,"T",NAM)),X=0 Q:NAM'[NAME  F  S X=$O(^PSNDF(50.67,"T",NAM,X)) Q:'X  S Y=$P(^PSNDF(50.67,X,0),"^",6),Y=$P(^PSNDF(50.68,Y,0),"^",2) D
 | 
|---|
| 156 |  .I '$D(LIST(Y)) S LIST(Y)=Y_"^"_$P(^PSNDF(50.6,Y,0),"^"),CT=CT+1
 | 
|---|
| 157 |  Q CT
 | 
|---|
| 158 |  ;
 | 
|---|
| 159 | CIRN2(P1,P3,LIST) ;RETURN LIST OF NDCS FOR A PRODUCT
 | 
|---|
| 160 |  I 'P3 Q 0
 | 
|---|
| 161 |  I '$D(^PSNDF(50.68,+P3)) Q 0
 | 
|---|
| 162 |  N D,N,J
 | 
|---|
| 163 |  S N=0
 | 
|---|
| 164 |  F J=0:1 S N=$O(^PSNDF(50.68,"ANDC",P3,N)) Q:'N  S LIST(J)=$P(^PSNDF(50.67,N,0),"^",2)
 | 
|---|
| 165 |  Q J
 | 
|---|
| 166 |  ;
 | 
|---|
| 167 | CLASS2(IEN) ;RETURNS FIRST 2 PIECES OF ZERO NODE OF 50.605
 | 
|---|
| 168 |  Q $P($G(^PS(50.605,+IEN,0)),"^",1,2)
 | 
|---|
| 169 |  ;
 | 
|---|
| 170 | CMOP(CODE) ;CODE = 5 CHARACTER CMOP CODE RETURNS PRODUCT NAME
 | 
|---|
| 171 |  I CODE="" Q ""
 | 
|---|
| 172 |  I '$O(^PSNDF(50.68,"C",CODE,0)) Q ""
 | 
|---|
| 173 |  Q $P(^PSNDF(50.68,+$O(^PSNDF(50.68,"C",CODE,0)),0),"^")
 | 
|---|
| 174 |  ;
 | 
|---|
| 175 | FORMRX(DA,K,LIST) ;RETURN X=1 FOR RESTRICTIONS, 0 FOR NO
 | 
|---|
| 176 |  ;RETURNS LIST=WORD PROCESSING FIELD FOR RESTRICTIONS
 | 
|---|
| 177 |  ;
 | 
|---|
| 178 |  I '$O(^PSNDF(50.68,+K,6,0)) Q 0
 | 
|---|
| 179 |  M LIST=^PSNDF(50.68,+K,6) Q 1
 | 
|---|
| 180 |  ;
 | 
|---|
| 181 | DDIEX(DA,K) ;RETURN X=1 FOR EXCLUDE DDI CHECK, 0 FOR CONTINUE DDI CHECK
 | 
|---|
| 182 |  ;
 | 
|---|
| 183 |  I '$G(^PSNDF(50.68,+K,8)) Q 0
 | 
|---|
| 184 |  I $G(^PSNDF(50.68,+K,8)) Q 1
 | 
|---|
| 185 |  ;
 | 
|---|