示例#1
0
 /**
  * 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;
 }
示例#2
0
 /**
  * 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);
 }
示例#3
0
 /**
  * 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) {
示例#6
0
 * @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;
 }
示例#9
0
 /**
  * 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;
 }
示例#12
0
$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
示例#13
0
 /**
  * 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);
 }