/**
  * 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);
     }
 }
예제 #4
0
 /**
  * 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;
 }
예제 #5
0
 /**
  * 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;
 }