- 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 Apr 23, 2025@18:32:42 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