| 1 | IBCIUT6 ;DSI/ESG - MAILMAN UTILITIES ;22-JUN-2001
|
---|
| 2 | ;;2.0;INTEGRATED BILLING;**161**;21-MAR-94
|
---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 4 | ;
|
---|
| 5 | Q
|
---|
| 6 | ;
|
---|
| 7 | CAT(IBIFN,IBCIFRM,IBCITO,IBCIGRP,GRPONLY) ; MailMan message sending
|
---|
| 8 | ; This procedure is called when the user is assigning a bill to
|
---|
| 9 | ; another user.
|
---|
| 10 | ;
|
---|
| 11 | ; Input variables
|
---|
| 12 | ; IBIFN - IEN of claim
|
---|
| 13 | ; IBCIFRM - DUZ of person assigning the claim
|
---|
| 14 | ; IBCITO - DUZ of person being assigned the claim
|
---|
| 15 | ; IBCIGRP - IEN of the Mail Group to receive this msg
|
---|
| 16 | ; (optional - default is "")
|
---|
| 17 | ; GRPONLY - 1/0 flag indicating if the Mail Group is the only
|
---|
| 18 | ; entity to receive the mail message.
|
---|
| 19 | ; (optional - default is 0)
|
---|
| 20 | ;
|
---|
| 21 | NEW ERRDATA,ERRLVL,IBCIASI,IBCIASN,IBCIBII,IBCIBIL,IBCIBIR,IBCICAR
|
---|
| 22 | NEW IBCICLNO,IBCICLNP,IBCICNM,IBCICOD,IBCIDAT,IBCIDOB,IBCIDPT,IBCIEVEN
|
---|
| 23 | NEW IBCIEVV,IBCIFRM1,IBCIINS,IBCINAM,IBCIPAD,IBCIPRV,IBCIPTI,IBCISER
|
---|
| 24 | NEW IBCISEX,IBCISRR,IBCISSN,IBCITO1,L1,L2,L3,LINENO,MNEMONIC,PREVLINE
|
---|
| 25 | NEW SEP,TEXT,VALMHDR,XMDUN,XMDUZ,XMZ,XMMG,XMSUB,XMTEXT,XMY
|
---|
| 26 | ;
|
---|
| 27 | S IBCIGRP=$G(IBCIGRP,"")
|
---|
| 28 | S GRPONLY=$G(GRPONLY,0)
|
---|
| 29 | I IBCIGRP S IBCIGRP=$P($G(^XMB(3.8,IBCIGRP,0)),U,1) ; Mail Group name
|
---|
| 30 | S IBCICLNP=$P(^DGCR(399,IBIFN,0),U,1)
|
---|
| 31 | S IBCIFRM1=$P(^VA(200,IBCIFRM,0),U,1)
|
---|
| 32 | S IBCITO1=$P(^VA(200,IBCITO,0),U,1)
|
---|
| 33 | S XMDUZ=IBCIFRM
|
---|
| 34 | S XMSUB="ClaimsManager Claim "_IBCICLNP_" Assigned to "_IBCITO1
|
---|
| 35 | ;
|
---|
| 36 | S L1=1
|
---|
| 37 | S TEXT(L1)=$J(IBCICLNP_" has been assigned to: ",32)_IBCITO1,L1=L1+1
|
---|
| 38 | S TEXT(L1)=$J("by: ",32)_IBCIFRM1,L1=L1+1
|
---|
| 39 | S TEXT(L1)=" ",L1=L1+1
|
---|
| 40 | ;
|
---|
| 41 | ; If comments exist, then display them here
|
---|
| 42 | ;
|
---|
| 43 | I $P($G(^IBA(351.9,IBIFN,2,0)),U,4) D
|
---|
| 44 | . S TEXT(L1)=$$CMTINFO^IBCIUT5(IBIFN),L1=L1+1
|
---|
| 45 | . S TEXT(L1)=" ",L1=L1+1
|
---|
| 46 | . S L2=0
|
---|
| 47 | . F S L2=$O(^IBA(351.9,IBIFN,2,L2)) Q:'L2 D
|
---|
| 48 | .. S TEXT(L1)=^IBA(351.9,IBIFN,2,L2,0),L1=L1+1
|
---|
| 49 | .. Q
|
---|
| 50 | . S TEXT(L1)=" ",L1=L1+1
|
---|
| 51 | . S TEXT(L1)=" ",L1=L1+1
|
---|
| 52 | . Q
|
---|
| 53 | ;
|
---|
| 54 | ; Now get and display the patient and claim data
|
---|
| 55 | ;
|
---|
| 56 | D GDATA^IBCIWK,HDR^IBCIMG
|
---|
| 57 | S $P(SEP,"-",80)="" ; 79 dashes
|
---|
| 58 | S TEXT(L1)=$E(SEP,1,24)_" Patient and Claim Information "
|
---|
| 59 | S TEXT(L1)=TEXT(L1)_$E(SEP,1,24),L1=L1+1
|
---|
| 60 | S TEXT(L1)=VALMHDR(1),L1=L1+1
|
---|
| 61 | S TEXT(L1)=VALMHDR(2),L1=L1+1
|
---|
| 62 | S TEXT(L1)=VALMHDR(3),L1=L1+1
|
---|
| 63 | S TEXT(L1)=SEP,L1=L1+1
|
---|
| 64 | S TEXT(L1)=" ",L1=L1+1
|
---|
| 65 | S TEXT(L1)=$J("ClaimsManager Errors and Line Item Data",59),L1=L1+1
|
---|
| 66 | S TEXT(L1)=" ",L1=L1+1
|
---|
| 67 | ;
|
---|
| 68 | ; Display a message if there are no errors in the file
|
---|
| 69 | I '$P($G(^IBA(351.9,IBIFN,1,0)),U,4) D
|
---|
| 70 | . S TEXT(L1)=$J("*** No ClaimsManager Errors to Report ***",60),L1=L1+1
|
---|
| 71 | . S TEXT(L1)=" ",L1=L1+1
|
---|
| 72 | . Q
|
---|
| 73 | ;
|
---|
| 74 | ; Loop through the CM errors and get and display the data
|
---|
| 75 | S L2=0
|
---|
| 76 | S PREVLINE=-9999999
|
---|
| 77 | F S L2=$O(^IBA(351.9,IBIFN,1,L2)) Q:'L2 D
|
---|
| 78 | . S ERRDATA=$G(^IBA(351.9,IBIFN,1,L2,0))
|
---|
| 79 | . S LINENO=+$P(ERRDATA,U,2)
|
---|
| 80 | . I LINENO'=PREVLINE D LINEDATA(IBIFN,LINENO) S PREVLINE=LINENO
|
---|
| 81 | . S MNEMONIC=$P(ERRDATA,U,1)
|
---|
| 82 | . S ERRLVL="Error Level: "_$P(ERRDATA,"~",2)
|
---|
| 83 | . S TEXT(L1)="("_L2_") ClaimsManager Error: "_MNEMONIC
|
---|
| 84 | . S TEXT(L1)=(TEXT(L1)_$J(ERRLVL,78-$L(TEXT(L1)))),L1=L1+1
|
---|
| 85 | . S L3=0
|
---|
| 86 | . F S L3=$O(^IBA(351.9,IBIFN,1,L2,1,L3)) Q:'L3 D
|
---|
| 87 | .. S TEXT(L1)=" "_$G(^IBA(351.9,IBIFN,1,L2,1,L3,0)),L1=L1+1
|
---|
| 88 | .. Q
|
---|
| 89 | . S TEXT(L1)=" ",L1=L1+1
|
---|
| 90 | . Q
|
---|
| 91 | ;
|
---|
| 92 | ; Now time to do the MailMan stuff
|
---|
| 93 | S XMTEXT="TEXT(" ; msg text
|
---|
| 94 | I 'GRPONLY S XMY("I:"_IBCITO)="" ; info only msg to recipient
|
---|
| 95 | I 'GRPONLY S XMY("I:"_IBCIFRM)="" ; info only msg to sender
|
---|
| 96 | I IBCIGRP'="" S XMY("I:G."_IBCIGRP)="" ; info only msg to group
|
---|
| 97 | D ^XMD
|
---|
| 98 | ;
|
---|
| 99 | ; look at the IB site parameter file to see if we should send
|
---|
| 100 | ; priority or normal MailMan messages
|
---|
| 101 | I '$G(XMZ) G CATX ; no msg created
|
---|
| 102 | I $P($G(^IBE(350.9,1,50)),U,7)="N" G CATX ; normal messages
|
---|
| 103 | S $P(^XMB(3.9,XMZ,0),U,7)="P" ; priority messages
|
---|
| 104 | CATX ;
|
---|
| 105 | Q
|
---|
| 106 | ;
|
---|
| 107 | ;
|
---|
| 108 | LINEDATA(IBIFN,LINE) ; Get and display the line item info
|
---|
| 109 | NEW BEGDATE,CHRG,COLHDR,CPT,DXCODE,DXSTRING,ENDDATE,KILLTMP
|
---|
| 110 | NEW LNA,LNB,MOD,MODS,MOD2,POS,SEQ,TOS,UNIT,X,X1,X2,X3,X4,Y
|
---|
| 111 | ;
|
---|
| 112 | ; Conditionally build the 3,4,5 nodes. Use this flag to indicate
|
---|
| 113 | ; whether or not to kill these nodes when we're done.
|
---|
| 114 | S KILLTMP=0
|
---|
| 115 | I '$P($G(^IBA(351.9,IBIFN,3)),U,1) S KILLTMP=1 D UPDT^IBCIADD1
|
---|
| 116 | S COLHDR="----------BEG DATE----END DATE----POS---TOS--CPT------"
|
---|
| 117 | S COLHDR=COLHDR_"MOD-------CHARGE-----UNIT"
|
---|
| 118 | S LNA=$G(^IBA(351.9,IBIFN,5,LINE,0))
|
---|
| 119 | S LNB=$G(^IBA(351.9,IBIFN,5,LINE,2))
|
---|
| 120 | S BEGDATE=$P(LNA,U,6)
|
---|
| 121 | S BEGDATE=$E(BEGDATE,5,6)_"/"_$E(BEGDATE,7,8)_"/"_$E(BEGDATE,1,4)
|
---|
| 122 | S ENDDATE=$P(LNA,U,7)
|
---|
| 123 | S ENDDATE=$E(ENDDATE,5,6)_"/"_$E(ENDDATE,7,8)_"/"_$E(ENDDATE,1,4)
|
---|
| 124 | S POS=$P(LNA,U,8)
|
---|
| 125 | S TOS=$P(LNB,U,11)
|
---|
| 126 | S CPT=$P(LNA,U,9)
|
---|
| 127 | S MODS=$TR($P($G(^IBA(351.9,IBIFN,5,LINE,3)),U,1),",")
|
---|
| 128 | S MOD=$E(MODS,1,6),MOD2=$E(MODS,7,999)
|
---|
| 129 | S CHRG=$FN($P(LNA,U,11),"",2)
|
---|
| 130 | S UNIT=$P(LNB,U,12)
|
---|
| 131 | ;
|
---|
| 132 | ; Get the diagnosis information for this line
|
---|
| 133 | KILL ^TMP("DISPLAY",$J)
|
---|
| 134 | S DXSTRING=""
|
---|
| 135 | D DIAG^IBCIUT1(IBIFN)
|
---|
| 136 | S SEQ=0
|
---|
| 137 | F S SEQ=$O(^TMP("DISPLAY",$J,IBIFN,"ICD",LINE,SEQ)) Q:'SEQ D
|
---|
| 138 | . S DXCODE=^TMP("DISPLAY",$J,IBIFN,"ICD",LINE,SEQ)
|
---|
| 139 | . I DXSTRING="" S DXSTRING=DXCODE
|
---|
| 140 | . E S DXSTRING=DXSTRING_" / "_DXCODE
|
---|
| 141 | . Q
|
---|
| 142 | KILL ^TMP("DISPLAY",$J)
|
---|
| 143 | ;
|
---|
| 144 | ; Now build the text strings for the line item data
|
---|
| 145 | S TEXT(L1)=COLHDR,L1=L1+1
|
---|
| 146 | S TEXT(L1)=" Line: "
|
---|
| 147 | S X=LINE,X1=3,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
| 148 | S X=BEGDATE,X1=12,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
| 149 | S X=ENDDATE,X1=12,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
| 150 | S X=POS,X1=6,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
| 151 | S X=TOS,X1=5,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
| 152 | S X=CPT,X1=9,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
| 153 | S X=MOD,X1=6,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
| 154 | S X=CHRG,X1=10,X2="R" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
| 155 | S TEXT(L1)=TEXT(L1)_" "
|
---|
| 156 | S X=UNIT,X1=3,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
| 157 | S L1=L1+1
|
---|
| 158 | S TEXT(L1)=" Dx's: "
|
---|
| 159 | I $L(DXSTRING)<46,MOD2'="" D
|
---|
| 160 | . S X=DXSTRING,X1=47,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
| 161 | . S X=MOD2,X1=8,X2="L" S TEXT(L1)=TEXT(L1)_$$FILL^IBCIUT2
|
---|
| 162 | . Q
|
---|
| 163 | E S TEXT(L1)=TEXT(L1)_DXSTRING
|
---|
| 164 | S L1=L1+1
|
---|
| 165 | ;
|
---|
| 166 | LINDATX ;
|
---|
| 167 | I KILLTMP D DELTI^IBCIUT4
|
---|
| 168 | Q
|
---|
| 169 | ;
|
---|
| 170 | TOP(IBIFN) ; This utility returns the type of plan for the current payer
|
---|
| 171 | ; sequenced insurance company. This is currently used for the
|
---|
| 172 | ; ClaimsManager UserDefined field #4.
|
---|
| 173 | ; The data in this field is the actual type of plan defined on VistA.
|
---|
| 174 | N IBCITOP,GRPPLAN,IBCISEQ,INSSEQ,TOPIEN
|
---|
| 175 | S IBCITOP=""
|
---|
| 176 | S IBCISEQ=$$COBN^IBCEF(IBIFN)
|
---|
| 177 | S INSSEQ="I"_IBCISEQ
|
---|
| 178 | S GRPPLAN=$P($G(^DGCR(399,IBIFN,INSSEQ)),U,18)
|
---|
| 179 | I GRPPLAN="" G TOPX
|
---|
| 180 | S TOPIEN=$P($G(^IBA(355.3,GRPPLAN,0)),U,9)
|
---|
| 181 | I TOPIEN="" G TOPX
|
---|
| 182 | S IBCITOP=$P($G(^IBE(355.1,TOPIEN,0)),U,2)
|
---|
| 183 | TOPX ;
|
---|
| 184 | Q IBCITOP
|
---|
| 185 | ;
|
---|
| 186 | CLRCMQ(MSG) ;
|
---|
| 187 | ; This procedure will try to clear out the CM result queue by opening
|
---|
| 188 | ; and using every available port and just reading in any and all
|
---|
| 189 | ; data CM is wanting to send.
|
---|
| 190 | ;
|
---|
| 191 | ; Input: MSG is either 0 or 1 which will determine if status messages
|
---|
| 192 | ; and/or error messages are displayed on the screen.
|
---|
| 193 | ; MSG=0 silent mode
|
---|
| 194 | ; MSG=1 display on screen mode
|
---|
| 195 | ;
|
---|
| 196 | ; Output: None (either it will work or it won't)
|
---|
| 197 | ;
|
---|
| 198 | NEW IBCIIP,PORTS,IBCISOCK,JTOT,POP,J,TRASH,SET,IBCIMT
|
---|
| 199 | NEW X,Y,DTOUT,DUOUT,DIRUT,DIROUT
|
---|
| 200 | S MSG=$G(MSG,1)
|
---|
| 201 | S IBCIMT=$$ENV^IBCIUT5
|
---|
| 202 | I 'MSG,IBCIMT="T" G CLRX ; don't allow silent mode from TEST acct
|
---|
| 203 | ;
|
---|
| 204 | ; If a site isn't using the interface, then display message and exit
|
---|
| 205 | I '$$CK0^IBCIUT1(),MSG D G CLRX
|
---|
| 206 | . U IO(0)
|
---|
| 207 | . W !!!?5,"The ClaimsManager product is not being used."
|
---|
| 208 | . W !!?5,"This option is not available.",!!
|
---|
| 209 | . S DIR(0)="E" D ^DIR K DIR
|
---|
| 210 | . Q
|
---|
| 211 | ;
|
---|
| 212 | I MSG D I 'Y G CLRX
|
---|
| 213 | . U IO(0)
|
---|
| 214 | . W @IOF
|
---|
| 215 | . W !?20,"Clear ClaimsManager Results Queue",!
|
---|
| 216 | . W !?2,"This option attempts to clear out the ClaimsManager Results Queue so"
|
---|
| 217 | . W !?2,"ClaimsManager can get back in sync with VistA. If this process doesn't"
|
---|
| 218 | . W !?2,"correct the problems, then Ingenix should be called (800-765-6818)."
|
---|
| 219 | . W !
|
---|
| 220 | . I IBCIMT="T" D
|
---|
| 221 | .. W !?2,"Please note that you're doing this from the TEST account. This may be"
|
---|
| 222 | .. W !?2,"risky if there are Production users using ClaimsManager."
|
---|
| 223 | .. W !
|
---|
| 224 | .. Q
|
---|
| 225 | . S DIR(0)="Y"
|
---|
| 226 | . S DIR("A")="OK to proceed"
|
---|
| 227 | . S DIR("B")="YES"
|
---|
| 228 | . DO ^DIR K DIR
|
---|
| 229 | . Q
|
---|
| 230 | ;
|
---|
| 231 | L +^IBCITCP:15 E W:MSG !!,"Couldn't Lock all Ports" G CLRX
|
---|
| 232 | S IBCIIP=$P($G(^IBE(350.9,1,50)),U,5)
|
---|
| 233 | I IBCIIP="" W:MSG !!,"No IP address" G CLRX
|
---|
| 234 | M PORTS=^IBE(350.9,1,50.06,"B")
|
---|
| 235 | I '$D(PORTS) W:MSG !!,"No Ports defined" G CLRX
|
---|
| 236 | S SET=0
|
---|
| 237 | AGAIN ;
|
---|
| 238 | S SET=SET+1
|
---|
| 239 | W:MSG !!,"Set ",SET
|
---|
| 240 | S IBCISOCK="",JTOT=0
|
---|
| 241 | F S IBCISOCK=$O(PORTS(IBCISOCK)) Q:IBCISOCK="" D
|
---|
| 242 | . W:MSG !?1,"Port# ",IBCISOCK
|
---|
| 243 | . D CALL^%ZISTCP(IBCIIP,IBCISOCK,1)
|
---|
| 244 | . I POP W:MSG ?16,"FAILURE: Couldn't open port!!" Q
|
---|
| 245 | . F J=0:1 R TRASH#1:1 Q:'$T Q:$A(TRASH)=3 Q:TRASH=""
|
---|
| 246 | . S JTOT=JTOT+J
|
---|
| 247 | . W $C(1,6,3),!
|
---|
| 248 | . D CLOSE^%ZISTCP
|
---|
| 249 | . I 'MSG Q
|
---|
| 250 | . U IO(0)
|
---|
| 251 | . W ?15,$J(J,5)," characters read"
|
---|
| 252 | . W ?40,"ACK sent to CM"
|
---|
| 253 | . W ?58,"Port Closed"
|
---|
| 254 | . Q
|
---|
| 255 | W:MSG !,"Results of Set ",SET,": "
|
---|
| 256 | I JTOT W:MSG "Data was detected. Repeating the process." H 1 G AGAIN
|
---|
| 257 | W:MSG "No data found. Process is complete.",!!
|
---|
| 258 | CLRX ;
|
---|
| 259 | L -^IBCITCP
|
---|
| 260 | Q
|
---|
| 261 | ;
|
---|