/** * Chargement du dernier identifiant id400 * * @param string $tag Tag à utiliser comme filtre * * @return CIdSante400 */ function loadLastId400($tag = null) { $idex = new CIdSante400(); if ($idex->_ref_module) { $idex->loadLatestFor($this, $tag); $this->_ref_last_id400 = $idex; } return $idex; }
/** * Construit le tag IPP en fonction des variables de configuration * * @param int $group_id Permet de charger l'IPP pour un établissement donné si non null * * @return string|null */ static function getTagIPP($group_id = null) { // Recherche de l'établissement $group = CGroups::get($group_id); if (!$group_id) { $group_id = $group->_id; } $cache = new Cache(__METHOD__, array($group_id), Cache::INNER); if ($cache->exists()) { return $cache->get(); } // Gestion du tag IPP par son domaine d'identification if (CAppUI::conf("eai use_domain")) { return $cache->put(CDomain::getMasterDomain("CPatient", $group_id)->tag, false); } // Pas de tag IPP => pas d'affichage d'IPP if (null == ($tag_ipp = CAppUI::conf("dPpatients CPatient tag_ipp"))) { return $cache->put(null, false); } // Si on est dans le cas d'un établissement gérant la numérotation $group->loadConfigValues(); if ($group->_configs["sip_idex_generator"]) { $tag_ipp = CAppUI::conf("sip tag_ipp"); } // Préférer un identifiant externe de l'établissement if ($tag_group_idex = CAppUI::conf("dPpatients CPatient tag_ipp_group_idex")) { $idex = new CIdSante400(); $idex->loadLatestFor($group, $tag_group_idex); $group_id = $idex->id400; } return $cache->put(str_replace('$g', $group_id, $tag_ipp), false); }
/** * Static shortcut to to idex for a given object * * @param CMbObject $mbObject Object * @param string $tag Tag * * @return CIdSante400 */ static function getMatchFor(CMbObject $mbObject, $tag = null) { $idex = new CIdSante400(); $idex->loadLatestFor($mbObject, $tag); return $idex; }
/** * Trigger after event store * * @param CMbObject $mbObject Object * * @return void */ function onAfterStore(CMbObject $mbObject) { if (!$this->isHandled($mbObject)) { return false; } /** @var CInteropReceiver $receiver */ $receiver = $mbObject->_receiver; $receiver->getInternationalizationCode($this->transaction); // Traitement Sejour if ($mbObject instanceof CSejour) { $sejour = $mbObject; $sejour->loadRefPatient(); // Si on ne souhaite explicitement pas de synchro if ($sejour->_no_synchro) { return; } // Si on est en train de créer un séjour et qu'il s'agit d'une naissance $current_log = $sejour->loadLastLog(); if ($current_log->type == "create" && $sejour->_naissance) { return; } // Si Serveur if (CAppUI::conf('smp server')) { return; } // Si le group_id du séjour est différent de celui du destinataire if ($sejour->group_id != $receiver->group_id) { return; } // Destinataire gère seulement les non facturables if ($receiver->_configs["send_no_facturable"] == "0" && $sejour->facturable) { return; } // Destinataire gère seulement les facturables if ($receiver->_configs["send_no_facturable"] == "2" && !$sejour->facturable) { return; } // Passage du séjour d'urgence en hospit, pas de génération de A06 if ($sejour->_en_mutation) { return; } // Si on ne gère les séjours du bébé on ne transmet pas séjour si c'est un séjour enfant if (!$receiver->_configs["send_child_admit"]) { $naissance = new CNaissance(); $naissance->sejour_enfant_id = $sejour->_id; $naissance->loadMatchingObject(); if ($naissance->_id) { return; } } // Recherche si on est sur un séjour de mutation $rpu = new CRPU(); $rpu->mutation_sejour_id = $sejour->_id; $rpu->loadMatchingObject(); if ($rpu->_id) { $sejour_rpu = $rpu->loadRefSejour(); if (!$sejour->_cancel_hospitalization && $sejour_rpu->mode_sortie != "mutation") { return; } } $current_affectation = null; $code = null; // Cas où : // * on est sur un séjour d'urgences qui n'est pas le relicat // * on est en train de réaliser la mutation /** @var CRPU $rpu */ $rpu = $sejour->loadRefRPU(); if ($rpu && $rpu->_id && $rpu->sejour_id != $rpu->mutation_sejour_id && $sejour->fieldModified("mode_sortie", "mutation") && !$sejour->UHCD) { $sejour = $rpu->loadRefSejourMutation(); $sejour->loadRefPatient(); $sejour->loadLastLog(); $sejour->_receiver = $receiver; $code = "A06"; // On récupère l'affectation courante qui n'a pas été transmise (affectation suite à la mutation) $current_affectation = $sejour->getCurrAffectation(); $sejour->_ref_hl7_affectation = $current_affectation; } elseif ($sejour->fieldModified("type", "urg") && $sejour->_cancel_hospitalization) { $sejour->loadRefPatient(); $sejour->loadLastLog(); $sejour->_receiver = $receiver; $code = "A07"; // On récupère l'affectation courante qui n'a pas été transmise (affectation suite à la mutation) $current_affectation = $sejour->getCurrAffectation(); $sejour->_ref_hl7_affectation = $current_affectation; } elseif ($rpu && $rpu->mutation_sejour_id && $rpu->sejour_id != $rpu->mutation_sejour_id) { return; } $code = $code ? $code : $this->getCodeSejour($sejour); // Dans le cas d'une création et que l'on renseigne entrée réelle et sortie réelle, // il est nécessaire de créer deux flux (A01 et A03) if ($sejour->_ref_last_log->type == "create" && $sejour->entree_reelle && $sejour->sortie_reelle) { $code = "A01"; // Cas où :très souvent // * on est l'initiateur du message // * le destinataire ne supporte pas le message if (!$this->isMessageSupported($this->transaction, $this->message, $code, $receiver)) { return; } 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; } $patient = $sejour->_ref_patient; $patient->loadIPP($receiver->group_id); if (!$patient->_IPP) { if ($msg = $patient->generateIPP()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } } // Cas où lors de l'entrée réelle j'ai une affectation qui n'a pas été envoyée if ($sejour->fieldModified("entree_reelle") && !$sejour->_old->entree_reelle) { $current_affectation = $sejour->getCurrAffectation(); } $this->createMovement($code, $sejour, $current_affectation); // Envoi de l'événement $this->sendITI($this->profil, $this->transaction, $this->message, $code, $sejour); $code = "A03"; } if (!$code) { return; } // Cas où : // * on est l'initiateur du message // * le destinataire ne supporte pas le message if (!$this->isMessageSupported($this->transaction, $this->message, $code, $receiver)) { return; } 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; } $patient = $sejour->_ref_patient; $patient->loadIPP($receiver->group_id); if (!$patient->_IPP) { if ($msg = $patient->generateIPP()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } } // Cas où lors de l'entrée réelle j'ai une affectation qui n'a pas été envoyée if ($sejour->fieldModified("entree_reelle") && !$sejour->_old->entree_reelle) { $current_affectation = $sejour->getCurrAffectation(); } $this->createMovement($code, $sejour, $current_affectation); // Envoi de l'événement $this->sendITI($this->profil, $this->transaction, $this->message, $code, $sejour); } // Traitement Affectation if ($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; } // Affectation non liée à un séjour $sejour = $affectation->loadRefSejour(); if (!$sejour->_id) { return; } // Destinataire gère seulement les non facturables if ($receiver->_configs["send_no_facturable"] == "0" && $sejour->facturable) { return; } // Destinataire gère seulement les facturables if ($receiver->_configs["send_no_facturable"] == "2" && !$sejour->facturable) { return; } // Première affectation des urgences on ne la transmet pas, seulement pour l'évènement de bascule // Sauf si nous sommes dans un séjour d'UHCD if ($affectation->_mutation_urg && !$sejour->UHCD) { return; } // Si on ne gère les séjours du bébé on ne transmet pas l'affectation si c'est un séjour enfant if (!$receiver->_configs["send_child_admit"]) { $naissance = new CNaissance(); $naissance->sejour_enfant_id = $sejour->_id; $naissance->loadMatchingObject(); if ($naissance->_id) { return; } } // Pas d'envoie d'affectation si la patient n'est pas sortie des urgences $rpu = new CRPU(); $rpu->mutation_sejour_id = $sejour->_id; $rpu->loadMatchingObject(); if ($rpu->_id) { $sejour_rpu = $rpu->loadRefSejour(); if (!$affectation->_mutation_urg && $sejour_rpu->mode_sortie != "mutation") { return; } } // Pas d'envoie d'affectation pour les séjours reliquats // Sauf si le séjour est en UHCD $rpu = $sejour->loadRefRPU(); if ($rpu && $rpu->mutation_sejour_id && $rpu->sejour_id != $rpu->mutation_sejour_id && !$sejour->UHCD) { return; } // Si le group_id du séjour est différent de celui du destinataire if ($sejour->group_id != $receiver->group_id) { return; } // On envoie pas les affectations prévisionnelles if (!$receiver->_configs["send_provisional_affectation"] && $sejour->_etat == "preadmission") { return; } $first_affectation = $sejour->loadRefFirstAffectation(); $code = $this->getCodeAffectation($affectation, $first_affectation); // Cas où : // * on est l'initiateur du message // * le destinataire ne supporte pas le message if (!$this->isMessageSupported($this->transaction, $this->message, $code, $receiver)) { return; } $sejour->loadRefPatient(); $sejour->_receiver = $receiver; $patient = $sejour->_ref_patient; $patient->loadIPP($receiver->group_id); if (!$patient->_IPP) { if ($msg = $patient->generateIPP()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } } $this->createMovement($code, $sejour, $affectation); $service = $affectation->loadRefService(); $curr_affectation = $sejour->loadRefCurrAffectation(); // On envoie pas de mouvement antérieur à la dernière affectation if (($service->uhcd || $service->radiologie || $service->urgence) && $affectation->sortie < $curr_affectation->sortie) { return; } // Ne pas envoyer la sortie si le séjour a une entrée réelle et si on modifie ou créé un affectation if (!$receiver->_configs["send_expected_discharge_with_affectation"] && $sejour->entree_reelle) { $sejour->sortie_prevue = null; } // Envoi de l'événement $this->sendITI($this->profil, $this->transaction, $this->message, $code, $mbObject); } // Traitement Naissance if ($mbObject instanceof CNaissance) { $current_log = $mbObject->loadLastLog(); if ($current_log->type != "create") { return; } $naissance = $mbObject; if (!$this->isMessageSupported($this->transaction, $this->message, "A28", $receiver)) { return; } $sejour_enfant = $naissance->loadRefSejourEnfant(); // Création du bébé $enfant = $sejour_enfant->_ref_patient; $enfant->loadIPP($receiver->group_id); $enfant->_receiver = $receiver; $enfant->_naissance_id = $naissance->_id; if (!$enfant->_IPP) { if ($msg = $enfant->generateIPP()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } } // Envoi pas les patients qui n'ont pas d'IPP if (!$receiver->_configs["send_all_patients"] && !$enfant->_IPP) { return; } // Envoi du A28 pour la création du bébé $this->sendITI($this->profil, $this->transaction, $this->message, "A28", $enfant); $enfant->_IPP = null; // Si on gère les séjours du bébé on transmet le séjour ! if ($receiver->_configs["send_child_admit"]) { $sejour_enfant->_receiver = $receiver; // Si le group_id du séjour est différent de celui du destinataire if ($sejour_enfant->group_id != $receiver->group_id) { return; } $code = $this->getCodeBirth($sejour_enfant); // Cas où : // * on est l'initiateur du message // * le destinataire ne supporte pas le message if (!$this->isMessageSupported($this->transaction, $this->message, $code, $receiver)) { return; } if (!$sejour_enfant->_NDA) { // Génération du NDA dans le cas de la création, ce dernier n'était pas créé if ($msg = $sejour_enfant->generateNDA()) { CAppUI::setMsg($msg, UI_MSG_ERROR); } $NDA = new CIdSante400(); $NDA->loadLatestFor($sejour_enfant, $receiver->_tag_sejour); $sejour_enfant->_NDA = $NDA->id400; } $current_affectation = null; // Cas où lors de l'entrée réelle j'ai une affectation qui n'a pas été envoyée if ($sejour_enfant->fieldModified("entree_reelle") && !$sejour_enfant->_old->entree_reelle) { $current_affectation = $sejour_enfant->getCurrAffectation(); } $this->createMovement($code, $sejour_enfant, $current_affectation); // Envoi de l'événement $this->sendITI($this->profil, $this->transaction, $this->message, $code, $sejour_enfant); } } }
if (!$mb_prescription_id) { CAppUI::setMsg("Veuillez spécifier une prescription", UI_MSG_ERROR); redirect(); } if ($mbPrescription->load($mb_prescription_id)) { $mbPrescription->loadRefs(); } // Chargement de l'id400 "labo code4" du praticien $prat =& $mbPrescription->_ref_praticien; $tagCode4 = "labo code4"; $idSantePratCode4 = new CIdSante400(); $idSantePratCode4->loadLatestFor($prat, $tagCode4); // Chargement de l'id400 "labo code9" du praticien $tagCode9 = "labo code9"; $idSantePratCode9 = new CIdSante400(); $idSantePratCode9->loadLatestFor($prat, $tagCode9); // Si le praticien n'a pas d'id400, il ne peut pas envoyer la prescription if (!$idSantePratCode4->_id || !$idSantePratCode9->_id) { CAppUI::setMsg("Le praticien n'a pas d'id400 pour le catalogue LABO", UI_MSG_ERROR); redirect(); } $tagCatalogue = CAppUI::conf('dPlabo CCatalogueLabo remote_name'); // Chargement de la valeur de l'id externe de la prescription ==> retourne uniquement l'id400 $idexPresc = $mbPrescription->loadIdPresc(); // Gestion du sexe du patient $transSexe["m"] = "1"; $transSexe["f"] = "2"; $mbPatient =& $mbPrescription->_ref_patient; // Gestion du titre du patient if ($mbPatient->sexe == "m") { if ($mbPatient->_annees >= 0 && $mbPatient->_annees <= 3) {
* @version $Revision: 19285 $ */ $verouillee = CValue::post("verouillee"); // Si la prescription est verouillée, un id externe est créé pour identifier la prescription 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();
/** * 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; }
/** * 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; }
/** * Get transaction ID * * @param CDocumentItem $docItem Document * * @return string */ function getTransactionId($docItem) { $idex = new CIdSante400(); $idex->loadLatestFor($docItem, CMedinetSender::$tag); $transactionId = $idex->id400; if (!$transactionId) { return; } return $transactionId; }
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; }
/** * Trigger after event store * * @param CMbObject $mbObject Object * * @return void */ function onAfterStore(CMbObject $mbObject) { if (!$this->isHandled($mbObject)) { return false; } /** @var CInteropReceiver $receiver */ $receiver = $mbObject->_receiver; $receiver->getInternationalizationCode($this->transaction); $code = null; // Création/MAJ d'un correspondant patient if ($mbObject instanceof CCorrespondantPatient) { if (!$mbObject->patient_id) { return; } $mbObject = $mbObject->loadRefPatient(); $mbObject->_receiver = $receiver; $code = "A31"; } elseif ($mbObject instanceof CIdSante400) { $idex = $mbObject; // Concerne pas les patients / Pas en mode modification if ($idex->object_class != "CPatient" || !$idex->_old->_id) { return; } // Pas un tag IPP if ($idex->tag != CPatient::getTagIPP()) { return; } // Vraiment une modif de l'idex ? if ($idex->id400 == $idex->_old->id400) { return; } $code = "A47"; $patient = new CPatient(); $patient->load($idex->object_id); $patient->_receiver = $receiver; $patient->_patient_elimine = clone $patient; // Affecte le nouvel IPP au patient $patient->_IPP = $idex->id400; // Affecte l'ancien IPP au "patient éliminé" $patient->_patient_elimine->_IPP = $idex->_old->id400; if (!$this->isMessageSupported($this->transaction, $this->message, $code, $receiver)) { return; } $this->sendITI($this->profil, $this->transaction, $this->message, $code, $patient); return; } else { if ($mbObject->_naissance) { return; } switch ($mbObject->_ref_current_log->type) { case "create": $code = "A28"; break; case "store": // Patient lié if ($mbObject->fieldModified("patient_link_id")) { $code = "A24"; break; } // Annulation de la liaison avec le patient lié if ($mbObject->_old->patient_link_id && !$mbObject->patient_link_id) { $code = "A37"; break; } if ($receiver->_configs["send_patient_with_visit"]) { /** @var CPatient $mbObject */ $sejour = $mbObject->loadRefsSejours(array("entree_reelle" => "IS NOT NULL")); if (count($sejour) < 1) { $code = null; break; } } if ($receiver->_configs["send_patient_with_current_admit"]) { // On charge seulement le séjour courant pour le patient $sejours = $mbObject->getCurrSejour(null, $receiver->group_id); if (!$sejours) { break; } $sejour = reset($sejours); if (!$sejour->_id) { break; } $mbObject->_ref_sejour = $sejour; } // Dans tous les autres cas il s'agit d'une modification $code = $receiver->_configs["send_update_patient_information"] == "A08" ? "A08" : "A31"; break; default: $code = null; } } if (!$code) { return; } $patient = $mbObject; if (!$this->isMessageSupported($this->transaction, $this->message, $code, $receiver)) { return; } 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); } if (!$patient->_IPP) { $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; } $this->sendITI($this->profil, $this->transaction, $this->message, $code, $patient); $patient->_IPP = null; }
$pdf->writeHTML(utf8_encode("<b>Prélèvement du " . CMbDT::transform($prescription->date, null, '%d-%m-%y à %H:%M') . " " . $urgent . "</b>")); $pdf->setY(80); // Affichage des analyses $pdf->writeHTML(utf8_encode("<b>Analyses demandées:</b>")); $pdf->SetFillColor(246, 246, 246); $pdf->Cell(25, 7, utf8_encode("Identifiant"), 1, 0, 'C', 1); $pdf->Cell(105, 7, utf8_encode("Libellé de l'analyse"), 1, 0, 'C', 1); $pdf->Cell(30, 7, utf8_encode("Type"), 1, 0, 'C', 1); $pdf->Cell(20, 7, utf8_encode("Loc."), 1, 0, 'C', 1); $pdf->Ln(); $tagCatalogue = CAppUI::conf('dPlabo CCatalogueLabo remote_name'); // Chargement de l'id externe labo code4 du praticien // Chargement de l'id400 "labo code4" du praticien $tagCode4 = "labo code4"; $idex = new CIdSante400(); $idex->loadLatestFor($praticien, $tagCode4); if ($idex->id400) { $numPrat = $idex->id400; $numPrat = str_pad($numPrat, 4, '0', STR_PAD_LEFT); } else { $numPrat = "xxxx"; } // Chargement de la valeur de l'id externe de la prescription ==> retourne uniquement l'id400 if ($prescription->verouillee) { $idex = $prescription->loadIdPresc(); $idex = str_pad($idex, 4, '0', STR_PAD_LEFT); } else { $idex = "xxxx"; } $num = $numPrat . $idex; // Initialisation du code barre, => utilisation par default du codage C128B
/** * Construit le tag NDA en fonction des variables de configuration * * @param int $group_id Permet de charger le NDA pour un établissement donné si non null * @param string $type_tag Permet de spécifier le type de tag * * @return string|void */ static function getTagNDA($group_id = null, $type_tag = "tag_dossier") { // Recherche de l'établissement $group = CGroups::get($group_id); if (!$group_id) { $group_id = $group->_id; } $cache = new Cache(__METHOD__, array($group_id, $type_tag), Cache::INNER); if ($cache->exists()) { return $cache->get(); } // Gestion du tag NDA par son domaine d'identification if (CAppUI::conf("eai use_domain")) { $tag_NDA = CDomain::getMasterDomain("CSejour", $group_id)->tag; if ($type_tag != "tag_dossier") { $tag_NDA = CAppUI::conf("dPplanningOp CSejour {$type_tag}") . $tag_NDA; } return $cache->put($tag_NDA, false); } $tag_NDA = CAppUI::conf("dPplanningOp CSejour tag_dossier"); if ($type_tag != "tag_dossier") { $tag_NDA = CAppUI::conf("dPplanningOp CSejour {$type_tag}") . $tag_NDA; } // Si on est dans le cas d'un établissement gérant la numérotation $group->loadConfigValues(); if ($group->_configs["smp_idex_generator"]) { $tag_NDA = CAppUI::conf("smp tag_nda"); } // Pas de tag Num dossier if (null == $tag_NDA) { return $cache->put(null, false); } // Préférer un identifiant externe de l'établissement if ($tag_group_idex = CAppUI::conf("dPplanningOp CSejour tag_dossier_group_idex")) { $idex = new CIdSante400(); $idex->loadLatestFor($group, $tag_group_idex); $group_id = $idex->id400; } return $cache->put(str_replace('$g', $group_id, $tag_NDA), false); }