PSA/server/public/locales/fr/msp/service-catalog.json
Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

450 lines
17 KiB
JSON
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"taxRates": {
"errors": {
"loadRegions": "Échec du chargement des régions fiscales.",
"validateDeletion": "Échec de la validation de la suppression. Veuillez réessayer.",
"fetchRates": "Échec de la récupération des taux de taxe",
"add": "Échec de l'ajout du taux de taxe",
"update": "Échec de la mise à jour du taux de taxe",
"confirmDeletion": "Échec de la confirmation de la suppression du taux de taxe."
},
"validation": {
"requiredFieldsTitle": "Veuillez remplir les champs obligatoires :",
"region": "Région fiscale",
"percentage": "Pourcentage de taxe",
"startDate": "Date de début"
},
"table": {
"description": "Description",
"startDate": "Date de début",
"endDate": "Date de fin",
"actions": "Actes",
"notAvailable": "S/O",
"region": "Région",
"taxPercentage": "Pourcentage d'impôt",
"composite": "Composite"
},
"actions": {
"openMenu": "Ouvrir le menu",
"edit": "Modifier",
"delete": "Supprimer",
"advancedSettings": "Paramètres avancés",
"addNew": "Ajouter un nouveau taux de taxe",
"add": "Ajouter un taux de taxe",
"update": "Mettre à jour le taux de taxe"
},
"dialog": {
"fields": {
"description": "Description",
"startDate": "Date de début *",
"endDate": "Date de fin (facultatif)",
"region": "Région fiscale *",
"percentage": "Pourcentage de taxe *"
},
"placeholders": {
"loadingRegions": "Chargement des régions...",
"selectRegion": "Sélectionnez la région fiscale",
"percentage": "Entrez le pourcentage"
},
"addTitle": "Ajouter un nouveau taux de taxe",
"editTitle": "Modifier le taux de taxe",
"description": "Saisissez les détails du taux de taxe."
},
"title": "Taux d'imposition",
"loading": "Chargement des taux de taxe",
"deleteEntity": {
"fallback": "ce taux d'imposition",
"withRegion": "taux de taxe {{regionName}}"
}
},
"taxRateDetail": {
"fields": {
"regionCode": "Code de région",
"description": "Description",
"startDate": "Date de début",
"endDate": "Date de fin",
"taxPercentage": "Pourcentage d'impôt",
"taxType": "Type de taxe",
"isComposite": "Est composite",
"isActive": "Est actif"
},
"values": {
"dash": "-",
"noEndDate": "Pas de date de fin",
"yes": "Oui",
"no": "Non",
"active": "Actif",
"inactive": "Inactif",
"composite": "Composite"
},
"actions": {
"back": "Retour aux taux d'imposition"
},
"subtitle": "{{regionCode}} - {{percentage}}%",
"tabs": {
"details": "Détails",
"components": "Composants",
"brackets": "Paliers",
"holidays": "Jours fériés"
},
"precedence": {
"title": "Priorité au calcul des taxes",
"clientExempt": "L'indicateur d'exonération de taxe du client est coché en premier (s'il est exonéré, aucune taxe n'est appliquée)",
"serviceSpecific": "Le taux de taxe spécifique au service est utilisé s'il est attribué",
"clientDefault": "Le taux d'imposition par défaut du client est utilisé comme solution de repli",
"regionLookup": "La recherche de région fiscale détermine le taux applicable en fonction de l'emplacement"
},
"components": {
"simpleRateMessage": "Il sagit dun taux dimposition simple et non dun taux composite. Les composants de taxe ne sont utilisés que pour les taxes composites.",
"enableCompositeMessage": "Pour utiliser des composants fiscaux, marquez ce taux comme composite lors de sa modification."
},
"brackets": {
"intro": "Les tranches dimposition progressives appliquent des taux différents à différentes parties dun montant.",
"precedence": "Lorsque des tranches sont définies, elles priment sur le taux forfaitaire effectif global."
}
},
"serviceForm": {
"errors": {
"loadServiceTypes": "Échec de la récupération des types de services",
"serviceTypeNotFound": "Type de service sélectionné introuvable",
"create": "Échec de la création du service",
"loadTaxData": "Échec du chargement des données fiscales.",
"selectServiceType": "Veuillez sélectionner un type de service"
},
"fields": {
"serviceName": {
"placeholder": "Nom du service"
},
"serviceType": {
"label": "Type de service",
"placeholder": "Sélectionnez le type de service"
},
"billingMethod": {
"label": "Méthode de facturation",
"placeholder": "Sélectionnez la méthode de facturation"
},
"description": {
"label": "Description",
"placeholder": "Description des services"
},
"taxRate": {
"label": "Taux d'imposition",
"placeholderLoading": "Chargement des données fiscales...",
"placeholder": "Sélectionnez le taux de taxe (facultatif)"
},
"defaultRate": {
"placeholder": "Taux de défaut"
},
"unitOfMeasure": {
"placeholder": "Unité de mesure"
}
},
"options": {
"billingMethod": {
"hourly": "Horaire",
"usage": "Basé sur l'utilisation",
"fixed": "Prix fixe"
}
},
"taxRateOption": {
"fallback": "S/O",
"label": "{{description}} - {{percentage}}%"
},
"actions": {
"submit": "Ajouter un service"
}
},
"serviceSelection": {
"table": {
"type": "Taper",
"unit": "Unité",
"rate": "Tarif",
"product": "Produit",
"itemName": "Nom de l'article",
"service": "Service",
"unknown": "Inconnu"
},
"actions": {
"cancel": "Annuler",
"addSelected": "Ajouter les services sélectionnés",
"adding": "Ajout..."
},
"title": "Ajouter des services et des produits au plan",
"searchPlaceholder": "Rechercher des services/produits...",
"errors": {
"load": "Échec du chargement des services",
"add": "Échec de l'ajout de services au plan"
},
"states": {
"loading": "Chargement des services...",
"empty": "Aucun service trouvé"
},
"selection": {
"countOne": "{{count}} service sélectionné",
"countOther": "{{count}} services sélectionnés"
},
"quickAdd": {
"label": "Ajout rapide :",
"allType": "Tous {{type}}"
}
},
"configType": {
"warningDialog": {
"cancel": "Annuler",
"title": "Changer le type de configuration ?",
"description": "La modification du type de configuration réinitialisera tous les paramètres spécifiques au type. Cette action ne peut pas être annulée.",
"confirm": "Changer le type"
},
"placeholder": "Sélectionnez le type de configuration",
"options": {
"Fixed": {
"label": "Prix fixe",
"description": "Un service à prix fixe avec une facturation cohérente quelle que soit l'utilisation. Idéal pour les services prévisibles."
},
"Hourly": {
"label": "Taux horaire",
"description": "Facturation basée sur le temps avec des tarifs configurables. Idéal pour les charges de travail variables facturées en fonction du temps passé."
},
"Usage": {
"label": "Basé sur l'utilisation",
"description": "Facturation basée sur l'utilisation avec options de tarification échelonnées. Parfait pour les services mesurés par la consommation."
},
"Bucket": {
"label": "Forfait d'heures",
"description": "Des heures préachetées pouvant être utilisées dans le temps. Idéal pour les clients qui ont besoin de flexibilité avec un plafond budgétaire."
}
}
},
"serviceConfig": {
"fields": {
"quantity": {
"label": "Quantité",
"placeholder": "Entrez la quantité",
"help": "Nombre d'unités de ce service",
"errorNegative": "La quantité ne peut pas être négative"
},
"customRate": {
"label": "Tarif personnalisé",
"placeholder": "Entrez le taux",
"placeholderDefault": "Par défaut : {{rate}}",
"helpCustom": "Tarif personnalisé pour ce service",
"helpUseDefault": "Laissez vide pour utiliser le taux par défaut ({{rate}})",
"errorNegative": "Le taux ne peut pas être négatif"
},
"configurationType": "Type de configuration"
},
"actions": {
"cancel": "Annuler",
"saving": "Économie...",
"save": "Enregistrer la configuration"
},
"title": "Configuration des services",
"serviceLabel": "Service",
"effectiveModeLabel": "Mode effectif",
"defaultSourceLabel": "Source par défaut",
"modes": {
"Fixed": "Prix fixe",
"Hourly": "Taux horaire",
"Usage": "Basé sur l'utilisation",
"Bucket": "Forfait d'heures"
},
"defaultSources": {
"catalog default": "catalogue par défaut",
"contract override": "dérogation au contrat",
"none": "aucun"
},
"bucketOverlay": {
"recommendHours": "Recommander une tranche d'heures",
"recommendUsage": "Recommander un seau de consommation"
}
},
"hourlyConfig": {
"fields": {
"minimumBillableTime": {
"placeholder": "15",
"label": "Temps facturable minimum (minutes)",
"help": "Temps minimum de facturation (par exemple, 15 minutes)",
"errorNegative": "Le temps minimum facturable ne peut pas être négatif"
},
"roundUpToNearest": {
"placeholder": "15",
"label": "Arrondir au plus proche (minutes)",
"help": "Arrondir les entrées de temps à l'incrément le plus proche",
"errorNegative": "La valeur arrondie ne peut pas être négative"
},
"newUserType": {
"label": "Type d'utilisateur",
"placeholder": "Sélectionnez le type d'utilisateur"
},
"newUserTypeRate": {
"label": "Tarif",
"placeholder": "Entrez le taux",
"errorNegative": "Le taux de type d'utilisateur ne peut pas être négatif"
}
},
"userTypeRates": {
"headers": {
"userType": "Type d'utilisateur",
"rate": "Tarif"
},
"title": "Tarifs par type d'utilisateur",
"options": {
"technician": "Technicien",
"engineer": "Ingénieur",
"consultant": "Consultante",
"project_manager": "Chef de projet",
"admin": "Administrateur"
},
"actions": {
"addRate": "Ajouter un tarif"
}
},
"title": "Configuration du taux horaire"
},
"usageConfig": {
"defaults": {
"unitOfMeasure": "Unité"
},
"fields": {
"unitOfMeasure": {
"errorRequired": "L'unité de mesure est requise",
"label": "Unité de mesure",
"placeholder": "Entrez l'unité de mesure",
"help": "L'unité utilisée pour mesurer l'utilisation (par exemple Go, utilisateur, appareil)"
},
"minimumUsage": {
"placeholder": "0",
"label": "Seuil d'utilisation minimum",
"help": "Utilisation minimale facturable par période (0 pour aucun minimum)",
"errorNegative": "L'utilisation minimale ne peut pas être négative"
},
"enableTieredPricing": "Activer la tarification échelonnée"
},
"title": "Configuration basée sur l'utilisation",
"tiers": {
"title": "Niveaux de tarification",
"addTier": "Ajouter un niveau",
"empty": "Aucun niveau configuré. Ajoutez un niveau pour définir une tarification basée sur le volume.",
"from": "De ({{unit}})",
"to": "À ({{unit}})",
"ratePer": "Tarif par {{unit}}",
"unlimited": "Illimité",
"help": "Configurez les niveaux de tarification basés sur le volume. Chaque niveau applique son tarif à l'utilisation qui se situe dans sa plage.",
"errors": {
"onlyLastUnlimited": "Seul le dernier niveau peut avoir une limite supérieure illimitée",
"overlap": "Les niveaux ne peuvent pas se chevaucher",
"upperGreaterThanLower": "La limite supérieure du niveau doit être supérieure à la limite inférieure",
"rateNegative": "Les tarifs par niveau ne peuvent pas être négatifs"
}
}
},
"rateTiers": {
"table": {
"actions": "Actes",
"minQuantity": "Quantité minimale",
"maxQuantity": "Quantité maximale",
"rate": "Taux ({{unit}})",
"unlimited": "Illimité"
},
"actions": {
"saving": "Économie...",
"addTier": "Ajouter un niveau",
"save": "Enregistrer les niveaux de tarifs"
},
"title": "Niveaux tarifaires et remises sur quantité",
"description": "Configurez différents tarifs en fonction des plages de quantités. Des quantités plus élevées peuvent bénéficier de tarifs réduits.",
"loading": "Chargement des niveaux de taux...",
"formattedRate": "{{rate}} par {{unit}}",
"errors": {
"load": "Échec du chargement des niveaux de taux",
"save": "Échec de l'enregistrement des niveaux de tarifs",
"lastTier": "Impossible de supprimer le dernier niveau",
"minPositive": "La quantité minimale doit être supérieure à 0",
"maxGreaterThanMin": "La quantité maximale doit être supérieure à la quantité minimale",
"rateNegative": "Le taux ne peut pas être négatif",
"overlap": "Les plages de niveaux ne peuvent pas se chevaucher"
}
},
"serviceTaxSettings": {
"fields": {
"taxRate": {
"label": "Taux d'imposition",
"placeholderLoading": "Chargement des tarifs...",
"placeholder": "Sélectionnez le taux de taxe",
"help": "Sélectionnez « Non taxable » si ce service ne doit pas être taxé."
}
},
"options": {
"nonTaxable": "Non imposable"
},
"errors": {
"loadTaxRates": "Échec du chargement des taux de taxe.",
"save": "Échec de l'enregistrement des paramètres fiscaux"
},
"actions": {
"saving": "Économie...",
"save": "Enregistrer les paramètres fiscaux"
},
"title": "Paramètres fiscaux",
"optionLabel": "{{taxType}} ({{countryCode}}) - {{percentage}}%"
},
"fixedConfig": {
"title": "Configuration à prix fixe",
"fields": {
"adjustForPartialPeriods": "Ajuster pour les périodes partielles",
"billingCycleAlignment": {
"label": "Alignement du cycle de facturation",
"placeholder": "Sélectionnez l'alignement",
"help": "Contrôle la façon dont la couverture dune période partielle est calculée lorsque les frais récurrents doivent être réduits à une période inférieure à une période de service complète."
}
},
"options": {
"start": "Début du cycle de facturation",
"end": "Fin du cycle de facturation",
"prorated": "Couverture proportionnelle"
}
},
"bucketConfig": {
"title": "Configuration du forfait d'heures",
"fields": {
"totalMinutes": {
"label": "Minutes totales",
"placeholder": "Entrez le nombre total d'heures",
"help": "Le nombre total de minutes incluses dans cette ligne de contrat de regroupement",
"errorPositive": "Le total des minutes doit être supérieur à zéro"
},
"billingPeriod": {
"label": "Période de facturation",
"placeholder": "Sélectionnez la période de facturation",
"help": "La période sur laquelle les heures de tranche sont réparties",
"mismatchPrefix": "Inadéquation :",
"mismatch": "La période de facturation du forfait ({{billingPeriod}}) doit correspondre à la fréquence de facturation de la ligne de contrat ({{contractLineBillingFrequency}})."
},
"overageRate": {
"label": "Taux de dépassement",
"placeholder": "Saisir le taux de dépassement",
"help": "Le taux horaire facturé pour les heures utilisées au-delà de la limite du bucket",
"errorNegative": "Le taux de dépassement ne peut pas être négatif"
},
"allowRollover": "Autoriser le report des heures inutilisées à la période suivante"
}
},
"serviceDetail": {
"loading": "Chargement de la configuration du service...",
"errors": {
"notFound": "Service introuvable",
"load": "Échec du chargement de la configuration du service"
},
"title": "Configuration du service : {{serviceName}}",
"description": "Configurer les détails du service, les tarifs et les paramètres fiscaux",
"sections": {
"unitOfMeasure": "Unité de mesure",
"baseRate": "Tarif de base"
},
"baseRate": {
"summary": "{{rate}} par {{unit}}",
"help": "Le tarif de base peut être remplacé par les niveaux basés sur la quantité ci-dessous."
}
}
}