Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: IVMZ7CR

IVMZ7CR.m

Go to the documentation of this file.
  1. IVMZ7CR ;BAJ,ERC - HL7 Z07 CONSISTENCY CHECKER -- REGISTRATION SUBROUTINE ; 12/6/07 8:51am
  1. ;;2.0;INCOME VERIFICATION MATCH;**105,127,132,153**;JUL 8,1996;Build 2
  1. ;
  1. ; Registration Consistency Checks
  1. Q ; Entry point must be specified
  1. EN(DFN,DGP,DGSD) ;Entry point
  1. ; input: DFN - Patient IEN
  1. ; DGP - Patient data array
  1. ; DGSD - Spouse and Dependent data array
  1. ; output: ^TMP($J,DFN,RULE) global
  1. ; DFN - Patient IEN
  1. ; RULE - Consistency rule #
  1. ;initialize variables
  1. N RULE,Y,X,FILERR,SPDEP
  1. S SPDEP=$D(DGSD("DEP"))
  1. ; we do not count through all numbers to save routine space
  1. 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
  1. . I $$ON(RULE) D @RULE
  1. I $D(FILERR) M ^TMP($J,DFN)=FILERR
  1. Q
  1. 4 ; DOB UNSPECIFIED
  1. ; Note: RULE #302 in IVMZ7CD is a duplicate of this rule
  1. N RIEN
  1. I $P($G(DGP("PAT",0)),U,3)="" S FILERR(RULE)=""
  1. I 'SPDEP Q
  1. S RIEN=0 F S RIEN=$O(DGSD("DEP",RIEN)) Q:RIEN="" D
  1. . I $P(DGSD("DEP",RIEN,0),U,3)="" S FILERR(RULE)=""
  1. Q
  1. 7 ; SSN UNSPECIFIED
  1. ; Note: RULE #305 in IVMZ7CD is a duplicate of this rule
  1. I $P($G(DGP("PAT",0)),U,9)="" S FILERR(RULE)=""
  1. Q
  1. 9 ; VETERAN STATUS UNSPECIFIED
  1. I $P($G(DGP("PAT","VET")),U)="" S FILERR(RULE)=""
  1. Q
  1. 11 ; SC PROMPT INCONSISTENT
  1. N VET,SC,PTYPE
  1. ; If VET Status is not specified (RULE 9) no need for this test
  1. Q:$P($G(DGP("PAT","VET")),U)=""
  1. S VET=$P(DGP("PAT","VET"),U,1)="Y",SC=$P(DGP("PAT",.3),U,1)="Y"
  1. I 'VET,SC S FILERR(RULE)=""
  1. Q
  1. 13 ; POS UNSPECIFIED
  1. ; Note: Rule #413 IN IVMZ7CE is a duplicate of this rule
  1. Q:$P($G(DGP("PAT","VET")),U,1)'="Y"
  1. ; Make sure that the value in the field is valid -- DGRPC does this as well
  1. I '$D(^DIC(21,+$P(DGP("PAT",.32),U,3),0)) S FILERR(RULE)=""
  1. Q
  1. 15 ; INEL REASON UNSPECIFIED
  1. ; Note: Rule #404 IN IVMZ7CE is a duplicate of this rule
  1. I $P(DGP("PAT",.15),U,2),$P($G(DGP("PAT",.3)),U,7)="" S FILERR(RULE)=""
  1. Q
  1. 16 ; DATE OF DEATH IN FUTURE
  1. ; Note: Rule #308 IN IVMZ7CD is a duplicate of this rule
  1. S X=$P($G(DGP("PAT",.35)),U) I X']"" Q
  1. ; Compare DOD to right now
  1. I X>$$NOW^XLFDT S FILERR(RULE)=""
  1. Q
  1. 19 ; ELIG/NONVET STAT INCONSISTENT
  1. ; Note: Rule #405 in IVMZ7CE is a duplicate of this rule
  1. N VET,ELIG,FILE8,FILE81,MPTR,MTYPE,PTYPE
  1. ; Patient's VET status
  1. S VET=$P($G(DGP("PAT","VET")),U,1) I VET="" S FILERR(RULE)="" Q
  1. ; do this check for NON-VET status only
  1. Q:VET="Y"
  1. ; Check PT type to see if we skip VET checks
  1. S PTYPE=$P($G(DGP("PAT","TYPE")),U,1)
  1. I PTYPE]"",$P(^DG(391,PTYPE,0),U,2) Q
  1. ; Eligibility Code
  1. S ELIG=$P($G(DGP("PAT",.36)),U,1) I ELIG="" S FILERR(RULE)="" Q
  1. ;start in File #8
  1. S FILE8=$G(^DIC(8,ELIG,0)) I FILE8="" S FILERR(RULE)="" Q
  1. ;using the pointer value in field #8 (node 0; piece 9)
  1. S MPTR=$P(FILE8,U,9)
  1. ;find the record in File #8.1
  1. S FILE81=$G(^DIC(8.1,MPTR,0)) I FILE81="" S FILERR(RULE)="" Q
  1. ;check the Type field #4 (node 0; piece 5).
  1. S MTYPE=$P(FILE81,U,5)
  1. ; Pt's VET status must match NON-VET Status of Eligibility Code
  1. I VET'=MTYPE S FILERR(RULE)=""
  1. Q
  1. 24 ; POS/ELIG CODE INCONSISTENT
  1. ; Note: Rule #412 in IVMZ7CE is a duplicate of this rule
  1. I '$D(^DIC(21,+$P(DGP("PAT",.32),U,3),"E",+$P(DGP("PAT",.36),U,1))) S FILERR(RULE)=""
  1. Q
  1. 29 ; A&A CLAIMED, NONVET
  1. I $P(DGP("PAT","VET"),U,1)'="Y",$P($G(^DPT(DFN,.362)),U,12)="Y" S FILERR(RULE)=""
  1. Q
  1. 30 ; HOUSEBOUND CLAIMED, NONVET
  1. I $P(DGP("PAT","VET"),U,1)'="Y",$P($G(^DPT(DFN,.362)),U,13)="Y" S FILERR(RULE)=""
  1. Q
  1. 31 ; VA PENSION CLAIMED, NONVET
  1. I $P(DGP("PAT","VET"),U,1)'="Y",$P($G(^DPT(DFN,.362)),U,14)="Y" S FILERR(RULE)=""
  1. Q
  1. 34 ; POW CLAIMED, NONVET
  1. I $P(DGP("PAT","VET"),U,1)'="Y",$P($G(^DPT(DFN,.52)),U,5)="Y" S FILERR(RULE)=""
  1. Q
  1. 60 ; AGENT ORANGE EXP LOC MISSING
  1. ; Note: Rule #512 in IVMZ7CS is a duplicate of this rule.
  1. I $P(DGP("PAT",.321),U,2)="Y",$P(DGP("PAT",.321),U,13)="" S FILERR(RULE)=""
  1. Q
  1. 72 ; MSE DATA MISSING/INCOMPLETE, turned off with DG*5.3*765
  1. ; Note: Rule #513 in IVMZ7CS is a duplicate of this rule.
  1. N I,X
  1. S X=DGP("PAT",.32)
  1. F I=4,5,8 I $P(X,U,I)'="",'$$YY^IVMZ7CS($P(X,U,6)) S FILERR(RULE)="" Q ;LAST
  1. F I=9,10,13 I $P(X,U,I)'="",'$$YY^IVMZ7CS($P(X,U,11)) S FILERR(RULE)="" Q ;NTL
  1. F I=14,15,18 I $P(X,U,I)'="",'$$YY^IVMZ7CS($P(X,U,11)) S FILERR(RULE)="" ;NNTL
  1. Q
  1. ;
  1. 74 ; CONFLICT DT MISSING/INCOMPLETE, turned off with DG*5.3*765
  1. ; Note:#515 IVMZ7CS is a duplicate, turned off with DG*5.3*771
  1. 75 ; ALSO # 75 CONFLICT TO DT BEFORE FROM DT
  1. 76 ; # 76 INACCURATE CONFLICT DATE, turned off with DG*5.3*771
  1. ;
  1. N I,T,FROM,TO,NODE,PCE,PCEFR,PCETO,CONFL,RANGE,RFR,RTO,RNGE,ERR,COM,ON74,ON75,ON76
  1. S ON74=$$ON(74),ON75=$$ON(75),ON76=$$ON(76)
  1. S I=$$RANGE^DGMSCK() ; load range table
  1. F I=1:1 S CONFL=$P($T(CONLIST+I),";;",3) Q:CONFL="QUIT" D
  1. . ;we have to have a flag ERR because we don't want multiple
  1. . ;inconsistencies on a single conflict but we do want to
  1. . ;flag a single inconsistency on multiple conflicts
  1. . S ERR=0
  1. . S NODE=$P(CONFL,U,1),PCE=$P(CONFL,U,2),PCEFR=$P(CONFL,U,3),PCETO=$P(CONFL,U,4)
  1. . S RNGE=$P(CONFL,U,5)
  1. . Q:$P(DGP("PAT",NODE),U,PCE)'="Y"
  1. . S FROM=$P(DGP("PAT",NODE),U,PCEFR),TO=$P(DGP("PAT",NODE),U,PCETO)
  1. . ; check rule 74 CONFLICT DT MISSING/INCOMPLETE
  1. . I ON74,(RULE=74) F T=FROM,TO I '$$YM^IVMZ7CS(T) S FILERR(RULE)="",ERR=1
  1. . Q:ERR
  1. . ; check rule 75 CONFLICT TO DT BEFORE CONFLICT FROM DT
  1. . I ON75,(RULE=75),(FROM>TO) S FILERR(RULE)="",ERR=1
  1. . Q:ERR
  1. . ; check rule 76 INACCURATE CONFLICT DATE
  1. . Q:ERR
  1. . Q:'$D(RANGE(RNGE)) ; can't calculate if range table is missing
  1. . ; determine whether dates are withing conflict range
  1. . S RFR=$P(RANGE(RNGE),U,1),RTO=$P(RANGE(RNGE),U,2)
  1. . I ON76,(RULE=76) D
  1. . . I '((RFR'>FROM)&((RTO'<TO))) S FILERR(RULE)=""
  1. Q
  1. 78 ; INACCURATE COMBAT DT/LOC, turned off with DG*5.3*771
  1. N I,T,FROM,TO,RULE,NODE,PCE,PCEFR,PCETO,CONFL,RANGE,RFR,RTO,RNGE,ERR,COM,ON78,LOC
  1. ; This tag checks COMBAT status and verifies that valid FROM & TO dates are found
  1. S RULE=78
  1. I '$$ON(RULE) Q
  1. S I=$$RANGE^DGMSCK() ; load range table
  1. F I=1:1 S CONFL=$P($T(COMLIST+I),";;",3) Q:CONFL="QUIT" D
  1. . S NODE=$P(CONFL,U,1),PCE=$P(CONFL,U,2),PCEFR=$P(CONFL,U,3),PCETO=$P(CONFL,U,4)
  1. . S RNGE=$P(CONFL,U,5)
  1. . ; if we have COMBAT data, get Service Location info, it comes under a different rule
  1. . Q:$P(DGP("PAT",NODE),U,PCE)'="Y"
  1. . S RNGE=$$COMPOW^DGRPMS($P(DGP("PAT",.52),U,12)) I $G(RNGE)="" S FILERR(RULE)="" Q
  1. . S FROM=$P(DGP("PAT",NODE),U,PCEFR),TO=$P(DGP("PAT",NODE),U,PCETO)
  1. . ; determine whether Pt dates are within conflict range for specified location
  1. . S RFR=$P(RANGE(RNGE),U,1),RTO=$P(RANGE(RNGE),U,2)
  1. . I '(RFR'>FROM&((FROM'>RTO)&((RTO'<TO)&((TO'<RFR))))) S FILERR(RULE)=""
  1. Q
  1. 81 ; COMBAT DT NOT WITHIN MSE, turned off with DG*5.3*765
  1. ; this code is copied from DGRP3
  1. ; MSFROMTO^DGMSCK creates a block for a continual MSE
  1. N MSE,MSECHK,MSESET,ANYMSE,DGP81
  1. I '$P($G(DGP("PAT",.52)),U,12) Q
  1. ;
  1. ; we're calling into DG Legacy code so we have to modify some arrays
  1. M DGP81=DGP K DGP
  1. M DGP=DGP81("PAT")
  1. ; set up the check
  1. S:'$G(MSECHK) MSECHK=$$MSCK^DGMSCK S:'$G(MSESET) MSESET=$$MSFROMTO^DGMSCK
  1. ; If COMBAT, but no MSE, then Range is NOT within MSE
  1. I '$G(ANYMSE) D Q
  1. . S FILERR(RULE)=""
  1. . K DGP M DGP=DGP81
  1. 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)=""
  1. K DGP M DGP=DGP81
  1. Q
  1. ;
  1. 83 ; BOS REQUIRES DATE W/IN WWII
  1. ; this code is copied from DGRP3
  1. N BOS,BOSN,MS,MSE,DGP83,OUT
  1. ;IVM*2*153 uses mse data from DGPMSE array, if it exists
  1. I $D(DGPMSE) D Q
  1. .S MS=0 F S MS=$O(DGPMSE(MS)) Q:'MS!($G(OUT)) D
  1. ..I $P(DGPMSE(MS),U,7) Q ;Don't check MSE if verified by HEC
  1. ..S BOS=$P(DGPMSE(MS),U,3) Q:'BOS S BOSN=$P(^DIC(23,BOS,0),U)
  1. ..S MSE=$O(DGPMSE(MS,0)) Q:'MSE S MSE="MSE-"_MSE
  1. ..I $$BRANCH^DGRPMS(BOS_U_BOSN),'$$WWII^DGRPMS(DFN,"",MSE) S FILERR(RULE)="",OUT=1 Q
  1. ;Otherwise, get MSE data from DGP("PAT",.32)
  1. Q:'$D(DGP("PAT",.32))
  1. ; we're calling into DG Legacy code so we have to modify some arrays
  1. M DGP83=DGP K DGP
  1. M DGP=DGP83("PAT")
  1. F MS=1:1:3 D
  1. . I MS=2,$P(DGP83("PAT",.32),U,19)'="Y" Q
  1. . I MS=3,$P(DGP83("PAT",.32),U,20)'="Y" Q
  1. . S BOS=$P(DGP83("PAT",.32),U,(5*MS)) Q:'BOS S BOSN=$P($G(^DIC(23,BOS,0)),U)
  1. . S MSE=$P("MSL^MSNTL^MSNNTL",U,MS)
  1. . I $$BRANCH^DGRPMS(BOS_U_BOSN),'$$WWII^DGRPMS(DFN,"",MSE) S FILERR(RULE)=""
  1. ; fix the arrays before we leave
  1. K DGP M DGP=DGP83
  1. Q
  1. 85 ; FILIPINO VET SHOULD BE VET='Y'
  1. ; this code is copied from DGRP3
  1. N MS,BOS,FV,FILV,NOTFV,MSE,RULE2,DGVT,DGP85
  1. ;IVM*2*153 use mse data from DGPMSE array, if it exists
  1. ; we're calling into DG Legacy code so we have to modify some arrays
  1. S DGVT=$P($G(DGP("PAT","VET")),U)="Y"
  1. S RULE2=86 ; will also check RULE #86 INEL FIL VET SHOULD BE VET='N'
  1. I $D(DGPMSE) D
  1. .S MS=0 F S MS=$O(DGPMSE(MS)) Q:'MS D
  1. ..I $P(DGPMSE(MS),U,7) Q ;Don't check MSE if verified by HEC
  1. ..S BOS=$P(DGPMSE(MS),U,3),FV=$$FV^DGRPMS(BOS) I 'FV S NOTFV="" Q
  1. ..S MSE=$O(DGPMSE(MS,0)) Q:'MSE S MSE="MSE-"_MSE
  1. ..I '$$WWII^DGRPMS(DFN,"",MSE) S FILV("I")="" Q
  1. ..I FV=2 S FILV("E")="" Q
  1. ..I $P(DGP("PAT",.321),U,14)=""!($P(DGP("PAT",.321),U,14)="NO") S FILV("I")="" Q
  1. ..S FILV("E")=""
  1. ;Otherwise, get MSE data from DGP(.32)
  1. E I $D(DGP("PAT",.32)) D
  1. .; we're calling into DG Legacy code so we have to modify some arrays
  1. .M DGP85=DGP K DGP
  1. .M DGP=DGP85("PAT")
  1. .F MS=1:1:3 D
  1. ..I MS=2,$P(DGP85("PAT",.32),U,19)'="Y" Q
  1. ..I MS=3,$P(DGP85("PAT",.32),U,20)'="Y" Q
  1. ..S BOS=$P(DGP85("PAT",.32),U,(5*MS)),FV=$$FV^DGRPMS(BOS) I 'FV S NOTFV="" Q
  1. ..S MSE=$P("MSL^MSNTL^MSNNTL",U,MS)
  1. ..I '$$WWII^DGRPMS(DFN,"",MSE) S FILV("I")="" Q
  1. ..I FV=2 S FILV("E")="" Q
  1. ..I $P(DGP85("PAT",.321),U,14)=""!($P(DGP85("PAT",.321),U,14)="NO") S FILV("I")="" Q
  1. ..S FILV("E")=""
  1. .; fix the arrays
  1. .K DGP M DGP=DGP85
  1. I $D(FILV) D
  1. . I DGVT'=1,$D(FILV("E")) S FILERR(RULE)=""
  1. . I DGVT=1,'$D(NOTFV),'$D(FILV("E")),$D(FILV("I")) S FILERR(RULE2)=""
  1. Q
  1. 86 ; INEL FIL VET SHOULD BE VET='N'
  1. ; This rule is satisfied in #85 above
  1. Q
  1. ON(RULE) ;verify RULE is turned on
  1. N ON,Y
  1. S ON=0
  1. S Y=^DGIN(38.6,RULE,0)
  1. I $P(Y,U,6) S ON=1
  1. Q ON
  1. CONLIST ;;CONFLICT;;NODE^PIECE^FROM^TO^RANGE -- offset list, do not add comments
  1. ;;VIETNAM;;.321^1^4^5^VIET
  1. ;;LEBANON;;.322^1^2^3^LEB
  1. ;;GRENADA;;.322^4^5^6^GREN
  1. ;;PANAMA;;.322^7^8^9^PAN
  1. ;;PERSIAN GULF;;.322^10^11^12^GULF
  1. ;;SOMALIA;;.322^16^17^18^SOM
  1. ;;YUGOSLAVIA;;.322^19^20^21^YUG
  1. ;;QUIT;;QUIT
  1. COMLIST ;;COMBAT;;NODE^PIECE^FROM^TO^RANGE -- offset list, do not add comments
  1. ;;WWI;;.52^11^13^14^WWI
  1. ;;WWIIE;;.52^11^13^14^WWIIE
  1. ;;WWIIP;;.52^11^13^14^WWIIP
  1. ;;KOREA;;.52^11^13^14^KOR
  1. ;;OTHER;;.52^11^13^14^OTHER
  1. ;;VIETNAM;;.52^11^13^14^VIET
  1. ;;LEBANON;;.52^11^13^14^LEB
  1. ;;GRENADA;;.52^11^13^14^GREN
  1. ;;PANAMA;;.52^11^13^14^PAN
  1. ;;PERSIAN GULF;;.52^11^13^14^GULF
  1. ;;SOMALIA;;.52^11^13^14^SOM
  1. ;;YUGOSLAVIA;;.52^11^13^14^YUG
  1. ;;QUIT;;QUIT