/**
  * 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);
     }
 }