VistA-WorldVistAEHR/r/REGISTRATION-DGQE-DG-DPT-GR.../DG53358D.m

192 lines
5.6 KiB
Mathematica

DG53358D ;ALB/AEG,GN DG*5.3*358 DELETE INCOME TESTS ; 12/17/03 3:06pm
;;5.3;REGISTRATION;**358,558**;5-1-2001
;
;This is a modified version of IVMCMD in that it calls a modified
;version of IVMCMD1 called DG53358C which only deletes the
;records from the Annual Means Test(#408.31) file. It does not open
;a case record in the IVM Patient (#301.5)file, does not send 'delete'
;bulletin/notification to local mail group, does not call the means
;test event driver and does not call DGMTR.
;
;DG*53*558 - re-deploy with this patch
;
EN(IVMMTIEN) ; --
; This routine will process income test deletion requests received
; from the IVM Center.
;
; Input(s):
; IVMMTIEN - pointer to test to be deleted in file 408.31
;
; Output(s):
; Function Value - 1 test deleted
; 0 test not deleted
;
;
; Initialize variables
N DFN,IVMERR,IVMLINK,IVMNODE0,IVMDOT,IVMTOT,IVMDONE
S IVMDONE=0
;
EN1 ; Get zero node of (#408.31)
S IVMNODE0=$G(^DGMT(408.31,IVMMTIEN,0))
I 'IVMNODE0 Q 1 ; test not found
S IVMDOT=$P(IVMNODE0,"^") ; date of test
S DFN=$P(IVMNODE0,"^",2)
S IVMTOT=$P(IVMNODE0,"^",19) ; type of test
S IVMLINK=$P($G(^DGMT(408.31,IVMMTIEN,2)),"^",6)
;don't delete copay test linked to valid means test
I IVMTOT=2,IVMLINK,$D(^DGMT(408.31,IVMLINK,0)) Q 0
I IVMTOT=1,IVMLINK D I $D(IVMERR) Q 0 ;I MT linkd to copay delete both
.D DELETE(IVMLINK,DFN,IVMDOT) ; delete copay
D DELETE(IVMMTIEN,DFN,IVMDOT) ; delete copay or MT
Q IVMDONE
;
DELETE(IVMMTIEN,DFN,IVMDOT) ; delete copay or MT
;
; Get Income Relation IEN array (DGINR) and
; Individual Annual Income IEN array (DGINC)
D ALL^DGMTU21(DFN,"VSC",IVMDOT,"IR",IVMMTIEN)
;
;
DEL22 ; Delete veteran, spouse, and dependent entries from the
; Income Relation (#408.22) file:
; - Veteran (#408.22) record
S DA=$G(DGINR("V")) D
.Q:'DA
.S DIK="^DGMT(408.22,"
.D ^DIK
;
; - Spouse (#408.22) record
S DA=$G(DGINR("S")) D
.Q:'DA
.S DIK="^DGMT(408.22,"
.D ^DIK
;
; - All dependent children (#408.22) records
S IVMDEP=0
F S IVMDEP=$O(DGINR("C",IVMDEP)) Q:'IVMDEP D
.S DA=$G(DGINR("C",IVMDEP))
.S DIK="^DGMT(408.22,"
.D ^DIK
;
;
DEL21 ; Delete veteran, spouse, and dependent entries from
; Individual Annual Income (#408.21) file:
; - Veteran (#408.21) record
S DA=$G(DGINC("V")) D
.Q:'DA
.S DIK="^DGMT(408.21,"
.D ^DIK
;
; - Spouse (#408.21) record
S DA=$G(DGINC("S")) D
.Q:'DA
.S DIK="^DGMT(408.21,"
.D ^DIK
;
; - All dependent children (#408.21) records
S IVMDEP=0
F S IVMDEP=$O(DGINC("C",IVMDEP)) Q:'IVMDEP D
.S DA=$G(DGINC("C",IVMDEP))
.S DIK="^DGMT(408.21,"
.D ^DIK
;
;
; Logic for (#408.12/#408.1275) & (#408.13) file entries
D SETUPAR
;
; Look for IVM/DCD Patient Realtion (#408.12) file entries.
; If no entries in "AIVM" x-ref, no dependent changes required.
S IVM12="" F S IVM12=$O(^DGPR(408.12,"AIVM",IVMMTIEN,IVM12)) Q:'IVM12 D Q:$D(IVMERR)
.; -- if can't find entry in (#408.12), set IVMERR
.I $G(^DGPR(408.12,+IVM12,0))']"" D Q
..S IVMERR="" Q
.;
.; - if only one record exists in (#408.1275) mult., then only one
.;IVM/DCD dependent to delete
.I $P($G(^DGPR(408.12,+IVM12,"E",0)),"^",4)=1 D Q
..;
..; -- if can't find entry in (#408.13), set IVMERR
..S IVM13=$P($P($G(^DGPR(408.12,+IVM12,0)),"^",3),";")
..I $G(^DGPR(408.13,+IVM13,0))']"" D Q
...S IVMERR="" Q
..;
..; -- delete (#408.12) & (#408.13) records for IVM/DCD dependent
..S DA=IVM12,DIK="^DGPR(408.12," D ^DIK K DA,DIK
..S DA=IVM13,DIK="^DGPR(408.13," D ^DIK K DA,DIK
..Q
.;
.;
.; Delete (#408.1275) record for IVM/DCD dependent and
.; change demo data in (#408.12) & (#408.13) back to VAMC values.
.; OR, Delete (#408.1275) record for inactivated VAMC dependent.
.S IVM121="",IVM121=$O(^DGPR(408.12,"AIVM",IVMMTIEN,+IVM12,IVM121))
.; - if can't find entry in (#408.1275), set IVMERR
.I $G(^DGPR(408.12,+IVM12,"E",+IVM121,0))']"" D Q
..S IVMERR="" Q
.;
.S IVMVAMCA=$P($G(^DGPR(408.12,+IVM12,"E",+IVM121,0)),"^",2)
.;dependent active?
.;
.; - If active, inactivate dependant
.I IVMVAMCA D
..S DR=".02////0",DA=+IVM121,DA(1)=0
..S DIE="^DGPR(408.12,"_+IVM12_",""E"","
..D ^DIE S IVMVAMCA=0 Q
.;
.S DA(1)=IVM12,DA=IVM121,DIK="^DGPR(408.12,"_DA(1)_",""E"","
.D ^DIK K DA(1),DA,DIK
.;
.Q
;
; Complete deletion of income test
D EN^DG53358C
;
ENQ Q
;
;
SETUPAR ; Create array IVMAR1() where
; 1) Subscript is MT Changes Type (#408.42) file node where type of
; change = Name, DOB, SSN, Sex, Relationship.
; 2) 1st piece is (#408.12) or (#408.13) file.
; 3) 2nd piece is (#408.12) or (#408.13) file field number.
;
F IVM41=4:1 S IVM411=$P($T(TYPECH+IVM41),";;",2) Q:IVM411="QUIT" D
.S IVMAR1($P(IVM411,";"))=$P(IVM411,";",2,3)
K IVM41,IVM411
Q
;
DELTYPE(DFN,MTDATE,TYPE) ;
;will delete any primary test for patient=DFN for same income year as
;MTDATE for test of type=TYPE
;
Q:'$G(DFN)
Q:'$G(MTDATE)
Q:'$G(TYPE)
N MTNODE,YEAR,RET
S YEAR=$E(MTDATE,1,3)_1230.999999
D
.S MTNODE=$$LST^DGMTU(DFN,YEAR,TYPE)
.Q:'+MTNODE
.I $E($P(MTNODE,"^",2),1,3)'=$E(YEAR,1,3) Q
.;don't want to delete auto-created Rx copay tests -they are deleted by
.; deleting the MT that they are based on
.I TYPE=2,+$P($G(^DGMT(408.31,+MTNODE,2)),"^",6) Q
.I $P(MTNODE,"^",5),$P(MTNODE,"^",5)'=1 I $$EN(+MTNODE) D
..;
..S RET=$$LST^DGMTU(DFN,DT,IVMTYPE)
..I $E($P(RET,"^",2),1,3)'=$E(YEAR,1,3) S RET=""
..D ADD^IVMCMB(DFN,IVMTYPE,"DELETE PRMYTEST",$P(MTNODE,"^",2),$P(MTNODE,"^",4),$P(RET,"^",4))
Q
;
TYPECH ; Type of dependent changes (#408.41/#408.42) file
; 1st piece - 408.42 table file node
; 2nd piece - file (408.12/408.13)
; 3rd piece - 408.12/408.13 field
;;16;408.13;.01
;;17;408.13;.03
;;18;408.13;.09
;;19;408.13;.02
;;20;408.12;.02
;;QUIT
Q