Orders & fulfilment
Returns & RMA Management
Indicative price, not an offer: EUR 150-300/year or EUR 400 one-off
Generated from docs/plan/paid/returns-rma-management/PLAN.md in the AstroBaaS repository. Nothing described below is implemented — it is the written plan for it.
Merged from duplicate proposals: “Returns & RMA Management”
A return request management system for processing customer returns, issuing return labels, and automating refund or exchange authorization.
The problem
Processing returns manually destroys customer goodwill; tracking and exchanges are chaos.
What it does
- Create return request (RMA) with reason (defective, wrong item, changed mind, etc.)
- Generate return shipping label
- Track return shipment back to warehouse
- Receive return inspection and logging
- Process refund or exchange authorization
- Audit trail: all return states, decisions, refunds
What it deliberately does NOT do
Each boundary carries its reason. A boundary without a reason gets crossed by the next person who reads this.
- Quality grading — no automated or manual inspection scoring. Reason: manual or vendor-specific.
- Restocking fees — not configurable per reason. Reason: paid add-on.
Data model
New tables: ReturnRequest {id, orderId, customerId, reason, status (‘requested’|‘label_sent’|‘in_transit’|‘received’|‘inspected’|‘approved’|‘refunded’|‘rejected’), createdAt, receivedAt, decidedAt, decision (‘refund’|‘exchange’|‘reject’), refundAmount (minor units)}. No migration.
API
- POST /api/returns
- GET /api/returns/:id
- POST /api/returns/:id/label
- PUT /api/returns/:id/status
Every route added here must also appear in src/pages/openapi.json.ts — a test
fails the build if it does not.
Admin
Return list: filter by reason, status. RMA detail: show reason, refund amount, inspection notes. Action: approve refund, deny, request exchange.
The seam — why this is paid
Core owns: refund mechanics, return object, status transitions. Paid owns: return logistics, carrier integration, inspection workflow.
Paid business process automation. Core provides basic refunds; RMA with tracking, exchanges, and reverse logistics is paid.
Dependencies
- Order infrastructure
- carrier-integrations (for return labels)
- Refund system
Acceptance checks
Each of these must be able to fail. Before claiming this is done, break the code deliberately and watch each one go red.
- Creating return marks status as ‘requested’
- Generating label sends email with return shipping label PDF
- Admin updating status to ‘refunded’ triggers refund payment
- Audit log shows all status changes, decision, and timestamp
Risks
Abuse: customer returns used item as defective; mitigation: photos/condition notes required. Fraud: customer returns wrong item; mitigation: inspection step before refund.
Commercial context
| Suggested price | EUR 150-300/year or EUR 400 one-off |
| Rival anchor | Mirasvit RMA (Returns Management, Exchanges, Refunds) |
The anchor is what the nearest equivalent charges on Shopify or Magento today. It is context for a pricing decision, not the decision.
Generated from the commerce plan. See docs/COMMERCE-PLAN.md for the full
catalogue and ../../AI-GUIDE.md for how to work on this repository.