/** * Gestion des débiteurs d'une venue de patient * * @param CHPrimXMLAcquittementsPatients $dom_acq Acquittement * @param CPatient $newPatient Patient * @param array $data Datas * * @return CHPrimXMLAcquittementsPatients $msgAcq **/ function debiteursVenue($dom_acq, $newPatient, $data) { $echg_hprim = $this->_ref_echange_hprim; $sender = $echg_hprim->_ref_sender; $sender->loadConfigValues(); $this->_ref_sender = $sender; // 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; } $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; $codes = array(); $avertissement = $commentaire = null; // Si CIP if (!CAppUI::conf('sip server')) { $sender = $echg_hprim->_ref_sender; // Mapping des mouvements $newPatient = $this->mappingDebiteurs($data['debiteurs'], $newPatient); $newPatient->repair(); $msgPatient = CEAIPatient::storePatient($newPatient, $sender); $commentaire = CEAIPatient::getComment($newPatient); $codes = array($msgPatient ? "A003" : "I002"); if ($msgPatient) { $avertissement = $msgPatient . " "; } } return $echg_hprim->setAck($dom_acq, $codes, $avertissement, $commentaire, $newPatient); }
/** * 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); } }
/** * Fusion and recording a stay with an num_dos in the system * * @param CHPrimXMLAcquittementsPatients $dom_acq Acquittement * @param CPatient $newPatient Patient * @param array $data Datas * * @return string acquittement **/ function fusionVenue(CHPrimXMLAcquittementsPatients $dom_acq, CPatient $newPatient, $data) { $echg_hprim = $this->_ref_echange_hprim; $sender = $echg_hprim->_ref_sender; $sender->loadConfigValues(); $this->_ref_sender = $sender; // 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; } $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; $commentaire = $avertissement = ""; $codes = array(); $mbVenue = new CSejour(); $mbVenueEliminee = new CSejour(); $newVenue = new CSejour(); // Si CIP if (!CAppUI::conf('smp server')) { // Acquittement d'erreur : identifiants source et cible non fournis pour le venue / venueEliminee if (!$data['idSourceVenue'] && !$data['idCibleVenue'] && !$data['idSourceVenueEliminee'] && !$data['idCibleVenueEliminee']) { return $dom_acq->generateAcquittementsError("E100", $commentaire, $newVenue); } $etatVenue = CHPrimXMLEvenementsPatients::getEtatVenue($data['venue']); $etatVenueEliminee = CHPrimXMLEvenementsPatients::getEtatVenue($data['venueEliminee']); $tag = $etatVenue == "préadmission" ? CAppUI::conf('dPplanningOp CSejour tag_dossier_pa') . $sender->_tag_sejour : $sender->_tag_sejour; $idexVenue = CIdSante400::getMatch("CSejour", $tag, $data['idSourceVenue']); if ($mbVenue->load($data['idCibleVenue'])) { // Pas de test dans le cas ou la fusion correspond à un changement de numéro de dossier if ($etatVenue == "préadmission" || $etatVenueEliminee != "préadmission") { if ($idexVenue->object_id && $mbVenue->_id != $idexVenue->object_id) { $commentaire = "L'identifiant source fait référence au séjour : {$idexVenue->object_id} "; $commentaire .= "et l'identifiant cible au séjour : {$mbVenue->_id}."; return $dom_acq->generateAcquittementsError("E104", $commentaire, $newVenue); } } } if (!$mbVenue->_id) { $mbVenue->_id = $idexVenue->object_id; } $tag = $etatVenue == "préadmission" ? CAppUI::conf('dPplanningOp CSejour tag_dossier_pa') . $sender->_tag_sejour : $sender->_tag_sejour; $idexVenueEliminee = CIdSante400::getMatch("CSejour", $tag, $data['idSourceVenueEliminee']); if ($mbVenueEliminee->load($data['idCibleVenueEliminee'])) { if ($idexVenueEliminee->object_id && $mbVenueEliminee->_id != $idexVenueEliminee->object_id) { $commentaire = "L'identifiant source fait référence au séjour : {$idexVenueEliminee->object_id} "; $commentaire .= "et l'identifiant cible au séjour : {$mbVenueEliminee->_id}."; return $dom_acq->generateAcquittementsError("E141", $commentaire, $mbVenueEliminee); } } if (!$mbVenueEliminee->_id) { $mbVenueEliminee->_id = $idexVenueEliminee->object_id; } $messages = array(); $avertissement = null; // Cas 0 : Aucun séjour if (!$mbVenue->_id && !$mbVenueEliminee->_id) { $newVenue->patient_id = $newPatient->_id; $newVenue->group_id = CGroups::loadCurrent()->_id; $messages = $this->mapAndStoreVenue($newVenue, $data, $etatVenueEliminee, $idexVenue, $idexVenueEliminee); } else { if ($mbVenue->_id || $mbVenueEliminee->_id) { // Suppression de l'identifiant du séjour trouvé if ($mbVenue->_id) { $newVenue->load($mbVenue->_id); $messages['msgNumDosVenue'] = $idexVenue->delete(); } else { if ($mbVenueEliminee->_id) { $newVenue->load($mbVenueEliminee->_id); $messages['msgNumDosVenueEliminee'] = $idexVenueEliminee->delete(); } } // Cas 0 $messages = $this->mapAndStoreVenue($newVenue, $data, $etatVenueEliminee, $idexVenue, $idexVenueEliminee); $commentaire = "Séjour modifié : {$newVenue->_id}."; } else { if ($mbVenue->_id && $mbVenueEliminee->_id) { // Suppression des identifiants des séjours trouvés $messages['msgNumDosVenue'] = $idexVenue->delete(); $messages['msgNumDosVenueEliminee'] = $idexVenueEliminee->delete(); // Transfert des backsref $mbVenueEliminee->transferBackRefsFrom($mbVenue); // Suppression de la venue a éliminer $mbVenueEliminee->delete(); // Cas 0 $newVenue->load($mbVenue->_id); $messages = $this->mapAndStoreVenue($newVenue, $data, $etatVenueEliminee, $idexVenue, $idexVenueEliminee); } } } $codes = array($messages['msgVenue'] ? $messages['_code_Venue'] == "store" ? "A103" : "A102" : ($messages['_code_Venue'] == "store" ? "I102" : "I101"), $messages['msgNumDosVenue'] ? "A105" : $messages['_code_NumDos']); if ($messages['msgVenue']) { $avertissement = $messages['msgVenue']; } $commentaire = CEAISejour::getComment($newVenue, $mbVenueEliminee); } return $echg_hprim->setAck($dom_acq, $codes, $avertissement, $commentaire, $newVenue); }