/** * Recherche du séjour par différents identifiants possibles * * @param CSejour $newVenue Admit * @param array $data Datas * * @return bool */ function admitFound(CSejour $newVenue, $data) { $sender = $this->_ref_sender; $venueRI = CValue::read($data['admitIdentifiers'], "RI"); //$venueRISender = CValue::read($data['admitIdentifiers'], "RI_Sender"); $venueVN = CValue::read($data['admitIdentifiers'], "VN"); //$venueNPA = CValue::read($data['admitIdentifiers'], "NPA"); $venueAN = $this->getVenueAN($sender, $data); $NDA = new CIdSante400(); if ($venueAN) { $NDA = CIdSante400::getMatch("CSejour", $sender->_tag_sejour, $venueAN); } if ($NDA->_id) { $newVenue->load($NDA->object_id); return true; } if ($newVenue->load($venueRI)) { // Si on retrouve le séjour par notre identifiant mais qu'on reçoit un NDA CEAISejour::storeNDA($NDA, $newVenue, $sender); return true; } if ($venueVN) { return $this->getSejourByVisitNumber($newVenue, $data); } return false; }
/** * Record admit * * @param CHPrimXMLAcquittementsPatients $dom_acq Acquittement * @param CPatient $newPatient Patient * @param array $data Data * @param CSejour &$newVenue Admit * * @return CHPrimXMLAcquittementsPatients $msgAcq **/ function venuePatient(CHPrimXMLAcquittementsPatients $dom_acq, CPatient $newPatient, $data, &$newVenue = null) { $echg_hprim = $this->_ref_echange_hprim; // Cas 1 : Traitement du patient $domEnregistrementPatient = new CHPrimXMLEnregistrementPatient(); $domEnregistrementPatient->_ref_echange_hprim = $echg_hprim; $msgAcq = $domEnregistrementPatient->enregistrementPatient($dom_acq, $newPatient, $data); if ($echg_hprim->statut_acquittement != "OK") { return $msgAcq; } // Cas 2 : Traitement de la venue $dom_acq = new CHPrimXMLAcquittementsPatients(); $dom_acq->_identifiant_acquitte = $data['identifiantMessage']; $dom_acq->_sous_type_evt = $this->sous_type; $dom_acq->_ref_echange_hprim = $echg_hprim; // Traitement du message des erreurs $avertissement = $msgID400 = $msgVenue = $msgNDA = ""; $_code_Venue = $_code_NumDos = $_num_dos_create = $_modif_venue = false; $sender = $echg_hprim->_ref_sender; $sender->loadConfigValues(); $this->_ref_sender = $sender; $idSourceVenue = $data['idSourceVenue']; $idCibleVenue = $data['idCibleVenue']; if (!$newVenue) { $newVenue = new CSejour(); } // Cas d'une annulation $cancel = false; if ($data['action'] == "suppression") { $cancel = true; } // Affectation du patient $newVenue->patient_id = $newPatient->_id; // Affectation de l'établissement $newVenue->group_id = $sender->group_id; $commentaire = ""; $codes = array(); // Si CIP if (!CAppUI::conf('smp server')) { // Acquittement d'erreur : identifiants source et cible non fournis pour le patient / venue if (!$idSourceVenue && !$idCibleVenue) { return $echg_hprim->setAckError($dom_acq, "E100", $commentaire, $newVenue); } $nda = CIdSante400::getMatch("CSejour", $sender->_tag_sejour, $idSourceVenue); // idSource non connu if (!$nda->_id) { // idCible fourni if ($idCibleVenue) { if ($newVenue->load($idCibleVenue)) { // Dans le cas d'une annulation de la venue if ($cancel) { if ($msgAcq = $this->doNotCancelVenue($newVenue, $dom_acq, $echg_hprim)) { return $msgAcq; } } // Recherche d'un num dossier déjà existant pour cette venue // Mise en trash du numéro de dossier reçu $newVenue->loadNDA(); if ($this->trashNDA($newVenue, $sender)) { $nda->_trash = true; } else { // Mapping du séjour si pas de numéro de dossier $newVenue = $this->mappingVenue($data['venue'], $newVenue, $cancel); $msgVenue = CEAISejour::storeSejour($newVenue, $sender); $commentaire = CEAISejour::getComment($newVenue); $_code_NumDos = "I121"; $_code_Venue = true; } } else { $_code_NumDos = "I120"; } } else { $_code_NumDos = "I122"; } if (!$newVenue->_id) { // Mapping du séjour $newVenue->_NDA = $nda->id400; $newVenue = $this->mappingVenue($data['venue'], $newVenue, $cancel); // Séjour retrouvé if (CAppUI::conf("hprimxml strictSejourMatch")) { if ($newVenue->loadMatchingSejour(null, true, $sender->_configs["use_sortie_matching"])) { // Dans le cas d'une annulation de la venue if ($cancel) { if ($msgAcq = $this->doNotCancelVenue($newVenue, $dom_acq, $echg_hprim)) { return $msgAcq; } } // Recherche d'un num dossier déjà existant pour cette venue // Mise en trash du numéro de dossier reçu $newVenue->loadNDA(); if ($this->trashNDA($newVenue, $sender)) { $nda->_trash = true; } else { // Mapping du séjour $newVenue = $this->mappingVenue($data['venue'], $newVenue, $cancel); $msgVenue = CEAISejour::storeSejour($newVenue, $sender); $commentaire = CEAISejour::getComment($newVenue); $_code_NumDos = "A121"; $_code_Venue = true; } } } else { $collision = $newVenue->getCollisions(); if (count($collision) == 1) { $newVenue = reset($collision); // Dans le cas d'une annulation de la venue if ($cancel) { if ($msgAcq = $this->doNotCancelVenue($newVenue, $dom_acq, $echg_hprim)) { return $msgAcq; } } // Recherche d'un num dossier déjà existant pour cette venue // Mise en trash du numéro de dossier reçu $newVenue->loadNDA(); if ($this->trashNDA($newVenue, $sender)) { $nda->_trash = true; } else { // Mapping du séjour $newVenue = $this->mappingVenue($data['venue'], $newVenue, $cancel); $msgVenue = CEAISejour::storeSejour($newVenue, $sender); $commentaire = CEAISejour::getComment($newVenue); $_code_NumDos = "A122"; $_code_Venue = true; } } } if (!$newVenue->_id && !isset($nda->_trash)) { // Mapping du séjour $newVenue = $this->mappingVenue($data['venue'], $newVenue, $cancel); $msgVenue = CEAISejour::storeSejour($newVenue, $sender); $commentaire = CEAISejour::getComment($newVenue); } } if (isset($nda->_trash)) { $nda->tag = CAppUI::conf('dPplanningOp CSejour tag_dossier_trash') . $sender->_tag_sejour; $nda->loadMatchingObject(); $codes = array("I125"); $commentaire = "Sejour non récupéré. Impossible d'associer le numéro de dossier."; } if ($cancel) { $codes[] = "A130"; $nda->tag = CAppUI::conf('dPplanningOp CSejour tag_dossier_trash') . $sender->_tag_sejour; } $msgNDA = CEAISejour::storeNDA($nda, $newVenue, $sender); if (!isset($nda->_trash)) { $codes = array($msgVenue ? $_code_Venue ? "A103" : "A102" : ($_code_Venue ? "I102" : "I101"), $msgNDA ? "A105" : $_code_NumDos); } if ($msgVenue || $msgNDA) { $avertissement = $msgVenue . " " . $msgNDA; } else { if (!isset($nda->_trash)) { $commentaire .= "Numéro dossier créé : {$nda->id400}."; } } } else { $newVenue->_NDA = $nda->id400; $newVenue->load($nda->object_id); // Dans le cas d'une annulation de la venue if ($cancel) { if ($msgAcq = $this->doNotCancelVenue($newVenue, $dom_acq, $echg_hprim)) { return $msgAcq; } } // Mapping du séjour $newVenue = $this->mappingVenue($data['venue'], $newVenue, $cancel); // idCible non fourni if (!$idCibleVenue) { $_code_NumDos = "I123"; } else { $tmpVenue = new CSejour(); // idCible connu if ($tmpVenue->load($idCibleVenue)) { if ($tmpVenue->_id != $nda->object_id) { $commentaire = "L'identifiant source fait référence au séjour : {$nda->object_id}"; $commentaire .= "et l'identifiant cible au séjour : {$tmpVenue->_id}."; return $dom_acq->generateAcquittementsError("E104", $commentaire, $newVenue); } $_code_NumDos = "I124"; } else { $_code_NumDos = "A120"; } } $msgVenue = CEAISejour::storeSejour($newVenue, $sender); $codes = array($msgVenue ? "A103" : "I102", $_code_NumDos); if ($cancel) { $codes[] = "A130"; $nda->tag = CAppUI::conf('dPplanningOp CSejour tag_dossier_trash') . $sender->_tag_sejour; $nda->last_update = CMbDT::dateTime(); $msgNDA = $nda->store(); } if ($msgVenue || $msgNDA) { $avertissement = $msgVenue . " " . $msgNDA; } $commentaire = CEAISejour::getComment($newVenue); } return $echg_hprim->setAck($dom_acq, $codes, $avertissement, $commentaire, $newVenue); } }