app.billing_checkouts
TablaSeguridad a nivel de fila activa
Stripe Checkout sessions Atlas opened to move an org onto a paid plan (ADR 0033 decision 59). A newer checkout of the same org expires the open ones first, and waits while a completed one's subscription has not synced, so an org never pays for two subscriptions. The plan itself changes only when the webhook syncs the paid Stripe subscription (app.sync_subscription_from_stripe).
Clave primaria: id
| Columna | Tipo | Admite nulos | Descripción |
|---|---|---|---|
| id | uuid | No | Primary key, UUID v7. |
| org_id | uuid | No | Owning org. A row never moves to another org.Hace referencia a app.organizations.id |
| plan_code | text | No | Plan the checkout sells.Hace referencia a app.plans.code |
| billing_interval | app.billing_interval | No | Monthly or Annual. |
| stripe_checkout_session_id | text | No | Stripe Checkout session (cs_...), unique. |
| livemode | boolean | No | True for a live mode session; test mode sessions never touch live billing. |
| checkout_state | app.billing_checkout_state | No | Open, Completed or Expired, as Stripe reports it; Expired also when a newer checkout of the org closed it. |
| expires_at | timestamp with time zone | No | When Stripe expires the session if nobody completes it. |
| finished_at | timestamp with time zone | Sí | When the session completed or expired; null while it is open. |
| created_at | timestamp with time zone | No | When the row was inserted. Set by the database. |
| created_by | uuid | Sí | Person who inserted the row, or null for a platform process. Set by the database.Hace referencia a app.people.id |
| updated_at | timestamp with time zone | No | When the row last changed. Set by the database. |
| updated_by | uuid | Sí | Person who last changed the row, or null for a platform process. Set by the database.Hace referencia a app.people.id |
| deleted_at | timestamp with time zone | Sí | Soft delete time. A row with deleted_at set is ignored by every access helper. |