---
name: ifpb-fiscal-engine
description: "IFPB Fiscal Calculation Engine - Moteur de calcul automatique de l'IFTB (Impôt Foncier sur la Propriété Bâtie) pour communes urbaines malgaches"
version: "1.0.0"
tags: [ifpb, fiscalite, iftb, algorithme, madagascar, commune]
---

# IFPB Fiscal Engine Skill

## Objectif
Implémenter le moteur de calcul fiscal automatique de l'IFTB selon le modèle décrit dans le Livre Blanc IFPB. Ce skill encode toute la logique algorithmique de taxation foncière.

## Grille Tarifaire (Valeur Locative Théorique Annuelle / m²)

| Catégorie | Usage | Tarif (Ar/m²) | Taux Imposition |
|-----------|-------|---------------|-----------------|
| **A** | Industriel & Grand Commerce (usines, dépôts logistiques, banques) | 5 000 Ar | 10% |
| **B** | Commercial Moyen & Résidence Standing (boutiques centre-ville, bureaux) | 2 500 Ar | 7% |
| **C** | Habitation Standard (maisons individuelles maçonnées) | 1 000 Ar | 5% |
| **D** | Habitat Traditionnel / Vulnérable (matériaux locaux, zones enclavées) | 200 Ar | 2% |

## Zones Géographiques (pour qualification catégorie)

- **Bordure de route nationale** → Catégorie A ou B selon usage
- **Centre-ville (quartiers urbains denses)** → Catégorie B ou C
- **Quartier périphérique standard** → Catégorie C
- **Zone enclavée ou rurale rattachée** → Catégorie D

## Matériaux de Construction

| Type | Classification |
|------|---------------|
| Dur (Béton, briques crêpies, dalles) | Eligible Cat A-B |
| Semi-dur (Briquets non crêpies, bois standing) | Eligible Cat B-C |
| Traditionnel (Falafa, planches récupération, tôles) | Catégorie D |

## Logique Algorithmique Principale

### 1. Ventilation Verticale (Immeubles Mixtes)
```
Pour chaque étage i d'un bâtiment:
  - Déterminer usage_étage_i (Industriel / Commercial / Résidentiel)
  - Déterminer superficie_étage_i
  - Calculer assiette_étage_i = superficie × tarif(usage, zone, matériaux)
Consolider: assiette_totale = Σ assiette_étage_i
```

### 2. Ventilation Horizontale (Multi-bâtiments sur parcelle)
```
Pour chaque bâtiment j sur la parcelle:
  - Ouvrir session de calcul autonome
  - Appliquer ventilation verticale interne
Consolider sur rôle_fiscal_unique lié à la parcelle
```

### 3. Verrouillage Faux Chantiers
```python
def verifier_chantier(signes_occupation):
    """Si signes d'occupation détectés → annuler statut chantier"""
    if signes_occupation in ['jirama_actif', 'mobilier_present', 'exploitation_cours']:
        return False  # Pas un chantier → imposable
    return True  # Vrai chantier → exonération possible si <5ans
```

### 4. Requalification Commerces Précaires
```python
def qualifier_usage(usage_constate, zone_geographique):
    """Plancher commercial: jamais taxé comme habitat vulnérable"""
    if usage_constate == 'commercial':
        return max(categorie_par_zone(zone), 'B')  # Minimum Cat B
    return categorie_par_zone(zone)
```

### 5. Calcul Complet IFTB + CAC
```python
def calcul_ifpb(superficie, categorie, taux_cat, exonere=False):
    """
    Retourne: {
        valeur_locative: float,
        iftp_principal: float,
        cac: float,           # Centimes Additionnels Communaux (10%)
        net_a_payer: float
    }
    """
    tarifs = {'A': 5000, 'B': 2500, 'C': 1000, 'D': 200}
    taux = {'A': 0.10, 'B': 0.07, 'C': 0.05, 'D': 0.02}
    
    valeur_locative = superficie * tarifs[categorie]
    
    if exonere:
        return {'valeur_locative': valeur_locative, 'iftb_principal': 0, 'cac': 0, 'net_a_payer': 0}
    
    iftb_principal = valeur_locative * taux[categorie]
    cac = iftb_principal * 0.10  # 10%
    net_a_payer = iftb_principal + cac
    
    return {
        'valeur_locative': round(valeur_locative, 2),
        'iftb_principal': round(iftb_principal, 2),
        'cac': round(cac, 2),
        'net_a_payer': round(net_a_payer, 2)
    }
```

### 6. Exonération Temporaire (CGI - Code Général des Impôts)
- Constructions neuves : **exonération totale de 5 ans**
- Condition : âge_batiment < 5 ans ET statut = construction_neuve
- Le recensement est la condition indispensable pour formaliser cette exonération

## Structure de Données Entrée (depuis Kobo)

```json
{
  "parcelle_id": "string",
  "fokontany": "string",
  "gps_lat": float,
  "gps_long": float,
  "gps_precision_m": float,
  "proprietaire_nom": "string",
  "proprietaire_cin": "string",
  "proprietaire_telephone": "string",
  "statut_occupation": "proprietaire|locataire|occupant_gratuit",
  "nbBatiments": integer,
  "batiments": [
    {
      "batiment_id": int,
      "zone_geographique": "route_nationale|centre_ville|peripherique|enclavee",
      "signes_occupation": bool,
      "age_batiment_annees": int,
      "nb_etages": int,
      "etages": [
        {
          "etage_niveau": int,
          "usage": "industriel|commercial|residentiel",
          "materiaux": "dur|semi_dur|traditionnel",
          "superficie_m2": float,
          "photo_path": "string"
        }
      ]
    }
  ]
}
```

## Structure de Données Sortie (Rôle Fiscal)

```json
{
  "role_fiscal": {
    "reference": "string",
    "parcelle_id": "string",
    "contribuable": {"nom": "string", "cin": "string", "telephone": "string"},
    "detail_calcul": [
      {
        "batiment_id": int,
        "etage_niveau": int,
        "usage": "string",
        "categorie": "A|B|C|D",
        "tarif_m2": int,
        "superficie_m2": float,
        "valeur_locative": float,
        "taux": float,
        "montant_brut": float
      }
    ],
    "total_valeur_locative": float,
    "iftb_principal": float,
    "cac_10_pct": float,
    "net_a_payer_ar": float,
    "exoneration_appliquee": bool,
    "date_generation": "ISO8601"
  },
  "notification_sms": {
    "destinataire": "string",
    "message_template": "IFPB: Réf {reference} - Montant dû: {montant} Ar."
  },
  "statut": "emis|notifie|paye|retard"
}
```

## Contrôles de Sécurité (Anti-Corruption)

1. **Inviolabilité des calculs** : formules cryptées côté serveur
2. **Neutralité de l'agent** : l'agent ne voit que les champs de saisie factuelle
3. **Pas de négociation** : montant affiché en lecture seule après saisie
4. **Traçabilité complète** : chaque modification logged avec timestamp + user ID

## Intégrations Requises

- **En amont** : KoboToolbox (données brutes terrain)
- **En aval** : Passerelle paiement (mobile money / virement)
- **Notification** : SMS gateway (opérateurs malgaches)
- **Rapprochement** : Export CSV/Excel pour Receveur Municipal
