The wedge
Quotation tools email a PDF. Invoicing tools track an invoice. Odexy Sales runs the full quote-to-cash flow in one schema, joined to the CRM deal that produced it and the Accounting journal that records the revenue.
What ships today
- Quotations — line-itemed quotes with custom currencies, taxes, discounts, expiry. Public accept link emails a signed acceptance.
- Invoices — drafted, sent, viewed-tracked, paid-tracked. Public pay link integrates with the payment gateway when configured.
- Recurring invoices — schedule, generate next invoice automatically, suspend on cancel.
- Multi-currency — per-org default currency + per-customer override; FX conversion via the unified currency system.
- Templates — branded PDF with letterhead, payment instructions, terms & conditions.
- Email sends — invoice / quotation emails go through the unified Email module with one suppression list.
- Quotation → Invoice — accept a quote, invoice is drafted with the same lines, same totals, same currency.
How it integrates
- CRM — quotations attach to the deal; deal status auto-advances on quotation acceptance.
- Accounting — invoice payment posts a GL entry tagged to the deal/customer.
- Email — every send (quotation invite, invoice, reminder, dunning) goes through one outbound module.
- Forms — public acceptance signed via the Forms public-token infrastructure.
- Documents — PDF rendering via
@helios/documentsshared package.
How the AI helps
- "Draft a quotation for ACME at the same line items as their last invoice, plus 10% for the new SLA tier."
- "Send the invoice reminder to anyone overdue more than 14 days, using the polite-first-reminder template."
- "Convert the last 3 quotes from EUR to USD at the configured rate."
- "Summarize this quarter's invoiced revenue by industry."
State-changing actions (send, post) require approval. Reads are unrestricted within the agent's permissions.
Built for scale
- Audit log — every quotation revision, every invoice send, every payment recorded.
- Idempotency — re-firing a "send invoice" won't double-send.
Message-IDis unique-indexed. - Public token routes —
/r/<token>and similar for share / accept links; signed, time-limited. - Multi-currency — every amount carries its own currency and is held as whole units of it, so totals never drift by a cent.
- Permissions —
sales:invoice:sendseparate from:createand:void.
> What's queued, not shipped: payment gateway integration (spec drafted at docs/plans/PAYMENT_GATEWAY_MODULE_SPEC.md); the public pay link works when the gateway is configured.
Odexy Sales vs. the category
| | Odexy Sales | Stripe Billing | Chargebee |
|---|---|---|---|
| Joined to CRM + Accounting in one schema | ✓ | partial | partial |
| Quote-to-cash in one tool | ✓ | — | ✓ |
| Per-org multi-currency native | ✓ | ✓ | ✓ |
| AI uses the real UI | ✓ | — | — |
Stripe Billing is the leader for subscription primitives; Chargebee for orchestration. Both leave the CRM join to you. Odexy Sales is one of the modules that handles the customer-facing money flow, in the same schema as everything else.
Design-partner take
> "The deal closed, the invoice drafted, the payment landed, and the revenue posted to the GL — and I clicked once. The other 90% used to be reconciliation work." — Design partner, 8-person consulting firm
