| [613] | 1 | IBCRED ;ALB/ARH - RATES: CM DELETE CHARGE ITEMS OPTION ; 22-MAY-1996 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**52,106,148,307**;21-MAR-94 | 
|---|
|  | 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | ; | 
|---|
|  | 6 | ENTER ; OPTION ENTRY POINT:  delete charge items for a specific charge set, may be inactive by a date or all | 
|---|
|  | 7 | ; | 
|---|
|  | 8 | W @IOF W !,?12,"**** DELETE INACTIVE CHARGE ITEMS FROM A CHARGE SET ****" | 
|---|
|  | 9 | W !!,?5,"For a given Charge Set, this option allows deletion of all chargeable items",!,?5,"that have been inactivated or replaced before a certain date.",! | 
|---|
|  | 10 | W !,?5,"Since all charges for a billing rate and date range may be deleted with",!,?5,"this option, caution is advised.",! | 
|---|
|  | 11 | ; | 
|---|
|  | 12 | N IBCS,IBDT,IBCSDEL,IBQUIT,DIR,DTOUT,DUOUT,DIRUT,X,Y S IBDT=0,IBCSDEL=0 K ^TMP($J,"IBCRED") | 
|---|
|  | 13 | ; | 
|---|
|  | 14 | W !!,"The Charge Set to delete Charge items from:" S IBCS=$$GETCS^IBCRU1 I +IBCS<1 Q | 
|---|
|  | 15 | ; | 
|---|
|  | 16 | W ! S DIR(0)="YO",DIR("A")="Delete ALL charges for this Charge Set" D ^DIR K DIR Q:$D(DIRUT)  I Y=1 S IBDT="ALL" | 
|---|
|  | 17 | I IBDT="ALL" I IBCS>999!($P(IBCS,U,2)["RC-")!($P(IBCS,U,2)["CMAC") D | 
|---|
|  | 18 | . S DIR("?")="Enter Yes to delete the Charge Set and it's links with Rate Schedules and Special Groups.  The sets Region will also be deleted if not associated with another set." | 
|---|
|  | 19 | . S DIR(0)="YO",DIR("A")="Also delete the Charge Set "_$P(IBCS,U,2) D ^DIR K DIR Q:$D(DIRUT)  I Y=1 S IBCSDEL=1 | 
|---|
|  | 20 | ; | 
|---|
|  | 21 | I IBDT'="ALL" W !!,"All charges inactive before this date will be deleted:" S IBDT=$$GETDT^IBCRU1(,"Select INACTIVE DATE") I IBDT'?7N W !,"No deletions",! Q | 
|---|
|  | 22 | ; | 
|---|
|  | 23 | S DIR(0)="SO^1:Print List of Charges that will be Deleted;2:Delete Charges" D ^DIR K DIR I +Y<1!$D(DIRUT) Q | 
|---|
|  | 24 | I +Y=1 D DEV Q:+$G(IBQUIT)  G RPT | 
|---|
|  | 25 | ; | 
|---|
|  | 26 | W !!!,"All charges",$S('IBDT:"",1:" inactive before "_$$DATE(IBDT))," for ",$P(IBCS,U,2)," will be deleted.",! | 
|---|
|  | 27 | ; | 
|---|
|  | 28 | S DIR(0)="YO",DIR("A")="Is this correct, do you want to continue" D ^DIR K DIR I Y'=1 W !,"No deletions",! | 
|---|
|  | 29 | ; | 
|---|
|  | 30 | I Y=1 D | 
|---|
|  | 31 | . W !,"Beginning Deletions" W !,$$DELETE(IBCS,IBDT)," charges deleted." | 
|---|
|  | 32 | . I +IBCSDEL W !!,$P(IBCS,U,2)," ",$P($$CSDELETE(+IBCS),U,2) | 
|---|
|  | 33 | Q | 
|---|
|  | 34 | ; | 
|---|
|  | 35 | DELETE(CS,INDT,SAVE) ; delete all charge items in a set inactive before a certain date | 
|---|
|  | 36 | ; Input:   CS   - set to delete charges from, | 
|---|
|  | 37 | ;          INDT - charges not active on this date will be deleted, if ALL- all charges will be deleted from set | 
|---|
|  | 38 | ;          SAVE - if true, charge items that would be deleted are entered into TMP array for printing instead | 
|---|
|  | 39 | ; Output:  returns the count of the charge items deleted | 
|---|
|  | 40 | ; | 
|---|
|  | 41 | N IBXRF,IBCNT,IBSUB2,IBEFDT,IBITM,IBCIFN,IBINDTCI | 
|---|
|  | 42 | S IBXRF="AIVDTS"_+$G(CS),IBCNT=0,INDT=$G(INDT),IBSUB2="" I INDT="ALL" S INDT=9999999 | 
|---|
|  | 43 | I +$G(SAVE) S IBSUB2=$$TMPHDR($G(CS),INDT) | 
|---|
|  | 44 | ; | 
|---|
|  | 45 | S IBITM=0 F  S IBITM=$O(^IBA(363.2,IBXRF,IBITM)) Q:'IBITM  D | 
|---|
|  | 46 | . S IBEFDT=0 F  S IBEFDT=$O(^IBA(363.2,IBXRF,IBITM,IBEFDT),-1) Q:'IBEFDT!(IBEFDT'>-INDT)  D | 
|---|
|  | 47 | .. S IBCIFN=0 F  S IBCIFN=$O(^IBA(363.2,IBXRF,IBITM,IBEFDT,IBCIFN)) Q:'IBCIFN  D | 
|---|
|  | 48 | ... ; | 
|---|
|  | 49 | ... S IBINDTCI=$$INACTCI^IBCRU4(IBCIFN) | 
|---|
|  | 50 | ... I INDT=9999999 D DELCI(IBCIFN,IBSUB2) S IBCNT=IBCNT+1 Q | 
|---|
|  | 51 | ... I +IBINDTCI,IBINDTCI<INDT D DELCI(IBCIFN,IBSUB2) S IBCNT=IBCNT+1 | 
|---|
|  | 52 | ; | 
|---|
|  | 53 | Q IBCNT | 
|---|
|  | 54 | ; | 
|---|
|  | 55 | DELCI(CI,SUB2) ; either save in TMP arry to print or delete | 
|---|
|  | 56 | I $G(SUB2)'="" D TMPLN^IBCROI1(CI,"IBCRED",SUB2,1) Q | 
|---|
|  | 57 | I $G(^IBA(363.2,+$G(CI),0)) S DA=CI,DIK="^IBA(363.2," D ^DIK K DA,DIK | 
|---|
|  | 58 | Q | 
|---|
|  | 59 | ; | 
|---|
|  | 60 | DATE(X) ; | 
|---|
|  | 61 | Q $E(X,4,5)_"/"_$E(X,6,7)_"/"_$E(X,2,3) | 
|---|
|  | 62 | ; | 
|---|
|  | 63 | TMPHDR(CS,INDT) ; set up array header for printed report | 
|---|
|  | 64 | N IBHDR,IBHDR2,IBDT,SUB2 S SUB2=$P($G(^IBE(363.1,+CS,0)),U,1) | 
|---|
|  | 65 | S IBHDR="Charges (to be deleted) in "_SUB2_" set" | 
|---|
|  | 66 | S IBHDR2=" inactive before",IBDT=INDT I IBDT=9999999 S IBHDR2=" (ALL CHARGES IN SET)",IBDT="" | 
|---|
|  | 67 | D TMPHDR^IBCROI1("IBCRED",SUB2,+CS,IBHDR_IBHDR2,"2^1",IBDT) | 
|---|
|  | 68 | Q SUB2 | 
|---|
|  | 69 | ; | 
|---|
|  | 70 | ; | 
|---|
|  | 71 | DEV ; get device for printed report | 
|---|
|  | 72 | S IBQUIT=0 S %ZIS="QM",%ZIS("A")="OUTPUT DEVICE: " D ^%ZIS I POP S IBQUIT=1 Q | 
|---|
|  | 73 | I $D(IO("Q")) S ZTRTN="RPT^IBCRED",ZTDESC="Delete Charges Report",ZTSAVE("IB*")="" D ^%ZTLOAD K IO("Q") S IBQUIT=1 | 
|---|
|  | 74 | Q | 
|---|
|  | 75 | ; | 
|---|
|  | 76 | RPT ; print report - entry point for tasked jobs | 
|---|
|  | 77 | N IBSCRPT,IBCNT S IBSCRPT="IBCRED" K ^TMP($J,"IBCRED") | 
|---|
|  | 78 | S IBCNT=$$DELETE(IBCS,IBDT,1) | 
|---|
|  | 79 | I $D(^TMP($J,"IBCRED")) S $P(^TMP($J,"IBCRED"),U,4)=IBCNT_" Charges to be deleted" | 
|---|
|  | 80 | G RPT^IBCROI | 
|---|
|  | 81 | Q | 
|---|
|  | 82 | ; | 
|---|
|  | 83 | CSDELETE(IBCS) ; delete a Charge Set, including all pointers to it, also delete region if not assigned to another set | 
|---|
|  | 84 | N IBFN,IB11,IBRG,IBER,DA,DIC,DIE,DIK,X,Y S IBER="0^Charge Set not deleted" | 
|---|
|  | 85 | I '$D(^IBE(363.1,+$G(IBCS),0)) G CSDELQ | 
|---|
|  | 86 | I $O(^IBA(363.2,"AIVDTS"_+IBCS,"")) S IBER="0^Charge Set has associated Charge Items, can not delete." G CSDELQ | 
|---|
|  | 87 | I $P($G(^IBE(350.9,1,9)),U,12)=+IBCS S IBER="0^Charge Set pointed to by AWP CHARGE SET Site Parameter, can not delete." G CSDELQ | 
|---|
|  | 88 | ; | 
|---|
|  | 89 | ; remove from Rate Schedule | 
|---|
|  | 90 | S IBFN=0 F  S IBFN=$O(^IBE(363,"C",+IBCS,IBFN)) Q:'IBFN  D | 
|---|
|  | 91 | . S IB11="" F  S IB11=$O(^IBE(363,"C",+IBCS,IBFN,IB11)) Q:'IB11  D | 
|---|
|  | 92 | .. I +$G(^IBE(363,+IBFN,11,+IB11,0))=+IBCS S DA(1)=+IBFN,DA=+IB11,DIK="^IBE(363,"_DA(1)_",11," D ^DIK K DIK | 
|---|
|  | 93 | ; | 
|---|
|  | 94 | ; remove from Special Groups | 
|---|
|  | 95 | S IBFN=0 F  S IBFN=$O(^IBE(363.32,IBFN)) Q:'IBFN  D | 
|---|
|  | 96 | . S IB11=0 F  S IB11=$O(^IBE(363.32,IBFN,11,IB11)) Q:'IB11  D | 
|---|
|  | 97 | .. I +$P($G(^IBE(363.32,IBFN,11,IB11,0)),U,2)=+IBCS S DA(1)=+IBFN,DA=+IB11,DIK="^IBE(363.32,"_DA(1)_",11," D ^DIK K DIK | 
|---|
|  | 98 | ; | 
|---|
|  | 99 | ; delete region if not assigned to another Charge Set | 
|---|
|  | 100 | S IBRG=$P($G(^IBE(363.1,+IBCS,0)),U,7) | 
|---|
|  | 101 | I +IBRG S IBFN=0 F  S IBFN=$O(^IBE(363.1,IBFN)) Q:'IBFN  D | 
|---|
|  | 102 | . I +IBFN'=+IBCS,$P($G(^IBE(363.1,+IBFN,0)),U,7)=IBRG S IBRG=0 | 
|---|
|  | 103 | I +IBRG S DA=+IBRG,DIK="^IBE(363.31," D ^DIK K DA,DIK | 
|---|
|  | 104 | ; | 
|---|
|  | 105 | ; delete Charge Set | 
|---|
|  | 106 | S DA=+IBCS,DIK="^IBE(363.1," D ^DIK K DA,DIK | 
|---|
|  | 107 | S IBER="1^Charge Set Deleted"_$S(+IBRG:", Region Deleted",1:"")_"." | 
|---|
|  | 108 | CSDELQ Q IBER | 
|---|
|  | 109 | ; | 
|---|
|  | 110 | CSEMPTY(BR) ; delete Charge Sets that have no associated Charges (except VA Cost) | 
|---|
|  | 111 | ; Input: BR may be passed to limit the check for empty Charge Sets to specific Billing Rates | 
|---|
|  | 112 | ;        only CS's of the passed Billing Rate will be checked and deleted if it has no charges | 
|---|
|  | 113 | ;           - pointer to the Billing Rate (363.3) to check | 
|---|
|  | 114 | ;           - first two characters of the Billing Rate Name (363.3,.01) to check | 
|---|
|  | 115 | ;           - if no BR passed then all Charge Sets/Billing Rates are checked | 
|---|
|  | 116 | ; Returns: count of Charge Sets deleted | 
|---|
|  | 117 | N IBCS,IBCS0,IBBR,IBBR0,IBX,IBCNT,X,Y S IBCNT=0 | 
|---|
|  | 118 | S IBCS=0 F  S IBCS=$O(^IBE(363.1,IBCS)) Q:'IBCS  D | 
|---|
|  | 119 | . S IBCS0=$G(^IBE(363.1,IBCS,0)),IBBR=+$P(IBCS0,U,2),IBBR0=$G(^IBE(363.3,+IBBR,0)) | 
|---|
|  | 120 | . I '$P(IBBR0,U,4)!($P(IBBR0,U,5)=2) Q  ; VA Cost | 
|---|
|  | 121 | . I +$G(BR),IBBR'=BR Q  ; selected Billing Rates | 
|---|
|  | 122 | . I '$G(BR),$G(BR)'="",$E(IBBR0,1,2)'=BR Q  ; selected Billing Rate names/types | 
|---|
|  | 123 | . I '$O(^IBA(363.2,"AIVDTS"_+IBCS,"")) S IBX=$$CSDELETE(IBCS) I +IBX S IBCNT=IBCNT+1 | 
|---|
|  | 124 | Q IBCNT | 
|---|