コード例 #1
0
ファイル: vw_edit_patients.php プロジェクト: fbone/mediboard4
    $patient->nom = $name;
    $patient->prenom = $firstName;
    $patient->assure_nom = $name;
    $patient->assure_prenom = $firstName;
    $patient->unescapeValues();
    if ($naissance_day && $naissance_month && $naissance_year) {
        $patient->naissance = sprintf('%04d-%02d-%02d', $naissance_year, $naissance_month, $naissance_day);
    }
    if (CAppUI::conf("dPpatients CPatient default_value_allow_sms", CGroups::loadCurrent())) {
        $patient->allow_sms_notification = 1;
    }
}
// Peut etre pas besoin de verifier si on n'utilise pas VitaleVision
if ($useVitale && CAppUI::pref('LogicielLectureVitale') == 'none' && CModule::getActive("fse")) {
    $patVitale = new CPatient();
    $cv = CFseFactory::createCV();
    if ($cv) {
        $cv->getPropertiesFromVitale($patVitale, CValue::sessionAbs('administrative_data'));
        $patVitale->nullifyEmptyFields();
        $patient->extendsWith($patVitale);
        $patient->updateFormFields();
        $patient->_bind_vitale = "1";
    }
}
if ($covercard && CModule::getActive("covercard")) {
    $covercardExec = CCoverCard::process($covercard);
    if ($covercardExec->queryNumber) {
        CCoverCard::updatePatientFromCC($patient, $covercardExec);
    }
}
// Chargement du nom_fr du pays de naissance
コード例 #2
0
ファイル: CPatient.class.php プロジェクト: fbone/mediboard4
 function loadIdVitale()
 {
     if (CModule::getActive("fse")) {
         $cv = CFseFactory::createCV();
         if ($cv) {
             $cv->loadIdVitale($this);
         }
     }
 }
コード例 #3
0
ファイル: print_noemie.php プロジェクト: fbone/mediboard4
$where["consultation.tiers_date_reglement"] = "IS NULL";
$where["plageconsult.date"] = "BETWEEN '{$filter->_date_min}' AND '{$filter->_date_max}'";
// Filtre sur les praticiens
$chir_id = CValue::getOrSession("chir");
$listPrat = CConsultation::loadPraticiensCompta($chir_id);
$where["plageconsult.chir_id"] = CSQLDataSource::prepareIn(array_keys($listPrat));
$order = "plageconsult.date";
/** @var CConsultation[] $listConsults */
$listConsults = $consult->loadList($where, $order, null, null, $ljoin);
$total = array("nb" => 0, "value" => 0);
foreach ($listConsults as $consult) {
    $consult->loadRefsFwd();
    $consult->loadRefsReglements();
    // Chargment de la FSE
    if (CModule::getActive("fse")) {
        if ($fse = CFseFactory::createFSE()) {
            $fse->loadIdsFSE($consult);
        }
    }
    // Retour Noemie déjà traité
    $hasNoemie = !$consult->_current_fse || $consult->_current_fse->hasNoemie();
    if ($hasNoemie) {
        unset($listConsults[$consult->_id]);
        continue;
    }
    // Nouveau règelement pour le formulaire
    $consult->_new_reglement_tiers = new CReglement();
    $consult->_new_reglement_tiers->setObject($consult);
    $consult->_new_reglement_tiers->mode = "virement";
    $consult->_new_reglement_tiers->montant = $consult->_du_restant_tiers;
    // Toaux
コード例 #4
0
$patient->countINS();
$patient->loadRefPhotoIdentite();
$patient->loadRefsNotes();
$patient->loadRefsCorrespondants();
// Affecter la date de la consultation
$date = $consult->_ref_plageconsult->date;
// Tout utilisateur peut consulter en lecture seule une consultation de séjour
$consult->canDo();
if (CModule::getActive("fse")) {
    // Chargement des identifiants LogicMax
    $fse = CFseFactory::createFSE();
    if ($fse) {
        $fse->loadIdsFSE($consult);
        $fse->makeFSE($consult);
        $cps = CFseFactory::createCPS()->loadIdCPS($consult->_ref_chir);
        CFseFactory::createCV()->loadIdVitale($consult->_ref_patient);
    }
}
$consult->loadRefGrossesse();
$patient->loadRefDossierMedical();
$dossier_medical = $consult->_ref_patient->_ref_dossier_medical;
if ($dossier_medical->_id) {
    $etat_dents = $dossier_medical->loadRefsEtatsDents();
    foreach ($etat_dents as $etat) {
        $list_etat_dents[$etat->dent] = $etat->etat;
    }
    $dossier_medical->loadRefsAllergies();
    $dossier_medical->loadRefsAntecedents();
    $dossier_medical->countAntecedents(false);
    $dossier_medical->countAllergies();
}
コード例 #5
0
 /**
  * @see parent::store()
  * @todo Refactoring complet de la fonction store de la consultation
  *
  *   ANALYSE DU CODE
  *  1. Gestion du désistement
  *  2. Premier if : creation d'une consultation à laquelle on doit attacher
  *     un séjour (conf active): comportement DEPART / ARRIVEE
  *  3. Mise en cache du forfait FSE et facturable : uniquement dans le cas d'un séjour
  *  4. On load le séjour de la consultation
  *  5. On initialise le _adjust_sejour à false
  *  6. Dans le cas ou on a un séjour
  *   6.1. S'il est de type consultation, on ajuste le séjour en fonction du comportement DEPART / ARRIVEE
  *   6.2. Si la plage de consultation a été modifiée, adjust_sejour passe à true et on ajuste le séjour
  *        en fonction du comportement DEPART / ARRIVEE (en passant par l'adjustSejour() )
  *   6.3. Si on a un id (à virer) et que le chrono est modifié en PATIENT_ARRIVE,
  *        si on gère les admissions auto (conf) on met une entrée réelle au séjour
  *  7. Si le patient est modifié, qu'on est pas en train de merger et qu'on a un séjour,
  *     on empeche le store
  *  8. On appelle le parent::store()
  *  9. On passe le forfait SE et facturable au séjour
  * 10. On propage la modification du patient de la consultation au séjour
  * 11. Si on a ajusté le séjour et qu'on est dans un séjour de type conclut et que le séjour
  *     n'a plus de consultations, on essaie de le supprimer, sinon on l'annule
  * 12. Gestion du tarif et précodage des actes (bindTarif)
  * 13. Bind FSE
  * ACTIONS
  * - Faire une fonction comportement_DEPART_ARRIVEE()
  * - Merger le 2, le 6.1 et le 6.2 (et le passer en 2 si possible)
  * - Faire une fonction pour le 6.3, le 7, le 10, le 11
  * - Améliorer les fonctions 12 et 13 en incluant le test du behaviour fields
  *
  * COMPORTEMENT DEPART ARRIVEE
  * modif de la date d'une consultation ayant un séjour sur le modèle DEPART / ARRIVEE:
  * 1. Pour le DEPART :
  * -> on décroche la consultation de son ancien séjour
  * -> on ne touche pas à l'ancien séjour si :
  * - il est de type autre que consultation
  * - il a une entrée réelle
  * - il a d'autres consultations
  * -> sinon on l'annule
  *
  *   2. Pour l'ARRIVEE
  * -> si on a un séjour qui englobe : on la colle dedans
  * -> sinon on crée un séjour de consultation
  *
  *   TESTS A EFFECTUER
  *  0. Création d'un pause
  *  0.1. Déplacement d'une pause
  *  1. Création d'une consultation simple C1 (Séjour S1)
  *  2. Création d'une deuxième consultation le même jour / même patient C2 (Séjour S1)
  *  3. Création d'une troisième consultation le même jour / même patient C3 (Séjour S1)
  *  4. Déplacement de la consultation C1 un autre jour (Séjour S2)
  *  5. Changement du nom du patient C2 (pas de modification car une autre consultation)
  *  6. Déplacement de C3 au même jour (Toujours séjour S1)
  *  7. Annulation de C1 (Suppression ou annulation de S1)
  *  8. Déplacement de C2 et C3 à un autre jour (séjour S3 créé, séjour S1 supprimé ou annulé)
  *  9. Arrivée du patient pour C2 (S3 a une entrée réelle)
  * 10. Déplacement de C3 dans un autre jour (S4)
  * 11. Déplacement de C2 dans un autre jour (S5 et S3 reste tel quel)
  */
 function store()
 {
     $this->completeField('sejour_id', 'heure', 'plageconsult_id', 'si_desistement', 'annule');
     if ($this->si_desistement === null) {
         $this->si_desistement = 0;
     }
     $this->annule = $this->annule === null || $this->annule === '' ? 0 : $this->annule;
     $uf_soins_id = $this->_uf_soins_id;
     // Consultation dans un séjour
     $sejour = new CSejour();
     if (!$this->_id && !$this->sejour_id && CAppUI::conf("dPcabinet CConsultation attach_consult_sejour") && $this->patient_id || $this->_force_create_sejour) {
         // Recherche séjour englobant
         $facturable = $this->_facturable;
         if ($facturable === null) {
             $facturable = 1;
         }
         $this->loadRefPlageConsult();
         $function = new CFunctions();
         if ($this->_function_secondary_id) {
             $function->load($this->_function_secondary_id);
         } else {
             $user = new CMediusers();
             $user->load($this->_ref_chir->_id);
             $function->load($user->function_id);
         }
         $datetime = $this->_datetime;
         $minutes_before_consult_sejour = CAppUI::conf("dPcabinet CConsultation minutes_before_consult_sejour");
         $where = array();
         $where['annule'] = " = '0'";
         $where['type'] = " != 'seances'";
         $where['patient_id'] = " = '{$this->patient_id}'";
         if (!CAppUI::conf("dPcabinet CConsultation search_sejour_all_groups")) {
             $where['group_id'] = " = '{$function->group_id}'";
         }
         $where['facturable'] = " = '{$facturable}'";
         $datetime_before = CMbDT::dateTime("+{$minutes_before_consult_sejour} minute", "{$this->_date} {$this->heure}");
         $where[] = "`sejour`.`entree` <= '{$datetime_before}' AND `sejour`.`sortie` >= '{$datetime}'";
         if (!$this->_force_create_sejour) {
             $sejour->loadObject($where);
         } else {
             $sejour->_id = "";
         }
         // Si pas de séjour et config alors le créer en type consultation
         if (!$sejour->_id && CAppUI::conf("dPcabinet CConsultation create_consult_sejour")) {
             $sejour->patient_id = $this->patient_id;
             $sejour->praticien_id = $this->_ref_chir->_id;
             $sejour->group_id = $function->group_id;
             $sejour->type = "consult";
             $sejour->facturable = $facturable;
             $sejour->uf_soins_id = $uf_soins_id;
             $datetime = $this->_date && $this->heure ? "{$this->_date} {$this->heure}" : null;
             if ($this->chrono == self::PLANIFIE) {
                 $sejour->entree_prevue = $datetime;
             } else {
                 $sejour->entree_reelle = $datetime;
             }
             $sejour->sortie_prevue = "{$this->_date} 23:59:59";
             if ($msg = $sejour->store()) {
                 return $msg;
             }
         }
         $this->sejour_id = $sejour->_id;
     }
     // must be BEFORE loadRefSejour()
     $facturable = $this->_facturable;
     $forfait_se = $this->_forfait_se;
     $forfait_sd = $this->_forfait_sd;
     $this->_adjust_sejour = false;
     $this->loadRefSejour();
     if ($this->sejour_id) {
         $this->loadRefPlageConsult();
         // Si le séjour est de type consult
         if ($this->_ref_sejour->type == 'consult') {
             $this->_ref_sejour->loadRefsConsultations();
             $this->_ref_sejour->_hour_entree_prevue = null;
             $this->_ref_sejour->_min_entree_prevue = null;
             $this->_ref_sejour->_hour_sortie_prevue = null;
             $this->_ref_sejour->_min_sortie_prevue = null;
             $date_consult = CMbDT::date($this->_datetime);
             // On déplace l'entrée et la sortie du séjour
             $entree = $this->_datetime;
             $sortie = $date_consult . " 23:59:59";
             // Si on a une entrée réelle et que la date de la consultation est avant l'entrée réelle, on sort du store
             if ($this->_ref_sejour->entree_reelle && $date_consult < CMbDT::date($this->_ref_sejour->entree_reelle)) {
                 return CAppUI::tr("CConsultation-denyDayChange");
             }
             // Si on a une sortie réelle et que la date de la consultation est après la sortie réelle, on sort du store
             if ($this->_ref_sejour->sortie_reelle && $date_consult > CMbDT::date($this->_ref_sejour->sortie_reelle)) {
                 return CAppUI::tr("CConsultation-denyDayChange-exit");
             }
             // S'il n'y a qu'une seule consultation dans le séjour, et que le praticien de la consultation est modifié
             // (changement de plage), alors on modifie également le praticien du séjour
             if ($this->_id && $this->fieldModified("plageconsult_id") && count($this->_ref_sejour->_ref_consultations) == 1 && !$this->_ref_sejour->entree_reelle) {
                 $this->_ref_sejour->praticien_id = $this->_ref_plageconsult->chir_id;
             }
             // S'il y a d'autres consultations dans le séjour, on étire l'entrée et la sortie
             // en parcourant la liste des consultations
             foreach ($this->_ref_sejour->_ref_consultations as $_consultation) {
                 if ($_consultation->_id != $this->_id) {
                     $_consultation->loadRefPlageConsult();
                     if ($_consultation->_datetime < $entree) {
                         $entree = $_consultation->_datetime;
                     }
                     if ($_consultation->_datetime > $sortie) {
                         $sortie = CMbDT::date($_consultation->_datetime) . " 23:59:59";
                     }
                 }
             }
             $this->_ref_sejour->entree_prevue = $entree;
             $this->_ref_sejour->sortie_prevue = $sortie;
             $this->_ref_sejour->updateFormFields();
             $this->_ref_sejour->_check_bounds = 0;
             $this->_ref_sejour->store();
         }
         // Changement de journée pour la consult
         if ($this->fieldModified("plageconsult_id")) {
             $this->_adjust_sejour = true;
             // Pas le permettre si admission est déjà faite
             $max_hours = CAppUI::conf("dPcabinet CConsultation hours_after_changing_prat");
             if ($this->_ref_sejour->entree_reelle && CMbDT::dateTime("+ {$max_hours} HOUR", $this->_ref_sejour->entree_reelle) < CMbDT::dateTime()) {
                 return CAppUI::tr("CConsultation-denyPratChange", $max_hours);
             }
             $this->loadRefPlageConsult();
             $dateTimePlage = $this->_datetime;
             $where = array();
             $where['patient_id'] = " = '{$this->patient_id}'";
             $where[] = "`sejour`.`entree` <= '{$dateTimePlage}' AND `sejour`.`sortie` >= '{$dateTimePlage}'";
             $sejour = new CSejour();
             $sejour->loadObject($where);
             $this->adjustSejour($sejour, $dateTimePlage);
         }
         if ($this->_id && $this->fieldModified("chrono", self::PATIENT_ARRIVE)) {
             $this->completeField("plageconsult_id");
             $this->loadRefPlageConsult();
             $this->_ref_chir->loadRefFunction();
             $function = $this->_ref_chir->_ref_function;
             if ($function->admission_auto) {
                 $sejour = new CSejour();
                 $sejour->load($this->sejour_id);
                 $sejour->entree_reelle = $this->arrivee;
                 if ($msg = $sejour->store()) {
                     return $msg;
                 }
             }
         }
     }
     $patient_modified = $this->fieldModified("patient_id");
     // Si le patient est modifié et qu'il y a plus d'une consult dans le sejour, on empeche le store
     if (!$this->_forwardRefMerging && $this->sejour_id && $patient_modified && !$this->_skip_count && !$this->_sync_consults_from_sejour) {
         $this->loadRefSejour();
         $consultations = $this->_ref_sejour->countBackRefs("consultations");
         if ($consultations > 1) {
             return "Vous ne pouvez changer le patient d'une consultation si celle ci est contenue dans un séjour. Dissociez la consultation ou modifier le patient du séjour.";
         }
     }
     // Synchronisation AT
     $this->getType();
     if ($this->_type === "urg" && $this->fieldModified("date_at")) {
         $rpu = $this->_ref_sejour->_ref_rpu;
         if (!$rpu->_date_at) {
             $rpu->_date_at = true;
             $rpu->date_at = $this->date_at;
             if ($msg = $rpu->store()) {
                 return $msg;
             }
         }
     }
     // Update de reprise at
     // Par défaut, j+1 par rapport à fin at
     if ($this->fieldModified("fin_at") && $this->fin_at) {
         $this->reprise_at = CMbDT::dateTime("+1 DAY", $this->fin_at);
     }
     //Lors de la validation de la consultation
     // Enregistrement de la facture
     if ($this->fieldModified("valide", "1")) {
         //Si le DH est modifié, ceui ci se répercute sur le premier acte coté
         if ($this->fieldModified("secteur2") && (count($this->_tokens_ngap) || count($this->_tokens_ccam)) && count($this->loadRefsActes())) {
             $acte = reset($this->_ref_actes);
             $acte->montant_depassement += $this->secteur2 - $this->_old->secteur2;
             if ($msg = $acte->store()) {
                 return $msg;
             }
         }
         $facture = $this->sejour_id ? new CFactureEtablissement() : new CFactureCabinet();
         $facture->group_id = CGroups::loadCurrent()->_id;
         $facture->_consult_id = $this->_id;
         $facture->du_patient = $this->du_patient;
         $facture->du_tiers = $this->du_tiers;
         $facture->du_tva = $this->du_tva;
         $facture->taux_tva = $this->taux_tva;
         if (!count($this->loadRefsFraisDivers(1)) && count($this->loadRefsFraisDivers(2)) && $this->du_tva) {
             $facture->du_patient = $this->du_patient - $this->du_tva - $this->secteur3;
             $facture->du_tva = 0;
             $facture->taux_tva = $this->taux_tva;
         }
         if ($msg = $facture->store()) {
             echo $msg;
         }
     }
     //Lors de dévalidation de la consultation
     if ($this->fieldModified("valide", "0")) {
         $this->loadRefFacture();
         foreach ($this->_ref_factures as $_facture) {
             $_facture->_consult_id = $this->_id;
             $_facture->cancelConsult();
         }
     }
     if ($this->fieldModified("annule", "1")) {
         $this->loadRefConsultAnesth();
         foreach ($this->_refs_dossiers_anesth as $_dossier_anesth) {
             if ($_dossier_anesth->operation_id) {
                 $_dossier_anesth->operation_id = '';
                 if ($msg = $_dossier_anesth->store()) {
                     return $msg;
                 }
             }
         }
     }
     if ($this->fieldModified("annule", "0") || $this->annule == 0 && $this->motif_annulation) {
         $this->motif_annulation = "";
     }
     // Standard store
     if ($msg = parent::store()) {
         return $msg;
     }
     if (CAppUI::pref("create_dossier_anesth")) {
         $this->createConsultAnesth();
     }
     $this->completeField("_line_element_id");
     // Création d'une tâche si la prise de rdv est issue du plan de soin
     if ($this->_line_element_id) {
         $task = new CSejourTask();
         $task->consult_id = $this->_id;
         $task->sejour_id = $this->sejour_id;
         $task->prescription_line_element_id = $this->_line_element_id;
         $task->description = "Consultation prévue le " . $this->_ref_plageconsult->getFormattedValue("date");
         $line_element = new CPrescriptionLineElement();
         $line_element->load($this->_line_element_id);
         $this->motif = ($this->motif ? "{$this->motif}\n" : "") . $line_element->_view;
         $this->rques = ($this->rques ? "{$this->rques}\n" : "") . "Prescription d'hospitalisation, prescrit par le Dr " . $line_element->_ref_praticien->_view;
         // Planification manuelle à l'heure de la consultation
         $administration = new CAdministration();
         $administration->administrateur_id = CAppUI::$user->_id;
         $administration->dateTime = $this->_datetime;
         $administration->quantite = $administration->planification = 1;
         $administration->unite_prise = "aucune_prise";
         $administration->setObject($line_element);
         $this->element_prescription_id = $line_element->element_prescription_id;
         if ($msg = $administration->store()) {
             return $msg;
         }
         if ($msg = $task->store()) {
             return $msg;
         }
         if ($msg = parent::store()) {
             return $msg;
         }
     }
     // On note le résultat de la tâche si la consultation est terminée
     if ($this->chrono == CConsultation::TERMINE) {
         /** @var $task CSejourTask */
         $task = $this->loadRefTask();
         if ($task->_id) {
             $task->resultat = "Consultation terminée";
             $task->realise = 1;
             if ($msg = $task->store()) {
                 return $msg;
             }
         }
     }
     // Forfait SE et facturable. A laisser apres le store()
     if ($this->sejour_id && CAppUI::conf("dPcabinet CConsultation attach_consult_sejour")) {
         if ($forfait_se !== null || $facturable !== null || $forfait_sd !== null) {
             $this->_ref_sejour->forfait_se = $forfait_se;
             $this->_ref_sejour->forfait_sd = $forfait_sd;
             $this->_ref_sejour->facturable = $facturable;
             $this->_ref_sejour->uf_soins_id = $uf_soins_id;
             if ($msg = $this->_ref_sejour->store()) {
                 return $msg;
             }
             $this->_forfait_se = null;
             $this->_forfait_sd = null;
             $this->_facturable = null;
             $this->_uf_soins_id = null;
         }
     }
     if ($this->_adjust_sejour && $this->_ref_sejour->type === "consult" && $sejour->_id) {
         $consultations = $this->_ref_sejour->countBackRefs("consultations");
         if ($consultations < 1) {
             if ($msg = $this->_ref_sejour->delete()) {
                 $this->_ref_sejour->annule = 1;
                 if ($msg = $this->_ref_sejour->store()) {
                     return $msg;
                 }
             }
         }
     }
     // Gestion du tarif et precodage des actes
     if ($this->_bind_tarif && $this->_id) {
         if ($msg = $this->bindTarif()) {
             return $msg;
         }
     }
     // Bind FSE
     if ($this->_bind_fse && $this->_id) {
         if (CModule::getActive("fse")) {
             $fse = CFseFactory::createFSE();
             if ($fse) {
                 $fse->bindFSE($this);
             }
         }
     }
     return null;
 }
コード例 #6
0
 /**
  * @todo Use CStoredObject->store()
  */
 function store()
 {
     // Properties checking
     $this->updatePlainFields();
     $this->loadOldObject();
     if (CAppUI::conf("readonly")) {
         return CAppUI::tr($this->_class) . CAppUI::tr("CMbObject-msg-store-failed") . CAppUI::tr("Mode-readonly-msg");
     }
     if ($msg = $this->check()) {
         return CAppUI::tr($this->_class) . CAppUI::tr("CMbObject-msg-check-failed") . CAppUI::tr($msg);
     }
     // Trigger before event
     $this->notify("BeforeStore");
     $spec = $this->_spec;
     if ($this->fieldModified("remote", 0) && !CAppUI::$user->isAdmin()) {
         if (!$this->_user_password) {
             return "Veuillez saisir à nouveau votre mot de passe";
         }
     }
     /*
     if (!CAppUI::$user->isAdmin()) {
       if ($this->fieldModified("_user_type", 1) || (!$this->_id && $this->_user_type)) {
         return "Opération interdite";
       }
     }
     */
     /// <diff>
     // Store corresponding core user first
     $user = $this->createUser();
     if ($msg = $user->store()) {
         return $msg;
     }
     // User might have been re-created
     if ($this->user_id != $user->user_id) {
         $this->user_id = null;
     }
     // Can't use parent::store cuz user_id don't auto-increment
     if ($this->user_id) {
         $vars = $this->getPlainFields();
         $ret = $spec->ds->updateObject($spec->table, $vars, $spec->key, $spec->nullifyEmptyStrings);
     } else {
         $this->user_id = $user->user_id;
         $vars = $this->getPlainFields();
         $keyToUpdate = $spec->incremented ? $spec->key : null;
         $ret = $spec->ds->insertObject($spec->table, $this, $vars, $keyToUpdate);
     }
     /// </diff>
     if (!$ret) {
         return CAppUI::tr($this->_class) . CAppUI::tr("CMbObject-msg-store-failed") . $spec->ds->error();
     }
     /// <diff>
     // Bind CPS
     if ($this->_bind_cps && $this->_id && CModule::getActive("fse")) {
         $cps = CFseFactory::createCPS();
         if ($cps) {
             if ($msg = $cps->bindCPS($this)) {
                 return $msg;
             }
         }
     }
     /// </diff>
     // Préparation du log, doit être fait AVANT $this->load()
     $this->prepareLog();
     // Load the object to get all properties
     //$this->load(); // peut poser probleme, à tester
     // Enregistrement du log une fois le store terminé
     $this->doLog();
     // Trigger event
     $this->notify("AfterStore");
     $this->_old = null;
     return null;
 }