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"]
  }'
ChampTypeObligatoireDescription
companyBrokerIdstringouiPartenariat ; l'assureur et le courtier en sont dérivés
subscriberIdstringouiSouscripteur
insuredIdstringouiAssuré, posé sur chaque véhicule
referreIdstringnonApporteur
durationCodestringouiCode durée (ex. 3_MOIS)
effectiveDatedatetimeouiDate d'effet, yyyy-MM-dd HH:mm:ss, pas dans le passé
vehicleIdsstring[]oui, ≥ 1Véhicules existants, avec numberOfSeats renseigné

Réponse 201 : objet Contract.

ChampTypeDescription
idstringIdentifiant de la proposition, puis du contrat
proposalNumberstringPRO-{courtier}-{compagnie}-{branche}-{yyMM}-{HHmmss}{aléa}
policyNumberstringN° de police, renseigné à l'émission
contractTypeenumMONO ou FLEET
statusenumDRAFT à la création
statusDate, statusReason, paymentStatus
effectiveDate, expiryDate, subscriptionDate, validatedAtdatetime
company, broker, brokerCompanyobjetAssureur, courtier, partenariat
subscriber, referrerobjetParties
durationobjetDurée (durationCode, numberOfMonths…)
guaranteesstring[]Codes des garanties
vehicleIdstringVéhicule principal
documentsIdstringDossier documentaire
endorsementstringType d'avenant en cours (affaire nouvelle)
accessoryFees, exceptionalFees, commercialDiscountPctnumberFrais et remise (défaut 0.00)
primeRc, primeDr, primeNette, accessoire, taxe, cedeao, fga, primeTtcnumberMontants de prime
createdDate, lastModifiedDate, createdBy, updatedBy, validatedByAudit

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

EndpointContenu
GET /provider/contracts/proposalsPropositions (phase proposition : DRAFT, PENDING_VALIDATION, REFUSED…)
GET /provider/contractsContrats é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

EndpointCe qu'il renvoie
GET /provider/contracts/tarification/{contractId}/quote-breakdownDécomposition du devis en cours
GET /provider/contracts/tarification/{contractId}/breakdownDécomposition de la tarification de la proposition
GET /provider/contracts/premium/{contractId}/breakdownDé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 devient FLEET.
  • 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éhicules
  • PATCH /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.

On this page