1 | ACKQUTL2 ;AUG/JLTP BIR/PTD HCIOFO/AG -QUASAR Utility Routine ; [ 04/25/96 10:03 ]
|
---|
2 | ;;3.0;QUASAR;**15**;Feb 11, 2000;Build 2
|
---|
3 | ;Per VHA Directive 10-93-142, this routine SHOULD NOT be modified.
|
---|
4 | ;
|
---|
5 | ;
|
---|
6 | DIVLIST(ACKTYP,ACKTXT) ; list on screen all the Divisions on the Site Parameter File
|
---|
7 | ; optional ACKTYP = type of list 1=Active only, 0 (default) = all
|
---|
8 | ; optional ACKTXT = preceding message
|
---|
9 | N ACKFROM,ACKFDA,ACKMSG,ACKSCRN,DIWL,DIWR,DIWF,X,Y,I,DA,ACKCT
|
---|
10 | S ACKFROM="",ACKTYP=$S(+$G(ACKTYP)=1:1,1:0)
|
---|
11 | ; set up the screen if only active divisions are to be listed
|
---|
12 | S ACKSCRN=$S(ACKTYP=1:"I $P(^(0),U,2)=""A""",1:"")
|
---|
13 | ; call fileman to retrieve the Divisions
|
---|
14 | D LIST^DIC(509850.83,",1,",".01;.02","","",.ACKFROM,"","",ACKSCRN,"","ACKFDA","ACKMSG")
|
---|
15 | ; get count of number of Divisions
|
---|
16 | S ACKCT=$P(ACKFDA("DILIST",0),U,1)
|
---|
17 | ; determine the text header
|
---|
18 | I ACKCT=0,ACKTYP=0 S ACKTXT=" No Divisions have been set up."
|
---|
19 | I ACKCT=0,ACKTYP=1 S ACKTXT=" There are no Active Divisions on file."
|
---|
20 | I $G(ACKTXT)="" D
|
---|
21 | . I ACKCT>0 S ACKTXT=" The following Divisions have been set up..."
|
---|
22 | ;
|
---|
23 | ; the following section uses DIWP & DIWW to format and output the text
|
---|
24 | S DIWL=5,DIWR=75,DIWF=""
|
---|
25 | S X="|SETTAB(10,40)| " D ^DIWP
|
---|
26 | S X=" " D ^DIWP ;blank line!
|
---|
27 | S X=ACKTXT D ^DIWP
|
---|
28 | ; now output each Division
|
---|
29 | F ACK=1:1:ACKCT D
|
---|
30 | . ; print division name
|
---|
31 | . S X=" |TAB|"_$E(ACKFDA("DILIST",1,ACK),1,25)
|
---|
32 | . ; if all divisions to be printed then also print the status
|
---|
33 | . I ACKTYP=0 S X=X_"|TAB|"_$$MC(ACKFDA("DILIST","ID",ACK,.02))
|
---|
34 | . D ^DIWP
|
---|
35 | ; now write to the screen
|
---|
36 | D ^DIWW
|
---|
37 | ;
|
---|
38 | ; end
|
---|
39 | Q
|
---|
40 | ;
|
---|
41 | MC(X) ; convert X to mixed case (1st upper, remainder lower)
|
---|
42 | N UP,LW S UP="ABCDEFGHIJKLMNOPQRSTUVWXYZ",LW="abcdefghijklmnopqrstuvwxyz"
|
---|
43 | Q $TR($E(X),LW,UP)_$TR($E(X,2,999),UP,LW)
|
---|
44 | ;
|
---|
45 | ;
|
---|
46 | DIV(ACKTYP,ACKDIV,ACKSTA) ; prompt user for an A&SP Division
|
---|
47 | ; where ACKTYP can be 1=one div, 2=many, 3=many/all
|
---|
48 | ; if ACTYPE>1 then ACKDIV must be passed in by reference
|
---|
49 | ; and ACKSTA contains the required status of the Division
|
---|
50 | ; so if ACKSTA="A" then only active divisions may be chosen
|
---|
51 | ; if ACKSTA="I" then only inactive divisions may be chosen
|
---|
52 | ; if ACKSTA="AI" or "IA" then either active or inactive may be
|
---|
53 | ; chosen. If not passed then "A" is used as the default.
|
---|
54 | ; ------------------------------------------------------------
|
---|
55 | ; function returns:-
|
---|
56 | ; ACKDIV=a^b where a=no. divisions selected, and b=total
|
---|
57 | ; available divisions.
|
---|
58 | ; (if the user quits or times out then a=0)
|
---|
59 | ; ACKDIV(x)=x^y^z where
|
---|
60 | ; x=div ien on Med Cen Div file #40.8,
|
---|
61 | ; y=div ien on Site Parameters #509850.83
|
---|
62 | ; and z=division name
|
---|
63 | ; ------------------------------------------------------------
|
---|
64 | N DIVARR,ACKDIVN,ACKN,ACKDEF,ACKDFLT,ACKIEN,ACKX
|
---|
65 | K ACKDIV
|
---|
66 | ; initialise selected Division
|
---|
67 | S ACKDIV=""
|
---|
68 | ;
|
---|
69 | ; check parameter has been passed in
|
---|
70 | I "1/2/3"'[+$G(ACKTYP) G DIVX
|
---|
71 | ;
|
---|
72 | ; get list of divisions
|
---|
73 | D GETDIV^ACKQRU(.DIVARR,$G(ACKSTA),"U")
|
---|
74 | ;
|
---|
75 | ; no Divisions exist
|
---|
76 | I DIVARR<1 S ACKDIV=0 G DIVX
|
---|
77 | ;
|
---|
78 | ; only one Division exists
|
---|
79 | I DIVARR=1 D G DIVX
|
---|
80 | . S ACKDIV="1^1",ACKDIV($P(DIVARR(1,1),U,1))=$P(DIVARR(1,1),U,1,3)_U
|
---|
81 | ;
|
---|
82 | ; get last Division selected by the user (spacebar recall)
|
---|
83 | S ACKDEF=$$FIND1^DIC(509850.83,",1,",""," ")
|
---|
84 | S ACKDEF=$S(ACKDEF:$$EXTERNAL^DILFD(509850.83,".01","",ACKDEF),1:"")
|
---|
85 | S ACKDEF=$$UC(ACKDEF) ; convert to uppercase
|
---|
86 | I ACKDEF'="",'$D(DIVARR(2,ACKDEF)) S ACKDEF=""
|
---|
87 | S ACKDFLT=$S(ACKDEF="":"",1:"2^"_ACKDEF)
|
---|
88 | ;
|
---|
89 | ; multiple divisions exist, only one required.
|
---|
90 | I ACKTYP=1,DIVARR>1 D G DIVX
|
---|
91 | . D SELECT^ACKQSEL(1,"DIVARR(2)","DIVARR(4)","DIVISION^35","D DIVHLP^ACKQUTL2",ACKDFLT)
|
---|
92 | . ; get Division IEN
|
---|
93 | . I $O(DIVARR(4,""))="" S ACKDIV="0^"_DIVARR Q ; either quit or timed out
|
---|
94 | . S ACKDIVN=$O(DIVARR(4,"")),ACKN=DIVARR(2,ACKDIVN)
|
---|
95 | . S ACKIEN=$P(DIVARR(1,ACKN),U,1)
|
---|
96 | . D RECALL^DILFD(509850.83,ACKIEN_",1,",DUZ) ; save for spacebar recall
|
---|
97 | . S ACKDIV="1^"_DIVARR
|
---|
98 | . S ACKDIV(ACKIEN)=$P(DIVARR(1,ACKN),U,1,3)_U
|
---|
99 | ;
|
---|
100 | ; multiple divisions exist, user may select one/many or ALL.
|
---|
101 | I ACKTYP>1,DIVARR>1 D G DIVX
|
---|
102 | . D SELECT^ACKQSEL(ACKTYP,"DIVARR(2)","DIVARR(4)","DIVISION^35","D DIVHLP^ACKQUTL2",ACKDFLT)
|
---|
103 | . ; get Division IEN
|
---|
104 | . I $G(DIVARR(4))'="" S ACKDIV="0^"_DIVARR Q ;either quit or timed out
|
---|
105 | . S ACKDIV=U_DIVARR
|
---|
106 | . S ACKX="" F S ACKX=$O(DIVARR(4,ACKX)) Q:ACKX="" D
|
---|
107 | . . S $P(ACKDIV,U,1)=$P(ACKDIV,U,1)+1,ACKN=DIVARR(2,ACKX)
|
---|
108 | . . S ACKDIV($P(DIVARR(1,ACKN),U,1))=$P(DIVARR(1,ACKN),U,1,3)_U
|
---|
109 | . ; if only one selected then save for spacebar recall
|
---|
110 | . I +$P(ACKDIV,U,1)=1 D
|
---|
111 | . . S ACKIEN=$O(ACKDIV("")) Q:'ACKIEN
|
---|
112 | . . D RECALL^DILFD(509850.83,ACKIEN_",1,",DUZ) ; save for spacebar recall
|
---|
113 | ;
|
---|
114 | DIVX ; end
|
---|
115 | Q ACKDIV
|
---|
116 | ;
|
---|
117 | ;
|
---|
118 | DIVHLP ; displays help text for the Division prompt
|
---|
119 | N X,DIWL,DIWR,DIWF
|
---|
120 | S DIWL=1,DIWR=80,DIWF=""
|
---|
121 | S X=" " D ^DIWP
|
---|
122 | S X=" Enter the name of a Division from the A&SP Site Parameters File." D ^DIWP
|
---|
123 | S X=" Enter '??' to see a list of the available Divisions, '^' to exit." D ^DIWP
|
---|
124 | D ^DIWW
|
---|
125 | Q
|
---|
126 | LEADROLE(ACKVIEN) ; determine lead role for a visit
|
---|
127 | ; prior to version 3.0 all visits would be filed with a Lead Role
|
---|
128 | ; entered by the user (either the primary clinician, secondary
|
---|
129 | ; clinician or other prov). With ver 3.0 this field is no longer
|
---|
130 | ; populated and the lead role is the primary provider, or if absent
|
---|
131 | ; the secondary provider. In order to be backward compatible this
|
---|
132 | ; function will check the lead role field first. If it contains a
|
---|
133 | ; value then the visit must be pre-ver 3.0 and this code must be
|
---|
134 | ; the lead role selected by the user. If the lead role field is
|
---|
135 | ; empty then the visit must be post-ver 3.0 and so this function
|
---|
136 | ; will return either the primary or secondary provider.
|
---|
137 | N ACKSECV2,ACKTGT,ACKMSG,ACKLEAD,ACKIENS,ACKPRIM,ACKSCND,ACKSTUD,ACKMSG1,ACKTGT1
|
---|
138 | N ACK2
|
---|
139 | S ACKIENS=ACKVIEN_","
|
---|
140 | D GETS^DIQ(509850.6,ACKIENS,".25;.27;6","I","ACKTGT","ACKMSG")
|
---|
141 | S ACKLEAD=ACKTGT(509850.6,ACKIENS,.27,"I") ; Lead role (Pre V.3.)
|
---|
142 | I +ACKLEAD>0 Q +ACKLEAD
|
---|
143 | S ACKPRIM=ACKTGT(509850.6,ACKIENS,6,"I") ; Primary clinician
|
---|
144 | I +ACKPRIM>0 Q +ACKPRIM
|
---|
145 | S ACKSECV2=ACKTGT(509850.6,ACKIENS,.25,"I") ; Pre V.3 Sec'dry clinician
|
---|
146 | I +ACKSECV2>0 Q +ACKSECV2
|
---|
147 | ;
|
---|
148 | D LIST^DIC(509850.66,","_ACKVIEN_",",".01","I","*","","","","","","ACKTGT1","ACKMSG1")
|
---|
149 | S ACKSCND=$O(ACKTGT1("DILIST",1,""))
|
---|
150 | I ACKSCND'="" S ACKSCND=ACKTGT1("DILIST",1,ACKSCND)
|
---|
151 | Q +ACKSCND ; First Secondary Provider V.3.
|
---|
152 | ;
|
---|
153 | ASPDIV(ACKDIV) ; returns true if ACKDIV is a valid ASP division
|
---|
154 | N ACKTGT,ACKMSG,ACKFND
|
---|
155 | ; look for the Division on the Site Parameters file
|
---|
156 | D FIND^DIC(509850.83,",1,","","","`"_ACKDIV,1,"","","","ACKTGT","ACKMSG")
|
---|
157 | ; get number found
|
---|
158 | S ACKFND=$P($G(ACKTGT("DILIST",0)),U,1)
|
---|
159 | Q (ACKFND=1)
|
---|
160 | CLNDIV(ACKCLN) ; returns the ien of the division that the clinic is in.
|
---|
161 | Q $$GET1^DIQ(44,ACKCLN_",",3.5,"I")
|
---|
162 | ASPCLN(ACKCLN) ; returns true if ACKCLN is a valid clinic for ASP
|
---|
163 | ; ACKCLN is the internal entry number from the hospital locations file
|
---|
164 | ; true returned if stop code is 203-Audiology, 204-Speech
|
---|
165 | ; if stop code is invalid then the credit stop code field must be either 203 or 204.
|
---|
166 | N ACKSTOP,ACKCRDT,ACKSC
|
---|
167 | ; get ien of stop code
|
---|
168 | S ACKSTOP=$$GET1^DIQ(44,ACKCLN_",",8,"I")
|
---|
169 | I ACKSTOP="" Q 0 ; bad clinic record
|
---|
170 | ; get actual stop code
|
---|
171 | S ACKSC=$$GET1^DIQ(40.7,ACKSTOP_",",1)
|
---|
172 | ; exit
|
---|
173 | I ACKSC=203 Q 1 ; audiology
|
---|
174 | I ACKSC=204 Q 1 ; speech pathology
|
---|
175 | ; get clinic credit stop code
|
---|
176 | S ACKCRDT=$$GET1^DIQ(44,ACKCLN_",",2503,"I")
|
---|
177 | I ACKCRDT="" Q 0 ; no credit stop code
|
---|
178 | ; get actual stop code
|
---|
179 | S ACKSC=$$GET1^DIQ(40.7,ACKCRDT_",",1)
|
---|
180 | ; exit
|
---|
181 | I ACKSC=203 Q 1 ; audiology
|
---|
182 | I ACKSC=204 Q 1 ; speech pathology
|
---|
183 | Q 0 ; any other value is invalid
|
---|
184 | UC(X) ; convert X to uppercase
|
---|
185 | Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
---|
186 | ;
|
---|