| 1 | RAHLBKVR ;HIRMFO/GJC-Bridge, Kurzweil compatible to HL7 v1.5 ;12/31/97  12:05
 | 
|---|
| 2 |  ;;5.0;Radiology/Nuclear Medicine;;Mar 16, 1998
 | 
|---|
| 3 | EN1 ; Build the ^TMP("RARPT-REC" global when we
 | 
|---|
| 4 |  ; receive the message from HL7.
 | 
|---|
| 5 |  ; HLDA-ien of the record in ^HL(772, should be defined.
 | 
|---|
| 6 |  K ^TMP("RARPT-REC",$J) S RASUB=HLDA
 | 
|---|
| 7 |  I '$G(HLDUZ) S RAERR="Invalid Access Code" D XIT Q
 | 
|---|
| 8 |  S ^TMP("RARPT-REC",$J,RASUB,"RADATE")=$$DT^XLFDT()
 | 
|---|
| 9 |  S ^TMP("RARPT-REC",$J,RASUB,"VENDOR")="KURZWEIL"
 | 
|---|
| 10 |  ;If OBR-32 exists use it as verifying phys even if HLDUZ has resident
 | 
|---|
| 11 |  ;  or staff classif
 | 
|---|
| 12 |  S CNT=2,SEGMNT=$G(^HL(772,RASUB,"IN",CNT,0))
 | 
|---|
| 13 | PID ; Pick data off the 'PID' segment.
 | 
|---|
| 14 |  I $P(SEGMNT,HLFS)="PID" D
 | 
|---|
| 15 |  . S SEGMNT=$P(SEGMNT,HLFS,2,99999)
 | 
|---|
| 16 |  . I $P($P(SEGMNT,HLFS,3),$E(HLECH))]"" D
 | 
|---|
| 17 |  .. S ^TMP("RARPT-REC",$J,RASUB,"RADFN")=$P($P(SEGMNT,HLFS,3),$E(HLECH))
 | 
|---|
| 18 |  .. Q
 | 
|---|
| 19 |  . I $P(SEGMNT,HLFS,19)]"" D
 | 
|---|
| 20 |  .. S ^TMP("RARPT-REC",$J,RASUB,"RASSN")=$P(SEGMNT,HLFS,19)
 | 
|---|
| 21 |  .. Q
 | 
|---|
| 22 |  . Q
 | 
|---|
| 23 |  E  S RAERR="Missing PID segment" D XIT Q
 | 
|---|
| 24 |  ; Save off E-Sig information (if it exists)
 | 
|---|
| 25 |  S:$D(HLESIG) ^TMP("RARPT-REC",$J,RASUB,"RAESIG")=HLESIG
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 | OBR ; Pick data off the 'OBR' segment.
 | 
|---|
| 28 |  K SEGMNT F  S CNT=$O(^HL(772,RASUB,"IN",CNT)) Q:CNT=""  S SEGMNT=$G(^(CNT,0)) Q:$P(SEGMNT,HLFS)="OBR"  ; find the 'OBR' segment
 | 
|---|
| 29 |  I $P($G(SEGMNT),HLFS)'="OBR" S RAERR="Missing OBR segment" D XIT Q
 | 
|---|
| 30 |  S SEGMNT=$P(SEGMNT,HLFS,2,99999)
 | 
|---|
| 31 |  I $P(SEGMNT,HLFS,4)]"" D
 | 
|---|
| 32 |  . N RADTCN S RADTCN=$P(SEGMNT,HLFS,4)
 | 
|---|
| 33 |  . S:$P($P(RADTCN,$E(HLECH)),"-")]"" ^TMP("RARPT-REC",$J,RASUB,"RADTI")=$P($P(RADTCN,$E(HLECH)),"-")
 | 
|---|
| 34 |  . S:$P($P(RADTCN,$E(HLECH)),"-",2)]"" ^TMP("RARPT-REC",$J,RASUB,"RACNI")=$P($P(RADTCN,$E(HLECH)),"-",2)
 | 
|---|
| 35 |  . S:$P(RADTCN,$E(HLECH),2)]"" ^TMP("RARPT-REC",$J,RASUB,"RALONGCN")=$P(RADTCN,$E(HLECH),2)
 | 
|---|
| 36 |  . Q
 | 
|---|
| 37 |  ; note: must use $D on hlesig, as it's alphanumeric
 | 
|---|
| 38 |  S ^TMP("RARPT-REC",$J,RASUB,"RASTAT")=$S($D(HLESIG):"V",1:"P")
 | 
|---|
| 39 |  I $P(SEGMNT,HLFS,16)']"" S RAERR="Missing Provider ID" D XIT Q
 | 
|---|
| 40 |  S ^TMP("RARPT-REC",$J,RASUB,"RAVERF")=$S($D(HLESIG):HLDUZ,1:"")
 | 
|---|
| 41 |  S ^TMP("RARPT-REC",$J,RASUB,"RATRANSCRIPT")=$G(HLDUZ)
 | 
|---|
| 42 |  S ^TMP("RARPT-REC",$J,RASUB,"RASTAFF")=$S(+$P(SEGMNT,HLFS,32):+$P(SEGMNT,HLFS,32),1:$G(HLDUZ))
 | 
|---|
| 43 |  S ^TMP("RARPT-REC",$J,RASUB,"RARESIDENT")=$S(+$P(SEGMNT,HLFS,33):+$P(SEGMNT,HLFS,33),1:"")
 | 
|---|
| 44 |  S ^TMP("RARPT-REC",$J,RASUB,"RAWHOCHANGE")=$G(HLDUZ)
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 | OBX ; Pick data off the 'OBX' segments
 | 
|---|
| 47 |  K SEGMNT F  S CNT=$O(^HL(772,RASUB,"IN",CNT)) Q:CNT=""  S SEGMNT=$G(^(CNT,0)) D:$P(SEGMNT,HLFS)="OBX"  Q:$D(RAERR)
 | 
|---|
| 48 |  . S SEGMNT=$P(SEGMNT,HLFS,2,9999)
 | 
|---|
| 49 |  . I $P(SEGMNT,HLFS,3)']"" S RAERR="Missing Observation Identifier" Q
 | 
|---|
| 50 |  . S OBXTYP=$P($P(SEGMNT,HLFS,3),$E(HLECH))
 | 
|---|
| 51 |  . I "IDR"'[OBXTYP S RAERR="Invalid Observation Identifier" Q
 | 
|---|
| 52 |  . D:OBXTYP="I" IMP D:OBXTYP="R" RPT D:OBXTYP="D" DIAG
 | 
|---|
| 53 |  . Q
 | 
|---|
| 54 | XIT ; Clean up environment, quit
 | 
|---|
| 55 |  I $D(^TMP("RARPT-REC",$J,RASUB)),('$D(RAERR)) D EN1^RAHLO
 | 
|---|
| 56 |  K ^TMP("RARPT-REC",$J,RASUB)
 | 
|---|
| 57 |  ; Compile the 'ACK' segment
 | 
|---|
| 58 |  I $D(RAERR) S X1=HLSDATA(1) K HLSDATA S HLSDATA(1)=X1,HLERR=RAERR
 | 
|---|
| 59 |  S HLMTN="ACK",HLSDATA(2)="MSA"_HLFS_$S($D(HLERR):"AE",1:"AA")_HLFS_HLMID_$S($D(HLERR):HLFS_HLERR,1:"")
 | 
|---|
| 60 |  D:$D(HLTRANS) EN1^HLTRANS K CNT,OBXTYPE
 | 
|---|
| 61 |  K RADATE,RADCNT,RADTCN,RAERR,RAESIG,RAICNT,RARCNT,RASUB,RAVERF,SEGMNT
 | 
|---|
| 62 |  K RATRANSC,RAPRIMAR
 | 
|---|
| 63 |  Q
 | 
|---|
| 64 | DIAG ; Save off Diagnostic Code data.
 | 
|---|
| 65 |  S RADCNT=+$G(RADCNT)+1
 | 
|---|
| 66 |  I $P(SEGMNT,HLFS,5)]"" D  ; strip off leading spaces, save Dx code
 | 
|---|
| 67 |  . N DXSTR,X ; DXSTR=Dx code entered by user, X=char pos following space
 | 
|---|
| 68 |  . S DXSTR=$P(SEGMNT,HLFS,5)
 | 
|---|
| 69 |  . F  S X=$F(DXSTR," ") Q:X'=2  S DXSTR=$E(DXSTR,X,999)
 | 
|---|
| 70 |  . S ^TMP("RARPT-REC",$J,RASUB,"RADX",RADCNT)=DXSTR
 | 
|---|
| 71 |  . Q
 | 
|---|
| 72 |  Q
 | 
|---|
| 73 | IMP ; Save off Impression Text data.
 | 
|---|
| 74 |  S RAICNT=+$G(RAICNT)+1
 | 
|---|
| 75 |  S ^TMP("RARPT-REC",$J,RASUB,"RAIMP",RAICNT)=$P(SEGMNT,HLFS,5)
 | 
|---|
| 76 |  Q
 | 
|---|
| 77 | RPT ; Save off Report Text data.
 | 
|---|
| 78 |  S RARCNT=+$G(RARCNT)+1
 | 
|---|
| 79 |  S ^TMP("RARPT-REC",$J,RASUB,"RATXT",RARCNT)=$P(SEGMNT,HLFS,5)
 | 
|---|
| 80 |  Q
 | 
|---|