Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: IBECECQ1

IBECECQ1.m

Go to the documentation of this file.
IBECECQ1 ;BSL/DVA-BILLING - SEND/RECEIVE QRY & DSR HL7 messages FOR PATIENT ACCUMULATOR INTERFACE ; 10/11/23 7:41am
 ;;2.0;INTEGRATED BILLING;**704,769**;21-MAR-94;Build 42
 ;Per VA Directive 6402, this routine should not be modified.
 ;
 ; Reference to $$STARTMSG^HLOPRS,$$NEXTSEG^HLOPRS,$$GET^HLOPRS,$$MSGID^HLOPRS in ICR #4718
 ; Reference to $$ADDSEG^HLOAPI,$$NEWMSG^HLOAPI,SET^HLOAPI in ICR #4722
 ; Reference to $$SENDONE^HLOAPI1 in ICR #4717
 ;
 ; -4200Build and send seeding of Vista data to VDIF IBECEAC-QRY DSR^Q03 
 ; Receive seeding query of Vista data from VDIF IBECEAC-QRY DSR^Q03 
 ;
 ; Sample message
 ;MSH|^~\&|IBECEAC-QRY|578^HL7.HINES.DOMAIN.EXT:5584^DNS|IBECEAC-RECV|200VDIF^:^DNS|20250507142653-0500||QRY^R02^QRY_R02|578 31288716|T^|2.3|||AL|NE|USA
 ;QRD|20250507142653-0500|1|1|371168||1|LNAME^FNAME|1013734284V140030||20250501
 ;QRF|IBECEAC-QRY|20250501
 ;
 Q   ;No direct routine calls
 ;
ADM ;Called from IB MEANS TEST BILLING protocol
 Q:$P($G(DGPMA),"^",2)'=1
 D EN(DFN)
 Q
 ;
MTEQRY(DFN,IBADMIT) ;Query for Billing Clock Maintenance option
 N IBICN,IBDISCH,IB351IEN,IBODISCH,IBCSTCMT
 I $G(IBADMIT),'$G(IBCURIEN) S IB351IEN=$$GETIEN^IBECECX1(DFN,IBADMIT)
 I $G(IBCURIEN) S IB351IEN=IBCURIEN
 S IBICN=$$ICN^IBARXMU(DFN)
 I +IBICN<1 S IBERROR="NO PATIENT ICN FOUND",IBERR=1 Q  ;quit if unable to find ICN
 S IBDISCH=$$FMADD^XLFDT(IBADMIT,364) ;IB*2*769 - Clock end = clock start +364
 I IBDISCH S IBDISCH=$$FMTHL7^XLFDT($P(IBDISCH,"."))
 S IBADMIT=$$FMTHL7^XLFDT($P(IBADMIT,"."))
 S IBOADMIT=IBADMIT
 I IBDISCH S IBODISCH=IBDISCH
 S:$G(IBERR)="" IBERR=0
 I $G(IBCLSTDT),$G(IBCLKCHG) S IBCSTCMT=IBCLSTDT_"-Edit Begin Date via CLOCK MAINT",DIE="^IBE(351,",DA=IB351IEN,DR="15///^S X=IBCSTCMT" D ^DIE ;IB*2.0*769 - Save off clock start date for aggr comp
 D MSH,QRD,QRF,SENDQRY
 Q
 ;
CCBILL(DFN,IBADMIT) ;OUTGOING QRY Called from CC Inpatient Bill
 ;
 N X,PARMS,SEG,MSG,VALUE,FIELD,QRYNUM,IBERROR,IBERR,NAME,ERROR,XXX,WHOTO,IBACBCLK,IBADM,IBDISC,IBDISCH,IBLIST,IBERR
 N IBIEN,IBICN,IBQIEN,IBC0,IBODISCH,IBOADMIN,IB351IEN,IBSTATION,IBADM1,IBCLDT,IBOADMIT,IBSTAT,IBMES,IBSEGT,IBTRYTIL,IBTFL
 ;
 ;S IBC0=^IBE(351,IBCLDA,0)    
 ;HL7 to FM - $$HL7TFM^XLFDT(DT)
 ;FM TO HL7 - $$FMTHL7^XLFDT(DT)
 ; Retrieve Admission and Discharge dates from the PTF file
 ;
 D CCINPT^IBECECX1(DFN,.IBADMIT)                       ;Get admit/discharge data
 I $G(IBADM1) S IB351IEN=$$GETIEN^IBECECX1(DFN,IBADM1)
 S IBICN=$$ICN^IBARXMU(DFN)
 I +IBICN<1 S IBERROR="NO PATIENT ICN FOUND",IBERR=1 Q  ;quit if unable to find ICN
 S IBTFL=$$TFL^IBARXMU(DFN,.IBTFL,2) I 'IBTFL S IBFLAG1=1 Q  ;Quit if patient has no other TFL's
 S:$G(IBERR)="" IBERR=0
 D MSH,QRD,QRF,SENDQRY
 N IBMSG,HDR,SEG,XXX,DFN,IBVARRY,IBECERR,IBECNIEN,IBID,IBICLDTS,IBDISCH
 ;Wait clock for up to 2 minutes until DSR returned from billing clock query
 S IBFLAG1=0,IBTRYTIL=$$FMADD^XLFDT($$NOW^XLFDT,,,2) F  Q:$$NOW^XLFDT>IBTRYTIL  Q:IBFLAG1  D
 .H 2 W "." Q:IBFLAG1  S HLMSGIEN=MSG("IEN"),IBMES=$$STARTMSG^HLOPRS(.IBMSG,HLMSGIEN,.HDR) S HLMSGIEN=$G(IBMSG("ACK BY IEN")) I HLMSGIEN D
 ..S IBERR=0,IBERRMSG=""
 ..S XXX=$$STARTMSG^HLOPRS(.IBMSG,HLMSGIEN,.HDR)
 ..F  Q:'$$NEXTSEG^HLOPRS(.IBMSG,.SEG)  S IBSEGT=$G(SEG("SEGMENT TYPE")) Q:IBSEGT=""  D
 ...I IBSEGT="MSA" D MSA1
 ...I IBSEGT="QRD" D QRDDI
 ...I IBSEGT="DSP" D
 ....I $$GET^HLOPRS(.SEG,5,1)["Billing Clock found at site #" S IBERRMSG=$$GET^HLOPRS(.SEG,5,1),IBOVERLAP=1
 ....S IBCNT=$$GET^HLOPRS(.SEG,1,1)
 ....S IBISTN=$$GET^HLOPRS(.SEG,3,9,0,1)                     ;Station Number
 ....S IBIVRSN=$$GET^HLOPRS(.SEG,3,9,0,2)                    ;Billing Clock Version
 ....S IBFVRSN1=IBISTN_" "_IBIVRSN I 'IBFVRSN1 S IBFVRSN1=0 ;Full billing clock version
 ....S IBSTATION=$$GET^HLOPRS(.SEG,9,1)
 ....I IBSTATION'="",IBCNT>1 D FIND^DIC(4,,.01,"MX",IBSTATION,,"D",,,"IBLIST","IBERR") D
 .....S IBINST=IBLIST("DILIST",1,1),IBECARY(IBINST)="" ;Institution array for error messaging
 ..H 4 I $G(IBADM1),'IB351IEN S IB351IEN=$$GETIEN^IBECECX1(DFN,IBADM1)
 ..;I IBERRMSG["MVI returned no treating facilities for this patient" S IBERRMSG="",IBFLAG1=1 Q  ;IB*2.0*769 - MVI message returned from VDIF when no active clocks found per HBM request
 ..I IBERRMSG'="" S IBFLAG1=1 Q
 ..S IBECERR=0 ;IBECERR - FLAG TO DETERMINE IF VERSIONING OUT OF SYNC
 ..I IBERRMSG="" S IBECDA=$S(+IB351IEN:IB351IEN,1:$G(IBECNIEN)) I IBECDA S IBECERR=$$GET1^DIQ(351,IBECDA,18,"I") I IBECERR D  ;DSR returned with query results - now validate the results based on clock version
 ...S IBERRMSG="Query results contain inconsistent versioning - indicating MEANS TEST BILLING CLOCKs may be out of sync."
 ..S IBFLAG1=1
 Q
 ;-------------------------------------------------OUTGOING QRY ----------------------------------------
EN(DFN) ;OUTGOING QRY  ENTRY POINT
 ; IBQIEN - Query Request Message IEN (#778) that initiated this response                                   CALLED FROM CLADD^IBAUTL3
 N X,PARMS,SEG,MSG,VALUE,FIELD,QRYNUM,IBERROR,IBERR,NAME,ERROR,XXX,WHOTO,IBACBCLK,IBADM,IBDISC,IBADMIT,IBDISCH
 N IBIEN,IBICN,IBQIEN,IBC0,IBODISCH,IBOADMIN,IBSTATION,IBADM1,IBCLDT,IBOADMIT,IBSTAT
 ;
 ;S IBC0=^IBE(351,IBCLDA,0)    
 ;HL7 to FM - $$HL7TFM^XLFDT(DT)   
 ;FM TO HL7 - $$FMTHL7^XLFDT(DT)
 ; Retrieve Admission and Discharge dates from the PTF file
 ;
 D INPT^IBECECX1(DFN)                 ;Get admit/discharge data
 I $G(IBADM1),'$G(IB351IEN) S IB351IEN=$$GETIEN^IBECECX1(DFN,IBADM1)
 S IBICN=$$ICN^IBARXMU(DFN)
 I +IBICN<1 S IBERROR="NO PATIENT ICN FOUND",IBERR=1 Q  ;quit if unable to find ICN
 S IBTFL=$$TFL^IBARXMU(DFN,.IBTFL,2) I 'IBTFL Q  ;Quit if patient has no other TFL's
 S:$G(IBERR)="" IBERR=0
 D MSH,QRD,QRF,SENDQRY
 K IB351IEN
 Q
 ;
MSH ;  Build MSH Segment
 N PARMS K ^TMP("DSR")
 S PARMS("COUNTRY")="USA"
 S PARMS("MESSAGE TYPE")="QRY"
 S PARMS("EVENT")="R02"
 S PARMS("VERSION")="2.3"
 S MSG="^TMP("_"QRY"
 S PARMS("MESSAGE STRUCTURE")="QRY_R02" ;IB*2.0*769 - Add per VDIF
 S X=$$NEWMSG^HLOAPI(.PARMS,.MSG,.ERROR)
 Q
QRD ;Build QRD segment
 S VALUE="QRD",FIELD=0 D SET^HLOAPI(.SEG,VALUE,FIELD)
 S %P1=$$NOW^XLFDT() S %P1=$$FMTHL7^XLFDT(%P1)
 S VALUE=%P1,FIELD=1 D SET^HLOAPI(.SEG,VALUE,FIELD)
 S VALUE=1,FIELD=2 D SET^HLOAPI(.SEG,VALUE,FIELD)
 S VALUE=1,FIELD=3 D SET^HLOAPI(.SEG,VALUE,FIELD)
 S VALUE=$G(IB351IEN),FIELD=4 D SET^HLOAPI(.SEG,VALUE,FIELD)
 ;S VALUE=QRYNUM,FIELD=4 D SET^HLOAPI(.SEG,VALUE,FIELD)
 S VALUE=1,FIELD=7 D SET^HLOAPI(.SEG,VALUE,FIELD)
 S NAME=$$GET1^DIQ(2,DFN_",",.01)
 S VALUE=$P($G(NAME),",",1),FIELD=8 D SET^HLOAPI(.SEG,VALUE,FIELD,1)
 S VALUE=$P($G(NAME),",",2),FIELD=8 D SET^HLOAPI(.SEG,VALUE,FIELD,2)
 S VALUE=IBICN,FIELD=9 D SET^HLOAPI(.SEG,VALUE,FIELD)
 S FIELD=11 I $G(IBADMIT) S VALUE=$P(IBADMIT,".") D SET^HLOAPI(.SEG,VALUE,FIELD) ; ADMIT DATE - bjr ib*769
 S FIELD=12 I $G(IBDISCH) S VALUE=$P(IBDISCH,".") D SET^HLOAPI(.SEG,VALUE,FIELD) ; Discharge date - bjr ib*769
 S X=$$ADDSEG^HLOAPI(.MSG,.SEG,.ERROR)
 Q
 ;
QRF ;Build QRF segment
 S FIELD=0,VALUE="QRF" D SET^HLOAPI(.SEG,VALUE,FIELD)
 S FIELD=1,VALUE="IBECEAC-QRY" D SET^HLOAPI(.SEG,VALUE,FIELD)
 S FIELD=2 I $G(IBADMIT) S VALUE=IBADMIT D SET^HLOAPI(.SEG,VALUE,FIELD) ; ADMIT DATE
 S FIELD=3 I $G(IBDISCH) S VALUE=IBDISCH D SET^HLOAPI(.SEG,VALUE,FIELD) ; Discharge date
 S X=$$ADDSEG^HLOAPI(.MSG,.SEG,.ERROR)
 Q
SENDQRY ;
 S PARMS("SENDING APPLICATION")="IBECEAC-QRY"
 S WHOTO("RECEIVING APPLICATION")="IBECEAC-RECV"
 S WHOTO("STATION NUMBER")="200VDIF"
 S WHOTO("MIDDLEWARE LINK NAME")="IBECEC-QRY"            ;File #870 entry
 S XXX=$$SENDONE^HLOAPI1(.MSG,.PARMS,.WHOTO,.ERROR)
 Q
 ;
 ;--------------------------------------------------INCOMING QRY  --------------------------
QRYIN ; receives incoming HL7 QRY^R02 and returns a DSR
 N ICN,IBECADM,IBSADMIT,IBSDISCH,IBQRYDT,IBEDIPI
 S ERR=0,IBSTAT=$$STARTMSG^HLOPRS(.IBMSG,HLMSGIEN,.IBHDR)
 S IBIEN=HLMSGIEN
 I 'IBSTAT  S HLERR="Unable to start parse of message" Q
 I "QRY"'[IBHDR("MESSAGE TYPE") Q
 ;
 ; extract some incoming message data from Cerner message IBARXC-QRY - QRY^R02 
 F  Q:'$$NEXTSEG^HLOPRS(.IBMSG,.SEG)  S IBSEGT=$G(SEG("SEGMENT TYPE")) Q:IBSEGT=""  D
 . I IBSEGT="QRD" D QRDQI
 . I IBSEGT="QRF" D QRFQI
 Q:'ICN
 D DSROUT^IBECECQ2(ICN,IBIEN,IBECADM)
 K IBCLNDT
 Q
 ;
QRDQI ; INCOMING QRD SEGMENT
 S ICN=$$GET^HLOPRS(.SEG,9,1,1,1)
 S IBSADMIT=$$GET^HLOPRS(.SEG,11,1,1,1)
 S IBSDISCH=$$GET^HLOPRS(.SEG,12,1,1,1)
 S IB351IEN=$$GET^HLOPRS(.SEG,4,1,1,1)
 S IBQRYDT=$$GET^HLOPRS(.SEG,1,1) ;RRA IB*769
 S IBEDIPI=$$GET^HLOPRS(.SEG,10,1,1,1) ;BJR IB*769
 Q
 ;
QRFQI ; INCOMING QRF SEGMENT
 S IBECADM=$$GET^HLOPRS(.SEG,2,1,1,1)
 S IBECADM=$$HL7TFM^XLFDT(IBECADM)
 Q
 ;
 ;--------------------------------------------------INCOMING DSR --------------------------
DSRIN ;MAIN ENTRY POINT - incoming DSR message
 ;
 N IBMSG,HDR,SEG,XXX,DFN,IBAGG,IBVARRY,IBERRMSG,IBECERR,IBECDA,IBECNIEN,IBID,IBICLDTS,IBDISCH,IB3513,IBFDA,IBECVSRN
 S IBERR=0,IBAGG=1
 S XXX=$$STARTMSG^HLOPRS(.IBMSG,HLMSGIEN,.HDR)
 F  Q:'$$NEXTSEG^HLOPRS(.IBMSG,.SEG)  S IBSEGT=$G(SEG("SEGMENT TYPE")) Q:IBSEGT=""  D
 . I IBSEGT="MSA" D MSA1
 . I IBSEGT="QRD" D QRDDI
 . I IBSEGT="DSP" D DSPDI
 S IBECERR=0 ;IBECERR - FLAG TO DETERMINE IF VERSIONING OUT OF SYNC
 I IBERRMSG="" S IBECDA=$S(+IB351IEN:IB351IEN,1:$G(IBECNIEN)) I IBECDA S IBECERR=$$VRSNCHK^IBECECX1(IBECDA) ;DSR returned with query results - now validate the results based on clock version
 I 'IBECERR,$G(IBECDA) S IBECVSRN=$O(IBVARRY("")) I IBECVSRN D
 .S IENS=IBECDA_",",IBFDA(351,IENS,17)=IBECVSRN D FILE^DIE(,"IBFDA","IBERR")
 I IBECERR D  Q
 .L +^IBE(351,IBECDA):$G(DILOCKTM,5) Q:'$T
 .S DIE="^IBE(351,",DA=IBECDA,DR="18///YES" D ^DIE
 .L -^IBE(351,IBECDA)
 .S IBERRMSG="Query results contain inconsistent versioning - indicating MEANS TEST BILLING CLOCKs may be out of sync."
 .S IBID=$G(IBCLDA)
 .S:$G(IB351IEN) IBICLDTS=$$GET1^DIQ(351,IB351IEN_",",.03,"E") ;Use billing clock start date from local entry
 .D ERR2^IBECECX1(IBERRMSG)
 Q
 ;
MSA1 ;PULL 351 REFERENCE NUMBER
 S IBCLDA=IBMSG("HDR","MESSAGE CONTROL ID")
 S IB778=$P($$GET^HLOPRS(.SEG,2,1,1)," ",2)
 Q
 ;
QRDDI  ;INCOMING QRD SEGMENT
 ;N IBQRYDT
 S IBQRYDT=$$GET^HLOPRS(.SEG,1,1,1)       ;QUERY DATE/TIME
 S IBICN=$$GET^HLOPRS(.SEG,9,1,1,1)         ;Pt ICN
 S DFN=$$DFN^IBARXMU(IBICN)
 S IBADMIT=$$GET^HLOPRS(.SEG,11,1,1,1)
 S IBADMIT=$$HL7TFM^XLFDT(IBADMIT)
 S IBDISCH=$$GET^HLOPRS(.SEG,12,1,1,1)
 S IBDISCH=$$HL7TFM^XLFDT(IBDISCH)
 S IB351IEN=$$GET^HLOPRS(.SEG,4,1,1,1)
 Q
DSPDI   ;INCOMING DSP SEGMENT
 N IBSETID,IBCLDT,IB901,IB902,IB903,IB904,IBICLDAY,IBICLDT,IBSETID1,IBCLDT1,IB9011,IB9021,IB9031,IB9041,IBCLDAY1,IBICKDT,IBACTC,IBCKNUM,IBICNUM
 N IBCNT,IBDA,IBCNDT,IBQRYS,IBCBDT,IBDA1,IBICLNDT,IBODISCH,IBOADMIN,IBQRY,IBCRTST,IBISTN,IBIVRSN,IBFVRSN1,IBDAYS,IBADTSV,IBISETID,IBISITE
 S IBERRMSG=$$GET^HLOPRS(.SEG,5,1)    ;Result Messages/Errors
 ;if error occurred call error handling and quit processing
 I IBERRMSG["MVI returned no treating facilities for this patient" S IBERRMSG="" ;IB*2.0*769 - MVI message returned from VDIF when no active clocks found per HBM request
 I IBERRMSG["NO MEANS TEST BILLING CLOCK FOUND" S IBERRMSG="" ;IB*2.0*769 - Clear error message for VistA when no clock found
 I IBERRMSG["No Member found" S IBERRMSG="" ;IB*2.0*769 Clear error message for HBM no Member response
 I IBERRMSG["No clock found for Parameters" S IBERRMSG="" ;IB*2.0*769 Clear error message for HBM No clock found for Parameters
 I IBERRMSG'="" D  Q
 .S IBID=$G(IBCLDA)
 .;S IBICLDTS=$G(IBADMIT)
 .S:IB351IEN IBICLDTS=$$GET1^DIQ(351,IB351IEN_",",.03,"E") ;Use billing clock start date from local entry
 .I IBERRMSG["Billing Clock found at site #" D  Q
 ..D ERR2^IBECECX1(IBERRMSG) ;Call ERR2 for Clock discrepancy issues
 .S IBERRMSG="Query attempt failed - "_IBERRMSG D ERR1^IBECECX1(IBERRMSG)
 .I IB351IEN S DIE="^IBE(351,",DA=IB351IEN,DR="16///@" D ^DIE
 S IBCNT=$$GET^HLOPRS(.SEG,1,1)
 S IBISETID=$$GET^HLOPRS(.SEG,3,1)     ;FT1 Response - bjr
 S IBICLDT=$$GET^HLOPRS(.SEG,3,2)      ;Billing Clock start date - bjr
 S:IBICLDT IBICLDT=$$HL7TFM^XLFDT(IBICLDT)        ;convert HL7 date TO FM - bjr
 S IBI901=$$GET^HLOPRS(.SEG,3,3)       ;1st QRT charges - bjr
 S IBI902=$$GET^HLOPRS(.SEG,3,4)       ;2nd QRT charges - bjr
 S IBI903=$$GET^HLOPRS(.SEG,3,5)       ;3rd QRT charges - bjr
 S IBI904=$$GET^HLOPRS(.SEG,3,6)       ;4th QRT charges - bjr
 S IBICLDAY=$$GET^HLOPRS(.SEG,3,7)     ;Inpatient days - bjr
 S IBICLNDT=$$GET^HLOPRS(.SEG,3,8)     ;Billing clock end date - bjr
 S IBISTN=$$GET^HLOPRS(.SEG,3,9,1)     ;Station Number
 S IBIVRSN=$$GET^HLOPRS(.SEG,3,9,2)    ;Billing Clock Version
 S IBFVRSN1=IBISTN_" "_IBIVRSN         ;Full billing clock version
 I +IBFVRSN1=0 S IBFVRSN1=0              ;if no version, set to 0
 S IBICLNDT=$$HL7TFM^XLFDT(IBICLNDT)      ;HL7 TO FM - bjr
 S IBICKDT=IBICLNDT
 ;RRA currently nothing passed in the 4th field - leaving for integration with Cerner
 S IBSETID1=$$GET^HLOPRS(.SEG,4,1)      ;FT2 set id (IF PRESENT)
 S IBCLDT1=$$GET^HLOPRS(.SEG,4,2)     ;Billing Clock start date
 S:IBCLDT1 IBCLDT1=$$HL7TFM^XLFDT(IBCLDT1)      ;convert HL7 date TO FM
 S IB9011=$$GET^HLOPRS(.SEG,4,3)      ;1st QRT charges
 S IB9021=$$GET^HLOPRS(.SEG,4,4)      ;2nd QRT charges
 S IB9031=$$GET^HLOPRS(.SEG,4,5)      ;3rd QRT charges
 S IB9041=$$GET^HLOPRS(.SEG,4,6)      ;4th QRT charges
 S IBCLDAY1=$$GET^HLOPRS(.SEG,4,7)    ;Inpatient days
 ;S IBICKDT=$$GET^HLOPRS(.SEG,4,8)    ;Billing clock end date
 ;S IBICKDT=$$HL7TFM^XLFDT(IBICKDT)    ;convert HL7 date TO FM
 S IBISTAT=$$GET^HLOPRS(.SEG,6,1)    ;Clock Status
 S IBCKNUM=$$GET^HLOPRS(.SEG,7,1)   ;Number of billing clocks sent (FT1)
 S IBICNUM=$$GET^HLOPRS(.SEG,8,1)   ;Number of admit encounters sent (FT2) - bjr
 S IBISITE=$$GET^HLOPRS(.SEG,9,1)   ;Site - bjr
 I 'IBICLDT  D UDCL^IBECECX1  Q  ;Quit if no clock start date sent which indicates no clocks from other sites
 I $G(IB351IEN),IBCNT=1 D
 .S IBCBDT=$$GET1^DIQ(351,IB351IEN_",",.03,"I")
 .S IBQRYS=$$GET1^DIQ(351,IB351IEN_",",16,"I")
 .S IBCRTST=$$GET1^DIQ(351,IB351IEN_",",.04,"I")
 .S IBDAYS=$$GET1^DIQ(351,IB351IEN_",",.09,"I")
 .S IBDA1=IB351IEN
 Q:(IBICLDT<1)
 I (($G(IBCBDT)=IBICLDT)!($G(IB351IEN))),IBCNT=1 D UPDATE^IBECECU1(IBDA1)  Q  ;Update record if current Billing Clock Start Date matches incoming Billing Clock Start Date
 I IBCNT=1 D NEWREC^IBECECU1  ;IBCNT=1 MEANS THE DSR SEGMENT IS AGGREGATED DATA AND SHOULD BE STORED IN 351
 I IBCNT>1,$G(IB351IEN) S:$P(IBFVRSN1," ",2) IBVARRY(IBFVRSN1)="" D EN^IBECECU2(IB351IEN,DFN) ;IBCNT>1 MEANS IT IS INDIVIDUAL SITE DATA USED FOR AGGREGATION UPDATE CLOCK VERSION ARRAY AND NEEDS TO BE STORED IN 351.3
 I IBCNT>1,'$G(IB351IEN),$G(IBECNIEN) S:$P(IBFVRSN1," ",2) IBVARRY(IBFVRSN1)="" D EN^IBECECU2(IBECNIEN,DFN) ;Use new clock IEN when one is created
 S IBADTSV=IBADMIT S:$G(IBICLNDT) IBADMIT=$$FMADD^XLFDT(IBICLNDT,1)
 I ($$FMTHL7^XLFDT(IBICLNDT))<IBDISCH,IBCNT=1 D  ;
 .S IBQRY=$O(^IBE(351,"AIVDT",DFN,-IBADMIT,";"),-1) I IBQRY,$P(^IBE(351,IBQRY,1),U,5) Q
 .S IBADMIT=$$FMADD^XLFDT(IBICLNDT,1),IBDISCH=$$FMADD^XLFDT(IBADMIT,365),IBADMIT=$$FMTHL7^XLFDT(IBADMIT),IBOADMIT=IBADMIT
 .S IBDISCH=$S(IBDISCH<DT:IBDISCH,1:"") I IBDISCH S IBDISCH=$$FMTHL7^XLFDT(IBDISCH),IBODISCH=IBDISCH
 .K SEG,ERROR
 .D MSH,QRD,QRF,SENDQRY
 S IBADMIT=IBADTSV
 Q
 ;