IBCIUT2 ;DSI/SLM - CLAIMSMANAGER MESSAGE UTILITIES ;21-DEC-2000
;;2.0;INTEGRATED BILLING;**161**;21-MAR-94
;;Per VHA Directive 10-93-142, this routine should not be modified.
;
Q
MSGHDR ;build message id segment
;
K IBCIU
S IBCIU(1)=$C(28),IBCIU(2)=$C(29),IBCIU(3)=$C(30),IBCIU(4)=$C(94),IBCIU(5)=$C(39),IBCIU(6)=$C(37)
S IBCIAA="" F I=1:1:6 S IBCIAA=IBCIAA_IBCIU(I)
K IBCIHDR S IBCIHDR=IBCIAA_"CLAIM"_IBCIU(1)
;
RSEG ;build route segment
N X,X1,X2,X3,X4,Y
S IBCIHDR=IBCIHDR_IBCIU(3)_IBCIU(3)
S X=IBCIMT,X1=3,IBCIMT=$$FILL
K X D NOW^IBCIUT1 S X=Y,X1=16,IBCIMDT=$$FILL
S X="",X1=20,IBCIMCID=$$FILL,IBCIMP="H"
S IBCIUID="DVAUSER",X=IBCIUID,X1=10,IBCIUID=$$FILL
S IBCISAP="VISTA",X=IBCISAP,X1=20,IBCISAP=$$FILL
S IBCIRAP="CLAIMS MANAGER",X=IBCIRAP,X1=20,IBCIRAP=$$FILL
S IBCISI="",X=IBCISI,X1=30,X3=".",IBCISI=$$FILL K X3
;
S IBCIHDR=IBCIHDR_IBCIMT_IBCIMDT_IBCIMCID_IBCIMP_IBCIUID
S IBCIHDR=IBCIHDR_IBCIU(3)_IBCISAP_IBCIU(3)_IBCIRAP
S IBCIHDR=IBCIHDR_IBCIU(3)_IBCISI_IBCIU(1)
;
Q
FILL() ;pad x with characters
;
;Input variables
; X = input value in non-fixed format
; X1 = desired length of the output (default is 80 if undefined)
; X2 = justify 'R' or 'L' (if undefined or not [ R or L, default is 'L')
; X3 = character you want x padded with (default is " ")
; X4 = truncate flag - if [ 'T' and x>x1 it will be truncated (default is 'T')
;
;Output variable
; Y
;
S Y=""
Q:'$D(X) Y
;
;initialize variables for fill
;
I '$D(X1) S X1=80
I X1<1 S X1=80
I '$D(X2) S X2="L"
I "RL"'[X2 S X2="L"
I X2["R"&(X2["L") S X2="L"
I '$D(X3) S X3=" "
I X3']"" S X3=" "
I '$D(X4) S X4="T"
;
I X4["T"&($L(X)>X1) S Y=$E(X,1,X1) Q Y
;
S Y="",$P(Y,X3,X1+1)="",Y=$E(Y,1,X1-$L(X))
I X2["R" S Y=Y_X
I X2["L" S Y=X_Y
Q Y
;
;asnd(ibifn) comments
;Input Variable
; ibifn
;Output Variable
; y = 1 if successful, = 0 if not.
ASND(IBIFN) ;auto send to ClaimsManager
N IBCIY S IBCIY=0,IBCIERR="" K PROBLEM
Q:'$D(IBIFN) IBCIY
;change status in 351.9
I IBCISNT'=3 D
.S IBCIST=$S(IBCISNT=6:8,IBCISNT=5:5,IBCISNT=4:9,1:2)
.D ST^IBCIUT1(IBCIST)
;
D UPDT^IBCIADD1 ;update 351.9 for all cases
;
I IBCISNT<3 D ;a normal claim that has not been authorized
.D EN^IBCIMSG,SEND
.I '$G(PROBLEM) S IBCIY=1 D
..I $P(^IBA(351.9,IBIFN,0),U,15)'=1 D ;set received by cm to yes
...S DIE="^IBA(351.9,",DA=IBIFN,DR=".15///1" D ^DIE K DIE,DA,DR
..I $P($G(^IBA(351.9,IBIFN,2,0)),U,4) D DCOM^IBCIUT4(IBIFN)
..I $$CKNER^IBCIUT1() D Q ;if no errors then...
...S (IBCISTAT,IBCIST)=3 D ST^IBCIUT1(IBCIST) ;update status=3
...D DELTI^IBCIUT4 ;delete temp info when passed w/o errors
...D DELER^IBCIUT4 ;delete error information too
...D DASN^IBCIUT5(IBIFN) ;remove the assigned to person
...Q
..D Z1AR^IBCIUT4 ;errors found then..
..S (IBCISTAT,IBCIST)=4 D ST^IBCIUT1(IBCIST)
..I IBCISNT=2 D COMMENT^IBCIUT7(IBIFN,4) ; log a comment in auto-send
..Q ; mode when errors are found
.I $G(PROBLEM) S IBCIERR=$$P1^IBCIUT4(PROBLEM) D ;comm errors
..S (IBCISTAT,IBCIST)=6 D ST^IBCIUT1(IBCIST) Q
;
I IBCISNT=3 D ;test send
.D EN^IBCIMSG,SEND
.I '$G(PROBLEM) S IBCIY=1 D
..I $$CKNER^IBCIUT1() S IBCISTAT=3 Q ;no errors...
..D Z1AR^IBCIUT4 S IBCISTAT=4 Q ;error(s) found
.I $G(PROBLEM) S IBCIERR=$$P1^IBCIUT4(PROBLEM),IBCISTAT=6 Q ;comm errors
.D TST ;put in tmp global
;
I IBCISNT=4!(IBCISNT=5) D ;canceled, overridden
.D EN^IBCIMSG,SEND
.I '$G(PROBLEM) S IBCIY=1 D
..S IBCISTAT=$$STAT^IBCIUT1(IBIFN)
..D DELTI^IBCIUT4 ;delete temp information
..D DASN^IBCIUT5(IBIFN) ;remove the assigned to person
..I IBCISNT=4 D DELER^IBCIUT4 ;delete errors
.I $G(PROBLEM) D ;comm error
..S (IBCISTAT,IBCIST)=$S(IBCISNT=5:11,IBCISNT=4:10,1:6)
..D ST^IBCIUT1(IBCIST)
..S IBCIERR=$$P1^IBCIUT4(PROBLEM)
;
I IBCISNT=6 D ;historical
.S IBCISNT=1 D EN^IBCIMSG,SEND ;send first as a normal claim
.I '$G(PROBLEM) D Q
..I '$$CKNER^IBCIUT1() D Z1AR^IBCIUT4 ;store them
..H 2 ; pause between sendings to CM
..S IBCISNT=6 D EN^IBCIMSG,SEND ;reset ibcisnt to 6 and send again
..I '$G(PROBLEM) S IBCIY=1 D Q
...S (IBCISTAT,IBCIST)=8 D ST^IBCIUT1(IBCIST)
...D DELTI^IBCIUT4 ; remove the temp nodes
...Q
..I $G(PROBLEM) D Q ;comm error on second send
...S (IBCISTAT,IBCIST)=6 D ST^IBCIUT1(IBCIST)
...S IBCIERR=$$P1^IBCIUT4(PROBLEM)
.I $G(PROBLEM) D Q ;comm error on first send
..S (IBCISTAT,IBCIST)=6 D ST^IBCIUT1(IBCIST)
..S IBCIERR=$$P1^IBCIUT4(PROBLEM)
..S IBCISNT=6
;
; Add new send type - esg - 1/3/2002
I IBCISNT=7 D ; delete lines from a UB bill on CM
. D EN^IBCIMSG,SEND
. S IBCISTAT=""
. I '$G(PROBLEM) S IBCIY=1
. I $G(PROBLEM) S IBCIERR=$$P1^IBCIUT4(PROBLEM)
. Q
;
I '$G(IBCIERR) S IBCIERR=""
Q IBCIY
;
WRT ;write the message to io
;
N I,J,ICD0,LITMS,MOD,TOTMOD
S IBCICC=0,IBCIOS=^%ZOSF("OS") D MSGHDR W IBCIHDR
S FLUSH=$S(IBCIOS["MSM":"#",IBCIOS["OpenM":"!",1:"!")
S IBCICC=IBCICC+$L(IBCIHDR) D ^IBCIUDF
;
; Data elements in the Header Segment
F I=1:1:19 D
.S IBCICC=IBCICC+$L(^TMP("IBCIMSG",$J,IBIFN,IBCICLNP,I))
.I IBCICC>200 W @FLUSH S IBCICC=0
.W ^TMP("IBCIMSG",$J,IBIFN,IBCICLNP,I)
;
; Determine the # of line items. Write the data elements in the
; Line Segments (ExtLineID field through Units field)
;
S LITMS=$P($G(^IBA(351.9,IBIFN,5,0)),U,4)
I LITMS W IBCIU(1) F J=1:1:LITMS D
.F I=20:1:52 D
..S IBCICC=IBCICC+$L(^TMP("IBCIMSG",$J,IBIFN,IBCICLNP,J,I))
..I IBCICC>200 W @FLUSH S IBCICC=0
..W ^TMP("IBCIMSG",$J,IBIFN,IBCICLNP,J,I)
.;
.W IBCIU(3) ; field delimiter between Units and ICDCode
.;
.; icd codes - was node 53, now just an array
.; Repeating Field
.F I=1:1:$P($G(^TMP("IBCIMSG",$J,IBIFN,"ICD",J,0)),U,2) D
..S IBCICC=IBCICC+$L(^TMP("IBCIMSG",$J,IBIFN,"ICD",J,I))
..I IBCICC>200 W @FLUSH S IBCICC=0
..W ^TMP("IBCIMSG",$J,IBIFN,"ICD",J,I)
..I I'=$P(^TMP("IBCIMSG",$J,IBIFN,"ICD",J,0),U,2) W IBCIU(4)
.;
.W IBCIU(3) ; field delimiter between ICDCode and Modifier
.;
.; cpt code node 54 multiple
.; CPT Modifier(s). Repeating Field
.S TOTMOD=$P(^TMP("IBCIMSG",$J,IBIFN,IBCICLNP,J,54,0),U,1)
.F I=1:1:TOTMOD D
..S MOD=^TMP("IBCIMSG",$J,IBIFN,IBCICLNP,J,54,I)
..S IBCICC=IBCICC+$L(MOD)
..I IBCICC>200 W @FLUSH S IBCICC=0
..W MOD
..I I'=TOTMOD W IBCIU(4)
.;
.W IBCIU(3) ; field delimiter between Modifier and UDF#1
.;
.; insert the user defined fields, 2 extra field delimiters, and
.; a line segment repetition delimiter if we're not done
.;
.F I=1:1:25 W IBCIUDF(I),IBCIU(3)
.W IBCIU(3),IBCIU(3)
.I J'=LITMS W IBCIU(2)
;
D CLEAN1
Q
;
SEND ;open the tcp/ip port and send msg then read response
I '$$OPENUSE^IBCIUT5 S PROBLEM=99 Q
W $C(1) D WRT W $C(3),@FLUSH
D READ^IBCIUT3(.IBCIZ,.PROBLEM,IBCISOCK)
KILL FLUSH,IBCICC,IBCIOS,IBCISOCK
Q
;
TST ;if test send, put errors in tmp global
N IBCIDA,IBCIDA1,IBCICNT K ^TMP("IBCITST",$J) S IBCICNT=1
S IBCIDA=0 F S IBCIDA=$O(IBCIZ1(IBCIDA)) Q:'IBCIDA D
.S IBCIDA1=0 S ^TMP("IBCITST",$J,IBCICNT,IBCIDA1)=IBCIZ1(IBCIDA,IBCIDA1)
.F S IBCIDA1=$O(IBCIZ1(IBCIDA,IBCIDA1)) Q:'IBCIDA1 D
..S ^TMP("IBCITST",$J,IBCICNT,1,IBCIDA1,0)=IBCIZ1(IBCIDA,IBCIDA1)
.S IBCICNT=IBCICNT+1
Q
;
CLEAN1 ; clean up the variables
K ^TMP("IBCIMSG",$J),IBCIU,IBCICLNP,IBCIUDF
CLEAN ;
K ^TMP("IBXSAVE",$J)
K X,Y,N1,D0,DA,DIC,DIE,DR,I,II,J,%,CT
K IBCIAA,IBCIAPC,IBCIAPID,IBCIBDPS,IBCIBPDE
K IBCIBPDI,IBCIBPFI,IBCIBPID,IBCIBPLA,IBCIBPMI,IBCIBPSP
K IBCIBPTI,IBCIBPUP,IBCICL,IBCICPT,IBCIDE,IBCIDFN,IBCIBDOS
K IBCIDOB,IBCIEB,IBCIEBID,IBCIEDOS,IBCIET,IBCIHDR
K IBCILSEG,IBCILSTA,IBCIMCID,IBCIMDT,IBCIMP
K IBCIOGID,IBCIOID,IBCIPAC,IBCIPID,IBCIPOS,IBCIPPID
K IBCIPTFI,IBCIPTLA,IBCIPTMI,IBCIRAP,IBCIRPDE,IBCIRPDI,IBCIRPFI
K IBCIRPID,IBCIRPLA,IBCIRPMI,IBCIRPSP,IBCIRPTI,IBCIRPUP,IBCISAMT
K IBCISAP,IBCISEX,IBCISI,IBCISPAI,IBCISPC,IBCISPDE,IBCISPDI
K IBCISPFI,IBCISPID,IBCISPLA,IBCISPMI,IBCISPSP,IBCISPTI,IBCISPUP
K IBCIST,IBCITC,IBCITOS,IBCIUID,IBCIUNIT,IBCIXLID,IBX,IBY
K IENS,NODE3,NODE4,NODE50,NODE51,NODE52,RCD1,CPD1
K IBCIZ,IBCIZ1,IBXARRAY,IBXARRY,IBXDAT1,IBXDATA,IBXERR
K IBCITSI,X1,X2,X3,X4,IBCILSI,CTR
Q
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBCIUT2 8346 printed Oct 16, 2024@18:14:08 Page 2
IBCIUT2 ;DSI/SLM - CLAIMSMANAGER MESSAGE UTILITIES ;21-DEC-2000
+1 ;;2.0;INTEGRATED BILLING;**161**;21-MAR-94
+2 ;;Per VHA Directive 10-93-142, this routine should not be modified.
+3 ;
+4 QUIT
MSGHDR ;build message id segment
+1 ;
+2 KILL IBCIU
+3 SET IBCIU(1)=$CHAR(28)
SET IBCIU(2)=$CHAR(29)
SET IBCIU(3)=$CHAR(30)
SET IBCIU(4)=$CHAR(94)
SET IBCIU(5)=$CHAR(39)
SET IBCIU(6)=$CHAR(37)
+4 SET IBCIAA=""
FOR I=1:1:6
SET IBCIAA=IBCIAA_IBCIU(I)
+5 KILL IBCIHDR
SET IBCIHDR=IBCIAA_"CLAIM"_IBCIU(1)
+6 ;
RSEG ;build route segment
+1 NEW X,X1,X2,X3,X4,Y
+2 SET IBCIHDR=IBCIHDR_IBCIU(3)_IBCIU(3)
+3 SET X=IBCIMT
SET X1=3
SET IBCIMT=$$FILL
+4 KILL X
DO NOW^IBCIUT1
SET X=Y
SET X1=16
SET IBCIMDT=$$FILL
+5 SET X=""
SET X1=20
SET IBCIMCID=$$FILL
SET IBCIMP="H"
+6 SET IBCIUID="DVAUSER"
SET X=IBCIUID
SET X1=10
SET IBCIUID=$$FILL
+7 SET IBCISAP="VISTA"
SET X=IBCISAP
SET X1=20
SET IBCISAP=$$FILL
+8 SET IBCIRAP="CLAIMS MANAGER"
SET X=IBCIRAP
SET X1=20
SET IBCIRAP=$$FILL
+9 SET IBCISI=""
SET X=IBCISI
SET X1=30
SET X3="."
SET IBCISI=$$FILL
KILL X3
+10 ;
+11 SET IBCIHDR=IBCIHDR_IBCIMT_IBCIMDT_IBCIMCID_IBCIMP_IBCIUID
+12 SET IBCIHDR=IBCIHDR_IBCIU(3)_IBCISAP_IBCIU(3)_IBCIRAP
+13 SET IBCIHDR=IBCIHDR_IBCIU(3)_IBCISI_IBCIU(1)
+14 ;
+15 QUIT
FILL() ;pad x with characters
+1 ;
+2 ;Input variables
+3 ; X = input value in non-fixed format
+4 ; X1 = desired length of the output (default is 80 if undefined)
+5 ; X2 = justify 'R' or 'L' (if undefined or not [ R or L, default is 'L')
+6 ; X3 = character you want x padded with (default is " ")
+7 ; X4 = truncate flag - if [ 'T' and x>x1 it will be truncated (default is 'T')
+8 ;
+9 ;Output variable
+10 ; Y
+11 ;
+12 SET Y=""
+13 if '$DATA(X)
QUIT Y
+14 ;
+15 ;initialize variables for fill
+16 ;
+17 IF '$DATA(X1)
SET X1=80
+18 IF X1<1
SET X1=80
+19 IF '$DATA(X2)
SET X2="L"
+20 IF "RL"'[X2
SET X2="L"
+21 IF X2["R"&(X2["L")
SET X2="L"
+22 IF '$DATA(X3)
SET X3=" "
+23 IF X3']""
SET X3=" "
+24 IF '$DATA(X4)
SET X4="T"
+25 ;
+26 IF X4["T"&($LENGTH(X)>X1)
SET Y=$EXTRACT(X,1,X1)
QUIT Y
+27 ;
+28 SET Y=""
SET $PIECE(Y,X3,X1+1)=""
SET Y=$EXTRACT(Y,1,X1-$LENGTH(X))
+29 IF X2["R"
SET Y=Y_X
+30 IF X2["L"
SET Y=X_Y
+31 QUIT Y
+32 ;
+33 ;asnd(ibifn) comments
+34 ;Input Variable
+35 ; ibifn
+36 ;Output Variable
+37 ; y = 1 if successful, = 0 if not.
ASND(IBIFN) ;auto send to ClaimsManager
+1 NEW IBCIY
SET IBCIY=0
SET IBCIERR=""
KILL PROBLEM
+2 if '$DATA(IBIFN)
QUIT IBCIY
+3 ;change status in 351.9
+4 IF IBCISNT'=3
Begin DoDot:1
+5 SET IBCIST=$SELECT(IBCISNT=6:8,IBCISNT=5:5,IBCISNT=4:9,1:2)
+6 DO ST^IBCIUT1(IBCIST)
End DoDot:1
+7 ;
+8 ;update 351.9 for all cases
DO UPDT^IBCIADD1
+9 ;
+10 ;a normal claim that has not been authorized
IF IBCISNT<3
Begin DoDot:1
+11 DO EN^IBCIMSG
DO SEND
+12 IF '$GET(PROBLEM)
SET IBCIY=1
Begin DoDot:2
+13 ;set received by cm to yes
IF $PIECE(^IBA(351.9,IBIFN,0),U,15)'=1
Begin DoDot:3
+14 SET DIE="^IBA(351.9,"
SET DA=IBIFN
SET DR=".15///1"
DO ^DIE
KILL DIE,DA,DR
End DoDot:3
+15 IF $PIECE($GET(^IBA(351.9,IBIFN,2,0)),U,4)
DO DCOM^IBCIUT4(IBIFN)
+16 ;if no errors then...
IF $$CKNER^IBCIUT1()
Begin DoDot:3
+17 ;update status=3
SET (IBCISTAT,IBCIST)=3
DO ST^IBCIUT1(IBCIST)
+18 ;delete temp info when passed w/o errors
DO DELTI^IBCIUT4
+19 ;delete error information too
DO DELER^IBCIUT4
+20 ;remove the assigned to person
DO DASN^IBCIUT5(IBIFN)
+21 QUIT
End DoDot:3
QUIT
+22 ;errors found then..
DO Z1AR^IBCIUT4
+23 SET (IBCISTAT,IBCIST)=4
DO ST^IBCIUT1(IBCIST)
+24 ; log a comment in auto-send
IF IBCISNT=2
DO COMMENT^IBCIUT7(IBIFN,4)
+25 ; mode when errors are found
QUIT
End DoDot:2
+26 ;comm errors
IF $GET(PROBLEM)
SET IBCIERR=$$P1^IBCIUT4(PROBLEM)
Begin DoDot:2
+27 SET (IBCISTAT,IBCIST)=6
DO ST^IBCIUT1(IBCIST)
QUIT
End DoDot:2
End DoDot:1
+28 ;
+29 ;test send
IF IBCISNT=3
Begin DoDot:1
+30 DO EN^IBCIMSG
DO SEND
+31 IF '$GET(PROBLEM)
SET IBCIY=1
Begin DoDot:2
+32 ;no errors...
IF $$CKNER^IBCIUT1()
SET IBCISTAT=3
QUIT
+33 ;error(s) found
DO Z1AR^IBCIUT4
SET IBCISTAT=4
QUIT
End DoDot:2
+34 ;comm errors
IF $GET(PROBLEM)
SET IBCIERR=$$P1^IBCIUT4(PROBLEM)
SET IBCISTAT=6
QUIT
+35 ;put in tmp global
DO TST
End DoDot:1
+36 ;
+37 ;canceled, overridden
IF IBCISNT=4!(IBCISNT=5)
Begin DoDot:1
+38 DO EN^IBCIMSG
DO SEND
+39 IF '$GET(PROBLEM)
SET IBCIY=1
Begin DoDot:2
+40 SET IBCISTAT=$$STAT^IBCIUT1(IBIFN)
+41 ;delete temp information
DO DELTI^IBCIUT4
+42 ;remove the assigned to person
DO DASN^IBCIUT5(IBIFN)
+43 ;delete errors
IF IBCISNT=4
DO DELER^IBCIUT4
End DoDot:2
+44 ;comm error
IF $GET(PROBLEM)
Begin DoDot:2
+45 SET (IBCISTAT,IBCIST)=$SELECT(IBCISNT=5:11,IBCISNT=4:10,1:6)
+46 DO ST^IBCIUT1(IBCIST)
+47 SET IBCIERR=$$P1^IBCIUT4(PROBLEM)
End DoDot:2
End DoDot:1
+48 ;
+49 ;historical
IF IBCISNT=6
Begin DoDot:1
+50 ;send first as a normal claim
SET IBCISNT=1
DO EN^IBCIMSG
DO SEND
+51 IF '$GET(PROBLEM)
Begin DoDot:2
+52 ;store them
IF '$$CKNER^IBCIUT1()
DO Z1AR^IBCIUT4
+53 ; pause between sendings to CM
HANG 2
+54 ;reset ibcisnt to 6 and send again
SET IBCISNT=6
DO EN^IBCIMSG
DO SEND
+55 IF '$GET(PROBLEM)
SET IBCIY=1
Begin DoDot:3
+56 SET (IBCISTAT,IBCIST)=8
DO ST^IBCIUT1(IBCIST)
+57 ; remove the temp nodes
DO DELTI^IBCIUT4
+58 QUIT
End DoDot:3
QUIT
+59 ;comm error on second send
IF $GET(PROBLEM)
Begin DoDot:3
+60 SET (IBCISTAT,IBCIST)=6
DO ST^IBCIUT1(IBCIST)
+61 SET IBCIERR=$$P1^IBCIUT4(PROBLEM)
End DoDot:3
QUIT
End DoDot:2
QUIT
+62 ;comm error on first send
IF $GET(PROBLEM)
Begin DoDot:2
+63 SET (IBCISTAT,IBCIST)=6
DO ST^IBCIUT1(IBCIST)
+64 SET IBCIERR=$$P1^IBCIUT4(PROBLEM)
+65 SET IBCISNT=6
End DoDot:2
QUIT
End DoDot:1
+66 ;
+67 ; Add new send type - esg - 1/3/2002
+68 ; delete lines from a UB bill on CM
IF IBCISNT=7
Begin DoDot:1
+69 DO EN^IBCIMSG
DO SEND
+70 SET IBCISTAT=""
+71 IF '$GET(PROBLEM)
SET IBCIY=1
+72 IF $GET(PROBLEM)
SET IBCIERR=$$P1^IBCIUT4(PROBLEM)
+73 QUIT
End DoDot:1
+74 ;
+75 IF '$GET(IBCIERR)
SET IBCIERR=""
+76 QUIT IBCIY
+77 ;
WRT ;write the message to io
+1 ;
+2 NEW I,J,ICD0,LITMS,MOD,TOTMOD
+3 SET IBCICC=0
SET IBCIOS=^%ZOSF("OS")
DO MSGHDR
WRITE IBCIHDR
+4 SET FLUSH=$SELECT(IBCIOS["MSM":"#",IBCIOS["OpenM":"!",1:"!")
+5 SET IBCICC=IBCICC+$LENGTH(IBCIHDR)
DO ^IBCIUDF
+6 ;
+7 ; Data elements in the Header Segment
+8 FOR I=1:1:19
Begin DoDot:1
+9 SET IBCICC=IBCICC+$LENGTH(^TMP("IBCIMSG",$JOB,IBIFN,IBCICLNP,I))
+10 IF IBCICC>200
WRITE @FLUSH
SET IBCICC=0
+11 WRITE ^TMP("IBCIMSG",$JOB,IBIFN,IBCICLNP,I)
End DoDot:1
+12 ;
+13 ; Determine the # of line items. Write the data elements in the
+14 ; Line Segments (ExtLineID field through Units field)
+15 ;
+16 SET LITMS=$PIECE($GET(^IBA(351.9,IBIFN,5,0)),U,4)
+17 IF LITMS
WRITE IBCIU(1)
FOR J=1:1:LITMS
Begin DoDot:1
+18 FOR I=20:1:52
Begin DoDot:2
+19 SET IBCICC=IBCICC+$LENGTH(^TMP("IBCIMSG",$JOB,IBIFN,IBCICLNP,J,I))
+20 IF IBCICC>200
WRITE @FLUSH
SET IBCICC=0
+21 WRITE ^TMP("IBCIMSG",$JOB,IBIFN,IBCICLNP,J,I)
End DoDot:2
+22 ;
+23 ; field delimiter between Units and ICDCode
WRITE IBCIU(3)
+24 ;
+25 ; icd codes - was node 53, now just an array
+26 ; Repeating Field
+27 FOR I=1:1:$PIECE($GET(^TMP("IBCIMSG",$JOB,IBIFN,"ICD",J,0)),U,2)
Begin DoDot:2
+28 SET IBCICC=IBCICC+$LENGTH(^TMP("IBCIMSG",$JOB,IBIFN,"ICD",J,I))
+29 IF IBCICC>200
WRITE @FLUSH
SET IBCICC=0
+30 WRITE ^TMP("IBCIMSG",$JOB,IBIFN,"ICD",J,I)
+31 IF I'=$PIECE(^TMP("IBCIMSG",$JOB,IBIFN,"ICD",J,0),U,2)
WRITE IBCIU(4)
End DoDot:2
+32 ;
+33 ; field delimiter between ICDCode and Modifier
WRITE IBCIU(3)
+34 ;
+35 ; cpt code node 54 multiple
+36 ; CPT Modifier(s). Repeating Field
+37 SET TOTMOD=$PIECE(^TMP("IBCIMSG",$JOB,IBIFN,IBCICLNP,J,54,0),U,1)
+38 FOR I=1:1:TOTMOD
Begin DoDot:2
+39 SET MOD=^TMP("IBCIMSG",$JOB,IBIFN,IBCICLNP,J,54,I)
+40 SET IBCICC=IBCICC+$LENGTH(MOD)
+41 IF IBCICC>200
WRITE @FLUSH
SET IBCICC=0
+42 WRITE MOD
+43 IF I'=TOTMOD
WRITE IBCIU(4)
End DoDot:2
+44 ;
+45 ; field delimiter between Modifier and UDF#1
WRITE IBCIU(3)
+46 ;
+47 ; insert the user defined fields, 2 extra field delimiters, and
+48 ; a line segment repetition delimiter if we're not done
+49 ;
+50 FOR I=1:1:25
WRITE IBCIUDF(I),IBCIU(3)
+51 WRITE IBCIU(3),IBCIU(3)
+52 IF J'=LITMS
WRITE IBCIU(2)
End DoDot:1
+53 ;
+54 DO CLEAN1
+55 QUIT
+56 ;
SEND ;open the tcp/ip port and send msg then read response
+1 IF '$$OPENUSE^IBCIUT5
SET PROBLEM=99
QUIT
+2 WRITE $CHAR(1)
DO WRT
WRITE $CHAR(3),@FLUSH
+3 DO READ^IBCIUT3(.IBCIZ,.PROBLEM,IBCISOCK)
+4 KILL FLUSH,IBCICC,IBCIOS,IBCISOCK
+5 QUIT
+6 ;
TST ;if test send, put errors in tmp global
+1 NEW IBCIDA,IBCIDA1,IBCICNT
KILL ^TMP("IBCITST",$JOB)
SET IBCICNT=1
+2 SET IBCIDA=0
FOR
SET IBCIDA=$ORDER(IBCIZ1(IBCIDA))
if 'IBCIDA
QUIT
Begin DoDot:1
+3 SET IBCIDA1=0
SET ^TMP("IBCITST",$JOB,IBCICNT,IBCIDA1)=IBCIZ1(IBCIDA,IBCIDA1)
+4 FOR
SET IBCIDA1=$ORDER(IBCIZ1(IBCIDA,IBCIDA1))
if 'IBCIDA1
QUIT
Begin DoDot:2
+5 SET ^TMP("IBCITST",$JOB,IBCICNT,1,IBCIDA1,0)=IBCIZ1(IBCIDA,IBCIDA1)
End DoDot:2
+6 SET IBCICNT=IBCICNT+1
End DoDot:1
+7 QUIT
+8 ;
CLEAN1 ; clean up the variables
+1 KILL ^TMP("IBCIMSG",$JOB),IBCIU,IBCICLNP,IBCIUDF
CLEAN ;
+1 KILL ^TMP("IBXSAVE",$JOB)
+2 KILL X,Y,N1,D0,DA,DIC,DIE,DR,I,II,J,%,CT
+3 KILL IBCIAA,IBCIAPC,IBCIAPID,IBCIBDPS,IBCIBPDE
+4 KILL IBCIBPDI,IBCIBPFI,IBCIBPID,IBCIBPLA,IBCIBPMI,IBCIBPSP
+5 KILL IBCIBPTI,IBCIBPUP,IBCICL,IBCICPT,IBCIDE,IBCIDFN,IBCIBDOS
+6 KILL IBCIDOB,IBCIEB,IBCIEBID,IBCIEDOS,IBCIET,IBCIHDR
+7 KILL IBCILSEG,IBCILSTA,IBCIMCID,IBCIMDT,IBCIMP
+8 KILL IBCIOGID,IBCIOID,IBCIPAC,IBCIPID,IBCIPOS,IBCIPPID
+9 KILL IBCIPTFI,IBCIPTLA,IBCIPTMI,IBCIRAP,IBCIRPDE,IBCIRPDI,IBCIRPFI
+10 KILL IBCIRPID,IBCIRPLA,IBCIRPMI,IBCIRPSP,IBCIRPTI,IBCIRPUP,IBCISAMT
+11 KILL IBCISAP,IBCISEX,IBCISI,IBCISPAI,IBCISPC,IBCISPDE,IBCISPDI
+12 KILL IBCISPFI,IBCISPID,IBCISPLA,IBCISPMI,IBCISPSP,IBCISPTI,IBCISPUP
+13 KILL IBCIST,IBCITC,IBCITOS,IBCIUID,IBCIUNIT,IBCIXLID,IBX,IBY
+14 KILL IENS,NODE3,NODE4,NODE50,NODE51,NODE52,RCD1,CPD1
+15 KILL IBCIZ,IBCIZ1,IBXARRAY,IBXARRY,IBXDAT1,IBXDATA,IBXERR
+16 KILL IBCITSI,X1,X2,X3,X4,IBCILSI,CTR
+17 QUIT
+18 ;