| [613] | 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 ("")
 | 
|---|