| [613] | 1 | IBECUS1 ;RLM/DVAMC - TRICARE PHARMACY BILLING ENGINES ; 14-AUG-96 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**52,88,240,274**;21-MAR-94 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | BILLS ; Tasked entry point:  Secondary Billing engine. | 
|---|
|  | 5 | ; | 
|---|
|  | 6 | I $D(^%ZOSF("TRAP")) S X="ERRS^IBECUS1",@^("TRAP") | 
|---|
|  | 7 | ; | 
|---|
|  | 8 | ; - main idling loop | 
|---|
|  | 9 | F  H 100 Q:'$P($G(^IBE(350.9,1,9)),"^",4) | 
|---|
|  | 10 | ; | 
|---|
|  | 11 | I $P($G(^IBE(350.9,1,9)),"^",10) S $P(^IBE(350.9,1,9),"^",5)="" G BILLQ | 
|---|
|  | 12 | ; | 
|---|
|  | 13 | ; - drop into Primary Billing task... | 
|---|
|  | 14 | ; | 
|---|
|  | 15 | ; | 
|---|
|  | 16 | BILLP ; Tasked entry point:  Primary Billing engine. | 
|---|
|  | 17 | ; | 
|---|
|  | 18 | I $D(^%ZOSF("TRAP")) S X="ERRP^IBECUS1",@^("TRAP") | 
|---|
|  | 19 | ; | 
|---|
|  | 20 | ; - open the port | 
|---|
|  | 21 | D CALL^%ZISTCP(IBCHAN,IBBPORT) I POP G BILLC | 
|---|
|  | 22 | ; | 
|---|
|  | 23 | ; - start secondary job | 
|---|
|  | 24 | D SECB | 
|---|
|  | 25 | ; | 
|---|
|  | 26 | ; - send alert notifying that the billing engine has started | 
|---|
|  | 27 | D NOW^%DTC S $P(^IBE(350.9,1,9),"^",8)=%,Y=% X ^DD("DD") | 
|---|
|  | 28 | S XQA("G.IB CHAMP RX START")="",XQAMSG="IPS Billing Process Started "_Y | 
|---|
|  | 29 | D SETUP^XQALERT | 
|---|
|  | 30 | ; | 
|---|
|  | 31 | ; - main processing loop | 
|---|
|  | 32 | F  R IBX:50 D SND,UPD I $P($G(^IBE(350.9,1,9)),"^",10) Q | 
|---|
|  | 33 | ; | 
|---|
|  | 34 | BILLC D CLOSE^%ZISTCP | 
|---|
|  | 35 | ; | 
|---|
|  | 36 | ; - delete the primary task | 
|---|
|  | 37 | S $P(^IBE(350.9,1,9),"^",4)="" | 
|---|
|  | 38 | ; | 
|---|
|  | 39 | BILLQ Q | 
|---|
|  | 40 | ; | 
|---|
|  | 41 | ; | 
|---|
|  | 42 | SND ; Process all prescriptions queued for billing. | 
|---|
|  | 43 | F  R *IBI:0 Q:IBI=-1  ; bleed queue | 
|---|
|  | 44 | S IBKEY="" F  S IBKEY=$O(^IBA(351.5,"APOST",IBKEY)) Q:'IBKEY  S IBKEYD=$G(^(IBKEY)),IBROU="^IBECUS"_$S(IBKEYD["REVERSE":3,1:2) D @IBROU | 
|---|
|  | 45 | Q | 
|---|
|  | 46 | ; | 
|---|
|  | 47 | ; | 
|---|
|  | 48 | UPD ; Update the last run date/time. | 
|---|
|  | 49 | D NOW^%DTC | 
|---|
|  | 50 | S $P(^IBE(350.9,1,9),"^",9)=% | 
|---|
|  | 51 | Q | 
|---|
|  | 52 | ; | 
|---|
|  | 53 | ; | 
|---|
|  | 54 | ERRP ; Primary billing task error trap | 
|---|
|  | 55 | D CLOSE^%ZISTCP | 
|---|
|  | 56 | S $P(^IBE(350.9,1,9),"^",4)="" | 
|---|
|  | 57 | G ^%ZTER | 
|---|
|  | 58 | ; | 
|---|
|  | 59 | ERRS ; Secondary billing task error trap | 
|---|
|  | 60 | D SECB | 
|---|
|  | 61 | G ^%ZTER | 
|---|
|  | 62 | ; | 
|---|
|  | 63 | SECB ; Start the secondary billing task. | 
|---|
|  | 64 | S ZTRTN="BILLS^IBECUS1",ZTDTH=$H,ZTIO="" | 
|---|
|  | 65 | S ZTDESC="IB - TRICARE Secondary Billing Task" | 
|---|
|  | 66 | I IBVOL]"" S ZTCPU=IBVOL | 
|---|
|  | 67 | F I="IBBPORT","IBCHAN","IBCHSET","IBPRESCR","IBVOL" S ZTSAVE(I)="" | 
|---|
|  | 68 | D ^%ZTLOAD | 
|---|
|  | 69 | ; | 
|---|
|  | 70 | S $P(^IBE(350.9,1,9),"^",5)=$G(ZTSK) | 
|---|
|  | 71 | ; | 
|---|
|  | 72 | K ZTRTN,ZTDTH,ZTIO,ZTSK,ZTCPU,ZTSAVE | 
|---|
|  | 73 | Q | 
|---|
|  | 74 | ; | 
|---|
|  | 75 | ; | 
|---|
|  | 76 | ; | 
|---|
|  | 77 | AWPS ; Tasked entry point:  Secondary AWP Update engine. | 
|---|
|  | 78 | ; | 
|---|
|  | 79 | I $D(^%ZOSF("TRAP")) S X="ERRAS^IBECUS1",@^("TRAP") | 
|---|
|  | 80 | ; | 
|---|
|  | 81 | ; - main idling loop | 
|---|
|  | 82 | F  H 100 Q:'$P($G(^IBE(350.9,1,9)),"^",6) | 
|---|
|  | 83 | ; | 
|---|
|  | 84 | I $P($G(^IBE(350.9,1,9)),"^",10) S $P(^IBE(350.9,1,9),"^",7)="" G AWPPQ | 
|---|
|  | 85 | ; | 
|---|
|  | 86 | ; - drop into Primary AWP Update task... | 
|---|
|  | 87 | ; | 
|---|
|  | 88 | ; | 
|---|
|  | 89 | AWPP ; Tasked Entry Point:  Primary AWP Update Engine | 
|---|
|  | 90 | ; | 
|---|
|  | 91 | I $D(^%ZOSF("TRAP")) S X="ERRAP^IBECUS1",@^("TRAP") | 
|---|
|  | 92 | ; | 
|---|
|  | 93 | ; - open the port | 
|---|
|  | 94 | D CALL^%ZISTCP(IBCHAN,IBAPORT) I POP G AWPPC | 
|---|
|  | 95 | ; | 
|---|
|  | 96 | ; - start secondary job | 
|---|
|  | 97 | D SECA | 
|---|
|  | 98 | ; | 
|---|
|  | 99 | ; - main processing loop | 
|---|
|  | 100 | S IBUPD=0 F  R IBX:30 D  I $P($G(^IBE(350.9,1,9)),"^",10) Q | 
|---|
|  | 101 | .; | 
|---|
|  | 102 | .; - if no response, sent alert if necessary | 
|---|
|  | 103 | .I IBX="" D:IBUPD  Q | 
|---|
|  | 104 | ..D NOW^%DTC S Y=% X ^DD("DD") | 
|---|
|  | 105 | ..S XQA("G.IB CHAMP RX START")="" | 
|---|
|  | 106 | ..S XQAMSG="AWP update completed on "_Y_".  "_IBUPD_" new rates were added." | 
|---|
|  | 107 | ..D SETUP^XQALERT | 
|---|
|  | 108 | ..S IBUPD=0 | 
|---|
|  | 109 | .; | 
|---|
|  | 110 | .; - respond if record is not in the anticipated format | 
|---|
|  | 111 | .I IBX'?36N W "N" Q | 
|---|
|  | 112 | .I IBX?36"9" Q | 
|---|
|  | 113 | .; | 
|---|
|  | 114 | .; - pull data from the transmitted record | 
|---|
|  | 115 | .S IBNDCO=$E(IBX,1,11),IBNDCN=$E(IBX,12,22),IBAWP=$E(IBX,23,29) | 
|---|
|  | 116 | .S IBAWP=$E(IBAWP,1,3)_"."_$E(IBAWP,4,7) | 
|---|
|  | 117 | .S IBNDC=$S(IBNDCN:IBNDCN,1:IBNDCO) | 
|---|
|  | 118 | .S IBNDC=$E(IBNDC,1,5)_"-"_$E(IBNDC,6,9)_"-"_$E(IBNDC,10,11) | 
|---|
|  | 119 | .; | 
|---|
|  | 120 | .; - find/build billable item and file the new charge item | 
|---|
|  | 121 | .N DIQUIET S DIQUIET=1,IBG=0 D DT^DICRW | 
|---|
|  | 122 | .S IBITEM=+$$ADDBI^IBCREF("NDC",IBNDC) | 
|---|
|  | 123 | .I IBITEM,$$ADDCI^IBCREF(IBCHSET,IBITEM,DT,IBAWP) S IBG=1 | 
|---|
|  | 124 | .; | 
|---|
|  | 125 | .; - respond and update the counter | 
|---|
|  | 126 | .W "Y",! | 
|---|
|  | 127 | .S:IBG IBUPD=IBUPD+1 | 
|---|
|  | 128 | ; | 
|---|
|  | 129 | AWPPC D CLOSE^%ZISTCP | 
|---|
|  | 130 | ; | 
|---|
|  | 131 | ; - delete the primary task | 
|---|
|  | 132 | S $P(^IBE(350.9,1,9),"^",6)="" | 
|---|
|  | 133 | ; | 
|---|
|  | 134 | AWPPQ Q | 
|---|
|  | 135 | ; | 
|---|
|  | 136 | ; | 
|---|
|  | 137 | SECA ; Start the secondary AWP Update task. | 
|---|
|  | 138 | S ZTRTN="AWPS^IBECUS1",ZTDTH=$H,ZTIO="" | 
|---|
|  | 139 | S ZTDESC="IB - TRICARE Secondary AWP Update Task" | 
|---|
|  | 140 | I IBVOL]"" S ZTCPU=IBVOL | 
|---|
|  | 141 | F I="IBAPORT","IBCHAN","IBCHSET","IBVOL" S ZTSAVE(I)="" | 
|---|
|  | 142 | D ^%ZTLOAD | 
|---|
|  | 143 | ; | 
|---|
|  | 144 | S $P(^IBE(350.9,1,9),"^",7)=$G(ZTSK) | 
|---|
|  | 145 | ; | 
|---|
|  | 146 | K ZTRTN,ZTDTH,ZTIO,ZTSK,ZTCPU,ZTSAVE | 
|---|
|  | 147 | Q | 
|---|
|  | 148 | ; | 
|---|
|  | 149 | ERRAP ; Primary billing task error trap | 
|---|
|  | 150 | D CLOSE^%ZISTCP | 
|---|
|  | 151 | S $P(^IBE(350.9,1,9),"^",6)="" | 
|---|
|  | 152 | G ^%ZTER | 
|---|
|  | 153 | ; | 
|---|
|  | 154 | ERRAS ; Secondary billing task error trap | 
|---|
|  | 155 | D SECA | 
|---|
|  | 156 | G ^%ZTER | 
|---|