IBCNSUX1 ;ALB/CMS - SPLIT COMBINATION PLANS CONT. ; 04-NOV-98
;;2.0;INTEGRATED BILLING;**103,133,516**;21-MAR-94;Build 123
;;Per VA Directive 6402, this routine should not be modified.
Q
;
BEG ; -- Start to process policy separation from IBCNSUX
; Input: IBINS=Selected Medicare Company
; IBPLAN=Selected Combination Plan
; IBWNR=MED WNR INS IEN^"MEDICARE (WNR)"
; ^PART A IEN^"PART A"
; ^PART B IEN^"PART A"
;
N DFN,DO,DD,DA,DR,DIC,DIE,DIK,DIR,DIRUT,X,Y
N IBCDFN,IBERR,IB0,IBST,IBSUB1,IBPLANAM
K ^TMP($J,"IBCNSUX"),^TMP($J,"IBCNSUX1")
;IB*2.0*516/TAZ - Retrieve HIPAA compliant Plan Name.
;S IBST=$$NOW^XLFDT,IBPLANAM=$P($G(^IBA(355.3,IBPLAN,0)),U,3)
S IBST=$$NOW^XLFDT,IBPLANAM=$$GET1^DIQ(355.3,IBPLAN,2.01) ; 516 - baa
S IBSUB1=$$SUBS^IBCNSJ(IBINS,IBPLAN,0,"^TMP($J,""IBCNSUX1"")")
S DFN=0 F S DFN=$O(^TMP($J,"IBCNSUX1",DFN)) Q:'DFN D
.S IBCDFN=0 F S IBCDFN=$O(^TMP($J,"IBCNSUX1",DFN,IBCDFN)) Q:'IBCDFN D
..S IB0=$G(^DPT(DFN,.312,IBCDFN,0))
..I $P(IB0,U,18)'=+IBPLAN Q
..;
..; -- check for duplicate
..D DUP
..;
..; -- if the policy to be split has no COB, and both an A and B
..; -- policy need to be created, set it to Primary
..I '$P(IB0,"^",20),'$D(^TMP($J,"IBCNSUX","ERR",DFN,2)),'$D(^(1)) D
...N DIE,DA,DR,X,Y
...S DIE="^DPT("_DFN_",.312,",DA=+IBCDFN,DA(1)=DFN,DR=".2////1" D ^DIE
..;
..; -- create Medicare (WNR) policies if none exists
..I '$D(^TMP($J,"IBCNSUX","ERR",DFN,2)) D ADDB
..I '$D(^TMP($J,"IBCNSUX","ERR",DFN,1)) D SETA
;
; -- delete combination plan if no subscribers left.
I '$$SUBS^IBCNSJ(IBINS,IBPLAN) D DEL^IBCNSJ(IBPLAN)
;
D WRT
;
BEGQ K ^TMP($J,"IBCNSUX"),^TMP($J,"IBCNSUX1")
Q
;
;
ADDB ; -- Create a New MEDICARE PART B patient policy
N DA,DIC,DIE,DR,IBBDFN,IBC,IBX,X,Y,IBCDA,IBNDA,IBN
K DD,D0
;
S DIC("DR")=".01////"_+IBWNR_";1.09////1;1.05///NOW;1.06////"_DUZ_";.18////"_$P(IBWNR,U,5)
;
; -- If the policy to be split has no COB, and a valid Part A policy
; -- already exists, set the COB to Primary
I '$P(IB0,"^",20),$D(^TMP($J,"IBCNSUX","ERR",DFN,1)) S DIC("DR")=DIC("DR")_";.2////1"
;
S DA(1)=DFN,DIC="^DPT("_DFN_",.312,",DIC(0)="L",X=+IBWNR,DLAYGO=2.312
D FILE^DICN S IBBDFN=+Y K DIC
I IBBDFN<1 S ^TMP($J,"IBCNSUX","ERR",DFN,3)="Could not create a Part B policy." G ADDBQ
;
; -- Get settings of combination policy
S IBCDA=IBCDFN_","_DFN_","
D GETS^DIQ(2.312,IBCDA,"*","IN","IBC")
I $D(IBC("IBERR")) S ^TMP($J,"IBCNSUX","ERR",DFN,3)="Could not set Part B policy data." G ADDBQ
;
; -- Set Medicare Part B policy data - copy combination policy data to new new Part B policy
S IBNDA=+IBBDFN_","_DFN_","
S IBX=0 F S IBX=$O(IBC(2.312,IBCDA,IBX)) Q:IBX="" D
. ;
. ; -- Don't set system edited or triggered fields
. I ",.01,1.01,1.02,1.1,1.05,1.06,.18,"[(","_IBX_",") Q
. ;
. S IBN(2.312,IBNDA,IBX)=IBC(2.312,IBCDA,IBX,"I")
I $O(IBN(0)) D FILE^DIE("","IBN")
ADDBQ Q
;
SETA ; -- Change policy to point to Part A
N DIE,DA,DR,X,Y
S DIE="^DPT("_DFN_",.312,",DA=+IBCDFN,DA(1)=DFN
S DR=".01////"_+IBWNR_";.18////"_$P(IBWNR,U,3)
;
; - if this policy still has no COB, set it to primary
I '$P($G(^DPT(DFN,.312,IBCDFN,0)),"^",20) S DR=DR_";.2////1"
D ^DIE
Q
;
DUP ; -- Check for duplicate
N IBX,IB0,X,Y
S IBX=0 F S IBX=$O(^DPT(DFN,.312,"B",+IBWNR,IBX)) Q:'IBX D
.S IB0=$G(^DPT(DFN,.312,IBX,0))
.I $P(IB0,U,18)=$P(IBWNR,U,3) S ^TMP($J,"IBCNSUX","ERR",DFN,1)="Medicare (WNR) Part A policy already exists." Q
.I $P(IB0,U,18)=$P(IBWNR,U,5) S ^TMP($J,"IBCNSUX","ERR",DFN,2)="Medicare (WNR) Part B policy already exists." Q
Q
;
WRT ; -- write report
N IBX,VA,VADM,VAERR,X,Y
W @IOF,!,"Separate Medicare Combination policies Part A and Part B"
W !!,"Process started ",$$FMTE^XLFDT(IBST)," ended ",$$FMTE^XLFDT($$NOW^XLFDT)
W !,?10,"Run by: ",$P($G(^VA(200,+$G(DUZ),0)),U,1)
W !!,?5,"Combination Company: ",$P($G(^DIC(36,IBINS,0)),U,1)
W !?3,"Combination Plan Name: ",IBPLANAM W:'$D(^IBA(355.3,IBPLAN,0)) " (This plan was deleted)"
W ! F IBX=1:1:79 W "="
;
I '$O(^TMP($J,"IBCNSUX","ERR",0)) W !!,"SUCCESSFULLY COMPLETED, COMBINATION PLAN DELETED." G WRTQ
;
W !,"Exception Report:"
S DFN=0 F S DFN=$O(^TMP($J,"IBCNSUX","ERR",DFN)) Q:'DFN D
.K VADM D DEM^VADPT
.W !!,VADM(1),?32,"SSN: ",$P(VADM(2),U,2),?50,"DOB: ",$P(VADM(3),U,2)
.S IBX=0 F S IBX=$O(^TMP($J,"IBCNSUX","ERR",DFN,IBX)) Q:'IBX D
..W !,?5,^TMP($J,"IBCNSUX","ERR",DFN,IBX)
WRTQ Q
;IBCNSUX1
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBCNSUX1 4552 printed Oct 16, 2024@18:18:49 Page 2
IBCNSUX1 ;ALB/CMS - SPLIT COMBINATION PLANS CONT. ; 04-NOV-98
+1 ;;2.0;INTEGRATED BILLING;**103,133,516**;21-MAR-94;Build 123
+2 ;;Per VA Directive 6402, this routine should not be modified.
+3 QUIT
+4 ;
BEG ; -- Start to process policy separation from IBCNSUX
+1 ; Input: IBINS=Selected Medicare Company
+2 ; IBPLAN=Selected Combination Plan
+3 ; IBWNR=MED WNR INS IEN^"MEDICARE (WNR)"
+4 ; ^PART A IEN^"PART A"
+5 ; ^PART B IEN^"PART A"
+6 ;
+7 NEW DFN,DO,DD,DA,DR,DIC,DIE,DIK,DIR,DIRUT,X,Y
+8 NEW IBCDFN,IBERR,IB0,IBST,IBSUB1,IBPLANAM
+9 KILL ^TMP($JOB,"IBCNSUX"),^TMP($JOB,"IBCNSUX1")
+10 ;IB*2.0*516/TAZ - Retrieve HIPAA compliant Plan Name.
+11 ;S IBST=$$NOW^XLFDT,IBPLANAM=$P($G(^IBA(355.3,IBPLAN,0)),U,3)
+12 ; 516 - baa
SET IBST=$$NOW^XLFDT
SET IBPLANAM=$$GET1^DIQ(355.3,IBPLAN,2.01)
+13 SET IBSUB1=$$SUBS^IBCNSJ(IBINS,IBPLAN,0,"^TMP($J,""IBCNSUX1"")")
+14 SET DFN=0
FOR
SET DFN=$ORDER(^TMP($JOB,"IBCNSUX1",DFN))
if 'DFN
QUIT
Begin DoDot:1
+15 SET IBCDFN=0
FOR
SET IBCDFN=$ORDER(^TMP($JOB,"IBCNSUX1",DFN,IBCDFN))
if 'IBCDFN
QUIT
Begin DoDot:2
+16 SET IB0=$GET(^DPT(DFN,.312,IBCDFN,0))
+17 IF $PIECE(IB0,U,18)'=+IBPLAN
QUIT
+18 ;
+19 ; -- check for duplicate
+20 DO DUP
+21 ;
+22 ; -- if the policy to be split has no COB, and both an A and B
+23 ; -- policy need to be created, set it to Primary
+24 IF '$PIECE(IB0,"^",20)
IF '$DATA(^TMP($JOB,"IBCNSUX","ERR",DFN,2))
IF '$DATA(^(1))
Begin DoDot:3
+25 NEW DIE,DA,DR,X,Y
+26 SET DIE="^DPT("_DFN_",.312,"
SET DA=+IBCDFN
SET DA(1)=DFN
SET DR=".2////1"
DO ^DIE
End DoDot:3
+27 ;
+28 ; -- create Medicare (WNR) policies if none exists
+29 IF '$DATA(^TMP($JOB,"IBCNSUX","ERR",DFN,2))
DO ADDB
+30 IF '$DATA(^TMP($JOB,"IBCNSUX","ERR",DFN,1))
DO SETA
End DoDot:2
End DoDot:1
+31 ;
+32 ; -- delete combination plan if no subscribers left.
+33 IF '$$SUBS^IBCNSJ(IBINS,IBPLAN)
DO DEL^IBCNSJ(IBPLAN)
+34 ;
+35 DO WRT
+36 ;
BEGQ KILL ^TMP($JOB,"IBCNSUX"),^TMP($JOB,"IBCNSUX1")
+1 QUIT
+2 ;
+3 ;
ADDB ; -- Create a New MEDICARE PART B patient policy
+1 NEW DA,DIC,DIE,DR,IBBDFN,IBC,IBX,X,Y,IBCDA,IBNDA,IBN
+2 KILL DD,D0
+3 ;
+4 SET DIC("DR")=".01////"_+IBWNR_";1.09////1;1.05///NOW;1.06////"_DUZ_";.18////"_$PIECE(IBWNR,U,5)
+5 ;
+6 ; -- If the policy to be split has no COB, and a valid Part A policy
+7 ; -- already exists, set the COB to Primary
+8 IF '$PIECE(IB0,"^",20)
IF $DATA(^TMP($JOB,"IBCNSUX","ERR",DFN,1))
SET DIC("DR")=DIC("DR")_";.2////1"
+9 ;
+10 SET DA(1)=DFN
SET DIC="^DPT("_DFN_",.312,"
SET DIC(0)="L"
SET X=+IBWNR
SET DLAYGO=2.312
+11 DO FILE^DICN
SET IBBDFN=+Y
KILL DIC
+12 IF IBBDFN<1
SET ^TMP($JOB,"IBCNSUX","ERR",DFN,3)="Could not create a Part B policy."
GOTO ADDBQ
+13 ;
+14 ; -- Get settings of combination policy
+15 SET IBCDA=IBCDFN_","_DFN_","
+16 DO GETS^DIQ(2.312,IBCDA,"*","IN","IBC")
+17 IF $DATA(IBC("IBERR"))
SET ^TMP($JOB,"IBCNSUX","ERR",DFN,3)="Could not set Part B policy data."
GOTO ADDBQ
+18 ;
+19 ; -- Set Medicare Part B policy data - copy combination policy data to new new Part B policy
+20 SET IBNDA=+IBBDFN_","_DFN_","
+21 SET IBX=0
FOR
SET IBX=$ORDER(IBC(2.312,IBCDA,IBX))
if IBX=""
QUIT
Begin DoDot:1
+22 ;
+23 ; -- Don't set system edited or triggered fields
+24 IF ",.01,1.01,1.02,1.1,1.05,1.06,.18,"[(","_IBX_",")
QUIT
+25 ;
+26 SET IBN(2.312,IBNDA,IBX)=IBC(2.312,IBCDA,IBX,"I")
End DoDot:1
+27 IF $ORDER(IBN(0))
DO FILE^DIE("","IBN")
ADDBQ QUIT
+1 ;
SETA ; -- Change policy to point to Part A
+1 NEW DIE,DA,DR,X,Y
+2 SET DIE="^DPT("_DFN_",.312,"
SET DA=+IBCDFN
SET DA(1)=DFN
+3 SET DR=".01////"_+IBWNR_";.18////"_$PIECE(IBWNR,U,3)
+4 ;
+5 ; - if this policy still has no COB, set it to primary
+6 IF '$PIECE($GET(^DPT(DFN,.312,IBCDFN,0)),"^",20)
SET DR=DR_";.2////1"
+7 DO ^DIE
+8 QUIT
+9 ;
DUP ; -- Check for duplicate
+1 NEW IBX,IB0,X,Y
+2 SET IBX=0
FOR
SET IBX=$ORDER(^DPT(DFN,.312,"B",+IBWNR,IBX))
if 'IBX
QUIT
Begin DoDot:1
+3 SET IB0=$GET(^DPT(DFN,.312,IBX,0))
+4 IF $PIECE(IB0,U,18)=$PIECE(IBWNR,U,3)
SET ^TMP($JOB,"IBCNSUX","ERR",DFN,1)="Medicare (WNR) Part A policy already exists."
QUIT
+5 IF $PIECE(IB0,U,18)=$PIECE(IBWNR,U,5)
SET ^TMP($JOB,"IBCNSUX","ERR",DFN,2)="Medicare (WNR) Part B policy already exists."
QUIT
End DoDot:1
+6 QUIT
+7 ;
WRT ; -- write report
+1 NEW IBX,VA,VADM,VAERR,X,Y
+2 WRITE @IOF,!,"Separate Medicare Combination policies Part A and Part B"
+3 WRITE !!,"Process started ",$$FMTE^XLFDT(IBST)," ended ",$$FMTE^XLFDT($$NOW^XLFDT)
+4 WRITE !,?10,"Run by: ",$PIECE($GET(^VA(200,+$GET(DUZ),0)),U,1)
+5 WRITE !!,?5,"Combination Company: ",$PIECE($GET(^DIC(36,IBINS,0)),U,1)
+6 WRITE !?3,"Combination Plan Name: ",IBPLANAM
if '$DATA(^IBA(355.3,IBPLAN,0))
WRITE " (This plan was deleted)"
+7 WRITE !
FOR IBX=1:1:79
WRITE "="
+8 ;
+9 IF '$ORDER(^TMP($JOB,"IBCNSUX","ERR",0))
WRITE !!,"SUCCESSFULLY COMPLETED, COMBINATION PLAN DELETED."
GOTO WRTQ
+10 ;
+11 WRITE !,"Exception Report:"
+12 SET DFN=0
FOR
SET DFN=$ORDER(^TMP($JOB,"IBCNSUX","ERR",DFN))
if 'DFN
QUIT
Begin DoDot:1
+13 KILL VADM
DO DEM^VADPT
+14 WRITE !!,VADM(1),?32,"SSN: ",$PIECE(VADM(2),U,2),?50,"DOB: ",$PIECE(VADM(3),U,2)
+15 SET IBX=0
FOR
SET IBX=$ORDER(^TMP($JOB,"IBCNSUX","ERR",DFN,IBX))
if 'IBX
QUIT
Begin DoDot:2
+16 WRITE !,?5,^TMP($JOB,"IBCNSUX","ERR",DFN,IBX)
End DoDot:2
End DoDot:1
WRTQ QUIT
+1 ;IBCNSUX1