| 1 | HLERCHK ;SFCIOFO/JC - Interface Debugger ;02/25/2004  14:25
 | 
|---|
| 2 |  ;;1.6;HEALTH LEVEL SEVEN;**57,96,108**;Oct 13, 1995
 | 
|---|
| 3 |  ;This routine requires the following to work:
 | 
|---|
| 4 |  ;EVENT DRIVER PROTOCOL TYPE
 | 
|---|
| 5 |  ;It will report inconsistencies with the event driver, susbscribers,
 | 
|---|
| 6 |  ;applications and logical links (if defined)
 | 
|---|
| 7 |  W !,"This routine searches for HL7 protocols with possible errors."
 | 
|---|
| 8 |  S DIR(0)="FAOU"
 | 
|---|
| 9 |  S DIR("A")="Select an EVENT DRIVER Protocol: "
 | 
|---|
| 10 |  S DIR("B")="All"
 | 
|---|
| 11 |  S DIR("?")="^D DICQ^HLERCHK"
 | 
|---|
| 12 |  D ^DIR
 | 
|---|
| 13 |  K DIC,DA,DR I Y="All" S HLANS=0 G ASKDEV
 | 
|---|
| 14 |  S X=Y S DIC="^ORD(101,",DIC(0)="EMQZ"
 | 
|---|
| 15 |  S DIC("S")="I $P(^(0),U,4)=""E"""
 | 
|---|
| 16 |  D ^DIC
 | 
|---|
| 17 |  Q:$D(DTOUT)!($D(DUOUT))
 | 
|---|
| 18 |  Q:+Y=-1
 | 
|---|
| 19 |  S HLANS=+Y
 | 
|---|
| 20 | ASKDEV ;
 | 
|---|
| 21 |  S %ZIS="MQ"
 | 
|---|
| 22 |  D ^%ZIS
 | 
|---|
| 23 |  G:POP EXIT
 | 
|---|
| 24 |  I $D(IO("Q")) D  G EXIT
 | 
|---|
| 25 |  .S ZTDESC="HL7 Interface Debugger",ZTRTN="EN^HLERCHK",ZTSAVE("*")=""
 | 
|---|
| 26 |  .S ZTDTH=$H D ^%ZTLOAD
 | 
|---|
| 27 |  .D HOME^%ZIS
 | 
|---|
| 28 |  .W !,$S($D(ZTSK):"Queued to task number: "_ZTSK,1:"NOT QUEUED")
 | 
|---|
| 29 | EN ;
 | 
|---|
| 30 |  U IO
 | 
|---|
| 31 |  I $D(ZTQUEUED) S ZTREQ="@"
 | 
|---|
| 32 |  W !,"             ** HL7 INTERFACE DEBUGGER **"
 | 
|---|
| 33 |  S HL57=0 I $D(^ORD(101,"AHL21")) S HL57=1
 | 
|---|
| 34 |  ;patch HL*1.6*96 start: add application ack for HL7 v2.4, and others.
 | 
|---|
| 35 |  S HLACK="ACK,ADR,ARD,EDR,ERP,MCF,MFK,MFR,ORF,ORG,ORR,OSR,RAR,RCI,RCL,"
 | 
|---|
| 36 |  S HLACK=HLACK_"RDR,RDY,RER,RGR,ROR,RRA,RRD,RRE,RRG,RRI,RSP,RTB,SQR,"
 | 
|---|
| 37 |  S HLACK=HLACK_"TBR,VXR,VXX"
 | 
|---|
| 38 |  ;patch HL*1.6*96 end
 | 
|---|
| 39 |  ;patch HL*1.6*108 start: add application ack for HL7 v2.5.
 | 
|---|
| 40 |  S HLACK=HLACK_",BRP,BRT,ORB,ORI"
 | 
|---|
| 41 |  ;patch HL*1.6*108 end
 | 
|---|
| 42 |  I 'HLANS S HLPIEN=0 F  S HLPIEN=$O(^ORD(101,HLPIEN)) Q:HLPIEN<1  D
 | 
|---|
| 43 |  .Q:$P(^ORD(101,HLPIEN,0),U,4)'="E"
 | 
|---|
| 44 |  .D CHKED(HLPIEN)
 | 
|---|
| 45 |  I +HLANS D CHKED(+HLANS)
 | 
|---|
| 46 |  D EXIT
 | 
|---|
| 47 |  Q
 | 
|---|
| 48 | DICQ ;
 | 
|---|
| 49 |  N X,Y,DIC
 | 
|---|
| 50 |  S X="??"
 | 
|---|
| 51 |  S DIC="^ORD(101,",DIC(0)="EQ"
 | 
|---|
| 52 |  S DIC("S")="I $P(^(0),U,4)=""E"""
 | 
|---|
| 53 |  D ^DIC
 | 
|---|
| 54 |  Q
 | 
|---|
| 55 | CHKED(PP) ;Check Event Driver Protocols
 | 
|---|
| 56 |  K ERR,HLPN,HL770,HLVSP,HLVSN,HLSAPP,HLSAPN,HLMTPP,HLMTPN,HLETPP,HLETPN S ERR=0
 | 
|---|
| 57 |  S HLPN=$P($G(^ORD(101,PP,0)),U)
 | 
|---|
| 58 |  I HLPN="" S ERR=ERR+1,ERR(ERR)="Protocol is UNDEFINED." Q
 | 
|---|
| 59 |  I $P(^ORD(101,PP,0),U,3)]"" S ERR=ERR+1,ERR(ERR)="**PROTOCOL DISABLED**" Q
 | 
|---|
| 60 |  S HL770=$G(^ORD(101,PP,770))
 | 
|---|
| 61 |  I HL770="" S ERR=ERR+1,ERR(ERR)="Missing data for all key fields." Q
 | 
|---|
| 62 | VSN ;Version
 | 
|---|
| 63 |  S HLVSP=$P(HL770,U,10)
 | 
|---|
| 64 |  I HLVSP<1 S ERR=ERR+1,ERR(ERR)="Version ID is required."
 | 
|---|
| 65 |  S HLVSN="" I HLVSP S HLVSN=$P($G(^HL(771.5,HLVSP,0)),U)
 | 
|---|
| 66 | APP ;Sending App
 | 
|---|
| 67 |  S HLSAPP=$P(HL770,U),HLSAPN=""
 | 
|---|
| 68 |  I 'HLSAPP S ERR=ERR+1,ERR(ERR)="Missing Required Sending Application."
 | 
|---|
| 69 |  I HLSAPP S HLSAPN=$P($G(^HL(771,HLSAPP,0)),U)
 | 
|---|
| 70 |  I HLSAPP,HLSAPN="" S ERR=ERR+1,ERR(ERR)="Broken pointer to App Param (file 771)."
 | 
|---|
| 71 |  I HLSAPP D CHKAPP(HLSAPP)
 | 
|---|
| 72 | MT ;Message Type
 | 
|---|
| 73 |  S HLMTPP=$P(HL770,U,3),HLMTPN=""
 | 
|---|
| 74 |  I 'HLMTPP S ERR=ERR+1,ERR(ERR)="Missing required Message Type."
 | 
|---|
| 75 |  I HLMTPP S HLMTPN=$P($G(^HL(771.2,HLMTPP,0)),U)
 | 
|---|
| 76 |  I HLMTPP,HLMTPN="" S ERR=ERR+1,ERR(ERR)="Broken pointer to Msg Type (file 771.2)."
 | 
|---|
| 77 |  I HLMTPN]"",HLACK[HLMTPN S ERR=ERR+1,ERR(ERR)="For Event Driver-Message Type cannot be an acknowledgement."
 | 
|---|
| 78 | ET ;Event Type
 | 
|---|
| 79 |  S HLETPP=$P(HL770,U,4),HLETPN=""
 | 
|---|
| 80 |  S HLETPN="" I HLETPP S HLETPN=$P($G(^HL(779.001,HLETPP,0)),U)
 | 
|---|
| 81 |  I HLETPN="" S ERR=ERR+1,ERR(ERR)="Broken pointer to Event Type (file 779.001)."
 | 
|---|
| 82 |  I 'HLETPP,$G(HLVSN)>2.1 S ERR=ERR+1,ERR(ERR)="Event type is required for versions greater than 2.1."
 | 
|---|
| 83 | OUT1 S $P(LINE,"_",75)=""
 | 
|---|
| 84 |  W !,LINE
 | 
|---|
| 85 |  W !,"Event Driver: ",HLPN
 | 
|---|
| 86 |  W !!,"Sending Application: ",HLSAPN
 | 
|---|
| 87 |  W !,"Version: ",$G(HLVSN),"   ","Message Type(770.3): ",$G(HLMTPN),"   ","Event Type: ",$G(HLETPN)
 | 
|---|
| 88 |  W !!,"Event Driver Error Summary:",!
 | 
|---|
| 89 |  I $G(ERR)<1 W !,"No Event Driver Errors Found."
 | 
|---|
| 90 |  I $G(ERR) S N=0 F  S N=$O(ERR(N)) Q:N<1  W !,N,". ",ERR(N)
 | 
|---|
| 91 | SUB ;Check Subscribers
 | 
|---|
| 92 |  S HL770=$G(^ORD(101,PP,770))
 | 
|---|
| 93 |  I HL770="" S ERR=ERR+1,ERR(ERR)="Missing data for all key fields." Q
 | 
|---|
| 94 |  S HLNODE="^ORD(101,PP,10)"
 | 
|---|
| 95 |  I HL57 S HLNODE="^ORD(101,PP,775)"
 | 
|---|
| 96 |  I '$D(@HLNODE) W !,"No Subscribers Found."
 | 
|---|
| 97 |  S HLX=0 F  S HLX=$O(@HLNODE@(HLX)) Q:HLX<1  S HLSUBP=$P(@HLNODE@(HLX,0),U) D CHKSUB(HLSUBP)
 | 
|---|
| 98 |  Q
 | 
|---|
| 99 | CHKSUB(PP) ;Scan Subscribers
 | 
|---|
| 100 |  K ERR,HLPN,HL770,HLVSP,HLVSN,HLRAPP,HLRAPN,HLMTPP,HLMTPN,HLETPP,HLETPN S ERR=0
 | 
|---|
| 101 |  S HLPN=$P($G(^ORD(101,PP,0)),U)
 | 
|---|
| 102 |  I HLPN="" S ERR=ERR+1,ERR(ERR)="Subscriber Protocol is UNDEFINED." Q
 | 
|---|
| 103 |  I $P(^ORD(101,PP,0),U,3)]"" S ERR=ERR+1,ERR(ERR)="**SUBSCRIBER PROTOCOL DISABLED**" Q
 | 
|---|
| 104 |  S HL770=$G(^ORD(101,PP,770))
 | 
|---|
| 105 |  I HL770="" S ERR=ERR+1,ERR(ERR)="Missing data for all key fields." Q
 | 
|---|
| 106 |  S HLRAPP=$P(HL770,U,2),HLRAPN=""
 | 
|---|
| 107 |  I 'HLRAPP S ERR=ERR+1,ERR(ERR)="Missing Required Receiving Application."
 | 
|---|
| 108 |  I HLRAPP S HLRAPN=$P($G(^HL(771,HLRAPP,0)),U)
 | 
|---|
| 109 |  I HLRAPP,HLRAPN="" S ERR=ERR+1,ERR(ERR)="Broken pointer to App Param (file 771)."
 | 
|---|
| 110 |  I HLRAPP D CHKAPP(HLRAPP)
 | 
|---|
| 111 |  S HLMTPN="",HLMTPP=$P(HL770,U,11) I HLMTPP D  ;Response Message Type
 | 
|---|
| 112 |  .I HLMTPP S HLMTPN=$P($G(^HL(771.2,HLMTPP,0)),U)
 | 
|---|
| 113 |  .I HLMTPP,HLMTPN="" S ERR=ERR+1,ERR(ERR)="Broken pointer to Msg Type (file 771.2)."
 | 
|---|
| 114 |  .I HLMTPN]"",HLACK'[HLMTPN S ERR=ERR+1,ERR(ERR)="Message Type must be an appropriate response/acknowledgement."
 | 
|---|
| 115 |  S HLETPP=$P(HL770,U,4),HLETPN=""
 | 
|---|
| 116 |  I HLETPP S HLETPN=$P($G(^HL(779.001,HLETPP,0)),U)
 | 
|---|
| 117 |  I HLETPP,HLETPN="" S ERR=ERR+1,ERR(ERR)="Broken pointer to Event Type (file 779.001)."
 | 
|---|
| 118 |  I $G(^ORD(101,PP,774))=""&($G(^ORD(101,PP,771)))="" S ERR=ERR+1,ERR(ERR)="Missing Processing Routine and Routing Logic."
 | 
|---|
| 119 |  I $G(^ORD(101,PP,774))=""&($P(HL770,U,7))="" S ERR=ERR+1,ERR(ERR)="WARNING-Missing both Logical Link and Routing Logic. Will be local only."
 | 
|---|
| 120 | OUT2 ;Print Subscriber Errors
 | 
|---|
| 121 |  S $P(STAR,"*",40)=""
 | 
|---|
| 122 |  W !,?10,STAR
 | 
|---|
| 123 |  W !,?10,"For Subscriber: ",$G(HLPN)
 | 
|---|
| 124 |  W !!,?10,"Receiving Application: ",$G(HLRAPN)
 | 
|---|
| 125 |  W !,?10,"Message Type (770.11): ",$G(HLMTPN),"   ","Event Type: ",$G(HLETPN),!
 | 
|---|
| 126 |  I 'ERR W !,?10,"No Subscriber Errors Found."
 | 
|---|
| 127 |  F ERR=1:1:ERR W !,?10,ERR,". ",ERR(ERR)
 | 
|---|
| 128 |  Q
 | 
|---|
| 129 | CHKAPP(APP)     ;Check Application parameters
 | 
|---|
| 130 |  Q:'$D(^HL(771,APP))
 | 
|---|
| 131 |  I $P(^HL(771,APP,0),U,2)="I" S ERR=ERR+1,ERR(ERR)="Application is INACTIVE."
 | 
|---|
| 132 |  Q
 | 
|---|
| 133 | EXIT    ;
 | 
|---|
| 134 |  K ZTSK,HL57,HL770,HLACK,HLETPN,HLETPP,HLMTPN,HLMTPP,HLNODE,HLPIEN,HLPN,HLRAPP,HLSAPN,HLSAPP,HLSUBP,HLVSN,HLVSP,HLX,LINE,STAR,SAPP,ERR
 | 
|---|
| 135 |  Q
 | 
|---|