Skip to content

feat(insurance): add claims dispute resolution (#255)#411

Merged
LaGodxy merged 2 commits intoMettaChain:mainfrom
Nuel-ship-it:feature/255-claims-dispute-resolution
Apr 29, 2026
Merged

feat(insurance): add claims dispute resolution (#255)#411
LaGodxy merged 2 commits intoMettaChain:mainfrom
Nuel-ship-it:feature/255-claims-dispute-resolution

Conversation

@Nuel-ship-it
Copy link
Copy Markdown
Contributor

Summary

Implements a three-step dispute resolution flow for rejected insurance claims, allowing claimants to challenge decisions through a voting process.

Flow

  1. raise_dispute(claim_id, reason) — Only the original claimant may call this on a Rejected claim. One dispute per claim. Sets claim status to Disputed.
  2. vote_on_dispute(dispute_id, in_favour_of_claimant) — Authorized assessors or admin cast votes. Each address may vote once per dispute.
  3. resolve_dispute(dispute_id, outcome) — Admin closes the dispute:
    • ClaimantWins: claim re-approved, payout executed from pool
    • InsurerWins: claim stays rejected

Changes

contracts/insurance/src/types.rs

  • DisputeStatus: Open / Resolved / Dismissed
  • DisputeOutcome: ClaimantWins / InsurerWins
  • ClaimDispute struct: dispute_id, claim_id, claimant, reason, status, outcome, vote tallies, timestamps

contracts/insurance/src/errors.rs

  • DisputeNotFound, DisputeAlreadyExists, DisputeNotOpen, AlreadyVoted, ClaimNotRejected

contracts/insurance/src/lib.rs

  • Storage: disputes, dispute_count, claim_dispute (claim→dispute mapping), dispute_voters (double-vote guard)
  • Events: DisputeRaised, DisputeVoteCast, DisputeResolved
  • Messages: raise_dispute, vote_on_dispute, resolve_dispute, get_dispute, get_claim_dispute_id, get_dispute_count

contracts/insurance/src/tests.rs

11 unit tests covering: raise dispute (happy path, non-claimant, non-rejected claim, duplicate), vote (happy path, unauthorized, double-vote), resolve (claimant wins, insurer wins, unauthorized, already resolved).

Closes #255

Implement a three-step dispute resolution flow for rejected insurance claims:
1. raise_dispute  – claimant disputes a rejected claim (one per claim)
2. vote_on_dispute – authorized assessors/admin cast votes
3. resolve_dispute – admin closes the dispute and applies the outcome;
   ClaimantWins re-approves the claim and executes payout,
   InsurerWins keeps the claim rejected.

Changes:
- types.rs: DisputeStatus (Open/Resolved/Dismissed),
  DisputeOutcome (ClaimantWins/InsurerWins), ClaimDispute struct
- errors.rs: DisputeNotFound, DisputeAlreadyExists, DisputeNotOpen,
  AlreadyVoted, ClaimNotRejected
- lib.rs: dispute storage fields, DisputeRaised/DisputeVoteCast/
  DisputeResolved events, raise_dispute/vote_on_dispute/resolve_dispute
  messages, get_dispute/get_claim_dispute_id/get_dispute_count queries
- tests.rs: 11 unit tests covering the full lifecycle

Closes MettaChain#255
@drips-wave
Copy link
Copy Markdown

drips-wave Bot commented Apr 29, 2026

@Nuel-ship-it Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@LaGodxy LaGodxy merged commit e2bc1c7 into MettaChain:main Apr 29, 2026
8 of 10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Insurance: Add claims dispute resolution

2 participants