VAQDBIH3 ;JRP/ALB - GET INFO ABOUT HEALTH SUMMARY COMPONENT;09-SEP-93
;;1.5;PATIENT DATA EXCHANGE;;NOV 17, 1993
; Note: All the functions in this routine provide the same
; functionality as the functions in VAQDBIH1. This version
; does not call fileman. These function will be used inside
; fileman calls.
;
HLTHSEG(PDXABB,NOLIMITS) ;DETERMINE IF PDX SEGMENT IS A H.S. COMPONENT
;INPUT : PDXABB - Abbreviation of segment in VAQ - DATA SEGMENT file
; NOLIMITS - Flag indicating if time & occurrence indicators
; should be returned
; 0 = Return indicators (default)
; 1 = Don't return indicators
;OUTPUT : A^B^C where
; A - Pointer to entry in HEALTH SUMMARY COMPONENT file
; (will be '0' if not a Health Summary Component)
; B - Time indicator
; 1 = Time limits applicable
; 0 = Time limits not applicable
; C - Occurrence indicator
; 1 = Occurrence limits applicable
; 0 = Occurrence limits not applicable
;NOTES : If NOLIMITS is set to 1, output will be A (not A^^)
; : If PDXABB is not passed or is not a valid abbreviation,
; output will be 0
;
;CHECK INPUT & SET DEFAULTS
Q:($G(PDXABB)="") 0
Q:('$D(^VAT(394.71,"C",PDXABB))) 0
S NOLIMITS=+$G(NOLIMITS)
;DECLARE VARIABLES
N PDXSEG,ANS,TMP
;GET POINTER TO SEGMENT
S PDXSEG=+$O(^VAT(394.71,"C",PDXABB,""))
Q:('PDXSEG) 0
;GET INFO
S ANS=$$SEGHLTH(PDXSEG,NOLIMITS)
;NOT A HEALTH SUMMARY COMPONENT OR NO LIMIT INDICATORS REQUIRED
Q:(('ANS)!(NOLIMITS)) (+ANS)
;CHECK FOR TIME LIMIT
S TMP=$P(ANS,"^",2)
S:(TMP="@") TMP=1
S:(TMP="") TMP=0
S:(TMP) TMP=1
S $P(ANS,"^",2)=TMP
;CHECK FOR OCCURRENCE LIMIT
S TMP=$P(ANS,"^",3)
S:(TMP="@") TMP=1
S:(TMP="") TMP=0
S:(TMP) TMP=1
S $P(ANS,"^",3)=TMP
;DONE
Q ANS
;
SEGHLTH(SEGPTR,NOMAX) ;DETERMINE IF PDX SEGMENT IS A H.S. COMPONENT
;INPUT : SEGPTR - Pointer to segment in VAQ - DATA SEGMENT file
; NOMAX - Flag indicating if maximium time & occurrence limits
; allowed by facility should be returned
; 0 = Return maximum limits (default)
; 1 = Don't return maximium limits
;OUTPUT : A^B^C where
; A - Pointer to entry in HEALTH SUMMARY COMPONENT file
; (will be '0' if not a Health Summary Component)
; B - Maximum time limit allowed
; C - Maximum occurrence limit allowed
;NOTES : If NOMAX is set to 1, output will be A (not A^^)
; : If SEGPTR is not passed or is not a valid abbreviation,
; output will be 0
; : '@' denotes that a limit is applicable but a maximum
; limit has not been set
; : NULL denotes that a limit is not applicable
;
;CHECK INPUT & SET DEFAULTS
Q:('(+$G(SEGPTR))) 0
Q:('$D(^VAT(394.71,SEGPTR))) 0
S NOMAX=+$G(NOMAX)
;DECLARE VARIABLES
N HLTHPTR,TIME,OCCUR,MAXTIM,MAXOCC,TMP,NODE
;DETERMINE IF SEGMENT IS PAIRED WITH HEALTH SUMMARY COMPONENT
S NODE=$G(^VAT(394.71,SEGPTR,0))
S HLTHPTR=+$P(NODE,"^",4)
Q:('HLTHPTR) 0
;GET TIME & OCCURRENCE FLAGS
S TIME=$$LIMITS(HLTHPTR)
S OCCUR=+$P(TIME,"^",2)
S TIME=+TIME
;GET MAXIMUM LIMITS
S MAXTIM=$P(NODE,"^",5)
S MAXOCC=+$P(NODE,"^",6)
;MAXIMUM TIME NOT APPLIED
S:((MAXTIM="")&(TIME)) MAXTIM="@"
;MAXIMUM TIME NOT APPLICABLE
S:('TIME) MAXTIM=""
;MAXIMUM OCCURRENCE NOT APPLIED
S:(('MAXOCC)&(OCCUR)) MAXOCC="@"
;MAXIMUM OCCURRENCE NOT APPLICABLE
S:('OCCUR) MAXOCC=""
;DONE
Q:(NOMAX) HLTHPTR
Q (HLTHPTR_"^"_MAXTIM_"^"_MAXOCC)
;
LIMITS(HSPTR) ;DETERMINE IF HEALTH SUMMARY COMPONENT HAS LIMITS
;INPUT : HSPTR - Pointer to entry in HEALTH SUMMARY COMPONENT file
;OUTPUT : B^C where
; B - Time indicator
; 1 = Time limits applicable
; 0 = Time limits not applicable
; C - Occurrence indicator
; 1 = Occurrence limits applicable
; 0 = Occurrence limits not applicable
;NOTES : It is assumed that input is valid (not checked)
;
;DECLARE VARIABLES
N TMP,TLIM,OLIM,HSND
;GET TIME & OCCURRENCE FLAGS
S HSND=$G(^GMT(142.1,HSPTR,0))
;CHECK IF TIME LIMIT APPLICABLE
S (TLIM,OLIM)=0
S TMP=$P(HSND,U,3)
S:((TMP="Y")!(TMP="YES")!(TMP="yes")!(TMP="Yes")) TLIM=1
;CHECK IF OCCURRENCE LIMIT APPLICABLE
S TMP=$P(HSND,U,5)
S:((TMP="Y")!(TMP="YES")!(TMP="yes")!(TMP="Yes")) OLIM=1
Q (TLIM_"^"_OLIM)
VAQDBIH3 ;JRP/ALB - GET INFO ABOUT HEALTH SUMMARY COMPONENT;09-SEP-93
+1 ;;1.5;PATIENT DATA EXCHANGE;;NOV 17, 1993
+2 ; Note: All the functions in this routine provide the same
+3 ; functionality as the functions in VAQDBIH1. This version
+4 ; does not call fileman. These function will be used inside
+5 ; fileman calls.
+6 ;
HLTHSEG(PDXABB,NOLIMITS) ;DETERMINE IF PDX SEGMENT IS A H.S. COMPONENT
+1 ;INPUT : PDXABB - Abbreviation of segment in VAQ - DATA SEGMENT file
+2 ; NOLIMITS - Flag indicating if time & occurrence indicators
+3 ; should be returned
+4 ; 0 = Return indicators (default)
+5 ; 1 = Don't return indicators
+6 ;OUTPUT : A^B^C where
+7 ; A - Pointer to entry in HEALTH SUMMARY COMPONENT file
+8 ; (will be '0' if not a Health Summary Component)
+9 ; B - Time indicator
+10 ; 1 = Time limits applicable
+11 ; 0 = Time limits not applicable
+12 ; C - Occurrence indicator
+13 ; 1 = Occurrence limits applicable
+14 ; 0 = Occurrence limits not applicable
+15 ;NOTES : If NOLIMITS is set to 1, output will be A (not A^^)
+16 ; : If PDXABB is not passed or is not a valid abbreviation,
+17 ; output will be 0
+18 ;
+19 ;CHECK INPUT & SET DEFAULTS
+20 IF ($GET(PDXABB)="")
QUIT 0
+21 IF ('$DATA(^VAT(394.71,"C",PDXABB)))
QUIT 0
+22 SET NOLIMITS=+$GET(NOLIMITS)
+23 ;DECLARE VARIABLES
+24 NEW PDXSEG,ANS,TMP
+25 ;GET POINTER TO SEGMENT
+26 SET PDXSEG=+$ORDER(^VAT(394.71,"C",PDXABB,""))
+27 IF ('PDXSEG)
QUIT 0
+28 ;GET INFO
+29 SET ANS=$$SEGHLTH(PDXSEG,NOLIMITS)
+30 ;NOT A HEALTH SUMMARY COMPONENT OR NO LIMIT INDICATORS REQUIRED
+31 IF (('ANS)!(NOLIMITS))
QUIT (+ANS)
+32 ;CHECK FOR TIME LIMIT
+33 SET TMP=$PIECE(ANS,"^",2)
+34 IF (TMP="@")
SET TMP=1
+35 IF (TMP="")
SET TMP=0
+36 IF (TMP)
SET TMP=1
+37 SET $PIECE(ANS,"^",2)=TMP
+38 ;CHECK FOR OCCURRENCE LIMIT
+39 SET TMP=$PIECE(ANS,"^",3)
+40 IF (TMP="@")
SET TMP=1
+41 IF (TMP="")
SET TMP=0
+42 IF (TMP)
SET TMP=1
+43 SET $PIECE(ANS,"^",3)=TMP
+44 ;DONE
+45 QUIT ANS
+46 ;
SEGHLTH(SEGPTR,NOMAX) ;DETERMINE IF PDX SEGMENT IS A H.S. COMPONENT
+1 ;INPUT : SEGPTR - Pointer to segment in VAQ - DATA SEGMENT file
+2 ; NOMAX - Flag indicating if maximium time & occurrence limits
+3 ; allowed by facility should be returned
+4 ; 0 = Return maximum limits (default)
+5 ; 1 = Don't return maximium limits
+6 ;OUTPUT : A^B^C where
+7 ; A - Pointer to entry in HEALTH SUMMARY COMPONENT file
+8 ; (will be '0' if not a Health Summary Component)
+9 ; B - Maximum time limit allowed
+10 ; C - Maximum occurrence limit allowed
+11 ;NOTES : If NOMAX is set to 1, output will be A (not A^^)
+12 ; : If SEGPTR is not passed or is not a valid abbreviation,
+13 ; output will be 0
+14 ; : '@' denotes that a limit is applicable but a maximum
+15 ; limit has not been set
+16 ; : NULL denotes that a limit is not applicable
+17 ;
+18 ;CHECK INPUT & SET DEFAULTS
+19 IF ('(+$GET(SEGPTR)))
QUIT 0
+20 IF ('$DATA(^VAT(394.71,SEGPTR)))
QUIT 0
+21 SET NOMAX=+$GET(NOMAX)
+22 ;DECLARE VARIABLES
+23 NEW HLTHPTR,TIME,OCCUR,MAXTIM,MAXOCC,TMP,NODE
+24 ;DETERMINE IF SEGMENT IS PAIRED WITH HEALTH SUMMARY COMPONENT
+25 SET NODE=$GET(^VAT(394.71,SEGPTR,0))
+26 SET HLTHPTR=+$PIECE(NODE,"^",4)
+27 IF ('HLTHPTR)
QUIT 0
+28 ;GET TIME & OCCURRENCE FLAGS
+29 SET TIME=$$LIMITS(HLTHPTR)
+30 SET OCCUR=+$PIECE(TIME,"^",2)
+31 SET TIME=+TIME
+32 ;GET MAXIMUM LIMITS
+33 SET MAXTIM=$PIECE(NODE,"^",5)
+34 SET MAXOCC=+$PIECE(NODE,"^",6)
+35 ;MAXIMUM TIME NOT APPLIED
+36 IF ((MAXTIM="")&(TIME))
SET MAXTIM="@"
+37 ;MAXIMUM TIME NOT APPLICABLE
+38 IF ('TIME)
SET MAXTIM=""
+39 ;MAXIMUM OCCURRENCE NOT APPLIED
+40 IF (('MAXOCC)&(OCCUR))
SET MAXOCC="@"
+41 ;MAXIMUM OCCURRENCE NOT APPLICABLE
+42 IF ('OCCUR)
SET MAXOCC=""
+43 ;DONE
+44 IF (NOMAX)
QUIT HLTHPTR
+45 QUIT (HLTHPTR_"^"_MAXTIM_"^"_MAXOCC)
+46 ;
LIMITS(HSPTR) ;DETERMINE IF HEALTH SUMMARY COMPONENT HAS LIMITS
+1 ;INPUT : HSPTR - Pointer to entry in HEALTH SUMMARY COMPONENT file
+2 ;OUTPUT : B^C where
+3 ; B - Time indicator
+4 ; 1 = Time limits applicable
+5 ; 0 = Time limits not applicable
+6 ; C - Occurrence indicator
+7 ; 1 = Occurrence limits applicable
+8 ; 0 = Occurrence limits not applicable
+9 ;NOTES : It is assumed that input is valid (not checked)
+10 ;
+11 ;DECLARE VARIABLES
+12 NEW TMP,TLIM,OLIM,HSND
+13 ;GET TIME & OCCURRENCE FLAGS
+14 SET HSND=$GET(^GMT(142.1,HSPTR,0))
+15 ;CHECK IF TIME LIMIT APPLICABLE
+16 SET (TLIM,OLIM)=0
+17 SET TMP=$PIECE(HSND,U,3)
+18 IF ((TMP="Y")!(TMP="YES")!(TMP="yes")!(TMP="Yes"))
SET TLIM=1
+19 ;CHECK IF OCCURRENCE LIMIT APPLICABLE
+20 SET TMP=$PIECE(HSND,U,5)
+21 IF ((TMP="Y")!(TMP="YES")!(TMP="yes")!(TMP="Yes"))
SET OLIM=1
+22 QUIT (TLIM_"^"_OLIM)