/** * Load last message * * @return void */ function lastMessage() { $echg_hprim = new CEchangeHprim(); $echg_hprim->_load_content = false; $where = array(); $where["sender_id"] = " = '{$this->_id}'"; $key = $echg_hprim->_spec->key; $echg_hprim->loadObject($where, "{$key} DESC"); $this->_ref_last_message = $echg_hprim; }
/** * Annulation du séjour ? * * @param CSejour $venue Venue * @param CHPrimXMLAcquittementsPatients $dom_acq Acquittement * @param CEchangeHprim $echg_hprim Echange H'XML * * @return null|string */ function doNotCancelVenue(CSejour $venue, $dom_acq, $echg_hprim) { // Impossible d'annuler un séjour en cours if ($venue->entree_reelle) { $commentaire = "La venue {$venue->_id} que vous souhaitez annuler est impossible."; return $echg_hprim->setAckError($dom_acq, "E108", $commentaire, $venue); } // Impossible d'annuler un dossier ayant une intervention $where = array(); $where['annulee'] = " = '0'"; $venue->loadRefsOperations($where); if (count($venue->_ref_operations) > 0) { $commentaire = "La venue {$venue->_id} que vous souhaitez annuler est impossible."; return $echg_hprim->setAckError($dom_acq, "E109", $commentaire, $venue); } return null; }
<?php /** * Exchange viewer * * @category HprimXML * @package Mediboard * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version SVN: $Id:$ * @link http://www.mediboard.org */ CCanDo::checkRead(); $echange_hprim_id = CValue::get("echange_hprim_id"); $echange_hprim = new CEchangeHprim(); $echange_hprim->load($echange_hprim_id); $evt = new CHPrimXMLEventPatient(); $domGetEvenement = $evt->getHPrimXMLEvenements($this->_message); $domGetEvenement->formatOutput = true; $doc_errors_msg = @$domGetEvenement->schemaValidate(null, true, false); $echange_hprim->_message = utf8_encode($domGetEvenement->saveXML()); // Création du template $smarty = new CSmartyDP(); $smarty->assign("echange_hprim", $echange_hprim); $smarty->display("echangeviewer.tpl");
/** * Trigger after event store * * @param CMbObject $mbObject Object * * @throws CMbException * * @return bool */ function onAfterStore(CMbObject $mbObject) { if (!$this->isHandled($mbObject)) { return false; } $receiver = $mbObject->_receiver; if ($mbObject instanceof CCorrespondantPatient) { $patient = $mbObject->loadRefPatient(); $patient->_receiver = $receiver; } else { $patient = $mbObject; } // Si Serveur if (CAppUI::conf('sip server')) { $echange_hprim = new CEchangeHprim(); if (isset($patient->_eai_exchange_initiator_id)) { $echange_hprim->load($patient->_eai_exchange_initiator_id); } $initiateur = $receiver->_id == $echange_hprim->sender_id ? $echange_hprim->_id : null; $group = new CGroups(); $group->load($receiver->group_id); $group->loadConfigValues(); if (!$initiateur && !$group->_configs["sip_notify_all_actors"]) { return false; } $patient->_id400 = null; $idexPatient = new CIdSante400(); $idexPatient->loadLatestFor($patient, $receiver->_tag_patient); $patient->_id400 = $idexPatient->id400; $this->generateTypeEvenement("CHPrimXMLEnregistrementPatient", $patient, true, $initiateur); } else { if (!$receiver->isMessageSupported("CHPrimXMLEnregistrementPatient")) { return false; } if (!$patient->_IPP) { // Génération de l'IPP dans le cas de la création, ce dernier n'était pas créé if ($msg = $patient->generateIPP()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } $IPP = new CIdSante400(); $IPP->loadLatestFor($patient, $receiver->_tag_patient); $patient->_IPP = $IPP->id400; } // Envoi pas les patients qui n'ont pas d'IPP if (!$receiver->_configs["send_all_patients"] && !$patient->_IPP) { return false; } $this->sendEvenementPatient("CHPrimXMLEnregistrementPatient", $patient); if ($receiver->_configs["send_insured_without_admit"]) { if (!$receiver->isMessageSupported("CHPrimXMLDebiteursVenue")) { return false; } $sejour = new CSejour(); $where = array(); $where["patient_id"] = "= '{$patient->_id}'"; $where["group_id"] = "= '{$receiver->group_id}'"; $datetime = CMbDT::dateTime(); $where["sortie"] = ">= '{$datetime}'"; /** @var CSejour[] $sejours */ $sejours = $sejour->loadList($where); // On va transmettre les informations sur le débiteur pour le séjour en cours, et ceux à venir foreach ($sejours as $_sejour) { if (!$patient->code_regime) { continue; } $_sejour->_receiver = $receiver; $_sejour->loadLastLog(); $_sejour->loadRefPatient(); if (!$_sejour->_NDA) { // Génération du NDA dans le cas de la création, ce dernier n'était pas créé if ($msg = $_sejour->generateNDA()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } $NDA = new CIdSante400(); $NDA->loadLatestFor($_sejour, $receiver->_tag_sejour); $sejour->_NDA = $NDA->id400; } if ($receiver->isMessageSupported("CHPrimXMLDebiteursVenue")) { $this->sendEvenementPatient("CHPrimXMLDebiteursVenue", $_sejour); } } } $patient->_IPP = null; } return true; }
/** * Codage CCAM vers les systèmes de facturation * * @param CHPrimXMLEvenementServeurActes $messageServeurActes Message H'XML serveur actes * * @return CHPrimXMLAcquittementsServeurActes messageAcquittement **/ function evenementServeurActes($messageServeurActes) { // Création de l'échange $echange_hprim = new CEchangeHprim(); $messageAcquittement = null; $data = array(); // Gestion de l'acquittement $domAcquittement = new CHPrimXMLAcquittementsServeurActes(); $domGetEvenement = new CHPrimXMLEvenementsServeurActes(); try { // Récupération des informations du message XML $domGetEvenement->loadXML($messageServeurActes); $doc_errors = $domGetEvenement->schemaValidate(null, true); $data = $domGetEvenement->getEnteteEvenementXML("evenementsServeurActes"); $domAcquittement->identifiant = $data['identifiantMessage']; $domAcquittement->destinataire = $data['idClient']; $domAcquittement->destinataire_libelle = $data['libelleClient']; $domAcquittement->_sous_type_evt = $domGetEvenement->sous_type; // Acquittement d'erreur d'un document XML recu non valide if ($doc_errors !== true) { $messageAcquittement = $domAcquittement->generateAcquittementsServeurActivitePmsi("erreur", "E002", $doc_errors); $doc_valid = $domAcquittement->schemaValidate(); $echange_hprim->date_production = CMbDT::dateTime(); $echange_hprim->emetteur = $data['idClient'] ? $dest_hprim->_id : 0; $echange_hprim->destinataire = CAppUI::conf('mb_id'); $echange_hprim->group_id = CGroups::loadCurrent()->_id; $echange_hprim->type = "pmsi"; $echange_hprim->sous_type = $domGetEvenement->sous_type ? $domGetEvenement->sous_type : "inconnu"; $echange_hprim->_message = $messageServeurActes; $echange_hprim->_acquittement = $messageAcquittement; $echange_hprim->statut_acquittement = "erreur"; $echange_hprim->message_valide = 0; $echange_hprim->acquittement_valide = $doc_valid ? 1 : 0; $echange_hprim->store(); return $messageAcquittement; } // Récupère l'initiateur du message s'il existe if (CAppUI::conf('sip server')) { $echange_hprim->identifiant_emetteur = intval($data['identifiantMessage']); $echange_hprim->loadMatchingObject(); } if (!$echange_hprim->_id) { $echange_hprim->emetteur = $dest_hprim->_id; $echange_hprim->destinataire = CAppUI::conf('mb_id'); $echange_hprim->group_id = CGroups::loadCurrent()->_id; $echange_hprim->identifiant_emetteur = $data['identifiantMessage']; $echange_hprim->type = "pmsi"; $echange_hprim->sous_type = $domGetEvenement->sous_type; $echange_hprim->_message = $messageServeurActes; $echange_hprim->message_valide = 1; } $echange_hprim->date_production = CMbDT::dateTime(); $echange_hprim->store(); $data = array_merge($data, $domGetEvenement->getContentsXML()); $echange_hprim->id_permanent = $data['idSourceVenue']; $messageAcquittement = $domGetEvenement->serveurActes($domAcquittement, $echange_hprim, $data); return $messageAcquittement; } catch (Exception $e) { /*$domAcquittement = new CHPrimXMLAcquittementsServeurActes(); $domAcquittement->identifiant = $data['identifiantMessage']; $domAcquittement->destinataire = $data['idClient']; $domAcquittement->destinataire_libelle = $data['libelleClient']; $domAcquittement->_sous_type_evt = "evenementServeurActe"; $messageAcquittement = $domAcquittement->generateAcquittementsServeurActivitePmsi("erreur", "E009", $e->getMessage()); $doc_valid = $domAcquittement->schemaValidate(); $echange_hprim->_acquittement = $messageAcquittement; $echange_hprim->statut_acquittement = "erreur"; $echange_hprim->acquittement_valide = $doc_valid ? 1 : 0; $echange_hprim->date_echange = CMbDT::dateTime(); $echange_hprim->store();*/ return $messageAcquittement; } }
/** * Trigger after event store * * @param CMbObject $mbObject Object * * @throws CMbException * * @return bool */ function onAfterStore(CMbObject $mbObject) { if (!$this->isHandled($mbObject)) { return false; } $receiver = $mbObject->_receiver; // Traitement Sejour if ($mbObject instanceof CSejour) { $sejour = $mbObject; $sejour->loadRefPraticien(); $sejour->loadNDA(); $sejour->loadLastLog(); $sejour->loadRefPatient(); $sejour->loadRefAdresseParPraticien(); // Si Serveur if (CAppUI::conf('smp server')) { $echange_hprim = new CEchangeHprim(); if (isset($sejour->_eai_exchange_initiator_id)) { $echange_hprim->load($sejour->_eai_exchange_initiator_id); } $initiateur = $receiver->_id == $echange_hprim->sender_id ? $echange_hprim->_id : null; $group = new CGroups(); $group->load($receiver->group_id); $group->loadConfigValues(); $mbObject->_id400 = null; $idexPatient = new CIdSante400(); $idexPatient->loadLatestFor($sejour, $receiver->_tag_sejour); $mbObject->_id400 = $idexPatient->id400; $this->generateTypeEvenement("CHPrimXMLVenuePatient", $sejour, true, $initiateur); } else { if (!$receiver->isMessageSupported("CHPrimXMLVenuePatient")) { return false; } if (CGroups::loadCurrent()->_id != $receiver->group_id) { return false; } if (!$sejour->_NDA) { // Génération du NDA dans le cas de la création, ce dernier n'était pas créé if ($msg = $sejour->generateNDA()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } $NDA = new CIdSante400(); $NDA->loadLatestFor($sejour, $receiver->_tag_sejour); $sejour->_NDA = $NDA->id400; } if (!$sejour->_ref_patient->_IPP) { $IPP = new CIdSante400(); //Paramétrage de l'id 400 $IPP->loadLatestFor($sejour->_ref_patient, $receiver->_tag_patient); $sejour->_ref_patient->_IPP = $IPP->id400; } $this->sendEvenementPatient("CHPrimXMLVenuePatient", $sejour); if ($receiver->isMessageSupported("CHPrimXMLDebiteursVenue") && $sejour->_ref_patient->code_regime) { $this->sendEvenementPatient("CHPrimXMLDebiteursVenue", $sejour); } if ($receiver->isMessageSupported("CHPrimXMLMouvementPatient") && $sejour->_ref_last_log->type == "create") { $affectation = $sejour->loadRefFirstAffectation(); // $this->sendEvenementPatient("CHPrimXMLMouvementPatient", $affectation); } $sejour->_NDA = null; } return true; } elseif ($mbObject instanceof CAffectation) { $affectation = $mbObject; $current_log = $affectation->_ref_current_log; if (!$current_log || $affectation->_no_synchro || !in_array($current_log->type, array("create", "store"))) { return false; } // Cas où : // * on est l'initiateur du message // * le destinataire ne supporte pas le message if (!$receiver->isMessageSupported("CHPrimXMLMouvementPatient")) { return false; } // Affectation non liée à un séjour $sejour = $affectation->loadRefSejour(); if (!$sejour->_id) { return false; } $sejour->loadRefPatient(); $sejour->_receiver = $receiver; // Envoi de l'événement $this->sendEvenementPatient("CHPrimXMLMouvementPatient", $affectation); } return true; }
* @category HprimXML * @package Mediboard * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version SVN: $Id: ajax_send_message.php 20185 2013-08-16 15:31:17Z lryo $ * @link http://www.mediboard.org */ CCanDo::checkRead(); $echange_hprim_id = CValue::get("echange_xml_id"); $echange_hprim_classname = CValue::get("echange_xml_classname"); $where = ''; if (!$echange_hprim_id) { if (!($limit = CAppUI::conf('sip batch_count'))) { return; } $echange_hprim = new CEchangeHprim(); $where['statut_acquittement'] = "IS NULL"; $where['sender_id'] = "IS NULL"; $where['receiver_id'] = "IS NOT NULL"; $where['message_valide'] = "= '1'"; $where['acquittement_valide'] = "IS NULL"; $where['acquittement_content_id'] = "IS NULL"; $where['date_echange'] = "IS NULL"; $where['date_production'] = "BETWEEN '" . CMbDT::dateTime("-3 DAYS") . "' AND '" . CMbDT::dateTime("+1 DAYS") . "'"; $notifications = $echange_hprim->loadList($where, null, $limit); // Effectue le traitement d'enregistrement des notifications sur lequel le cron vient de passer // ce qui permet la gestion des doublons foreach ($notifications as $notification) { /** @var CEchangeHprim $notification */ $notification->date_echange = CMbDT::dateTime(); $notification->store();
/** * Récupération du tag du mediuser * * @return string */ function getTagMediuser() { $this->_ref_echange_hprim->loadRefsInteropActor(); return $this->_ref_echange_hprim->_ref_receiver->_tag_mediuser; }
/** * 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; }
$domEvenement = new CHPrimXMLEvenementsServeurActes(); $evt = "evenementsServeurActes"; } else { CAppUI::stepAjax("Type de l'échange invalide", UI_MSG_ERROR); } $files = CAppUI::readFiles($path); ini_set("memory_limit", "512M"); CApp::setTimeLimit(360); CMbObject::$useObjectCache = false; $counter = 0; foreach ($files as $_file) { $xmlfile = file_get_contents("{$path}/{$_file}"); // Chargement du fichier XML $domEvenement->loadXML($xmlfile); // Création de l'échange $echg_hprim = new CEchangeHprim(); $data = $domEvenement->getEnteteEvenementXML($evt); $data = array_merge($data, $domEvenement->getContentsXML()); $dest_hprim = new CDestinataireHprim(); $dest_hprim->register($data['idClient']); $echg_hprim->date_production = $data['dateHeureProduction']; $echg_hprim->date_echange = date("Y-m-d H:m:s", filemtime("{$path}/{$_file}")); $echg_hprim->group_id = CGroups::loadCurrent()->_id; $echg_hprim->receiver_id = $dest_hprim->_id; $echg_hprim->type = $domEvenement->type; $echg_hprim->sous_type = $domEvenement->sous_type; $echg_hprim->_message = utf8_encode($xmlfile); $doc_valid = $domEvenement->schemaValidate(null, false, $dest_hprim->display_errors); $echg_hprim->message_valide = $doc_valid ? 1 : 0; if ($type == "pmsi") { $echg_hprim->object_class = "CSejour";