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 ajouterBien → 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 exposerTarif.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
TaxeGroupedoivent être présents sur les terminaux avant lesTarif/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 deGET /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[].Montantpar 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[](avecTaux) et leTaxeGrouperenvoyé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 routesGET /apipartenaire/partenaires(PositionFiscaleId/Code/Libelle) et modifiable viaPUT /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 avantUpdate-Database.