| [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
 | 
|---|