| 1 | SRCHL7A ;BIR/SJA - RECEIVE HL-7 CONSULTS MESSAGE, PARSE INTO COMPONENTS AND CALL PFSS GET ACCOUNT API ;12/17/04  05:10 PM
 | 
|---|
| 2 |  ;;3.0; Surgery ;**144**;24 Jun 93
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; Reference to $$GETACCT^IBBAPI() is supported by DBIA #4664
 | 
|---|
| 5 |  ; Reference to ^GMR(123.5 is supported by DBIA #3861
 | 
|---|
| 6 |  ; Reference to ^DIC(40.7 is supported by DBIA #557
 | 
|---|
| 7 |  ; Reference to ^DG(40.8 is supported by DBIA #2817
 | 
|---|
| 8 |  Q
 | 
|---|
| 9 | ORC(SRCORC) ;Get fields from ORC segment.
 | 
|---|
| 10 |  ;SRCTRLC=ORC control code
 | 
|---|
| 11 |  ;SRCORNP=provider
 | 
|---|
| 12 |  I $E(SRCMSG,1,6)'="ORC|NW" S SRCQT=1 Q
 | 
|---|
| 13 |  S SRCTRLC=$P(SRCORC,"|",2)
 | 
|---|
| 14 |  S SRCORNP=$P(SRCORC,"|",13)
 | 
|---|
| 15 |  S SRCODT=$P(SRCORC,"|",16)
 | 
|---|
| 16 |  Q
 | 
|---|
| 17 | OBR(SRCOBR) ;Get fields from OBR segment.
 | 
|---|
| 18 |  ;SRCSS=type of consult, field 9, 1-4 if NO, then not surgery
 | 
|---|
| 19 |  ;Must have 99CON in SRC99C.
 | 
|---|
| 20 |  ;SRCODT=observation date/time
 | 
|---|
| 21 |  S SRC99C=$P($P(SRCOBR,"|",5),"^",6)
 | 
|---|
| 22 |  I SRC99C'="99CON" S SRCSS="NO",SRCQT=1 Q
 | 
|---|
| 23 |  S SRCSST=$P($P(SRCOBR,"|",5),"^",4)
 | 
|---|
| 24 |  S SRCSS=$$GET1^DIQ(123.5,SRCSST,.01) D
 | 
|---|
| 25 |  .I SRCSS["SURGERY REQUEST" S SRCSS=1 Q
 | 
|---|
| 26 |  .;then not surgery
 | 
|---|
| 27 |  .S SRCSS="NO"
 | 
|---|
| 28 |  I SRCSS="NO" S SRCQT=1 Q
 | 
|---|
| 29 |  S SRCODT=$P(SRCOBR,"|",7)
 | 
|---|
| 30 |  I SRCODT]"" S SRCODT=$$FMDATE^SRCHL7U(SRCODT)
 | 
|---|
| 31 |  S SRCATN=$P(SRCOBR,"|",20)
 | 
|---|
| 32 |  S SRCSTDT=$P(SRCOBR,"|",23)
 | 
|---|
| 33 |  I SRCSTDT]"" S SRCSTDT=$$FMDATE^SRCHL7U(SRCSTDT)
 | 
|---|
| 34 |  S SRCINTR=$P(SRCOBR,"|",33)
 | 
|---|
| 35 |  Q
 | 
|---|
| 36 | ZSV(SRCZSV) ;Get service from ZSV segment
 | 
|---|
| 37 |  S SRCZSS=$P($P(SRCZSV,"|",2),"^",4)
 | 
|---|
| 38 |  ;Set the service if ZSV provided
 | 
|---|
| 39 |  I $L($P(SRCZSV,"|",3)) S SRCOTXT=$P(SRCZSV,"|",3) ;consult type
 | 
|---|
| 40 |  Q
 | 
|---|
| 41 | OBX(SRCOBX) ;Get fields from OBX segment and set into SRC variables
 | 
|---|
| 42 |  ;SRCOID=observation id identifying value in seg. 5
 | 
|---|
| 43 |  ;free text or code^free text^I9C
 | 
|---|
| 44 |  S SRCMSG=MSG(SRCOBX)
 | 
|---|
| 45 |  S SRCOID=$P($P(SRCMSG,"|",4),"^",2)
 | 
|---|
| 46 |  I SRCOID="REASON FOR REQUEST" D
 | 
|---|
| 47 |  .S LN=0 F  S LN=$O(MSG(SRCOBX,LN)) Q:LN=""  S SRCRF(LN+1)=$G(MSG(SRCOBX,LN)),SRCRFL=SRCRF(LN+1),SRCRF=$$UP^XLFSTR($G(SRCRF(LN+1))) D
 | 
|---|
| 48 |  ..I SRCRF["DATE OF OPERATION:" S (SRDOP,X)=$P(SRCRFL,": ",2),%DT="XT" D ^%DT S:Y>0 SRCPV2(8)=Y I Y'>0 D NOW^%DTC S SRCPV2(8)=X Q
 | 
|---|
| 49 |  ..I $P(SRCRF,":")="SURGEON" S SRCPV1(17)=$$FN($P(SRCRFL,": ",2)) Q
 | 
|---|
| 50 |  ..I SRCRF["ATTENDING SURGEON:" S SRCPV1(7)=$$FN($P(SRCRFL,": ",2)) Q
 | 
|---|
| 51 |  ..I SRCRF["SURGICAL SPECIALTY:" S SRX=$O(^SRO(137.45,"B1",$P(SRCRFL,": ",2),0)) Q
 | 
|---|
| 52 |  ..I SRCRF["PRINCIPAL PREOPERATIVE DIAGNOSIS:" D
 | 
|---|
| 53 |  ...S II=LN F  S II=$O(MSG(SRCOBX,II)) Q:MSG(SRCOBX,II)=""!($L(SRCRF)>70)  S SRCRFL=SRCRFL_" "_$G(MSG(SRCOBX,II))
 | 
|---|
| 54 |  ...S SRCDG1(1,4)=$E($P(SRCRFL,": ",2),1,40) Q
 | 
|---|
| 55 |  ..I SRCRF["PRINCIPAL OPERATIVE PROCEDURE:" D
 | 
|---|
| 56 |  ...S II=LN F  S II=$O(MSG(SRCOBX,II)) Q:MSG(SRCOBX,II)=""!($L(SRCRF)>90)  S SRCRFL=SRCRFL_" "_$G(MSG(SRCOBX,II))
 | 
|---|
| 57 |  ...S SRCPR1(4)=$E($P(SRCRFL,": ",2),1,60) Q
 | 
|---|
| 58 |  S SRCPV1(18)=$O(^DIC(40.7,"C",429,0)) I SRX S SRCSURG(2)=$P($G(^SRO(137.45,SRX,0)),"^",2),SRCPV1(3)=$P($G(^SRO(137.45,SRX,0)),"^",5)
 | 
|---|
| 59 |  S SRCPV1(2)="O"
 | 
|---|
| 60 |  Q
 | 
|---|
| 61 | EN(MSG) ;Entry point from protocol SR RECEIVE
 | 
|---|
| 62 |  Q:'+$$SWSTAT^IBBAPI()
 | 
|---|
| 63 |  ;MSG = local array which contains the HL7 segments
 | 
|---|
| 64 |  N LN,SRC99C,SRCARFN,SRCATN,SRCDG1,SRCDIV,SRCINTR,SRCMSG,SRCNOD
 | 
|---|
| 65 |  N SRCOBR,SRCOBX,SRCODT,SRCOID,SRCORNP,SRCOTXT,SRCPNM,SRCPR1,SRCPV2,SRCQT
 | 
|---|
| 66 |  N SRCRATSN,SRCRB,SRCRF,SRCRFL,SRCSEND,SRCSS,SRCSST,SRCSTDT,SRCSURG,SRX
 | 
|---|
| 67 |  N SRCTRLC,SRCZSS,SRDFN,SRDOP,Y
 | 
|---|
| 68 |  S SRCMSG="",SRCNOD=0,SRCPV2(8)=0,(SRCPV1(7),SRCPV1(17),SRCSURG(2),SRCDG1(1,4),SRCPR1(4))=""
 | 
|---|
| 69 |  F  S SRCNOD=$O(MSG(SRCNOD)) Q:SRCNOD=""  S SRCMSG=$G(MSG(SRCNOD)) I $E(SRCMSG,1,3)="MSH" D  Q
 | 
|---|
| 70 |  .S SRCSEND=$P(SRCMSG,"|",3),SRCDIV=$O(^DG(40.8,"AD",$P(SRCMSG,"|",4),0))
 | 
|---|
| 71 |  ;SRCQT, stop flag in loop
 | 
|---|
| 72 |  S SRCMSG="",SRCNOD=0,SRCQT=0
 | 
|---|
| 73 |  F  S SRCNOD=$O(MSG(SRCNOD)) Q:SRCNOD=""  Q:SRCQT=1  S SRCMSG=$G(MSG(SRCNOD)) D
 | 
|---|
| 74 |  .I $E(SRCMSG,1,3)="PID" D PID^SRCHL7U(SRCMSG) Q
 | 
|---|
| 75 |  .;look at ORC|NW for new order
 | 
|---|
| 76 |  .I $E(SRCMSG,1,3)="ORC" D ORC(SRCMSG) Q
 | 
|---|
| 77 |  .I SRCQT=1 Q
 | 
|---|
| 78 |  .I $E(SRCMSG,1,3)="OBR" D OBR(SRCMSG) I SRCSS="NO" S SRCQT=1 Q
 | 
|---|
| 79 |  .I SRCQT=1 Q
 | 
|---|
| 80 |  .;look at ZSV for surgery (4)
 | 
|---|
| 81 |  .I $E(SRCMSG,1,3)="ZSV" D ZSV(SRCMSG) Q
 | 
|---|
| 82 |  .I $E(SRCMSG,1,3)="OBX" D OBX(SRCNOD) Q
 | 
|---|
| 83 |  I SRCSS="NO" Q  ;not surgery request
 | 
|---|
| 84 |  I SRCPV2(8)'>0!(SRCSURG(2)="")!(SRCDG1(1,4)="")!(SRCPR1(4)="") D REJECT^SRCHL7U Q
 | 
|---|
| 85 |  ;check for new order, NW, and a surgery consult in SRCSS
 | 
|---|
| 86 |  I '$D(SRCTRLC)!(SRCTRLC'="NW")!('$D(SRCSS))!(SRCSS="NO") D EXIT^SRCHL7U Q
 | 
|---|
| 87 | ACCT S SRCARFN=+$$GETACCT^IBBAPI(SRDFN,"","A05","ACCT;SRCHL7A",.SRCPV1,.SRCPV2,.SRCPR1,.SRCDG1,"",SRCDIV,"",.SRCSURG)
 | 
|---|
| 88 |  I '$G(SRCARFN) D REJECT^SRCHL7U Q
 | 
|---|
| 89 |  D EXIT^SRCHL7U
 | 
|---|
| 90 |  Q
 | 
|---|
| 91 | FN(X) ;Return New Person Code give Name from HL-7 segment
 | 
|---|
| 92 |  I X["(" Q +$P(X,"(",2)
 | 
|---|
| 93 |  K DIC S DIC="^VA(200,",DIC(0)="XM" D ^DIC K DIC
 | 
|---|
| 94 |  Q $S(Y'=-1:+Y,1:"")
 | 
|---|