Ignore:
Timestamp:
Dec 4, 2009, 12:11:15 AM (14 years ago)
Author:
George Lilly
Message:

revised back to 6/30/08 version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • WorldVistAEHR/trunk/r/INCOME_VERIFICATION_MATCH-IVM/IVMZ7CR.m

    r613 r623  
    1 IVMZ7CR ;BAJ,ERC - HL7 Z07 CONSISTENCY CHECKER -- REGISTRATION SUBROUTINE ; 12/6/07 8:51am
    2         ;;2.0;INCOME VERIFICATION MATCH;**105,127**;JUL 8,1996;Build 6
    3         ;
    4         ; Registration Consistency Checks
    5         Q       ; Entry point must be specified
    6 EN(DFN,DGP,DGSD)        ;Entry point
    7         ;  input:  DFN - Patient IEN
    8         ;          DGP - Patient data array
    9         ;          DGSD - Spouse and Dependent data array
    10         ; output: ^TMP($J,DFN,RULE) global
    11         ;          DFN - Patient IEN
    12         ;          RULE - Consistency rule #
    13         ;initialize variables
    14         N RULE,Y,X,FILERR,SPDEP
    15         S SPDEP=$D(DGSD("DEP"))
    16         ; we do not count through all numbers to save routine space
    17         F RULE=4,7,9,11,13,15,16,19,24,29:1:31,34,60,72,74,75,76,78,81,83,85,86 I $D(^DGIN(38.6,RULE)) D
    18         . I $$ON(RULE) D @RULE
    19         I $D(FILERR) M ^TMP($J,DFN)=FILERR
    20         Q
    21 4       ; DOB UNSPECIFIED
    22         ; Note: RULE #302 in IVMZ7CD is a duplicate of this rule
    23         N RIEN
    24         I $P($G(DGP("PAT",0)),U,3)="" S FILERR(RULE)=""
    25         I 'SPDEP Q
    26         S RIEN=0 F  S RIEN=$O(DGSD("DEP",RIEN)) Q:RIEN=""  D
    27         . I $P(DGSD("DEP",RIEN,0),U,3)="" S FILERR(RULE)=""
    28         Q
    29 7       ; SSN UNSPECIFIED
    30         ; Note: RULE #305 in IVMZ7CD is a duplicate of this rule
    31         I $P($G(DGP("PAT",0)),U,9)="" S FILERR(RULE)=""
    32         Q
    33 9       ; VETERAN STATUS UNSPECIFIED
    34         I $P($G(DGP("PAT","VET")),U)="" S FILERR(RULE)=""
    35         Q
    36 11      ; SC PROMPT INCONSISTENT
    37         N VET,SC,PTYPE
    38         ; If VET Status is not specified (RULE 9) no need for this test
    39         Q:$P($G(DGP("PAT","VET")),U)=""
    40         S VET=$P(DGP("PAT","VET"),U,1)="Y",SC=$P(DGP("PAT",.3),U,1)="Y"
    41         I 'VET,SC S FILERR(RULE)=""
    42         Q
    43 13      ; POS UNSPECIFIED
    44         ; Note: Rule #413 IN IVMZ7CE is a duplicate of this rule
    45         Q:$P($G(DGP("PAT","VET")),U,1)'="Y"
    46         ; Make sure that the value in the field is valid -- DGRPC does this as well
    47         I '$D(^DIC(21,+$P(DGP("PAT",.32),U,3),0)) S FILERR(RULE)=""
    48         Q
    49 15      ; INEL REASON UNSPECIFIED
    50         ; Note: Rule #404 IN IVMZ7CE is a duplicate of this rule
    51         I $P(DGP("PAT",.15),U,2),$P($G(DGP("PAT",.3)),U,7)="" S FILERR(RULE)=""
    52         Q
    53 16      ; DATE OF DEATH IN FUTURE
    54         ; Note: Rule #308 IN IVMZ7CD is a duplicate of this rule
    55         S X=$P($G(DGP("PAT",.35)),U) I X']"" Q
    56         ; Compare DOD to right now
    57         I X>$$DT^XLFDT S FILERR(RULE)=""
    58         Q
    59 19      ; ELIG/NONVET STAT INCONSISTENT
    60         ; Note: Rule #405 in IVMZ7CE is a duplicate of this rule
    61         N VET,ELIG,FILE8,FILE81,MPTR,MTYPE,PTYPE
    62         ; Patient's VET status
    63         S VET=$P($G(DGP("PAT","VET")),U,1) I VET="" S FILERR(RULE)="" Q
    64         ; do this check for NON-VET status only
    65         Q:VET="Y"
    66         ; Check PT type to see if we skip VET checks
    67         S PTYPE=$P($G(DGP("PAT","TYPE")),U,1)
    68         I PTYPE]"",$P(^DG(391,PTYPE,0),U,2) Q
    69         ; Eligibility Code
    70         S ELIG=$P($G(DGP("PAT",.36)),U,1) I ELIG="" S FILERR(RULE)="" Q
    71         ;start in File #8
    72         S FILE8=$G(^DIC(8,ELIG,0)) I FILE8="" S FILERR(RULE)="" Q
    73         ;using the pointer value in field #8 (node 0; piece 9)
    74         S MPTR=$P(FILE8,U,9)
    75         ;find the record in File #8.1
    76         S FILE81=$G(^DIC(8.1,MPTR,0)) I FILE81="" S FILERR(RULE)="" Q
    77         ;check the Type field #4 (node 0; piece 5).
    78         S MTYPE=$P(FILE81,U,5)
    79         ; Pt's VET status must match NON-VET Status of Eligibility Code
    80         I VET'=MTYPE S FILERR(RULE)=""
    81         Q
    82 24      ; POS/ELIG CODE INCONSISTENT
    83         ; Note: Rule #412 in IVMZ7CE is a duplicate of this rule
    84         I '$D(^DIC(21,+$P(DGP("PAT",.32),U,3),"E",+$P(DGP("PAT",.36),U,1))) S FILERR(RULE)=""
    85         Q
    86 29      ; A&A CLAIMED, NONVET
    87         I $P(DGP("PAT","VET"),U,1)'="Y",$P($G(^DPT(DFN,.362)),U,12)="Y" S FILERR(RULE)=""
    88         Q
    89 30      ; HOUSEBOUND CLAIMED, NONVET
    90         I $P(DGP("PAT","VET"),U,1)'="Y",$P($G(^DPT(DFN,.362)),U,13)="Y" S FILERR(RULE)=""
    91         Q
    92 31      ; VA PENSION CLAIMED, NONVET
    93         I $P(DGP("PAT","VET"),U,1)'="Y",$P($G(^DPT(DFN,.362)),U,14)="Y" S FILERR(RULE)=""
    94         Q
    95 34      ; POW CLAIMED, NONVET
    96         I $P(DGP("PAT","VET"),U,1)'="Y",$P($G(^DPT(DFN,.52)),U,5)="Y" S FILERR(RULE)=""
    97         Q
    98 60      ; AGENT ORANGE EXP LOC MISSING
    99         ; Note: Rule #512 in IVMZ7CS is a duplicate of this rule.
    100         I $P(DGP("PAT",.321),U,2)="Y",$P(DGP("PAT",.321),U,13)="" S FILERR(RULE)=""
    101         Q
    102 72      ; MSE DATA MISSING/INCOMPLETE, turned off with DG*5.3*765
    103         ; Note: Rule #513 in IVMZ7CS is a duplicate of this rule.
    104         N I,X
    105         S X=DGP("PAT",.32)
    106         F I=4,5,8 I $P(X,U,I)'="",'$$YY^IVMZ7CS($P(X,U,6)) S FILERR(RULE)="" Q     ;LAST
    107         F I=9,10,13 I $P(X,U,I)'="",'$$YY^IVMZ7CS($P(X,U,11)) S FILERR(RULE)="" Q  ;NTL
    108         F I=14,15,18 I $P(X,U,I)'="",'$$YY^IVMZ7CS($P(X,U,11)) S FILERR(RULE)=""   ;NNTL
    109         Q
    110         ;
    111 74      ; CONFLICT DT MISSING/INCOMPLETE, turned off with DG*5.3*765
    112         ; Note:#515 IVMZ7CS is a duplicate, turned off with DG*5.3*771
    113 75      ; ALSO # 75 CONFLICT TO DT BEFORE FROM DT
    114 76      ;      # 76 INACCURATE CONFLICT DATE, turned off with DG*5.3*771
    115         ;
    116         N I,T,FROM,TO,NODE,PCE,PCEFR,PCETO,CONFL,RANGE,RFR,RTO,RNGE,ERR,COM,ON74,ON75,ON76
    117         S ON74=$$ON(74),ON75=$$ON(75),ON76=$$ON(76)
    118         S I=$$RANGE^DGMSCK()    ; load range table
    119         F I=1:1 S CONFL=$P($T(CONLIST+I),";;",3) Q:CONFL="QUIT"  D
    120         . ;we have to have a flag ERR because we don't want multiple
    121         . ;inconsistencies on a single conflict but we do want to
    122         . ;flag a single inconsistency on multiple conflicts
    123         . S ERR=0
    124         . S NODE=$P(CONFL,U,1),PCE=$P(CONFL,U,2),PCEFR=$P(CONFL,U,3),PCETO=$P(CONFL,U,4)
    125         . S RNGE=$P(CONFL,U,5)
    126         . Q:$P(DGP("PAT",NODE),U,PCE)'="Y"
    127         . S FROM=$P(DGP("PAT",NODE),U,PCEFR),TO=$P(DGP("PAT",NODE),U,PCETO)
    128         . ; check rule 74 CONFLICT DT MISSING/INCOMPLETE
    129         . I ON74,(RULE=74) F T=FROM,TO I '$$YM^IVMZ7CS(T) S FILERR(RULE)="",ERR=1
    130         . Q:ERR
    131         . ; check rule 75 CONFLICT TO DT BEFORE CONFLICT FROM DT
    132         . I ON75,(RULE=75),(FROM>TO) S FILERR(RULE)="",ERR=1
    133         . Q:ERR
    134         . ; check rule 76 INACCURATE CONFLICT DATE
    135         . Q:ERR
    136         . Q:'$D(RANGE(RNGE))  ; can't calculate if range table is missing
    137         . ; determine whether dates are withing conflict range
    138         . S RFR=$P(RANGE(RNGE),U,1),RTO=$P(RANGE(RNGE),U,2)
    139         . I ON76,(RULE=76) D
    140         . . I '((RFR'>FROM)&((RTO'<TO))) S FILERR(RULE)=""
    141         Q
    142 78      ; INACCURATE COMBAT DT/LOC, turned off with DG*5.3*771
    143         N I,T,FROM,TO,RULE,NODE,PCE,PCEFR,PCETO,CONFL,RANGE,RFR,RTO,RNGE,ERR,COM,ON78,LOC
    144         ; This tag checks COMBAT status and verifies that valid FROM & TO dates are found
    145         S RULE=78
    146         I '$$ON(RULE) Q
    147         S I=$$RANGE^DGMSCK()    ; load range table
    148         F I=1:1 S CONFL=$P($T(COMLIST+I),";;",3) Q:CONFL="QUIT"  D
    149         . S NODE=$P(CONFL,U,1),PCE=$P(CONFL,U,2),PCEFR=$P(CONFL,U,3),PCETO=$P(CONFL,U,4)
    150         . S RNGE=$P(CONFL,U,5)
    151         . ; if we have COMBAT data, get Service Location info, it comes under a different rule
    152         . Q:$P(DGP("PAT",NODE),U,PCE)'="Y"
    153         . S RNGE=$$COMPOW^DGRPMS($P(DGP("PAT",.52),U,12)) I $G(RNGE)="" S FILERR(RULE)="" Q
    154         . S FROM=$P(DGP("PAT",NODE),U,PCEFR),TO=$P(DGP("PAT",NODE),U,PCETO)
    155         . ; determine whether Pt dates are within conflict range for specified location
    156         . S RFR=$P(RANGE(RNGE),U,1),RTO=$P(RANGE(RNGE),U,2)
    157         . I '(RFR'>FROM&((FROM'>RTO)&((RTO'<TO)&((TO'<RFR))))) S FILERR(RULE)=""
    158         Q
    159 81      ; COMBAT DT NOT WITHIN MSE, turned off with DG*5.3*765
    160         ; this code is copied from DGRP3
    161         ; MSFROMTO^DGMSCK creates a block for a continual MSE
    162         N MSE,MSECHK,MSESET,ANYMSE,DGP81
    163         I '$P($G(DGP("PAT",.52)),U,12) Q
    164         ;
    165         ; we're calling into DG Legacy code so we have to modify some arrays
    166         M DGP81=DGP K DGP
    167         M DGP=DGP81("PAT")
    168         ; set up the check
    169         S:'$G(MSECHK) MSECHK=$$MSCK^DGMSCK S:'$G(MSESET) MSESET=$$MSFROMTO^DGMSCK
    170         ; If COMBAT, but no MSE, then Range is NOT within MSE
    171         I '$G(ANYMSE) D  Q
    172         . S FILERR(RULE)=""
    173         . K DGP M DGP=DGP81
    174         I '$$RWITHIN^DGRPDT($P(MSESET,U,1),$P(MSESET,U,2),$P($G(DGP81("PAT",.52)),U,13),$P($G(DGP81("PAT",.52)),U,14)) S FILERR(RULE)=""
    175         K DGP M DGP=DGP81
    176         Q
    177         ;
    178 83      ; BOS REQUIRES DATE W/IN WWII
    179         ; this code is copied from DGRP3
    180         N BOS,BOSN,MS,MSE,DGP83
    181         Q:'$D(DGP("PAT",.32))
    182         ; we're calling into DG Legacy code so we have to modify some arrays
    183         M DGP83=DGP K DGP
    184         M DGP=DGP83("PAT")
    185         F MS=1:1:3 D
    186         . I MS=2,$P(DGP83("PAT",.32),U,19)'="Y" Q
    187         . I MS=3,$P(DGP83("PAT",.32),U,20)'="Y" Q
    188         . S BOS=$P(DGP83("PAT",.32),U,(5*MS)) Q:'BOS  S BOSN=$P($G(^DIC(23,BOS,0)),U)
    189         . S MSE=$P("MSL^MSNTL^MSNNTL",U,MS)
    190         . I $$BRANCH^DGRPMS(BOS_U_BOSN),'$$WWII^DGRPMS(DFN,"",MSE) S FILERR(RULE)=""
    191         ; fix the arrays before we leave
    192         K DGP M DGP=DGP83
    193         Q
    194 85      ; FILIPINO VET SHOULD BE VET='Y'
    195         ; this code is copied from DGRP3
    196         N MS,BOS,FV,FILV,NOTFV,MSE,RULE2,DGVT,DGP85
    197         Q:'$D(DGP("PAT",.32))
    198         ; we're calling into DG Legacy code so we have to modify some arrays
    199         S DGVT=$P($G(DGP("PAT","VET")),U)="Y"
    200         M DGP85=DGP K DGP
    201         M DGP=DGP85("PAT")
    202         S RULE2=86   ; will also check RULE #86 INEL FIL VET SHOULD BE VET='N'
    203         F MS=1:1:3 D
    204         . I MS=2,$P(DGP85("PAT",.32),U,19)'="Y" Q
    205         . I MS=3,$P(DGP85("PAT",.32),U,20)'="Y" Q
    206         . S BOS=$P(DGP85("PAT",.32),U,(5*MS)),FV=$$FV^DGRPMS(BOS) I 'FV S NOTFV="" Q
    207         . S MSE=$P("MSL^MSNTL^MSNNTL",U,MS)
    208         . I '$$WWII^DGRPMS(DFN,"",MSE) S FILV("I")="" Q
    209         . I FV=2 S FILV("E")="" Q
    210         . I $P(DGP85("PAT",.321),U,14)=""!($P(DGP85("PAT",.321),U,14)="NO") S FILV("I")="" Q
    211         . S FILV("E")=""
    212         I $D(FILV) D
    213         . I DGVT'=1,$D(FILV("E")) S FILERR(RULE)=""
    214         . I DGVT=1,'$D(NOTFV),'$D(FILV("E")),$D(FILV("I")) S FILERR(RULE2)=""
    215         ; fix the arrays before we leave
    216         K DGP M DGP=DGP85
    217         Q
    218 86      ; INEL FIL VET SHOULD BE VET='N'
    219         ; This rule is satisfied in #85 above
    220         Q
    221 ON(RULE)        ;verify RULE is turned on
    222         N ON,Y
    223         S ON=0
    224         S Y=^DGIN(38.6,RULE,0)
    225         I '$P(Y,U,5),$P(Y,U,6) S ON=1
    226         Q ON
    227 CONLIST ;;CONFLICT;;NODE^PIECE^FROM^TO^RANGE  -- offset list, do not add comments
    228         ;;VIETNAM;;.321^1^4^5^VIET
    229         ;;LEBANON;;.322^1^2^3^LEB
    230         ;;GRENADA;;.322^4^5^6^GREN
    231         ;;PANAMA;;.322^7^8^9^PAN
    232         ;;PERSIAN GULF;;.322^10^11^12^GULF
    233         ;;SOMALIA;;.322^16^17^18^SOM
    234         ;;YUGOSLAVIA;;.322^19^20^21^YUG
    235         ;;QUIT;;QUIT
    236 COMLIST ;;COMBAT;;NODE^PIECE^FROM^TO^RANGE  -- offset list, do not add comments
    237         ;;WWI;;.52^11^13^14^WWI
    238         ;;WWIIE;;.52^11^13^14^WWIIE
    239         ;;WWIIP;;.52^11^13^14^WWIIP
    240         ;;KOREA;;.52^11^13^14^KOR
    241         ;;OTHER;;.52^11^13^14^OTHER
    242         ;;VIETNAM;;.52^11^13^14^VIET
    243         ;;LEBANON;;.52^11^13^14^LEB
    244         ;;GRENADA;;.52^11^13^14^GREN
    245         ;;PANAMA;;.52^11^13^14^PAN
    246         ;;PERSIAN GULF;;.52^11^13^14^GULF
    247         ;;SOMALIA;;.52^11^13^14^SOM
    248         ;;YUGOSLAVIA;;.52^11^13^14^YUG
    249         ;;QUIT;;QUIT
     1IVMZ7CR ;BAJ - HL7 Z07 CONSISTENCY CHECKER -- REGISTRATION SUBROUTINE ; 12/7/05 12:24pm
     2 ;;2.0;INCOME VERIFICATION MATCH;**105**;JUL 8,1996;Build 2
     3 ;
     4 ; Registration Consistency Checks
     5 Q       ; Entry point must be specified
     6EN(DFN,DGP,DGSD) ;Entry point
     7 ;  input:  DFN - Patient IEN
     8 ;          DGP - Patient data array
     9 ;          DGSD - Spouse and Dependent data array
     10 ; output: ^TMP($J,DFN,RULE) global
     11 ;          DFN - Patient IEN
     12 ;          RULE - Consistency rule #
     13 ;initialize variables
     14 N RULE,Y,X,FILERR,SPDEP
     15 S SPDEP=$D(DGSD("DEP"))
     16 ; we do not count through all numbers to save routine space
     17 F RULE=4,7,9,11,13,15,16,19,24,29:1:31,34,60,72,74,78,81,83,85,86 I $D(^DGIN(38.6,RULE)) D
     18 . I $$ON(RULE) D @RULE
     19 I $D(FILERR) M ^TMP($J,DFN)=FILERR
     20 Q
     214 ; DOB UNSPECIFIED
     22 ; Note: RULE #302 in IVMZ7CD is a duplicate of this rule
     23 N RIEN
     24 I $P($G(DGP("PAT",0)),U,3)="" S FILERR(RULE)=""
     25 I 'SPDEP Q
     26 S RIEN=0 F  S RIEN=$O(DGSD("DEP",RIEN)) Q:RIEN=""  D
     27 . I $P(DGSD("DEP",RIEN,0),U,3)="" S FILERR(RULE)=""
     28 Q
     297 ; SSN UNSPECIFIED
     30 ; Note: RULE #305 in IVMZ7CD is a duplicate of this rule
     31 I $P($G(DGP("PAT",0)),U,9)="" S FILERR(RULE)=""
     32 Q
     339 ; VETERAN STATUS UNSPECIFIED
     34 I $P($G(DGP("PAT","VET")),U)="" S FILERR(RULE)=""
     35 Q
     3611 ; SC PROMPT INCONSISTENT
     37 N VET,SC,PTYPE
     38 ; If VET Status is not specified (RULE 9) no need for this test
     39 Q:$P($G(DGP("PAT","VET")),U)=""
     40 S VET=$P(DGP("PAT","VET"),U,1)="Y",SC=$P(DGP("PAT",.3),U,1)="Y"
     41 I 'VET,SC S FILERR(RULE)=""
     42 Q
     4313 ; POS UNSPECIFIED
     44 ; Note: Rule #413 IN IVMZ7CE is a duplicate of this rule
     45 Q:$P($G(DGP("PAT","VET")),U,1)'="Y"
     46 ; Make sure that the value in the field is valid -- DGRPC does this as well
     47 I '$D(^DIC(21,+$P(DGP("PAT",.32),U,3),0)) S FILERR(RULE)=""
     48 Q
     4915 ; INEL REASON UNSPECIFIED
     50 ; Note: Rule #404 IN IVMZ7CE is a duplicate of this rule
     51 I $P(DGP("PAT",.15),U,2),$P($G(DGP("PAT",.3)),U,7)="" S FILERR(RULE)=""
     52 Q
     5316 ; DATE OF DEATH IN FUTURE
     54 ; Note: Rule #308 IN IVMZ7CD is a duplicate of this rule
     55 S X=$P($G(DGP("PAT",.35)),U) I X']"" Q
     56 ; Compare DOD to right now
     57 I X>$$DT^XLFDT S FILERR(RULE)=""
     58 Q
     5919 ; ELIG/NONVET STAT INCONSISTENT
     60 ; Note: Rule #405 in IVMZ7CE is a duplicate of this rule
     61 N VET,ELIG,FILE8,FILE81,MPTR,MTYPE,PTYPE
     62 ; Patient's VET status
     63 S VET=$P($G(DGP("PAT","VET")),U,1) I VET="" S FILERR(RULE)="" Q
     64 ; do this check for NON-VET status only
     65 Q:VET="Y"
     66 ; Check PT type to see if we skip VET checks
     67 S PTYPE=$P($G(DGP("PAT","TYPE")),U,1)
     68 I PTYPE]"",$P(^DG(391,PTYPE,0),U,2) Q
     69 ; Eligibility Code
     70 S ELIG=$P($G(DGP("PAT",.36)),U,1) I ELIG="" S FILERR(RULE)="" Q
     71 ;start in File #8
     72 S FILE8=$G(^DIC(8,ELIG,0)) I FILE8="" S FILERR(RULE)="" Q
     73 ;using the pointer value in field #8 (node 0; piece 9)
     74 S MPTR=$P(FILE8,U,9)
     75 ;find the record in File #8.1
     76 S FILE81=$G(^DIC(8.1,MPTR,0)) I FILE81="" S FILERR(RULE)="" Q
     77 ;check the Type field #4 (node 0; piece 5).
     78 S MTYPE=$P(FILE81,U,5)
     79 ; Pt's VET status must match NON-VET Status of Eligibility Code
     80 I VET'=MTYPE S FILERR(RULE)=""
     81 Q
     8224 ; POS/ELIG CODE INCONSISTENT
     83 ; Note: Rule #412 in IVMZ7CE is a duplicate of this rule
     84 I '$D(^DIC(21,+$P(DGP("PAT",.32),U,3),"E",+$P(DGP("PAT",.36),U,1))) S FILERR(RULE)=""
     85 Q
     8629 ; A&A CLAIMED, NONVET
     87 I $P(DGP("PAT","VET"),U,1)'="Y",$P($G(^DPT(DFN,.362)),U,12)="Y" S FILERR(RULE)=""
     88 Q
     8930 ; HOUSEBOUND CLAIMED, NONVET
     90 I $P(DGP("PAT","VET"),U,1)'="Y",$P($G(^DPT(DFN,.362)),U,13)="Y" S FILERR(RULE)=""
     91 Q
     9231 ; VA PENSION CLAIMED, NONVET
     93 I $P(DGP("PAT","VET"),U,1)'="Y",$P($G(^DPT(DFN,.362)),U,14)="Y" S FILERR(RULE)=""
     94 Q
     9534 ; POW CLAIMED, NONVET
     96 I $P(DGP("PAT","VET"),U,1)'="Y",$P($G(^DPT(DFN,.52)),U,5)="Y" S FILERR(RULE)=""
     97 Q
     9860 ; AGENT ORANGE EXP LOC MISSING
     99 ; Note: Rule #512 in IVMZ7CS is a duplicate of this rule.
     100 I $P(DGP("PAT",.321),U,2)="Y",$P(DGP("PAT",.321),U,13)="" S FILERR(RULE)=""
     101 Q
     10272 ; MSE DATA MISSING/INCOMPLETE
     103 ; Note: Rule #513 in IVMZ7CS is a duplicate of this rule.
     104 N I,X
     105 S X=DGP("PAT",.32)
     106 F I=4,5,8 I $P(X,U,I)'="",'$$YY^IVMZ7CS($P(X,U,6)) S FILERR(RULE)="" Q     ;LAST
     107 F I=9,10,13 I $P(X,U,I)'="",'$$YY^IVMZ7CS($P(X,U,11)) S FILERR(RULE)="" Q  ;NTL
     108 F I=14,15,18 I $P(X,U,I)'="",'$$YY^IVMZ7CS($P(X,U,11)) S FILERR(RULE)=""   ;NNTL
     109 Q
     110 ;
     11174 ; CONFLICT DT MISSING/INCOMPLETE
     112 ; Note: Rule #515 in IVMZ7CS is a duplicate of this rule.
     113 ; ALSO # 75 CONFLICT TO DT BEFORE FROM DT
     114 ;      # 76 INACCURATE CONFLICT DATE
     115 ;
     116 N I,T,FROM,TO,RULE1,RULE2,NODE,PCE,PCEFR,PCETO,CONFL,RANGE,RFR,RTO,RNGE,ERR,COM,ON75,ON76
     117 S RULE1=75,RULE2=76
     118 S ON75=$$ON(75),ON76=$$ON(76)
     119 S I=$$RANGE^DGMSCK()    ; load range table
     120 F I=1:1 S CONFL=$P($T(CONLIST+I),";;",3) Q:CONFL="QUIT"  D
     121 . ;we have to have a flag ERR because we don't want multiple
     122 . ;inconsistencies on a single conflict but we do want to
     123 . ;flag a single inconsistency on multiple conflicts
     124 . S ERR=0
     125 . S NODE=$P(CONFL,U,1),PCE=$P(CONFL,U,2),PCEFR=$P(CONFL,U,3),PCETO=$P(CONFL,U,4)
     126 . S RNGE=$P(CONFL,U,5)
     127 . Q:$P(DGP("PAT",NODE),U,PCE)'="Y"
     128 . S FROM=$P(DGP("PAT",NODE),U,PCEFR),TO=$P(DGP("PAT",NODE),U,PCETO)
     129 . ; check rule 74 CONFLICT DT MISSING/INCOMPLETE
     130 . F T=FROM,TO I '$$YM^IVMZ7CS(T) S FILERR(RULE)="",ERR=1
     131 . Q:ERR
     132 . ; check rule 75 CONFLICT TO DT BEFORE CONFLICT FROM DT
     133 . I ON75,FROM>TO S FILERR(RULE1)="",ERR=1
     134 . Q:ERR
     135 . ; check rule 76 INACCURATE CONFLICT DATE
     136 . Q:ERR
     137 . Q:'$D(RANGE(RNGE))  ; can't calculate if range table is missing
     138 . ; determine whether dates are withing conflict range
     139 . S RFR=$P(RANGE(RNGE),U,1),RTO=$P(RANGE(RNGE),U,2)
     140 . I ON76 D
     141 . . I '((RFR'>FROM)&((RTO'<TO))) S FILERR(RULE2)=""
     142 Q
     14378 ; INACCURATE COMBAT DT/LOC
     144 N I,T,FROM,TO,RULE,NODE,PCE,PCEFR,PCETO,CONFL,RANGE,RFR,RTO,RNGE,ERR,COM,ON78,LOC
     145 ; This tag checks COMBAT status and verifies that valid FROM & TO dates are found
     146 S RULE=78
     147 I '$$ON(RULE) Q
     148 S I=$$RANGE^DGMSCK()    ; load range table
     149 F I=1:1 S CONFL=$P($T(COMLIST+I),";;",3) Q:CONFL="QUIT"  D
     150 . S NODE=$P(CONFL,U,1),PCE=$P(CONFL,U,2),PCEFR=$P(CONFL,U,3),PCETO=$P(CONFL,U,4)
     151 . S RNGE=$P(CONFL,U,5)
     152 . ; if we have COMBAT data, get Service Location info, it comes under a different rule
     153 . Q:$P(DGP("PAT",NODE),U,PCE)'="Y"
     154 . S RNGE=$$COMPOW^DGRPMS($P(DGP("PAT",.52),U,12)) I $G(RNGE)="" S FILERR(RULE)="" Q
     155 . S FROM=$P(DGP("PAT",NODE),U,PCEFR),TO=$P(DGP("PAT",NODE),U,PCETO)
     156 . ; determine whether Pt dates are within conflict range for specified location
     157 . S RFR=$P(RANGE(RNGE),U,1),RTO=$P(RANGE(RNGE),U,2)
     158 . I '(RFR'>FROM&((FROM'>RTO)&((RTO'<TO)&((TO'<RFR))))) S FILERR(RULE)=""
     159 Q
     16081 ; COMBAT DT NOT WITHIN MSE
     161 ; this code is copied from DGRP3
     162 ; MSFROMTO^DGMSCK creates a block for a continual MSE
     163 N MSE,MSECHK,MSESET,ANYMSE,DGP81
     164 I '$P($G(DGP("PAT",.52)),U,12) Q
     165 ;
     166 ; we're calling into DG Legacy code so we have to modify some arrays
     167 M DGP81=DGP K DGP
     168 M DGP=DGP81("PAT")
     169 ; set up the check
     170 S:'$G(MSECHK) MSECHK=$$MSCK^DGMSCK S:'$G(MSESET) MSESET=$$MSFROMTO^DGMSCK
     171 ; If COMBAT, but no MSE, then Range is NOT within MSE
     172 I '$G(ANYMSE) D  Q
     173 . S FILERR(RULE)=""
     174 . K DGP M DGP=DGP81
     175 I '$$RWITHIN^DGRPDT($P(MSESET,U,1),$P(MSESET,U,2),$P($G(DGP81("PAT",.52)),U,13),$P($G(DGP81("PAT",.52)),U,14)) S FILERR(RULE)=""
     176 K DGP M DGP=DGP81
     177 Q
     178 ;
     17983 ; BOS REQUIRES DATE W/IN WWII
     180 ; this code is copied from DGRP3
     181 N BOS,BOSN,MS,MSE,DGP83
     182 Q:'$D(DGP("PAT",.32))
     183 ; we're calling into DG Legacy code so we have to modify some arrays
     184 M DGP83=DGP K DGP
     185 M DGP=DGP83("PAT")
     186 F MS=1:1:3 D
     187 . I MS=2,$P(DGP83("PAT",.32),U,19)'="Y" Q
     188 . I MS=3,$P(DGP83("PAT",.32),U,20)'="Y" Q
     189 . S BOS=$P(DGP83("PAT",.32),U,(5*MS)) Q:'BOS  S BOSN=$P($G(^DIC(23,BOS,0)),U)
     190 . S MSE=$P("MSL^MSNTL^MSNNTL",U,MS)
     191 . I $$BRANCH^DGRPMS(BOS_U_BOSN),'$$WWII^DGRPMS(DFN,"",MSE) S FILERR(RULE)=""
     192 ; fix the arrays before we leave
     193 K DGP M DGP=DGP83
     194 Q
     19585 ; FILIPINO VET SHOULD BE VET='Y'
     196 ; this code is copied from DGRP3
     197 N MS,BOS,FV,FILV,NOTFV,MSE,RULE2,DGVT,DGP85
     198 Q:'$D(DGP("PAT",.32))
     199 ; we're calling into DG Legacy code so we have to modify some arrays
     200 S DGVT=$P($G(DGP("PAT","VET")),U)="Y"
     201 M DGP85=DGP K DGP
     202 M DGP=DGP85("PAT")
     203 S RULE2=86   ; will also check RULE #86 INEL FIL VET SHOULD BE VET='N'
     204 F MS=1:1:3 D
     205 . I MS=2,$P(DGP85("PAT",.32),U,19)'="Y" Q
     206 . I MS=3,$P(DGP85("PAT",.32),U,20)'="Y" Q
     207 . S BOS=$P(DGP85("PAT",.32),U,(5*MS)),FV=$$FV^DGRPMS(BOS) I 'FV S NOTFV="" Q
     208 . S MSE=$P("MSL^MSNTL^MSNNTL",U,MS)
     209 . I '$$WWII^DGRPMS(DFN,"",MSE) S FILV("I")="" Q
     210 . I FV=2 S FILV("E")="" Q
     211 . I $P(DGP85("PAT",.321),U,14)=""!($P(DGP85("PAT",.321),U,14)="NO") S FILV("I")="" Q
     212 . S FILV("E")=""
     213 I $D(FILV) D
     214 . I DGVT'=1,$D(FILV("E")) S FILERR(RULE)=""
     215 . I DGVT=1,'$D(NOTFV),'$D(FILV("E")),$D(FILV("I")) S FILERR(RULE2)=""
     216 ; fix the arrays before we leave
     217 K DGP M DGP=DGP85
     218 Q
     21986 ; INEL FIL VET SHOULD BE VET='N'
     220 ; This rule is satisfied in #85 above
     221 Q
     222ON(RULE) ;verify RULE is turned on
     223 N ON,Y
     224 S ON=0
     225 S Y=^DGIN(38.6,RULE,0)
     226 I '$P(Y,U,5),$P(Y,U,6) S ON=1
     227 Q ON
     228CONLIST ;;CONFLICT;;NODE^PIECE^FROM^TO^RANGE  -- offset list, do not add comments
     229 ;;VIETNAM;;.321^1^4^5^VIET
     230 ;;LEBANON;;.322^1^2^3^LEB
     231 ;;GRENADA;;.322^4^5^6^GREN
     232 ;;PANAMA;;.322^7^8^9^PAN
     233 ;;PERSIAN GULF;;.322^10^11^12^GULF
     234 ;;SOMALIA;;.322^16^17^18^SOM
     235 ;;YUGOSLAVIA;;.322^19^20^21^YUG
     236 ;;QUIT;;QUIT
     237COMLIST ;;COMBAT;;NODE^PIECE^FROM^TO^RANGE  -- offset list, do not add comments
     238 ;;WWI;;.52^11^13^14^WWI
     239 ;;WWIIE;;.52^11^13^14^WWIIE
     240 ;;WWIIP;;.52^11^13^14^WWIIP
     241 ;;KOREA;;.52^11^13^14^KOR
     242 ;;OTHER;;.52^11^13^14^OTHER
     243 ;;VIETNAM;;.52^11^13^14^VIET
     244 ;;LEBANON;;.52^11^13^14^LEB
     245 ;;GRENADA;;.52^11^13^14^GREN
     246 ;;PANAMA;;.52^11^13^14^PAN
     247 ;;PERSIAN GULF;;.52^11^13^14^GULF
     248 ;;SOMALIA;;.52^11^13^14^SOM
     249 ;;YUGOSLAVIA;;.52^11^13^14^YUG
     250 ;;QUIT;;QUIT
Note: See TracChangeset for help on using the changeset viewer.