$sejour->loadRefAdresseParPraticien(); $sejour->loadRefPraticien()->loadRefFunction(); $patient = $sejour->loadRefPatient(); $patient->loadIPP(); // Dossier médical $dossier_medical = $patient->loadRefDossierMedical(false); // Chargement du numéro de dossier $sejour->loadNDA(); // Chargement des notes sur le séjourw $sejour->loadRefsNotes(); // Chargement des modes d'entrée $sejour->loadRefEtablissementProvenance(); // Chargement des appels $sejour->loadRefsAppel('admission'); // Chargement de l'affectation $affectation = $sejour->loadRefFirstAffectation(); // Chargement des interventions $whereOperations = array("annulee" => "= '0'"); $operations = $sejour->loadRefsOperations($whereOperations); // Chargement optimisée des prestations CSejour::massCountPrestationSouhaitees(array($sejour)); foreach ($operations as $operation) { $operation->loadRefsActes(); $dossier_anesth = $operation->loadRefsConsultAnesth(); $consultation = $dossier_anesth->loadRefConsultation(); $consultation->loadRefPlageConsult(); $dossier_anesth->_date_consult = $consultation->_date; } if (CAppUI::conf("dPadmissions show_deficience")) { CDossierMedical::massCountAntecedentsByType(array($dossier_medical), "deficience"); }
/** * Create movement * * @param string $code HL7 event code * @param CSejour $sejour Admit * @param CAffectation $affectation Affectation * * @return CMovement|mixed */ function createMovement($code, CSejour $sejour, CAffectation $affectation = null) { $insert = in_array($code, CHL7v2SegmentZBE::$actions["INSERT"]); $update = in_array($code, CHL7v2SegmentZBE::$actions["UPDATE"]); $cancel = in_array($code, CHL7v2SegmentZBE::$actions["CANCEL"]); $movement = new CMovement(); // Initialise le mouvement $movement->sejour_id = $sejour->_id; $receiver = $sejour->_receiver; $configs = $receiver->_configs; $affectation_id = null; if ($affectation) { $current_log = $affectation->_ref_current_log; $first_affectation = $sejour->loadRefFirstAffectation(); /** @var CService $service */ $service = $affectation->loadRefService(); // Si le service est d'UHCD, de radiologie, d'urgence ou // Dans le cas où il s'agit de la première affectation du séjour et qu'on est en type "création" on ne recherche pas // un mouvement avec l'affectation, mais on va prendre le mouvement d'admission if ($service->uhcd || $service->radiologie || $service->urgence || $current_log && $current_log->type == "create" && $first_affectation && $first_affectation->_id == $affectation->_id) { switch ($configs["send_first_affectation"]) { case 'Z99': $affectation_id = $affectation->_id; $affectation = null; break; default: $movement->affectation_id = $affectation->_id; } } else { $movement->affectation_id = $affectation->_id; } } if ($insert) { // Dans le cas d'un insert le type correspond nécessairement au type actuel du séjour $movement->movement_type = $sejour->getMovementType($code); $movement->original_trigger_code = $code; $movement->start_of_movement = $this->getStartOfMovement($code, $sejour, $affectation); $movement->loadMatchingObject(); $movement->store(); return $sejour->_ref_hl7_movement = $movement; } elseif ($update) { // Dans le cas d'un update le type correspond à celui du trigger $movement_type = null; // Mise à jour entrée réelle if ($sejour->fieldModified("entree_reelle")) { $movement_type = "ADMI"; } // Mise à jour sortie réelle if ($sejour->fieldModified("sortie_reelle")) { $movement_type = "SORT"; } $movement->movement_type = $movement_type; // On ne recherche pas parmi les mouvements annulés $movement->cancel = 0; } $order = "affectation_id DESC"; $movements = $movement->loadMatchingList($order); if (!empty($movements)) { $movement = reset($movements); } if ($update) { if ($movement->original_trigger_code == "A02") { if (!$affectation) { $affectation = new CAffectation(); } $affectation->load($movement->affectation_id); } $movement->start_of_movement = $this->getStartOfMovement($movement->original_trigger_code, $sejour, $affectation, $movement); } // on annule un mouvement sauf dans le cas d'une annulation de mutation et que if ($cancel && !($code == "A12" && $movement->original_trigger_code != "A02")) { $movement->cancel = 1; } if ($affectation_id) { $movement->affectation_id = $affectation_id; } $movement->store(); return $sejour->_ref_hl7_movement = $movement; }
/** * Get PL : person location * * @param CInteropReceiver $receiver Receiver * @param CSejour $sejour Admit * @param CAffectation $affectation Affectation * * @return array */ function getPL(CInteropReceiver $receiver, CSejour $sejour, CAffectation $affectation = null) { $group = $sejour->loadRefEtablissement(); $default_name = null; if ($receiver && $receiver->_id && isset($receiver->_configs)) { $default_name = $receiver->_configs["build_PV1_3_1_default"]; } if (!$affectation) { // Chargement de l'affectation courante $affectation = $sejour->getCurrAffectation(); // Si on n'a pas d'affectation on va essayer de chercher la première if (!$affectation->_id) { $affectation = $sejour->loadRefFirstAffectation(); } } $affectation->loadRefLit()->loadRefChambre(); $current_uf = $sejour->getUFs(null, $affectation->_id); $name = null; if ($receiver && $receiver->_id && isset($receiver->_configs)) { switch ($receiver->_configs["build_PV1_3_1"]) { case "UF": $name = $current_uf["hebergement"]->code; break; case "service": if ($affectation->_id) { $name = $affectation->loadRefService()->nom; } if (!$name) { $name = $sejour->loadRefService()->nom; } break; default: } } $pl1 = $name ? $name : $default_name; return array(array($pl1, $this->getPL2($receiver, $affectation), $this->getPL3($receiver, $affectation), $this->getGroupAssigningAuthority($sejour->loadRefEtablissement()), $this->getPL5($receiver), null, CHL7v2TableEntry::mapTo("307", $group->_id))); }