VistA-FOIAVistA/r/QUASAR-ACKQ/ACKQRU.m

136 lines
5.2 KiB
Mathematica

ACKQRU ;AUG/JLTP BIR/PTD HCIOFO/AG-Support Routine for Reports ; [ 11/08/95 9:26 ]
;;3.0;QUASAR;;Feb 11, 2000
;Per VHA Directive 10-93-142, this routine SHOULD NOT be modified.
DTRANGE ;
BEGDT N ACKTMPB
S DIR(0)="D^:"_DT_":AEXP",DIR("A")="Beginning Date"
S DIR("?")="Enter the earliest date for which you want to see data"
S DIR("??")="^S ACKQHLP=1 D ^ACKQHLP"
D ^DIR K DIR
I Y?1"^"1.E W !,"Jumping not allowed.",! G BEGDT
Q:$D(DIRUT) S ACKBD=Y-.1,ACKXBD=$$NUMDT^ACKQUTL(Y),ACKTMPB=Y
;
ENDDT ; S DIR(0)="D^"_(ACKBD+.1)_":"_DT_":AEXP",DIR("A")="Ending Date"
S DIR(0)="D"
S DIR("A")="Ending Date"
S DIR("?")="Enter the latest date for which you want to see data"
S DIR("??")="^S ACKQHLP=1 D ^ACKQHLP"
D ^DIR K DIR
I Y?1"^"1.E W !,"Jumping not allowed.",! G ENDDT
Q:$D(DIRUT) S ACKED=Y+.9,ACKXED=$$NUMDT^ACKQUTL(Y)
I Y<ACKTMPB W !,"End date cannot be before the Begin date.",! G ENDDT
Q
PARAMS ;
; this subroutine contains two standard prompts
; 1. Select a = AUDIOLOGY
; s = SPEECH PATHOLOGY
; b = BOTH
; 2. Choose 1 = ONE CLINICIAN
; 2 = ONE OTHER PROVIDER
; 3 = ONE STUDENT
; 4 = ALL CLINICIANS
; 5 = ALL OTHER PROVIDERS
; 6 = ALL STUDENTS
; it returns
; DIRUT=1 user chose to exit
; ACKASB response to prompt 1
; (A=audio, S=speech, B=Both)
; ACKSS response to prompt 2 (1-6)
; ACKSTF() array containing all selected staff
; where ACKSTF(n)=persons IEN on NEW PERSON FILE
;
N DIR,I,X,Y,DIC,ACKQHLP
;
; prompt 1
S DIR(0)="S^a:AUDIOLOGY;s:SPEECH PATHOLOGY;b:BOTH"
S DIR("A")="Select",DIR("B")="BOTH"
S DIR("??")="^W !!,""You can select Audiology visits, Speech Pathology visits, or Both."",!"
D ^DIR K DIR Q:$D(DIRUT)
S ACKASB=$S(Y="a":"A",Y="s":"S",1:"B")
;
; prompt 2
S DIR(0)="S^1:ONE CLINICIAN;2:ONE OTHER PROVIDER;3:ONE STUDENT;4:ALL CLINICIANS;5:ALL OTHER PROVIDERS;6:ALL STUDENTS"
S DIR("A")="Choose",DIR("??")="^S ACKQHLP=4 D ^ACKQHLP"
D ^DIR K DIR Q:$D(DIRUT)
S ACKSS=Y
K ACKSTF
; if ONE staff member selected then ask for name
I ACKSS<4 D Q:$D(DIRUT)
. S DIC("A")="Select "_$S(ACKSS=1:"CLINICIAN",ACKSS=2:"OTHER PROVIDER",1:"STUDENT")_": "
. S DIC(0)="AEMQZ",DIC=509850.3
. S DIC("S")="I $P(^(0),U,2)]"""",$P(""CF^O^S"",U,ACKSS)[$P(^(0),U,2)"
. D ^DIC K DIC S:Y<0 DIRUT=1 Q:$D(DIRUT)
. S ACKSTF(+Y)=$P(Y,U,2)
; if ALL staff selected then get them from staff file
I ACKSS>3 D
. S I=0 F S I=$O(^ACK(509850.3,I)) Q:'I D
. . S X=$P(^ACK(509850.3,I,0),U,2)
. . I X="" Q
. . I ACKSS=4,"CF"'[X Q
. . I ACKSS=5,X'="O" Q
. . I ACKSS=6,X'="S" Q
. . S ACKSTF(I)=$P(^ACK(509850.3,I,0),U)
;
; end
Q
;
GETDIV(DIVARR,ACKSTA,ACKOPT) ; get all the Divisions and put them in DIVARR
; INPUT: DIVARR must be passed by reference
; ACKSTA division status (optional)
; 'A' will get active divisions only (default)
; 'I' will get inactive divisions only
; 'AI' or 'IA' will get all divisions
; ACKOPT options. so far the only option is 'U' to output the
; names in uppercase.
; RETURNS: DIVARR= number found (n)
; DIVARR(1,n)=x^y^name
; DIVARR(2,name)=n
; and DIVARR(3,x)=n
; where x=IEN of Div from Medical Center Division file
; and y=sequence number from A&SP Site Parameter file
; (in other words ^ACK(509850.8,1,2,y)=x^...)
; and name=the division name
;
N ACKTGT,ACKMSG,ACKSCRN,ACK,SEQ,DIV,DIVNAME
K DIVARR
; build screen based on requested status
I $G(ACKSTA)="" S ACKSTA="A"
S ACKSCRN="I """_ACKSTA_"""[$P(^(0),U,2)"
; go get 'em
D LIST^DIC(509850.83,",1,",".01","I","*","","","",ACKSCRN,"","ACKTGT","ACKMSG")
; now transfer to output array
S DIVARR=$P(ACKTGT("DILIST",0),U,1)
FOR ACK=1:1:DIVARR D
. S SEQ=ACKTGT("DILIST",2,ACK),DIV=ACKTGT("DILIST",1,ACK)
. S DIVNAME=$$GET1^DIQ(40.8,DIV_",",.01)
. S DIVARR(1,ACK)=DIV_U_SEQ_U_DIVNAME
. S DIVARR(2,$$UP($G(ACKOPT),DIVNAME))=ACK
. S DIVARR(3,DIV)=ACK
Q
UP(ACKOPT,X) ; convert X to uppercase (if requested)
I ACKOPT["U" Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
Q X
;
STOPSORT(ACKASB,ACKVSC) ; determine stop code sort value
; this function determines whether the Stop Code for the Visit is
; valid for the type of report selected.
; If it is not valid the function returns 0
; If it is valid the function returns an integer which may be used to
; sequence the visit so that Audio comes first, Audio/Tel next,
; then Speech and Speech/Tel.
; If an unknown Visit Stop Code is encountered, it is given a 9
; which means it will appear at the end of the report as UNKNOWN.
I ACKVSC="A" Q $S(ACKASB="A":1,ACKASB="B":1,1:0) ; audiology #1
I ACKVSC="AT" Q $S(ACKASB="A":2,ACKASB="B":2,1:0) ; telephone audiology #2
I ACKVSC="S" Q $S(ACKASB="S":3,ACKASB="B":3,1:0) ; speech #3
I ACKVSC="ST" Q $S(ACKASB="S":4,ACKASB="B":4,1:0) ; telephone speech #4
Q 9 ; any other value 9
;
STOPNM(ACKSORT) ; convert stop code sort value into a stop code name
I ACKSORT=1 Q "AUDIOLOGY"
I ACKSORT=2 Q "AUDIOLOGY TELEPHONE"
I ACKSORT=3 Q "SPEECH PATHOLOGY"
I ACKSORT=4 Q "SPEECH TELEPHONE"
Q "UNKNOWN"
;