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

ABSPOS9.m

Go to the documentation of this file.
  1. ABSPOS9 ; IHS/FCS/DRS - NDC # lookup, formatting ;
  1. ;;1.0;PHARMACY POINT OF SALE;;JUN 21, 2001
  1. ; Relies on the ^APSAMDF AWP-MED TRANSACTION file
  1. ; Several $$ routines called from lots of places.
  1. ;
  1. Q
  1. NDC11(N) ;EP - given N?11N
  1. I '$$FINDNDC(N) Q ""
  1. Q $$FMTNDC(N,5,4,2) ; must be 5-4-2?
  1. NDC10(N) ;EP - given N?10N, find format and format it
  1. N M,X,Y,Z
  1. S M=0_N,X=$$FINDNDC(M,1) ; is it valid in 4-4-2 format?
  1. I X Q $$FMTNDC(N,4,4,2)
  1. S M=$E(N,1,5)_0_$E(N,6,10) ; is it valid in 5-3-2 format?
  1. S X=$$FINDNDC(M,2)
  1. I X Q $$FMTNDC(N,5,3,2)
  1. S M=$E(N,1,9)_0_$E(N,10) ; is it valid in 5-4-1 format?
  1. S X=$$FINDNDC(M,3)
  1. I X Q $$FMTNDC(N,5,4,1)
  1. ; No, didn't find it anywhere
  1. Q ""
  1. FMTNDC(N,A,B,C) ; given N?1n.n and A-B-C format
  1. I $D(A) Q $E(N,1,A)_"-"_$E(N,A+1,A+B)_"-"_$E(N,A+B+1,A+B+C)
  1. MAKE11N(X) ;EP - given NDC code with "-", convert to ?11N
  1. ; it may involve putting an extra 0 in the right place
  1. I X?5N1"-"4N1"-"2N ; it's okay as-is
  1. E I X?4N1"-"4N1"-"2N S $P(X,"-",1)="0"_$P(X,"-",1)
  1. E I X?5N1"-"3N1"-"2N S $P(X,"-",2)="0"_$P(X,"-",2)
  1. E I X?5N1"-"4N1"-"1N S $P(X,"-",3)="0"_$P(X,"-",3)
  1. Q $TR(X,"-")
  1. NAME(X) ;EP - return drug name as stored in ^APSAMDF
  1. N Y I X["-" S Y=$$MAKE11N(X)
  1. E S Y=X
  1. I Y'?11N Q "(can't figure out 11N format?)"
  1. N Z S Z=$O(^APSAMDF("B",Y,0))
  1. I Z Q $P($G(^APSAMDF(Z,2)),U)
  1. ; not in AWP-MED TRANSACTION; try the DRUG file
  1. S Z=$O(^PSDRUG("ZNDC",$TR(X,"-",""),0))
  1. I Z Q $P(^PSDRUG(Z,0),U)_" (from DRUG file)"
  1. Q "("_X_" in neither AWP-MED TRANSACTION nor DRUG file)"
  1. FINDNDC(N,F) ; return pointer into AWP MED-TRANSACTION
  1. ; F is optional - if F present, then it must match for this format
  1. ; returns null if not found
  1. N X S X=$O(^APSAMDF("B",N,0)) I X="" Q ""
  1. I '$D(F) Q X
  1. I $P(^APSAMDF(X,2),U,3)'=F Q "" ; yes, but not in this format
  1. Q X ; matches number and format, both
  1. FORMTNDC(N) ;EP - given N?11N, lookup format and put "-" in right places
  1. I N'?11N S N=$TR($J(N,11)," ","0") I N'?11N Q N
  1. N X,F S X=$$FINDNDC(N) I 'X Q N
  1. I X S F=$P($G(^APSAMDF(X,2)),U,3) I 'F Q N
  1. ; 4-4-2 format
  1. I F=1,X?1"0"4N4N2N Q $$FMTNDC(N,4,4,2)
  1. ; 5-3-2 format
  1. I F=2,X?5N1"0"3N2N Q:$$FMTNDC(N,5,3,2)
  1. ; 5-4-1 format
  1. I F=3,X?5N4N1"0"1N Q $$FMTNDC(N,5,4,1)
  1. ; else 5-4-2 format?
  1. Q $$FMTNDC(N,5,4,2)
  1. Q
  1. NDCTEST ;
  1. W "Comprehensive test of valid NDC #s",!
  1. S OUTPUT=0
  1. S NDC=0 F I=1:1 S NDC=$O(^APSAMDF("B",NDC)) Q:'NDC D NDCTEST0
  1. Q
  1. NDCTEST0 ;
  1. N X S X=$$FINDNDC(NDC) I 'X D Q
  1. . D IMPOSS^ABSPOSUE("P","T",,,"NDCTEST0",$T(+0))
  1. N F S F=$P(^APSAMDF(X,2),"^",3)
  1. Q:F=4 Q:F=5
  1. D NDCTEST1(NDC)
  1. I $E(NDC,1)=0 W:OUTPUT "4-4-2 test..." D NDCTEST1($E(NDC,2,11))
  1. I $E(NDC,6)=0 W:OUTPUT "5-3-2 test..." D NDCTEST1($E(NDC,1,5)_$E(NDC,7,11))
  1. I $E(NDC,10)=0 W:OUTPUT "5-4-1 test..." D NDCTEST1($E(NDC,1,9)_$E(NDC,11))
  1. Q
  1. NDCTEST1(NDC) ; given NDC
  1. N X,F
  1. I $L(NDC)=11 D Q
  1. .S X=$$FINDNDC(NDC)
  1. .I X D
  1. ..N F S F=$P(^APSAMDF(X,2),"^",3)
  1. ..W:OUTPUT $$FMTNDC(NDC,5,4,2)," Format=",F,!
  1. .E W NDC," Not found",!
  1. W:OUTPUT "Test ",NDC,"..."
  1. I $L(NDC)'=10 D Q
  1. . D IMPOSS^ABSPOSUE("P","T","$L(NDC)'=10",NDC,"NDCTEST1",$T(+0))
  1. N Y,Z
  1. S X=$$FINDNDC(0_NDC,1) ; is it 4-4-2
  1. S Y=$$FINDNDC($E(NDC,1,5)_0_$E(NDC,6,10),2) ; is it 5-3-2?
  1. S Z=$$FINDNDC($E(NDC,1,9)_0_$E(NDC,10),3) ; is it 5-4-1?
  1. I X&Y!(X&Z)!(Y&Z) W NDC," Ambiguity!",!
  1. I 'X,'Y,'Z W NDC," Not found!",!
  1. I X W:OUTPUT $$FMTNDC(NDC,4,4,2),!
  1. I Y W:OUTPUT $$FMTNDC(NDC,5,3,2),!
  1. I Z W:OUTPUT $$FMTNDC(NDC,5,4,1),!
  1. Q