| 1 | SDRPA07 ;BP-OIFO/ESW - APPOINTMENT BATCH TRANSMISSION BUILDER; ; 9/14/04 9:20am  ; Compiled April 24, 2006 17:00:51 | 
|---|
| 2 | ;;5.3;Scheduling;**290,333,349,376,446**;AUG 13 1993;Build 77 | 
|---|
| 3 | ; | 
|---|
| 4 | ; | 
|---|
| 5 | SNDS19(ZTSK,SDBCID,SDMCID) ;Main entry point for the sending of SIU-S19 batch messages to | 
|---|
| 6 | ; the National Patient Care Database | 
|---|
| 7 | ; | 
|---|
| 8 | ;Input  : ZTSK | 
|---|
| 9 | ;Output : SDBCID - Batch Control ID | 
|---|
| 10 | ;         SDMCID - Message Control ID | 
|---|
| 11 | ; | 
|---|
| 12 | ; | 
|---|
| 13 | ;Declare variables | 
|---|
| 14 | N X,X1,X2,%H | 
|---|
| 15 | N BATCHC,MSGN,CURLINE | 
|---|
| 16 | N LINEN,MSHLINE,XMITERR,HL7XMIT,ERROR,ORIGENT,ORIGMNT | 
|---|
| 17 | N HLEID,HL,HLECH,HLFS,HLQ,HLMID,HLMTIEN,HLDT,HLDT1,MSGID,HLRESLT,HLP | 
|---|
| 18 | ;Set message count limit for batch message | 
|---|
| 19 | ;Initialize global locations | 
|---|
| 20 | S XMITERR="^TMP(""SD-PAIT-BLD"","_$J_",""ERRORS"")" | 
|---|
| 21 | S HL7XMIT="^TMP(""HLS"","_$J_")" | 
|---|
| 22 | K @XMITERR,@HL7XMIT | 
|---|
| 23 | ;Initiate | 
|---|
| 24 | D INIT^HLFNC2("SD-PAIT-EVENT",.HL) | 
|---|
| 25 | ;Unable to initiate HL7 variable - send error bulletin - done | 
|---|
| 26 | ;I ($O(HL(""))="") D ERRBUL($P(HL,U,2)) Q  ; create ERRBUL later | 
|---|
| 27 | ;Create batch message | 
|---|
| 28 | D CREATE^HLTF(.HLMID,.HLMTIEN,.HLDT,.HLDT1) | 
|---|
| 29 | ;HLMID - value of batch ID | 
|---|
| 30 | ;HLMTIEN - IEN of Message Text file entry | 
|---|
| 31 | ;HLDT - current date/time in FM internal format | 
|---|
| 32 | ;HLDT1 - current date/time in HL7 format | 
|---|
| 33 | N SDA,SDDT S SDA=HLMID,SDDT=HLDT ; to be used to file later | 
|---|
| 34 | ;Unable to create batch message - send error bulletin - done | 
|---|
| 35 | ;I ('HLMTIEN) D ERRBUL("Unable to create batch HL7 message") Q | 
|---|
| 36 | ;Initialize message count | 
|---|
| 37 | S BATCHC=0 | 
|---|
| 38 | ;Initialize message number | 
|---|
| 39 | S MSGN=0 | 
|---|
| 40 | ;Initialize line count | 
|---|
| 41 | S LINEN=1 | 
|---|
| 42 | S CURLINE=LINEN | 
|---|
| 43 | ;Loop through list of appointments requiring transmission | 
|---|
| 44 | N RUNID S RUNID=$O(^SDWL(409.6,"AD",ZTSK,"")) | 
|---|
| 45 | N DFN,SD25,SD6,SD8,SD7,SDPATCL S DFN="" F  S DFN=$O(^TMP("SDDPT",$J,DFN)) Q:DFN=""  D | 
|---|
| 46 | .N SDP,ICN,SSN,SNM,FNM,MNM,DOB,SDSC,SDSCP,SDENRO,SDAPPT S SDP=^TMP("SDDPT",$J,DFN) | 
|---|
| 47 | .S ICN=$P(SDP,U),SSN=$P(SDP,U,2),SNM=$P(SDP,U,3),FNM=$P(SDP,U,4) | 
|---|
| 48 | .S MNM=$P(SDP,U,5),DOB=$P(SDP,U,6),SDSC=$P(SDP,U,7),SDSCP=$P(SDP,U,8),SDENRO=$P(SDP,U,9) | 
|---|
| 49 | .N SDADT S SDADT="" F  S SDADT=$O(^TMP("SDDPT",$J,DFN,SDADT)) Q:SDADT=""  D | 
|---|
| 50 | ..N SDPT,SDCDATE,SDADID,SDSDDT,SDSTAT,SDNAVA,SDCHKOUT,SDCDT,SDARF,SDARDT,SDNEW,SDCL,SDCLNUM,SDSTOP,SDCSTOP,SDFAC,SDDAM,SDCLNM,SDSTOPD,SDCSTOPD | 
|---|
| 51 | ..N SDSTOPDD,SD8RD | 
|---|
| 52 | ..S SDPT=^TMP("SDDPT",$J,DFN,SDADT),SDADID=$P(SDPT,U),SDDAM=$P(SDPT,U,2),SDSDDT=$P(SDPT,U,3),SDNAVA=$P(SDPT,U,5) | 
|---|
| 53 | ..S SDCHKOUT=$P(SDPT,U,6),SDCDT=$P(SDPT,U,7),SDARDT=$P(SDPT,U,9),SDNEW=$P(SDPT,U,10),SDCL=$P(SDPT,U,12),SDCLNM=$P(SDPT,U,13) | 
|---|
| 54 | ..S SDSTOP=$P(SDPT,U,14),SDCSTOP=$P(SDPT,U,15),SDFAC=$P(SDPT,U,16),SDPATCL=$P(SDPT,U,4) | 
|---|
| 55 | ..S SDAPPT=^TMP("SDDPT",$J,DFN,SDADT,"SCH"),SD25=$P(SDAPPT,"^",2),SD6=$P(SDAPPT,"^",3),SD8=$P(SDAPPT,"^",4),SD8RD=$P(SDAPPT,"^",7) | 
|---|
| 56 | ..S SDSTOPDD=^TMP("SDDPT",$J,DFN,SDADT,"STDC"),SDSTOPD=$P(SDSTOPDD,"^"),SDCSTOPD=$P(SDSTOPDD,"^",2) | 
|---|
| 57 | ..;calculate consult date if applicable; 446 | 
|---|
| 58 | ..N SEQ S SEQ=0,SDCDATE="" F  S SEQ=$O(^SC(SDCL,"S",SDADT,1,SEQ)) Q:+SEQ'=SEQ  I $P(^SC(SDCL,"S",SDADT,1,SEQ,0),"^")=DFN D  Q | 
|---|
| 59 | ...S SDCSLT=$$GET1^DIQ(44.003,SEQ_","_SDADT_","_SDCL_",",688,"I")  ; consult | 
|---|
| 60 | ...Q:SDCSLT="" | 
|---|
| 61 | ...I $D(^GMR(123,SDCSLT)) S SDCDATE=$$DTCONV^SDRPA08($$GET1^DIQ(123,SDCSLT_",",3,"I")) ;date converted to HL7 | 
|---|
| 62 | ..;Calculate message control ID | 
|---|
| 63 | ..S MSGN=MSGN+1 | 
|---|
| 64 | ..S MSGID=HLMID_"-"_MSGN | 
|---|
| 65 | ..;Build MSG segment | 
|---|
| 66 | ..I (MSGID'="") D | 
|---|
| 67 | ...;remember orig message and event type | 
|---|
| 68 | ...S ORIGMNT="SIU" | 
|---|
| 69 | ...S ORIGENT="S12" | 
|---|
| 70 | ...S HL("MNT")="SIU",HL("ETN")=$P(SDAPPT,"^") | 
|---|
| 71 | ...;build MSH segment | 
|---|
| 72 | ...K RESULT D MSH^HLFNC2(.HL,MSGID,.RESULT) | 
|---|
| 73 | ...;reset message & event type to its orig values | 
|---|
| 74 | ...S HL("MNT")=ORIGMNT | 
|---|
| 75 | ...S HL("ETN")=ORIGENT | 
|---|
| 76 | ...;copy MSH segment into HL7 message | 
|---|
| 77 | ...S @HL7XMIT@(CURLINE)=RESULT | 
|---|
| 78 | ...N SDFACL S SDFACL=$P($$SITE^VASITE(),"^",3) | 
|---|
| 79 | ...S $P(@HL7XMIT@(CURLINE),U,4)=SDFACL ;sending facility station # | 
|---|
| 80 | ...S $P(@HL7XMIT@(CURLINE),U,5)="SD-AAC-PAIT" ;Receiving Application | 
|---|
| 81 | ...S $P(@HL7XMIT@(CURLINE),U,6)=200 ; Receiving Facility | 
|---|
| 82 | ...I ($D(RESULT(1))) D | 
|---|
| 83 | ....S @HL7XMIT@(CURLINE,1)=RESULT(1) | 
|---|
| 84 | ....S CURLINE=CURLINE+1 | 
|---|
| 85 | ...E  S CURLINE=CURLINE+1 | 
|---|
| 86 | ..;get list of segments | 
|---|
| 87 | ..N SDSCH S SDSCH="SCH"_HLFS_1_"^^^^^" | 
|---|
| 88 | ..S SD7=SDNAVA | 
|---|
| 89 | ..;S ^TMP("HLS",$J,CURLINE) | 
|---|
| 90 | ..S @HL7XMIT@(CURLINE)=SDSCH_SD6_"^"_SD7_"^"_SD8_"^^^" | 
|---|
| 91 | ..N SDDAT S SDDAT="~~~"_SDDAM_"~~~"_"Date Appt Created|~~~"_SDSDDT_"~~~"_"Desired Date|~~~"_SDADID_"~~~"_"Appt Date" | 
|---|
| 92 | ..S SDDAT=SDDAT_"|~~~"_SDCHKOUT_"~~~"_"Checkout Date" | 
|---|
| 93 | ..S SDDAT=SDDAT_"|~~~"_SDCDT_"~~~"_"Cancellation Date" | 
|---|
| 94 | ..S SDDAT=SDDAT_"|~~~"_SDARDT_"~~~"_"Auto-rebook Date" | 
|---|
| 95 | ..S SDDAT=SDDAT_"|~~~"_SD8RD_"~~~"_"Resched Date" | 
|---|
| 96 | ..S SDDAT=SDDAT_"|~~~"_SDCDATE_"~~~"_"Consult Date" | 
|---|
| 97 | ..;S $P(SDSCH,U,12)=SDDAT,$P(SDSCH,U,26)=SDSTAT | 
|---|
| 98 | ..S @HL7XMIT@(CURLINE,1)=SDDAT_"^^^^^^^^^^^^^^"_SD25 | 
|---|
| 99 | ..S CURLINE=CURLINE+1 | 
|---|
| 100 | ..S @HL7XMIT@(CURLINE)=$$EN^VAFHLPID(DFN,"1,3,5,7,11,19",1,1) | 
|---|
| 101 | ..N SDCDFN S SDCDFN=$P(@HL7XMIT@(CURLINE),"^",4),SDCDFN=SDCDFN_"|"_DFN_"~~~USVHA&&L~PI" I $P(SDCDFN,"~")["V" S $P(SDCDFN,"~",2)="" | 
|---|
| 102 | ..S $P(@HL7XMIT@(CURLINE),"^",4)=SDCDFN | 
|---|
| 103 | ..N SDZIP S SDZIP=$P(@HL7XMIT@(CURLINE),U,12),SDZIP=$P(SDZIP,"~",5) S $P(@HL7XMIT@(CURLINE),U,12)="~~~~"_SDZIP | 
|---|
| 104 | ..S CURLINE=CURLINE+1 | 
|---|
| 105 | ..;get Admission Type | 
|---|
| 106 | ..N SDCR1,SDAT,SDCR S SDCR1=$E(SDDAM,5,8)_$E(SDDAM,1,4) D DT^DILF(,SDCR1,.SDCR) S SDAT=$$POV^SDRPA20(DFN,SDADT,SDCL,SDCR) | 
|---|
| 107 | ..S @HL7XMIT@(CURLINE)="PV1^1^"_SDPATCL_"^^"_SDAT_"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"_SDFAC | 
|---|
| 108 | ..S CURLINE=CURLINE+1 | 
|---|
| 109 | ..S SDNEW=$S(SDNEW=1:"NSF",SDNEW=2:"OPN",SDNEW=3:"SHB") | 
|---|
| 110 | ..S @HL7XMIT@(CURLINE)="PV2^^^^^^^^^^^^^^^^^^^^^^^^"_SDNEW | 
|---|
| 111 | ..S CURLINE=CURLINE+1 | 
|---|
| 112 | ..I $D(^TMP("SDDPT",$J,DFN,SDADT,"ROL")) D | 
|---|
| 113 | ...N SDCNT,SDAIP S SDAIP="AIP^" S SDCNT="" F  S SDCNT=$O(^TMP("SDDPT",$J,DFN,SDADT,"ROL",SDCNT)) Q:SDCNT=""  D | 
|---|
| 114 | ....N SDPOVID,SDPROVNM,SDROLS | 
|---|
| 115 | ....S SDROLS=^TMP("SDDPT",$J,DFN,SDADT,"ROL",SDCNT) | 
|---|
| 116 | ....S SDPOVID=$P(SDROLS,U,3),SDPROVNM=$P(SDROLS,U,4),SDPROVNM=$TR(SDPROVNM,",","~") | 
|---|
| 117 | ....S SDPROVNM=$TR(SDPROVNM," ","~") | 
|---|
| 118 | ....I $L(SDPROVNM,"~")=2 S SDPROVNM=SDPROVNM_"~~" | 
|---|
| 119 | ....E  I $L(SDPROVNM,"~")=3 S SDPROVNM=SDPROVNM_"~" | 
|---|
| 120 | ....S @HL7XMIT@(CURLINE)=SDAIP_SDCNT_"^^"_SDPOVID_"~"_SDPROVNM_"^"_"Provider" | 
|---|
| 121 | ....S CURLINE=CURLINE+1 | 
|---|
| 122 | ..S @HL7XMIT@(CURLINE)="AIL^1^^"_SDCL_"~~~~~~~~"_SDCLNM_"^"_SDSTOP_"~"_SDSTOPD_"~DSS Clinic ID^"_SDCSTOP_"~"_SDCSTOPD_"~DSS Credit Stop" | 
|---|
| 123 | ..S CURLINE=CURLINE+1 | 
|---|
| 124 | ..N SDCNT S SDCNT="" F  S SDCNT=$O(^TMP("SDDPT",$J,DFN,SDADT,"ZCL",SDCNT)) Q:SDCNT=""  D | 
|---|
| 125 | ...S @HL7XMIT@(CURLINE)=^TMP("SDDPT",$J,DFN,SDADT,"ZCL",SDCNT,0) | 
|---|
| 126 | ...S CURLINE=CURLINE+1 | 
|---|
| 127 | ..;create ZEN only if enrollment was retrieved | 
|---|
| 128 | ..I SDENRO>0 S @HL7XMIT@(CURLINE)="ZEN^1^^^^^^^^"_SDENRO,CURLINE=CURLINE+1 | 
|---|
| 129 | ..S @HL7XMIT@(CURLINE)="ZSP^1^"_SDSC_"^"_SDSCP | 
|---|
| 130 | ..S CURLINE=CURLINE+1 | 
|---|
| 131 | ..;ZEL | 
|---|
| 132 | ..N SDZEL D EN1^VAFHLZEL(DFN,"1,37,38",1,.SDZEL) D | 
|---|
| 133 | ...;need to modify 37 WITH THE CREATION DATE | 
|---|
| 134 | ...N SDDAMV S SDDAMV=$$HL7TFM^XLFDT(SDDAM) | 
|---|
| 135 | ...N SDVC S SDVC=$$CVEDT^DGCV(DFN,SDDAMV),SDVC=$P(SDVC,"^",3) D | 
|---|
| 136 | ....S $P(SDZEL(1),"^",38)=$S(SDVC=1:1,SDVC=0:0,1:"U") | 
|---|
| 137 | ....I $P(SDZEL(1),"^",39)'?8N S $P(SDZEL(1),"^",39)="" | 
|---|
| 138 | ...S @HL7XMIT@(CURLINE)=SDZEL(1) | 
|---|
| 139 | ..S CURLINE=CURLINE+1 | 
|---|
| 140 | ..;ZMH | 
|---|
| 141 | ..N SAR D ENTER^VAFHLZMH(DFN,"SAR","1,5,10","3,4",HL("FS"),HL("ECH"),"") | 
|---|
| 142 | ..S $P(SAR(1,0),"^",4)="" ; | 
|---|
| 143 | ..;service separation date | 
|---|
| 144 | ..;combat indication and location;gulf war indication | 
|---|
| 145 | ..S $P(SAR(1,0),"^",5)="~"_$P($P(SAR(1,0),"^",5),"~",2) | 
|---|
| 146 | ..N SS F SS=2,3 D | 
|---|
| 147 | ...S $P(SAR(SS,0),"^",5)="" | 
|---|
| 148 | ..I $E($P(SAR(2,0),"^",4))'="Y" S $P(SAR(2,0),"^",4)="N~" | 
|---|
| 149 | ..I $E($P(SAR(3,0),"^",4))'="Y" S $P(SAR(3,0),"^",4)="N" | 
|---|
| 150 | ..N SDD F SDD=1,2,3 S @HL7XMIT@(CURLINE)=SAR(SDD,0) S CURLINE=CURLINE+1 | 
|---|
| 151 | ..;file MSGID into 409.69 separately as batch # and ID # | 
|---|
| 152 | ..N DIE,DA D | 
|---|
| 153 | ...S DIE="^SDWL(409.6,"_RUNID_",1,",DA(1)=RUNID | 
|---|
| 154 | ...S DA=$O(^SDWL(409.6,"AC",DFN,SDADT,RUNID,"")) D | 
|---|
| 155 | ....I $P(^SDWL(409.6,RUNID,1,DA,0),"^",3)'="" S DA=$O(^SDWL(409.6,"AC",DFN,SDADT,RUNID,DA)) | 
|---|
| 156 | ...S DR="2///"_+MSGID_";3///"_$P(MSGID,"-",2) D ^DIE | 
|---|
| 157 | D GENERATE^HLMA("SD-PAIT-EVENT","GB",1,.HLRESLT,HLMTIEN,.HLP) K @HL7XMIT | 
|---|
| 158 | N DA,DIE,DR S DA=RUNID,DIE=409.6,DR="1.1///"_+$G(MSGID) D ^DIE | 
|---|
| 159 | S SDMCID=+$G(SDMCID) | 
|---|
| 160 | ;file message control ID # and batch control ID number | 
|---|
| 161 | N DIC,DA,X,Y D | 
|---|
| 162 | .S DIC="^SDWL(409.6,"_RUNID_",2,",DA(1)=RUNID,DIC("P")=409.7,DIC(0)="X" | 
|---|
| 163 | .S SDBCID=+$G(HLRESLT) | 
|---|
| 164 | .K DO S X=+$G(SDBCID) D FILE^DICN | 
|---|
| 165 | .S DA=+Y,DIE=DIC,DR=".02///"_+$G(SDDT)_";.03///"_+$G(SDA) D ^DIE | 
|---|
| 166 | Q | 
|---|