DGMTUTL3 ;ALB/GTS - Means Test generic utilities ; 12/16/05 2:53pm
 ;;5.3;Registration;**688**;Aug 13, 1993;Build 29
 ;
VER(DGINC) ;* Return the version of Individual Annual Income records (0 or 1)
 ; Input:  DGINC   Individual Annual Income IEN Array
 ; Output: 1 - version 1 1010EZ form Feb, 2005
 ;         0 - version 0 1010EZ form pre Feb, 2005
 ;        -1 - Annual Means Test record is associated and it is not a
 ;              Means/Co-Pay test
 ;
 ;  Example on input array:
 ;       DGINC("D",#) = 408.21 record IENs for dependents.  # 1 node 
 ;                       for each Dependent
 ;       DGINC("S") = 408.21 record IEN for active Spouse
 ;       DGINC("V") = 408.21 record IEN for Veteran
 ;
 N MTVER,RECTYP,IAIIEN,CONVRT,FORM,IAIVER
 S MTVER=1 ;Version returned from API.  If IAI rec's are for LTC tests,
 ;           then VER exits and returns -1
 ;
 ;If a veteran DGINC node is not defined, then there is no IAI records
 ; for last year (current MT) and new (version 1) records will be entered
 ;QUIT!!
 I '$G(DGINC("V")) Q MTVER
 ;
 S CONVRT=-1 ;Indicates record is converted.
 ;             (-1: LTC rec 0: 408.21/2.11 is null or 0;
 ;               1: 408.21/2.11 is 1)
 ; Version returned from IAIWALK.  Any value of 0 causes VER to exit and return 0
 S IAIVER=1
 ;            
 ;
 ; MTVER could be 0 because the IAI node is walked or is found to either
 ;  have a 0 or null in 2.11.  If 2.11 is null, the record has not been reviewed
 ;  and a version not indicated.
 ;
 ; Check type of test associated with IAI records
 I (+$P($G(^DGMT(408.31,+$G(^DGMT(408.21,DGINC("V"),"MT")),0)),"^",19)>2) DO
 . W !!,"Income Records are for Long Term Care type tests.  This data can not be edited."
 . S MTVER=-1
 ;
 Q:(MTVER=-1) MTVER  ;QUIT if IAI records are for LTC type tests
 ;
 ; Quit loop if version is found to be 0 or the MT record has been
 ;  verified and a version indicated
 F RECTYP="V","S","D"  Q:(+MTVER=0)  Q:(+CONVRT=1)  DO
 . I RECTYP'="D" DO
 . . I $D(DGINC(RECTYP)) DO
 . . . S IAIIEN=DGINC(RECTYP)
 . . . ;Check 2.11 on related MT record in 408.31
 . . . ; (CONVRT=-1 : Conversion check not yet completed)
 . . . ;MTRECVER will return a value of 0 or 1 for CONVRT
 . . . D:(+CONVRT=-1) MTRECVER(IAIIEN,.FORM,.CONVRT) ;Assume all IAI rec's have #31 or don't
 . . . S:(CONVRT=1) MTVER=FORM ;If 408.31 rec has a version,
 . . . ;                         set MTVER and Quit with that value
 . . . I CONVRT=0 S IAIVER=$$IAIWALK(IAIIEN) ;IAIVER = 0 when version 0 IAI rec found
 . . . S:(IAIVER=0) MTVER=0
 . ;
 . ;Review Dependent IAI records
 . I RECTYP="D" DO
 . . N DEPNUM
 . . S DEPNUM=""
 . . ;QUIT 'D' IEN loop when all have been reviewed or related 408.31
 . . ; record has a version in 2.11
 . . F  S DEPNUM=$O(DGINC("D",DEPNUM))  Q:DEPNUM=""  Q:CONVRT=1  Q:IAIVER=0  DO
 . . . S IAIIEN=DGINC("D",DEPNUM)
 . . . ;Check 2.11 on related MT record in 408.31
 . . . ; (CONVRT=-1 : conversion check not yet completed)
 . . . ; MTRECVER will return a value of 0 or 1 for CONVRT
 . . . D:(+CONVRT=-1) MTRECVER(IAIIEN,.FORM,.CONVRT) ;Assume all IAI rec's have #31 or don't
 . . . S:(CONVRT=1) MTVER=FORM ;if 408.31 rec has a version, set MTVER and Quit with that value
 . . . I CONVRT=0 S IAIVER=$$IAIWALK(IAIIEN) ;IAIVER = 0 when version 0 IAI record is found
 . . . S:(IAIVER=0) MTVER=0
 Q MTVER
 ;
MTRECVER(IAI,VER211,CONVRT) ;* Return the version indicated in 408.31 Means Test Version field (2.11)
 ; Input:  IAI - Individual Annual Income entry IEN
 ;
 ; Output (passed by reference):
 ;    VER211: 1 - version 1 1010EZ form Feb, 2005
 ;            0 - version 0 1010EZ form pre Feb, 2005
 ;         NULL - version not indicated on 408.31
 ;
 ;    CONVRT: 0 - Means Test Version field (2.11) is not defined
 ;            1 - Means Test Version field is defined with a value (0 or 1)
 ;
 S CONVRT=0
 S VER211=$P($G(^DGMT(408.31,+$G(^DGMT(408.21,IAI,"MT")),2)),"^",11)
 S:(VER211'["") CONVRT=1
 S VER211=+VER211
 Q
 ;
IAIWALK(IAI) ;* Return the version per findings in 408.21 record
 ; Input:  IAI - Individual Annual Income entry IEN
 ; Returned value:
 ;            0 - Record contains data defined for version 0 (pre Feb, 2005)
 ;                  Form (pce's 9-13, 15, 16)
 ;            1 - Record contains data defined for version 1 (Feb, 2005) Form
 ;
 N RECVER,IAIREC,NULLVAL,PCE
 S NULLVAL=""
 S PCE=""
 S RECVER=1
 S IAIREC=$G(^DGMT(408.21,IAI,0))
 F PCE=9:1:13,15,16 I $P(IAIREC,"^",PCE)'=NULLVAL S RECVER=0
 Q RECVER
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDGMTUTL3   4572     printed  Sep 23, 2025@20:21:36                                                                                                                                                                                                    Page 2
DGMTUTL3  ;ALB/GTS - Means Test generic utilities ; 12/16/05 2:53pm
 +1       ;;5.3;Registration;**688**;Aug 13, 1993;Build 29
 +2       ;
VER(DGINC) ;* Return the version of Individual Annual Income records (0 or 1)
 +1       ; Input:  DGINC   Individual Annual Income IEN Array
 +2       ; Output: 1 - version 1 1010EZ form Feb, 2005
 +3       ;         0 - version 0 1010EZ form pre Feb, 2005
 +4       ;        -1 - Annual Means Test record is associated and it is not a
 +5       ;              Means/Co-Pay test
 +6       ;
 +7       ;  Example on input array:
 +8       ;       DGINC("D",#) = 408.21 record IENs for dependents.  # 1 node 
 +9       ;                       for each Dependent
 +10      ;       DGINC("S") = 408.21 record IEN for active Spouse
 +11      ;       DGINC("V") = 408.21 record IEN for Veteran
 +12      ;
 +13       NEW MTVER,RECTYP,IAIIEN,CONVRT,FORM,IAIVER
 +14      ;Version returned from API.  If IAI rec's are for LTC tests,
           SET MTVER=1
 +15      ;           then VER exits and returns -1
 +16      ;
 +17      ;If a veteran DGINC node is not defined, then there is no IAI records
 +18      ; for last year (current MT) and new (version 1) records will be entered
 +19      ;QUIT!!
 +20       IF '$GET(DGINC("V"))
               QUIT MTVER
 +21      ;
 +22      ;Indicates record is converted.
           SET CONVRT=-1
 +23      ;             (-1: LTC rec 0: 408.21/2.11 is null or 0;
 +24      ;               1: 408.21/2.11 is 1)
 +25      ; Version returned from IAIWALK.  Any value of 0 causes VER to exit and return 0
 +26       SET IAIVER=1
 +27      ;            
 +28      ;
 +29      ; MTVER could be 0 because the IAI node is walked or is found to either
 +30      ;  have a 0 or null in 2.11.  If 2.11 is null, the record has not been reviewed
 +31      ;  and a version not indicated.
 +32      ;
 +33      ; Check type of test associated with IAI records
 +34       IF (+$PIECE($GET(^DGMT(408.31,+$GET(^DGMT(408.21,DGINC("V"),"MT")),0)),"^",19)>2)
               Begin DoDot:1
 +35               WRITE !!,"Income Records are for Long Term Care type tests.  This data can not be edited."
 +36               SET MTVER=-1
               End DoDot:1
 +37      ;
 +38      ;QUIT if IAI records are for LTC type tests
           if (MTVER=-1)
               QUIT MTVER
 +39      ;
 +40      ; Quit loop if version is found to be 0 or the MT record has been
 +41      ;  verified and a version indicated
 +42       FOR RECTYP="V","S","D"
               if (+MTVER=0)
                   QUIT 
               if (+CONVRT=1)
                   QUIT 
               Begin DoDot:1
 +43               IF RECTYP'="D"
                       Begin DoDot:2
 +44                       IF $DATA(DGINC(RECTYP))
                               Begin DoDot:3
 +45                               SET IAIIEN=DGINC(RECTYP)
 +46      ;Check 2.11 on related MT record in 408.31
 +47      ; (CONVRT=-1 : Conversion check not yet completed)
 +48      ;MTRECVER will return a value of 0 or 1 for CONVRT
 +49      ;Assume all IAI rec's have #31 or don't
                                   if (+CONVRT=-1)
                                       DO MTRECVER(IAIIEN,.FORM,.CONVRT)
 +50      ;If 408.31 rec has a version,
                                   if (CONVRT=1)
                                       SET MTVER=FORM
 +51      ;                         set MTVER and Quit with that value
 +52      ;IAIVER = 0 when version 0 IAI rec found
                                   IF CONVRT=0
                                       SET IAIVER=$$IAIWALK(IAIIEN)
 +53                               if (IAIVER=0)
                                       SET MTVER=0
                               End DoDot:3
                       End DoDot:2
 +54      ;
 +55      ;Review Dependent IAI records
 +56               IF RECTYP="D"
                       Begin DoDot:2
 +57                       NEW DEPNUM
 +58                       SET DEPNUM=""
 +59      ;QUIT 'D' IEN loop when all have been reviewed or related 408.31
 +60      ; record has a version in 2.11
 +61                       FOR 
                               SET DEPNUM=$ORDER(DGINC("D",DEPNUM))
                               if DEPNUM=""
                                   QUIT 
                               if CONVRT=1
                                   QUIT 
                               if IAIVER=0
                                   QUIT 
                               Begin DoDot:3
 +62                               SET IAIIEN=DGINC("D",DEPNUM)
 +63      ;Check 2.11 on related MT record in 408.31
 +64      ; (CONVRT=-1 : conversion check not yet completed)
 +65      ; MTRECVER will return a value of 0 or 1 for CONVRT
 +66      ;Assume all IAI rec's have #31 or don't
                                   if (+CONVRT=-1)
                                       DO MTRECVER(IAIIEN,.FORM,.CONVRT)
 +67      ;if 408.31 rec has a version, set MTVER and Quit with that value
                                   if (CONVRT=1)
                                       SET MTVER=FORM
 +68      ;IAIVER = 0 when version 0 IAI record is found
                                   IF CONVRT=0
                                       SET IAIVER=$$IAIWALK(IAIIEN)
 +69                               if (IAIVER=0)
                                       SET MTVER=0
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +70       QUIT MTVER
 +71      ;
MTRECVER(IAI,VER211,CONVRT) ;* Return the version indicated in 408.31 Means Test Version field (2.11)
 +1       ; Input:  IAI - Individual Annual Income entry IEN
 +2       ;
 +3       ; Output (passed by reference):
 +4       ;    VER211: 1 - version 1 1010EZ form Feb, 2005
 +5       ;            0 - version 0 1010EZ form pre Feb, 2005
 +6       ;         NULL - version not indicated on 408.31
 +7       ;
 +8       ;    CONVRT: 0 - Means Test Version field (2.11) is not defined
 +9       ;            1 - Means Test Version field is defined with a value (0 or 1)
 +10      ;
 +11       SET CONVRT=0
 +12       SET VER211=$PIECE($GET(^DGMT(408.31,+$GET(^DGMT(408.21,IAI,"MT")),2)),"^",11)
 +13       if (VER211'["")
               SET CONVRT=1
 +14       SET VER211=+VER211
 +15       QUIT 
 +16      ;
IAIWALK(IAI) ;* Return the version per findings in 408.21 record
 +1       ; Input:  IAI - Individual Annual Income entry IEN
 +2       ; Returned value:
 +3       ;            0 - Record contains data defined for version 0 (pre Feb, 2005)
 +4       ;                  Form (pce's 9-13, 15, 16)
 +5       ;            1 - Record contains data defined for version 1 (Feb, 2005) Form
 +6       ;
 +7        NEW RECVER,IAIREC,NULLVAL,PCE
 +8        SET NULLVAL=""
 +9        SET PCE=""
 +10       SET RECVER=1
 +11       SET IAIREC=$GET(^DGMT(408.21,IAI,0))
 +12       FOR PCE=9:1:13,15,16
               IF $PIECE(IAIREC,"^",PCE)'=NULLVAL
                   SET RECVER=0
 +13       QUIT RECVER