RevRec brainstorm · Research · Extract plane
05 — Extract plane
Status: draft pointer
Job: Reliably get Chargebee facts into a raw lake with cursors and operable runs.
Does not: recognize revenue, invent OrderDetails, or run ASC 606.
Shape
SourceAdapter (Chargebee)
→ Temporal workflows / schedules (per tenant)
→ raw objects (e.g. S3 jsonl)
→ cursors (e.g. Postgres)
→ run manifest / lineage
Design home: ~/work/temporal_poc/
| Doc | Content |
|---|---|
architecture.html |
Multi-tenant poll → lake |
design-doc.html |
Control plane design |
scaling-design.html |
KEDA / scale-to-zero |
IMPLEMENTATION.md |
Build notes |
BRIDGE.md |
Explicit: extract only; domain is RevRec Next |
Stack opinion (not locked): Temporal, Python, S3 lake, PG cursors — aligns with broader RevRec Next opinions (ClickHouse on the serve side).
Contract with the domain
- Extract writes immutable raw + run metadata.
- A separate apply step (domain) reads raw / canonical events and calls the apply API (03-event-catalog.md).
- Extract never imports recognition policy.
- New sources = new
SourceAdapter; same lake + apply pattern.
Day-one Chargebee adapter checklist
- [ ] Auth / site identity per tenant
- [ ] Entity set for thin engine (customer, subscription, contract_term, invoice, CN, transaction, catalog subset)
- [ ] Incremental cursors + bookmark semantics
- [ ] Full refresh path for onboarding / repair
- [ ] Run manifest (FR-style: what was pulled, counts, cursor before/after)
- [ ] Idempotent object keys in the lake
Entity list can be informed by ~/work/tap-chargebee — as reference, not as a requirement to stay on Singer.
Related
- Architecture: 02-architecture.md
- Events: 03-event-catalog.md