%PDF- %PDF-
| Direktori : /data/old/usr/share/perl5/vendor_perl/Net/HL7/Messages/ |
| Current File : //data/old/usr/share/perl5/vendor_perl/Net/HL7/Messages/ACK.pm |
################################################################################
#
# File : ACK.pm
# Author : Duco Dokter
# Created : Wed Mar 26 22:40:19 2003
# Version : $Id: ACK.pm,v 1.7 2004/02/10 14:31:54 wyldebeast Exp $
# Copyright : Wyldebeast & Wunderliebe
#
################################################################################
package Net::HL7::Messages::ACK;
use strict;
use warnings;
use Net::HL7::Message;
use base qw(Net::HL7::Message);
=pod
=head1 NAME
Net::HL7::Messages::ACK
=head1 SYNOPSIS
$ack = new Net::HL7::Messages::ACK($request);
=head1 DESCRIPTION
Convenience module implementing an acknowledgement (ACK) message. This
can be used in HL7 servers to create an acknowledgement for an
incoming message.
=head1 METHODS
=cut
sub _init {
my ($self, $req) = @_;
$self->SUPER::_init();
my ($reqMsh, $msh);
$req && ($reqMsh = $req->getSegmentByIndex(0));
if ($reqMsh) {
my @flds = $req->getSegmentByIndex(0)->getFields(1);
$msh = new Net::HL7::Segments::MSH(\@flds);
}
else {
$msh = new Net::HL7::Segments::MSH();
}
my $msa = new Net::HL7::Segment("MSA");
# Determine acknowledge mode: normal or enhanced
#
if ($reqMsh && ($reqMsh->getField(15) || $reqMsh->getField(16))) {
$self->{ACK_TYPE} = "E";
$msa->setField(1, "CA");
}
else {
$self->{ACK_TYPE} = "N";
$msa->setField(1, "AA");
}
$self->addSegment($msh);
$self->addSegment($msa);
$msh->setField(9, "ACK");
# Construct an ACK based on the request
if ($req) {
$reqMsh || last;
$msh->setField(3, $reqMsh->getField(5));
$msh->setField(4, $reqMsh->getField(6));
$msh->setField(5, $reqMsh->getField(3));
$msh->setField(6, $reqMsh->getField(4));
$msa->setField(2, $reqMsh->getField(10));
}
return 1;
}
=pod
=over 4
=item B<setAckCode($code, [$msg])>
Set the acknowledgement code for the acknowledgement. Code should be
one of: A, E, R. Codes can be prepended with C or A, denoting enhanced
or normal acknowledge mode. This denotes: accept, general error and
reject respectively. The ACK module will determine the right answer
mode (normal or enhanced) based upon the request, if not provided.
The message provided in $msg will be set in MSA 3.
=cut
sub setAckCode {
my ($self, $code, $msg) = @_;
my $mode = "A";
# Determine acknowledge mode: normal or enhanced
#
if ($self->{ACK_TYPE} eq "E") {
$mode = "C";
}
if (length($code) == 1) {
$code = "$mode$code";
}
$self->getSegmentByIndex(1)->setField(1, $code);
$msg && $self->getSegmentByIndex(1)->setField(3, $msg);
}
=pod
=item B<setErrorMessage($errMsg)>
Set the error message for the acknowledgement. This will also set the
error code to either AE or CE, depending on the mode of the incoming
message.
=cut
sub setErrorMessage {
my ($self, $msg) = @_;
$self->setAckCode("E", $msg);
}
=pod
=back
=head1 AUTHOR
D.A.Dokter <dokter@wyldebeast-wunderliebe.com>
=head1 LICENSE
Copyright (c) 2002 D.A.Dokter. All rights reserved. This program is
free software; you can redistribute it and/or modify it under the same
terms as Perl itself.
=cut
1;