1 | VAQADM23 ;ALB/JRP - MESSAGE ADMINISTRATION;13-SEP-93
|
---|
2 | ;;1.5;PATIENT DATA EXCHANGE;;NOV 17, 1993
|
---|
3 | MAXCHCK(SEGARR,OUTARR) ;CHECK SEGMENTS AGAINST MAXIMUM LIMITS FOR AUTO PROC.
|
---|
4 | ;INPUT : SEGARR - Array of pointers to VAQ - DATA SEGMENT file
|
---|
5 | ; set equal to the time & occurrence values requested
|
---|
6 | ; (full global reference)
|
---|
7 | ; SEGARR(Pointer)=Time^Occurr
|
---|
8 | ; OUTARR - Array to store output in (full global reference)
|
---|
9 | ; [See OUPUT for format of OUTARR]
|
---|
10 | ;OUTPUT : 0 - All segments OK for automatic processing
|
---|
11 | ; OUTARR will have no entries
|
---|
12 | ; X - Number of segments that can not be automatically processed
|
---|
13 | ; OUTARR(SEGPTR)=MaxTime^MaxOccur^Time^Occur
|
---|
14 | ; -1 - Bad input or error
|
---|
15 | ;NOTES : It is the responsibility of the programmer to ensure that
|
---|
16 | ; OUTARR is killed before and after this call
|
---|
17 | ;
|
---|
18 | ;CHECK INPUT
|
---|
19 | Q:($G(SEGARR)="") ""
|
---|
20 | Q:('$D(@SEGARR))
|
---|
21 | Q:($G(OUTARR)="") ""
|
---|
22 | ;DECLARE VARIABLES
|
---|
23 | N TMP,POINTER,REQTIM,REQOCC,COUNT,OVERMAX
|
---|
24 | ;LOOP THROUGH SEGMENTS
|
---|
25 | S POINTER=""
|
---|
26 | S COUNT=0
|
---|
27 | F S POINTER=+$O(@SEGARR@(POINTER)) Q:('POINTER) D
|
---|
28 | .;NOT A VALID SEGMENT POINTER - IGNORE
|
---|
29 | .Q:('$D(^VAT(394.71,POINTER)))
|
---|
30 | .;GET REQUESTED LIMITS
|
---|
31 | .S TMP=$G(@SEGARR@(POINTER))
|
---|
32 | .S REQTIM=$P(TMP,"^",1)
|
---|
33 | .S REQOCC=$P(TMP,"^",2)
|
---|
34 | .;CHECK LIMITS AGAINST MAX ALLOWED
|
---|
35 | .S OVERMAX=$$CHCKSEG(POINTER,REQTIM,REQOCC)
|
---|
36 | .;OVER ALLOWED LIMITS - INCREMENT COUNT & STORE MAX LIMITS
|
---|
37 | .I (OVERMAX) D
|
---|
38 | ..S COUNT=COUNT+1
|
---|
39 | ..S TMP=$$SEGHLTH^VAQDBIH1(POINTER,0)
|
---|
40 | ..S @OUTARR@(POINTER)=($P(TMP,"^",2,3)_"^"_REQTIM_"^"_REQOCC)
|
---|
41 | ;RETURN NUMBER OF SEGMENTS OVER MAX ALLOWED
|
---|
42 | Q COUNT
|
---|
43 | ;
|
---|
44 | CHCKSEG(SEGPTR,TIME,OCCUR) ;CHECK SEGMENT LIMITS AGAINST ALLOWED VALUES
|
---|
45 | ;INPUT : SEGPTR - Pointer to VAQ - DATA SEGMENT file (segment to check)
|
---|
46 | ; TIME - Time limit being requested
|
---|
47 | ; OCCUR - Occurrence limit being requested
|
---|
48 | ;OUTPUT : 0 - Segment OK for automatic processing
|
---|
49 | ; 1 - Segment can not be automatically processed
|
---|
50 | ; -1 - Bad input
|
---|
51 | ;
|
---|
52 | ;CHECK INPUT
|
---|
53 | Q:($G(SEGPTR)="") -1
|
---|
54 | Q:('$D(^VAT(394.71,SEGPTR))) -1
|
---|
55 | S TIME=$G(TIME)
|
---|
56 | S OCCUR=$G(OCCUR)
|
---|
57 | I (TIME'="") Q:($$VALOCC^VAQDBIH2(TIME,0)) -1
|
---|
58 | I (OCCUR'="") Q:($$VALOCC^VAQDBIH2(OCCUR,1)) -1
|
---|
59 | ;DECLARE VARIABLES
|
---|
60 | N TIMLIM,OCCLIM,TMP
|
---|
61 | ;GET ALLOWABLE LIMITS FOR SEGMENT
|
---|
62 | S TMP=$$SEGHLTH^VAQDBIH1(SEGPTR)
|
---|
63 | ;SEGMENT NOT HEALTH SUMMARY COMPONENT (AUTOMATIC PROCESSING ALLOWED)
|
---|
64 | Q:('TMP) 0
|
---|
65 | S TIMLIM=$P(TMP,"^",2)
|
---|
66 | S OCCLIM=$P(TMP,"^",3)
|
---|
67 | ;CHECK TIME LIMIT
|
---|
68 | I ((TIMLIM'="")&(TIMLIM'="@")) D Q:(TMP) 1
|
---|
69 | .;CONVERT TIME LIMIT REQUESTED TO DAYS
|
---|
70 | .S TMP=$$TIMECHNG(TIME)
|
---|
71 | .I ((TMP="")&(TIME'="")) S TMP=1 Q
|
---|
72 | .S TIME=TMP
|
---|
73 | .;CONVERT ALLOWABLE TIME LIMIT TO DAYS
|
---|
74 | .S TIMLIM=$$TIMECHNG(TIMLIM)
|
---|
75 | .I (TIMLIM="") S TMP=1 Q
|
---|
76 | .;CHECK
|
---|
77 | .I (TIME="") S TMP=1 Q
|
---|
78 | .I (TIME>TIMLIM) S TMP=1 Q
|
---|
79 | .S TMP=0
|
---|
80 | ;CHECK OCCURRENCE LIMIT
|
---|
81 | I ((OCCLIM'="")&(OCCLIM'="@")) D Q:(TMP) 1
|
---|
82 | .S TMP=0
|
---|
83 | .S:(OCCUR>OCCLIM) TMP=1
|
---|
84 | .S:(OCCUR="") TMP=1
|
---|
85 | ;AUTOMATIC PROCESSING ALLOWED
|
---|
86 | Q 0
|
---|
87 | ;
|
---|
88 | TIMECHNG(INTIME) ;CONVERT TIME LIMIT TO DAYS
|
---|
89 | ;INPUT : INTIME - Valid time limit to convert
|
---|
90 | ;OUTPUT : X - INTIME in days (ex: '1Y' results in '365')
|
---|
91 | ; NULL will be returned on error
|
---|
92 | ;NOTES : The following assumptions are made
|
---|
93 | ; 1) There are 365 days in a year
|
---|
94 | ; 2) There are 30 days in a month
|
---|
95 | ;
|
---|
96 | ;CHECK INPUT
|
---|
97 | Q:($$VALOCC^VAQDBIH2($G(INTIME),0)) ""
|
---|
98 | ;DECLARE VARIABLES
|
---|
99 | N TYPE,VALUE
|
---|
100 | ;BREAK LIMIT INTO IT'S VALUE AND TYPE
|
---|
101 | S VALUE=$E(INTIME,1,($L(INTIME)-1))
|
---|
102 | S TYPE=$E(INTIME,$L(INTIME))
|
---|
103 | ;INTIME ALREADY IN DAYS
|
---|
104 | Q:(TYPE="D") (+INTIME)
|
---|
105 | ;CONVERT YEARS TO DAYS
|
---|
106 | Q:(TYPE="Y") (VALUE*365)
|
---|
107 | ;CONVERT MONTHS TO DAYS
|
---|
108 | Q:(TYPE="M") (VALUE*30)
|
---|
109 | ;ERROR
|
---|
110 | Q ("")
|
---|