/**
  * Handle event A47
  *
  * @param CHL7Acknowledgment $ack     Acknowledgment
  * @param CPatient           $patient Person
  * @param array              $data    Data
  *
  * @return string
  */
 function handleA47(CHL7Acknowledgment $ack, CPatient $patient, $data)
 {
     $exchange_hl7v2 = $this->_ref_exchange_hl7v2;
     $sender = $exchange_hl7v2->_ref_sender;
     $sender->loadConfigValues();
     $this->_ref_sender = $sender;
     $incorrect_identifier = null;
     // Traitement du mode simple, cad
     if (CHL7v2Message::$handle_mode == "simple") {
         $MRG_4 = $this->queryNodes("MRG.4", $data["MRG"])->item(0);
         $incorrect_identifier = $this->queryTextNode("CX.1", $MRG_4);
         $patient->load($incorrect_identifier);
         // ID non connu (non fourni ou non retrouvé)
         if (!$incorrect_identifier || !$patient->_id) {
             return $exchange_hl7v2->setAckAR($ack, "E141", null, $patient);
         }
     } else {
         $MRG_1 = $this->queryNodes("MRG.1", $data["MRG"])->item(0);
         if ($this->queryTextNode("CX.5", $MRG_1) == "PI") {
             $incorrect_identifier = $this->queryTextNode("CX.1", $MRG_1);
         }
         // Chargement de l'IPP
         $IPP_incorrect = new CIdSante400();
         if ($incorrect_identifier) {
             $IPP_incorrect = CIdSante400::getMatch("CPatient", $sender->_tag_patient, $incorrect_identifier);
         }
         // PI non connu (non fourni ou non retrouvé)
         if (!$incorrect_identifier || !$IPP_incorrect->_id) {
             return $exchange_hl7v2->setAckAR($ack, "E141", null, $patient);
         }
         $patient->load($IPP_incorrect->object_id);
         // Passage en trash de l'IPP du patient a éliminer
         if ($msg = $patient->trashIPP($IPP_incorrect)) {
             return $exchange_hl7v2->setAckAR($ack, "E140", $msg, $patient);
         }
     }
     // Sauvegarde du nouvel IPP
     $IPP = new CIdSante400();
     $IPP->object_id = $patient->_id;
     $IPP->object_class = "CPatient";
     $IPP->id400 = $data['personIdentifiers']["PI"];
     $IPP->tag = $sender->_tag_patient;
     $IPP->last_update = CMbDT::dateTime();
     if ($msg = $IPP->store()) {
         return $exchange_hl7v2->setAckAR($ack, "E140", $msg, $patient);
     }
     return $exchange_hl7v2->setAckAA($ack, "I140", null, $patient);
 }
示例#2
0
 /**
  * Search and map a user inside the LDAP
  *
  * @param CUser       $user
  * @param CSourceLDAP $source_ldap
  * @param resource    $ldapconn
  * @param string      $person       [optional]
  * @param string      $filter       [optional]
  * @param boolean     $force_create [optional]
  *
  * @return CUser
  */
 static function searchAndMap(CUser $user, CSourceLDAP $source_ldap, $ldapconn, $person = null, $filter = null, $force_create = false)
 {
     if (!$person) {
         $person = $user->user_username;
     }
     $person = utf8_encode($person);
     if (!$filter) {
         $filter = "(samaccountname={$person})";
     }
     $results = $source_ldap->ldap_search($ldapconn, $filter);
     if (!$results || $results["count"] == 0) {
         $user->_bound = false;
         $user->_count_ldap = 0;
         return $user;
     }
     if ($results["count"] > 1) {
         throw new CMbException("CSourceLDAP_too-many-results");
     }
     $results = $results[0];
     $idex = new CIdSante400();
     $idex->tag = CAppUI::conf("admin LDAP ldap_tag");
     $idex->object_class = "CUser";
     $idex->id400 = self::getObjectGUID($results);
     $idex->loadMatchingObject();
     // On sauvegarde le password renseigné
     $user_password = $user->user_password;
     $_user_password = $user->_user_password;
     // objectguid retrouvé on charge le user
     if ($idex->_id) {
         $user = new CUser();
         $user->load($idex->object_id);
     } else {
         // objectguid non retrouvé on associe à l'user courant l'objectguid
         // Si on est pas en mode création on le recherche
         if (!$force_create) {
             // Suppression du password pour le loadMatchingObject
             $user->user_password = null;
             $user->_user_password = null;
             $user->loadMatchingObject();
             if (!$user->_id) {
                 throw new CMbException("Auth-failed-user-unknown");
             }
         }
     }
     $user->_bound = true;
     $user = self::mapTo($user, $results);
     // Save Mediuser variables
     $actif = $user->_user_actif;
     $deb_activite = $user->_user_deb_activite;
     $fin_activite = $user->_user_fin_activite;
     // Restore User password variables
     $user->user_password = $user_password;
     $user->_user_password = $_user_password;
     if (!$user->user_type) {
         $user->user_type = 0;
     }
     // Pas de profil
     $user->template = 0;
     $user->user_login_errors = 0;
     $user->repair();
     $msg = $user->store();
     if ($msg) {
         throw new CMbException($msg);
     }
     if (!$force_create && !$user->_ref_mediuser->actif || $force_create && !$actif) {
         throw new CMbException("Auth-failed-user-deactivated");
     }
     // Restore Mediuser variables
     $user->_user_actif = $actif;
     $user->_user_deb_activite = $deb_activite;
     $user->_user_fin_activite = $fin_activite;
     $user->_count_ldap = 1;
     if (!$idex->_id) {
         $idex->object_id = $user->_id;
         $idex->last_update = CMbDT::dateTime();
         if ($msg = $idex->store()) {
             throw new CMbException($msg);
         }
     }
     return $user;
 }
 /**
  * Store Acte
  *
  * @param String[] $data    Value
  * @param String   $type    CCAM or NGAP
  * @param CSejour  $sejour  Sejour
  * @param CPatient $patient Patient
  * @param String   $tag     Tag
  *
  * @return String|CActe;
  */
 function storeActe($data, $type, $sejour, $patient, $tag)
 {
     $code_acte = "code";
     if ($type == "CCAM") {
         $field_object = "codes_ccam";
         $code_acte = "code_acte";
     }
     $action = $data["action"];
     $idex = CIdSante400::getMatch("CActe{$type}", $tag, $data["idSourceActe{$type}"]);
     $executant_id = $data["executant_id"];
     if ($idex->_id) {
         $class = "CActe{$type}";
         /** @var CActeCCAM|CActeNGAP $acte */
         $acte = new $class();
         $acte->load($idex->object_id);
         $object = $acte->loadTargetObject();
         if ($action === "suppression") {
             if ($type == "CCAM") {
                 $code = $acte->{$code_acte};
                 $replace = explode("|", $object->{$field_object});
                 CMbArray::removeValue($code, $replace);
                 $object->{$field_object} = $replace ? implode("|", $replace) : "";
             }
             if ($msg = $this->deleteActe($acte, $object, $idex)) {
                 return $msg;
             }
             return $acte;
         }
         /** @var CActeCCAM|CActeNGAP $new_acte */
         $new_acte = $this->{"createActe{$type}"}($data["acte{$type}"], $object, $executant_id);
         $modification = $new_acte->{$code_acte} != $acte->{$code_acte};
         if ($modification) {
             if ($type == "CCAM") {
                 $new_code = preg_replace("#{$acte}->{$code_acte}#", $new_acte->{$code_acte}, $object->{$field_object}, 1);
                 $object->{$field_object} = $new_code;
             }
             if ($msg = $this->deleteActe($acte, $object, $idex)) {
                 return $msg;
             }
             $acte = new $class();
         }
         $acte->extendsWith($new_acte, true);
         if ($msg = $acte->store()) {
             return $msg;
         }
         if ($modification) {
             $idex->setObject($acte);
             if ($msg = $idex->store()) {
                 return $msg;
             }
         }
         return $acte;
     }
     if ($action !== "création") {
         return "{$action} impossible car l'acte n'a pas été trouvé";
     }
     $date = CMbDT::date($data["acte{$type}"]["date"]);
     $object = $this->getObject($date, $executant_id, $patient->_id);
     $object = $object ? $object : $sejour;
     /** @var CActe $acte */
     $acte = $this->{"createActe{$type}"}($data["acte{$type}"], $object, $executant_id);
     if ($type == "CCAM") {
         $object->{$field_object} .= $object->{$field_object} ? "|{$acte->{$code_acte}}" : $acte->{$code_acte};
     }
     if ($msg = $object->store()) {
         return $msg;
     }
     if ($msg = $acte->store()) {
         return $msg;
     }
     $idex = new CIdSante400();
     $idex->id400 = $data["idSourceActe{$type}"];
     $idex->tag = $tag;
     $idex->setObject($acte);
     if ($msg = $idex->store()) {
         return $msg;
     }
     return $acte;
 }
示例#4
0
 /**
  * Recording RI sender
  *
  * @param string         $RI_sender Idex value
  * @param CPatient       $patient   Patient
  * @param CInteropSender $sender    Sender
  *
  * @return null|string null if successful otherwise returns and error message
  */
 static function storeRISender($RI_sender, CPatient $patient, CInteropSender $sender)
 {
     $domain = $sender->loadRefDomain();
     $idex = new CIdSante400();
     $idex->object_class = "CPatient";
     $idex->object_id = $patient->_id;
     $idex->tag = $domain->tag;
     $idex->id400 = $RI_sender;
     return $idex->store();
 }
 /**
  * Merge an array of objects
  *
  * @param self[] $objects An array of CMbObject to merge
  * @param bool   $fast    Tell wether to use SQL (fast) or PHP (slow but checked and logged) algorithm
  *
  * @return string|null
  */
 function merge($objects, $fast = false)
 {
     $alternative_mode = $this->_id != null;
     // Modes and object count check
     if ($alternative_mode && count($objects) > 1) {
         return "mergeAlternativeTooManyObjects";
     }
     if (!$alternative_mode && count($objects) < 2) {
         return "mergeTooFewObjects";
     }
     // Trigger before event
     $this->notify("BeforeMerge");
     if (!$this->_id && ($msg = $this->store())) {
         $this->notify("MergeFailure");
         return $msg;
     }
     foreach ($objects as $object) {
         $this->_merging[$object->_id] = $object;
     }
     foreach ($objects as &$object) {
         $msg = $fast ? $this->fastTransferBackRefsFrom($object) : $this->transferBackRefsFrom($object);
         if ($msg) {
             $this->notify("MergeFailure");
             return $msg;
         }
         $object_id = $object->_id;
         $object->_mergeDeletion = true;
         if ($msg = $object->delete()) {
             return $msg;
         }
         // If external IDs are available, we save old objects' id as external IDs
         if (CModule::getInstalled("dPsante400")) {
             $idex = new CIdSante400();
             $idex->setObject($this);
             $idex->tag = "merged";
             $idex->id400 = $object_id;
             $idex->last_update = CMbDT::dateTime();
             $idex->store();
         }
     }
     // Trigger after event
     $this->notify("AfterMerge");
     return $this->store();
 }
 /**
  * Trigger when merge failed
  *
  * @param CMbObject $mbObject Object
  *
  * @return bool
  */
 function onMergeFailure(CMbObject $mbObject)
 {
     if (!$this->isHandled($mbObject)) {
         return false;
     }
     // On va réatribuer les idexs en cas de problème dans la fusion
     foreach ($mbObject->_fusion as $group_id => $infos_fus) {
         if (!$infos_fus || !array_key_exists("idexs_changed", $infos_fus)) {
             return false;
         }
         foreach ($infos_fus["idexs_changed"] as $idex_id => $tag_name) {
             $idex = new CIdSante400();
             $idex->load($idex_id);
             if (!$idex->_id) {
                 continue;
             }
             // Réattribution sur l'objet non supprimé
             $sejour_elimine = $infos_fus["sejourElimine"];
             $idex->object_id = $sejour_elimine->_id;
             $idex->tag = $tag_name;
             $idex->last_update = CMbDT::dateTime();
             $idex->store();
         }
     }
 }
 * @license  GNU General Public License, see http://www.gnu.org/licenses/gpl.html 
 * @version  SVN: $Id:$ 
 * @link     http://www.mediboard.org
 */
CApp::setTimeLimit(240);
CApp::setMemoryLimit("512M");
CCanDo::checkAdmin();
$d1_id = CValue::request("domain_1_id");
$d2_id = CValue::request("domain_2_id");
$idex_ids = CValue::request("idex_ids", array());
/* Traitement prélable pour passer en "trash" les idexs en erreurs */
foreach ($idex_ids as $_idex => $idex_id) {
    $idex = new CIdSante400();
    $idex->load($idex_id);
    $idex->tag = "trash_{$idex->tag}";
    $idex->store();
}
/* checkMerge */
$domains_id = array($d1_id, $d2_id);
$domains = array();
$checkMerge = array();
if (count($domains_id) != 2) {
    $checkMerge[] = CAppUI::tr("mergeTooFewObjects");
}
foreach ($domains_id as $domain_id) {
    $domain = new CDomain();
    // the CMbObject is loaded
    if (!$domain->load($domain_id)) {
        CAppUI::setMsg("Chargement impossible de l'objet [{$domain_id}]", UI_MSG_ERROR);
        continue;
    }
示例#8
0
if ($verouillee) {
    $tagCatalogue = CAppUI::conf('dPlabo CCatalogueLabo remote_name');
    $prescription_labo_id = CValue::post("prescription_labo_id");
    $prescription = new CPrescriptionLabo();
    $prescription->load($prescription_labo_id);
    if (!$prescription->verouillee) {
        $prescription->loadRefsFwd();
        // Chargement de l'id400 "labo code4" du praticien
        $prat =& $prescription->_ref_praticien;
        $tagCode4 = "labo code4";
        $idSantePratCode4 = new CIdSante400();
        $idSantePratCode4->loadLatestFor($prat, $tagCode4);
        // creation de l'id400 de la prescription
        $idPresc = new CIdSante400();
        //Paramétrage de l'id 400
        $idPresc->tag = "{$tagCatalogue} Prat:" . str_pad($idSantePratCode4->id400, 4, '0', STR_PAD_LEFT);
        // tag LABO Prat: 0017
        $idPresc->object_class = "CPrescriptionLabo";
        // Chargement du dernier id externe de prescription du praticien s'il existe
        $idPresc->loadMatchingObject("id400 DESC");
        // Incrementation de l'id400
        $idPresc->id400++;
        $idPresc->id400 = str_pad($idPresc->id400, 4, '0', STR_PAD_LEFT);
        $idPresc->_id = null;
        $idPresc->last_update = CMbDT::dateTime();
        $idPresc->object_id = $prescription->_id;
        $idPresc->store();
    }
}
$do = new CDoObjectAddEdit("CPrescriptionLabo");
$do->doIt();
示例#9
0
 /**
  * Recording idex
  * 
  * @param CIdSante400    $idex   Object id400
  * @param CMbObject      $object Object
  * @param CInteropSender $sender Sender
  * 
  * @return null|string null if successful otherwise returns and error message
  */
 static function storeIdex(CIdSante400 $idex, CMbObject $object, CInteropSender $sender)
 {
     $idex->object_id = $object->_id;
     $idex->last_update = CMbDT::dateTime();
     return $idex->store();
 }
 /**
  * store the idex
  *
  * @param CPatient|CSejour $object     patient or sejour
  * @param String[]         $identifier identifiers
  * @param String           $tag        tag
  *
  * @return null|String
  */
 function storeIdex($object, $identifier, $tag)
 {
     $idex = new CIdSante400();
     $idex->tag = "{$tag}";
     $idex->id400 = "{$identifier}";
     $idex->setObject($object);
     $idex->loadMatchingObject();
     if ($msg = $idex->store()) {
         return $msg;
     }
     return null;
 }
 /**
  * @see parent::store()
  */
 function store()
 {
     $this->completeField("type");
     if ($this->type == "alle") {
         $this->loadRefDossierMedical();
         $dossier_medical = $this->_ref_dossier_medical;
         if ($dossier_medical->object_class == "CPatient") {
             DSHM::remKeys("alertes-*-CPatient-" . $dossier_medical->object_id);
         }
     }
     // Save owner and creation date
     if (!$this->_id) {
         if (!$this->creation_date) {
             $this->creation_date = CMbDT::dateTime();
         }
         if (!$this->owner_id) {
             $this->owner_id = CMediusers::get()->_id;
         }
     }
     // Standard store
     if ($msg = parent::store()) {
         return $msg;
     }
     // DossierMedical store
     $this->checkCodeCim10();
     // Sauvegarde de l'identifiant externe (code composant de la BDM pour le cas des allergies)
     if ($this->_idex_code && $this->_idex_tag) {
         $idex = new CIdSante400();
         $idex->setObject($this);
         $idex->id400 = $this->_idex_code;
         $idex->tag = $this->_idex_tag;
         $idex->store();
     }
     return null;
 }
 /**
  * Mapping et enregistrement de la venue
  *
  * @param CSejour     &$newVenue          Séjour
  * @param array       $data               Datas
  * @param string      $etatVenueEliminee  État de la venue à éliminer
  * @param CIdSante400 &$idexVenue         Idex de la venue
  * @param CIdSante400 &$idexVenueEliminee Idex de la venue à éliminer
  *
  * @return array
  */
 private function mapAndStoreVenue(&$newVenue, $data, $etatVenueEliminee, CIdSante400 &$idexVenue, CIdSante400 &$idexVenueEliminee)
 {
     $sender = new CDestinataireHprim();
     $sender->nom = $data['idClient'];
     $sender->loadMatchingObject();
     $messages = array();
     // Mapping de la venue a éliminer
     $newVenue = $this->mappingVenue($data['venueEliminee'], $newVenue);
     // Mapping de la venue a garder
     $newVenue = $this->mappingVenue($data['venue'], $newVenue);
     // Notifier les autres destinataires
     $newVenue->_eai_sender_guid = $sender->_guid;
     // Séjour retrouvé
     if ($newVenue->loadMatchingSejour() || $newVenue->_id) {
         $messages['_code_NumDos'] = "A121";
         $messages['_code_Venue'] = "store";
     } else {
         $messages['_code_NumDos'] = "I122";
         $messages['_code_Venue'] = "create";
     }
     $messages['msgVenue'] = $newVenue->store();
     $messages['commentaire'] = CEAISejour::getComment($newVenue);
     $idexVenue->object_id = $newVenue->_id;
     $idexVenue->last_update = CMbDT::dateTime();
     $messages['msgNumDosVenue'] = $idexVenue->store();
     $idexVenueEliminee->tag = $etatVenueEliminee != "préadmission" ? CAppUI::conf('dPplanningOp CSejour tag_dossier_cancel') . $sender->_tag_sejour : CAppUI::conf('dPplanningOp CSejour tag_dossier_pa') . $sender->_tag_sejour;
     $idexVenueEliminee->object_id = $newVenue->_id;
     $idexVenueEliminee->last_update = CMbDT::dateTime();
     $messages['msgNumDosVenueEliminee'] = $idexVenueEliminee->store();
     return $messages;
 }
 /**
  * Handle receive order message
  *
  * @param CHL7v2ReceiveOrderMessageResponse $ack     Acknowledgment
  * @param CPatient                          $patient Person
  * @param array                             $data    Data
  *
  * @return string|void
  */
 function handle(CHL7v2ReceiveOrderMessageResponse $ack, CPatient $patient, $data)
 {
     $exchange_hl7v2 = $this->_ref_exchange_hl7v2;
     $sender = $exchange_hl7v2->_ref_sender;
     $sender->loadConfigValues();
     $this->_ref_sender = $sender;
     $patientPI = CValue::read($data['personIdentifiers'], "PI");
     if (!$patientPI) {
         return $exchange_hl7v2->setORRError($ack, "E007");
     }
     $IPP = CIdSante400::getMatch("CPatient", $sender->_tag_patient, $patientPI);
     // Patient non retrouvé par son IPP
     if (!$IPP->_id) {
         return $exchange_hl7v2->setORRError($ack, "E105");
     }
     $patient->load($IPP->object_id);
     $venueAN = $this->getVenueAN($sender, $data);
     $NDA = CIdSante400::getMatch("CSejour", $sender->_tag_sejour, $venueAN);
     // Séjour non retrouvé par son NDA
     if (!$NDA->_id) {
         return $exchange_hl7v2->setORRError($ack, "E205");
     }
     $sejour = new CSejour();
     $sejour->load($NDA->object_id);
     // Common order - ORC
     $orc = $data["ORC"];
     $obr = $data["OBR"];
     $event_request = $this->getEventRequest($orc);
     $consultation = new CConsultation();
     $placer_id = $this->getPlacerNumber($orc);
     $filler_id = $this->getFillerNumber($orc);
     switch ($event_request) {
         // new order
         case "SN":
             $datetime = $this->getDate($orc);
             $orc12 = $this->getDoctorNode($orc, $data);
             $mediuser = new CMediusers();
             $medisuer_id = $this->getDoctor($orc12, $mediuser);
             if (!$medisuer_id) {
                 return $exchange_hl7v2->setORRError($ack, "E801");
             }
             $consultation->createByDatetime($datetime, $medisuer_id, $patient->_id);
             if (!$consultation->_id) {
                 return $exchange_hl7v2->setORRError($ack, "E802");
             }
             $idex = new CIdSante400();
             $idex->id400 = $filler_id;
             $idex->tag = $sender->_tag_consultation;
             $idex->setObject($consultation);
             $idex->store();
             break;
             //Modification
         //Modification
         case "SC":
             $consultation->load($placer_id);
             $status_code = $this->getStatusCode($orc);
             switch ($status_code) {
                 case "CM":
                     $status = CConsultation::TERMINE;
                     break;
                 case "OD":
                     $status = CConsultation::PLANIFIE;
                     break;
                 case "IP":
                     $status = CConsultation::EN_COURS;
                     break;
                 default:
                     return $exchange_hl7v2->setORRError($ack, "E803");
             }
             $consultation->chrono = $status;
             if ($msg = $consultation->store()) {
                 return $exchange_hl7v2->setORRError($ack, "E804", $msg);
             }
             $obr4 = $this->getExamen("OBR.4", $obr, $data);
             //Identifiant de l'élément de prescription
             $examen_id = $this->getExamenID($obr4);
             $examen_name = $this->getExamenName($obr4);
             //todo gérer avec l'élément de prescription
             break;
             // cancel order request
         // cancel order request
         case "OC":
             $consultation->annule = "1";
             if ($msg = $consultation->store()) {
                 return $exchange_hl7v2->setORRError($ack, "E804", $msg);
             }
             $idex = CIdSante400::getMatchFor($consultation, $sender->_tag_consultation);
             $idex->id400 = "trash_{$idex->id400}";
             if ($msg = $idex->store()) {
                 return $exchange_hl7v2->setORRError($ack, "E805", $msg);
             }
             break;
         default:
             return $exchange_hl7v2->setORRError($ack, "E205");
     }
     return $exchange_hl7v2->setORRSuccess($ack);
 }
示例#14
0
        $mediuser->insGroupPermission();
        $results[$i]["result"] = 0;
        $results[$i]["username"] = $mediuser->_user_username;
        $results[$i]["password"] = $mediuser->_user_password;
        $number_idex = $results[$i]["idex"];
        if (!$number_idex) {
            continue;
        }
        $idex = new CIdSante400();
        $idex->tag = CMediusers::getTagMediusers($group_id);
        $idex->id400 = $number_idex;
        if ($idex->loadMatchingObject()) {
            $unfound["idex"][$number_idex] = true;
            CAppUI::setMsg("Identifiant déjà existant", UI_MSG_WARNING);
            continue;
        }
        $idex->setObject($mediuser);
        $msg = $idex->store();
        if ($msg) {
            CAppUI::setMsg($msg, UI_MSG_ERROR);
        }
    }
    fclose($fp);
}
CAppUI::callbackAjax('$("systemMsg").insert', CAppUI::getMsg());
// Création du template
$smarty = new CSmartyDP();
$smarty->assign("dryrun", $dryrun);
$smarty->assign("results", $results);
$smarty->assign("unfound", $unfound);
$smarty->display("user_import_csv.tpl");
 function getIdExterne()
 {
     $idExterne = new CIdSante400();
     // Chargement de l'id externe de la prescription (tag: Imeds)
     $idExterne->loadLatestFor($this, "iMeds");
     if (!$idExterne->_id) {
         // Afactoriser : assez complexe (concatenation du code 4 praticien et du code 4 prescription)
         $tagCatalogue = CAppUI::conf('dPlabo CCatalogueLabo remote_name');
         $this->loadRefsFwd();
         $prat =& $this->_ref_praticien;
         $tagCode4 = "labo code4";
         $idSantePratCode4 = new CIdSante400();
         $idSantePratCode4->loadLatestFor($prat, $tagCode4);
         $idPresc = new CIdSante400();
         $idPresc->tag = "{$tagCatalogue} Prat:" . str_pad($idSantePratCode4->id400, 4, '0', STR_PAD_LEFT);
         // tag LABO Prat: 0017
         $idPresc->object_class = "CPrescriptionLabo";
         $idPresc->loadMatchingObject("id400 DESC");
         $numprovisoire = str_pad($idSantePratCode4->id400, 4, '0', STR_PAD_LEFT) . str_pad($idPresc->id400, 4, '0', STR_PAD_LEFT);
         // Envoi à la source créée 'get_id_prescriptionlabo' (SOAP)
         $exchange_source = CExchangeSource::get("get_id_prescriptionlabo", "soap");
         $exchange_source->setData(array("NumMedi" => $numprovisoire, "pwd" => $exchange_source->password));
         $exchange_source->send("NDOSLAB");
         $idExterne->tag = "iMeds";
         $idExterne->object_class = "CPrescriptionLabo";
         $idExterne->object_id = $this->_id;
         $idExterne->id400 = $exchange_source->getACQ()->NDOSLABResult;
         $idExterne->last_update = CMbDT::dateTime();
         $idExterne->store();
     }
     return $idExterne;
 }
示例#16
0
<?php

/**
 * $Id$
 *  
 * @category CDA
 * @package  Mediboard
 * @author   SARL OpenXtrem <*****@*****.**>
 * @license  GNU General Public License, see http://www.gnu.org/licenses/gpl.html
 * @version  $Revision$
 * @link     http://www.mediboard.org
 */
$group_type = CValue::post("group_type");
$group_id = CValue::post("group_id");
$group = new CGroups();
$group->load($group_id);
$idex = new CIdSante400();
$idex->tag = "cda_association_code";
$idex->setObject($group);
$idex->loadMatchingObject();
$idex->last_update = CMbDT::dateTime();
$idex->id400 = $group_type;
if ($group_type && ($msg = $idex->store())) {
    CAppUI::setMsg($msg, UI_MSG_ERROR);
}
CAppUI::setMsg("Configuration effectué");
    $where["entree"] = "BETWEEN '{$date_min}' AND '{$date_max}'";
    $where["type"] = "!= 'consult'";
    $where["annule"] = "= '0'";
    $listSej = $sejour->loadList($where);
    if (count($listSej) > 1) {
        $moresej++;
        continue;
    }
    if (!count($listSej)) {
        continue;
    }
    $sejour = reset($listSej);
    if ($sejour->_id) {
        $nda->object_id = $sejour->_id;
        $nda->last_update = CMbDT::dateTime();
        $nda->store();
        $_sejour->sejour_id = $sejour->_id;
        $_sejour->store();
        $echg_hprim->object_class = $nda->object_class;
        $echg_hprim->object_id = $nda->object_id;
        $echg_hprim->id_permanent = $nda->id400;
        $echg_hprim->store();
        $nouv++;
    }
}
CAppUI::stepAjax("Séjours utilisés : '{$total}'");
CAppUI::stepAjax("Séjours sans patient rapprochés : '{$nopat}'");
CAppUI::stepAjax("Séjours anciennement rapprochés : '{$anc}'");
CAppUI::stepAjax("Séjours multiples trouvés : '{$moresej}'");
CAppUI::stepAjax("Nouveaux séjours rapprochés : '{$nouv}'");
if ($total - $nopat - $anc - $moresej > 0) {
示例#18
0
 /**
  * Recording NDA
  * 
  * @param CIdSante400    $NDA    Object id400
  * @param CSejour        $sejour Admit
  * @param CInteropSender $sender Sender
  * 
  * @return null|string null if successful otherwise returns and error message
  */
 static function storeNDA(CIdSante400 $NDA, CSejour $sejour, CInteropSender $sender)
 {
     /* Gestion du numéroteur */
     $group = new CGroups();
     $group->load($sender->group_id);
     $group->loadConfigValues();
     // Purge du NDA existant sur le séjour et on le remplace par le nouveau
     if ($sender->_configs["purge_idex_movements"]) {
         // On charge le NDA courant du séjour
         $sejour->loadNDA($sender->group_id);
         $ref_NDA = $sejour->_ref_NDA;
         if ($ref_NDA) {
             // Si le NDA actuel est identique à celui qu'on reçoit on ne fait rien
             if ($ref_NDA->id400 == $NDA->id400) {
                 return;
             }
             // On passe le NDA courant en trash
             $ref_NDA->tag = CAppUI::conf("dPplanningOp CSejour tag_dossier_trash") . $ref_NDA->tag;
             $ref_NDA->_eai_sender_guid = $sender->_guid;
             $ref_NDA->store();
         }
         // On sauvegarde le nouveau
         $NDA->tag = $sender->_tag_sejour;
         $NDA->object_class = "CSejour";
         $NDA->object_id = $sejour->_id;
         $NDA->last_update = CMbDT::dateTime();
         $NDA->_eai_sender_guid = $sender->_guid;
         return $NDA->store();
     }
     // Génération du NDA ?
     // Non
     if (!$group->_configs["smp_idex_generator"]) {
         if (!$NDA->id400) {
             return null;
         }
         if ($sejour) {
             $NDA->object_id = $sejour->_id;
         }
         $NDA->last_update = CMbDT::dateTime();
         $NDA->_eai_sender_guid = $sender->_guid;
         return $NDA->store();
     } else {
         $NDA_temp = CIdSante400::getMatch("CSejour", $sender->_tag_sejour, null, $sejour->_id);
         if ($NDA_temp->_id) {
             return;
         }
         // Pas de NDA passé
         if (!$NDA->id400) {
             if (!CIncrementer::generateIdex($sejour, $sender->_tag_sejour, $sender->group_id)) {
                 return CAppUI::tr("CEAISejour-error-generate-idex");
             }
             return null;
         } else {
             $incrementer = $sender->loadRefGroup()->loadDomainSupplier("CSejour");
             if ($incrementer && $NDA->id400 < $incrementer->range_min || $NDA->id400 > $incrementer->range_max) {
                 return CAppUI::tr("CEAISejour-idex-not-in-the-range");
             }
             $NDA->object_id = $sejour->_id;
             $NDA->last_update = CMbDT::dateTime();
             $NDA->_eai_sender_guid = $sender->_guid;
             return $NDA->store();
         }
     }
 }
示例#19
0
 /**
  * @see parent::cancel()
  */
 function cancel($docItem)
 {
     $this->initClientSOAP();
     // Identifiant de la dernière transaction concernant le document
     if (null == ($transactionId = $this->getTransactionId($docItem))) {
         return;
     }
     $parameters = array("idTransaction" => $transactionId);
     // Annulation de la transaction
     if (null == ($transactionAnnulationId = $this->clientSOAP->cancelDocument($parameters))) {
         return;
     }
     $transactionAnnulationId = $transactionAnnulationId->cancelDocumentResult;
     // Création de l'identifiant externe
     $idex = new CIdSante400();
     //Paramétrage de l'id 400
     $idex->object_class = $docItem->_class;
     $idex->tag = CMedinetSender::$tag;
     // Affectation de l'id400 a la transaction
     $idex->id400 = $transactionAnnulationId;
     $idex->object_id = $docItem->_id;
     $idex->_id = null;
     $idex->last_update = CMbDT::dateTime();
     $idex->store();
     // Change l'etat du document
     $docItem->etat_envoi = "non";
     return true;
 }
 function mapAndStorePayment(DOMNode $node, CFactureCabinet $facture, CIdSante400 $idex)
 {
     $reglement = new CReglement();
     $reglement->load($idex->object_id);
     // Recherche du règlement si pas retrouvé par son idex
     $reglement->setObject($facture);
     $reglement->date = $this->getDatePayment($node) . " 00:00:00";
     $amount_paid = $this->getAmountPaid($node);
     $reglement->montant = $amount_paid;
     $direction = $this->getDirection($node);
     if ($direction == "-") {
         $reglement->montant = $reglement->montant * -1;
     }
     $reglement->emetteur = "tiers";
     $reglement->mode = "autre";
     $reglement->loadOldObject();
     if ($reglement->_old && round($reglement->montant, 3) == round($reglement->_old->montant, 3)) {
         return $reglement;
     }
     // Mise à jour du montant (du_tiers) de la facture
     $value = $reglement->_old ? $reglement->montant - $reglement->_old->montant : $reglement->montant;
     // Acquittement de la facture associée ?
     if ($msg = $reglement->store()) {
         return $msg;
     }
     // Gestion de l'idex
     if (!$idex->object_id) {
         $idex->object_id = $reglement->_id;
     }
     $idex->last_update = CMbDT::dateTime();
     if ($msg = $idex->store()) {
         return $msg;
     }
     if ($direction != "+") {
         return $reglement;
     }
     return $reglement;
 }
 /**
  * Handle event
  *
  * @param CHL7Acknowledgment $ack     Acknowledgement
  * @param CPatient           $patient Person
  * @param array              $data    Nodes data
  *
  * @return null|string
  */
 function handle(CHL7Acknowledgment $ack, CPatient $patient, $data)
 {
     // Traitement du message des erreurs
     $comment = "";
     $object = null;
     $exchange_hl7v2 = $this->_ref_exchange_hl7v2;
     $exchange_hl7v2->_ref_sender->loadConfigValues();
     $sender = $this->_ref_sender = $exchange_hl7v2->_ref_sender;
     // Patient
     $patientPI = CValue::read($data['personIdentifiers'], "PI");
     if (!$patientPI) {
         return $exchange_hl7v2->setAckAR($ack, "E007", null, $patient);
     }
     $IPP = CIdSante400::getMatch("CPatient", $sender->_tag_patient, $patientPI);
     // Patient non retrouvé par son IPP
     if (!$IPP->_id) {
         return $exchange_hl7v2->setAckAR($ack, "E105", null, $patient);
     }
     $patient->load($IPP->object_id);
     $sejour = null;
     // Sejour
     $venueAN = CValue::read($data["personIdentifiers"], "AN");
     if (!$venueAN) {
         $venueAN = CValue::read($data["admitIdentifiers"], "AN");
     }
     if ($venueAN) {
         $NDA = CIdSante400::getMatch("CSejour", $sender->_tag_sejour, $venueAN);
         // Séjour non retrouvé par son NDA
         if (!$NDA->_id) {
             return $exchange_hl7v2->setAckAR($ack, "E205", null, $patient);
         }
         /** @var CSejour $sejour */
         $sejour = $NDA->loadTargetObject();
         if (!$sejour->_id) {
             return $exchange_hl7v2->setAckAR($ack, "E220", null, $patient);
         }
         if ($sejour->patient_id !== $patient->_id) {
             return $exchange_hl7v2->setAckAR($ack, "E606", null, $patient);
         }
     }
     // Pas d'observations
     $first_result = reset($data["observations"]);
     if (!$first_result) {
         return $exchange_hl7v2->setAckAR($ack, "E225", null, $patient);
     }
     // Recherche par date
     $observation_dt = $this->getOBRObservationDateTime($first_result["OBR"]);
     if (!$sejour) {
         $sejours = $patient->getCurrSejour($observation_dt);
         //FIXME ignorer les annulés
         $sejour = reset($sejours);
         if (!$sejour || !$sejour->_id) {
             return $exchange_hl7v2->setAckAR($ack, "E220", null, $patient);
         }
     }
     // Récupération des observations
     foreach ($data["observations"] as $_observation) {
         // Récupération de la date du relevé
         $observation_dt = $this->getOBRObservationDateTime($_observation["OBR"]);
         $name = $this->getOBRServiceIdentifier($_observation["OBR"]);
         // OBR identity identifier
         $OBR_identity_identifier = null;
         $handle_OBR_identity_identifier = $sender->_configs["handle_OBR_identity_identifier"];
         if ($handle_OBR_identity_identifier) {
             $OBR_identity_identifier = $this->queryTextNode($handle_OBR_identity_identifier, $_observation["OBR"]);
         }
         foreach ($_observation["OBX"] as $key => $_OBX) {
             $status = $this->getObservationResultStatus($_OBX);
             if ($status === "X") {
                 continue;
             }
             // OBX.2 : Value type
             $value_type = $this->getOBXValueType($_OBX);
             $date = $observation_dt ? $observation_dt : $this->getOBXObservationDateTime($_OBX);
             $praticien_id = $this->getObservationAuthor($_OBX);
             // Recherche de l'objet avec la date correspondante fourni dans l'observation
             $object = $this->getObjectWithDate($date, $patient, $praticien_id, $sejour);
             if (!$object || !$object->_id) {
                 return $exchange_hl7v2->setAckAR($ack, "E301", null, $patient);
             }
             $name = $name . $key;
             switch ($value_type) {
                 // Reference Pointer to External Report
                 case "RP":
                     if (!$this->getReferencePointerToExternalReport($_OBX, $object, $name)) {
                         return $exchange_hl7v2->setAckAR($ack, $this->codes, null, $object);
                     }
                     break;
                     // Encapsulated Data
                 // Encapsulated Data
                 case "ED":
                     if (!$this->getEncapsulatedData($_OBX, $object, $name)) {
                         return $exchange_hl7v2->setAckAR($ack, $this->codes, null, $object);
                     }
                     break;
                     // Pulse Generator and Lead Observation Results
                 // Pulse Generator and Lead Observation Results
                 case "ST":
                 case "CWE":
                 case "DTM":
                 case "NM":
                 case "SN":
                     if (!$this->getPulseGeneratorAndLeadObservationResults($_OBX, $patient, $object, $observation_dt)) {
                         return $exchange_hl7v2->setAckAR($ack, $this->codes, null, $object);
                     }
                     break;
                     // Not supported
                 // Not supported
                 default:
                     return $exchange_hl7v2->setAckAR($ack, "E302", null, $object);
             }
             // On store l'idex de l'identifiant du système tiers
             $idex = new CIdSante400();
             $idex->object_class = $object->_class;
             $idex->object_id = $object->_id;
             $idex->tag = "OBR_{$sender->_tag_hl7}";
             $idex->id400 = $OBR_identity_identifier;
             $idex->loadMatchingObject();
             $idex->store();
         }
     }
     return $exchange_hl7v2->setAckCA($ack, $this->codes, $comment, $object);
 }
示例#22
0
 static function generateIdex(CMbObject $object, $tag, $group_id)
 {
     $group = CGroups::loadFromGuid("CGroups-{$group_id}");
     // On préfère générer un identifiant d'un établissement virtuel pour les séjours non-facturables
     $group_id_pour_sejour_facturable = CAppUI::conf('dPsante400 CDomain group_id_pour_sejour_facturable', $group);
     if ($object instanceof CSejour && !$object->facturable && $group_id_pour_sejour_facturable) {
         $group_id = $group_id_pour_sejour_facturable;
     }
     $group_domain = new CGroupDomain();
     $group_domain->object_class = $object->_class;
     $group_domain->group_id = $group_id;
     $group_domain->master = 1;
     $group_domain->loadMatchingObject();
     if (!$group_domain->_id) {
         return;
     }
     $domain = $group_domain->loadRefDomain();
     $conf = CAppUI::conf("dPsante400 CIncrementer");
     $cluster_count = abs(intval($conf["cluster_count"]));
     $cluster_position = abs(intval($conf["cluster_position"]));
     if ($cluster_count == 0) {
         $cluster_count = 1;
     }
     if ($cluster_count == 1) {
         $cluster_position = 0;
     }
     $mutex = new CMbSemaphore("incrementer-{$object->_class}");
     $mutex->acquire();
     $incrementer = $domain->loadRefIncrementer();
     // Chargement du dernier 'increment' s'il existe sinon on déclenche une erreur
     if (!$incrementer->_id) {
         $mutex->release();
         return;
     }
     // Incrementation de l'idex
     $value = $incrementer->value;
     // Valeur compatible avec la position dans le cluster
     do {
         $value++;
     } while ($value % $cluster_count != $cluster_position);
     do {
         // Idex vraiment disponible ?
         $idex = new CIdSante400();
         $idex->object_class = $object->_class;
         $idex->tag = $tag;
         $idex->id400 = self::formatValue($object, $incrementer->pattern, $value);
         $idex->loadMatchingObject();
     } while ($idex->_id && ($value += $cluster_count));
     $incrementer->value = $value;
     $incrementer->last_update = CMbDT::dateTime();
     $incrementer->store();
     // Création de l'identifiant externe
     $idex->object_id = $object->_id;
     $idex->last_update = CMbDT::dateTime();
     $idex->store();
     $mutex->release();
     return $idex;
 }
 /**
  * Store the external ID of the given object
  *
  * @param CMbObject $object The MB to store the external ID of
  * @param string    $db_id  The Import ID to store on the MB Object
  *
  * @return string The external ID store error message
  */
 function storeIdExt(CMbObject $object, $db_id)
 {
     $id_ext = new CIdSante400();
     $id_ext->setObject($object);
     $id_ext->tag = $this->getImportTag();
     $id_ext->id400 = $db_id;
     $id_ext->escapeValues();
     $id_ext->loadMatchingObject();
     $id_ext->last_update = CMbDT::dateTime();
     $id_ext->unescapeValues();
     return $id_ext->store();
 }
示例#24
0
 /**
  * Trash IPP
  *
  * @param CIdSante400 $IPP IPP
  *
  * @return string
  */
 function trashIPP(CIdSante400 $IPP)
 {
     $IPP->tag = CAppUI::conf("dPpatients CPatient tag_ipp_trash") . $IPP->tag;
     $IPP->last_update = CMbDT::dateTime();
     return $IPP->store();
 }
示例#25
0
    $obj = new $class();
    $key = $obj->_spec->key;
    $where = array();
    $where[] = "{$field_sex} IS NULL OR {$field_sex} = 'u'";
    $where["prenom"] = "IS NOT NULL";
    $found = $obj->countList($where);
    CAppUI::stepAjax("Objets concernés : " . $found);
    $where[$key] = " > '{$start}' ";
    $objs = $obj->loadList($where, "{$key} ASC", "0, {$limit}");
    if (count($objs)) {
        foreach ($objs as $_obj) {
            $idex->object_id = $_obj->_id;
            if ($msg = $_obj->store()) {
                CAppUI::stepAjax($msg, UI_MSG_WARNING);
            } else {
                CAppUI::stepAjax($_obj->{$field_sex} . " | " . $_obj->_view, $_obj->{$field_sex} == "u" ? UI_MSG_WARNING : UI_MSG_OK);
            }
        }
        if ($msg = $idex->store()) {
            CAppUI::stepAjax($msg, UI_MSG_ERROR);
        }
    } else {
        $use_callback = false;
    }
} else {
    CAppUI::stepAjax("%s_not_managed_by_the_system", UI_MSG_ERROR, $class);
}
if ($callback && $use_callback) {
    CAppUI::js("getForm('{$callback}').onsubmit();");
}
CApp::rip();