/**
  * Load last message
  *
  * @return void
  */
 function lastMessage()
 {
     $echg_hprim = new CEchangeHprim();
     $echg_hprim->_load_content = false;
     $where = array();
     $where["sender_id"] = " = '{$this->_id}'";
     $key = $echg_hprim->_spec->key;
     $echg_hprim->loadObject($where, "{$key} DESC");
     $this->_ref_last_message = $echg_hprim;
 }
 /**
  * Annulation du séjour ?
  *
  * @param CSejour                        $venue      Venue
  * @param CHPrimXMLAcquittementsPatients $dom_acq    Acquittement
  * @param CEchangeHprim                  $echg_hprim Echange H'XML
  *
  * @return null|string
  */
 function doNotCancelVenue(CSejour $venue, $dom_acq, $echg_hprim)
 {
     // Impossible d'annuler un séjour en cours
     if ($venue->entree_reelle) {
         $commentaire = "La venue {$venue->_id} que vous souhaitez annuler est impossible.";
         return $echg_hprim->setAckError($dom_acq, "E108", $commentaire, $venue);
     }
     // Impossible d'annuler un dossier ayant une intervention
     $where = array();
     $where['annulee'] = " = '0'";
     $venue->loadRefsOperations($where);
     if (count($venue->_ref_operations) > 0) {
         $commentaire = "La venue {$venue->_id} que vous souhaitez annuler est impossible.";
         return $echg_hprim->setAckError($dom_acq, "E109", $commentaire, $venue);
     }
     return null;
 }
Example #3
0
<?php

/**
 * Exchange viewer
 *
 * @category HprimXML
 * @package  Mediboard
 * @author   SARL OpenXtrem <*****@*****.**>
 * @license  GNU General Public License, see http://www.gnu.org/licenses/gpl.html
 * @version  SVN: $Id:$
 * @link     http://www.mediboard.org
 */
CCanDo::checkRead();
$echange_hprim_id = CValue::get("echange_hprim_id");
$echange_hprim = new CEchangeHprim();
$echange_hprim->load($echange_hprim_id);
$evt = new CHPrimXMLEventPatient();
$domGetEvenement = $evt->getHPrimXMLEvenements($this->_message);
$domGetEvenement->formatOutput = true;
$doc_errors_msg = @$domGetEvenement->schemaValidate(null, true, false);
$echange_hprim->_message = utf8_encode($domGetEvenement->saveXML());
// Création du template
$smarty = new CSmartyDP();
$smarty->assign("echange_hprim", $echange_hprim);
$smarty->display("echangeviewer.tpl");
 /**
  * Trigger after event store
  *
  * @param CMbObject $mbObject Object
  *
  * @throws CMbException
  *
  * @return bool
  */
 function onAfterStore(CMbObject $mbObject)
 {
     if (!$this->isHandled($mbObject)) {
         return false;
     }
     $receiver = $mbObject->_receiver;
     if ($mbObject instanceof CCorrespondantPatient) {
         $patient = $mbObject->loadRefPatient();
         $patient->_receiver = $receiver;
     } else {
         $patient = $mbObject;
     }
     // Si Serveur
     if (CAppUI::conf('sip server')) {
         $echange_hprim = new CEchangeHprim();
         if (isset($patient->_eai_exchange_initiator_id)) {
             $echange_hprim->load($patient->_eai_exchange_initiator_id);
         }
         $initiateur = $receiver->_id == $echange_hprim->sender_id ? $echange_hprim->_id : null;
         $group = new CGroups();
         $group->load($receiver->group_id);
         $group->loadConfigValues();
         if (!$initiateur && !$group->_configs["sip_notify_all_actors"]) {
             return false;
         }
         $patient->_id400 = null;
         $idexPatient = new CIdSante400();
         $idexPatient->loadLatestFor($patient, $receiver->_tag_patient);
         $patient->_id400 = $idexPatient->id400;
         $this->generateTypeEvenement("CHPrimXMLEnregistrementPatient", $patient, true, $initiateur);
     } else {
         if (!$receiver->isMessageSupported("CHPrimXMLEnregistrementPatient")) {
             return false;
         }
         if (!$patient->_IPP) {
             // Génération de l'IPP dans le cas de la création, ce dernier n'était pas créé
             if ($msg = $patient->generateIPP()) {
                 CAppUI::setMsg($msg, UI_MSG_ERROR);
             }
             $IPP = new CIdSante400();
             $IPP->loadLatestFor($patient, $receiver->_tag_patient);
             $patient->_IPP = $IPP->id400;
         }
         // Envoi pas les patients qui n'ont pas d'IPP
         if (!$receiver->_configs["send_all_patients"] && !$patient->_IPP) {
             return false;
         }
         $this->sendEvenementPatient("CHPrimXMLEnregistrementPatient", $patient);
         if ($receiver->_configs["send_insured_without_admit"]) {
             if (!$receiver->isMessageSupported("CHPrimXMLDebiteursVenue")) {
                 return false;
             }
             $sejour = new CSejour();
             $where = array();
             $where["patient_id"] = "= '{$patient->_id}'";
             $where["group_id"] = "= '{$receiver->group_id}'";
             $datetime = CMbDT::dateTime();
             $where["sortie"] = ">= '{$datetime}'";
             /** @var CSejour[] $sejours */
             $sejours = $sejour->loadList($where);
             // On va transmettre les informations sur le débiteur pour le séjour en cours, et ceux à venir
             foreach ($sejours as $_sejour) {
                 if (!$patient->code_regime) {
                     continue;
                 }
                 $_sejour->_receiver = $receiver;
                 $_sejour->loadLastLog();
                 $_sejour->loadRefPatient();
                 if (!$_sejour->_NDA) {
                     // Génération du NDA dans le cas de la création, ce dernier n'était pas créé
                     if ($msg = $_sejour->generateNDA()) {
                         CAppUI::setMsg($msg, UI_MSG_ERROR);
                     }
                     $NDA = new CIdSante400();
                     $NDA->loadLatestFor($_sejour, $receiver->_tag_sejour);
                     $sejour->_NDA = $NDA->id400;
                 }
                 if ($receiver->isMessageSupported("CHPrimXMLDebiteursVenue")) {
                     $this->sendEvenementPatient("CHPrimXMLDebiteursVenue", $_sejour);
                 }
             }
         }
         $patient->_IPP = null;
     }
     return true;
 }
 /**
  * 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;
     }
 }
 /**
  * Trigger after event store
  *
  * @param CMbObject $mbObject Object
  *
  * @throws CMbException
  *
  * @return bool
  */
 function onAfterStore(CMbObject $mbObject)
 {
     if (!$this->isHandled($mbObject)) {
         return false;
     }
     $receiver = $mbObject->_receiver;
     // Traitement Sejour
     if ($mbObject instanceof CSejour) {
         $sejour = $mbObject;
         $sejour->loadRefPraticien();
         $sejour->loadNDA();
         $sejour->loadLastLog();
         $sejour->loadRefPatient();
         $sejour->loadRefAdresseParPraticien();
         // Si Serveur
         if (CAppUI::conf('smp server')) {
             $echange_hprim = new CEchangeHprim();
             if (isset($sejour->_eai_exchange_initiator_id)) {
                 $echange_hprim->load($sejour->_eai_exchange_initiator_id);
             }
             $initiateur = $receiver->_id == $echange_hprim->sender_id ? $echange_hprim->_id : null;
             $group = new CGroups();
             $group->load($receiver->group_id);
             $group->loadConfigValues();
             $mbObject->_id400 = null;
             $idexPatient = new CIdSante400();
             $idexPatient->loadLatestFor($sejour, $receiver->_tag_sejour);
             $mbObject->_id400 = $idexPatient->id400;
             $this->generateTypeEvenement("CHPrimXMLVenuePatient", $sejour, true, $initiateur);
         } else {
             if (!$receiver->isMessageSupported("CHPrimXMLVenuePatient")) {
                 return false;
             }
             if (CGroups::loadCurrent()->_id != $receiver->group_id) {
                 return false;
             }
             if (!$sejour->_NDA) {
                 // Génération du NDA dans le cas de la création, ce dernier n'était pas créé
                 if ($msg = $sejour->generateNDA()) {
                     CAppUI::setMsg($msg, UI_MSG_ERROR);
                 }
                 $NDA = new CIdSante400();
                 $NDA->loadLatestFor($sejour, $receiver->_tag_sejour);
                 $sejour->_NDA = $NDA->id400;
             }
             if (!$sejour->_ref_patient->_IPP) {
                 $IPP = new CIdSante400();
                 //Paramétrage de l'id 400
                 $IPP->loadLatestFor($sejour->_ref_patient, $receiver->_tag_patient);
                 $sejour->_ref_patient->_IPP = $IPP->id400;
             }
             $this->sendEvenementPatient("CHPrimXMLVenuePatient", $sejour);
             if ($receiver->isMessageSupported("CHPrimXMLDebiteursVenue") && $sejour->_ref_patient->code_regime) {
                 $this->sendEvenementPatient("CHPrimXMLDebiteursVenue", $sejour);
             }
             if ($receiver->isMessageSupported("CHPrimXMLMouvementPatient") && $sejour->_ref_last_log->type == "create") {
                 $affectation = $sejour->loadRefFirstAffectation();
                 // $this->sendEvenementPatient("CHPrimXMLMouvementPatient", $affectation);
             }
             $sejour->_NDA = null;
         }
         return true;
     } elseif ($mbObject instanceof CAffectation) {
         $affectation = $mbObject;
         $current_log = $affectation->_ref_current_log;
         if (!$current_log || $affectation->_no_synchro || !in_array($current_log->type, array("create", "store"))) {
             return false;
         }
         // Cas où :
         // * on est l'initiateur du message
         // * le destinataire ne supporte pas le message
         if (!$receiver->isMessageSupported("CHPrimXMLMouvementPatient")) {
             return false;
         }
         // Affectation non liée à un séjour
         $sejour = $affectation->loadRefSejour();
         if (!$sejour->_id) {
             return false;
         }
         $sejour->loadRefPatient();
         $sejour->_receiver = $receiver;
         // Envoi de l'événement
         $this->sendEvenementPatient("CHPrimXMLMouvementPatient", $affectation);
     }
     return true;
 }
Example #7
0
 * @category HprimXML
 * @package  Mediboard
 * @author   SARL OpenXtrem <*****@*****.**>
 * @license  GNU General Public License, see http://www.gnu.org/licenses/gpl.html
 * @version  SVN: $Id: ajax_send_message.php 20185 2013-08-16 15:31:17Z lryo $
 * @link     http://www.mediboard.org
 */
CCanDo::checkRead();
$echange_hprim_id = CValue::get("echange_xml_id");
$echange_hprim_classname = CValue::get("echange_xml_classname");
$where = '';
if (!$echange_hprim_id) {
    if (!($limit = CAppUI::conf('sip batch_count'))) {
        return;
    }
    $echange_hprim = new CEchangeHprim();
    $where['statut_acquittement'] = "IS NULL";
    $where['sender_id'] = "IS NULL";
    $where['receiver_id'] = "IS NOT NULL";
    $where['message_valide'] = "= '1'";
    $where['acquittement_valide'] = "IS NULL";
    $where['acquittement_content_id'] = "IS NULL";
    $where['date_echange'] = "IS NULL";
    $where['date_production'] = "BETWEEN '" . CMbDT::dateTime("-3 DAYS") . "' AND '" . CMbDT::dateTime("+1 DAYS") . "'";
    $notifications = $echange_hprim->loadList($where, null, $limit);
    // Effectue le traitement d'enregistrement des notifications sur lequel le cron vient de passer
    // ce qui permet la gestion des doublons
    foreach ($notifications as $notification) {
        /** @var CEchangeHprim $notification */
        $notification->date_echange = CMbDT::dateTime();
        $notification->store();
 /**
  * Récupération du tag du mediuser
  *
  * @return string
  */
 function getTagMediuser()
 {
     $this->_ref_echange_hprim->loadRefsInteropActor();
     return $this->_ref_echange_hprim->_ref_receiver->_tag_mediuser;
 }
 /**
  * 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;
 }
Example #10
0
     $domEvenement = new CHPrimXMLEvenementsServeurActes();
     $evt = "evenementsServeurActes";
 } else {
     CAppUI::stepAjax("Type de l'échange invalide", UI_MSG_ERROR);
 }
 $files = CAppUI::readFiles($path);
 ini_set("memory_limit", "512M");
 CApp::setTimeLimit(360);
 CMbObject::$useObjectCache = false;
 $counter = 0;
 foreach ($files as $_file) {
     $xmlfile = file_get_contents("{$path}/{$_file}");
     // Chargement du fichier XML
     $domEvenement->loadXML($xmlfile);
     // Création de l'échange
     $echg_hprim = new CEchangeHprim();
     $data = $domEvenement->getEnteteEvenementXML($evt);
     $data = array_merge($data, $domEvenement->getContentsXML());
     $dest_hprim = new CDestinataireHprim();
     $dest_hprim->register($data['idClient']);
     $echg_hprim->date_production = $data['dateHeureProduction'];
     $echg_hprim->date_echange = date("Y-m-d H:m:s", filemtime("{$path}/{$_file}"));
     $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";