companies | id, name, company_type, subscription_status, token_balance, trial_ends_at, grace_ends_at, contact_email, contact_phone, siret, is_active | Entreprises clientes (type=client) et agences intérim (type=agency). token_balance = crédits quiz restants. grace_ends_at = délai post-expiration avant blocage. |
users | id, email, role, client_role, company_id, first_name, last_name, stg_number, is_active, two_fa_enabled, is_2dplus_admin, site_restriction_id | 5 rôles : admin/client/agency/trainer/trainee. client_role = admin/user/viewer (pour role=client). FK → companies. 2FA obligatoire pour client admin/user. |
sites | id, company_id, name, address, city | Sites géographiques d'une entreprise. FK → companies. Lié à users.site_restriction_id pour restreindre un client à un site. |
certifications | id, trainee_id, habilitation_type_id, is_valid, valid_until, issued_at, session_id, score_percentage | Habilitations délivrées. FK → users (trainee_id), content.habilitation_types, sess.sessions. Alerte à J-30 via scheduler. |
cert_renewals | id, certification_id, renewed_at, new_valid_until, renewed_by | Historique des renouvellements. FK → certifications. |
quiz_results | id, trainee_id, session_trainee_id, quiz_id, score_correct, score_total, score_percentage, passed, failed_fundamental, answers_json, completed_at | Résultats de quiz. FK → users, session_trainees, content.quizzes. failed_fundamental=1 = question fondamentale ratée → échec automatique §D.3.1. answers_json = détail complet. |
trainee_access_tokens | id, trainee_id, session_trainee_id, token_value, temp_password, is_used, expires_at, extra_quiz_ids, selected_question_ids | Tokens QR one-shot. temp_password affiché dans QR code. extra_quiz_ids = quiz supplémentaires (multi-habilitations). selected_question_ids = questions tirées aléatoirement. |
session_trainees | id, session_id, trainee_id, habilitation_type_id, theory_score, practical_validated, support_pedagogique_recu, nir, completed_at | Ligne par (stagiaire × habilitation × session). FK → sess.sessions, users, content.habilitation_types. Pivot central de la formation. |
trainee_habilitations | id, trainee_id, habilitation_type_id, status, acquired_at | Vue agrégée des habilitations actives d'un stagiaire (toutes sessions confondues). FK → content.habilitation_types. |
token_envelopes | id, company_id, quantity, operation, notes, created_at | Historique achats/consommations tokens quiz. FK → companies. operation = credit / debit / admin_adjust. |
worker_messages | id (SERIAL), company_id, worker_id, message, created_at | Messages de la messagerie interne (module agence/intérim). FK → companies, users. |
agency_worker_profiles | id, user_id, agency_id, availability_status, skills_json | Profils intérimaires gérés par une agence. FK → users, companies (agence). |
elearning_assignments | id, user_id, module_id, assigned_by, due_date, completed_at | Affectations de modules e-learning. FK → users, content.elearning_modules. |