$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)));
 }