1 | ACKQAG02 ;DDC/PJU - Module to get data for Audiogram E/E and Transmit to DDC ;07/21/05
|
---|
2 | ;;3.0;QUASAR AUDIOMETRIC MODULE;**3,12**;11/01/02
|
---|
3 | ;input: ref to array and DFN
|
---|
4 | ;return: array of VALUES in ACKQARR, ACKQERR if an error was found
|
---|
5 | ;Called by RPC ACKQAUD2
|
---|
6 | ;Used by the the E/E - One Audiogram at a time
|
---|
7 | ;IEN needed in 1st pc for the Enter/edit program
|
---|
8 | ;ACKQARR(1)=audiogram local ien^name of patient^last date seen^tester1^error msg
|
---|
9 | ;ACKQARR(ctr)=pcs in rest of counter nodes
|
---|
10 | ; 1=Xvalue
|
---|
11 | ; 2=ear[L,R]
|
---|
12 | ; 3=
|
---|
13 | ; 4=iAirY
|
---|
14 | ; 5=iAirMask[0-6]-not used in 3*12
|
---|
15 | ; 6=iAirMaskL
|
---|
16 | ; 7=iBoneY
|
---|
17 | ; 8=iBoneMask[0-1]-not used in 3*12
|
---|
18 | ; 9=iBoneMaskL
|
---|
19 | ; 10=IAR
|
---|
20 | ; 11=CAR
|
---|
21 | ; 12=fAirY
|
---|
22 | ; 13=fAirMask[0-6]-not used in 3*12
|
---|
23 | ; 14=fAirMaskL
|
---|
24 | ; 15=fBoneY
|
---|
25 | ; 16=fBoneMask[0-1]-not used in 3*12
|
---|
26 | ; 17=fBoneMaskL
|
---|
27 | ; 18=AR DECAY
|
---|
28 | ; 19=HALF LF
|
---|
29 | ;will return to the Delphi app as subscripted array
|
---|
30 | ;subscripts: 1(gen), 2-13(R), 14-25(L), 26(gen)
|
---|
31 | START(ACKQARR,DFN) ;
|
---|
32 | K ACKQERR
|
---|
33 | ;ACKQN is a number counter, S0 is a node holder
|
---|
34 | ;ACKQERR is an error holder
|
---|
35 | ;ACKQFMD hold dates, ACKQ1IEN holds the entry number
|
---|
36 | I '$G(DFN) D G END
|
---|
37 | .S ACKQERR="**ERROR** Must have a DFN to run routine RMPFRPC2 "
|
---|
38 | I '$D(^ACK(509850.9,0)) D G END
|
---|
39 | .S ACKQERR="**ERROR** QUASAR file 509850.9 (Audiometric Exam Data file) is not available"
|
---|
40 | ;look up DFN in file
|
---|
41 | I '$D(^ACK(509850.9,"DFN",DFN)) D G END
|
---|
42 | .S ACKQERR="**ERROR** patient not in audiogram file"
|
---|
43 | ;determine if 1 or 2 audiograms - set flag
|
---|
44 | S ACKQFMD="A",ACKQ1IEN=""
|
---|
45 | S1 S ACKQFMD=$O(^ACK(509850.9,"DFN",DFN,ACKQFMD),-1)
|
---|
46 | ;set up array for latest one in file
|
---|
47 | I 'ACKQFMD D G END
|
---|
48 | .S ACKQERR="**ERROR** No current audiograms for patient in file"
|
---|
49 | S ACKQIEN=0
|
---|
50 | S2 S ACKQIEN=$O(^ACK(509850.9,"DFN",DFN,ACKQFMD,ACKQIEN))
|
---|
51 | I 'ACKQIEN D G S1
|
---|
52 | .S ACKQERR="**ERROR** No data exists for visit on "_$$FMTE^XLFDT(ACKQFMD)
|
---|
53 | I '$D(^ACK(509850.9,ACKQIEN,0)) D G S1
|
---|
54 | .S ACKQERR="**ERROR** Node missing in file for this visit"
|
---|
55 | G EN2 ;to skip following line
|
---|
56 | EN(ACKQARR,ACKQIEN,DFN) ;
|
---|
57 | EN2 ;from S2
|
---|
58 | N ACK,ACKD,ACKDF,ACKT
|
---|
59 | S ACKQARR(1)=0 ;default
|
---|
60 | K ACKQERR F I=2:1:25 S ACKQARR(I)=""
|
---|
61 | S S0=$S(ACKQIEN="":"",1:$G(^ACK(509850.9,ACKQIEN,0))) ;HD63875
|
---|
62 | I S0="" S ACKQFMD="A" G S1 ;HD63875
|
---|
63 | I $P(S0,U,2)'=DFN D G S2 ;should be already checked in calling routine
|
---|
64 | .S ACKQERR="***URGENT ERROR*** File error - wrong DFN in xref DFN or record: "_DFN
|
---|
65 | S DIC=2,DA=DFN,DIQ="AK",DR=".01" D EN^DIQ1 S ACKD=AK(2,DFN,.01) ;DFN name
|
---|
66 | K DIC,DA,DIQ,DR,AK
|
---|
67 | ;(1)=ien^patient^FM date seen^tester
|
---|
68 | S ACKDF=$P(^ACK(509850.9,ACKQIEN,0),U,1)
|
---|
69 | S ACKQARR(1)=ACKQIEN_U_ACKD_U_ACKDF
|
---|
70 | I '$P(S0,U,3) S $P(ACKQARR(1),U,4)="Unknown"
|
---|
71 | E D
|
---|
72 | .S Y=$P(S0,U,3),X=$$TITLE^ACKQAG01(Y) K Y
|
---|
73 | .S $P(ACKQARR(1),U,4)=$P(X,U,1) ;tester name
|
---|
74 | D GETDATA(ACKQIEN)
|
---|
75 | END ;if errors, then handle errors and stop
|
---|
76 | S:'$D(ACKQARR(1)) ACKQARR(1)=0
|
---|
77 | I $G(ACKQERR)'="" D D WRTERR ;5th pc of 0 node is err msg
|
---|
78 | .F I=2:1:25 S ACKQARR(I)=""
|
---|
79 | K ACKQERR,ACKQFMD,I,S0
|
---|
80 | Q
|
---|
81 | ;
|
---|
82 | GETDATA(ACKQIEN) ;
|
---|
83 | ;input the entry number in the Audiometic Exam Data file (ACKQIEN)
|
---|
84 | ;and current return array subscript value(ACKQN)
|
---|
85 | N ACKQA1,ACKQA2,ACKQA1T,ACKQA2T,ACKQA1L,ACKQA2L ;air initial & repeat values, air tags initial & repeat, air Mask Levels
|
---|
86 | N ACKQB1,ACKQB2,ACKQB1T,ACKQB2T,ACKQB1L,ACKQB2L ;bone initial & repeat values, bone masking init & repeat
|
---|
87 | N P,P1 ;P is the piece of the air nodes, P1 is the piece of the bone nodes
|
---|
88 | N X ;X is the Hz
|
---|
89 | S ACKQN=1 ;counter subscript for array - subsc 1 filled in above
|
---|
90 | ;START R ear
|
---|
91 | ; Air
|
---|
92 | F P=1:1:12 D ;set pcs in ACKQARR node
|
---|
93 | .S ACKQN=ACKQN+1
|
---|
94 | .S X=$S(P=1:125,P=2:250,P=3:500,P=4:750,P=5:1000,P=6:1500,P=7:2000,1:"")
|
---|
95 | .S:X="" X=$S(P=8:3000,P=9:4000,P=10:6000,P=11:8000,P=12:12000,1:"")
|
---|
96 | .S ACKQARR(ACKQN)=X_U_"R"_U_"" ;X^ear^ien^Y
|
---|
97 | .S ACKQA1=$P($G(^ACK(509850.9,ACKQIEN,10)),U,P) ;init Y val
|
---|
98 | .S ACKQA1T=$P($G(^ACK(509850.9,ACKQIEN,11)),U,P) ;init tag
|
---|
99 | .S ACKQA1L=$P($G(^ACK(509850.9,ACKQIEN,50)),U,P) ;init tag level
|
---|
100 | .S ACKQA2=$P($G(^ACK(509850.9,ACKQIEN,20)),U,P) ;repeat val
|
---|
101 | .S ACKQA2T=$P($G(^ACK(509850.9,ACKQIEN,21)),U,P) ;repeat tag
|
---|
102 | .S ACKQA2L=$P($G(^ACK(509850.9,ACKQIEN,51)),U,P) ;repeat tag level
|
---|
103 | .S $P(ACKQARR(ACKQN),U,4)=ACKQA1,$P(ACKQARR(ACKQN),U,5)=ACKQA1T ;default
|
---|
104 | .S $P(ACKQARR(ACKQN),U,6)=ACKQA1L,$P(ACKQARR(ACKQN),U,12)=ACKQA2
|
---|
105 | .S $P(ACKQARR(ACKQN),U,13)=ACKQA2T,$P(ACKQARR(ACKQN),U,14)=ACKQA2L
|
---|
106 | .; bone conduction
|
---|
107 | .I X>125,X<7000 D
|
---|
108 | ..S P1=P-1 ;125 not a bone reading so pc's 1 less
|
---|
109 | ..S ACKQB1=$P($G(^ACK(509850.9,ACKQIEN,70)),U,P1) ;init bone
|
---|
110 | ..S ACKQB1T=$P($G(^ACK(509850.9,ACKQIEN,71)),U,P1) ;init bone TAG
|
---|
111 | ..S ACKQB1L=$P($G(^ACK(509850.9,ACKQIEN,90)),U,P1) ;init bone level
|
---|
112 | ..S ACKQB2=$P($G(^ACK(509850.9,ACKQIEN,75)),U,P1) ;repeat bone
|
---|
113 | ..S ACKQB2T=$P($G(^ACK(509850.9,ACKQIEN,76)),U,P1) ;repeat bone TAG
|
---|
114 | ..S ACKQB2L=$P($G(^ACK(509850.9,ACKQIEN,91)),U,P1) ;repeat bone mask
|
---|
115 | ..S $P(ACKQARR(ACKQN),U,7)=ACKQB1,$P(ACKQARR(ACKQN),U,8)=ACKQB1T
|
---|
116 | ..S $P(ACKQARR(ACKQN),U,9)=ACKQB1L,$P(ACKQARR(ACKQN),U,15)=ACKQB2
|
---|
117 | ..S $P(ACKQARR(ACKQN),U,16)=ACKQB2T,$P(ACKQARR(ACKQN),U,17)=ACKQB2L
|
---|
118 | .;IAR/CAR AR-DECAY AR-HALFLIFE
|
---|
119 | .I (X=500) D
|
---|
120 | ..S $P(ACKQARR(ACKQN),U,10)=$P($G(^ACK(509850.9,ACKQIEN,120)),U,4)
|
---|
121 | ..S $P(ACKQARR(ACKQN),U,11)=$P($G(^ACK(509850.9,ACKQIEN,120)),U,8)
|
---|
122 | ..S $P(ACKQARR(ACKQN),U,18)=$P($G(^ACK(509850.9,ACKQIEN,120)),U,12)
|
---|
123 | ..S $P(ACKQARR(ACKQN),U,19)=$P($G(^ACK(509850.9,ACKQIEN,120)),U,14)
|
---|
124 | .I (X=1000) D
|
---|
125 | ..S $P(ACKQARR(ACKQN),U,10)=$P($G(^ACK(509850.9,ACKQIEN,120)),U,5)
|
---|
126 | ..S $P(ACKQARR(ACKQN),U,11)=$P($G(^ACK(509850.9,ACKQIEN,120)),U,9)
|
---|
127 | ..S $P(ACKQARR(ACKQN),U,18)=$P($G(^ACK(509850.9,ACKQIEN,120)),U,13)
|
---|
128 | ..S $P(ACKQARR(ACKQN),U,19)=$P($G(^ACK(509850.9,ACKQIEN,120)),U,15)
|
---|
129 | .I (X=2000) D
|
---|
130 | ..S $P(ACKQARR(ACKQN),U,10)=$P($G(^ACK(509850.9,ACKQIEN,120)),U,6)
|
---|
131 | ..S $P(ACKQARR(ACKQN),U,11)=$P($G(^ACK(509850.9,ACKQIEN,120)),U,10)
|
---|
132 | .I (X=4000) D
|
---|
133 | ..S $P(ACKQARR(ACKQN),U,10)=$P($G(^ACK(509850.9,ACKQIEN,120)),U,7)
|
---|
134 | ..S $P(ACKQARR(ACKQN),U,11)=$P($G(^ACK(509850.9,ACKQIEN,120)),U,11)
|
---|
135 | ;start L ear
|
---|
136 | ; air
|
---|
137 | F P=1:1:12 D
|
---|
138 | .S ACKQN=ACKQN+1 ;counter subscript for array
|
---|
139 | .S X=$S(P=1:125,P=2:250,P=3:500,P=4:750,P=5:1000,P=6:1500,1:"")
|
---|
140 | .S:X="" X=$S(P=7:2000,P=8:3000,P=9:4000,P=10:6000,P=11:8000,1:12000)
|
---|
141 | .S ACKQARR(ACKQN)=X_U_"L"_U_"" ; X^ear^IEN^Y
|
---|
142 | .S ACKQA1=$P($G(^ACK(509850.9,ACKQIEN,30)),U,P) ;initial read null
|
---|
143 | .S ACKQA1T=$P($G(^ACK(509850.9,ACKQIEN,31)),U,P) ;init tag
|
---|
144 | .S ACKQA1L=$P($G(^ACK(509850.9,ACKQIEN,60)),U,P) ;init level
|
---|
145 | .S ACKQA2=$P($G(^ACK(509850.9,ACKQIEN,40)),U,P) ;repeat val
|
---|
146 | .S ACKQA2T=$P($G(^ACK(509850.9,ACKQIEN,41)),U,P) ;repeat tag
|
---|
147 | .S ACKQA2L=$P($G(^ACK(509850.9,ACKQIEN,61)),U,P) ;repeat level
|
---|
148 | .S $P(ACKQARR(ACKQN),U,4)=ACKQA1,$P(ACKQARR(ACKQN),U,5)=ACKQA1T
|
---|
149 | .; bone conduction
|
---|
150 | .I X>125,X<7000 D
|
---|
151 | ..S P1=P-1 ;125 not a bone reading so pc's 1 less
|
---|
152 | ..S ACKQB1=$P($G(^ACK(509850.9,ACKQIEN,80)),U,P1) ;init val
|
---|
153 | ..S ACKQB1T=$P($G(^ACK(509850.9,ACKQIEN,81)),U,P1) ;init tag
|
---|
154 | ..S ACKQB1L=$P($G(^ACK(509850.9,ACKQIEN,100)),U,P1) ;init mask level
|
---|
155 | ..S ACKQB2=$P($G(^ACK(509850.9,ACKQIEN,85)),U,P1) ;repeat val
|
---|
156 | ..S ACKQB2T=$P($G(^ACK(509850.9,ACKQIEN,86)),U,P1) ;repeat tag
|
---|
157 | ..S ACKQB2L=$P($G(^ACK(509850.9,ACKQIEN,101)),U,P1) ;repeat mask level
|
---|
158 | ..S $P(ACKQARR(ACKQN),U,7)=ACKQB1,$P(ACKQARR(ACKQN),U,8)=ACKQB1T ;default
|
---|
159 | ..S $P(ACKQARR(ACKQN),U,9)=ACKQB1L,$P(ACKQARR(ACKQN),U,15)=ACKQB2
|
---|
160 | ..S $P(ACKQARR(ACKQN),U,16)=ACKQB2T,$P(ACKQARR(ACKQN),U,17)=ACKQB2L
|
---|
161 | .; IAR/CAR AR-DECAY AR-HALFLIFE
|
---|
162 | .I (X=500) D
|
---|
163 | ..S $P(ACKQARR(ACKQN),U,10)=$P($G(^ACK(509850.9,ACKQIEN,121)),U,4)
|
---|
164 | ..S $P(ACKQARR(ACKQN),U,11)=$P($G(^ACK(509850.9,ACKQIEN,121)),U,8)
|
---|
165 | ..S $P(ACKQARR(ACKQN),U,18)=$P($G(^ACK(509850.9,ACKQIEN,121)),U,12)
|
---|
166 | ..S $P(ACKQARR(ACKQN),U,19)=$P($G(^ACK(509850.9,ACKQIEN,121)),U,14)
|
---|
167 | .I (X=1000) D
|
---|
168 | ..S $P(ACKQARR(ACKQN),U,10)=$P($G(^ACK(509850.9,ACKQIEN,121)),U,5)
|
---|
169 | ..S $P(ACKQARR(ACKQN),U,11)=$P($G(^ACK(509850.9,ACKQIEN,121)),U,9)
|
---|
170 | ..S $P(ACKQARR(ACKQN),U,18)=$P($G(^ACK(509850.9,ACKQIEN,121)),U,12)
|
---|
171 | ..S $P(ACKQARR(ACKQN),U,19)=$P($G(^ACK(509850.9,ACKQIEN,121)),U,14)
|
---|
172 | .I (X=2000) D
|
---|
173 | ..S $P(ACKQARR(ACKQN),U,10)=$P($G(^ACK(509850.9,ACKQIEN,121)),U,6)
|
---|
174 | ..S $P(ACKQARR(ACKQN),U,11)=$P($G(^ACK(509850.9,ACKQIEN,121)),U,10)
|
---|
175 | .I (X=4000) D
|
---|
176 | ..S $P(ACKQARR(ACKQN),U,10)=$P($G(^ACK(509850.9,ACKQIEN,121)),U,7)
|
---|
177 | ..S $P(ACKQARR(ACKQN),U,11)=$P($G(^ACK(509850.9,ACKQIEN,121)),U,11)
|
---|
178 | Q
|
---|
179 | ;
|
---|
180 | WRTERR ;
|
---|
181 | I $L($G(ACKQERR)) D
|
---|
182 | .S $P(ACKQARR(1),U,5)=ACKQERR ;
|
---|
183 | ;W !!,?10,ACKQERR ;used for direct call testing
|
---|
184 | Q
|
---|