/** * Trigger after event store * * @param CMbObject $mbObject Object * * @return void */ function onAfterStore(CMbObject $mbObject) { if (!$this->isHandled($mbObject)) { return false; } /** @var CInteropReceiver $receiver */ $receiver = $mbObject->_receiver; $receiver->getInternationalizationCode($this->transaction); // Traitement Sejour if ($mbObject instanceof CSejour) { $sejour = $mbObject; $sejour->loadRefPatient(); // Si on ne souhaite explicitement pas de synchro if ($sejour->_no_synchro) { return; } // Si on est en train de créer un séjour et qu'il s'agit d'une naissance $current_log = $sejour->loadLastLog(); if ($current_log->type == "create" && $sejour->_naissance) { return; } // Si Serveur if (CAppUI::conf('smp server')) { return; } // Si le group_id du séjour est différent de celui du destinataire if ($sejour->group_id != $receiver->group_id) { return; } // Destinataire gère seulement les non facturables if ($receiver->_configs["send_no_facturable"] == "0" && $sejour->facturable) { return; } // Destinataire gère seulement les facturables if ($receiver->_configs["send_no_facturable"] == "2" && !$sejour->facturable) { return; } // Passage du séjour d'urgence en hospit, pas de génération de A06 if ($sejour->_en_mutation) { return; } // Si on ne gère les séjours du bébé on ne transmet pas séjour si c'est un séjour enfant if (!$receiver->_configs["send_child_admit"]) { $naissance = new CNaissance(); $naissance->sejour_enfant_id = $sejour->_id; $naissance->loadMatchingObject(); if ($naissance->_id) { return; } } // Recherche si on est sur un séjour de mutation $rpu = new CRPU(); $rpu->mutation_sejour_id = $sejour->_id; $rpu->loadMatchingObject(); if ($rpu->_id) { $sejour_rpu = $rpu->loadRefSejour(); if (!$sejour->_cancel_hospitalization && $sejour_rpu->mode_sortie != "mutation") { return; } } $current_affectation = null; $code = null; // Cas où : // * on est sur un séjour d'urgences qui n'est pas le relicat // * on est en train de réaliser la mutation /** @var CRPU $rpu */ $rpu = $sejour->loadRefRPU(); if ($rpu && $rpu->_id && $rpu->sejour_id != $rpu->mutation_sejour_id && $sejour->fieldModified("mode_sortie", "mutation") && !$sejour->UHCD) { $sejour = $rpu->loadRefSejourMutation(); $sejour->loadRefPatient(); $sejour->loadLastLog(); $sejour->_receiver = $receiver; $code = "A06"; // On récupère l'affectation courante qui n'a pas été transmise (affectation suite à la mutation) $current_affectation = $sejour->getCurrAffectation(); $sejour->_ref_hl7_affectation = $current_affectation; } elseif ($sejour->fieldModified("type", "urg") && $sejour->_cancel_hospitalization) { $sejour->loadRefPatient(); $sejour->loadLastLog(); $sejour->_receiver = $receiver; $code = "A07"; // On récupère l'affectation courante qui n'a pas été transmise (affectation suite à la mutation) $current_affectation = $sejour->getCurrAffectation(); $sejour->_ref_hl7_affectation = $current_affectation; } elseif ($rpu && $rpu->mutation_sejour_id && $rpu->sejour_id != $rpu->mutation_sejour_id) { return; } $code = $code ? $code : $this->getCodeSejour($sejour); // Dans le cas d'une création et que l'on renseigne entrée réelle et sortie réelle, // il est nécessaire de créer deux flux (A01 et A03) if ($sejour->_ref_last_log->type == "create" && $sejour->entree_reelle && $sejour->sortie_reelle) { $code = "A01"; // Cas où :très souvent // * on est l'initiateur du message // * le destinataire ne supporte pas le message if (!$this->isMessageSupported($this->transaction, $this->message, $code, $receiver)) { return; } 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; } $patient = $sejour->_ref_patient; $patient->loadIPP($receiver->group_id); if (!$patient->_IPP) { if ($msg = $patient->generateIPP()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } } // Cas où lors de l'entrée réelle j'ai une affectation qui n'a pas été envoyée if ($sejour->fieldModified("entree_reelle") && !$sejour->_old->entree_reelle) { $current_affectation = $sejour->getCurrAffectation(); } $this->createMovement($code, $sejour, $current_affectation); // Envoi de l'événement $this->sendITI($this->profil, $this->transaction, $this->message, $code, $sejour); $code = "A03"; } if (!$code) { return; } // Cas où : // * on est l'initiateur du message // * le destinataire ne supporte pas le message if (!$this->isMessageSupported($this->transaction, $this->message, $code, $receiver)) { return; } 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; } $patient = $sejour->_ref_patient; $patient->loadIPP($receiver->group_id); if (!$patient->_IPP) { if ($msg = $patient->generateIPP()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } } // Cas où lors de l'entrée réelle j'ai une affectation qui n'a pas été envoyée if ($sejour->fieldModified("entree_reelle") && !$sejour->_old->entree_reelle) { $current_affectation = $sejour->getCurrAffectation(); } $this->createMovement($code, $sejour, $current_affectation); // Envoi de l'événement $this->sendITI($this->profil, $this->transaction, $this->message, $code, $sejour); } // Traitement Affectation if ($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; } // Affectation non liée à un séjour $sejour = $affectation->loadRefSejour(); if (!$sejour->_id) { return; } // Destinataire gère seulement les non facturables if ($receiver->_configs["send_no_facturable"] == "0" && $sejour->facturable) { return; } // Destinataire gère seulement les facturables if ($receiver->_configs["send_no_facturable"] == "2" && !$sejour->facturable) { return; } // Première affectation des urgences on ne la transmet pas, seulement pour l'évènement de bascule // Sauf si nous sommes dans un séjour d'UHCD if ($affectation->_mutation_urg && !$sejour->UHCD) { return; } // Si on ne gère les séjours du bébé on ne transmet pas l'affectation si c'est un séjour enfant if (!$receiver->_configs["send_child_admit"]) { $naissance = new CNaissance(); $naissance->sejour_enfant_id = $sejour->_id; $naissance->loadMatchingObject(); if ($naissance->_id) { return; } } // Pas d'envoie d'affectation si la patient n'est pas sortie des urgences $rpu = new CRPU(); $rpu->mutation_sejour_id = $sejour->_id; $rpu->loadMatchingObject(); if ($rpu->_id) { $sejour_rpu = $rpu->loadRefSejour(); if (!$affectation->_mutation_urg && $sejour_rpu->mode_sortie != "mutation") { return; } } // Pas d'envoie d'affectation pour les séjours reliquats // Sauf si le séjour est en UHCD $rpu = $sejour->loadRefRPU(); if ($rpu && $rpu->mutation_sejour_id && $rpu->sejour_id != $rpu->mutation_sejour_id && !$sejour->UHCD) { return; } // Si le group_id du séjour est différent de celui du destinataire if ($sejour->group_id != $receiver->group_id) { return; } // On envoie pas les affectations prévisionnelles if (!$receiver->_configs["send_provisional_affectation"] && $sejour->_etat == "preadmission") { return; } $first_affectation = $sejour->loadRefFirstAffectation(); $code = $this->getCodeAffectation($affectation, $first_affectation); // Cas où : // * on est l'initiateur du message // * le destinataire ne supporte pas le message if (!$this->isMessageSupported($this->transaction, $this->message, $code, $receiver)) { return; } $sejour->loadRefPatient(); $sejour->_receiver = $receiver; $patient = $sejour->_ref_patient; $patient->loadIPP($receiver->group_id); if (!$patient->_IPP) { if ($msg = $patient->generateIPP()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } } $this->createMovement($code, $sejour, $affectation); $service = $affectation->loadRefService(); $curr_affectation = $sejour->loadRefCurrAffectation(); // On envoie pas de mouvement antérieur à la dernière affectation if (($service->uhcd || $service->radiologie || $service->urgence) && $affectation->sortie < $curr_affectation->sortie) { return; } // Ne pas envoyer la sortie si le séjour a une entrée réelle et si on modifie ou créé un affectation if (!$receiver->_configs["send_expected_discharge_with_affectation"] && $sejour->entree_reelle) { $sejour->sortie_prevue = null; } // Envoi de l'événement $this->sendITI($this->profil, $this->transaction, $this->message, $code, $mbObject); } // Traitement Naissance if ($mbObject instanceof CNaissance) { $current_log = $mbObject->loadLastLog(); if ($current_log->type != "create") { return; } $naissance = $mbObject; if (!$this->isMessageSupported($this->transaction, $this->message, "A28", $receiver)) { return; } $sejour_enfant = $naissance->loadRefSejourEnfant(); // Création du bébé $enfant = $sejour_enfant->_ref_patient; $enfant->loadIPP($receiver->group_id); $enfant->_receiver = $receiver; $enfant->_naissance_id = $naissance->_id; if (!$enfant->_IPP) { if ($msg = $enfant->generateIPP()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } } // Envoi pas les patients qui n'ont pas d'IPP if (!$receiver->_configs["send_all_patients"] && !$enfant->_IPP) { return; } // Envoi du A28 pour la création du bébé $this->sendITI($this->profil, $this->transaction, $this->message, "A28", $enfant); $enfant->_IPP = null; // Si on gère les séjours du bébé on transmet le séjour ! if ($receiver->_configs["send_child_admit"]) { $sejour_enfant->_receiver = $receiver; // Si le group_id du séjour est différent de celui du destinataire if ($sejour_enfant->group_id != $receiver->group_id) { return; } $code = $this->getCodeBirth($sejour_enfant); // Cas où : // * on est l'initiateur du message // * le destinataire ne supporte pas le message if (!$this->isMessageSupported($this->transaction, $this->message, $code, $receiver)) { return; } if (!$sejour_enfant->_NDA) { // Génération du NDA dans le cas de la création, ce dernier n'était pas créé if ($msg = $sejour_enfant->generateNDA()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } $NDA = new CIdSante400(); $NDA->loadLatestFor($sejour_enfant, $receiver->_tag_sejour); $sejour_enfant->_NDA = $NDA->id400; } $current_affectation = null; // Cas où lors de l'entrée réelle j'ai une affectation qui n'a pas été envoyée if ($sejour_enfant->fieldModified("entree_reelle") && !$sejour_enfant->_old->entree_reelle) { $current_affectation = $sejour_enfant->getCurrAffectation(); } $this->createMovement($code, $sejour_enfant, $current_affectation); // Envoi de l'événement $this->sendITI($this->profil, $this->transaction, $this->message, $code, $sejour_enfant); } } }
global $m, $tab; $action = CAppUI::tr($action); if ($msg) { CAppUI::setMsg("{$action}: {$msg}", UI_MSG_ERROR); CAppUI::redirect("m={$m}&tab={$tab}"); return; } CAppUI::setMsg("{$action} {$txt}", UI_MSG_OK); } //récupération de l'identifiant du séjour à fusionner $sejour_id_merge = CValue::post("sejour_id_merge"); // Récupération du rpu $rpu_id = CValue::post("rpu_id"); $rpu = new CRPU(); $rpu->load($rpu_id); $sejour = $rpu->loadRefSejour(); $sejour_rpu = $sejour; $properties_sejour = $sejour->getProperties(); //Cas d'une collision ou d'un rattachement d'un séjour if ($sejour_id_merge) { $sejour_merge = new CSejour(); $sejour_merge->load($sejour_id_merge); $sejour_merge->entree_reelle = $sejour->entree_reelle; $sejour_merge->mode_entree_id = $sejour->mode_entree_id; $sejour_merge->mode_entree = $sejour->mode_entree; $sejour_merge->provenance = $sejour->provenance; $msg = $sejour_merge->merge(array($sejour)); viewMsg($msg, "Fusion"); $sejour = $sejour_merge; $rpu->sejour_id = $sejour_merge->_id; }
function addRPU($elParent, CRPU $mbObject) { $sejour = $mbObject->loadRefSejour(); $this->addElement($elParent, "CP", $mbObject->_cp); $this->addElement($elParent, "COMMUNE", $mbObject->_ville); $this->addElement($elParent, "NAISSANCE", CMbDT::transform($mbObject->_naissance, null, "%d/%m/%Y")); $this->addElement($elParent, "SEXE", strtoupper($mbObject->_sexe)); $this->addElement($elParent, "ENTREE", CMbDT::transform($sejour->entree, null, "%d/%m/%Y %H:%M")); $this->addElement($elParent, "MODE_ENTREE", $sejour->mode_entree); $this->addElement($elParent, "PROVENANCE", $sejour->provenance == "8" ? "5" : $sejour->provenance); if ($sejour->transport == "perso_taxi") { $sejour->transport = "perso"; } if ($sejour->transport == "ambu_vsl") { $sejour->transport = "ambu"; } $this->addElement($elParent, "TRANSPORT", strtoupper($sejour->transport)); $this->addElement($elParent, "TRANSPORT_PEC", strtoupper($mbObject->pec_transport)); $motif = CMbString::htmlSpecialChars($mbObject->motif); if (CAppUI::conf("dPurgences CRPU gestion_motif_sfmu", $sejour->loadRefEtablissement()) == 2 || $mbObject->motif_sfmu) { $motif = $mbObject->loadRefMotifSFMU()->code; } $this->addElement($elParent, "MOTIF", $motif); if (CModule::getActive("oscour") && CAppUI::conf("dPurgences gerer_circonstance") && CAppUI::conf("oscour version_complete")) { $circonstance = $mbObject->loadRefCirconstance(); $this->addElement($elParent, "CIRCONSTANCE", $circonstance->code); } $this->addElement($elParent, "GRAVITE", strtoupper($mbObject->ccmu)); $this->addElement($elParent, "DP", $mbObject->_DP[0] . preg_replace("/[^\\d]/", "", substr($mbObject->_DP, 1))); $liste_da = $this->addElement($elParent, "LISTE_DA"); if ($dr = $sejour->_ext_diagnostic_relie) { $this->addDiagAssocie($liste_da, $dr->code[0] . preg_replace("/[^\\d]/", "", substr($dr->code, 1))); } $das = $sejour->_diagnostics_associes; if (is_array($das)) { foreach ($das as $_da) { $_da = $_da[0] . preg_replace("/[^\\d]/", "", substr($_da, 1)); $this->addDiagAssocie($liste_da, $_da); } } $liste_actes = $this->addElement($elParent, "LISTE_ACTES"); $codes_ccam = $sejour->_ref_consult_atu->_codes_ccam; if (is_array($codes_ccam)) { foreach ($codes_ccam as $_code_ccam) { $this->addActeCCAM($liste_actes, $_code_ccam); } } $sortie = null; if ($sejour->sortie_reelle) { $sortie = $sejour->sortie_reelle; } else { // on recherche la première affectation qui n'est pas dans un service d'urgences ou externe $affectation = new CAffectation(); $ljoin["service"] = "`service`.`service_id` = `affectation`.`service_id`"; $where = array(); $where["sejour_id"] = " = '{$sejour->_id}'"; $where["service.cancelled"] = " = '0'"; $where["service.uhcd"] = " = '0'"; $where["service.urgence"] = " = '0'"; $affectation->loadObject($where, "entree ASC", null, $ljoin); if ($affectation->_id) { $sortie = $affectation->entree; } } if ($sortie) { $this->addElement($elParent, "SORTIE", CMbDT::transform($sortie, null, "%d/%m/%Y %H:%M")); } if (CModule::getActive("cerveau")) { // on recherche la première affectation vers UHCD $affectation = new CAffectation(); $ljoin["service"] = "`service`.`service_id` = `affectation`.`service_id`"; $ljoin["sejour"] = "`affectation`.`sejour_id` = `sejour`.`sejour_id`"; $where = array(); $where["affectation.sejour_id"] = " = '{$sejour->_id}'"; $where["service.cancelled"] = " = '0'"; $where["service.uhcd"] = " = '1'"; $where["sejour.uhcd"] = " = '1'"; $affectation->loadObject($where, "entree ASC", null, $ljoin); if (!$affectation->_id) { $mode_sortie = $mbObject->_mode_sortie; $destination = $sejour->destination; $orientation = $mbObject->orientation; // Dans le cas où l'on ne créé pas un relicat, on va aller chercher les valeurs sur l'affectation de médecine if ($mbObject->mutation_sejour_id && CAppUI::conf("dPurgences create_sejour_hospit")) { // on recherche la première affectation qui ni UHCD, ni URG $affectation_medecine = new CAffectation(); $ljoin["service"] = "`service`.`service_id` = `affectation`.`service_id`"; $ljoin["sejour"] = "`affectation`.`sejour_id` = `sejour`.`sejour_id`"; $where = array(); $where["affectation.sejour_id"] = " = '{$sejour->_id}'"; $where["service.cancelled"] = " = '0'"; $where["service.uhcd"] = " != '1'"; $where["service.urgence"] = " != '1'"; $affectation_medecine->loadObject($where, "entree ASC", null, $ljoin); if ($affectation_medecine) { $service = $affectation_medecine->loadRefService(); $mode_sortie = "6"; $destination = $service->default_destination; $orientation = $service->default_orientation; } } } else { // Dans le cas où l'on a eu une mutation les données du RPU concerne la mut. UHCD $mode_sortie = "6"; $destination = "1"; $orientation = "UHCD"; } $this->addElement($elParent, "MODE_SORTIE", $mode_sortie); $this->addElement($elParent, "DESTINATION", $destination); $this->addElement($elParent, "ORIENT", strtoupper($orientation)); if ($affectation->_id) { $this->addElement($elParent, "ENTREE_UHCD", CMbDT::transform($affectation->entree, null, "%d/%m/%Y %H:%M")); $this->addElement($elParent, "MODE_SORTIE_UHCD", $mbObject->_mode_sortie); $this->addElement($elParent, "DESTINATION_UHCD", $sejour->destination); $this->addElement($elParent, "ORIENT_UHCD", strtoupper($mbObject->orientation)); } } else { if (!$sortie) { $this->addElement($elParent, "SORTIE", CMbDT::transform($sejour->sortie_prevue, null, "%d/%m/%Y %H:%M")); } $this->addElement($elParent, "MODE_SORTIE", $mbObject->_mode_sortie); $this->addElement($elParent, "DESTINATION", $sejour->destination); $this->addElement($elParent, "ORIENT", strtoupper($mbObject->orientation)); } }
* $Id$ * * @category dPurgences * @package Mediboard * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version $Revision$ * @link http://www.mediboard.org */ $rpu_id = CValue::get("rpu_id"); $number_tolerance = CAppUI::conf("dPurgences CRPU search_visit_days_count", CGroups::loadCurrent()); $now = CMbDT::dateTime(); $after = CMbDT::dateTime("+ {$number_tolerance} DAY", $now); $rpu = new CRPU(); $rpu->load($rpu_id); $sejour_rpu = $rpu->loadRefSejour(); $patient = $sejour_rpu->loadRefPatient(); $sejour_rpu->type = "comp"; $collisions = $sejour_rpu->getCollisions(); $check_merge = ""; $sejours_futur = array(); $count_collision = count($collisions); $sejour_collision = ""; if ($count_collision == 1) { $sejour_collision = current($collisions); $sejour_collision->loadRefPraticien(); $check_merge = $sejour_rpu->checkMerge($collisions); } else { if (!$count_collision) { $sejour = new CSejour(); $where = array("entree" => "BETWEEN '{$now}' AND '{$after}'", "sejour_id" => "!= '{$sejour->_id}'", "patient_id" => "= '{$patient->_id}'", "annule" => "= '0'");
/** * @see parent::loadComplete() */ function loadComplete() { parent::loadComplete(); // Chek if operations were loaded yet (cf ExObjects) $operations = $this->_ref_operations; if ($operations === null) { $operations = $this->loadRefsOperations(); } foreach ($operations as $operation) { $operation->loadRefsFwd(); $operation->loadBrancardage(); $operation->_ref_chir->loadRefFunction(); $operation->_ref_chir->loadRefSpecCPAM(); $operation->_ref_chir->loadRefDiscipline(); } foreach ($this->_ref_affectations as $affectation) { $affectation->loadRefLit(); $affectation->_ref_lit->loadCompleteView(); } if ($this->_ref_actes_ccam) { foreach ($this->_ref_actes_ccam as $acte_ccam) { $acte_ccam->loadRefsFwd(); } } $this->loadExtDiagnostics(); // Chargement du RPU dans le cas des urgences $this->loadRefRPU(); if ($this->_ref_rpu) { $this->_ref_rpu->loadRefSejour(); } $this->loadNDA(); // Chargement de la consultation anesth pour l'affichage de la fiche d'anesthesie $this->loadRefsConsultAnesth(); $this->_ref_consult_anesth->loadRefConsultation(); $this->loadSuiviMedical(); $this->_ref_patient->loadRefPhotoIdentite(); }