IBCEF61 ;ALB/TMP - EDI TRANSMISSION RULES DEFINITION ;28-APR-99
;;2.0;INTEGRATED BILLING;**137**;21-MAR-94
;
SELRULE(IBRULE) ; Select rule
D FULL^VALM1
S IBRULE=""
N IBR,IB
D EN^VALM2($G(XQORNOD(0)),"S")
S IBR=0 F S IBR=$O(VALMY(IBR)) Q:'IBR S IB=$G(^TMP("IBCE-RULEDX",$J,IBR)),IBRULE=+$P(IB,U,2)
Q
;
ACTIVE(IBRULE) ; Edit rules' active/inactive dates
; IBRULE = ien of rule in file 364.4
;
G:'$G(IBRULE) ACTQ
N DA,DR,DIE,X,Y,Z,Z0
S DA=$G(IBRULE),DIE="^IBE(364.4,"
S DR=".02;.06"
D ^DIE
I $D(Y) S IBRULE=0 G ACTQ
D REBLD^IBCEF6($G(IBACTIVE))
ACTQ S VALMBCK="R"
Q
;
SCRACT ; Rebld display - only currently active
S IBACTIVE=1
D REBLD^IBCEF6(1)
S VALMBCK="R"
Q
;
NOSCR ; Rebld display - inactive and currently active
S IBACTIVE=0
D REBLD^IBCEF6(0)
S VALMBCK="R"
Q
;
BILTYP(IBRULE) ; Allow to edit bill types for rule
; IBRULE = ien of rule - file 364.4
;
G:'$G(IBRULE) BILTYPQ
N DA,DR,DIE,X,Y,Z,Z0,IBRT,IB,IBOK,IBCT
S DA=$G(IBRULE),DIE="^IBE(364.4,",IBRT=$P($G(^IBE(364.4,IBRULE,0)),U,11)
I $S(IBRT=9:0,1:IBRT'=1) D G BILTYPQ
. W !
. S DIR(0)="EA",DIR("A",1)="RULE TYPE '"_$$EXPAND^IBTRE(364.4,.11,IBRT)_"' DOES NOT ALLOW BILL TYPE RESTRICTIONS",DIR("A")="PRESS RETURN " D ^DIR K DIR W !
S (IBO,IBCT)=0 ;Extract existing entries
F S IBO=$O(^IBE(364.4,IBRULE,"BTYP",IBO)) Q:'IBO S IBX=$P($G(^(IBO,0)),U),IBO(IBX)=IBO_U_$P(^(0),U,2,3),IBCT=IBCT+1,IB(364.41,IBCT,.01)=IBX,IBI(IBX)=IBCT F Z=2,3 I $P(IBO(IBX),U,Z)'="" S IB(364.41,IBCT,Z/100)=$P(IBO(IBX),U,Z)
; Display entries, allow to add/edit/delete
D EN^IBCEF62
BILTYPQ S VALMBCK="R"
Q
;
SEL(VALMY) ; Select one or more bill type restriction entries
; VALMY = passed by reference and returned subscripted by
; entry #(s) in the LM array selected
;
N Z
D FULL^VALM1
N IBR
D EN^VALM2($G(XQORNOD(0)))
Q
;
BTEDIT(IBRULE) ; Edit bill type restriction dates
; IBRULE = ien of the bill type restriction being edited
; (0)= ien of the RULE - file 364.4
G:'$G(IBRULE) BTEQ
;
N DA,DIE,DR,Y,X,VALMY,Z,IBBT
;
S IBCT=0
D SEL(.VALMY)
G:'$O(VALMY(0)) BTEQ ; None selected
;
S Z=0 F S Z=$O(VALMY(Z)) Q:'Z S IBBT=+$G(^TMP("IBCE-BTDX",$J,Z)) I IBBT D
. S DA(1)=IBRULE,DA=IBBT,DIE="^IBE(364.4,"_DA(1)_",""BTYP"",",DR=".02;.03"
. W !!,"Bill Type Restriction #"_Z_" - "_$E($G(^TMP("IBCE-BT",$J,Z,0)),5,50),!
. D ^DIE
. D REBLD^IBCEF62
;
BTEQ S VALMBCK="R"
Q
;
BTADD(IBRULE) ; Add new bill type restrictions
; IBRULE = ien of rule entry - file 364.4
N IB,IBCT,Z,IBOK
D FULL^VALM1
G:'$G(IBRULE) BTAQ
;
S (IBCT,Z)=0
S Z=0 F S Z=$O(^IBE(364.4,IBRULE,"BTYP",Z)) Q:'Z S IBCT=IBCT+1,IB(364.41,IBCT,.01)=$P($G(^(Z,0)),U)
;
D BTYP^IBCEF51(.IB,.IBOK,0)
;
I IBOK D
. N Z
. S Z=0 F S Z=$O(^IBE(364.4,IBRULE,"BTYP",Z)) Q:'Z S DA=Z,DA(1)=IBRULE,DIK="^IBE(364.4,"_DA(1)_",""BTYP""," D ^DIK
. D ADDBTYP(.IB,IBRULE)
. D REBLD^IBCEF62
D SUCCESS(IBOK)
;
BTAQ S VALMBCK="R"
Q
;
INSCO(IBRULE) ; Allow user to edit rule's ins co data
; IBRULE = ien of rule - file 364.4
;
G:'$G(IBRULE) INSCOQ
N DA,DR,DIE,X,Y,Z,Z0,IB,IB0
S DA=$G(IBRULE),DIE="^IBE(364.4,"
S IB0=$G(^IBE(364.4,IBRULE,0)),IB(".07O")=$P(IB0,U,7)
S DR=$S($P(IB0,U,3)'=2:".07;S Y=$S(X=1:""@10"",X=2:""@20"",1:""@99"");",1:"")_"@10;3;S Y=""@99"";@20;2;S Y=""@99"";@99"
D ^DIE
S IB(.07)=$P($G(^IBE(364.4,IBRULE,0)),U,7)
;
I IB(".07O"),IB(".07O")'=IB(.07),IB(".07O")'=3 D ; Delete 'old' includes/excludes
. S Z=$P("3^2",U,+IB(".07O")),Z0=0 F S Z0=$O(^IBE(364.4,IBRULE,Z,Z0)) Q:'Z0 S DA=Z0,DA(1)=IBRULE,DIK="^IBE(364.4,"_DA(1)_","_Z_"," D ^DIK
;
; If all ins cos selected, delete existing specific ones in/excluded
I 'IB(.07)!(IB(.07)=3) D
. Q:IB(".07O")=IB(.07)
. F Z=2,3 I $O(^IBE(364.4,IBRULE,Z,0)) S Z0=0 F S Z0=$O(^IBE(364.4,IBRULE,Z,Z0)) Q:'Z0 S DA=Z0,DA(1)=IBRULE,DIK="^IBE(364.4,"_DA(1)_","_Z_"," D ^DIK
E D
. Q:$O(^IBE(364.4,IBRULE,$S(IB(.07)=1:3,1:2),0))
. W !,"Warning ... no insurance companies chosen to "_$S(IB(.07)=1:"in",1:"ex")_"clude"
. D QUIT^IBCEF5
D REBLD^IBCEF6($G(IBACTIVE))
;
INSCOQ S VALMBCK="R"
Q
;
MISC(IBRULE) ; Edit other misc fields for the rule
; IBRULE = ien of rule - file 364.4
;
I $G(IBRULE) D
. N DA,DR,DIE,X,Y,Z,Z0
. S DA=$G(IBRULE),DIE="^IBE(364.4,"
. S DR=".08;1;4"
. D ^DIE
. D REBLD^IBCEF6($G(IBACTIVE))
S VALMBCK="R"
Q
;
DISPRUL(IBRULE) ; Display rule selected
; IBRULE = ien of rule - file 364.4
;
I '$G(IBRULE) D FULL^VALM1
N DIOBEG,FR,TO,BY,DIC,DA,L,FLDS,DHD
S (FR,TO)=$G(IBRULE),DHD="[IBCE RULE DISPLAY HEADER]"
S L=0,BY="@RULE NUMBER",DIC="^IBE(364.4,",FLDS="[IBCE RULE DISPLAY]"
S DIOBEG="W !"
W !!
D EN1^DIP
DISPRQ S VALMBCK="R"
D PAUSE^VALM1
Q
;
SUCCESS(IBOK) ; Display msg after add rule
; IBOK = 1 if successful, 0 if not
;
N DIR,Y,X
S DIR(0)="EA"
W !
I $G(IBOK) S DIR("A",1)="TRANSMISSION RULE(s) HAVE BEEN SUCCESSFULLY FILED"
I '$G(IBOK) S DIR("A",1)="NO TRANSMISSION RULES ADDED"
S DIR("A")="PRESS RETURN " D ^DIR K DIR
S VALMBCK="R"
Q
;
ADDBTYP(IB,IBDA1) ; Add bill types in IB(364.41) to rule IBDA1
;
N Z,Z0,IBC
I $D(IB(364.41)) D
. S IBC=0 F S IBC=$O(IB(364.41,IBC)) Q:'IBC D
.. N DO,DD,DIC,DLAYGO,DA,X,Y
.. S Z=.01 F S Z=$O(IB(364.41,IBC,Z)) Q:'Z S Z0=$G(IB(364.41,IBC,Z)) I Z0'="" D ;Bill type excepts
... S DIC("DR")=$G(DIC("DR"))_$S($G(DIC("DR"))="":"",1:";")_Z_"///"_Z0
.. I '$D(^IBE(364.4,IBDA1,"BTYP",0)) S DIC("P")=$$GETSPEC^IBEFUNC(364.4,.1)
.. S X=IB(364.41,IBC,.01)
.. S DA(1)=IBDA1,DIC="^IBE(364.4,"_IBDA1_",""BTYP"",",DIC(0)="L",DLAYGO=364.4
.. D FILE^DICN
Q
;
INSADD(IB,IBDA1) ; Add ins co exceptions from entries in
; IB(364.42 - exclude) or IB(364.43 - include) to rule IBDA1
;
N Z,IBNODE,Z0
F Z=364.42,364.43 S IBNODE=$E(Z,$L(Z)),Z0=0 F S Z0=$O(IB(Z,Z0)) Q:'Z0 D
. N DO,DD,DIC,DLAYGO,DA
. I '$D(^IBE(364.4,IBDA1,IBNODE,0)) S DIC("P")=$$GETSPEC^IBEFUNC(364.4,IBNODE)
. S DA(1)=IBDA1,DIC="^IBE(364.4,"_IBDA1_","_IBNODE_",",DIC(0)="L",DLAYGO=364.4,X=Z0
. D FILE^DICN K DIC
Q
;
BTDTOK(IBRULE,IBBT,IBDTYP,X) ; Check bill type date is consistent for rule
; IBRULE = ien of rule - file 364.4
; IBBT = ien of bill type in rule IBRULE (optional if check at top level)
; IBDTYP = 1 for active date check, 2 for inactive date check
; X = Value of date being validated
;
; Function returns 1 if consistencies are OK, 0 if not
;
N IBOK,IBPCK,Z
S IBOK=1
S IBPCK=$S(IBDTYP=1:2,1:6)
;
; Check for consistency at rule level first
;
; Active dt must not be after rule's inact dt
I IBDTYP=1,$P($G(^IBE(364.4,IBRULE,0)),U,6),X>$P(^(0),U,6) S Z=$$FMTE^XLFDT($P($G(^IBE(364.4,IBRULE,0)),U,6)) D EN^DDIOL("CANNOT BE AFTER RULE'S INACTIVE DATE OF "_$S('Z:"<MISSING>",1:Z),,"!!") S IBOK=0 G BTDTQ
;
; Inact dt must not be prior to rule's active dt
I IBDTYP=2,$S('$P($G(^IBE(364.4,IBRULE,0)),U,2):'$G(IBBT),1:X<$P($G(^(0)),U,2)) S Z=$$FMTE^XLFDT($P($G(^IBE(364.4,IBRULE,0)),U,2)) D EN^DDIOL("CANNOT BE BEFORE RULE'S ACTIVE DATE OF "_$S('Z:"<MISSING>",1:Z),,"!!") S IBOK=0 G BTDTQ
;
I $G(IBBT) D ; Check for consistency at the bill type level
. ; Active dt at bt level must be prior to inactive dt
. I IBDTYP=1,$P($G(^IBE(364.4,IBRULE,"IBTYP",IBBT,0)),U,3),X>$P(^(0),U,3) S Z=$$FMTE^XLFDT($P(^IBE(364.4,IBRULE,"IBTYP",IBBT,0),U,3)) D EN^DDIOL("MUST BE PRIOR TO BILL TYPE'S INACTIVE DATE OF "_$S('Z:"<MISSING>",1:Z),,"!!") S IBOK=0 Q
. ; Inactive dt at bt level must be after active dt
. I IBDTYP=2,$S('$P($G(^IBE(364.4,IBRULE,"IBTYP",IBBT,0)),U,2):1,1:X<$P(^(0),U,2)) S Z=$$FMTE^XLFDT($P($G(^IBE(364.4,IBRULE,"IBTYP",IBBT,0)),U,2)) D EN^DDIOL("MUST BE AFTER BILL TYPE'S ACTIVE DATE OF "_$S('Z:"<MISSING>",1:Z),,"!!") S IBOK=0 Q
. ;
. S Z=0
. F S Z=$O(^IBE(364.4,IBRULE,"BTYP",Z)) Q:'Z S Z0=$G(^(Z,0)) D Q:'IBOK
.. I $P(Z0,U,IBDTYP+1),$S(IBDTYP=1:X<$P(Z0,U,2),1:X>$P(Z0,U,3)) D EN^DDIOL("CHANGE WOULD INVALIDATE BILL TYPE RESTRICTION DATE",,"!!") S IBOK=0
BTDTQ Q IBOK
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBCEF61 8039 printed Nov 22, 2024@17:20:14 Page 2
IBCEF61 ;ALB/TMP - EDI TRANSMISSION RULES DEFINITION ;28-APR-99
+1 ;;2.0;INTEGRATED BILLING;**137**;21-MAR-94
+2 ;
SELRULE(IBRULE) ; Select rule
+1 DO FULL^VALM1
+2 SET IBRULE=""
+3 NEW IBR,IB
+4 DO EN^VALM2($GET(XQORNOD(0)),"S")
+5 SET IBR=0
FOR
SET IBR=$ORDER(VALMY(IBR))
if 'IBR
QUIT
SET IB=$GET(^TMP("IBCE-RULEDX",$JOB,IBR))
SET IBRULE=+$PIECE(IB,U,2)
+6 QUIT
+7 ;
ACTIVE(IBRULE) ; Edit rules' active/inactive dates
+1 ; IBRULE = ien of rule in file 364.4
+2 ;
+3 if '$GET(IBRULE)
GOTO ACTQ
+4 NEW DA,DR,DIE,X,Y,Z,Z0
+5 SET DA=$GET(IBRULE)
SET DIE="^IBE(364.4,"
+6 SET DR=".02;.06"
+7 DO ^DIE
+8 IF $DATA(Y)
SET IBRULE=0
GOTO ACTQ
+9 DO REBLD^IBCEF6($GET(IBACTIVE))
ACTQ SET VALMBCK="R"
+1 QUIT
+2 ;
SCRACT ; Rebld display - only currently active
+1 SET IBACTIVE=1
+2 DO REBLD^IBCEF6(1)
+3 SET VALMBCK="R"
+4 QUIT
+5 ;
NOSCR ; Rebld display - inactive and currently active
+1 SET IBACTIVE=0
+2 DO REBLD^IBCEF6(0)
+3 SET VALMBCK="R"
+4 QUIT
+5 ;
BILTYP(IBRULE) ; Allow to edit bill types for rule
+1 ; IBRULE = ien of rule - file 364.4
+2 ;
+3 if '$GET(IBRULE)
GOTO BILTYPQ
+4 NEW DA,DR,DIE,X,Y,Z,Z0,IBRT,IB,IBOK,IBCT
+5 SET DA=$GET(IBRULE)
SET DIE="^IBE(364.4,"
SET IBRT=$PIECE($GET(^IBE(364.4,IBRULE,0)),U,11)
+6 IF $SELECT(IBRT=9:0,1:IBRT'=1)
Begin DoDot:1
+7 WRITE !
+8 SET DIR(0)="EA"
SET DIR("A",1)="RULE TYPE '"_$$EXPAND^IBTRE(364.4,.11,IBRT)_"' DOES NOT ALLOW BILL TYPE RESTRICTIONS"
SET DIR("A")="PRESS RETURN "
DO ^DIR
KILL DIR
WRITE !
End DoDot:1
GOTO BILTYPQ
+9 ;Extract existing entries
SET (IBO,IBCT)=0
+10 FOR
SET IBO=$ORDER(^IBE(364.4,IBRULE,"BTYP",IBO))
if 'IBO
QUIT
SET IBX=$PIECE($GET(^(IBO,0)),U)
SET IBO(IBX)=IBO_U_$PIECE(^(0),U,2,3)
SET IBCT=IBCT+1
SET IB(364.41,IBCT,.01)=IBX
SET IBI(IBX)=IBCT
FOR Z=2,3
IF $PIECE(IBO(IBX),U,Z)'=""
SET IB(364.41,IBCT,Z/100)=$PIECE(IBO(IBX),U,Z)
+11 ; Display entries, allow to add/edit/delete
+12 DO EN^IBCEF62
BILTYPQ SET VALMBCK="R"
+1 QUIT
+2 ;
SEL(VALMY) ; Select one or more bill type restriction entries
+1 ; VALMY = passed by reference and returned subscripted by
+2 ; entry #(s) in the LM array selected
+3 ;
+4 NEW Z
+5 DO FULL^VALM1
+6 NEW IBR
+7 DO EN^VALM2($GET(XQORNOD(0)))
+8 QUIT
+9 ;
BTEDIT(IBRULE) ; Edit bill type restriction dates
+1 ; IBRULE = ien of the bill type restriction being edited
+2 ; (0)= ien of the RULE - file 364.4
+3 if '$GET(IBRULE)
GOTO BTEQ
+4 ;
+5 NEW DA,DIE,DR,Y,X,VALMY,Z,IBBT
+6 ;
+7 SET IBCT=0
+8 DO SEL(.VALMY)
+9 ; None selected
if '$ORDER(VALMY(0))
GOTO BTEQ
+10 ;
+11 SET Z=0
FOR
SET Z=$ORDER(VALMY(Z))
if 'Z
QUIT
SET IBBT=+$GET(^TMP("IBCE-BTDX",$JOB,Z))
IF IBBT
Begin DoDot:1
+12 SET DA(1)=IBRULE
SET DA=IBBT
SET DIE="^IBE(364.4,"_DA(1)_",""BTYP"","
SET DR=".02;.03"
+13 WRITE !!,"Bill Type Restriction #"_Z_" - "_$EXTRACT($GET(^TMP("IBCE-BT",$JOB,Z,0)),5,50),!
+14 DO ^DIE
+15 DO REBLD^IBCEF62
End DoDot:1
+16 ;
BTEQ SET VALMBCK="R"
+1 QUIT
+2 ;
BTADD(IBRULE) ; Add new bill type restrictions
+1 ; IBRULE = ien of rule entry - file 364.4
+2 NEW IB,IBCT,Z,IBOK
+3 DO FULL^VALM1
+4 if '$GET(IBRULE)
GOTO BTAQ
+5 ;
+6 SET (IBCT,Z)=0
+7 SET Z=0
FOR
SET Z=$ORDER(^IBE(364.4,IBRULE,"BTYP",Z))
if 'Z
QUIT
SET IBCT=IBCT+1
SET IB(364.41,IBCT,.01)=$PIECE($GET(^(Z,0)),U)
+8 ;
+9 DO BTYP^IBCEF51(.IB,.IBOK,0)
+10 ;
+11 IF IBOK
Begin DoDot:1
+12 NEW Z
+13 SET Z=0
FOR
SET Z=$ORDER(^IBE(364.4,IBRULE,"BTYP",Z))
if 'Z
QUIT
SET DA=Z
SET DA(1)=IBRULE
SET DIK="^IBE(364.4,"_DA(1)_",""BTYP"","
DO ^DIK
+14 DO ADDBTYP(.IB,IBRULE)
+15 DO REBLD^IBCEF62
End DoDot:1
+16 DO SUCCESS(IBOK)
+17 ;
BTAQ SET VALMBCK="R"
+1 QUIT
+2 ;
INSCO(IBRULE) ; Allow user to edit rule's ins co data
+1 ; IBRULE = ien of rule - file 364.4
+2 ;
+3 if '$GET(IBRULE)
GOTO INSCOQ
+4 NEW DA,DR,DIE,X,Y,Z,Z0,IB,IB0
+5 SET DA=$GET(IBRULE)
SET DIE="^IBE(364.4,"
+6 SET IB0=$GET(^IBE(364.4,IBRULE,0))
SET IB(".07O")=$PIECE(IB0,U,7)
+7 SET DR=$SELECT($PIECE(IB0,U,3)'=2:".07;S Y=$S(X=1:""@10"",X=2:""@20"",1:""@99"");",1:"")_"@10;3;S Y=""@99"";@20;2;S Y=""@99"";@99"
+8 DO ^DIE
+9 SET IB(.07)=$PIECE($GET(^IBE(364.4,IBRULE,0)),U,7)
+10 ;
+11 ; Delete 'old' includes/excludes
IF IB(".07O")
IF IB(".07O")'=IB(.07)
IF IB(".07O")'=3
Begin DoDot:1
+12 SET Z=$PIECE("3^2",U,+IB(".07O"))
SET Z0=0
FOR
SET Z0=$ORDER(^IBE(364.4,IBRULE,Z,Z0))
if 'Z0
QUIT
SET DA=Z0
SET DA(1)=IBRULE
SET DIK="^IBE(364.4,"_DA(1)_","_Z_","
DO ^DIK
End DoDot:1
+13 ;
+14 ; If all ins cos selected, delete existing specific ones in/excluded
+15 IF 'IB(.07)!(IB(.07)=3)
Begin DoDot:1
+16 if IB(".07O")=IB(.07)
QUIT
+17 FOR Z=2,3
IF $ORDER(^IBE(364.4,IBRULE,Z,0))
SET Z0=0
FOR
SET Z0=$ORDER(^IBE(364.4,IBRULE,Z,Z0))
if 'Z0
QUIT
SET DA=Z0
SET DA(1)=IBRULE
SET DIK="^IBE(364.4,"_DA(1)_","_Z_","
DO ^DIK
End DoDot:1
+18 IF '$TEST
Begin DoDot:1
+19 if $ORDER(^IBE(364.4,IBRULE,$SELECT(IB(.07)=1
QUIT
+20 WRITE !,"Warning ... no insurance companies chosen to "_$SELECT(IB(.07)=1:"in",1:"ex")_"clude"
+21 DO QUIT^IBCEF5
End DoDot:1
+22 DO REBLD^IBCEF6($GET(IBACTIVE))
+23 ;
INSCOQ SET VALMBCK="R"
+1 QUIT
+2 ;
MISC(IBRULE) ; Edit other misc fields for the rule
+1 ; IBRULE = ien of rule - file 364.4
+2 ;
+3 IF $GET(IBRULE)
Begin DoDot:1
+4 NEW DA,DR,DIE,X,Y,Z,Z0
+5 SET DA=$GET(IBRULE)
SET DIE="^IBE(364.4,"
+6 SET DR=".08;1;4"
+7 DO ^DIE
+8 DO REBLD^IBCEF6($GET(IBACTIVE))
End DoDot:1
+9 SET VALMBCK="R"
+10 QUIT
+11 ;
DISPRUL(IBRULE) ; Display rule selected
+1 ; IBRULE = ien of rule - file 364.4
+2 ;
+3 IF '$GET(IBRULE)
DO FULL^VALM1
+4 NEW DIOBEG,FR,TO,BY,DIC,DA,L,FLDS,DHD
+5 SET (FR,TO)=$GET(IBRULE)
SET DHD="[IBCE RULE DISPLAY HEADER]"
+6 SET L=0
SET BY="@RULE NUMBER"
SET DIC="^IBE(364.4,"
SET FLDS="[IBCE RULE DISPLAY]"
+7 SET DIOBEG="W !"
+8 WRITE !!
+9 DO EN1^DIP
DISPRQ SET VALMBCK="R"
+1 DO PAUSE^VALM1
+2 QUIT
+3 ;
SUCCESS(IBOK) ; Display msg after add rule
+1 ; IBOK = 1 if successful, 0 if not
+2 ;
+3 NEW DIR,Y,X
+4 SET DIR(0)="EA"
+5 WRITE !
+6 IF $GET(IBOK)
SET DIR("A",1)="TRANSMISSION RULE(s) HAVE BEEN SUCCESSFULLY FILED"
+7 IF '$GET(IBOK)
SET DIR("A",1)="NO TRANSMISSION RULES ADDED"
+8 SET DIR("A")="PRESS RETURN "
DO ^DIR
KILL DIR
+9 SET VALMBCK="R"
+10 QUIT
+11 ;
ADDBTYP(IB,IBDA1) ; Add bill types in IB(364.41) to rule IBDA1
+1 ;
+2 NEW Z,Z0,IBC
+3 IF $DATA(IB(364.41))
Begin DoDot:1
+4 SET IBC=0
FOR
SET IBC=$ORDER(IB(364.41,IBC))
if 'IBC
QUIT
Begin DoDot:2
+5 NEW DO,DD,DIC,DLAYGO,DA,X,Y
+6 ;Bill type excepts
SET Z=.01
FOR
SET Z=$ORDER(IB(364.41,IBC,Z))
if 'Z
QUIT
SET Z0=$GET(IB(364.41,IBC,Z))
IF Z0'=""
Begin DoDot:3
+7 SET DIC("DR")=$GET(DIC("DR"))_$SELECT($GET(DIC("DR"))="":"",1:";")_Z_"///"_Z0
End DoDot:3
+8 IF '$DATA(^IBE(364.4,IBDA1,"BTYP",0))
SET DIC("P")=$$GETSPEC^IBEFUNC(364.4,.1)
+9 SET X=IB(364.41,IBC,.01)
+10 SET DA(1)=IBDA1
SET DIC="^IBE(364.4,"_IBDA1_",""BTYP"","
SET DIC(0)="L"
SET DLAYGO=364.4
+11 DO FILE^DICN
End DoDot:2
End DoDot:1
+12 QUIT
+13 ;
INSADD(IB,IBDA1) ; Add ins co exceptions from entries in
+1 ; IB(364.42 - exclude) or IB(364.43 - include) to rule IBDA1
+2 ;
+3 NEW Z,IBNODE,Z0
+4 FOR Z=364.42,364.43
SET IBNODE=$EXTRACT(Z,$LENGTH(Z))
SET Z0=0
FOR
SET Z0=$ORDER(IB(Z,Z0))
if 'Z0
QUIT
Begin DoDot:1
+5 NEW DO,DD,DIC,DLAYGO,DA
+6 IF '$DATA(^IBE(364.4,IBDA1,IBNODE,0))
SET DIC("P")=$$GETSPEC^IBEFUNC(364.4,IBNODE)
+7 SET DA(1)=IBDA1
SET DIC="^IBE(364.4,"_IBDA1_","_IBNODE_","
SET DIC(0)="L"
SET DLAYGO=364.4
SET X=Z0
+8 DO FILE^DICN
KILL DIC
End DoDot:1
+9 QUIT
+10 ;
BTDTOK(IBRULE,IBBT,IBDTYP,X) ; Check bill type date is consistent for rule
+1 ; IBRULE = ien of rule - file 364.4
+2 ; IBBT = ien of bill type in rule IBRULE (optional if check at top level)
+3 ; IBDTYP = 1 for active date check, 2 for inactive date check
+4 ; X = Value of date being validated
+5 ;
+6 ; Function returns 1 if consistencies are OK, 0 if not
+7 ;
+8 NEW IBOK,IBPCK,Z
+9 SET IBOK=1
+10 SET IBPCK=$SELECT(IBDTYP=1:2,1:6)
+11 ;
+12 ; Check for consistency at rule level first
+13 ;
+14 ; Active dt must not be after rule's inact dt
+15 IF IBDTYP=1
IF $PIECE($GET(^IBE(364.4,IBRULE,0)),U,6)
IF X>$PIECE(^(0),U,6)
SET Z=$$FMTE^XLFDT($PIECE($GET(^IBE(364.4,IBRULE,0)),U,6))
DO EN^DDIOL("CANNOT BE AFTER RULE'S INACTIVE DATE OF "_$SELECT('Z:"<MISSING>",1:Z),,"!!")
SET IBOK=0
GOTO BTDTQ
+16 ;
+17 ; Inact dt must not be prior to rule's active dt
+18 IF IBDTYP=2
IF $SELECT('$PIECE($GET(^IBE(364.4,IBRULE,0)),U,2):'$GET(IBBT),1:X<$PIECE($GET(^(0)),U,2))
SET Z=$$FMTE^XLFDT($PIECE($GET(^IBE(364.4,IBRULE,0)),U,2))
DO EN^DDIOL("CANNOT BE BEFORE RULE'S ACTIVE DATE OF "_$SELECT('Z:"<MISSING>",1:Z),,"!!")
SET IBOK=0
GOTO BTDTQ
+19 ;
+20 ; Check for consistency at the bill type level
IF $GET(IBBT)
Begin DoDot:1
+21 ; Active dt at bt level must be prior to inactive dt
+22 IF IBDTYP=1
IF $PIECE($GET(^IBE(364.4,IBRULE,"IBTYP",IBBT,0)),U,3)
IF X>$PIECE(^(0),U,3)
SET Z=$$FMTE^XLFDT($PIECE(^IBE(364.4,IBRULE,"IBTYP",IBBT,0),U,3))
DO EN^DDIOL("MUST BE PRIOR TO BILL TYPE'S INACTIVE DATE OF "_$SELECT('Z:"<MISSING>",1:Z),,"!!")
SET IBOK=0
QUIT
+23 ; Inactive dt at bt level must be after active dt
+24 IF IBDTYP=2
IF $SELECT('$PIECE($GET(^IBE(364.4,IBRULE,"IBTYP",IBBT,0)),U,2):1,1:X<$PIECE(^(0),U,2))
SET Z=$$FMTE^XLFDT($PIECE($GET(^IBE(364.4,IBRULE,"IBTYP",IBBT,0)),U,2))
DO EN^DDIOL("MUST BE AFTER BILL TYPE'S ACTIVE DATE OF "_$SELECT('Z:"<MISSING>",1:Z),,"!!")
SET IBOK=0
QUIT
+25 ;
+26 SET Z=0
+27 FOR
SET Z=$ORDER(^IBE(364.4,IBRULE,"BTYP",Z))
if 'Z
QUIT
SET Z0=$GET(^(Z,0))
Begin DoDot:2
+28 IF $PIECE(Z0,U,IBDTYP+1)
IF $SELECT(IBDTYP=1:X<$PIECE(Z0,U,2),1:X>$PIECE(Z0,U,3))
DO EN^DDIOL("CHANGE WOULD INVALIDATE BILL TYPE RESTRICTION DATE",,"!!")
SET IBOK=0
End DoDot:2
if 'IBOK
QUIT
End DoDot:1
BTDTQ QUIT IBOK
+1 ;