| 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 ("")
|
---|