/** * Codage CCAM vers les systèmes de facturation * * @param CHPrimXMLEvenementServeurActes $messageServeurActes Message H'XML serveur actes * * @return CHPrimXMLAcquittementsServeurActes messageAcquittement **/ function evenementServeurActes($messageServeurActes) { // Création de l'échange $echange_hprim = new CEchangeHprim(); $messageAcquittement = null; $data = array(); // Gestion de l'acquittement $domAcquittement = new CHPrimXMLAcquittementsServeurActes(); $domGetEvenement = new CHPrimXMLEvenementsServeurActes(); try { // Récupération des informations du message XML $domGetEvenement->loadXML($messageServeurActes); $doc_errors = $domGetEvenement->schemaValidate(null, true); $data = $domGetEvenement->getEnteteEvenementXML("evenementsServeurActes"); $domAcquittement->identifiant = $data['identifiantMessage']; $domAcquittement->destinataire = $data['idClient']; $domAcquittement->destinataire_libelle = $data['libelleClient']; $domAcquittement->_sous_type_evt = $domGetEvenement->sous_type; // Acquittement d'erreur d'un document XML recu non valide if ($doc_errors !== true) { $messageAcquittement = $domAcquittement->generateAcquittementsServeurActivitePmsi("erreur", "E002", $doc_errors); $doc_valid = $domAcquittement->schemaValidate(); $echange_hprim->date_production = CMbDT::dateTime(); $echange_hprim->emetteur = $data['idClient'] ? $dest_hprim->_id : 0; $echange_hprim->destinataire = CAppUI::conf('mb_id'); $echange_hprim->group_id = CGroups::loadCurrent()->_id; $echange_hprim->type = "pmsi"; $echange_hprim->sous_type = $domGetEvenement->sous_type ? $domGetEvenement->sous_type : "inconnu"; $echange_hprim->_message = $messageServeurActes; $echange_hprim->_acquittement = $messageAcquittement; $echange_hprim->statut_acquittement = "erreur"; $echange_hprim->message_valide = 0; $echange_hprim->acquittement_valide = $doc_valid ? 1 : 0; $echange_hprim->store(); return $messageAcquittement; } // Récupère l'initiateur du message s'il existe if (CAppUI::conf('sip server')) { $echange_hprim->identifiant_emetteur = intval($data['identifiantMessage']); $echange_hprim->loadMatchingObject(); } if (!$echange_hprim->_id) { $echange_hprim->emetteur = $dest_hprim->_id; $echange_hprim->destinataire = CAppUI::conf('mb_id'); $echange_hprim->group_id = CGroups::loadCurrent()->_id; $echange_hprim->identifiant_emetteur = $data['identifiantMessage']; $echange_hprim->type = "pmsi"; $echange_hprim->sous_type = $domGetEvenement->sous_type; $echange_hprim->_message = $messageServeurActes; $echange_hprim->message_valide = 1; } $echange_hprim->date_production = CMbDT::dateTime(); $echange_hprim->store(); $data = array_merge($data, $domGetEvenement->getContentsXML()); $echange_hprim->id_permanent = $data['idSourceVenue']; $messageAcquittement = $domGetEvenement->serveurActes($domAcquittement, $echange_hprim, $data); return $messageAcquittement; } catch (Exception $e) { /*$domAcquittement = new CHPrimXMLAcquittementsServeurActes(); $domAcquittement->identifiant = $data['identifiantMessage']; $domAcquittement->destinataire = $data['idClient']; $domAcquittement->destinataire_libelle = $data['libelleClient']; $domAcquittement->_sous_type_evt = "evenementServeurActe"; $messageAcquittement = $domAcquittement->generateAcquittementsServeurActivitePmsi("erreur", "E009", $e->getMessage()); $doc_valid = $domAcquittement->schemaValidate(); $echange_hprim->_acquittement = $messageAcquittement; $echange_hprim->statut_acquittement = "erreur"; $echange_hprim->acquittement_valide = $doc_valid ? 1 : 0; $echange_hprim->date_echange = CMbDT::dateTime(); $echange_hprim->store();*/ return $messageAcquittement; } }
/** * Event dispatch * * @param CExchangeDataFormat $data_format Exchange data format * * @throws CMbException * * @return string Acquittement */ function event(CExchangeDataFormat $data_format) { $msg = $data_format->_message; /** @var CHPrimXML $evt */ $evt = $data_format->_family_message; $evt->_data_format = $data_format; /** @var CHPrimXMLEvenements $dom_evt */ $dom_evt = $evt->getHPrimXMLEvenements($msg); $dom_evt_class = get_class($dom_evt); if (!in_array($dom_evt_class, $data_format->_messages_supported_class)) { throw new CMbException(CAppUI::tr("CEAIDispatcher-no_message_supported_for_this_actor", $dom_evt_class)); } // Récupération du noeud racine $root = $dom_evt->documentElement; $nodeName = $root->nodeName; // Création de l'échange $echg_hprim = new CEchangeHprim(); $data_format->loadRefsInteropActor(); $data_format->_ref_sender->getConfigs($data_format); $dom_evt->_ref_sender = $data_format->_ref_sender; try { // Récupération des données de l'entête $data = $dom_evt->getEnteteEvenementXML($nodeName); $echg_hprim->load($data_format->_exchange_id); // Gestion des notifications ? if (!$echg_hprim->_id) { $echg_hprim->populateEchange($data_format, $dom_evt); $echg_hprim->identifiant_emetteur = $data['identifiantMessage']; $echg_hprim->message_valide = 1; } $echg_hprim->loadRefsInteropActor(); // Chargement des configs de l'expéditeur $echg_hprim->_ref_sender->getConfigs($data_format); $configs = $echg_hprim->_ref_sender->_configs; $display_errors = isset($configs["display_errors"]) ? $configs["display_errors"] : true; $doc_errors = $dom_evt->schemaValidate(null, false, $display_errors); // Gestion de l'acquittement $dom_acq = CHPrimXMLAcquittements::getAcquittementEvenementXML($dom_evt); $dom_acq->_identifiant_acquitte = $data['identifiantMessage']; $dom_acq->_sous_type_evt = $dom_evt->sous_type; // Acquittement d'erreur d'un document XML recu non valide if ($doc_errors !== true) { $echg_hprim->populateEchange($data_format, $dom_evt); $dom_acq->_ref_echange_hprim = $echg_hprim; $msgAcq = $dom_acq->generateAcquittements($dom_acq instanceof CHPrimXMLAcquittementsServeurActivitePmsi ? "err" : "erreur", "E002", $doc_errors); $doc_valid = $dom_acq->schemaValidate(null, false, $display_errors); $echg_hprim->populateErrorEchange($msgAcq, $doc_valid, "erreur"); return $msgAcq; } $echg_hprim->date_production = CMbDT::dateTime(); $echg_hprim->store(); if (!$data_format->_to_treatment) { return null; } $dom_evt->_ref_echange_hprim = $echg_hprim; $dom_acq->_ref_echange_hprim = $echg_hprim; // Message événement patient if ($dom_evt instanceof CHPrimXMLEvenementsPatients) { return self::eventPatient($dom_evt, $dom_acq, $echg_hprim, $data); } // Message serveur activité PMSI if ($dom_evt instanceof CHPrimXMLEvenementsServeurActivitePmsi) { return self::eventPMSI($dom_evt, $dom_acq, $echg_hprim, $data); } } catch (Exception $e) { $echg_hprim->populateEchange($data_format, $dom_evt); $dom_acq = CHPrimXMLAcquittements::getAcquittementEvenementXML($dom_evt); // Type par défaut $dom_acq->_sous_type_evt = "none"; $dom_acq->_identifiant_acquitte = isset($data['identifiantMessage']) ? $data['identifiantMessage'] : "000000000"; $dom_acq->_ref_echange_hprim = $echg_hprim; $msgAcq = $dom_acq->generateAcquittements($dom_acq instanceof CHPrimXMLAcquittementsServeurActivitePmsi ? "err" : "erreur", "E009", $e->getMessage(), null, $data); $doc_valid = $dom_acq->schemaValidate(null, false, false); $echg_hprim->populateErrorEchange($msgAcq, $doc_valid, "erreur"); return $msgAcq; } return null; }
/** * Génération de l'évènement * * @param CMbObject $mbObject Object * @param bool $referent Référent ? * @param bool $initiateur Initiateur ? * * @return string */ function generateTypeEvenement(CMbObject $mbObject, $referent = false, $initiateur = false) { $echg_hprim = new CEchangeHprim(); $echg_hprim->date_production = CMbDT::dateTime(); $echg_hprim->sender_id = $this->_ref_sender ? $this->_ref_sender->_id : null; $echg_hprim->receiver_id = $this->_ref_receiver->_id; $echg_hprim->group_id = $this->_ref_receiver->group_id; $echg_hprim->type = $this->type; $echg_hprim->sous_type = $this->sous_type; $echg_hprim->object_id = $mbObject->_id; $echg_hprim->_message = utf8_encode($this->saveXML()); $echg_hprim->initiateur_id = $initiateur; $echg_hprim->setObjectClassIdPermanent($mbObject); $echg_hprim->store(); // Chargement des configs du destinataire $dest = $this->_ref_receiver; $dest->loadConfigValues(); $this->_ref_echange_hprim = $echg_hprim; $this->generateEnteteMessage(); $this->generateFromOperation($mbObject, $referent); $doc_valid = $this->schemaValidate(null, false, $this->_ref_receiver->display_errors); $echg_hprim->message_valide = $doc_valid ? 1 : 0; $this->saveTempFile(); $msg = $this->saveXML(); // On sauvegarde toujours en base le message en UTF-8 $echg_hprim->_message = utf8_encode($msg); $echg_hprim->store(); // On envoie le contenu et NON l'entête en UTF-8 si le destinataire est en UTF-8 return $dest->_configs["encoding"] == "UTF-8" ? utf8_encode($msg) : $msg; }
$echg_hprim->group_id = CGroups::loadCurrent()->_id; $echg_hprim->receiver_id = $dest_hprim->_id; $echg_hprim->type = $domEvenement->type; $echg_hprim->sous_type = $domEvenement->sous_type; $echg_hprim->_message = utf8_encode($xmlfile); $doc_valid = $domEvenement->schemaValidate(null, false, $dest_hprim->display_errors); $echg_hprim->message_valide = $doc_valid ? 1 : 0; if ($type == "pmsi") { $echg_hprim->object_class = "CSejour"; $echg_hprim->object_id = str_replace("sj", "", $data['idSourceVenue']); $echg_hprim->id_permanent = $data['idCibleVenue']; } elseif ($type == "actes") { $echg_hprim->object_class = "COperation"; $echg_hprim->object_id = str_replace("op", "", $data["idSourceIntervention"]); } $echg_hprim->store(); // Passage du séjour/opération en facturé $object = new $echg_hprim->object_class(); $object->load($echg_hprim->object_id); $object->facture = 1; $msg = $object->store(); // Suppression du fichier sur le disque if (!$msg) { unlink("{$path}/{$_file}"); } $counter++; if ($counter == $limit) { CAppUI::stepAjax("Traitement de {$counter} fichiers terminé"); return; } }