| 1 | MCARAM ;WASH ISC/JKL-MUSE AUTO INSTRUMENT DATA LOAD INTO DHCP ;5/28/96  14:53
 | 
|---|
| 2 |  ;;2.3;Medicine;;09/13/1996
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | START ; Driver for MUSE-run by task manager
 | 
|---|
| 6 |  ; WHERE: LANM,TSK,MCINST,T are required for MCARASE
 | 
|---|
| 7 |  ; LANM = routine name, T and TSK = auto instrument IEN,
 | 
|---|
| 8 |  ; MCINST = auto instrument name
 | 
|---|
| 9 |  ; MCL = data type line number,  MCLT = data transmission line number
 | 
|---|
| 10 |  ; MCD = one line of lab data, MCA = array of local data,
 | 
|---|
| 11 |  ; MCE = internal record number of EKG file where data is stored
 | 
|---|
| 12 |  ; MCRD = attempts to read lab data
 | 
|---|
| 13 |  ; MCCD= current data transmission number
 | 
|---|
| 14 |  ; MCPRO= EKG procedure number from Procedure/Subspecialty file
 | 
|---|
| 15 |  N LANM,TSK,MCINST,T,MCL,MCLT,MCA,MCCD,MCCNT,MCE,MCERR,MCRD,MCPRO,MCPRNM
 | 
|---|
| 16 |  N MCS,MCTOT,MCTYPE,MCZ,MCREC
 | 
|---|
| 17 |  S LANM=$T(+0),TSK=$O(^LAB(62.4,"C",LANM,0)),U="^" I TSK="" Q
 | 
|---|
| 18 |  ; Quit if no MUSE data
 | 
|---|
| 19 |  I '$D(^LA(TSK,"I",0)) Q
 | 
|---|
| 20 |  S MCINST=$P(^LAB(62.4,TSK,0),U) D ^MCARASE I 'TSK Q
 | 
|---|
| 21 |  S @TRAP
 | 
|---|
| 22 |  ;initial error condition
 | 
|---|
| 23 |  S MCA("ERR")=0
 | 
|---|
| 24 |  ;get EKG procedure number from Procedure/Subspecialty file
 | 
|---|
| 25 |  S MCPRO=$O(^MCAR(697.2,"C","MCAR(691.5",0))
 | 
|---|
| 26 |  ;print name for ECG procedure, type of transmission
 | 
|---|
| 27 |  S MCPRNM=$$ORPRM(MCPRO),MCTYPE="M"
 | 
|---|
| 28 |  ;delay process until record data is complete
 | 
|---|
| 29 |  D DELPRO
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 | READ S MCRD=0,MCL=0,MCCD=-1,MCA("CONT")="@"
 | 
|---|
| 32 |  I ^LA(TSK,"I",0)'=0 S MCLT=^LA(TSK,"I",0)+1,MCCD=MCLT-1
 | 
|---|
| 33 |  D IN G QUIT
 | 
|---|
| 34 | IN S MCLT=^LA(TSK,"I",0)+1 I '$D(^(MCLT)) S MCRD=MCRD+1 Q:MCRD>6  H 8 G IN
 | 
|---|
| 35 |  S ^LA(TSK,"I",0)=MCLT,MCRD=0,MCERR=0
 | 
|---|
| 36 |  I '$D(MCREC) F MCZ=1:1 D:'$D(^LA(TSK,"I",MCLT+MCZ)) DELPRO I ($D(^LA(TSK,"I",MCLT+MCZ))#2),((^LA(TSK,"I",MCLT+MCZ)["EOR")!(^LA(TSK,"I",MCLT+MCZ)["ERR")!(^LA(TSK,"I",MCLT+MCZ)["BYE")) S MCREC="" Q
 | 
|---|
| 37 |  I '$D(MCA("ERR")) S MCA("ERR")=0
 | 
|---|
| 38 |  ;ignore set if retransmit set of data lines
 | 
|---|
| 39 |  I $D(^LA(TSK,"I",MCLT+3)),^LA(TSK,"I",MCLT+3)=^LA(TSK,"I",MCLT),^LA(TSK,"I",MCLT)?.E1.A.E S MCCD=MCCD+3,^LA(TSK,"I",0)=MCLT+2 G IN
 | 
|---|
| 40 |  ;check for start of transmission-suppressed H
 | 
|---|
| 41 |  I $E(^LA(TSK,"I",MCLT),1,5)="HELLO" S MCCD=MCLT-3
 | 
|---|
| 42 |  ;check for start of transmission-IRM
 | 
|---|
| 43 |  I $E(^LA(TSK,"I",MCLT),1,3)="IRM" S MCCD=MCLT-3
 | 
|---|
| 44 |  ;transfer one line of lab data to local array
 | 
|---|
| 45 |  I MCCD+3=MCLT S MCERR=$$RLAB^MCARAM(.MCA,.MCL,MCLT)
 | 
|---|
| 46 |  ;transmission error
 | 
|---|
| 47 |  I +MCERR=5 K MCA,MCERR,MCREC N MCA,MCERR G IN
 | 
|---|
| 48 |  ;transfer local array data into DHCP
 | 
|---|
| 49 |  ;record successful or unsuccessful data transfer attempt
 | 
|---|
| 50 |  I +MCERR=10 S:$$GRERR^MCARAM7(.MCA)=0 MCERR=$$LDHCP^MCARAM3(.MCA,.MCE) S MCERR=$$KPERR^MCARAM7(.MCA,.MCS) K MCA,MCERR,MCE,MCS,MCREC N MCA,MCERR,MCE,MCS
 | 
|---|
| 51 |  G IN
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 | DELPRO ;delay process until record data is complete
 | 
|---|
| 54 |  S MCCNT=0
 | 
|---|
| 55 | DELP I $D(^LA(TSK,"I")) S MCTOT=^LA(TSK,"I"),MCCNT=MCCNT+1 H 15 I MCTOT=^LA(TSK,"I"),MCCNT<7 G DELP
 | 
|---|
| 56 |  K MCTOT,MCCNT
 | 
|---|
| 57 |  Q
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 |  ;
 | 
|---|
| 60 | OUT S MCLT=^LA(TSK,"O")+1,^("O")=MCLT,^("O",MCLT)=OUT
 | 
|---|
| 61 |  L +^LA("Q") S Q=^LA("Q")+1,^("Q")=Q,^("Q",Q)=TSK L -^LA("Q") Q
 | 
|---|
| 62 |  Q
 | 
|---|
| 63 |  ;
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 | RLAB(MCA,MCL,MCLT) ; Read Lab data and place in local array
 | 
|---|
| 66 |  ; USAGE: S X=$$RLAB^MCARAM(.A,.B,C)
 | 
|---|
| 67 |  ; WHERE: .A=Array into which data is placed
 | 
|---|
| 68 |  ;        .B=Data type line number
 | 
|---|
| 69 |  ;         C=Data transmission line number
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 |  ;lab data
 | 
|---|
| 72 |  S MCD=^LA(TSK,"I",MCLT)
 | 
|---|
| 73 |  I ($E(MCD,1,5)="HELLO")!($E(MCD,1,3)="EOT") S MCL=0,MCA("CONT")="@",MCCD=MCLT-1 Q 0
 | 
|---|
| 74 |  I $E(MCD,1,3)="BYE" S MCL=0,MCA("CONT")="@",MCCD=MCLT-2 Q 0
 | 
|---|
| 75 |  I $E(MCD,1,3)="IRM" S MCL=0,MCA("CONT")="@",MCCD=MCLT Q 0
 | 
|---|
| 76 |  I $E(MCD,1,3)="EOR" S MCERR="10-End of record" S MCCD=MCLT Q MCERR
 | 
|---|
| 77 |  I $E(MCD,1,3)="ERR" S MCERR="5-Transmission error-expect retry of record" S MCL=0,MCA("CONT")="@",MCCD=MCLT-1 Q MCERR
 | 
|---|
| 78 |  S MCL=MCL+1,MCA("CONT")=$C($A(MCA("CONT"))+1)
 | 
|---|
| 79 |  ;transfer lab data to local
 | 
|---|
| 80 |  I MCL<13 S MCTR=$S(MCL<7:"S MCERR=$$L"_MCL_"^MCARAM1(.MCA,MCD)",MCL=12:"S MCERR=$$L"_MCL_"^MCARAM3(.MCA,MCD)",MCL>6:"S MCERR=$$L"_MCL_"^MCARAM2(.MCA,MCD)") X MCTR S MCCD=MCLT Q:+MCERR>0 MCERR  Q 0
 | 
|---|
| 81 |  ;fill diagnosis array
 | 
|---|
| 82 |  I MCL>12 S MCERR=$$DGCT^MCARAM4(.MCA,MCD,MCL),MCCD=MCLT I +MCERR>0 Q MCERR
 | 
|---|
| 83 |  Q 0
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 | TRAP ;entry from MCARASE
 | 
|---|
| 86 |  K ^LA("LOCK",TSK) S T=TSK D SET^MCARASE
 | 
|---|
| 87 |  S ^LA(TSK,"Q")=0 D ERROR^MCARASE
 | 
|---|
| 88 |  G @(U_LANM)
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 | ORPRM(MCPRO) ;Get print name for ECG procedure
 | 
|---|
| 91 |  ;USAGE: S X=$$ORPRM(MCPRO)
 | 
|---|
| 92 |  ;WHERE: X = print name for ECG procedure/subspecialty
 | 
|---|
| 93 |  ;       MCPRO = EKG procedure number from Procedure/Subspecialty file
 | 
|---|
| 94 |  I '$D(MCOEON) D ORDER^MCPARAM I '$D(MCOEON) Q ""
 | 
|---|
| 95 |  Q $P(^MCAR(697.2,MCPRO,0),U,8)
 | 
|---|
| 96 |  ; 
 | 
|---|
| 97 | HSHAKE ; MUSE dialog, called by LAB which executes HANDSHAKE fld of AI file
 | 
|---|
| 98 |  ; Does checksum on MUSE input, sets OUT to ACK or NAK
 | 
|---|
| 99 |  I IN="BYE" S OUT="" K MCSM Q
 | 
|---|
| 100 |  I IN="HELLO" S T=T-BASE,OUT="ACK" K MCSM
 | 
|---|
| 101 |  I IN?.E1.A.E N MCI S MCSM=0 F MCI=1:1:$L(IN) S MCSM=MCSM+$A(IN,MCI)
 | 
|---|
| 102 |  I IN?1.5N,$D(MCSM) S T=T-BASE S:MCSM'=IN OUT="NAK" S:MCSM=IN OUT="ACK" K MCSM
 | 
|---|
| 103 |  K MCI Q
 | 
|---|
| 104 | QUIT L +^LA(TSK) H 1
 | 
|---|
| 105 |  K ^LA(TSK)
 | 
|---|
| 106 |  L -^LA(TSK)
 | 
|---|
| 107 |  K ^LA("LOCK",TSK)
 | 
|---|
| 108 |  D DQ^%ZTLOAD
 | 
|---|
| 109 |  S:$D(ZTQUEUED) ZTREQ="@" K ZTSK
 | 
|---|
| 110 |  Q
 | 
|---|