/** * Est-ce que l'action est possible par rapport à l'évènement ? * * @param string $action Action * @param CHPrimXMLAcquittements $dom_acq Acquittement * * @return null|string */ function isActionValide($action, CHPrimXMLAcquittements $dom_acq) { $acq = null; $echange_hprim = $this->_ref_echange_hprim; if (!$action || array_key_exists($action, $this->actions)) { return $acq; } $acq = $dom_acq->generateAcquittements("erreur", "E008"); $doc_valid = $dom_acq->schemaValidate(null, false, $this->_ref_receiver->display_errors); $echange_hprim->acquittement_valide = $doc_valid ? 1 : 0; $echange_hprim->_acquittement = $acq; $echange_hprim->statut_acquittement = "erreur"; $echange_hprim->store(); return $acq; }
/** * @see parent::__construct */ function __construct() { $this->evenement = "evt_patients"; parent::__construct("patients", self::getVersionAcquittementsPatients()); }
/** * Reprocessing exchange * * @throws CMbException * * @return void */ function reprocessing() { if ($this->reprocess >= CAppUI::conf("eai max_reprocess_retries")) { throw new CMbException("CExchangeDataFormat-too_many_retries", $this->reprocess); } $sender = new $this->sender_class(); $sender->load($this->sender_id); // Suppression de l'identifiant dans le cas où l'échange repasse pour éviter un autre échange avec // un identifiant forcé if ($this instanceof CExchangeAny) { $exchange_id = $this->_id; $this->_id = null; } if (!($ack_data = CEAIDispatcher::dispatch($this->_message, $sender, $this->_id))) { // Dans le cas d'un échange générique on le supprime if ($this instanceof CExchangeAny) { $this->_id = $exchange_id; if ($msg = $this->delete()) { throw new CMbException("CMbObject-msg-delete-failed", $msg); } } } $this->load($this->_id); // Dans le cas d'un échange générique on le supprime if ($this instanceof CExchangeAny) { $this->_id = $exchange_id; if ($msg = $this->delete()) { throw new CMbException("CMbObject-msg-delete-failed", $msg); } } if (!$ack_data) { return; } $ack_valid = 0; if ($this instanceof CEchangeHprim) { $dom_evt = $sender->_data_format->_family_message->getHPrimXMLEvenements($this->_message); $ack = CHPrimXMLAcquittements::getAcquittementEvenementXML($dom_evt); $ack->loadXML($ack_data); $ack_valid = $ack->schemaValidate(null, false, false); if ($ack_valid) { $this->statut_acquittement = $ack->getStatutAcquittement(); } } if ($this instanceof CEchangeHprim21) { $ack = new CHPrim21Acknowledgment($sender->_data_format->_family_message); $ack->handle($ack_data); $this->statut_acquittement = $ack->getStatutAcknowledgment(); $ack_valid = $ack->message->isOK(CHL7v2Error::E_ERROR); } if ($this instanceof CExchangeHL7v2) { $evt = $sender->_data_format->_family_message; $evt->_data_format = $sender->_data_format; // Récupération des informations du message - CHL7v2MessageXML $dom_evt = $evt->handle($this->_message); $dom_evt->_is_i18n = $evt->_is_i18n; $ack = $dom_evt->getEventACK($evt); $ack->handle($ack_data); $this->statut_acquittement = $ack->getStatutAcknowledgment(); $ack_valid = $ack->message->isOK(CHL7v2Error::E_ERROR); } $this->date_echange = CMbDT::dateTime(); $this->acquittement_valide = $ack_valid ? 1 : 0; $this->_acquittement = $ack_data; $this->reprocess++; if ($msg = $this->store()) { throw new CMbException("CMbObject-msg-store-failed", $msg); } }
/** * Generate acknowledgment 'ERR' * * @param CHPrimXMLAcquittements $dom_acq Acknowledgment * @param array $code_erreur Mediboard errors codes * @param null $commentaires Comments * @param CMbObject $mbObject Object * @param array $data Objects * * @return string */ function setAckError(CHPrimXMLAcquittements $dom_acq, $code_erreur, $commentaires = null, CMbObject $mbObject = null, $data = null) { $statut = $dom_acq->_codes_erreurs["err"]; $msgAcq = $dom_acq->generateAcquittements($dom_acq->_codes_erreurs["err"], $code_erreur, $commentaires, $mbObject, $data); $doc_valid = $dom_acq->schemaValidate(null, false, $this->_ref_receiver ? $this->_ref_receiver->display_errors : true); $this->acquittement_valide = $doc_valid ? 1 : 0; $this->statut_acquittement = $statut; if ($mbObject) { $this->setObjectIdClass($mbObject); } $this->_acquittement = $msgAcq; $this->date_echange = CMbDT::dateTime(); $this->store(); return $msgAcq; }
/** * Event dispatch * * @param CExchangeDataFormat $data_format Exchange data format * * @throws CMbException * * @return string Acquittement */ function event(CExchangeDataFormat $data_format) { $msg = $data_format->_message; /** @var CHPrimXML $evt */ $evt = $data_format->_family_message; $evt->_data_format = $data_format; /** @var CHPrimXMLEvenements $dom_evt */ $dom_evt = $evt->getHPrimXMLEvenements($msg); $dom_evt_class = get_class($dom_evt); if (!in_array($dom_evt_class, $data_format->_messages_supported_class)) { throw new CMbException(CAppUI::tr("CEAIDispatcher-no_message_supported_for_this_actor", $dom_evt_class)); } // Récupération du noeud racine $root = $dom_evt->documentElement; $nodeName = $root->nodeName; // Création de l'échange $echg_hprim = new CEchangeHprim(); $data_format->loadRefsInteropActor(); $data_format->_ref_sender->getConfigs($data_format); $dom_evt->_ref_sender = $data_format->_ref_sender; try { // Récupération des données de l'entête $data = $dom_evt->getEnteteEvenementXML($nodeName); $echg_hprim->load($data_format->_exchange_id); // Gestion des notifications ? if (!$echg_hprim->_id) { $echg_hprim->populateEchange($data_format, $dom_evt); $echg_hprim->identifiant_emetteur = $data['identifiantMessage']; $echg_hprim->message_valide = 1; } $echg_hprim->loadRefsInteropActor(); // Chargement des configs de l'expéditeur $echg_hprim->_ref_sender->getConfigs($data_format); $configs = $echg_hprim->_ref_sender->_configs; $display_errors = isset($configs["display_errors"]) ? $configs["display_errors"] : true; $doc_errors = $dom_evt->schemaValidate(null, false, $display_errors); // Gestion de l'acquittement $dom_acq = CHPrimXMLAcquittements::getAcquittementEvenementXML($dom_evt); $dom_acq->_identifiant_acquitte = $data['identifiantMessage']; $dom_acq->_sous_type_evt = $dom_evt->sous_type; // Acquittement d'erreur d'un document XML recu non valide if ($doc_errors !== true) { $echg_hprim->populateEchange($data_format, $dom_evt); $dom_acq->_ref_echange_hprim = $echg_hprim; $msgAcq = $dom_acq->generateAcquittements($dom_acq instanceof CHPrimXMLAcquittementsServeurActivitePmsi ? "err" : "erreur", "E002", $doc_errors); $doc_valid = $dom_acq->schemaValidate(null, false, $display_errors); $echg_hprim->populateErrorEchange($msgAcq, $doc_valid, "erreur"); return $msgAcq; } $echg_hprim->date_production = CMbDT::dateTime(); $echg_hprim->store(); if (!$data_format->_to_treatment) { return null; } $dom_evt->_ref_echange_hprim = $echg_hprim; $dom_acq->_ref_echange_hprim = $echg_hprim; // Message événement patient if ($dom_evt instanceof CHPrimXMLEvenementsPatients) { return self::eventPatient($dom_evt, $dom_acq, $echg_hprim, $data); } // Message serveur activité PMSI if ($dom_evt instanceof CHPrimXMLEvenementsServeurActivitePmsi) { return self::eventPMSI($dom_evt, $dom_acq, $echg_hprim, $data); } } catch (Exception $e) { $echg_hprim->populateEchange($data_format, $dom_evt); $dom_acq = CHPrimXMLAcquittements::getAcquittementEvenementXML($dom_evt); // Type par défaut $dom_acq->_sous_type_evt = "none"; $dom_acq->_identifiant_acquitte = isset($data['identifiantMessage']) ? $data['identifiantMessage'] : "000000000"; $dom_acq->_ref_echange_hprim = $echg_hprim; $msgAcq = $dom_acq->generateAcquittements($dom_acq instanceof CHPrimXMLAcquittementsServeurActivitePmsi ? "err" : "erreur", "E009", $e->getMessage(), null, $data); $doc_valid = $dom_acq->schemaValidate(null, false, false); $echg_hprim->populateErrorEchange($msgAcq, $doc_valid, "erreur"); return $msgAcq; } return null; }