E8-F4: Deferred Payment Offer Generation¶
Epic: E8: Payment Processing
Size: M (Medium)
Problem / Outcome¶
Generate payment offers for VIP/Sponsor quotas.
Scope¶
In-Scope:
- Group orders by debtor
- Generate payment offer via e-racuni API
- Send payment offer to debtor
Out-of-Scope:
- Automatic payment matching
Acceptance Criteria¶
- AC1: Multiple orders for same debtor can be grouped into single payment offer
- AC2: Payment offer created in e-racuni with all line items
- AC3: Payment offer emailed to debtor via e-racuni
Data Model Impact¶
PaymentOffer table:
- id (UUID, PK)
- debtor_id (UUID, FK)
- e_racuni_id (VARCHAR)
- e_racuni_reference (VARCHAR)
- orders (UUID[])
- total_amount (DECIMAL)
- due_date (DATE)
- status (ENUM: draft, sent, paid, overdue, cancelled)
- created_by (UUID, FK)
- created_at (TIMESTAMP)
- sent_at (TIMESTAMP)
- paid_at (TIMESTAMP)
Debtor table:
- id (UUID, PK)
- name (VARCHAR)
- oib (VARCHAR)
- address (VARCHAR)
- email (VARCHAR)
- payment_terms_days (INTEGER, default 30)
Permissions/Roles¶
- Admin (Finance)
How to Verify¶
npm test -- --grep "payment offer"
Expected: Offer created in e-racuni, email sent.
Dependencies¶
Implementation Tasks¶
See E8: Payment Processing Tasks
Doc References¶
Last Updated: January 2026