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