Cotation (REFI)

Référence technique du domaine Cotation — scoring financier REFI, liasses fiscales, classes de risque et recommandations.

Cotation (REFI)

Périmètre : évaluation financière d'un prospect ou d'un client en vue d'une décision de refinancement (REFI). Le module collecte les données comptables sur les 3 derniers exercices (liasses fiscales, comptes annuels, annexes sociales), calcule un score pondéré et produit une recommandation GO / GO sous conditions / NO-GO.

Ce domaine reprend le périmètre de l'outil bureautique SMACH - Cotation REFI. Il est utilisé en amont d'une cession de contrat (cf. domaine Location) : avant de céder un contrat à un bailleur ou de monter un dossier d'agrément, Pulse évalue la solidité financière du client.

Tous les écrans et routes vivent sous /workspace/rating/* et /api/workspace/rating/*. Source de cette page : docs/22-domain-rating.md.

Vocabulaire & entités

TermeEntitéDéfinition
CotationClientRatingDossier d'évaluation financière d'une entreprise à une date donnée, pour un montant à financer.
REFIRefinancement — opération de cession/portage d'un contrat de location auprès d'un bailleur ou d'une banque.
Liasse fiscale / comptes annuelsFinancialStatementÉtats financiers d'un exercice. La cotation s'appuie sur les 3 derniers exercices.
PosteFinancialStatementLineLigne détaillée d'un état financier, repérée par son code CERFA (ex. FA, DG, KJ).
ScoreClientRating.scoreNote de synthèse 0-100 calculée à partir des ratios financiers.
Classe de risqueRatingClassA / B / C / D.
RecommandationRefiRecommendationGO / GO_WITH_CONDITIONS / NO_GO.
StatutClientRatingStatusDRAFT / IN_REVIEW / VALIDATED / ARCHIVED.
AnalysteUtilisateur (typiquement direction financière) réalisant la cotation.

Le modèle complet est dans docs/04-data-model.md §17. La cotation est toujours rattachée à une Company de l'annuaire — jamais à une saisie libre.

Écrans

ÉcranRouteContenu
Liste des cotations/workspace/ratingDataTable : entreprise, montant, date d'étude, analyste, score, classe, recommandation, statut. Filtres : statut, classe, recommandation, période, analyste.
Fiche cotation/workspace/rating/[id]Onglets Synthèse, Process, États financiers (par exercice), Ratios & analyse, Documents, Audit log.

Onglets de la fiche cotation

Synthèse

Entreprise, activité, enseigne, montant à financer, date d'étude, analyste, score, classe, recommandation, conclusion.

Process

Checklist de collecte des pièces : liasses fiscales 3 exercices, comptes annuels détaillés, annexes sociales.

États financiers

Un onglet par exercice (FinancialStatement) : Actif/Passif, Compte de résultat, Immobilisations, Amortissements, Provisions, Créances & dettes, Affectation du résultat.

Ratios & analyse

Ratios calculés, tendances sur 3 exercices, alertes de dégradation.

Modèle de données (points clés)

  • ClientRating agrège FinancialStatement (un par exercice) ; chaque état porte des FinancialStatementLine identifiées par leur code CERFA.
  • Le score et la classe sont recalculés à chaque modification d'un poste tant que la cotation est à l'état DRAFT.
  • ClientRating.score (0-100) est dérivé ; la grille de pondération des ratios est paramétrable par organisation.
  • Une cotation VALIDATED est immuable : toute correction crée une nouvelle version rattachée à la même entreprise.
  • Les liasses fiscales sont stockées en S3 avec accès restreint au rôle financier (cf. docs/13-domain-files.md).

API

Toutes les routes exigent une permission rating.* (vérifiée côté API et UI).

MéthodeRoutePermission
GET/api/workspace/rating/ratingsrating.rating:read
POST/api/workspace/rating/ratingsrating.rating:create
GET/api/workspace/rating/ratings/[id]rating.rating:read
PATCH/api/workspace/rating/ratings/[id]rating.rating:update
GET/api/workspace/rating/ratings/[id]/audit-lograting.rating:read
GET/api/workspace/rating/ratings/[id]/smach-kpisrating.rating:read
POST/api/workspace/rating/ratings/[id]/statementsrating.rating:update
POST/api/workspace/rating/ratings/[id]/statements/[stmtId]/ocrrating.rating:update
POST/api/workspace/rating/ratings/[id]/import-pappersrating.rating:update
POST/api/workspace/rating/ratings/[id]/scorerating.rating:update
POST/api/workspace/rating/ratings/[id]/validaterating.rating:validate
POST/api/workspace/rating/ratings/[id]/override-scorerating.rating:validate
POST/api/workspace/rating/ratings/[id]/override-recommendationrating.rating:validate
POST/api/workspace/rating/ratings/[id]/new-versionrating.rating:create
POST/api/workspace/rating/ratings/[id]/archiverating.rating:archive

Au niveau du domaine (hors fiche) : GET /api/workspace/rating/dashboard (rating.rating:read) et POST /api/workspace/rating/score-from-pappers pour amorcer une cotation depuis les données publiques.

Exemple de référence d'endpoint :

POST/api/workspace/rating/ratings/[id]/validateAuth

Fait passer la cotation directement en VALIDATED (direction financière) — il n'y a pas d'étape de soumission intermédiaire. La validation exige le nombre d'exercices complets requis (3, ou 1 pour une cotation estimative) et recalcule le score à la volée s'il est null, puis pose validatedAt, validatedByUserId et expiresAt. La cotation devient immuable ; toute correction ultérieure passe par POST /new-version. Cet endpoint n'attend pas de corps (la conclusion se saisit en amont via PATCH /ratings/[id]).

Requête

curl -s -X POST "$API/api/workspace/rating/ratings/$ID/validate" \
  -H "Cookie: $SESSION"

Réponse

{ "id": "rat_…", "status": "VALIDATED", "score": 78, "ratingClass": "B", "recommendation": "GO" }

Workflows

Cycle de vie d'une cotation

DRAFT
  ├── saisie / import des postes (3 exercices)
  ├── recalcul score automatique à chaque mutation
  └── POST /validate → VALIDATED (immuable)
        ├── exige le nombre d'exercices complets requis (3, ou 1 si estimative)
        ├── recalcule le score à la volée s'il est null
        ├── pose validatedAt / validatedByUserId / expiresAt
        └── péremption (validityMonths, défaut 6 mois) → à rafraîchir
              └── ARCHIVED (POST /archive) — soft-delete, sortie du portefeuille actif
L'enum ClientRatingStatus comporte un état IN_REVIEW, mais aucun endpoint ne soumet une cotation « pour revue » : POST /validate fait passer la cotation directement de DRAFT (ou IN_REVIEW si l'état existait déjà) à VALIDATED. Il n'y a pas d'étape de soumission distincte ; IN_REVIEW n'est aujourd'hui produit que par la réutilisation d'une cotation existante lors d'un « Coter via Pappers ».

Collecte des pièces (§4.1)

Une cotation requiert, idéalement sur les 3 derniers exercices :

  1. Les liasses fiscales.
  2. Les comptes annuels détaillés.
  3. Les annexes sociales du dernier exercice (engagements, sûretés).

À défaut de pièces complètes, les données publiques (Pappers / INSEE) servent de base partielle ; la cotation est alors marquée comme estimative.

Calcul du score (§4.2)

  • Saisie manuelle des postes par exercice, ou import via OCR (parsing PDF de liasse, repères CERFA).
  • Ratios calculés : autonomie financière, endettement net / CAF, BFR, trésorerie nette, marge EBITDA, évolution CA et résultat.
  • Le score (0-100) pondère ces ratios selon la grille organisation (POST /score recalcule).
  • Le score détermine une classe (A/B/C/D) et une recommandation par défaut, que l'analyste peut surcharger avec justification obligatoire via POST /override-score et POST /override-recommendation (permission rating.rating:validate).

Utilisation en aval

Une cotation VALIDATED est consultable depuis :

  • la fiche opportunité CRM (onglet Cotation),
  • la fiche affaire de location — avant la demande d'agrément ou la cession au bailleur.

Règles métier

  • Une cotation VALIDATED est immuable ; toute correction crée une nouvelle version.
  • Score et classe sont recalculés automatiquement à chaque modification de poste (état DRAFT uniquement).
  • La recommandation peut surcharger le score, mais la justification est obligatoire.
  • Rattachement à une Company de l'annuaire obligatoire — jamais à une saisie libre.
  • Liasses fiscales = documents sensibles : stockage S3 accès restreint rôle financier.
  • Durée de validité paramétrable (validityMonths, défaut 6 mois, 1 à 60) ; au-delà de expiresAt, cotation marquée à rafraîchir.

Intégrations

IntégrationUsage
Pappers / INSEE (docs/07-domain-annuaire.md)Pré-remplissage des comptes annuels publics.
OCR / IA (docs/17-domain-ai-kit.md)Extraction des postes depuis les PDF de liasses fiscales.
Bailleurs (docs/11-domain-lease-satelease.md)La cotation peut être jointe au dossier d'agrément.

KPIs

Répartition du portefeuille par classe de risque · taux GO / GO sous conditions / NO-GO · délai moyen de réalisation · montant total à financer par classe · cotations périmées à rafraîchir.