/** * Send event patient * * @param CHPrimXMLEvenementsPatients $dom_evt Event * @param CMbObject $mbObject Object * @param bool $referent Referent * @param bool $initiateur Initiateur * * @throws CMbException * * @return void */ function sendEvenementPatient(CHPrimXMLEvenementsPatients $dom_evt, CMbObject $mbObject, $referent = null, $initiateur = null) { if (!($msg = $dom_evt->generateTypeEvenement($mbObject, $referent, $initiateur))) { return; } $exchange = $dom_evt->_ref_echange_hprim; if (!$exchange->message_valide) { return null; } if (!$this->synchronous) { return null; } $source = CExchangeSource::get("{$this->_guid}-evenementPatient"); if (!$source->_id || !$source->active) { return; } $source->setData($msg, false, $exchange); try { $source->send(); } catch (Exception $e) { throw new CMbException("CExchangeSource-no-response"); } $exchange->date_echange = CMbDT::dateTime(); $acq = $source->getACQ(); if (!$acq) { $exchange->store(); return; } $dom_acq = new CHPrimXMLAcquittementsPatients(); $dom_acq->loadXML($acq); $dom_acq->_ref_echange_hprim = $exchange; $doc_valid = $dom_acq->schemaValidate(null, false, $this->display_errors); $exchange->statut_acquittement = $dom_acq->getStatutAcquittementPatient(); $exchange->acquittement_valide = $doc_valid ? 1 : 0; $exchange->_acquittement = $acq; $exchange->store(); }
/** * 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); }
} else { $notification->date_echange = ""; $notification->store(); } } } else { // Chargement de l'objet /** @var CEchangeHprim $echange_hprim */ $echange_hprim = new $echange_hprim_classname(); $echange_hprim->load($echange_hprim_id); $dest_hprim = new CDestinataireHprim(); $dest_hprim->load($echange_hprim->receiver_id); $source = CExchangeSource::get("{$dest_hprim->_guid}-evenementPatient"); $source->setData($echange_hprim->_message); $source->send(); $acquittement = $source->getACQ(); if ($acquittement) { $domGetAcquittement = new CHPrimXMLAcquittementsPatients(); $domGetAcquittement->loadXML($acquittement); $doc_valid = $domGetAcquittement->schemaValidate(null, false, $dest_hprim->display_errors); if ($doc_valid) { $echange_hprim->statut_acquittement = $domGetAcquittement->getStatutAcquittementPatient(); } $echange_hprim->acquittement_valide = $doc_valid ? 1 : 0; $echange_hprim->date_echange = CMbDT::dateTime(); $echange_hprim->_acquittement = $acquittement; $echange_hprim->store(); CAppUI::setMsg("Message HPRIM envoyé", UI_MSG_OK); echo CAppUI::getMsg(); } }
/** * Get observations * * @param bool $display_errors Display errors * * @return array */ function getObservations($display_errors = false) { if (!$this->_acquittement) { return null; } if ($this->type == "patients") { $domGetAcquittement = new CHPrimXMLAcquittementsPatients(); $domGetAcquittement->loadXML($this->_acquittement); $doc_valid = $domGetAcquittement->schemaValidate(null, false, false); if ($doc_valid) { return $this->_observations = $domGetAcquittement->getAcquittementObservationPatients(); } } /* @todo a remplir ... */ if ($this->type == "pmsi") { return $this->_observations = array(); } return null; }