/** * @see parent::handle */ function handle($ack, CMbObject $object, $data) { // Traitement du message des erreurs $exchange_hpr = $this->_ref_exchange_hpr; $exchange_hpr->_ref_sender->loadConfigValues(); $sender = $exchange_hpr->_ref_sender; $this->_ref_sender = $sender; CMbObject::$useObjectCache = false; // Rejets partiels du message $errors = array(); if (isset($data["REG"])) { $regs = $data["REG"]; } else { $regs = $data["//REG"]; } // Récupération des règlements foreach ($regs as $_REG) { $sejour = new CSejour(); $NDA = $this->getNDA($_REG); $user_reg = $this->getUser($_REG); $segment_row = $this->getREGSegmentRow($_REG); // Recherche si on retrouve le séjour if (!$this->admitFound($NDA, $sejour)) { $errors[] = new CHPrimSanteError($exchange_hpr, "P", "06", array("REG", $segment_row, array($NDA, $user_reg)), "22.3"); continue; } $consults = array(); $consultations = $sejour->loadRefsConsultations(); // Sélection des consultations éligibles foreach ($consultations as $_consult) { $user = $_consult->loadRefPraticien(); if ($user_reg) { if ($user->adeli == $user_reg) { $consults[$_consult->_id] = $_consult; } continue; } } // Si une seule consultation donnée if (!count($consults) && count($consultations) == 1) { $consults = $consultations; } $consultation = new CConsultation(); // On essaie d'en trouver une qui ne soit pas acquittée foreach ($consults as $_consult) { $facture = $_consult->loadRefFacture(); if (!$facture->patient_date_reglement) { $consultation = $_consult; break; } } // Aucune consultation trouvée if (!$consultation->_id && count($consults) > 0) { $consultation = end($consults); } if (!$consultation || !$consultation->_id) { $errors[] = new CHPrimSanteError($exchange_hpr, "P", "01", array("REG", $segment_row, array($NDA, $user_reg)), "22.3"); continue; } $facture = $consultation->loadRefFacture(); if (!$facture->_id) { /* @TODO avant de transposer la création de la facture dans le store */ $facture = $consultation->createFactureConsult(); if (!$facture->_id) { $errors[] = new CHPrimSanteError($exchange_hpr, "P", "02", array("REG", $segment_row, array($NDA, $user_reg)), "22.3"); continue; } } // Recherche d'un reglèment par tag + idex (nom fichier - id reg) $idex_value = $NDA . "_" . $segment_row; $tag = CHPrimSante::getTag($sender->group_id); $idex = CIdSante400::getMatch("CReglement", $tag, $idex_value); // Mapping des règlements $return_payment = $this->mapAndStorePayment($_REG, $facture, $idex); if (is_string($return_payment)) { $errors[] = new CHPrimSanteError($exchange_hpr, "P", "03", array("REG", $segment_row, array($NDA, $user_reg)), "22.3", $return_payment); continue; } } return $exchange_hpr->setAck($ack, $errors, $object); }