Propositions et tarification
Créer une proposition DRAFT, la consulter, la modifier, recalculer la prime et lire sa décomposition.
Créer — POST /provider/contracts
curl -s -X POST $API/provider/contracts \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{
"companyBrokerId": "7fa1ffd4-4fc6-400e-b5c8-5da5256d978f",
"subscriberId": "dae6bf98-00e3-4bb3-9f5c-2e6bef6f882e",
"insuredId": "4462cae4-91d6-4985-bc6f-3d26cf63dc96",
"referreId": "0c93abb7-6953-4880-bd26-7b681ba30c31",
"durationCode": "3_MOIS",
"effectiveDate": "2026-11-07 00:00:01",
"vehicleIds": ["9e7258b6-2eb6-4969-b84c-cfa1343e0d71", "a1b2c3d4-e5f6-7890-abcd-ef1234567890"]
}'| Champ | Type | Obligatoire | Description |
|---|---|---|---|
companyBrokerId | string | oui | Partenariat ; l'assureur et le courtier en sont dérivés |
subscriberId | string | oui | Souscripteur |
insuredId | string | oui | Assuré, posé sur chaque véhicule |
referreId | string | non | Apporteur |
durationCode | string | oui | Code durée (ex. 3_MOIS) |
effectiveDate | datetime | oui | Date d'effet, yyyy-MM-dd HH:mm:ss, pas dans le passé |
vehicleIds | string[] | oui, ≥ 1 | Véhicules existants, avec numberOfSeats renseigné |
Réponse 201 : objet Contract.
| Champ | Type | Description |
|---|---|---|
id | string | Identifiant de la proposition, puis du contrat |
proposalNumber | string | PRO-{courtier}-{compagnie}-{branche}-{yyMM}-{HHmmss}{aléa} |
policyNumber | string | N° de police, renseigné à l'émission |
contractType | enum | MONO ou FLEET |
status | enum | DRAFT à la création |
statusDate, statusReason, paymentStatus | ||
effectiveDate, expiryDate, subscriptionDate, validatedAt | datetime | |
company, broker, brokerCompany | objet | Assureur, courtier, partenariat |
subscriber, referrer | objet | Parties |
duration | objet | Durée (durationCode, numberOfMonths…) |
guarantees | string[] | Codes des garanties |
vehicleId | string | Véhicule principal |
documentsId | string | Dossier documentaire |
endorsement | string | Type d'avenant en cours (affaire nouvelle) |
accessoryFees, exceptionalFees, commercialDiscountPct | number | Frais et remise (défaut 0.00) |
primeRc, primeDr, primeNette, accessoire, taxe, cedeao, fga, primeTtc | number | Montants de prime |
createdDate, lastModifiedDate, createdBy, updatedBy, validatedBy | Audit |
Erreurs fréquentes : VEHICLE_NOT_FOUND, VEHICLE_SEAT_ERROR (places manquantes),
TARIFF_NOT_FOUND, LNK_BROKER_COMPANY_NOT_FOUND, EFFECTIVE_DATE_IN_PAST.
Consulter
Une proposition ou un contrat — GET /provider/contracts/{id}
{
"contract": { "id": "1273be1c-…", "status": "ACTIVE", "policyNumber": "COMAR-2-2610-08383818R3", "primeTtc": 52190 },
"breakdown": {
"contractEndorsementId": "c0261ae8-…",
"feeBreakdown": [
{ "key": "PRIME_NETTE", "label": "Prime nette", "amount": 41151 },
{ "key": "RC", "label": "Responsabilité civile", "amount": 39191 },
{ "key": "DR", "label": "Défense et recours", "amount": 1960 },
{ "key": "ACCESSOIRE", "label": "Accessoires", "amount": 2000 },
{ "key": "TAXE", "label": "Taxe", "amount": 6257 },
{ "key": "FGA", "label": "Frais FGA", "amount": 784 },
{ "key": "CEDEAO", "label": "CEDEAO", "amount": 1000 }
],
"total": 52190
}
}breakdown est la décomposition de la prime courante : celle du devis QUOTE si la proposition n'est
pas payée, sinon celle de la dernière prime émise. Il vaut null tant qu'aucune prime n'a été calculée.
Listes
| Endpoint | Contenu |
|---|---|
GET /provider/contracts/proposals | Propositions (phase proposition : DRAFT, PENDING_VALIDATION, REFUSED…) |
GET /provider/contracts | Contrats émis (phase contrat : ACTIVE, SUSPENDED, TERMINATED, EXPIRED…) |
Les deux sont paginées et filtrables (filter[policyNumber], filter[proposalNumber],
filter[status], filter[subscriber.id], filter[contractType]…).
Décompositions de prime
| Endpoint | Ce qu'il renvoie |
|---|---|
GET /provider/contracts/tarification/{contractId}/quote-breakdown | Décomposition du devis en cours |
GET /provider/contracts/tarification/{contractId}/breakdown | Décomposition de la tarification de la proposition |
GET /provider/contracts/premium/{contractId}/breakdown | Décomposition de la prime émise du contrat |
Toutes renvoient un objet Breakdown (feeBreakdown[] de { key, label, amount }, total,
contractEndorsementId).
Modifier une proposition
Toutes ces opérations exigent le statut DRAFT et l'absence de lien de paiement en attente. Elles
recalculent la prime et renvoient { contract, breakdown }.
Durée et date d'effet — PATCH /provider/contracts/{contractId}/duration
{ "durationCode": "12_MOIS", "effectiveDate": "2026-11-07 00:00:01" }effectiveDate est optionnel : à défaut, la date d'effet actuelle de la proposition est conservée.
Véhicules
POST /provider/contracts/{contractId}/link/vehicles/{vehicleId}— rattache un véhicule (l'assuré des autres véhicules lui est appliqué) ; au-delà d'un véhicule, le contrat devientFLEET.POST /provider/contracts/{contractId}/unlink/vehicles/{vehicleId}— retire un véhicule ; au moins un doit rester.
Parties
PATCH /provider/contracts/{contractId}/subscriber/{subscriberId}PATCH /provider/contracts/{contractId}/insured/{insuredId}— appliqué à tous les véhiculesPATCH /provider/contracts/{contractId}/referrer/{referrerId}
Recalculer — POST /provider/contracts/tarification/{contractId}/calculate
Sans corps. Relance le moteur de tarification, resynchronise l'avenant affaire nouvelle QUOTE et
renvoie { contract, breakdown }. Utile après un échec de tarification à la création.
Après paiement, la proposition devient un contrat (ACTIVE) et n'est plus modifiable : toute
évolution passe par un avenant.