| 1 | IB20P244 ;ISP/TDP - Post-Init routine for IB*2.0*244 ;10/14/2003
|
---|
| 2 | ;;2.0;INTEGRATED BILLING;**244**;21-MAR-94
|
---|
| 3 | POST ; This routine is to remove hyphens from the SUBSCRIBER ID (#1) field
|
---|
| 4 | ; of the INSURANCE TYPE SUB-FIELD (#2.312) file of the PATIENT (#2)
|
---|
| 5 | ; file. It also will delete invalid entries from the IB DM EXTRACT
|
---|
| 6 | ; DATA (#351.71) file.
|
---|
| 7 | ;
|
---|
| 8 | EN ; Start of Post-Init process.
|
---|
| 9 | N %,IBDATE,IBNOW,IBPURGE,X,X1,X2
|
---|
| 10 | D NOW^%DTC S (IBNOW,X1)=X,IBDATE=%
|
---|
| 11 | S X2=120
|
---|
| 12 | D C^%DTC S IBPURGE=X
|
---|
| 13 | ;K ^XTMP("IB20P244",IBDATE)
|
---|
| 14 | S ^XTMP("IB20P244",0)=IBPURGE_"^"_IBNOW_"^"_$G(DUZ)
|
---|
| 15 | D SUBSCR
|
---|
| 16 | D INSUR
|
---|
| 17 | D END
|
---|
| 18 | Q
|
---|
| 19 | SUBSCR ;Remove all hyphens from subscriber ID's in the INSURANCE TYPE
|
---|
| 20 | ;SUB-FIELD (#2.312) file of the PATIENT (#2) file.
|
---|
| 21 | D MES^XPDUTL("SUBSCRIBER ID clean up started in the")
|
---|
| 22 | D MES^XPDUTL(" INSURANCE TYPE SUB-FIELD (#2.312) file.")
|
---|
| 23 | D MES^XPDUTL("> Searching for SUBSCRIBER ID's containing invalid characters.")
|
---|
| 24 | D MES^XPDUTL(" ")
|
---|
| 25 | N DA,DFN,DIE,DR,IBCHAR,IBCHAR1,IBCNT,IBHICN,IBINS,IBINSCO,IBNAME,IBNODE
|
---|
| 26 | N IBRC,IBSSN,IBSUB,IBSUB1,IBSUB2,IBWNR
|
---|
| 27 | K ^TMP("IB20P244",$J)
|
---|
| 28 | S ^TMP("IB20P244",$J)=""
|
---|
| 29 | S IBCHAR="~` !@#$%^&*()_-+={}[]|\/:;<>,.?'"""
|
---|
| 30 | S IBCHAR1="~`!@$%^&*()_+={}[]|:;<>?'"""
|
---|
| 31 | S IBWNR=+$$GETWNR^IBCNSMM1
|
---|
| 32 | S (DFN,IBRC,IBCNT)=0
|
---|
| 33 | ; Loop through Patient (#2) file
|
---|
| 34 | F S DFN=$O(^DPT(DFN)) Q:DFN="" D
|
---|
| 35 | . S IBINS=0
|
---|
| 36 | . ; Loop through Insurance Type Sub-Field
|
---|
| 37 | . F S IBINS=$O(^DPT(DFN,.312,IBINS)) Q:IBINS="" D
|
---|
| 38 | .. S IBCNT=IBCNT+1 I IBCNT>999 W ". " S IBCNT=0
|
---|
| 39 | .. S IBNODE=$G(^DPT(DFN,.312,IBINS,0))
|
---|
| 40 | .. ; Get Subscriber ID
|
---|
| 41 | .. S IBSUB=$P(IBNODE,U,2) I IBSUB="" Q
|
---|
| 42 | .. S IBSSN=$TR($P($G(^DPT(DFN,0)),U,9),IBCHAR,"")
|
---|
| 43 | .. S IBNAME=$P($G(^DPT(DFN,0)),U,1)
|
---|
| 44 | .. ; Remove non-alphanumeric characters
|
---|
| 45 | .. I $P(IBNODE,U,1)=IBWNR D ;Medicare
|
---|
| 46 | ... S IBSUB1=$TR(IBSUB,IBCHAR,"")
|
---|
| 47 | ... ; Check for invalid HICN format and no date of death
|
---|
| 48 | ... I '$$VALHIC^IBCNSMM(IBSUB1),'$P($G(^DPT(DFN,.35)),U,1) S ^TMP("IB20P244",$J,"HICN INVALID",IBNAME_" ("_IBSSN_")")=IBSUB_"^"_IBSUB1
|
---|
| 49 | .. I $P(IBNODE,U,1)'=IBWNR D ;non-Medicare
|
---|
| 50 | ... S IBSUB1=$TR(IBSUB,IBCHAR1,"")
|
---|
| 51 | ... ;If subscriber id is SSN, then remove all extraneous characters
|
---|
| 52 | ... S IBSUB2=$TR(IBSUB1," #-/\,.","")
|
---|
| 53 | ... I IBSUB2=IBSSN,$L(IBSSN)=9 S IBSUB1=IBSUB2
|
---|
| 54 | .. ;I IBHICN S ^TMP("IB20P244",$J,"HICN INVALID",IBNAME_" ("_IBSSN_")")=IBSUB_"^"_IBSUB1 S IBHICN=0
|
---|
| 55 | .. ; Quit if no change in data
|
---|
| 56 | .. I IBSUB1=IBSUB Q
|
---|
| 57 | .. S IBINSCO=$P($G(^DIC(36,$P($G(^DPT(DFN,.312,IBINS,0)),U,1),0)),U,1)
|
---|
| 58 | .. S IBRC=IBRC+1
|
---|
| 59 | .. S ^XTMP("IB20P244",IBDATE,"SUB",DFN,IBINS)=IBSUB_"^"_IBSUB1
|
---|
| 60 | .. ; Save newly cleaned Subscriber ID
|
---|
| 61 | .. S DA=IBINS,DA(1)=DFN,DR="1////"_$S(IBSUB1="":"@",1:IBSUB1),DIE="^DPT(DFN,.312," D ^DIE
|
---|
| 62 | .. ;D MES^XPDUTL(">> Converted SUBSCRIBER ID of patient "_IBNAME_" ("_IBSSN_") from "_IBSUB_" to "_IBSUB1_" for insurance company "_IBINSCO)
|
---|
| 63 | D BMES^XPDUTL("> "_IBRC_" total SUBSCRIBER ID(S) were cleaned up.")
|
---|
| 64 | I $D(^TMP("IB20P244",$J,"HICN INVALID")) D MESSAGE
|
---|
| 65 | K ^TMP("IB20P244",$J)
|
---|
| 66 | Q
|
---|
| 67 | ;
|
---|
| 68 | END ; display message that post-init has completed successfully
|
---|
| 69 | K X,Y
|
---|
| 70 | D MES^XPDUTL(" ")
|
---|
| 71 | D BMES^XPDUTL("Data clean up conversions complete.")
|
---|
| 72 | Q
|
---|
| 73 | ;
|
---|
| 74 | INSUR ;This will remove all future dates and all past date entries which
|
---|
| 75 | ;contain a day other than "00". For example, 3031000 is a valid entry
|
---|
| 76 | ;while 3051200 and 3031014 are not based on a current date of 3031015.
|
---|
| 77 | N FTDT,PTDT
|
---|
| 78 | D MES^XPDUTL(" ")
|
---|
| 79 | D BMES^XPDUTL("IB DM EXTRACT DATA (#351.71) file clean up started.")
|
---|
| 80 | D MES^XPDUTL("> Searching for invalid entries.")
|
---|
| 81 | D FUTURE
|
---|
| 82 | D PAST
|
---|
| 83 | D MES^XPDUTL(" ")
|
---|
| 84 | I FTDT D MES^XPDUTL(">> "_FTDT_" invalid future date entries were deleted.")
|
---|
| 85 | I 'FTDT D MES^XPDUTL(">> There were no invalid future date entries found.")
|
---|
| 86 | I PTDT D MES^XPDUTL(">> "_PTDT_" invalid past date entries were deleted.")
|
---|
| 87 | I 'PTDT D MES^XPDUTL(">> There were no invalid past date entries found.")
|
---|
| 88 | D BMES^XPDUTL("> IB DM EXTRACT DATA (#351.71) file clean up completed.")
|
---|
| 89 | INSURQ Q
|
---|
| 90 | ;
|
---|
| 91 | FUTURE ;This utility searches for and deletes future date entries from file
|
---|
| 92 | ;351.71.
|
---|
| 93 | ;Outputs: FTDT - number of future date entries deleted from 351.71.
|
---|
| 94 | ; ^XTMP("IB20P244",IBDATE,"INS","FUT") - This global is created
|
---|
| 95 | ; to temporarily store the data from the deleted future
|
---|
| 96 | ; date entries. Will not exist if no future dates are
|
---|
| 97 | ; found.
|
---|
| 98 | N CDT,DA,DATE,DIK
|
---|
| 99 | S FTDT=0
|
---|
| 100 | D NOW^%DTC S CDT=X
|
---|
| 101 | S DATE=99999999
|
---|
| 102 | F S DATE=$O(^IBE(351.71,DATE),-1) Q:DATE'>CDT D
|
---|
| 103 | . M ^XTMP("IB20P244",IBDATE,"INS","FUT",DATE)=^IBE(351.71,DATE)
|
---|
| 104 | . S DIK="^IBE(351.71,",DA=DATE D ^DIK
|
---|
| 105 | . S FTDT=FTDT+1
|
---|
| 106 | . Q
|
---|
| 107 | Q
|
---|
| 108 | ;
|
---|
| 109 | PAST ;This utility searches for and deletes past date entries from file
|
---|
| 110 | ;351.71 that end with something other than "00".
|
---|
| 111 | ;Outputs: PTDT - number of entries deleted from 351.71.
|
---|
| 112 | ; ^XTMP("IB20P244",IBDATE,"INS","PST") - This global is created
|
---|
| 113 | ; to temporarily store the data from the deleted past
|
---|
| 114 | ; date entries. Will not exist if no past dates are
|
---|
| 115 | ; found.
|
---|
| 116 | N DA,DATE,DIK
|
---|
| 117 | S PTDT=0
|
---|
| 118 | S DATE=0
|
---|
| 119 | F S DATE=$O(^IBE(351.71,DATE)) Q:DATE="" D
|
---|
| 120 | . I $E(DATE,6,7)="00" Q
|
---|
| 121 | . I 'DATE Q
|
---|
| 122 | . M ^XTMP("IB20P244",IBDATE,"INS","PST",DATE)=^IBE(351.71,DATE)
|
---|
| 123 | . S DIK="^IBE(351.71,",DA=DATE D ^DIK
|
---|
| 124 | . S PTDT=PTDT+1
|
---|
| 125 | . Q
|
---|
| 126 | Q
|
---|
| 127 | ;
|
---|
| 128 | MESSAGE ; Send message reporting invalid HICN format
|
---|
| 129 | N IBC,IBBCNT,IBCNT,IBDATA,IBFCNT,IBIDENT,IBGROUP,IBGRP,IBINSCO,IBMMSG
|
---|
| 130 | N IBMSG,IBNETNM,IBPARAM,IBSUB,IBTCNT,IBTST,IBTXT,XMDUZ,XMERR,XMSUB
|
---|
| 131 | N XMTEXT,XMY
|
---|
| 132 | S IBTCNT=0,IBIDENT=""
|
---|
| 133 | F S IBIDENT=$O(^TMP("IB20P244",$J,"HICN INVALID",IBIDENT)) Q:IBIDENT="" D
|
---|
| 134 | . S IBTCNT=IBTCNT+1
|
---|
| 135 | S IBSUB=0
|
---|
| 136 | D MSGHDR
|
---|
| 137 | I DUZ="" N DUZ S DUZ=.5 ; if user not defined set to postmaster
|
---|
| 138 | S XMDUZ=DUZ,XMTEXT=$NA(^TMP($J))
|
---|
| 139 | S IBPARAM("FROM")="PATCH IB*2.0*244 POST-INIT"
|
---|
| 140 | S IBGROUP="IB EDI SUPERVISOR"
|
---|
| 141 | S IBGRP=$O(^XMB(3.8,"B",IBGROUP,"")) I IBGRP D ;billing group defined
|
---|
| 142 | . I +$P($G(^XMB(3.8,IBGRP,1,0)),U,4)'>0 Q ; no members defined
|
---|
| 143 | . S XMY("G."_IBGROUP)="" ; send message to the group.
|
---|
| 144 | ;I '$D(^XMB(3.8,"B",IBGROUP)) S IBGROUP=DUZ ; billing group not defined - send to the user
|
---|
| 145 | ;E S IBGROUP="G."_IBGROUP
|
---|
| 146 | S XMY(DUZ)="" ; send message to user
|
---|
| 147 | ;Send to developer if not test account (next 3 lines)
|
---|
| 148 | S IBTST=".TEST.MIR.TST.MIRROR.TRAIN." ; various test names
|
---|
| 149 | S IBNETNM=$G(^XMB("NETNAME"))
|
---|
| 150 | I IBNETNM'="",('$F(IBTST,"."_$P(IBNETNM,".",1)_".")) S XMY("PHELPS,TY@FORUM.VA.GOV")=""
|
---|
| 151 | ;
|
---|
| 152 | S IBINSCO=$P($G(^DIC(36,IBWNR,0)),U,1)
|
---|
| 153 | MSG1 S IBC=0
|
---|
| 154 | S IBC=IBC+1,^TMP($J,IBC)="This message has been sent by patch IB*2.0*244 at the completion of"
|
---|
| 155 | S IBC=IBC+1,^TMP($J,IBC)="the post-init routine."
|
---|
| 156 | S IBC=IBC+1,^TMP($J,IBC)="The following "_IBINSCO_" SUBSCRIBER ID entries remain in an invalid state:"
|
---|
| 157 | S IBC=IBC+1,^TMP($J,IBC)=" "
|
---|
| 158 | S IBC=IBC+1,^TMP($J,IBC)="NAME(SSN) ^ ORIGINAL ID ^ MODIFIED ID"
|
---|
| 159 | S IBC=IBC+1,^TMP($J,IBC)=" "
|
---|
| 160 | S (IBMMSG,IBMSG)=0
|
---|
| 161 | I IBSUB=1 S IBCNT=0,IBIDENT="",IBBCNT=1
|
---|
| 162 | I IBSUB>1 S IBBCNT=IBCNT+1
|
---|
| 163 | F S IBIDENT=$O(^TMP("IB20P244",$J,"HICN INVALID",IBIDENT)) Q:IBIDENT="" D G:IBMSG MSG1
|
---|
| 164 | . S IBDATA=$G(^TMP("IB20P244",$J,"HICN INVALID",IBIDENT))
|
---|
| 165 | . S IBC=IBC+1,^TMP($J,IBC)=IBIDENT_"^"_IBDATA
|
---|
| 166 | . S IBCNT=IBCNT+1
|
---|
| 167 | . I 'IBMMSG S IBMMSG=1
|
---|
| 168 | . I IBC>9500 S IBFCNT=IBCNT D
|
---|
| 169 | .. S IBC=IBC+1,^TMP($J,IBC)=" "
|
---|
| 170 | .. S IBC=IBC+1,^TMP($J,IBC)="This message contains "_IBBCNT_" thru "_IBFCNT_" of "_IBTCNT_" total"
|
---|
| 171 | .. S IBC=IBC+1,^TMP($J,IBC)="records left in an invalid state."
|
---|
| 172 | .. D SNDMSG,MSGHDR S IBMSG=1
|
---|
| 173 | S IBC=IBC+1,^TMP($J,IBC)=" "
|
---|
| 174 | I IBSUB=1 D
|
---|
| 175 | .S IBC=IBC+1,^TMP($J,IBC)="Total records left in an invalid state: "_IBCNT_"."
|
---|
| 176 | I IBSUB>1 D
|
---|
| 177 | . S IBC=IBC+1,^TMP($J,IBC)="This message contains "_IBBCNT_" thru "_IBCNT_" of "_IBTCNT_" total"
|
---|
| 178 | . S IBC=IBC+1,^TMP($J,IBC)="records left in an invalid state."
|
---|
| 179 | I IBMMSG D SNDMSG
|
---|
| 180 | Q
|
---|
| 181 | SNDMSG ;
|
---|
| 182 | D SENDMSG^XMXAPI(XMDUZ,XMSUB,XMTEXT,.XMY,.IBPARAM,"","")
|
---|
| 183 | S IBTXT="Invalid Medicare SUBSCRIBER ID message #"_IBSUB_" "_$S($D(XMERR):"not sent due to error in message set up.",1:"sent to ")_$S($D(XMY("G.IB EDI SUPERVISOR")):"IB EDI SUPERVISOR mail group, ",1:"")
|
---|
| 184 | D BMES^XPDUTL(IBTXT)
|
---|
| 185 | S IBTXT=" the "_$S(DUZ=.5:"POSTMASTER ",1:"user ")_"and the patch developer."
|
---|
| 186 | D MES^XPDUTL(IBTXT)
|
---|
| 187 | K ^TMP($J)
|
---|
| 188 | Q
|
---|
| 189 | ;
|
---|
| 190 | MSGHDR ;Creates message subject line
|
---|
| 191 | K ^TMP($J)
|
---|
| 192 | S IBSUB=IBSUB+1
|
---|
| 193 | S XMSUB="SUBSCRIBER ID CLEAN UP COMPLETE"
|
---|
| 194 | I IBSUB>1 S XMSUB=XMSUB_" (MSG #"_IBSUB_")"
|
---|
| 195 | Q
|
---|