1 | ACKQUTL ;AUG/JLTP BIR/PTD HCIOFO/BH-QUASAR Utility Routine ; [ 06/06/99 10:03 ]
|
---|
2 | V ;;3.0;QUASAR;;Feb 11, 2000
|
---|
3 | ;Per VHA Directive 10-93-142, this routine SHOULD NOT be modified.
|
---|
4 | ;
|
---|
5 | ;
|
---|
6 | CNTR(X) ; "CENTER" FUNCTION
|
---|
7 | D:'$D(IOM) HOME^%ZIS W ?(IOM\2-($L(X)\2)),X
|
---|
8 | Q
|
---|
9 | ;
|
---|
10 | MIXC(X) ; CHANGES X TO MIXED CASE
|
---|
11 | N I,Y,Y1
|
---|
12 | S Y=$$LOWC(X),X=""
|
---|
13 | F I=1:1:$L(Y) S Y1=$E(Y,I),X=X_$S(I=1:$$UPC(Y1),$E(Y,I-1)?1P:$$UPC(Y1),1:Y1)
|
---|
14 | Q X
|
---|
15 | ;
|
---|
16 | SSN(X) ; FORMAT SSN
|
---|
17 | Q:X'?9N X Q $E(X,1,3)_"-"_$E(X,4,5)_"-"_$E(X,6,9)
|
---|
18 | ;
|
---|
19 | LOWC(X) ; CONVERT X TO LOWERCASE
|
---|
20 | Q $TR(X,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")
|
---|
21 | ;
|
---|
22 | UPC(X) ; CONVERT X TO UPPERCASE
|
---|
23 | Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
---|
24 | ;
|
---|
25 | NUMDT(X1,X2) ; LIKE FILEMAN'S GREAT NUMDATE
|
---|
26 | S:'$D(X2) X2="/" I $G(X1)'?7N.".".6N Q ""
|
---|
27 | Q $E(X1,4,5)_X2_$E(X1,6,7)_X2_$E(X1,2,3)
|
---|
28 | ;
|
---|
29 | XDAT(X) ; FILEMAN INTERNAL TO EXTERNAL
|
---|
30 | N MO,DA,YR Q:X="" X
|
---|
31 | S MO=$E(X,4,5),DA=$E(X,6,7),YR=1700+$E(X,1,3)
|
---|
32 | S MO(1)=$S(MO:$P("January$February$March$April$May$June$July$August$September$October$November$December","$",+MO),1:"")
|
---|
33 | S X=YR S:+DA X=+DA_", "_X S:MO X=MO(1)_" "_X
|
---|
34 | Q X
|
---|
35 | ;
|
---|
36 | FTIME(X) ;
|
---|
37 | S X=$P(X,".",2)_"0000"
|
---|
38 | Q $E(X,1,2)_":"_$E(X,3,4)
|
---|
39 | ;
|
---|
40 | STACT(ACKXX,ACKXX1) ;
|
---|
41 | ;Entry point to determine if staff member ACKXX is/was active on
|
---|
42 | ;date ACKXX1. If ACKXX1 is undefined, TODAY is used.
|
---|
43 | ;Returns the following codes: 0=active, -1=not a&sp staff
|
---|
44 | ;-2=student, -3=never activated, -4=inactivated on or before X1
|
---|
45 | ;-5=not activated until after X1, -6=other provider (health technician)
|
---|
46 | I '$D(^ACK(509850.3,+$G(ACKXX),0)) Q -1
|
---|
47 | N ZERONODE,ACTIVE,INACTIVE,STANDING,DATE
|
---|
48 | S DATE=$S(+$G(ACKXX1):ACKXX1,1:DT),ZERONODE=^ACK(509850.3,+ACKXX,0),STANDING=$P(ZERONODE,U,2),ACTIVE=$P(ZERONODE,U,3),INACTIVE=$P(ZERONODE,U,4)
|
---|
49 | Q $S('ACTIVE:-3,ACTIVE>DATE:-5,(INACTIVE)&((INACTIVE<DATE)!(INACTIVE=DATE)):-4,"S"[STANDING:-2,"O"[STANDING:-6,1:0)
|
---|
50 | ;
|
---|
51 | YN(X) ; YES OR NO READER
|
---|
52 | K DTOUT,DUOUT,DIRUT
|
---|
53 | S X("B")=$S('$D(X):"",X:"Y",1:"N")
|
---|
54 | ASKYN W " (Y/N) " W:X("B")]"" X("B")_"// " R X:DTIME S:'$T DTOUT=1 S:X="" X=X("B"),X("D")=1 I U[X!($D(DTOUT)) S DIRUT=1 S:X=U DUOUT=1 Q -1
|
---|
55 | I "??"[X W !,"Answer Y for Yes or N for No." G ASKYN
|
---|
56 | S X=$$UPC(X)
|
---|
57 | I $E("YES",1,$L(X))=X W $S($D(X("D")):" (YES)",1:$E("YES",$L(X)+1,3)) Q 1
|
---|
58 | I $E("NO",1,$L(X))=X W $S($D(X("D")):" (NO)",1:$E("NO",$L(X)+1,3)) Q 0
|
---|
59 | W " ??",!,$C(7) G ASKYN
|
---|
60 | ;
|
---|
61 | PAUSE N DIR,DTOUT,DUOUT,JJ,SS,X,Y
|
---|
62 | S SS=22-$Y F JJ=1:1:SS W !
|
---|
63 | S DIR(0)="E" D ^DIR S:$D(DUOUT)!($D(DTOUT)) DIRUT=1 Q
|
---|
64 | ;
|
---|
65 | TRIGCP ; TRIGGER OF C AND P STATUS FIELD FROM #2.5, #4.17, & #4.19
|
---|
66 | N Y
|
---|
67 | S Y(0)=$G(^ACK(509850.6,DA,0)),Y(4)=$G(^(4)),Y(1)=$P(Y(0),U,5)
|
---|
68 | S Y(2)=$P(Y(4),U,17),Y(3)=$P(Y(4),U,19)
|
---|
69 | S X=$S(('Y(1)&('Y(2))):0,Y(3)]"":3,Y(2)]"":2,1:1)
|
---|
70 | Q
|
---|
71 | ;
|
---|
72 | HTIM(%H,%S) ;
|
---|
73 | ; Expected Input: %H = Full $H, %S = 1 if seconds desired
|
---|
74 | N X
|
---|
75 | S:'$D(%H) %H=$H S:%H["," %H=$P(%H,",",2)
|
---|
76 | S X(3)=$$PAD(%H#60,"R",2,"0"),%H=%H\60
|
---|
77 | S X(2)=$$PAD(%H#60,"R",2,"0"),%H=$$PAD(%H\60,"R",2,0)
|
---|
78 | S X=%H_":"_X(2)_$S('$D(%S):"",'%S:"",1:":"_X(3))
|
---|
79 | Q X
|
---|
80 | ;
|
---|
81 | PAD(X,X1,X2,X3) ;
|
---|
82 | ; Required Input: X = String to Pad, X1 = "R" or "L" (right/left justify)
|
---|
83 | ; X2 = Number of Spaces, X3 = Pad character
|
---|
84 | F Q:$L(X)'<X2 S X=$S(X1="R":X3_X,1:X_X3)
|
---|
85 | Q X
|
---|
86 | ;
|
---|
87 | BFY(X) ; RETURNS FM BEGIN OF FY FOR DATE X
|
---|
88 | N M,D,Y S M=$E(X,4,5),D="00",Y=$E(X,1,3)-(M<10),M=10
|
---|
89 | Q Y_M_D
|
---|
90 | ;
|
---|
91 | INTRO ; QUASAR Introduction:
|
---|
92 | ; Called by the entry action of the ACKQAS SUPER menu option.
|
---|
93 | ;
|
---|
94 | K %ZIS S IOP="HOME" D ^%ZIS K %ZIS,IOP
|
---|
95 | W @IOF
|
---|
96 | W ! D CNTR("Quality:")
|
---|
97 | W ! D CNTR("Audiology and Speech")
|
---|
98 | W ! D CNTR("Analysis and Reporting")
|
---|
99 | W ! D CNTR("(QUASAR)")
|
---|
100 | W !! D CNTR("Version "_$P($T(V),";",3))
|
---|
101 | W !
|
---|
102 | Q
|
---|
103 | IVD ; INITIAL VISIT DATE ** TRIGGERED FROM PATIENT NAME ***
|
---|
104 | N Y,DDD,DD,DFN,D0,%DT
|
---|
105 | S DFN=X,X=$S('$D(^ACK(509850.2,DFN,0)):"",'$P(^(0),U,2):"",1:$P(^(0),U,2))
|
---|
106 | I 'X D
|
---|
107 | . F D Q:X=""!(X'>DT)
|
---|
108 | .. S Y=ACKVD D DD^%DT S %DT="AEP",%DT("A")="INITIAL VISIT DATE: "
|
---|
109 | .. S %DT("B")=Y D ^%DT K %DT S X=$S(Y<1:"",1:Y)
|
---|
110 | .. I X>DT W !,"No Future Dates Allowed",!
|
---|
111 | K A1
|
---|
112 | Q
|
---|
113 | ;
|
---|
114 | ADDPROV(ACKVIEN,X) ; Add Procedure Provider to List of Secondary
|
---|
115 | ; Providers if it is not already there.
|
---|
116 | ; X=Provider
|
---|
117 | ; ACKVIEN=IEN of Visit
|
---|
118 | ;
|
---|
119 | N ACK2,ACKMSG,ACKTGT,ACKARR,ACKARR1
|
---|
120 | D LIST^DIC(509850.66,","_ACKVIEN_",",".01","I","*","","","","","","ACKTGT","ACKMSG")
|
---|
121 | S ACK2=""
|
---|
122 | F S ACK2=$O(ACKTGT("DILIST",1,ACK2)) Q:ACK2="" D
|
---|
123 | . S ACKARR(ACKTGT("DILIST",1,ACK2))=""
|
---|
124 | S ACKPRIM=$$GET1^DIQ(509850.6,ACKVIEN_",",6,"I")
|
---|
125 | I ACKPRIM S ACKARR(ACKPRIM)=""
|
---|
126 | I $D(ACKARR(X)) Q
|
---|
127 | S ACKARR1(509850.66,"+1,"_ACKVIEN_",",.01)=X
|
---|
128 | D UPDATE^DIE("","ACKARR1","","")
|
---|
129 | Q
|
---|
130 | ;
|
---|