Aller au contenu

TVA 1 % archipels — Note de mise en service (Fare Rata)

Cette note liste les actions de paramétrage et de coordination à réaliser pour activer le dispositif TVA 1 % archipels, dont l'entrée en vigueur est le 1ᵉʳ juillet 2026. La mécanique technique est décrite dans Résolution Tarif + TaxeGroupe.

La conformité fiscale dépend de la rigueur du paramétrage : aucune règle n'est codée en dur. Tracer le paramétrage pour résister à un contrôle DICP.

1. Créer les régimes fiscaux (TaxeGroupe)

Menu Admin → Groupes de taxe. À créer selon les besoins (exemples) :

TaxeGroupe Taxe(s) associée(s) Usage
Bien TVA standard (13 % / 16 %) Régime par défaut des biens
Réduit TVA réduite (5 %) Le cas échéant
ServiceImmatériel Taxe applicable en Société Prestations immatérielles (ex. dédouanement, sous réserve du rescrit DICP)
Archipel TVA 1 % Régime dérogatoire archipels
Bien Exclu TVA standard Articles exclus (alcool ≥ 0,5 % vol., tabac, produits TCP) — voir § 4

2. Paramétrer les PositionFiscale

  • Partenaire lié au site d'un magasin en archipel éligible (ex. Rangiroa) : lignes de substitution Bien → Archipel, ServiceImmatériel → Archipel, Réduit → Archipel.
  • Partenaire client professionnel d'un archipel éligible (ex. pro Tuamotu) : ligne uniquement ServiceImmatériel → Archipel. Ne pas ajouter Bien → Archipel.
  • Clients particuliers / clients Société : aucune PositionFiscale.

Saisie : menu Positions fiscales → grille maître/détail. Pour une ligne v2, renseigner TaxeGroupe source / destination (laisser les champs Taxe vides).

3. Paramétrer les Tarifs par régime

Pour un article dont le prix diffère selon le régime (cas D) : sur la fiche article, onglet Tarifs, créer un tarif par régime :

  • Tarif Régime fiscal = (vide) → tarif générique fallback.
  • Tarif Régime fiscal = Archipel → tarif dédié 1 %.

Si le prix est identique quel que soit le régime, un seul tarif générique (vide) suffit ; seules les taxes changeront via la PositionFiscale.

Tarification de masse par régime

Pour définir en masse une liste de prix dédiée à un régime (ex. les prix « Archipel » d'un ensemble d'articles) : menu Vente → Tarifications, créer une campagne et renseigner le sélecteur Régime fiscal dans l'en-tête (laisser vide = campagne sur le tarif générique). À l'application de la campagne :

  • les articles disposant déjà d'un tarif pour ce régime voient leur valeur mise à jour ;
  • les articles sans tarif pour ce régime se voient créer le tarif dédié (valeur immédiate, CodeBo suffixé par le code du TaxeGroupe).

Une campagne sans régime (vide) conserve le comportement historique (tarif générique uniquement).

4. Exclusions (alcool, tabac, TCP)

Affecter aux articles concernés un TaxeGroupe dédié (ex. Bien Exclu) non couvert par les lignes de PositionFiscale. La substitution Bien → Archipel ne s'y applique pas → taux normal garanti, même en magasin archipel.

5. Actions techniques de déploiement

  • Appliquer la migration PgSql AjoutTaxeGroupeResolutionFiscale (porte l'ensemble des évolutions de modèle du dispositif).
  • Régénérer le client API Angular (npm run lexi-client:refresh) pour exposer Tarif.taxeGroupeId — ou patch manuel si la génération OpenAPI échoue.
  • Bump de version de la caisse (Lexi.Tpv.Caisse.View/Properties/AssemblyInfo.cs, AssemblyVersion + AssemblyFileVersion) pour forcer la recréation de la base SQLite des terminaux avec les nouvelles colonnes (cf. pattern PR 11497).
  • Synchroniser : les TaxeGroupe doivent être présents sur les terminaux avant les Tarif / PositionFiscaleLigne.

6. Coordination équipe Fare Rata (service externe — Maxime LEONG-HOI)

Le process DelivranceEnvoi (dédouanement) consomme l'API Partenaire. L'équipe Fare Rata doit :

  • Appeler la route dédiée GET /apipartenaire/conditionstarifaires/v2 (au lieu de GET /apipartenaire/conditionstarifaires) : mêmes paramètres de requête, réponse enrichie de la résolution fiscale.
  • Utiliser les montants finaux calculés par l'API : MontantFinalHt, MontantFinalTtc, MontantTaxes (+ Taxes[].Montant par taxe) — condition tarifaire appliquée, arrondis identiques à la caisse. ⚠️ Les conditions à seuil (quantité/montant) ne sont pas appliquées dans ces montants (quantité inconnue de l'API) ; les seuils sont renvoyés à titre informatif.
  • Cesser de stocker le taux de TVA localement : utiliser les Taxes[] (avec Taux) et le TaxeGroupe renvoyés par l'API.
  • Utiliser directement le tarif renvoyé (déjà résolu par régime), sans surcharge locale.
  • Paramétrage des fiches clients Fare Rata : référentiel des positions fiscales via GET /apipartenaire/positionsfiscales (en-têtes + lignes de substitution) ; la position fiscale affectée à un client est exposée sur les routes GET /apipartenaire/partenaires (PositionFiscaleId/Code/Libelle) et modifiable via PUT /apipartenaire/partenaires/{id}/position-fiscale (body { "positionFiscaleId": … } ou { "positionFiscaleCode": "…" } ; corps vide = retrait).
  • Optionnel : passer de deux appels (articles + conditionstarifaires) à un seul.

7. Points business à clore avant la prod

  • Rescrit DICP confirmant que le dédouanement est une prestation immatérielle éligible au 1 % (acté oralement, à sécuriser par écrit — risque de redressement sinon).
  • Périmètre facturation legacy : confirmé hors scope V1 (caisse TPV + API Partenaire uniquement).
  • Audit data des doublons (ArticleId, PrixId) : risque faible (une contrainte unique existait déjà avant la migration), mais à confirmer avant Update-Database.