/** * Get admit HL7 event code * * @param CSejour $sejour Admit * * @return null|string */ function getCodeSejour(CSejour $sejour) { $current_log = $sejour->loadLastLog(); if (!in_array($current_log->type, array("create", "store"))) { return null; } $receiver = $sejour->_receiver; $configs = $receiver->_configs; $sejour->loadOldObject(); // Cas d'une pré-admission if ($sejour->_etat == "preadmission") { // Création d'une pré-admission if ($current_log->type == "create") { // Pending admit if ($configs["iti31_pending_event_management"] && $sejour->recuse == -1) { return "A14"; } return "A05"; } // Cancel the pending admission if ($configs["iti31_pending_event_management"] && $sejour->recuse == -1 && $sejour->fieldModified("annule", "1")) { return "A27"; } // Modification d'une pré-admission // Cas d'une annulation ? if ($sejour->fieldModified("annule", "1")) { return "A38"; } // Cas d'un rétablissement d'annulation ? if ($sejour->fieldModified("annule", "0") && $sejour->_old->annule == 1) { return "A05"; } // Annulation de l'admission if ($sejour->_old->entree_reelle && !$sejour->entree_reelle) { return "A11"; } // Réattribution dossier administratif if ($sejour->fieldModified("patient_id")) { return "A44"; } if (!$configs["modification_before_admit"] && !$sejour->entree_reelle) { return; } // Simple modification ? return $this->getModificationAdmitCode($sejour->_receiver); } // Cas d'un séjour en cours (entrée réelle) if ($sejour->_etat == "encours") { // Admission faite $sejour_old = $sejour->_old; if ($sejour->fieldModified("entree_reelle") && !$sejour_old->entree_reelle || $sejour->entree_reelle && !$sejour_old->entree_reelle) { // Patient externe if (in_array($sejour->type, self::$outpatient)) { return "A04"; } // Admission hospitalisé return "A01"; } // Confirmation de sortie if ($sejour->fieldFirstModified("confirme")) { return "A16"; } // Annulation confirmation de sortie if ($sejour->fieldEmptyValued("confirme")) { return "A25"; } // Bascule du type et type_pec if ($sejour->fieldModified("type")) { $sejour->_old->_receiver = $sejour->_receiver; return $this->getBasculeCode($sejour->_old, $sejour); } // Changement du médecin responsable if ($sejour->fieldModified("praticien_id")) { $first_log = $sejour->loadFirstLog(); $praticien_id = $sejour->getValueAtDate($first_log->date, "praticien_id"); $send_change_attending_doctor = $configs["send_change_attending_doctor"]; // Annulation du médecin responsable if ($sejour->praticien_id == $praticien_id) { return $send_change_attending_doctor == "A54" ? "A55" : $this->getModificationAdmitCode($receiver); } return $send_change_attending_doctor == "A54" ? "A54" : $this->getModificationAdmitCode($receiver); } // Réattribution dossier administratif if ($sejour->fieldModified("patient_id")) { return "A44"; } // Cas d'une annulation if ($sejour->fieldModified("annule", "1")) { return "A11"; } // Cas d'une rétablissement on simule une nouvelle admission if ($sejour->fieldModified("annule", "0")) { // Patient externe if (in_array($sejour->type, self::$outpatient)) { return "A04"; } // Admission hospitalisé return "A01"; } // Annulation de la sortie réelle if ($sejour->_old->sortie_reelle && !$sejour->sortie_reelle) { return "A13"; } // Notification sur le transfert if ($configs["iti31_pending_event_management"] && $sejour->fieldModified("mode_sortie") && $sejour->mode_sortie == "transfert") { return "A15"; } // Annulation de la notification sur le transfert if ($configs["iti31_pending_event_management"] && $sejour->_old->mode_sortie && $sejour->_old->mode_sortie == "transfert" && !$sejour->mode_sortie) { return "A26"; } // On ne transmet pas les modifications d'un séjour dès lors que celui-ci a une entrée réelle if (!$receiver->_configs["send_change_after_admit"]) { return null; } // Simple modification ? return $this->getModificationAdmitCode($sejour->_receiver); } // Cas d'un séjour clôturé (sortie réelle) if ($sejour->_etat == "cloture") { // Sortie réelle renseignée if ($sejour->fieldModified("sortie_reelle") && !$sejour->_old->sortie_reelle) { return "A03"; } // Modification de l'admission // Cas d'une annulation ? if ($sejour->fieldModified("annule", "1")) { return "A13"; } // On ne transmet pas les modifications d'un séjour dès lors que celui-ci a une entrée réelle if (!$receiver->_configs["send_change_after_admit"]) { return null; } // Simple modification ? return $this->getModificationAdmitCode($sejour->_receiver); } return null; }