/** * Send en event * * @param CHPrimSanteEvent $evenement evenement * @param CMbObject $mbObject object * * @return null|String * @throws CMbException */ function sendEvent($evenement, CMbObject $mbObject) { $evenement->_receiver = $this; $this->loadConfigValues(); $evenement->build($mbObject); if (!($msg = $evenement->flatten())) { return null; } /** @var CExchangeHprimSante $exchange */ $exchange = $evenement->_exchange_hpr; if (!$exchange->message_valide) { return null; } if (!$this->synchronous) { return null; } $source = CExchangeSource::get("{$this->_guid}-{$evenement->type}"); if (!$source->_id || !$source->active) { return null; } $source->setData($msg, null, $exchange); try { $source->send(); } catch (Exception $e) { throw new CMbException("CExchangeSource-no-response"); } $exchange->date_echange = CMbDT::dateTime(); $ack_data = $source->getACQ(); if (!$ack_data) { $exchange->store(); return null; } /** @var CHPrimSanteEvent $data_format */ $data_format = CHPrimSante::getEvent($exchange); $ack = new CHPrimSanteAcknowledgment($data_format); $ack->handle($ack_data); $exchange->date_echange = CMbDT::dateTime(); $exchange->statut_acquittement = $ack->getStatutAcknowledgment(); $exchange->acquittement_valide = $ack->message->isOK(CHL7v2Error::E_ERROR) ? 1 : 0; $exchange->_acquittement = $ack_data; $exchange->store(); return $ack_data; }
/** * @see parent::build() */ function build($object) { parent::build($object); if ($object instanceof CPatient) { $patient = $object; } else { $patient = $object->loadRefPatient(); } $this->addP($patient); $this->addL(); }
/** * @see parent::build() */ function build($object) { parent::build($object); /* @todo Pas de création de message pour le moment */ }
/** * Event * * @param CExchangeDataFormat $data_format data format * * @return $this|CHPrimSanteAcknowledgment|null|void */ function event(CExchangeDataFormat $data_format) { $msg = $data_format->_message; /** @var CHPrimSanteEvent $evt */ $evt = $data_format->_family_message; $evt->_data_format = $data_format; // Récupération des informations du message /** @var CHPrimSanteMessageXML $dom_evt */ $dom_evt = $evt->handle($msg); try { // Création de l'échange $exchange_hpr = new CExchangeHprimSante(); $exchange_hpr->load($data_format->_exchange_id); // Récupération des données du segment H $data = $dom_evt->getHEvenementXML(); // Gestion de l'acquittement $ack = new CHPrimSanteAcknowledgment($evt); $evt_class = CHPrimSanteEvent::getEventClass($evt); if (!in_array($evt_class, $data_format->_messages_supported_class)) { $data_format->_ref_sender->_delete_file = false; // Pas de création d'échange dans le cas : // * où l'on ne souhaite pas traiter le message // * où le sender n'enregistre pas les messages non pris en charge if (!$data_format->_to_treatment || !$data_format->_ref_sender->save_unsupported_message) { return null; } $exchange_hpr->populateExchange($data_format, $evt); $exchange_hpr->loadRefsInteropActor(); $ack->_ref_exchange_hpr = $exchange_hpr; $error = new CHPrimSanteError($exchange_hpr, "T", "09", array("P", 1, array("")), "8.1"); $ack = $ack->generateAcknowledgment(array($error)); $exchange_hpr->populateExchangeACK($ack); return $ack; } // Acquittement d'erreur d'un document XML recu non valide $exchange_hpr->populateExchange($data_format, $evt); $exchange_hpr->message_valide = 1; // Gestion des notifications ? if (!$exchange_hpr->_id) { $exchange_hpr->date_production = $data['dateHeureProduction']; $exchange_hpr->nom_fichier = $data['filename']; } $exchange_hpr->store(); // Pas de traitement du message if (!$data_format->_to_treatment) { return null; } $exchange_hpr->loadRefsInteropActor(); // Chargement des configs de l'expéditeur $sender = $exchange_hpr->_ref_sender; $sender->getConfigs($data_format); $dom_evt->_ref_exchange_hpr = $exchange_hpr; $dom_evt->_ref_sender = $sender; $ack->_ref_exchange_hpr = $exchange_hpr; // Message ADM / REG $ack = self::handleEvent($data, $exchange_hpr, $dom_evt, $ack); } catch (Exception $e) { $exchange_hpr->populateExchange($data_format, $evt); $exchange_hpr->loadRefsInteropActor(); $ack = new CHPrimSanteAcknowledgment($evt); $ack->_ref_exchange_hpr = $exchange_hpr; $error = new CHPrimSanteError($exchange_hpr, "T", "09", array("P", 1, array("")), "8.1", $e->getMessage()); $ack = $ack->generateAcknowledgment(array($error)); $exchange_hpr->populateExchangeACK($ack); } return $ack; }