| 1 | RMPOPF ;HINES-FO/DDA - MAIN INTERFACE ROUTINE FOR PFSS AND HOME OXYGEN ;8/18/05 | 
|---|
| 2 | ;;3.0;PROSTHETICS;**98**;Feb 09, 1996 | 
|---|
| 3 | EN ; ENTRY POINT FOR HOME OXYGEN BACKGROUND PROCESSING | 
|---|
| 4 | ; Loop on APNEW and APO cross-references. | 
|---|
| 5 | D APNEW,APO | 
|---|
| 6 | K RMPR6699,RMPRACCT,RMPRAPLR,RMPRDFN,RMPRDG1,RMPRDRG,RMPREVNT,RMPRHCPC,RMPRHCPT,RMPRIEN,RMPRITEM,RMPRPAR,RMPRPR1,RMPRPV1,RMPRPV2,RMPRRX,RMPRRXDT,RMPRRXEX,RMPRRXI,RMPRRXLP,RMPRSITE,RMPRSTAT,RMPRZCL | 
|---|
| 7 | Q | 
|---|
| 8 | APNEW ;Loop on file #665 APNEW cross-reference. | 
|---|
| 9 | ; Delete ITEM'S PFSS ACCOUNT REFERENCE associated with previous prescription date. | 
|---|
| 10 | ; Set PFSS ACCOUNT FLAG.  This will trigger the background process to obtain a new | 
|---|
| 11 | ;  PFSS ACCOUNT REFERENCE for the new prescription date. | 
|---|
| 12 | S RMPRIEN=0 | 
|---|
| 13 | F  S RMPRIEN=$O(^RMPR(665,"APNEW",1,RMPRIEN)) Q:RMPRIEN'>0  D | 
|---|
| 14 | .; Check for valid prescription | 
|---|
| 15 | .D VALIDRX | 
|---|
| 16 | .I RMPRRXDT=0 D EXITNEW Q | 
|---|
| 17 | .S RMPRITEM=0 | 
|---|
| 18 | .F  S RMPRITEM=$O(^RMPR(665,RMPRIEN,"RMPOC",RMPRITEM)) Q:RMPRITEM'>0  D | 
|---|
| 19 | ..S DIE="^RMPR(665,"_RMPRIEN_",""RMPOC""," | 
|---|
| 20 | ..S DA(1)=RMPRIEN,DA=RMPRITEM | 
|---|
| 21 | ..S DR="101///@;100///1" | 
|---|
| 22 | ..D ^DIE | 
|---|
| 23 | ..K DIE,DA,DR | 
|---|
| 24 | ..Q | 
|---|
| 25 | .D EXITNEW | 
|---|
| 26 | Q | 
|---|
| 27 | EXITNEW ; Remove the APNEW flag | 
|---|
| 28 | S RMPRRX=0 | 
|---|
| 29 | F  S RMPRRX=$O(^RMPR(665,"APNEW",1,RMPRIEN,RMPRRX)) Q:RMPRRX'>0  D | 
|---|
| 30 | .S DIE="^RMPR(665,"_RMPRIEN_",""RMPOB""," | 
|---|
| 31 | .S DA(1)=RMPRIEN,DA=RMPRRX | 
|---|
| 32 | .S DR="100///@" | 
|---|
| 33 | .D ^DIE | 
|---|
| 34 | .K DIE,DA,DR | 
|---|
| 35 | .Q | 
|---|
| 36 | Q | 
|---|
| 37 | APO ;Loop on file #665 APO cross-reference and gather data for GETACCT api. | 
|---|
| 38 | S RMPRIEN=0 | 
|---|
| 39 | F  S RMPRIEN=$O(^RMPR(665,"APO",1,RMPRIEN)) Q:RMPRIEN'>0  D GETACCT | 
|---|
| 40 | Q | 
|---|
| 41 | GETACCT ; ENTRY POINT TO SEND HOME OXYGEN ACCOUNT CREATION, PRE-CERTIFICATION | 
|---|
| 42 | ;OR UPDATE DATA TO OBTAIN A PFSS ACCOUNT REFERENCE. | 
|---|
| 43 | ; QUIT IF ALL VALID PRESCRIPTIONS HAVE EXPIRED. | 
|---|
| 44 | D VALIDRX       ; LOOP ON EACH ITEM | 
|---|
| 45 | S RMPRITEM=0 | 
|---|
| 46 | F  S RMPRITEM=$O(^RMPR(665,"APO",1,RMPRIEN,RMPRITEM)) Q:RMPRITEM'>0  D | 
|---|
| 47 | .I RMPRRXDT=0 D  Q | 
|---|
| 48 | ..; Remove APO Flag | 
|---|
| 49 | ..S DIE="^RMPR(665,"_RMPRIEN_",""RMPOC""," | 
|---|
| 50 | ..S DA(1)=RMPRIEN,DA=RMPRITEM | 
|---|
| 51 | ..S DR="100///@" | 
|---|
| 52 | ..D ^DIE | 
|---|
| 53 | ..K DIE,DA,DR | 
|---|
| 54 | ..Q | 
|---|
| 55 | .S RMPRDFN=RMPRIEN | 
|---|
| 56 | .S RMPRPAR=$P($G(^RMPR(665,RMPRIEN,"RMPOC",RMPRITEM,"PFSS")),"^",2) | 
|---|
| 57 | .S:RMPRPAR="" RMPREVNT="A05" | 
|---|
| 58 | .S:RMPRPAR'="" RMPREVNT="A08" | 
|---|
| 59 | .S RMPRAPLR="GETACCT;RMPOPF" | 
|---|
| 60 | .S RMPRPV1(2)="O" | 
|---|
| 61 | .S RMPRSTA=$P($G(^RMPR(665,RMPRIEN,0)),"^",2) | 
|---|
| 62 | .D GETSITE^RMPRPF1 | 
|---|
| 63 | .S RMPRPV1(3)=RMPRHLOC | 
|---|
| 64 | .S RMPRPV1(7)=$P($G(^RMPR(665,RMPRIEN,"RMPOB",RMPRRXI,"PFSS")),"^",2) | 
|---|
| 65 | .S RMPRPV1(44)=RMPRRXDT | 
|---|
| 66 | .S RMPRPV2(8)=RMPRRXDT | 
|---|
| 67 | .; INSURE HCPCS IS CODE SET VERSIONED | 
|---|
| 68 | .S RMPRHCPC=$P($G(^RMPR(665,RMPRIEN,"RMPOC",RMPRITEM,0)),"^",7),RMPRHCDT=RMPRRXDT | 
|---|
| 69 | .D PSASHCPC | 
|---|
| 70 | .; If HCPCS version check fails then quit, but leave APO Flag intact for future processing. | 
|---|
| 71 | .; The HCPCS should eventually be corrected. | 
|---|
| 72 | .Q:RMPRVHC=0 | 
|---|
| 73 | .S RMPRPR1(3)=RMPRVHC | 
|---|
| 74 | .S RMPRPR1(4)=RMPRTHC | 
|---|
| 75 | .S RMPRPR1(6)="O" | 
|---|
| 76 | .; INSURE ICD9 IS CODE SET VERSIONED | 
|---|
| 77 | .S RMPRDRG=$P($G(^RMPR(665,RMPRIEN,"RMPOC",RMPRITEM,0)),"^",8) | 
|---|
| 78 | .S:RMPRDRG'="" RMPRDRG=$$STATCHK^ICDAPIU($P($G(^ICD9(RMPRDRG,0)),"^"),RMPRRXDT) | 
|---|
| 79 | .S RMPRDG1(1,3)="" | 
|---|
| 80 | .S:$P(RMPRDRG,"^")=1 RMPRDG1(1,3)=$P(RMPRDRG,"^",2),RMPRDG1(1,6)="F" | 
|---|
| 81 | .;ZCL SEGMENT TO GO HERE | 
|---|
| 82 | .S RMPRZCL="" | 
|---|
| 83 | .; FIELDS NOT YET ENTERED. | 
|---|
| 84 | .; Call GETACCT api | 
|---|
| 85 | .S RMPRACCT=$$GETACCT^IBBAPI(RMPRDFN,RMPRPAR,RMPREVNT,RMPRAPLR,.RMPRPV1,.RMPRPV2,.RMPRPR1,.RMPRDG1,.RMPRZCL) | 
|---|
| 86 | .; Store PFSS ACCOUNT REFERENCE data and Delete the APO flag. | 
|---|
| 87 | .S DIE="^RMPR(665,"_RMPRIEN_",""RMPOC""," | 
|---|
| 88 | .S DA(1)=RMPRIEN,DA=RMPRITEM | 
|---|
| 89 | .S DR="100///@;101///`"_RMPRACCT | 
|---|
| 90 | .D ^DIE | 
|---|
| 91 | .K DIE,DA,DR | 
|---|
| 92 | .K RMPRDFN,RMPRPAR,RMPREVNT,RMPRAPLR,RMPRPV1,RMPRPV2,RMPRSTA,RMPRHLOC,RMPRHCPC,RMPRPR1,RMPRDRG,RMPRDG1,RMPRZCL,RMPRACCT,RMPRSTAT,RMPRCHDT,RMPRVHC,RMPRTHC,RMPREHC | 
|---|
| 93 | .Q | 
|---|
| 94 | EXITGET ; | 
|---|
| 95 | K RMPRRXDT,RMPRRXI,RMPRITEM | 
|---|
| 96 | Q | 
|---|
| 97 | PSASHCPC ; determine correct HCPCS code to send based on PSAS HCPCS. | 
|---|
| 98 | ; UPON ENTRY RMPRHCPC = POINTER TO 661.1 AND  RMPRHCDT = FILEMAN DATE | 
|---|
| 99 | ; Returns with RMPRVHC having the correct value to pass to IBB. | 
|---|
| 100 | I RMPRHCPC="" S RMPREHC="A9900",RMPRTHC="HCPCS DELETED" G CHK | 
|---|
| 101 | S RMPREHC=$P($G(^RMPR(661.1,RMPRHCPC,0)),"^") | 
|---|
| 102 | S RMPRTHC=$P($G(^RMPR(661.1,RMPRHCPC,0)),"^",2) | 
|---|
| 103 | CHK S RMPRSTAT=$$STATCHK^ICPTAPIU(RMPREHC,RMPRHCDT) | 
|---|
| 104 | I ($A($E(RMPREHC,2,2))>64)!($P(RMPRSTAT,"^")=0) D | 
|---|
| 105 | .S RMPREHC="A9900" | 
|---|
| 106 | .S RMPRSTAT=$$STATCHK^ICPTAPIU(RMPREHC,RMPRHCDT) | 
|---|
| 107 | .Q | 
|---|
| 108 | I $P(RMPRSTAT,"^")=1 S RMPRVHC=$P(RMPRSTAT,"^",2) Q | 
|---|
| 109 | S RMPRVHC=0 | 
|---|
| 110 | Q | 
|---|
| 111 | VALIDRX ; GET ASSOCIATED RX MAKE SURE IT HAS NOT EXPIRED. | 
|---|
| 112 | S (RMPRRXLP,RMPRRX,RMPRRXI,RMPRRXEX,RMPRRXDT)=0 | 
|---|
| 113 | F  S RMPRRXLP=$O(^RMPR(665,RMPRIEN,"RMPOB","B",RMPRRXLP)) Q:RMPRRXLP'>0  D | 
|---|
| 114 | .F  S RMPRRX=$O(^RMPR(665,RMPRIEN,"RMPOB","B",RMPRRXLP,RMPRRX)) Q:RMPRRX'>0  D | 
|---|
| 115 | ..S:$P($G(^RMPR(665,RMPRIEN,"RMPOB",RMPRRX,0)),"^",3)'<DT RMPRRXEX=$P($G(^RMPR(665,RMPRIEN,"RMPOB",RMPRRX,0)),"^",3),RMPRRXDT=RMPRRXLP,RMPRRXI=RMPRRX | 
|---|
| 116 | ..Q | 
|---|
| 117 | .Q | 
|---|
| 118 | K RMPRRXLP,RMPRRX,RMPRRXEX | 
|---|
| 119 | Q | 
|---|
| 120 | ACCTCNCL ; ENTRY POINT TO SEND HOME OXYGEN ACCOUNT CANCELLATION DATA. | 
|---|
| 121 | ;  THIS TAG IS CALLED AS A ONE-TIME TASKMAN TASK LOADED FROM ACCTTASK^PMPOPF. | 
|---|
| 122 | ;  Input variables from TaskMan- | 
|---|
| 123 | ;    RMPRDFN = DA (also DFN) | 
|---|
| 124 | ;    RMPRRXDT = Home Oxygen Prescription date | 
|---|
| 125 | ;    RMPRRXEN = Home Oxygen Prescription IEN | 
|---|
| 126 | ; | 
|---|
| 127 | ;CHECK IF HOME OXYGEN PRESCRIPTION SUB RECORD HAS BEEN DELETED. | 
|---|
| 128 | ; EXIT IF IT STILL EXISTS | 
|---|
| 129 | G:$D(^RMPR(665,RMPRDFN,"RMPOB","B",RMPRRXDT,RMPRRXEN)) EXITCNCL | 
|---|
| 130 | ; THE RECORD WAS DELETED | 
|---|
| 131 | ; LOOP ON PATIENT'S ITEMS. | 
|---|
| 132 | S RMPRITEM=0 | 
|---|
| 133 | F  S RMPRITEM=$O(^RMPR(665,RMPRDFN,"RMPOC",RMPRITEM)) Q:RMPRITEM'>0  D CANCEL | 
|---|
| 134 | EXITCNCL ; | 
|---|
| 135 | K RMPRDFN,RMPRRXDT,RMPRRXEN,RMPRITEM | 
|---|
| 136 | Q | 
|---|
| 137 | CANCEL ; ENTRY POINT TO SEND HOME OXYGEN ACCOUNT CANCELLATION DATA. | 
|---|
| 138 | ;  THIS TAG IS CALLED AS A ONE-TIME TASKMAN TASK LOADED FROM ITEMTASK^PMPOPF. | 
|---|
| 139 | ;  Input variables from TaskMan- | 
|---|
| 140 | ;    RMPRDFN = DA (also DFN) | 
|---|
| 141 | ;    RMPRITEM = Home Oxygen Item IEN | 
|---|
| 142 | ; | 
|---|
| 143 | ;CHECK IF HOME OXYGEN PRESCRIPTION SUB RECORD HAS BEEN DELETED. | 
|---|
| 144 | ; EXIT IF IT STILL EXISTS | 
|---|
| 145 | ;   SET FROM: | 
|---|
| 146 | ;    RMPRDFN = DFN SENT WITHIN TASKMAN | 
|---|
| 147 | ;    RMPRPAR = HOME OXYGEN ITEM (19.4); PFSS Account Reference (101) | 
|---|
| 148 | ;    RMPREVNT = "A38" | 
|---|
| 149 | ;    RMPRAPLR = "CANCEL1;RMPOPF" | 
|---|
| 150 | ;    RMPRPV1(2) = "O" | 
|---|
| 151 | ;    RMPRPV1(3) = FILE 669.9, FIELD 52 | 
|---|
| 152 | ;    RMPRPV1(44) = THE HOME OXYGEN PRESCRIPTION DATE SENT WITHIN TASKMAN | 
|---|
| 153 | S RMPRPAR=$P($G(^RMPR(665,RMPRDFN,"RMPOC",RMPRITEM,"PFSS")),"^",2) | 
|---|
| 154 | CANCEL1 ; ENTRY POINT FOR SINGLE ITEM DELETE (ITEMTASK) | 
|---|
| 155 | S RMPREVNT="A38" | 
|---|
| 156 | S RMPRAPLR="CANCEL1;RMPOPF" | 
|---|
| 157 | S RMPRPV1(2)="O" | 
|---|
| 158 | S RMPRSTA=$P($G(^RMPR(665,RMPRDFN,0)),"^",2) | 
|---|
| 159 | D GETSITE^RMPRPF1 | 
|---|
| 160 | S RMPRPV1(3)=RMPRHLOC | 
|---|
| 161 | S RMPRIEN=RMPRDFN D VALIDRX | 
|---|
| 162 | S:RMPRRXDT'=0 RMPRPV1(44)=RMPRRXDT | 
|---|
| 163 | ;   SEND A38 GETACCT FOR THE ITEM | 
|---|
| 164 | S RMPRCNCL=$$GETACCT^IBBAPI(RMPRDFN,RMPRPAR,RMPREVNT,RMPRAPLR,.RMPRPV1) | 
|---|
| 165 | K RMPRPAR,RMPREVNT,RMPRAPLR,RMPRPV1,RMPRSTA,RMPRHLOC,RMPRCNCL | 
|---|
| 166 | Q | 
|---|
| 167 | ACCTTASK ; FILE #665, HOME OXYGEN PRESCRITION; DATE FIELD MUMPS XREF KILL LOGIC. | 
|---|
| 168 | ; TASKMAN LOAD A ONE TIME TASKMAN TASK. | 
|---|
| 169 | Q:'+$$SWSTAT^IBBAPI() | 
|---|
| 170 | N ZTRTN,ZTDESC,ZTDTH,ZTIO,ZTUCI,ZTCPU,ZTPRI,ZTSAVE,ZTKIL,ZTSYNC | 
|---|
| 171 | S ZTIO="",ZTRTN="ACCTCNCL^RMPOPF",ZTDESC="Prosthetics Home Oxygen PFSS Account Cancel",ZTDTH=$H | 
|---|
| 172 | S ZTSAVE("RMPRDFN")=DA(1),ZTSAVE("RMPRRXEN")=DA,ZTSAVE("RMPRRXDT")=X | 
|---|
| 173 | D ^%ZTLOAD | 
|---|
| 174 | Q | 
|---|
| 175 | ITEMTASK ; FILE #665, HOME OXYGEN ITEM; ITEM FIELD MUMPS XREF | 
|---|
| 176 | ;KILL LOGIC. | 
|---|
| 177 | ; TASKMAN LOAD A ONE TIME TASKMAN TASK. | 
|---|
| 178 | Q:'+$$SWSTAT^IBBAPI() | 
|---|
| 179 | S RMPRPAR=$P($G(^RMPR(665,DA(1),"RMPOC",DA,"PFSS")),"^",2) | 
|---|
| 180 | N ZTRTN,ZTDESC,ZTDTH,ZTIO,ZTUCI,ZTCPU,ZTPRI,ZTSAVE,ZTKIL,ZTSYNC | 
|---|
| 181 | S ZTIO="",ZTRTN="CANCEL1^RMPOPF",ZTDESC="Prosthetics Home Oxygen PFSS Item Cancel",ZTDTH=$H | 
|---|
| 182 | S ZTSAVE("RMPRDFN")=DA(1),ZTSAVE("RMPRITEM")=DA,ZTSAVE("RMPRPAR")=RMPRPAR | 
|---|
| 183 | D ^%ZTLOAD | 
|---|
| 184 | K RMPRPAR | 
|---|
| 185 | Q | 
|---|
| 186 | CHRGTASK ; FILE #665.72, BILLING MONTH; VENDOR; PATIENT; ITEM FIELD MUMPS XREF | 
|---|
| 187 | ;KILL LOGIC. | 
|---|
| 188 | ; TASKMAN LOAD A ONE TIME TASKMAN TASK. | 
|---|
| 189 | Q:'+$$SWSTAT^IBBAPI() | 
|---|
| 190 | S RMPRPFSS=^RMPO(665.72,DA(4),1,DA(3),1,DA(2),"V",DA(1),1,DA,"PFSS") | 
|---|
| 191 | N ZTRTN,ZTDESC,ZTDTH,ZTIO,ZTUCI,ZTCPU,ZTPRI,ZTSAVE,ZTKIL,ZTSYNC | 
|---|
| 192 | S ZTIO="",ZTRTN="CHRGCRED^RMPOPF1",ZTDESC="Prosthetics Home Oxygen PFSS Charge Credit",ZTDTH=$H | 
|---|
| 193 | S ZTSAVE("RMPRDFN")=DA(1),ZTSAVE("RMPRITEM")=DA,ZTSAVE("RMPRVDR")=DA(2),ZTSAVE("RMPRBLDT")=DA(3),ZTSAVE("RMPRSITE")=DA(4) | 
|---|
| 194 | S ZTSAVE("RMPRPFSS")=^RMPO(665.72,DA(4),1,DA(3),1,DA(2),"V",DA(1),1,DA,"PFSS") | 
|---|
| 195 | D ^%ZTLOAD | 
|---|
| 196 | Q | 
|---|
| 197 | CHARGE ; Called from RMPOPST3. | 
|---|
| 198 | ;IMPORTANT VARIBLES PASSED IN FROM RMPOPST3. | 
|---|
| 199 | ; D6I= FILE 660 IEN | 
|---|
| 200 | ; RMPOXITE= FILE 665.72 SITE (IEN) | 
|---|
| 201 | ; RMPODATE= FILE 665.72 BILLING MONTH mult IEN | 
|---|
| 202 | ; RMPOVDR= FILE 665.72 VENDOR mult IEN (DINUM to 440) | 
|---|
| 203 | ; DFN= FILE 665.72 PATIENT mult IEN (DINUM to 2) | 
|---|
| 204 | ; ITM= FILE 665.72 ITEM mult IEN | 
|---|
| 205 | ; TRXDT= Date TRX Built | 
|---|
| 206 | ; ITMD= Item multiple zero node | 
|---|
| 207 | ; | 
|---|
| 208 | Q:'+$$SWSTAT^IBBAPI() | 
|---|
| 209 | D CHARGE^RMPOPF1 | 
|---|
| 210 | Q | 
|---|