1 | ECXUTL5 ;ALB/JRC - Utilities for DSS Extracts ; 10/17/07 3:49pm
|
---|
2 | ;;3.0;DSS EXTRACTS;**71,84,92,103,105**;Dec 22, 1997;Build 70
|
---|
3 | ;
|
---|
4 | REPEAT(CHAR,TIMES) ;REPEAT A STRING
|
---|
5 | ;INPUT : CHAR - Character to repeat
|
---|
6 | ; TIMES - Number of times to repeat CHAR
|
---|
7 | ;OUTPUT : s - String of CHAR that is TIMES long
|
---|
8 | ; "" - Error (bad input)
|
---|
9 | ;
|
---|
10 | ;CHECK INPUT
|
---|
11 | Q:($G(CHAR)="") ""
|
---|
12 | Q:((+$G(TIMES))=0) ""
|
---|
13 | ;RETURN STRING
|
---|
14 | Q $TR($J("",TIMES)," ",CHAR)
|
---|
15 | INSERT(INSTR,OUTSTR,COLUMN,LENGTH) ;INSERT A STRING INTO ANOTHER
|
---|
16 | ;INPUT : INSTR - String to insert
|
---|
17 | ; OUTSTR - String to insert into
|
---|
18 | ; COLUMN - Where to begin insertion (defaults to end of OUTSTR)
|
---|
19 | ; LENGTH - Number of characters to clear from OUTSTR
|
---|
20 | ; (defaults to length of INSTR)
|
---|
21 | ;OUTPUT : s - INSTR will be placed into OUTSTR starting at COLUMN
|
---|
22 | ; using LENGTH characters
|
---|
23 | ; "" - Error (bad input)
|
---|
24 | ;
|
---|
25 | ;NOTE : This module is based on $$SETSTR^VALM1
|
---|
26 | ;
|
---|
27 | ;CHECK INPUT
|
---|
28 | Q:('$D(INSTR)) ""
|
---|
29 | Q:('$D(OUTSTR)) ""
|
---|
30 | S:('$D(COLUMN)) COLUMN=$L(OUTSTR)+1
|
---|
31 | S:('$D(LENGTH)) LENGTH=$L(INSTR)
|
---|
32 | ;DECLARE VARIABLES
|
---|
33 | N FRONT,END
|
---|
34 | S FRONT=$E((OUTSTR_$J("",COLUMN-1)),1,(COLUMN-1))
|
---|
35 | S END=$E(OUTSTR,(COLUMN+LENGTH),$L(OUTSTR))
|
---|
36 | ;INSERT STRING
|
---|
37 | Q FRONT_$E((INSTR_$J("",LENGTH)),1,LENGTH)_END
|
---|
38 | TYPE(DFN) ;Determine patient type DBIA #2511
|
---|
39 | ; input
|
---|
40 | ; DFN = patient ien
|
---|
41 | ;
|
---|
42 | ; output
|
---|
43 | ; ECXPTYPE = patient type external value from fle 391
|
---|
44 | ;
|
---|
45 | ; AC = ACTIVE DUTY MI = MILITARY RETIREE
|
---|
46 | ; AL = ALLIED VETERAN NO = NON-VETERAN (OTHER)
|
---|
47 | ; CO = COLLATERAL NS = NSC VETERAN
|
---|
48 | ; EM = EMPLOYEE SC = SC VETERAN
|
---|
49 | ; IN = INELIGIBLE TR = TRICARE
|
---|
50 | ; return value 0 if no data found, 1 if data found
|
---|
51 | ;
|
---|
52 | N TYPE,ECXPTYPE
|
---|
53 | ;Check input
|
---|
54 | Q:'$D(DFN) ""
|
---|
55 | S (TYPE,ECXPTYPE)=""
|
---|
56 | S TYPE=$G(^DPT(DFN,"TYPE"))
|
---|
57 | I 'TYPE Q ECXPTYPE
|
---|
58 | S ECXPTYPE=$P($G(^DG(391,TYPE,0)),U,1)
|
---|
59 | S ECXPTYPE=$E(ECXPTYPE,1,2)
|
---|
60 | Q ECXPTYPE
|
---|
61 | CVEDT(DFN,DATE) ;Determine patient CV status DBIA #4156
|
---|
62 | ; input
|
---|
63 | ; DFN = patient ien
|
---|
64 | ;
|
---|
65 | ; output
|
---|
66 | ; ECXCVE = combat veteran status eligibility
|
---|
67 | ; ECXCVEDT = combat veteran eligibility end date
|
---|
68 | ; ECXCVENC = combat veteran encounter
|
---|
69 | ;Initialize variables
|
---|
70 | N CVSTAT
|
---|
71 | S (CVSTAT,ECXCVE,ECXCVEDT,ECXCVENC)=""
|
---|
72 | ;Check input
|
---|
73 | Q:'$D(DFN) 0
|
---|
74 | ;Call CV API
|
---|
75 | S CVSTAT=$$CVEDT^DGCV(DFN,DATE)
|
---|
76 | I CVSTAT<1 Q 0
|
---|
77 | ;Veteran been given CV eligibility
|
---|
78 | S ECXCVE=$S($P(CVSTAT,U,3)=1:"Y",$P(CVSTAT,U,3)=0:"E",1:"")
|
---|
79 | ;Save CV eligibility end date and convert from FM to HL7 format
|
---|
80 | S ECXCVEDT=$P(CVSTAT,U,2)
|
---|
81 | S ECXCVEDT=$$FMTHL7^XLFDT(ECXCVEDT)
|
---|
82 | ;Is the veteran eligible for CV in the date of encounter
|
---|
83 | S ECXCVENC=$S($P(CVSTAT,U,3)=1:"Y",1:"")
|
---|
84 | Q 1
|
---|
85 | NPRF ;National patient record flags DBIA #3860
|
---|
86 | N ECXARR,FLG
|
---|
87 | S ECXNPRFI="",CNT=$$GETACT^DGPFAPI(ECXDFN,"ECXARR"),FLG=""
|
---|
88 | I 'CNT Q
|
---|
89 | F I=1:1:CNT D Q:FLG
|
---|
90 | .I ECXARR(I,"CATEGORY")["NATIONAL" S ECXNPRFI="Y",FLG=1
|
---|
91 | Q
|
---|
92 | RXPTST(K) ;Rx patient status DBIA #2511
|
---|
93 | N ECXDIC,STAT
|
---|
94 | S (ECXDIC,STAT)=""
|
---|
95 | ;Check input
|
---|
96 | Q:'$D(K) STAT
|
---|
97 | S DA=K,DIC="^PS(53,",DIQ(0)="I",DIQ="ECXDIC",DR="6"
|
---|
98 | D EN^DIQ1
|
---|
99 | S STAT=$G(ECXDIC(53,K,6,"I"))
|
---|
100 | S STAT=$S(STAT=1:"SC",STAT=2:"AA",STAT=3:"OTH",STAT=4:"INP",STAT=5:"NON",1:"")
|
---|
101 | Q STAT
|
---|
102 | NONVAP(K) ;Non-va prescriber DBIA #10060
|
---|
103 | N ECXDIC,NONVAP
|
---|
104 | S (ECXDIC,NONVAP)=""
|
---|
105 | Q:'$D(K) NONVAP
|
---|
106 | S DA=K,DIC="^VA(200,",DIQ(0)="I",DIQ="ECXDIC",DR="53.91"
|
---|
107 | D EN^DIQ1
|
---|
108 | S NONVAP=$G(ECXDIC(200,K,53.91,"I"))
|
---|
109 | I NONVAP S NONVAP="Y"
|
---|
110 | Q NONVAP
|
---|
111 | DOIVPO(K,L) ;Add destination for outpatient ivp orders
|
---|
112 | ; Input K - DFN
|
---|
113 | ; L - Order # from Pharmacy Patient File (#55)
|
---|
114 | ;
|
---|
115 | ; Output ordering stop code
|
---|
116 | ;
|
---|
117 | N ECXDIC,ECXDICA,ECXDICB,DOIVPO,CLINIC,SCODE,DIC,DIQ,DR,DA
|
---|
118 | S (ECXDIC,ECXDICA,ECXDICB,DOIVPO,CLINIC,SCODE)=""
|
---|
119 | ;Check input
|
---|
120 | Q:'K!'(L) SCODE
|
---|
121 | ;Check treating specialty
|
---|
122 | S SCODE=$$TSSC($G(ECXTS)) I SCODE>0 Q SCODE
|
---|
123 | ;Go to pharmacy patient file (#55) and return value of field (#136)
|
---|
124 | S DIC=55,DIQ(0)="I",DIQ="ECXDIC",DR="100",DR(55.01)="136",DA=K,DA(55.01)=L
|
---|
125 | D EN^DIQ1
|
---|
126 | S CLINIC=$G(ECXDIC(55.01,L,136,"I"))
|
---|
127 | I 'CLINIC Q SCODE
|
---|
128 | ;Get stop code pointer to file 40.7 from file 44
|
---|
129 | S DIC="^SC(",DIQ(0)="I",DIQ="ECXDICA",DR="8",DA=CLINIC D EN^DIQ1
|
---|
130 | S SCODE=ECXDICA(44,CLINIC,8,"I")
|
---|
131 | ;Get stop code external value
|
---|
132 | S DIC="^DIC(40.7,",DIQ(0)="E",DIQ="ECXDICB",DR="1",DA=SCODE D EN^DIQ1
|
---|
133 | S SCODE=$G(ECXDICB(40.7,SCODE,1,"E"))
|
---|
134 | Q SCODE
|
---|
135 | ;
|
---|
136 | DOUDO(K,L) ;Add destination for outpatient udp orders
|
---|
137 | ; Input K - DFN
|
---|
138 | ; L - Order # from Pharmacy Patient File (#55)
|
---|
139 | ;
|
---|
140 | ; Output ordering stop code
|
---|
141 | ;
|
---|
142 | N ECXDIC,ECXDICA,ECXDICB,DOIVPO,CLINIC,SCODE,DIC,DIQ,DR,DA
|
---|
143 | S (ECXDIC,ECXDICA,ECXDICB,DOIVPO,CLINIC,SCODE)=""
|
---|
144 | ;Check treating specialty
|
---|
145 | S SCODE=$$TSSC($G(ECXTS)) I SCODE>0 Q SCODE
|
---|
146 | ;Check input
|
---|
147 | Q:'K!'(L) SCODE
|
---|
148 | S DIC=55,DIQ(0)="I",DIQ="ECXDIC",DR="62",DR(55.06)="130",DA=K,DA(55.06)=L
|
---|
149 | D EN^DIQ1
|
---|
150 | S CLINIC=$G(ECXDIC(55.06,L,130,"I"))
|
---|
151 | I 'CLINIC Q SCODE
|
---|
152 | ;Get stop code pointer to file 40.7 from file 44
|
---|
153 | S DIC="^SC(",DIQ(0)="I",DIQ="ECXDICA",DR="8",DA=CLINIC D EN^DIQ1
|
---|
154 | S SCODE=ECXDICA(44,CLINIC,8,"I")
|
---|
155 | ;Get stop code external value
|
---|
156 | S DIC="^DIC(40.7,",DIQ(0)="E",DIQ="ECXDICB",DR="1",DA=SCODE D EN^DIQ1
|
---|
157 | S SCODE=$G(ECXDICB(40.7,SCODE,1,"E"))
|
---|
158 | Q SCODE
|
---|
159 | ;
|
---|
160 | PHAAPI(DRUG) ;Call Pharmacy drug file API dbia 4483
|
---|
161 | ; Input: drug file (#50) ien
|
---|
162 | ;
|
---|
163 | ; Output: generic name ^ classification ^ ndc ^ dea hand
|
---|
164 | ; ^ ndf file entry # ^ psndf va product entry ^
|
---|
165 | ; price per disp unit ^ dispense unit
|
---|
166 | ;
|
---|
167 | ;Initialize variables and scratch global
|
---|
168 | N NAME,CLASS,NDC,INV,NDF,P1,P3,PPDU,UNIT,ARRAY,DATA
|
---|
169 | S (NAME,CLASS,NDC,INV,NDF,P1,P3,PPDU,ARRAY,DATA)=""
|
---|
170 | S ARRAY="^TMP($J,""ECXLIST"")"
|
---|
171 | K @ARRAY
|
---|
172 | D DATA^PSS50(DRUG,,,,,"ECXLIST")
|
---|
173 | I @ARRAY@(0)'>0 Q "^^^^^^"
|
---|
174 | S NAME=@ARRAY@(DRUG,.01),CLASS=@ARRAY@(DRUG,2),NDC=@ARRAY@(DRUG,31)
|
---|
175 | S INV=@ARRAY@(DRUG,3),P1=$P(@ARRAY@(DRUG,20),U),P3=$P(@ARRAY@(DRUG,22),U),PPDU=@ARRAY@(DRUG,16),UNIT=@ARRAY@(DRUG,14.5)
|
---|
176 | K @ARRAY
|
---|
177 | Q NAME_U_CLASS_U_NDC_U_INV_U_P1_U_P3_U_PPDU_U_UNIT
|
---|
178 | ;
|
---|
179 | TSSC(X) ;Check treating specialty (ts) and if ts equals any of the following
|
---|
180 | ;18,23,24,36,41,65,94 then assign predefined code and return value
|
---|
181 | ;
|
---|
182 | ; Input: treating specialty
|
---|
183 | ; Output: Ordering stop code
|
---|
184 | ;
|
---|
185 | S CODE=$S(X=18:293,X=23:295,X=24:290,X=36:294,X=41:296,X=65:291,X=94:292,1:"")
|
---|
186 | Q CODE
|
---|
187 | ;
|
---|
188 | PSJ59P5(X) ;Get iv room division
|
---|
189 | ; Input X - iv room ien
|
---|
190 | ;
|
---|
191 | ; Output - field .02 division
|
---|
192 | ;Init variables
|
---|
193 | N DIV S DIV=""
|
---|
194 | ;Check input
|
---|
195 | I 'X Q DIV
|
---|
196 | D ALL^PSJ59P5(X,,"ECXDIV")
|
---|
197 | S DIV=$P($G(^TMP($J,"ECXDIV",X,.02)),U)
|
---|
198 | K ^TMP($J,"ECXDIV")
|
---|
199 | Q DIV
|
---|
200 | ;
|
---|
201 | SCRX(IEN) ;Service connected prescription
|
---|
202 | ;Init variables
|
---|
203 | N DIC,DR,DA,ECXDIQ
|
---|
204 | ;Check input
|
---|
205 | I '$G(IEN) Q ""
|
---|
206 | S DIC=52,DR="116",DA=IEN,DIQ="ECXDIQ"
|
---|
207 | D DIQ^PSODI(DIC,DIC,DR,DA,DIQ)
|
---|
208 | Q $S($G(ECXDIQ(52,DA,116))="YES":"Y",$G(ECXDIQ(52,DA,116))="NO":"N",1:"")
|
---|
209 | ;
|
---|
210 | SSN(SSN,FILE) ; extended validation of ssn
|
---|
211 | ; input: ssn - social security number to validate
|
---|
212 | ; file - optional "", 2 or 67, the only check is for
|
---|
213 | ; reference lab file (#67) in which case ssn
|
---|
214 | ; "000123456" is considered a valid ssn.
|
---|
215 | ; output: 0 - test patient or invalid ssn
|
---|
216 | ; 1 - valid ssn
|
---|
217 | ;
|
---|
218 | ;check input
|
---|
219 | I $G(SSN)']"" Q 0
|
---|
220 | S FILE=$G(FILE)
|
---|
221 | I (FILE=67)&(SSN="000123456") Q 1
|
---|
222 | I "89"[$E(SSN) Q 0
|
---|
223 | I (SSN="123456789")!(SSN="111111111")!(SSN="222222222")!(SSN="333333333")!(SSN="444444444")!(SSN="555555555")!($E(SSN,1,3)="666")!($E(SSN,4,5)="00")!($E(SSN,1,3)="000") Q 0
|
---|
224 | Q 1
|
---|