| 1 | IBCEF61 ;ALB/TMP - EDI TRANSMISSION RULES DEFINITION ;28-APR-99 | 
|---|
| 2 | ;;2.0;INTEGRATED BILLING;**137**;21-MAR-94 | 
|---|
| 3 | ; | 
|---|
| 4 | SELRULE(IBRULE) ; Select rule | 
|---|
| 5 | D FULL^VALM1 | 
|---|
| 6 | S IBRULE="" | 
|---|
| 7 | N IBR,IB | 
|---|
| 8 | D EN^VALM2($G(XQORNOD(0)),"S") | 
|---|
| 9 | S IBR=0 F  S IBR=$O(VALMY(IBR)) Q:'IBR  S IB=$G(^TMP("IBCE-RULEDX",$J,IBR)),IBRULE=+$P(IB,U,2) | 
|---|
| 10 | Q | 
|---|
| 11 | ; | 
|---|
| 12 | ACTIVE(IBRULE) ; Edit rules' active/inactive dates | 
|---|
| 13 | ; IBRULE = ien of rule in file 364.4 | 
|---|
| 14 | ; | 
|---|
| 15 | G:'$G(IBRULE) ACTQ | 
|---|
| 16 | N DA,DR,DIE,X,Y,Z,Z0 | 
|---|
| 17 | S DA=$G(IBRULE),DIE="^IBE(364.4," | 
|---|
| 18 | S DR=".02;.06" | 
|---|
| 19 | D ^DIE | 
|---|
| 20 | I $D(Y) S IBRULE=0 G ACTQ | 
|---|
| 21 | D REBLD^IBCEF6($G(IBACTIVE)) | 
|---|
| 22 | ACTQ S VALMBCK="R" | 
|---|
| 23 | Q | 
|---|
| 24 | ; | 
|---|
| 25 | SCRACT ; Rebld display - only currently active | 
|---|
| 26 | S IBACTIVE=1 | 
|---|
| 27 | D REBLD^IBCEF6(1) | 
|---|
| 28 | S VALMBCK="R" | 
|---|
| 29 | Q | 
|---|
| 30 | ; | 
|---|
| 31 | NOSCR ; Rebld display - inactive and currently active | 
|---|
| 32 | S IBACTIVE=0 | 
|---|
| 33 | D REBLD^IBCEF6(0) | 
|---|
| 34 | S VALMBCK="R" | 
|---|
| 35 | Q | 
|---|
| 36 | ; | 
|---|
| 37 | BILTYP(IBRULE) ; Allow to edit bill types for rule | 
|---|
| 38 | ; IBRULE = ien of rule - file 364.4 | 
|---|
| 39 | ; | 
|---|
| 40 | G:'$G(IBRULE) BILTYPQ | 
|---|
| 41 | N DA,DR,DIE,X,Y,Z,Z0,IBRT,IB,IBOK,IBCT | 
|---|
| 42 | S DA=$G(IBRULE),DIE="^IBE(364.4,",IBRT=$P($G(^IBE(364.4,IBRULE,0)),U,11) | 
|---|
| 43 | I $S(IBRT=9:0,1:IBRT'=1) D  G BILTYPQ | 
|---|
| 44 | . W ! | 
|---|
| 45 | . 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 ! | 
|---|
| 46 | S (IBO,IBCT)=0 ;Extract existing entries | 
|---|
| 47 | 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) | 
|---|
| 48 | ; Display entries, allow to add/edit/delete | 
|---|
| 49 | D EN^IBCEF62 | 
|---|
| 50 | BILTYPQ S VALMBCK="R" | 
|---|
| 51 | Q | 
|---|
| 52 | ; | 
|---|
| 53 | SEL(VALMY) ; Select one or more bill type restriction entries | 
|---|
| 54 | ; VALMY = passed by reference and returned subscripted by | 
|---|
| 55 | ; entry #(s) in the LM array selected | 
|---|
| 56 | ; | 
|---|
| 57 | N Z | 
|---|
| 58 | D FULL^VALM1 | 
|---|
| 59 | N IBR | 
|---|
| 60 | D EN^VALM2($G(XQORNOD(0))) | 
|---|
| 61 | Q | 
|---|
| 62 | ; | 
|---|
| 63 | BTEDIT(IBRULE) ; Edit bill type restriction dates | 
|---|
| 64 | ; IBRULE = ien of the bill type restriction being edited | 
|---|
| 65 | ;      (0)= ien of the RULE - file 364.4 | 
|---|
| 66 | G:'$G(IBRULE) BTEQ | 
|---|
| 67 | ; | 
|---|
| 68 | N DA,DIE,DR,Y,X,VALMY,Z,IBBT | 
|---|
| 69 | ; | 
|---|
| 70 | S IBCT=0 | 
|---|
| 71 | D SEL(.VALMY) | 
|---|
| 72 | G:'$O(VALMY(0)) BTEQ ; None selected | 
|---|
| 73 | ; | 
|---|
| 74 | S Z=0 F  S Z=$O(VALMY(Z)) Q:'Z  S IBBT=+$G(^TMP("IBCE-BTDX",$J,Z)) I IBBT D | 
|---|
| 75 | . S DA(1)=IBRULE,DA=IBBT,DIE="^IBE(364.4,"_DA(1)_",""BTYP"",",DR=".02;.03" | 
|---|
| 76 | . W !!,"Bill Type Restriction #"_Z_" - "_$E($G(^TMP("IBCE-BT",$J,Z,0)),5,50),! | 
|---|
| 77 | . D ^DIE | 
|---|
| 78 | . D REBLD^IBCEF62 | 
|---|
| 79 | ; | 
|---|
| 80 | BTEQ S VALMBCK="R" | 
|---|
| 81 | Q | 
|---|
| 82 | ; | 
|---|
| 83 | BTADD(IBRULE) ; Add new bill type restrictions | 
|---|
| 84 | ; IBRULE = ien of rule entry - file 364.4 | 
|---|
| 85 | N IB,IBCT,Z,IBOK | 
|---|
| 86 | D FULL^VALM1 | 
|---|
| 87 | G:'$G(IBRULE) BTAQ | 
|---|
| 88 | ; | 
|---|
| 89 | S (IBCT,Z)=0 | 
|---|
| 90 | 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) | 
|---|
| 91 | ; | 
|---|
| 92 | D BTYP^IBCEF51(.IB,.IBOK,0) | 
|---|
| 93 | ; | 
|---|
| 94 | I IBOK D | 
|---|
| 95 | . N Z | 
|---|
| 96 | . 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 | 
|---|
| 97 | . D ADDBTYP(.IB,IBRULE) | 
|---|
| 98 | . D REBLD^IBCEF62 | 
|---|
| 99 | D SUCCESS(IBOK) | 
|---|
| 100 | ; | 
|---|
| 101 | BTAQ S VALMBCK="R" | 
|---|
| 102 | Q | 
|---|
| 103 | ; | 
|---|
| 104 | INSCO(IBRULE) ; Allow user to edit rule's ins co data | 
|---|
| 105 | ; IBRULE = ien of rule - file 364.4 | 
|---|
| 106 | ; | 
|---|
| 107 | G:'$G(IBRULE) INSCOQ | 
|---|
| 108 | N DA,DR,DIE,X,Y,Z,Z0,IB,IB0 | 
|---|
| 109 | S DA=$G(IBRULE),DIE="^IBE(364.4," | 
|---|
| 110 | S IB0=$G(^IBE(364.4,IBRULE,0)),IB(".07O")=$P(IB0,U,7) | 
|---|
| 111 | 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" | 
|---|
| 112 | D ^DIE | 
|---|
| 113 | S IB(.07)=$P($G(^IBE(364.4,IBRULE,0)),U,7) | 
|---|
| 114 | ; | 
|---|
| 115 | I IB(".07O"),IB(".07O")'=IB(.07),IB(".07O")'=3 D  ; Delete 'old' includes/excludes | 
|---|
| 116 | . 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 | 
|---|
| 117 | ; | 
|---|
| 118 | ; If all ins cos selected, delete existing specific ones in/excluded | 
|---|
| 119 | I 'IB(.07)!(IB(.07)=3) D | 
|---|
| 120 | . Q:IB(".07O")=IB(.07) | 
|---|
| 121 | . 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 | 
|---|
| 122 | E  D | 
|---|
| 123 | . Q:$O(^IBE(364.4,IBRULE,$S(IB(.07)=1:3,1:2),0)) | 
|---|
| 124 | . W !,"Warning ... no insurance companies chosen to "_$S(IB(.07)=1:"in",1:"ex")_"clude" | 
|---|
| 125 | . D QUIT^IBCEF5 | 
|---|
| 126 | D REBLD^IBCEF6($G(IBACTIVE)) | 
|---|
| 127 | ; | 
|---|
| 128 | INSCOQ S VALMBCK="R" | 
|---|
| 129 | Q | 
|---|
| 130 | ; | 
|---|
| 131 | MISC(IBRULE) ; Edit other misc fields for the rule | 
|---|
| 132 | ; IBRULE = ien of rule - file 364.4 | 
|---|
| 133 | ; | 
|---|
| 134 | I $G(IBRULE) D | 
|---|
| 135 | . N DA,DR,DIE,X,Y,Z,Z0 | 
|---|
| 136 | . S DA=$G(IBRULE),DIE="^IBE(364.4," | 
|---|
| 137 | . S DR=".08;1;4" | 
|---|
| 138 | . D ^DIE | 
|---|
| 139 | . D REBLD^IBCEF6($G(IBACTIVE)) | 
|---|
| 140 | S VALMBCK="R" | 
|---|
| 141 | Q | 
|---|
| 142 | ; | 
|---|
| 143 | DISPRUL(IBRULE) ; Display rule selected | 
|---|
| 144 | ; IBRULE = ien of rule - file 364.4 | 
|---|
| 145 | ; | 
|---|
| 146 | I '$G(IBRULE) D FULL^VALM1 | 
|---|
| 147 | N DIOBEG,FR,TO,BY,DIC,DA,L,FLDS,DHD | 
|---|
| 148 | S (FR,TO)=$G(IBRULE),DHD="[IBCE RULE DISPLAY HEADER]" | 
|---|
| 149 | S L=0,BY="@RULE NUMBER",DIC="^IBE(364.4,",FLDS="[IBCE RULE DISPLAY]" | 
|---|
| 150 | S DIOBEG="W !" | 
|---|
| 151 | W !! | 
|---|
| 152 | D EN1^DIP | 
|---|
| 153 | DISPRQ S VALMBCK="R" | 
|---|
| 154 | D PAUSE^VALM1 | 
|---|
| 155 | Q | 
|---|
| 156 | ; | 
|---|
| 157 | SUCCESS(IBOK) ; Display msg after add rule | 
|---|
| 158 | ; IBOK = 1 if successful, 0 if not | 
|---|
| 159 | ; | 
|---|
| 160 | N DIR,Y,X | 
|---|
| 161 | S DIR(0)="EA" | 
|---|
| 162 | W ! | 
|---|
| 163 | I $G(IBOK) S DIR("A",1)="TRANSMISSION RULE(s) HAVE BEEN SUCCESSFULLY FILED" | 
|---|
| 164 | I '$G(IBOK) S DIR("A",1)="NO TRANSMISSION RULES ADDED" | 
|---|
| 165 | S DIR("A")="PRESS RETURN " D ^DIR K DIR | 
|---|
| 166 | S VALMBCK="R" | 
|---|
| 167 | Q | 
|---|
| 168 | ; | 
|---|
| 169 | ADDBTYP(IB,IBDA1) ; Add bill types in IB(364.41) to rule IBDA1 | 
|---|
| 170 | ; | 
|---|
| 171 | N Z,Z0,IBC | 
|---|
| 172 | I $D(IB(364.41)) D | 
|---|
| 173 | . S IBC=0 F  S IBC=$O(IB(364.41,IBC)) Q:'IBC  D | 
|---|
| 174 | .. N DO,DD,DIC,DLAYGO,DA,X,Y | 
|---|
| 175 | .. 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 | 
|---|
| 176 | ... S DIC("DR")=$G(DIC("DR"))_$S($G(DIC("DR"))="":"",1:";")_Z_"///"_Z0 | 
|---|
| 177 | .. I '$D(^IBE(364.4,IBDA1,"BTYP",0)) S DIC("P")=$$GETSPEC^IBEFUNC(364.4,.1) | 
|---|
| 178 | .. S X=IB(364.41,IBC,.01) | 
|---|
| 179 | .. S DA(1)=IBDA1,DIC="^IBE(364.4,"_IBDA1_",""BTYP"",",DIC(0)="L",DLAYGO=364.4 | 
|---|
| 180 | .. D FILE^DICN | 
|---|
| 181 | Q | 
|---|
| 182 | ; | 
|---|
| 183 | INSADD(IB,IBDA1) ; Add ins co exceptions from entries in | 
|---|
| 184 | ; IB(364.42 - exclude) or IB(364.43 - include) to rule IBDA1 | 
|---|
| 185 | ; | 
|---|
| 186 | N Z,IBNODE,Z0 | 
|---|
| 187 | F Z=364.42,364.43 S IBNODE=$E(Z,$L(Z)),Z0=0 F  S Z0=$O(IB(Z,Z0)) Q:'Z0  D | 
|---|
| 188 | . N DO,DD,DIC,DLAYGO,DA | 
|---|
| 189 | . I '$D(^IBE(364.4,IBDA1,IBNODE,0)) S DIC("P")=$$GETSPEC^IBEFUNC(364.4,IBNODE) | 
|---|
| 190 | . S DA(1)=IBDA1,DIC="^IBE(364.4,"_IBDA1_","_IBNODE_",",DIC(0)="L",DLAYGO=364.4,X=Z0 | 
|---|
| 191 | . D FILE^DICN K DIC | 
|---|
| 192 | Q | 
|---|
| 193 | ; | 
|---|
| 194 | BTDTOK(IBRULE,IBBT,IBDTYP,X) ; Check bill type date is consistent for rule | 
|---|
| 195 | ; IBRULE = ien of rule - file 364.4 | 
|---|
| 196 | ; IBBT = ien of bill type in rule IBRULE (optional if check at top level) | 
|---|
| 197 | ; IBDTYP = 1 for active date check, 2 for inactive date check | 
|---|
| 198 | ; X = Value of date being validated | 
|---|
| 199 | ; | 
|---|
| 200 | ; Function returns 1 if consistencies are OK, 0 if not | 
|---|
| 201 | ; | 
|---|
| 202 | N IBOK,IBPCK,Z | 
|---|
| 203 | S IBOK=1 | 
|---|
| 204 | S IBPCK=$S(IBDTYP=1:2,1:6) | 
|---|
| 205 | ; | 
|---|
| 206 | ; Check for consistency at rule level first | 
|---|
| 207 | ; | 
|---|
| 208 | ; Active dt must not be after rule's inact dt | 
|---|
| 209 | 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 | 
|---|
| 210 | ; | 
|---|
| 211 | ; Inact dt must not be prior to rule's active dt | 
|---|
| 212 | 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 | 
|---|
| 213 | ; | 
|---|
| 214 | I $G(IBBT) D  ; Check for consistency at the bill type level | 
|---|
| 215 | . ; Active dt at bt level must be prior to inactive dt | 
|---|
| 216 | . 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 | 
|---|
| 217 | . ; Inactive dt at bt level must be after active dt | 
|---|
| 218 | . 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 | 
|---|
| 219 | . ; | 
|---|
| 220 | . S Z=0 | 
|---|
| 221 | . F  S Z=$O(^IBE(364.4,IBRULE,"BTYP",Z)) Q:'Z  S Z0=$G(^(Z,0))  D  Q:'IBOK | 
|---|
| 222 | .. 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 | 
|---|
| 223 | BTDTQ Q IBOK | 
|---|
| 224 | ; | 
|---|