---
title: "Lignes API Personnalis\u00e9es"
space: "OHADA ERPNext Localization (FR)"
url: "https://docs.navari.co.ke/ohada-fr/custom-api-rows"
updated: "2026-10-08"
---

# Utilisation de lignes API personnalisées

Il peut s'avérer impossible de générer une ligne de rapport de gestion à partir des seules catégories de comptes, par exemple un indicateur spécialisé ajusté au budget et calculé par une application personnalisée installée. La valeur doit apparaître à côté des lignes de compte standard et rester disponible pour des formules ultérieures

Une ligne du modèle de rapport financier OHADA dont la source de données est définie sur **API personnalisée** appelle une fonction Python côté serveur approuvée. N’utilisez cette option que lorsque les lignes Données du compte et Montant calculé ne permettent pas de répondre à l’exigence. Il s’agit d’une fonctionnalité avancée destinée aux développeurs, et non d’un moyen d’appeler un point de terminaison HTTP externe à partir du rapport.

## Avant de commencer

- Utiliser un site sur lequel l’application Frappe personnalisée peut être installée et déployée ;
- Implémenter et testez une fonction Python au niveau du module dans cette application ;
- Vérifier les performances, les autorisations, l’accès aux données et la gestion des erreurs de la fonction ;
- Créer ou identifier le modèle de rapport financier OHADA qui nécessite cette ligne.

## Ajouter la ligne API personnalisée

1. Ouvrir le modèle ;
2. Ajouter une ligne dans les Éléments de rapport et ouvrez son éditeur de ligne ;
3. Définir la Source de données sur API personnalisée.
4. Saisir un chemin Python ponctué, tel que my_app.financial_report_api.get_budget_variance.
5. Définir une Référence de ligne si des lignes de formule ultérieures ont besoin de la valeur renvoyée.
6. Configurer les options Signe inversé, Masquer si nul, Ligne masquée, Inclure dans les graphiques et Type de valeur selon vos besoins.
7. Enregistrer le modèle et affichez le rapport.

## Contrat de fonction

La méthode reçoit les filtres du rapport, les périodes générées et la ligne actuelle. Elle renvoie une valeur numérique pour chaque période, dans le même ordre.

Le CSF OHADA exige que la fonction figure sur la **liste blanche** et qu’elle autorise les **requêtes GET**.

```python
from frappe.utils import flt

@frappe.whitelist(methods=["GET"])
def get_budget_variance(filters=None, periods=None, row=None):
    filters = filters or {}
    periods = periods or []
    values = []

    for period in periods:
        variance = calculate_variance(
            company=filters.get("company"),
            from_date=period.from_date,
            to_date=period.to_date,
        )
        values.append(flt(variance))

    return values
```

## Exigences de retour

| Exigence                       | Justification                                                                        |
| ------------------------------ | ------------------------------------------------------------------------------------ |
| Liste de valeurs numériques    | Le rapport nécessite un montant affichable par période                               |
| Même longueur que les périodes | Chaque période affichée doit recevoir exactement un résultat                         |
| Même ordre que les périodes    | Les valeurs doivent correspondre à leurs en-têtes                                    |
| Référence de ligne stable      | Les lignes calculées ultérieurement utilisent le résultat de l'API en toute sécurité |

## Comportement important

Le chemin d'accès doit respecter le format `app.module.method`. La fonction doit exister dans une application installée. L'utilisation de `@frappe.whitelist(methods=["GET"])` est obligatoire. Les scripts serveur ne sont pas pris en charge.

La même liste est copiée dans chaque colonne de valeur non vide. La fonction ne peut pas renvoyer une série différente par mesure.

## Sécurisez et testez la fonction

Validez les valeurs des filtres, utilisez des requêtes tenant compte des autorisations, évitez de renvoyer des informations sensibles et limitez la portée des requêtes. Testez les périodes sans données, les périodicités multiples, la séparation des entités et les conditions d’erreur. Recoupez le résultat avec un calcul indépendant avant de publier le modèle.

## Résolution de problèmes 

### Le chemin d’accès à l’API est rejeté

Utilisez un chemin d’accès complet au module, séparé par des points. Vérifiez que la fonction est définie au niveau du module, qu’elle figure sur la liste blanche et qu’elle autorise les requêtes GET.

### La ligne affiche des zéros

Consultez le journal des erreurs pour vérifier s’il y a une erreur d’API personnalisée, vérifiez que la fonction a renvoyé une valeur numérique par période et testez la fonction avec les mêmes filtres de rapport.

### Une ligne calculée ne peut pas utiliser le résultat

Attribuez à la ligne d’API personnalisée une référence de ligne unique et utilisez cette référence exacte dans la formule suivante.

## Foire aux questions

### La ligne peut-elle appeler directement une API REST publique ?

Le modèle appelle une fonction Python sur le serveur ERPNext. Cette fonction peut s’intégrer à un autre système selon la conception de la sécurité de votre application.

### La fonction peut-elle modifier des données comptables ?

Une fonction de rapport doit être en lecture seule. La création ou la modification de transactions pendant l’exécution du rapport rendrait les résultats non fiables.

### Que se passe-t-il lorsque la fonction génère une erreur ?

L’application enregistre l’erreur et peut remplir la ligne de zéros. Considérez cet état comme un calcul ayant échoué et examinez-le avant de partager le résultat.
