| 1 | DVBCHLR ;ALB/JLU-Processes the results from the ORU ;1/28/93 | 
|---|
| 2 | ;;2.7;AMIE;**9**;Apr 10, 1995 | 
|---|
| 3 | ; | 
|---|
| 4 | BEG D INIT | 
|---|
| 5 | F  D @$S(DVBCX="PID"&'$D(HLERR):"PID",DVBCX="OBR"&'$D(HLERR):"OBR",DVBCX="OBX"&'$D(HLERR):"OBX",1:"ACK") Q:DVBCX="QUIT" | 
|---|
| 6 | D EXIT | 
|---|
| 7 | Q | 
|---|
| 8 | ; | 
|---|
| 9 | EXIT K %,DA,DFN,DIE,DR,DVBC,HLERR,DVBCNT2,DVBCOBR,DVBCOBX,DVBCOBXV,DVBCPAT,DVBCPDFN,DVBCPID,DVBCRPDT,DVBCSAV,DVBCSSN,DVBCUEX,DVBCUEXT,DVBCUNIV,DVBCURQ,DVBCX,DVBCX1,DVBX,VADM,VAERR,DVBCEXAM,DVBCST,DVBCELCT,DVBCUEX1 | 
|---|
| 10 | Q | 
|---|
| 11 | ; | 
|---|
| 12 | INIT ;initializes and checks variables | 
|---|
| 13 | S DVBCX="PID",DVBC=1 | 
|---|
| 14 | I '$D(HLESIG) S HLERR="No Electronic Signature code present, updating cannot be allowed." | 
|---|
| 15 | I $S('$D(HLDUZ):1,HLDUZ']"":1,1:0) S HLERR="Not a valid DHCP user number." | 
|---|
| 16 | Q | 
|---|
| 17 | ; | 
|---|
| 18 | PID ;Brake apart the PID section | 
|---|
| 19 | K HLERR,DVBCPID,DVBCSSN,DVBCPDFN,DVBCPAT,DFN,VAERR,VADM | 
|---|
| 20 | S DVBC=$O(^HL(772,HLDA,"IN",DVBC)) | 
|---|
| 21 | I 'DVBC S HLERR="Missing PID Segment" Q | 
|---|
| 22 | S DVBCPID=^(DVBC,0) ;NAKE FROM ^HL(772,HLDA,IN  PID+2 | 
|---|
| 23 | I $P(DVBCPID,HLFS,1)'="PID" S HLERR="Incorrect PID Segment indicator" Q | 
|---|
| 24 | I $P(DVBCPID,HLFS,4)']"" S HLERR="Internal Patient ID Missing" Q | 
|---|
| 25 | I $P(DVBCPID,HLFS,6)']"" S HLERR="Patient Name Invalid" Q | 
|---|
| 26 | I $P(DVBCPID,HLFS,20)']"" S HLERR="Patient SSN Invalid" Q | 
|---|
| 27 | S DVBCSSN=$P(DVBCPID,HLFS,20) | 
|---|
| 28 | S DVBCPDFN=+$P(DVBCPID,HLFS,4) | 
|---|
| 29 | S DVBCPAT=$$FMNAME^HLFNC($P(DVBCPID,HLFS,6)) | 
|---|
| 30 | S DFN=DVBCPDFN | 
|---|
| 31 | D DEM^VADPT | 
|---|
| 32 | I VAERR S HLERR="Incorrect Patient Identifier" Q | 
|---|
| 33 | I DVBCSSN'=$P(VADM(2),U,1) S HLERR="Invalid SSN" Q | 
|---|
| 34 | S DVBCX="OBR" | 
|---|
| 35 | Q | 
|---|
| 36 | ; | 
|---|
| 37 | OBR ;Parsing the OBR segment. | 
|---|
| 38 | K DVBCOBR,DVBCUNIV | 
|---|
| 39 | F  S DVBC=$O(^HL(772,HLDA,"IN",DVBC)) Q:DVBC=""  S DVBCOBR=^(DVBC,0) Q:$P(DVBCOBR,HLFS,1)="OBR" | 
|---|
| 40 | I DVBC="" S HLERR="Missing OBR Segment" Q | 
|---|
| 41 | I $P(DVBCOBR,HLFS,5)']"" S HLERR="Missing Universal Identifier" Q | 
|---|
| 42 | I $P(DVBCOBR,HLFS,21)']"" S HLERR="Missing Exam Type" Q | 
|---|
| 43 | I $P(DVBCOBR,HLFS,23)']"" S HLERR="Missing Report Date" Q | 
|---|
| 44 | S DVBCUNIV=$P(DVBCOBR,HLFS,5) | 
|---|
| 45 | S DVBCUEXT=$P(DVBCOBR,HLFS,21) | 
|---|
| 46 | S DVBCRPDT=$$FMDATE^HLFNC($P(DVBCOBR,HLFS,23)) | 
|---|
| 47 | S DVBCURQ=$P(DVBCUNIV,$E(HLECH),1) | 
|---|
| 48 | S DVBCUEX=$P(DVBCUNIV,$E(HLECH),2) | 
|---|
| 49 | I '$D(^DVB(396.3,DVBCURQ,0)) S HLERR="Request No longer Exists" Q | 
|---|
| 50 | I "PS"'[$P(^(0),U,18) S HLERR="Status of Request will not allow for down loading" Q  ;NAKED FROM LINE BEFORE | 
|---|
| 51 | I '$D(^DVB(396.4,DVBCUEX,0)) S HLERR="Exam No longer Exists" Q | 
|---|
| 52 | S DVBCUEX1=^DVB(396.4,DVBCUEX,0) | 
|---|
| 53 | I "RXT"[$P(DVBCUEX1,U,4) S HLERR="Exam status not open, no down loading allow* ed" Q | 
|---|
| 54 | D HASH^DVBCHLUT | 
|---|
| 55 | I '$D(DVBCELCT) S HLERR="Bad electronic signature code." Q | 
|---|
| 56 | I $P(DVBCUEX1,U,4)="C",$P(DVBCUEX1,U,10)'=DVBCELCT S HLERR="Electronic signature codes do not match, no down loading allowed" Q | 
|---|
| 57 | S DVBCX="OBX" | 
|---|
| 58 | Q | 
|---|
| 59 | ; | 
|---|
| 60 | OBX ;looping through the OBX segment | 
|---|
| 61 | K DVBCSAV | 
|---|
| 62 | S DVBCNT2=0,DVBCSAV=DVBC | 
|---|
| 63 | I '$$LOCK^DVBCHLUT(DVBCURQ,DVBCUEX) Q | 
|---|
| 64 | D DEL | 
|---|
| 65 | F  S DVBC=$O(^HL(772,HLDA,"IN",DVBC)) S:DVBC="" DVBCX="ACK" Q:DVBC=""  S DVBCOBX=^(DVBC,0) D OBX1 Q:DVBCX'="OBX"  S DVBCSAV=DVBC | 
|---|
| 66 | S DVBC=DVBCSAV | 
|---|
| 67 | I 'DVBCNT2 S HLERR="Invalid OBX Segment" D UNLOCK^DVBCHLUT(DVBCURQ,DVBCUEX) Q | 
|---|
| 68 | I DVBCNT2 D CLOSE | 
|---|
| 69 | D UNLOCK^DVBCHLUT(DVBCURQ,DVBCUEX) | 
|---|
| 70 | Q | 
|---|
| 71 | ; | 
|---|
| 72 | OBX1 ; | 
|---|
| 73 | S DVBCOBXV=$P(DVBCOBX,HLFS,1) | 
|---|
| 74 | I DVBCOBXV="NTE" Q | 
|---|
| 75 | I $S(DVBCOBXV="PID":1,DVBCOBXV="OBR":1,1:0) S DVBCX=DVBCOBXV Q | 
|---|
| 76 | I DVBCOBXV'="OBX" S DVBCX="ACK" Q | 
|---|
| 77 | S DVBCNT2=DVBCNT2+1 | 
|---|
| 78 | S ^DVB(396.4,DVBCUEX,"RES",DVBCNT2,0)=$P(DVBCOBX,HLFS,6) | 
|---|
| 79 | Q | 
|---|
| 80 | ; | 
|---|
| 81 | CLOSE ;sets exam fields and quits | 
|---|
| 82 | D NOW^%DTC | 
|---|
| 83 | S ^DVB(396.4,DVBCUEX,"RES",0)="^^"_DVBCNT2_"^"_DVBCNT2_"^"_% | 
|---|
| 84 | S DIE="^DVB(396.4,",DA=DVBCUEX | 
|---|
| 85 | S DR=".04///C;.06///^S X=DVBCRPDT;.07///^S X=$P(^VA(200,HLDUZ,0),U,1);.1///^S X=DVBCELCT" | 
|---|
| 86 | D ^DIE | 
|---|
| 87 | S DVBCEXAM=^DVB(396.4,DVBCUEX,0) | 
|---|
| 88 | I $P(DVBCEXAM,U,4)'="C"!($P(DVBCEXAM,U,6)']"")!$P(DVBCEXAM,U,7)']"" S HLERR="Results added but request and exam status not updated." Q | 
|---|
| 89 | D COMPL | 
|---|
| 90 | Q | 
|---|
| 91 | ; | 
|---|
| 92 | ACK ;setting up the acknowledgment segment. | 
|---|
| 93 | I $D(HLERR) S DVBCX1=HLSDATA(1) K HLSDATA S HLSDATA(1)=DVBCX1 | 
|---|
| 94 | S HLSDATA(2)="MSA"_HLFS_$S($D(HLERR):"AE",1:"AA")_HLFS_HLMID_HLFS_$S($D(HLERR):HLERR,1:"") | 
|---|
| 95 | S DVBCX="QUIT" | 
|---|
| 96 | I $D(HLTRANS) D EN1^HLTRANS | 
|---|
| 97 | Q | 
|---|
| 98 | ; | 
|---|
| 99 | COMPL ;This subroutine will search the other exams and set the request's | 
|---|
| 100 | ;status to transcribed if able. | 
|---|
| 101 | ;This should become a callable subroutine because ^dvbcedit does the same | 
|---|
| 102 | ; | 
|---|
| 103 | K DVBCOPN | 
|---|
| 104 | F DVBC=0:0 S DVBC=$O(^DVB(396.4,"C",DVBCURQ,DVBC)) Q:'DVBC  S DVBCST=$P(^DVB(396.4,DVBC,0),U,4) I DVBCST="O"!(DVBCST="T") S DVBCOPN=1 Q | 
|---|
| 105 | Q:$D(DVBCOPN) | 
|---|
| 106 | S XMDUZ="Kurzweil" | 
|---|
| 107 | S XMB="DVBA C 2507 EXAM READY" | 
|---|
| 108 | S XMB(1)=DVBCPAT,XMB(2)=DVBCSSN | 
|---|
| 109 | S Y=$P(^DVB(396.3,DVBCURQ,0),U,2) | 
|---|
| 110 | X ^DD("DD") | 
|---|
| 111 | S XMB(3)=Y | 
|---|
| 112 | D ^XMB | 
|---|
| 113 | K XMDUZ,XMB,Y | 
|---|
| 114 | S DIE="^DVB(396.3,",DA=DVBCURQ | 
|---|
| 115 | S DR="11///NOW;17////T" | 
|---|
| 116 | D ^DIE | 
|---|
| 117 | I $P(^DVB(396.3,DVBCURQ,0),U,12)']""!($P(^(0),U,18)'="T") S HLERR="Results added and exam status updated but request status not updated." | 
|---|
| 118 | Q | 
|---|
| 119 | ; | 
|---|
| 120 | DEL ;to delete the results from an exam if it is being resent. | 
|---|
| 121 | I $P(DVBCUEX1,U,10)]"" K ^DVB(396.4,DVBCUEX,"RES") | 
|---|
| 122 | Q | 
|---|