/** * Mapping de la venue * * @param DOMNode $node Node * @param CSejour $sejour Séjour * * @return array */ function mappingVenue(DOMNode $node, CSejour $sejour) { // On ne récupère que l'entrée et la sortie $sejour = CHPrimXMLEvenementsPatients::getEntree($node, $sejour); $sejour = CHPrimXMLEvenementsPatients::getSortie($node, $sejour); // On ne check pas la cohérence des dates des consults/intervs $sejour->_skip_date_consistencies = true; return $sejour; }
/** * Get event * * @param string $messagePatient Message * * @return CHPrimXMLEvenementsPatients|void */ static function getHPrimXMLEvenements($messagePatient) { $hprimxmldoc = new CHPrimXMLDocument("patient", CHPrimXMLEvenementsPatients::getVersionEvenementsPatients()); // Récupération des informations du message XML $hprimxmldoc->loadXML($messagePatient); $type = $hprimxmldoc->getTypeEvenementPatient(); $dom_evt = new CHPrimXMLEvenementsPatients(); if ($type) { $dom_evt = new CHPrimXMLEventPatient::$evenements[$type](); } $dom_evt->loadXML($messagePatient); return $dom_evt; }
/** * 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(); }
/** * @see parent::__construct() */ function __construct() { $this->sous_type = "venuePatient"; parent::__construct(); }
/** * Construct * * @return CHPrimXMLMouvementPatient */ function __construct() { $this->sous_type = "mouvementPatient"; parent::__construct(); }
/** * @see parent::__construct */ function __construct() { $this->sous_type = "debiteursVenue"; parent::__construct(); }
/** * 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); }
/** * @see parent::__construct() */ function __construct() { $this->sous_type = "enregistrementPatient"; parent::__construct(); }
/** * The message contains a collection of administrative notifications of events occurring to patients in a healthcare * facility. * * @param CHPrimXMLEvenementsPatients $dom_evt DOM event PMSI * @param CHPrimXMLAcquittementsPatients $dom_acq DOM acquittement PMSI * @param CEchangeHprim $echg_hprim Exchange H'XML * @param array &$data Data * * @return string Acquittement **/ static function eventPatient(CHPrimXMLEvenementsPatients $dom_evt, CHPrimXMLAcquittementsPatients $dom_acq, CEchangeHprim $echg_hprim, &$data = array()) { $newPatient = new CPatient(); $newPatient->_eai_exchange_initiator_id = $echg_hprim->_id; $data = array_merge($data, $dom_evt->getContentsXML()); if ($msgAcq = $dom_evt->isActionValide($data['action'], $dom_acq, $echg_hprim)) { return $msgAcq; } // Un événement concernant un patient appartient à l'une des six catégories suivantes : switch (get_class($dom_evt)) { // Enregistrement d'un patient avec son identifiant (ipp) dans le système case "CHPrimXMLEnregistrementPatient": /** @var CHPrimXMLEnregistrementPatient $dom_evt */ $echg_hprim->id_permanent = $data['idSourcePatient']; return $dom_evt->enregistrementPatient($dom_acq, $newPatient, $data); // Fusion de deux ipp // Fusion de deux ipp case "CHPrimXMLFusionPatient": /** @var CHPrimXMLFusionPatient $dom_evt */ $echg_hprim->id_permanent = $data['idSourcePatient']; return $dom_evt->fusionPatient($dom_acq, $newPatient, $data); // Venue d'un patient dans l'établissement avec son numéro de venue // Venue d'un patient dans l'établissement avec son numéro de venue case "CHPrimXMLVenuePatient": /** @var CHPrimXMLVenuePatient $dom_evt */ $echg_hprim->id_permanent = $data['idSourceVenue']; return $dom_evt->venuePatient($dom_acq, $newPatient, $data); // Fusion de deux venues // Fusion de deux venues case "CHPrimXMLFusionVenue": /** @var CHPrimXMLFusionVenue $dom_evt */ $echg_hprim->id_permanent = $data['idSourceVenue']; return $dom_evt->fusionVenue($dom_acq, $newPatient, $data); // Mouvement du patient dans une unité fonctionnelle ou médicale // Mouvement du patient dans une unité fonctionnelle ou médicale case "CHPrimXMLMouvementPatient": /** @var CHPrimXMLMouvementPatient $dom_evt */ $echg_hprim->id_permanent = $data['idSourceVenue']; return $dom_evt->mouvementPatient($dom_acq, $newPatient, $data); // Gestion des débiteurs d'une venue de patient // Gestion des débiteurs d'une venue de patient case "CHPrimXMLDebiteursVenue": /** @var CHPrimXMLDebiteursVenue $dom_evt */ $echg_hprim->id_permanent = $data['idSourcePatient']; return $dom_evt->debiteursVenue($dom_acq, $newPatient, $data); default: return $dom_acq->generateAcquittements("erreur", "E007"); } }