{
  "account": {
    "title": "Mon compte",
    "back": "Retour à mon espace",
    "password_title": "Changer mon mot de passe",
    "current_password": "Mot de passe actuel",
    "password_saved": "Mot de passe modifié.",
    "mfa_title": "Double authentification",
    "mfa_help": "Recommandée : un code temporaire de votre téléphone est demandé à chaque connexion (Google Authenticator, Microsoft Authenticator…).",
    "mfa_enable": "Activer la double authentification",
    "mfa_disable": "Désactiver la double authentification",
    "mfa_active": "Double authentification activée.",
    "mfa_scan": "Scannez ce QR code avec votre application d'authentification, puis saisissez le code affiché.",
    "mfa_secret": "Ou saisissez cette clé :",
    "mfa_required": "La console administrateur exige la double authentification : activez-la ci-dessous, puis reconnectez-vous avec votre code."
  },
  "admin": {
    "badge": "Administration",
    "nav_dashboard": "Tableau de bord",
    "nav_clinics": "Cliniques",
    "nav_new": "Nouvelle clinique",
    "search": "Rechercher une clinique (nom, adresse, ville)",
    "status_all": "Tous les statuts",
    "status_trial": "Essai",
    "status_active": "Active",
    "status_grace": "Période de grâce",
    "status_expired": "Expirée",
    "status_suspended": "Suspendue",
    "no_clinics": "Aucune clinique.",
    "no_clinics_text": "Créez la première clinique avec « Nouvelle clinique ».",
    "trial_left": "Essai : {{n}} j restant(s)",
    "period_end": "Licence jusqu'au {{date}}",
    "counters": "{{users}}/{{max}} utilisateurs · {{products}} produits · {{invoices}} factures · IA {{ai}}/{{quota}}",
    "last_seen": "Dernière connexion le {{date}}",
    "never_seen": "Jamais connectée",
    "slug": "Adresse de l'espace",
    "slug_help": "Espace : /c/{{slug}} (minuscules, chiffres et tirets).",
    "city": "Ville",
    "clinic_email": "E-mail de la clinique",
    "doctor_name": "Nom du médecin",
    "doctor_email": "E-mail du médecin (reçoit l'invitation)",
    "trial_days": "Durée d'essai (jours)",
    "max_users": "Utilisateurs maximum",
    "license_price": "Prix de la licence (MAD)",
    "renewal_fee": "Renouvellement annuel (MAD)",
    "create": "Créer la clinique et inviter le médecin",
    "created": "Clinique créée, invitation envoyée au médecin.",
    "error_MS040": "Adresse réservée : choisissez un autre identifiant.",
    "error_MS041": "Cette adresse est déjà utilisée par une autre clinique.",
    "error_already_registered": "Cet e-mail a déjà un compte MedStock.",
    "error_invalid_payload": "Complétez le nom, l'adresse et l'e-mail du médecin.",
    "error_mfa_required": "Double authentification requise : reconnectez-vous avec votre code.",
    "error_failed": "L'opération a échoué. Réessayez ; rien n'a été modifié.",
    "confirmed": "compte activé",
    "pending_invite": "invitation en attente",
    "inactive": "accès désactivé",
    "resend": "Renvoyer l'invitation",
    "reset": "Réinitialiser l'accès",
    "limits": "Limites et état",
    "ai_quota": "Quota IA mensuel",
    "notes": "Notes internes",
    "suspend": "Suspendre la clinique",
    "reactivate": "Réactiver la clinique",
    "suspend_message": "La clinique passe en lecture seule (consultation et export restent possibles). Aucune donnée n'est supprimée.",
    "reactivate_message": "La clinique retrouve l'écriture selon sa licence.",
    "export": "Exporter les données de la clinique",
    "support": "Accès support",
    "support_open": "Autorisé par le médecin jusqu'au {{date}} à {{time}}.",
    "support_view": "Ouvrir la vue en lecture seule",
    "support_closed": "Le médecin n'a pas autorisé l'accès support : aucune donnée de stock n'est visible.",
    "support_readonly": "Vue en lecture seule. Cet accès est inscrit au journal.",
    "audit": "Journal",
    "done": "Fait.",
    "access_title": "Accès du médecin",
    "access_password": "Créer le compte avec un identifiant et un mot de passe (aucun email envoyé)",
    "access_invite": "Envoyer une invitation par email (nécessite un service d’email configuré)",
    "doctor_login": "Identifiant de connexion (ou email)",
    "doctor_login_help": "Par exemple dr.alami : 3 à 40 caractères, lettres sans accent, chiffres, point, tiret.",
    "doctor_password": "Mot de passe",
    "generate": "Générer",
    "password_handover": "Notez-le et transmettez-le à la personne de façon sûre : il ne sera plus affiché. Elle pourra le changer dans « Mon compte ».",
    "created_password": "Clinique créée. Le médecin peut se connecter avec son identifiant et son mot de passe.",
    "new_password": "Nouveau mot de passe",
    "error_weak_password": "Mot de passe trop faible : 12 caractères au moins, avec minuscule, majuscule, chiffre et symbole.",
    "error_password_required": "Un identifiant sans email exige un mot de passe (aucune invitation ne peut être envoyée)."
  },
  "audit": {
    "invoice_import": "Facture importée",
    "lot_discard": "Lot mis au rebut",
    "return_mark": "Lot marqué à retourner",
    "return_cancel": "Retour annulé",
    "return_request": "Retour demandé",
    "return_refunded": "Remboursement enregistré",
    "import_excel": "Import du stock depuis un tableur",
    "export_full_export": "Export complet des données",
    "export_order_report": "Rapport de commande exporté",
    "export_admin": "Export des données par l’administrateur",
    "clinic_create": "Clinique créée",
    "clinic_suspend": "Compte suspendu",
    "clinic_reactivate": "Compte réactivé",
    "clinic_update": "Réglages modifiés par l’administrateur",
    "user_invite": "Utilisateur invité",
    "user_reinvite": "Invitation renvoyée",
    "user_reset_access": "Accès réinitialisé",
    "user_deactivate": "Compte désactivé",
    "user_reactivate": "Compte réactivé",
    "user_role": "Rôle modifié",
    "support_enable": "Accès support ouvert",
    "support_disable": "Accès support fermé",
    "support_access": "Consultation par le support",
    "support_denied": "Accès support refusé",
    "payment_record": "Paiement enregistré",
    "payment_cancel": "Paiement annulé",
    "trial_extend": "Essai prolongé",
    "user_set_password": "Mot de passe défini par l’administrateur"
  },
  "auth": {
    "login_title": "Connexion",
    "email": "Adresse email",
    "password": "Mot de passe",
    "sign_in": "Se connecter",
    "forgot_link": "Mot de passe oublié ?",
    "invitation_only": "L'accès se fait uniquement sur invitation de votre clinique.",
    "not_configured": "Connexion indisponible : l'application n'est pas encore reliée à sa base de données. Contactez l'administrateur.",
    "session_expired": "Votre session a expiré. Reconnectez-vous pour continuer.",
    "mfa_title": "Double authentification",
    "mfa_help": "Saisissez le code à 6 chiffres affiché dans votre application d'authentification.",
    "mfa_code": "Code à 6 chiffres",
    "verify": "Valider",
    "forgot_title": "Mot de passe oublié",
    "forgot_help": "Indiquez votre adresse email : vous recevrez un lien pour choisir un nouveau mot de passe.",
    "forgot_submit": "Envoyer le lien",
    "forgot_sent": "Si un compte existe pour cette adresse, un email vient d'être envoyé. Pensez à vérifier les indésirables.",
    "back_to_login": "Retour à la connexion",
    "invite_title": "Bienvenue sur MedStock",
    "invite_help": "Choisissez votre mot de passe pour activer votre accès.",
    "reset_title": "Nouveau mot de passe",
    "checking_link": "Vérification du lien…",
    "link_invalid": "Ce lien a expiré ou a déjà été utilisé.",
    "request_new_link": "Demander un nouveau lien",
    "new_password": "Nouveau mot de passe",
    "confirm_password": "Confirmez le mot de passe",
    "passwords_differ": "Les deux mots de passe sont différents.",
    "save_password": "Enregistrer le mot de passe",
    "doctor_only": "Cette page est réservée au médecin.",
    "login_id": "Email ou identifiant",
    "forgot_no_email": "Votre compte a été créé avec un identifiant (sans email) ? Demandez un nouveau mot de passe à votre médecin ou à l’administrateur de MedStock."
  },
  "billing": {
    "title": "Licence et paiements",
    "license_until": "Licence valable jusqu’au {{date}} ({{days}} j)",
    "trial_until": "Essai jusqu’au {{date}} ({{days}} j)",
    "license_price": "Prix de la licence (MAD)",
    "renewal_fee": "Renouvellement annuel (MAD)",
    "grace_days": "Jours de grâce",
    "extend_trial": "Prolonger l’essai",
    "days": "Nombre de jours",
    "reason": "Motif (obligatoire)",
    "extend": "Prolonger",
    "record": "Enregistrer un paiement",
    "kind": "Type",
    "kind_license": "Licence",
    "kind_renewal": "Renouvellement",
    "kind_other": "Autre",
    "amount": "Montant (MAD)",
    "method": "Mode de paiement",
    "method_cash": "Espèces",
    "method_transfer": "Virement",
    "method_cheque": "Chèque",
    "method_other": "Autre",
    "paid_at": "Date du paiement (vide = aujourd’hui)",
    "reference": "Référence",
    "proof": "Justificatif (PDF ou image, 10 Mo max.)",
    "proof_invalid": "Justificatif refusé : choisissez un PDF, JPEG, PNG ou WebP de 10 Mo maximum.",
    "note": "Note",
    "payments": "Paiements",
    "export_csv": "Exporter en CSV",
    "reversal": "écriture d’annulation",
    "cancelled": "Annulé",
    "receipt": "Reçu PDF",
    "view_proof": "Justificatif",
    "cancel": "Annuler ce paiement",
    "cancel_message": "Une écriture inverse sera ajoutée (rien n’est supprimé) et la licence sera recalculée.",
    "cancel_reason_default": "Annulation par l’administrateur",
    "no_payments": "Aucun paiement enregistré.",
    "recorded": "Paiement enregistré, reçu {{receipt}}.",
    "received_month": "Encaissé ce mois-ci",
    "received_year": "Encaissé cette année",
    "expected_30": "Attendu sous 30 jours",
    "trials_ending": "Essais qui se terminent (7 j)",
    "renewals_due": "Renouvellements à venir (30 j)",
    "overdue": "En retard de paiement",
    "recent_activity": "Activité récente",
    "none": "Rien à signaler."
  },
  "common": {
    "close": "Fermer",
    "cancel": "Annuler",
    "confirm": "Confirmer",
    "undo": "Annuler",
    "loading": "Chargement…",
    "close_tooltip": "Fermer le message",
    "save": "Enregistrer",
    "message": "{{text}}",
    "no_patient_data": "Ne saisissez aucune donnée patient (nom, dossier, téléphone…)."
  },
  "consume": {
    "title": "Prendre",
    "fefo_lot": "Lot qui sera pris (le plus proche de la péremption)",
    "chosen_lot": "Lot choisi",
    "no_lot_number": "sans n° de lot",
    "other_lot": "Autre lot",
    "back_fefo": "Revenir au lot proposé",
    "insufficient": "Stock utilisable insuffisant : {{available}} disponible(s).",
    "note": "Note (facultative)",
    "confirm": "Prendre {{qty}}",
    "done": "{{qty}} pris.",
    "no_stock": "Plus de stock utilisable pour ce produit (lots périmés, en attente de date ou réservés pour un retour). Recevez un nouveau lot ou complétez les dates.",
    "toast_taken": "Pris : {{name}}",
    "toast_undone": "Prélèvement annulé."
  },
  "dashboard": {
    "stock_value": "Valeur du stock",
    "refunded": "Remboursé : {{month}} ce mois, {{year}} cette année",
    "expired_lots": "Lots périmés",
    "pending_lots": "Lots sans date",
    "at_risk": "Risque de rupture",
    "days_left": "{{n}} j de stock",
    "no_consumption": "Pas encore de consommation enregistrée.",
    "top_month": "Les plus utilisés ce mois",
    "trend": "Consommation sur 12 mois",
    "expiry_alerts": "Péremptions proches",
    "no_alerts": "Aucune péremption proche."
  },
  "errors": {
    "read_only": "Clinique en lecture seule : la consultation et l’export restent possibles.",
    "insufficient_stock": "Stock utilisable insuffisant.",
    "lot_not_consumable": "Ce lot ne peut pas être utilisé.",
    "undo_expired": "Annulation impossible : plus de 30 secondes se sont écoulées.",
    "already_undone": "Ce prélèvement a déjà été annulé.",
    "return_transition": "Cette étape du retour n'est pas possible maintenant.",
    "duplicate_invoice": "Cette facture a déjà été importée.",
    "product_name": "Ce nom n'est pas un nom de produit valable.",
    "reference_taken": "Cette référence est déjà utilisée.",
    "forbidden": "Vous n'avez pas le droit de faire cette action.",
    "invalid_value": "Une valeur saisie est invalide. Vérifiez le formulaire.",
    "not_found": "Élément introuvable. Rechargez la page.",
    "session_expired": "Votre session a expiré. Reconnectez-vous.",
    "invalid_credentials": "Email ou mot de passe incorrect.",
    "mfa_invalid": "Code incorrect ou expiré. Réessayez avec le code actuel.",
    "same_password": "Le nouveau mot de passe doit être différent de l'ancien.",
    "weak_password": "Mot de passe trop faible : suivez les règles indiquées.",
    "rate_limited": "Trop de tentatives. Patientez quelques minutes puis réessayez.",
    "link_expired": "Ce lien a expiré. Demandez-en un nouveau.",
    "network": "Pas de connexion internet. Vérifiez votre réseau puis réessayez.",
    "generic": "Une erreur est survenue. Réessayez ; si elle persiste, contactez le support.",
    "offline": "Pas de connexion Internet : rien n’a été enregistré. Réessayez une fois reconnecté."
  },
  "fields": {
    "expiry": "Date de péremption (MM/AAAA)",
    "expiry_invalid": "Mois invalide : saisissez MM/AAAA, par exemple 03/2028.",
    "quantity": "Quantité",
    "decrease": "Diminuer",
    "increase": "Augmenter"
  },
  "help": {
    "about": "À propos",
    "version": "MedStock version {{version}}",
    "support_missing": "Contact du support : à venir.",
    "quick_title": "Aide rapide",
    "tip_receive": "« + Recevoir » : déposez une facture (PDF ou photo) ; vérifiez puis validez.",
    "tip_take": "« Prendre » : le lot qui périme le plus tôt est proposé ; « Annuler » reste possible 30 secondes.",
    "tip_returns": "« Retours » : marquez les lots à retourner avant la date limite du fournisseur.",
    "tip_dates": "Péremption : saisissez MM/AAAA, comme sur la boîte.",
    "tip_patient": "Ne saisissez jamais de donnée patient dans les notes."
  },
  "home": {
    "all_clear": "Tout est à jour ✅",
    "all_clear_text": "Aucun lot à retourner, à rebuter ou à dater, et rien à commander.",
    "to_return": "Lots à retourner ({{n}})",
    "deadline": "date limite {{date}}",
    "open_returns": "Voir les retours",
    "to_discard": "Périmés à mettre au rebut ({{n}})",
    "pending": "Lots sans date de péremption ({{n}})",
    "to_reorder": "Produits à commander ({{n}})",
    "open_order": "Rapport de commande",
    "late": "Délai fournisseur dépassé ({{n}})"
  },
  "import": {
    "choose": "Importer un fichier Excel",
    "template": "Télécharger le modèle",
    "sheet_name": "Stock",
    "col_name": "Nom",
    "col_reference": "Référence",
    "col_quantity": "Quantité",
    "col_lot": "N° de lot",
    "col_expiry": "Péremption",
    "col_cost": "Coût unitaire",
    "col_supplier": "Fournisseur",
    "col_unit": "Unité",
    "col_threshold": "Seuil",
    "missing_columns": "Colonnes obligatoires absentes : {{columns}}. Utilisez le modèle.",
    "done": "{{n}} lot(s) importé(s).",
    "rejected": "{{n}} ligne(s) refusée(s) :",
    "row": "Ligne {{row}}",
    "reason_missing_reference": "référence manquante",
    "reason_invalid_quantity": "quantité invalide (nombre entier supérieur à 0)",
    "reason_invalid_date": "date de péremption illisible (JJ/MM/AAAA ou MM/AAAA)",
    "reason_invalid_cost": "coût invalide"
  },
  "invoice": {
    "drop_title": "Déposer une facture",
    "drop_text": "PDF, photo ou scan (JPG, PNG, WebP, HEIC). Les produits et les lots sont préparés pour vérification.",
    "take_photo": "Prendre en photo",
    "choose_file": "Choisir un fichier",
    "manual_entry": "Saisir la facture à la main",
    "reading": "Lecture de la facture…",
    "unsupported_type": "Format non pris en charge : utilisez un PDF ou une photo (JPG, PNG, WebP, HEIC).",
    "too_large": "Fichier trop lourd (15 Mo maximum). Réduisez la photo ou scannez en qualité normale.",
    "fallback_ai_quota_exceeded": "Quota mensuel de lecture automatique atteint : complétez la facture à la main (ou contactez l'administrateur pour l'augmenter).",
    "fallback_ai_unavailable": "Lecture automatique indisponible pour le moment : complétez la facture à la main.",
    "fallback_ai_invalid_response": "La facture n'a pas pu être lue avec certitude : rien n'a été créé, complétez-la à la main.",
    "fallback_unreadable": "Aucune ligne de produit n'a été trouvée : complétez la facture à la main.",
    "mapping_title": "Indiquer les colonnes",
    "mapping_text": "Les colonnes n'ont pas été reconnues. Choisissez le rôle de chacune ; les autres seront ignorées.",
    "mapping_empty": "Aucune ligne avec une désignation et une quantité : vérifiez les colonnes choisies.",
    "apply_mapping": "Lire avec ces colonnes",
    "field_ignore": "Ignorer",
    "field_designation": "Désignation",
    "field_reference": "Référence",
    "field_quantity": "Quantité",
    "field_unit_price": "Prix unitaire",
    "field_discount_pct": "Remise (%)",
    "field_discount_amount": "Remise (montant)",
    "field_total": "Montant de la ligne",
    "review_title": "Vérifier la facture",
    "read_by_ai": "Lue automatiquement à partir de la photo : vérifiez chaque ligne.",
    "quote_warning": "Attention : ce document est un devis, pas une facture. Ne le validez que si la marchandise a bien été reçue.",
    "duplicate": "Facture déjà importée le {{date}} : rien ne sera créé.",
    "supplier": "Fournisseur (émetteur)",
    "number": "Numéro du document",
    "date": "Date du document",
    "document_type": "Type",
    "type_invoice": "Facture",
    "type_quote": "Devis",
    "type_delivery_note": "Bon de livraison",
    "type_order": "Bon de commande",
    "price_basis": "Prix",
    "lines_total": "Total des lignes : {{total}}",
    "document_total": "total du document : {{total}}",
    "gap": "Écart : {{gap}}",
    "add_line": "Ajouter une ligne",
    "fix_errors": "Complétez le fournisseur, le numéro et les lignes signalées (quantités réparties, date ou « Compléter plus tard »).",
    "confirm": "Valider la réception ({{n}} ligne(s))",
    "saved": "Facture enregistrée : {{n}} ligne(s) reçue(s)."
  },
  "language": {
    "switch": "Changer de langue (français / anglais)"
  },
  "legal": {
    "privacy_title": "Confidentialité",
    "terms_title": "Conditions d’utilisation",
    "pending": "Texte juridique en cours de rédaction : il sera relu par un juriste (loi 09-08) avant l’ouverture du service.",
    "stored_title": "Ce que l’application enregistre",
    "stored_accounts": "Comptes : nom, adresse email, rôle, dernière connexion.",
    "stored_stock": "Stock de la clinique : produits, lots, factures, mouvements, retours.",
    "stored_logs": "Journal des actions sensibles (qui, quoi, quand).",
    "rights_title": "Vos données",
    "rights_text": "Le médecin peut exporter toutes les données de sa clinique depuis Paramètres. La suppression complète se fait sur demande auprès du support, après un export.",
    "back": "Retour"
  },
  "license_banner": {
    "trial": "Essai gratuit : {{days}} jour(s) restant(s).",
    "grace": "Licence expirée le {{date}}. Période de grâce jusqu’au {{grace}} : pensez à renouveler.",
    "expired": "Lecture seule : l’essai ou la licence est terminé. Consultation et export restent possibles.",
    "suspended": "Compte suspendu : lecture seule. Consultation et export restent possibles.",
    "contact": "Contact : {{contact}}",
    "contact_missing": "Contactez l'administrateur de MedStock pour réactiver l'accès.",
    "payment": "Pour régler : {{text}}"
  },
  "lot_status": {
    "PENDING": "En attente de date",
    "DISCARDED": "Rebuté",
    "EXPIRED": "Périmé",
    "RETURN_WINDOW": "À retourner",
    "RETURN_LATE": "Délai fournisseur dépassé",
    "OK": "Valide"
  },
  "menu": {
    "main": "Navigation principale",
    "home": "Accueil",
    "products": "Produits",
    "receive": "Recevoir",
    "returns": "Retours",
    "dashboard": "Tableau de bord",
    "order": "Rapport de commande",
    "settings": "Paramètres",
    "help": "À propos et aide",
    "more": "Plus",
    "account": "Mon compte",
    "sign_out": "Se déconnecter"
  },
  "movement": {
    "IN": "Entrée",
    "OUT": "Sortie",
    "ADJ": "Ajustement"
  },
  "notifications": {
    "title": "Notifications",
    "ios_title": "Sur iPhone, installez d’abord l’application :",
    "ios_step1": "Ouvrez MedStock dans Safari.",
    "ios_step2": "Touchez Partager, puis « Sur l’écran d’accueil ».",
    "ios_step3": "Ouvrez MedStock depuis l’écran d’accueil et revenez ici pour activer les notifications.",
    "android_hint": "Sur Android, utilisez Chrome. Pour une vraie application : menu ⋮ puis « Installer l’application ».",
    "permission_granted": "Notifications autorisées sur cet appareil.",
    "permission_denied": "Notifications bloquées : autorisez-les dans les réglages du navigateur pour ce site, puis réessayez.",
    "permission_default": "Notifications pas encore activées sur cet appareil.",
    "permission_unsupported": "Ce navigateur ne prend pas en charge les notifications.",
    "enable": "Activer sur cet appareil",
    "disable": "Désactiver sur cet appareil",
    "test": "Tester la notification",
    "unavailable": "Indisponible pour le moment (application non installée ou notifications non configurées sur le serveur).",
    "events_title": "Alertes reçues",
    "push": "Téléphone",
    "email": "Email",
    "email_unavailable": "Email de secours : disponible quand un fournisseur d’email sera configuré.",
    "event_return_window": "Lot à retourner (fenêtre de retour ouverte)",
    "event_return_deadline": "Date limite de retour proche",
    "event_lot_expired": "Lot périmé",
    "event_low_stock": "Produit en rupture ou sous le seuil",
    "event_pending_expiry": "Lot sans date de péremption",
    "event_invoice_imported": "Facture importée",
    "event_assistant_activity": "Prises et réceptions de l’assistante (résumé)",
    "event_return_requested": "Demande de retour envoyée",
    "event_return_refunded": "Remboursement reçu",
    "event_trial_reminder": "Fin de l’essai",
    "event_license_reminder": "Renouvellement de licence",
    "event_license_overdue": "Retard de paiement",
    "event_payment_recorded": "Paiement enregistré",
    "result_ok": "Notifications activées sur cet appareil.",
    "result_denied": "Notifications refusées : autorisez-les dans les réglages du navigateur.",
    "result_unavailable": "Notifications indisponibles sur cet appareil pour le moment.",
    "result_failed": "Activation impossible. Vérifiez la connexion et réessayez.",
    "disabled": "Notifications désactivées sur cet appareil.",
    "test_ok": "Notification de test envoyée.",
    "test_no_device": "Aucun appareil abonné : activez d’abord les notifications.",
    "test_failed": "Envoi impossible. Réessayez plus tard."
  },
  "offline": {
    "banner": "Hors connexion : consultation seulement",
    "last_update": "dernière mise à jour à {{time}}",
    "action_disabled": "Indisponible hors connexion : reconnectez-vous à Internet pour enregistrer."
  },
  "onboarding": {
    "title": "Bienvenue ! Trois étapes pour démarrer",
    "step": "Étape {{n}} sur {{total}}",
    "step1_text": "Choisissez la langue et l'apparence (modifiables plus tard dans les paramètres).",
    "lang_fr": "Français",
    "lang_en": "English",
    "clinic_name": "Nom de la clinique",
    "step3_text": "Comment voulez-vous commencer ?",
    "start_invoice": "Déposer une facture",
    "start_invoice_text": "Le plus rapide : les produits et le stock se créent depuis la facture.",
    "start_regenlab": "Précharger le catalogue RegenLab",
    "start_regenlab_text": "Les produits RegenLab connus, sans stock : vous recevrez les lots ensuite.",
    "regenlab_done": "Catalogue RegenLab ajouté.",
    "start_excel": "Importer un fichier Excel (une ligne = un lot)",
    "skip": "Ignorer",
    "back": "Retour",
    "next": "Suivant",
    "finish": "Démarrer à vide"
  },
  "order": {
    "nothing": "Rien à commander.",
    "nothing_text": "Tous les produits sont au-dessus de leur seuil.",
    "explain": "Quantités suggérées : consommation des 30 derniers jours × 7 jours (ou le seuil), arrondies à la boîte.",
    "download": "Télécharger le rapport (Excel)",
    "kept": "Fichier conservé 30 jours.",
    "open_link": "Ouvrir le fichier enregistré",
    "saved": "Rapport de commande téléchargé.",
    "stock": "{{qty}} utilisable(s), seuil {{threshold}}",
    "sheet_name": "Commande",
    "col_product": "Produit",
    "col_reference": "Référence",
    "col_supplier": "Fournisseur",
    "col_usable": "Stock utilisable",
    "col_threshold": "Seuil",
    "col_avg": "Consommation par jour",
    "col_units": "À commander (unités)",
    "col_boxes": "Boîtes"
  },
  "password": {
    "rules": "Règles du mot de passe",
    "rule_length": "Au moins {{min}} caractères",
    "rule_lower": "Une lettre minuscule",
    "rule_upper": "Une lettre majuscule",
    "rule_digit": "Un chiffre",
    "rule_symbol": "Un symbole (par exemple ! ? - _)",
    "rule_common": "Pas de suite trop simple (azerty, 123456, medstock…)"
  },
  "product_sheet": {
    "tab_lots": "Lots",
    "tab_history": "Historique",
    "tab_edit": "Modifier",
    "pending_title": "En attente de date",
    "expired_title": "Périmés : à mettre au rebut",
    "lots_title": "Lots",
    "no_lots": "Aucun lot en stock.",
    "save_date": "Enregistrer la date",
    "date_saved": "Date enregistrée.",
    "discard": "Mettre au rebut",
    "discard_title": "Mettre au rebut ?",
    "discard_message": "Le lot {{lot}} ({{qty}}) sera retiré du stock. Cette action est tracée et ne peut pas être annulée.",
    "discarded": "Lot mis au rebut.",
    "no_history": "Aucun mouvement.",
    "alert_days": "Alerte de péremption (jours avant)",
    "storage": "Conservation",
    "saved": "Produit enregistré.",
    "deactivate": "Désactiver le produit",
    "deactivate_title": "Désactiver ce produit ?",
    "deactivate_message": "Il disparaît des listes ; son historique est conservé.",
    "deactivated": "Produit désactivé."
  },
  "products": {
    "search": "Produit, référence ou n° de lot",
    "filter_expiry": "Filtrer par péremption",
    "expiry_all": "Toutes les péremptions",
    "expiry_30": "Périme dans 30 jours",
    "expiry_90": "Périme dans 90 jours",
    "expiry_expired": "Lots périmés",
    "filter_supplier": "Filtrer par fournisseur",
    "supplier_all": "Tous les fournisseurs",
    "new": "Nouveau produit",
    "empty": "Aucun produit.",
    "empty_text": "Déposez votre première facture : les produits et le stock se créent tout seuls.",
    "empty_action": "Déposer une facture",
    "no_match": "Aucun produit ne correspond.",
    "no_match_text": "Essayez un autre mot, une référence ou un n° de lot, ou retirez les filtres.",
    "pagination": "Pages de produits",
    "prev": "Précédent",
    "next": "Suivant",
    "page_info": "Page {{page}} sur {{pages}} · {{total}} produit(s)",
    "take": "Prendre",
    "next_expiry": "prochaine péremption",
    "usable": "Stock utilisable",
    "threshold": "seuil",
    "badge_return": "À retourner ({{n}})",
    "badge_expired": "Périmé ({{n}})",
    "badge_pending": "En attente de date ({{n}})",
    "badge_low": "Sous le seuil",
    "badge_out": "Rupture",
    "badge_never": "Pas encore de stock"
  },
  "pwa": {
    "install": "Installer l’application"
  },
  "read_only": {
    "action_disabled": "Indisponible en lecture seule (essai terminé, licence expirée ou compte suspendu)."
  },
  "receive_page": {
    "known_title": "Produit déjà connu",
    "known_placeholder": "Nom, référence ou n° de lot"
  },
  "reception": {
    "title_existing": "Recevoir",
    "title_new": "Nouveau produit",
    "existing": "Produit existant",
    "new": "Nouveau",
    "doubtful": "À vérifier",
    "remove_line": "Retirer cette ligne",
    "stock_change": "Stock actuel {{before}} → après réception {{after}}",
    "product_name": "Nom du produit",
    "reference": "Référence",
    "unit": "Unité",
    "box_size": "Unités par boîte",
    "threshold": "Seuil d'alerte (stock minimum)",
    "supplier": "Fournisseur",
    "category": "Catégorie",
    "quantity_received": "Quantité reçue",
    "unit_cost": "Coût unitaire net (MAD)",
    "lot_number": "N° de lot ou de kit",
    "later": "Compléter plus tard",
    "remove_lot": "Retirer ce lot",
    "add_lot": "Autre lot",
    "remaining": "Reste à répartir : {{n}}",
    "same_date": "Même date pour toutes les lignes",
    "apply_all": "Appliquer",
    "later_all": "Tout compléter plus tard",
    "fix_errors": "Complétez les champs signalés : nom, référence, quantités réparties et date ou « Compléter plus tard ».",
    "confirm": "Confirmer la réception",
    "saved": "Réception enregistrée ({{n}} lot(s))."
  },
  "return_status": {
    "NONE": "Aucun retour",
    "TO_RETURN": "À retourner",
    "REQUESTED": "Retour demandé",
    "REFUNDED": "Remboursé"
  },
  "returns": {
    "recoverable": "Valeur récupérable",
    "late_potential": "Potentiel hors délai",
    "refunded_month": "Remboursé ce mois",
    "refunded_year": "Remboursé cette année",
    "tab_to_return": "À retourner",
    "tab_requested": "Retour demandé",
    "tab_refunded": "Remboursé",
    "empty_to_return": "Aucun lot à retourner.",
    "empty_requested": "Aucune demande en cours.",
    "empty_refunded": "Aucun remboursement pour l'instant.",
    "empty_text": "Les lots proches de la date limite du fournisseur apparaissent ici automatiquement.",
    "deadline_message": "À retourner avant le {{date}} ({{days}} jour(s) restant(s)).",
    "late_message": "Délai fournisseur dépassé, contactez-le quand même.",
    "mark": "Marquer à retourner",
    "request": "Demander le remboursement",
    "cancel": "Annuler le retour",
    "edit_rule": "Règle du fournisseur",
    "requested_on": "Demande envoyée le {{date}}.",
    "resend": "Revoir ou renvoyer la demande",
    "refund_amount": "Montant remboursé (MAD)",
    "mark_refunded": "Marquer remboursé",
    "refund_confirm_title": "Confirmer le remboursement ?",
    "refund_confirm_message": "Montant reçu : {{amount}}. Les unités retournées sortent du stock (mouvement tracé).",
    "refunded_info": "Remboursé {{amount}} le {{date}}",
    "refunded_done": "Remboursement enregistré.",
    "marked": "Lot réservé pour le retour.",
    "cancelled": "Retour annulé : le lot est de nouveau utilisable.",
    "request_title": "Demande de remboursement",
    "request_help": "Message prêt à envoyer au fournisseur (toujours en français). Rien ne change tant que vous n'avez pas confirmé l'envoi.",
    "send_email": "Envoyer par e-mail",
    "send_whatsapp": "Envoyer par WhatsApp",
    "copy": "Copier le message",
    "copied": "Message copié.",
    "pdf": "Télécharger le PDF",
    "no_contact": "Aucun e-mail ni téléphone pour ce fournisseur : copiez le message ou envoyez le PDF.",
    "i_sent": "J'ai envoyé la demande",
    "requested": "Retour marqué comme demandé."
  },
  "settings": {
    "clinic": "Clinique",
    "language": "Langue",
    "theme": "Thème",
    "saved": "Enregistré.",
    "suppliers": "Fournisseurs",
    "add_supplier": "Ajouter un fournisseur",
    "edit_supplier": "Modifier le fournisseur",
    "edit": "Modifier",
    "no_suppliers": "Aucun fournisseur : ils sont créés à la première réception.",
    "contact": "Contact",
    "phone": "Téléphone",
    "team": "Équipe",
    "role_doctor": "Médecin",
    "role_assistant": "Assistante",
    "last_seen": "vu le {{date}}",
    "deactivate": "Désactiver l'accès",
    "reactivate": "Réactiver l'accès",
    "deactivate_title": "Désactiver cet accès ?",
    "deactivate_message": "{{name}} ne pourra plus se connecter. Son historique est conservé.",
    "invite_name": "Nom de l'assistante",
    "invite": "Inviter",
    "invite_help": "Elle reçoit un e-mail pour choisir son mot de passe.",
    "invited": "Invitation envoyée.",
    "invite_max_users_reached": "Nombre maximal d'utilisateurs atteint : désactivez un accès ou contactez l'administrateur.",
    "invite_already_registered": "Cette adresse a déjà un compte MedStock.",
    "invite_invalid_email": "Adresse e-mail invalide.",
    "invite_read_only": "Clinique en lecture seule : invitation impossible.",
    "invite_doctor_only": "Seul le médecin peut inviter.",
    "invite_unauthenticated": "Session expirée : reconnectez-vous.",
    "invite_failed": "L'invitation n'a pas pu être envoyée. Réessayez plus tard.",
    "notifications": "Notifications",
    "export": "Export complet",
    "export_text": "Toutes les données de la clinique (tableaux CSV et factures) dans un fichier zip.",
    "export_button": "Exporter toutes les données",
    "export_progress": "Préparation… {{p}} %",
    "export_done": "Export téléchargé.",
    "support_title": "Accès support",
    "support_text": "Autorisez l'équipe MedStock à consulter votre stock (lecture seule) pendant 24 heures pour vous aider. Chaque consultation est journalisée.",
    "support_open": "Autoriser pendant 24 heures",
    "support_close": "Retirer l'accès",
    "support_until": "Accès autorisé jusqu'au {{date}}.",
    "quiet_start": "Silence à partir de",
    "quiet_end": "Silence jusqu’à",
    "digest_hour": "Heure du résumé quotidien",
    "notifications_help": "Pendant la plage silencieuse, rien n’est envoyé : les alertes attendent la fin. Les alertes de dates (retours, péremptions, stock bas) arrivent groupées dans le résumé quotidien.",
    "my_notifications": "Mes notifications",
    "audit_title": "Journal des actions",
    "audit_text": "Actions sensibles de la clinique : réceptions, rebuts, retours, paiements, accès support, exports, comptes.",
    "audit_empty": "Aucune action enregistrée.",
    "add_with_password": "Avec un identifiant et un mot de passe",
    "add_with_invite": "Par invitation email",
    "add_member": "Créer le compte",
    "add_with_password_help": "Aucun email n’est envoyé : transmettez l’identifiant et le mot de passe à la personne. Elle pourra changer son mot de passe dans « Mon compte ».",
    "member_added": "Compte créé : transmettez l’identifiant et le mot de passe.",
    "invite_weak_password": "Mot de passe trop faible : 12 caractères au moins, avec minuscule, majuscule, chiffre et symbole.",
    "invite_password_required": "Un identifiant sans email exige un mot de passe.",
    "invite_rate_limited": "Trop de comptes créés en peu de temps : réessayez dans une heure."
  },
  "space_not_found": {
    "title": "Espace introuvable",
    "text": "Cette adresse ne correspond à aucun espace clinique. Vérifiez le lien ou revenez à votre espace.",
    "go_home": "Aller à mon espace"
  },
  "supplier_rule": {
    "question": "Comment ce fournisseur accepte-t-il les retours ?",
    "before_cutoff": "Jusqu'à {{n}} jours avant la péremption",
    "last_days": "Pendant les {{n}} derniers jours avant la péremption",
    "days": "Nombre de jours (N)",
    "lead": "Prévenir combien de jours avant la date limite",
    "preview": "Exemple : un lot qui périme le {{expiry}} apparaîtra à retourner à partir du {{start}}, date limite le {{deadline}}.",
    "saved": "Règle de retour enregistrée."
  },
  "theme": {
    "choose": "Choisir le thème",
    "dark": "Thème Noir",
    "light": "Thème Blanc",
    "pink": "Thème Rose",
    "green": "Thème Vert"
  },
  "units": {
    "unit_one": "unité",
    "unit_other": "unités",
    "kit_one": "kit",
    "kit_other": "kits",
    "tube_one": "tube",
    "tube_other": "tubes",
    "box_one": "boîte",
    "box_other": "boîtes"
  },
  "update": {
    "ready": "Une nouvelle version de MedStock est prête.",
    "reload": "Recharger"
  }
}
