| [613] | 1 | FBPMRG ;WCIOFO/SAB-FEE BASIS PATIENT MERGE ROUTINE ;12/15/2001 | 
|---|
|  | 2 | ;;3.5;FEE BASIS;**19,41,59**;JAN 30, 1995 | 
|---|
|  | 3 | EN(ARRAY) ; Entry point | 
|---|
|  | 4 | ; Called during patient (file #2) merge due to AFFECTS RECORD MERGE | 
|---|
|  | 5 | ;   in PACKAGE (#9.4) file. | 
|---|
|  | 6 | ; Input | 
|---|
|  | 7 | ;   ARRAY - name of array with the PATIENT (#2) From IENs and To IENs | 
|---|
|  | 8 | ;           format: name(ien_from,ien_to,"ien_from;DPT(","ien_to;DPT(") | 
|---|
|  | 9 | ;           example: TEST(1000,500,"1000;DPT(","500;DPT(")="" | 
|---|
|  | 10 | ; | 
|---|
|  | 11 | N FBFR,FBTO | 
|---|
|  | 12 | ; loop thru from ien of patients (file #2) being merged | 
|---|
|  | 13 | S FBFR=0 F  S FBFR=$O(@ARRAY@(FBFR)) Q:FBFR'>0  D | 
|---|
|  | 14 | . S FBTO=$O(@ARRAY@(FBFR,0)) ; to ien | 
|---|
|  | 15 | . ; check/update some Fee Basis files that normal merge can't handle | 
|---|
|  | 16 | . D F161 | 
|---|
|  | 17 | . D F162^FBPMRG1 | 
|---|
|  | 18 | Q | 
|---|
|  | 19 | ; | 
|---|
|  | 20 | F161 ; File 161 FEE BASIS PATIENT - The .01 field points to and is | 
|---|
|  | 21 | ; dinumed with the PATIENT (#2) file | 
|---|
|  | 22 | ; input | 
|---|
|  | 23 | ;   FBFR - ien of patient (files #2,161) being merged from | 
|---|
|  | 24 | ;   FBTO - ien of patient (files #2,161) being merged to | 
|---|
|  | 25 | N FBFR1,FBTO1 | 
|---|
|  | 26 | N DA,DD,DIC,DIK,DINUM,DLAYGO,DO,X,Y | 
|---|
|  | 27 | ; | 
|---|
|  | 28 | Q:'$D(^FBAAA(FBFR))  ; nothing to merge from | 
|---|
|  | 29 | ; | 
|---|
|  | 30 | ; | 
|---|
|  | 31 | IDCARD ; if both records have id card numbers the pairs are removed from merge. | 
|---|
|  | 32 | ; all other cases will be handled by merge. | 
|---|
|  | 33 | ; | 
|---|
|  | 34 | I $P($G(^FBAAA(FBFR,4)),U) D | 
|---|
|  | 35 | .I $P($G(^FBAAA(FBTO,4)),U) D | 
|---|
|  | 36 | ..; remove pair from merge when there is a id number in the from and to | 
|---|
|  | 37 | ..S IENFRM=$O(@ARRAY@(FBFR,FBTO,"")) | 
|---|
|  | 38 | ..S IENTO=$O(@ARRAY@(FBFR,FBTO,IENFRM,"")) | 
|---|
|  | 39 | ..S IEN="" | 
|---|
|  | 40 | ..S IEN=+$G(@ARRAY@(FBFR,FBTO,IENFRM,IENTO)) | 
|---|
|  | 41 | ..D RMOVPAIR^XDRDVAL1(FBFR,FBTO,IEN,ARRAY) | 
|---|
|  | 42 | ..N XMSUB,XMTEXT | 
|---|
|  | 43 | ..S XMSUB="MERGE PAIRS EXCLUDED DUE TO BOTH HAVE FEE BASIS ID CARDS" | 
|---|
|  | 44 | ..S ^TMP("DDB",$J,1)="  MERGE PAIR Patient records "_FBFR_" AND "_FBTO_" both have FB ID card numbers.   Please cancel one of the IDs and resubmit the Merge Pair" | 
|---|
|  | 45 | ..S XMTEXT="^TMP(""DDB"",$J," | 
|---|
|  | 46 | ..D SENDMESG^XDRDVAL1(XMSUB,XMTEXT) | 
|---|
|  | 47 | ..K IEN,IENTO,IENFRM | 
|---|
|  | 48 | ; | 
|---|
|  | 49 | ; | 
|---|
|  | 50 | Q:'$D(^FBAAA(FBTO))  ; if only from ien exists then standard process OK | 
|---|
|  | 51 | ; | 
|---|
|  | 52 | ; both from ien and to ien are in the FEE BASIS PATIENT file. | 
|---|
|  | 53 | ; The AUTHORIZATION multiple and REPORT OF CONTACT multiple can have | 
|---|
|  | 54 | ; duplicate .01 values so they need to be handled here since the | 
|---|
|  | 55 | ; standard merge would inappropriately combine subfile entries whose | 
|---|
|  | 56 | ; .01 values match. Additionally, if the ien of an AUTHORIZATION must | 
|---|
|  | 57 | ; be changed when moved from the 'from ien' to the 'to ien', then | 
|---|
|  | 58 | ; the free-text pointers that reference that AUTHORIZATION will need | 
|---|
|  | 59 | ; to be updated. | 
|---|
|  | 60 | ; | 
|---|
|  | 61 | ; loop thru authorization multiple in 'from ien' | 
|---|
|  | 62 | S FBFR1=0 F  S FBFR1=$O(^FBAAA(FBFR,1,FBFR1)) Q:'FBFR1  D | 
|---|
|  | 63 | . ; | 
|---|
|  | 64 | . ; create new entry in authorization multiple of 'to ien' | 
|---|
|  | 65 | . K DD,DO,DA | 
|---|
|  | 66 | . S DIC="^FBAAA("_FBTO_",1,",DIC(0)="L" | 
|---|
|  | 67 | . S DA(1)=FBTO | 
|---|
|  | 68 | . S X=$P($G(^FBAAA(FBFR,1,FBFR1,0)),U) | 
|---|
|  | 69 | . Q:X=""  ; can't add without a from date | 
|---|
|  | 70 | . I $D(@(DIC_FBFR1_")"))=0 S DINUM=FBFR1 ; use same ien if available | 
|---|
|  | 71 | . S DLAYGO=161.01 | 
|---|
|  | 72 | . D FILE^DICN K DIC,DINUM,DLAYGO | 
|---|
|  | 73 | . Q:$P(Y,U,3)'=1  ; couldn't add new authorization | 
|---|
|  | 74 | . S FBTO1=+Y | 
|---|
|  | 75 | . ; | 
|---|
|  | 76 | . ; move data | 
|---|
|  | 77 | . M ^FBAAA(FBTO,1,FBTO1)=^FBAAA(FBFR,1,FBFR1) | 
|---|
|  | 78 | . ; | 
|---|
|  | 79 | . ; delete 'from authorization' | 
|---|
|  | 80 | . S DIK="^FBAAA("_FBFR_",1," | 
|---|
|  | 81 | . S DA(1)=FBFR,DA=FBFR1 | 
|---|
|  | 82 | . D ^DIK K DA,DIK | 
|---|
|  | 83 | . ; | 
|---|
|  | 84 | . ; index 'to authorization' | 
|---|
|  | 85 | . S DIK="^FBAAA("_FBTO_",1," | 
|---|
|  | 86 | . S DA(1)=FBTO,DA=FBTO1 | 
|---|
|  | 87 | . D IX1^DIK K DA,DIK | 
|---|
|  | 88 | . ; | 
|---|
|  | 89 | . ; if authorization ien was changed then update any pointers to it | 
|---|
|  | 90 | . I FBFR1'=FBTO1 D UAUTHP | 
|---|
|  | 91 | ; | 
|---|
|  | 92 | ; loop thru report of contact multiple in 'from ien' | 
|---|
|  | 93 | S FBFR1=0 F  S FBFR1=$O(^FBAAA(FBFR,2,FBFR1)) Q:'FBFR1  D | 
|---|
|  | 94 | . ; | 
|---|
|  | 95 | . ; create new entry in report of contact multiple of 'to ien' | 
|---|
|  | 96 | . K DD,DO,DA | 
|---|
|  | 97 | . S DIC="^FBAAA("_FBTO_",2,",DIC(0)="L" | 
|---|
|  | 98 | . S DA(1)=FBTO | 
|---|
|  | 99 | . S X=$P($G(^FBAAA(FBFR,1,FBFR1,0)),U) | 
|---|
|  | 100 | . Q:X=""  ; can't add without a date of contact | 
|---|
|  | 101 | . I $D(@(DIC_FBFR1_")"))=0 S DINUM=FBFR1 ; use same ien if available | 
|---|
|  | 102 | . S DLAYGO=161.02 | 
|---|
|  | 103 | . D FILE^DICN K DIC,DINUM,DLAYGO | 
|---|
|  | 104 | . Q:$P(Y,U,3)'=1  ; couldn't add new report of contact | 
|---|
|  | 105 | . S FBTO1=+Y | 
|---|
|  | 106 | . ; | 
|---|
|  | 107 | . ; move data | 
|---|
|  | 108 | . M ^FBAAA(FBTO,2,FBTO1)=^FBAAA(FBFR,2,FBFR1) | 
|---|
|  | 109 | . ; | 
|---|
|  | 110 | . ; delete 'from report of contact' | 
|---|
|  | 111 | . S DIK="^FBAAA("_FBFR_",2," | 
|---|
|  | 112 | . S DA(1)=FBFR,DA=FBFR1 | 
|---|
|  | 113 | . D ^DIK K DA,DIK | 
|---|
|  | 114 | . ; | 
|---|
|  | 115 | . ; index 'to report of contact' | 
|---|
|  | 116 | . S DIK="^FBAAA("_FBTO_",2," | 
|---|
|  | 117 | . S DA(1)=FBTO,DA=FBTO1 | 
|---|
|  | 118 | . D IX1^DIK | 
|---|
|  | 119 | ; | 
|---|
|  | 120 | Q | 
|---|
|  | 121 | ; | 
|---|
|  | 122 | UAUTHP ; Update 'free-text' pointers to authorization | 
|---|
|  | 123 | ; input | 
|---|
|  | 124 | ;   FBFR  - ien of patient (files #2,161) being merged from | 
|---|
|  | 125 | ;   FBFR1 - ien of authorization in FBFR | 
|---|
|  | 126 | ;   FBTO  - ien of patient (files #2,161) being merged to | 
|---|
|  | 127 | ;   FBTO1 - ien of authorization in FBTO | 
|---|
|  | 128 | N AUTHP,DA,DIE,DR,X,X1,Y | 
|---|
|  | 129 | ; | 
|---|
|  | 130 | Q:FBFR1=FBTO1  ; same value so nothing to update | 
|---|
|  | 131 | ; | 
|---|
|  | 132 | ; update file 161.26 FEE BASIS PATIENT MRA | 
|---|
|  | 133 | ; use "B" x-ref to find patient | 
|---|
|  | 134 | K DA S DA=0 F  S DA=$O(^FBAA(161.26,"B",FBFR,DA)) Q:'DA  D | 
|---|
|  | 135 | . ; if existing authorization pointer refers to the authorization | 
|---|
|  | 136 | . ; that was changed then update it | 
|---|
|  | 137 | . S AUTHP=$P($G(^FBAA(161.26,DA,0)),U,3) | 
|---|
|  | 138 | . I AUTHP=FBFR1 D | 
|---|
|  | 139 | . . S DIE="^FBAA(161.26," | 
|---|
|  | 140 | . . S DR="2////^S X=FBTO1" | 
|---|
|  | 141 | . . D ^DIE | 
|---|
|  | 142 | ; | 
|---|
|  | 143 | ; update file 162 FEE BASIS PAYMENT | 
|---|
|  | 144 | ; use dinum relationship to find patient | 
|---|
|  | 145 | K DA S DA(2)=FBFR | 
|---|
|  | 146 | ; loop thru vendor multiple | 
|---|
|  | 147 | S DA(1)=0 F  S DA(1)=$O(^FBAAC(DA(2),1,DA(1))) Q:'DA(1)  D | 
|---|
|  | 148 | . ; loop thru initial treatment date multiple | 
|---|
|  | 149 | . S DA=0 F  S DA=$O(^FBAAC(DA(2),1,DA(1),1,DA)) Q:'DA  D | 
|---|
|  | 150 | . . ; if existing authorization pointer refers to the authorization | 
|---|
|  | 151 | . . ; that was changed then update it | 
|---|
|  | 152 | . . S AUTHP=$P($G(^FBAAC(DA(2),1,DA(1),1,DA,0)),U,4) | 
|---|
|  | 153 | . . I AUTHP=FBFR1 D | 
|---|
|  | 154 | . . . S DIE="^FBAAC("_DA(2)_",1,"_DA(1)_",1," | 
|---|
|  | 155 | . . . S DR="3////^S X=FBTO1" | 
|---|
|  | 156 | . . . D ^DIE | 
|---|
|  | 157 | ; | 
|---|
|  | 158 | ; update file 162.1 FEE BASIS PHARMACY INVOICE | 
|---|
|  | 159 | ; use "AD" x-ref to find patient | 
|---|
|  | 160 | ; loop thru inverse dates for 'from patient' | 
|---|
|  | 161 | K DA S X1="" F  S X1=$O(^FBAA(162.1,"AD",FBFR,X1)) Q:X1=""  D | 
|---|
|  | 162 | . ; loop thru invoices | 
|---|
|  | 163 | . S DA(1)=0 F  S DA(1)=$O(^FBAA(162.1,"AD",FBFR,X1,DA(1))) Q:'DA(1)  D | 
|---|
|  | 164 | . . ; loop thru prescriptions | 
|---|
|  | 165 | . . S DA=0 F  S DA=$O(^FBAA(162.1,"AD",FBFR,X1,DA(1),DA)) Q:'DA  D | 
|---|
|  | 166 | . . . ; if existing authorization pointer refers to the authorization | 
|---|
|  | 167 | . . . ; that was changed then update it | 
|---|
|  | 168 | . . . S AUTHP=$P($G(^FBAA(162.1,DA(1),"RX",DA,2)),U,7) | 
|---|
|  | 169 | . . . I AUTHP=FBFR1 D | 
|---|
|  | 170 | . . . . S DIE="^FBAA(162.1,"_DA(1)_",""RX""," | 
|---|
|  | 171 | . . . . S DR="27////^S X=FBTO1" | 
|---|
|  | 172 | . . . . D ^DIE | 
|---|
|  | 173 | ; | 
|---|
|  | 174 | ; update file 162.3 FEE CNH ACTIVITY | 
|---|
|  | 175 | ; use "AE" x-ref to find patient | 
|---|
|  | 176 | K DA S DA="" F  S DA=$O(^FBAACNH("AE",FBFR,DA)) Q:'DA  D | 
|---|
|  | 177 | . ; if existing authorization pointer refers to the authorization | 
|---|
|  | 178 | . ; that was changed then update it | 
|---|
|  | 179 | . S AUTHP=$P($G(^FBAACNH(DA,0)),U,10) | 
|---|
|  | 180 | . I AUTHP=FBFR1 D | 
|---|
|  | 181 | . . S DIE="^FBAACNH(" | 
|---|
|  | 182 | . . S DR="9////^S X=FBTO1" | 
|---|
|  | 183 | . . D ^DIE | 
|---|
|  | 184 | ; | 
|---|
|  | 185 | ; update file 162.7 FEE BASIS UNAUTHORIZED CLAIM | 
|---|
|  | 186 | ; using "D" x-ref to find patient | 
|---|
|  | 187 | ; loop thru claims for patient | 
|---|
|  | 188 | K DA S DA=0 F  S DA=$O(^FB583("D",FBFR,DA)) Q:'DA  D | 
|---|
|  | 189 | . ; if existing authorization pointer refers to the authorization | 
|---|
|  | 190 | . ; that was changed then update it | 
|---|
|  | 191 | . S AUTHP=$P($G(^FB583(DA,0)),U,27) | 
|---|
|  | 192 | . I AUTHP=FBFR1 D | 
|---|
|  | 193 | . . S DIE="^FB583(" | 
|---|
|  | 194 | . . S DR="30////^S X=FBTO1" | 
|---|
|  | 195 | . . D ^DIE | 
|---|
|  | 196 | Q | 
|---|
|  | 197 | ; | 
|---|
|  | 198 | ;FBPMRG | 
|---|