Answered from these docs only, by a model that cannot see your account. Check the pages it cites.

Reporting tables

Every table and column in the Parquet files Roiva builds for Power BI and data warehouses: what a row is, and what each column means.

View as Markdown View as JSON

Answered from these docs only, by a model that cannot see your account. Check the pages it cites.

Generated from what Roiva ships, on every deploy.

Roiva's figures as flat, typed tables, for Power BI or a data warehouse to read without an API client: initiatives, approved value with its formula version and inputs, costs, approvals, budgets against spend, portfolio decisions, locked months and AI spend. Roiva's figures in Power BI and your data warehouse covers connecting.

How they're built

Once an Owner or Admin turns them on under Organization Settings → Reporting Tables, Roiva builds a snapshot every night: every table below, read at one moment, as a Parquet file each. Every row carries the snapshot's snapshot_id. A table is always whole, so a row deleted in Roiva is simply absent from the next snapshot; there's nothing to reconcile incrementally.

Before a snapshot can be read, Roiva rebuilds every figure in reported_totals from the reported_value and costs rows it's about to publish and compares them, to the cent, with what its own reports compute. If any differs, the snapshot isn't published and Roiva is alerted.

What the figures follow

  • Approved value only. reported_value holds entries approved by a person or by the account's auto-approve setting, which is what every Roiva report counts. Drafts, entries awaiting review and disputed entries aren't in it; approval_decisions records what was decided about them.
  • Every cost counts. A cost has no approval step, so costs holds every cost entry.
  • An entry belongs to the period its period_start falls in, in whole UTC days, as in every Roiva report. A twelve-month entry starting in January counts in Q1 and in no other quarter. An entry with no period counts in all-time figures only.
  • No sample data. Sample initiatives, and everything recorded against them, are left out of every table.
  • Money is integer cents beside a currency. People are an id and a name, never an email address. Times are UTC.
  • Value adds up in dollars. An entry keeps the currency its source gave it, and reported_value.usd_amount_cents is its value in US dollars, at the European Central Bank's average rate over its period. That is the column the totals add. It is empty, and the entry in no total, while it waits on its rate.
  • So does cost. costs.usd_amount_cents is each cost in US dollars, added the same way. A cost whose period's rates aren't all published yet counts at the latest ECB rate, marked usd_rate_provisional, so a known cost is never left out; a later snapshot carries the period's average, and the month can't be locked until it does. A cost in a currency the ECB doesn't publish has no dollar figure and is in no total.

Reading them

The newest snapshot's manifest is at https://roiva.ai/api/v1/reporting/latest, and each table at https://roiva.ai/api/v1/reporting/latest/<table>.parquet, with a reporting token as a Bearer token or as the password in Basic authentication. The schema itself is public, at /api/v1/reporting/schema.json. Snapshots are kept for 14 days, and the newest until a newer one replaces it; the Read API reference lists the endpoints.

Roiva can also deliver each build to an Amazon S3 bucket you own, writing through a role you create that can only add files to one folder. Each build gets its own folder, roiva/v1/snapshots/<snapshot_id>/, holding one Parquet file per table and a manifest.json written after them, and nothing already in the bucket is replaced.

What changes, and what doesn't

The files follow version v1 of this schema. Within a version, tables and columns are only added, and an added column may be empty. Removing, renaming or retyping a column would be a new version, published beside this one.

Columns marked free text hold what a person wrote in their own words, such as a note on a figure or the reason for a decision, and can name people or customers.

snapshot

One row: the snapshot itself. When the tables were built, for which account, and what they leave out. Join any table to it on snapshot_id.

Column Type What it means
snapshot_id stringalways present The snapshot this row belongs to. Every table in one snapshot describes the same moment.
schema_version stringalways present The version of this schema the files follow.
generated_at timestamp (UTC)always present The moment every table in the snapshot describes, in UTC.
as_of datealways present The day the snapshot describes, in UTC. "To date" figures run through it.
account_id int64always present The account's id in Roiva.
account_name stringalways present The account's name.
fiscal_year_start_month int64always present The month the account's fiscal year starts, 1 to 12. Fiscal quarters and years in reported_totals follow it.
sample_initiatives_excluded int64always present How many sample initiatives the account holds. Their figures are invented for a demonstration, so no table includes them.

initiatives

One row per initiative, sample initiatives excluded. The account's AI initiatives: where each stands, who owns it, and its business case. The planned figures are the business case, which can change. What was signed off is in budgets.

Column Type What it means
snapshot_id stringalways present The snapshot this row belongs to. Every table in one snapshot describes the same moment.
initiative_id int64always present The initiative's id in Roiva. Every other table joins on it.
title stringalways present The initiative's name.
stage stringalways present Where it is in its lifecycle: identified, reviewing, implementing, live, paused, completed, rejected, dismissed.
previous_stage stringmay be empty The stage it was in before it was paused, for a paused initiative.
category stringalways present The kind of work it does.
module_kind stringmay be empty The Roiva module it belongs to.
department stringmay be empty The department it serves.
business_unit stringmay be empty The business unit it serves.
priority int64may be empty Its priority, 1 highest.
owner_id int64may be empty The person who owns it.
owner_name stringmay be empty The owner's name.
started_at timestamp (UTC)may be empty When work on it began.
went_live_at timestamp (UTC)may be empty When it went live.
closed_at timestamp (UTC)may be empty When it was completed or retired.
archived_at timestamp (UTC)may be empty When it was dismissed.
planned_capex_cents int64 (cents)may be empty The business case's one-off cost, in cents.
planned_opex_cents int64 (cents)may be empty The business case's running cost per value period, in cents.
planned_cost_savings_cents int64 (cents)may be empty The business case's cost savings per value period, in cents.
planned_revenue_uplift_cents int64 (cents)may be empty The business case's revenue uplift per value period, in cents.
planned_capacity_cents int64 (cents)may be empty The business case's freed capacity per value period, in cents: hours priced at what they cost. Not cash, and not in planned_value_cents.
planned_value_period stringmay be empty The period the planned per-period figures are stated for.
planned_value_cents int64 (cents)always present Planned cash value over the whole ROI horizon, in cents: the per-period cost savings and revenue at its margin, annualized, times the horizon.
roi_horizon_years int64may be empty The years the business case is measured over.
time_to_value_months int64may be empty The months the business case expected before value arrives.
description stringmay be empty · free text What the initiative is, as its team wrote it.
hypothesis stringmay be empty · free text What its team expects it to change, in their words.
created_at timestamp (UTC)always present When it was added to Roiva.
roiva_url stringalways present Its page in Roiva.

reported_value

One row per approved value entry, sample initiatives excluded. The value the account's initiatives have returned, approved by a person or by the account's auto-approve setting. An entry belongs to the period its period_start falls in, as in every Roiva report, so a twelve-month entry starting in January counts in Q1 and in no other quarter. Cash value is the sum of usd_amount_cents over the cash types (revenue_gain, cost_savings, cost_avoidance, capacity_realized). Freed capacity is never added to it: for each initiative and period_month it is capacity less capacity_realized, floored at zero.

Column Type What it means
snapshot_id stringalways present The snapshot this row belongs to. Every table in one snapshot describes the same moment.
value_entry_id int64always present The entry's id in Roiva.
initiative_id int64always present The initiative it belongs to.
amount_cents int64 (cents)always present The approved figure, in cents of currency.
currency stringalways present The currency of amount_cents.
usd_amount_cents int64 (cents)may be empty The approved figure in US dollars, in cents: amount_cents itself for a dollar entry, converted at usd_rate for another currency, and empty while the entry waits on the ECB's rate for its period. reported_totals add this column.
usd_rate doublemay be empty US dollars per unit of currency: the average of the European Central Bank's daily euro reference rates over usd_rate_from to usd_rate_through, crossed through the euro. Empty for a dollar entry.
usd_rate_from datemay be empty The first ECB day usd_rate averages.
usd_rate_through datemay be empty The last ECB day usd_rate averages.
entry_type stringalways present What kind of value it is: revenue_gain, cost_savings, cost_avoidance, capacity, capacity_realized.
period_start timestamp (UTC)may be empty When the period it covers begins. It decides which period the entry counts in.
period_end timestamp (UTC)may be empty When the period it covers ends.
period_month datemay be empty The first day of the month period_start falls in, in UTC.
is_estimated booleanalways present Whether whoever recorded it marked it an estimate.
confidence_score doublemay be empty The confidence recorded with it, 0 to 100.
source_type stringalways present How it reached Roiva: manual (typed in), assistant (drafted by the Roiva Assistant for the person in recorded_by_id), csv (imported), calculated (by a formula) or integration (synced from a connection).
provenance stringalways present Where the number came from, in the phrase an approver is shown.
connection_id int64may be empty The connection it was synced from.
platform stringmay be empty The platform that connection reads.
source_ref stringmay be empty The id the originating system knows it by.
formula_id int64may be empty The formula that calculated it.
formula_key stringmay be empty That formula's key, stable across its versions.
formula_name stringmay be empty That formula's name.
formula_version int64may be empty The formula version it was computed with, recorded when it was evaluated. A formula revised later keeps this row at the version that produced it.
formula_expression stringmay be empty The expression it was computed with, as recorded when it was evaluated.
input_snapshot string (JSON)always present The inputs frozen with the figure, as JSON with sorted keys. A formula entry holds one object per input, flattened in value_inputs; a synced entry holds what the sync counted.
input_snapshot_sha256 stringalways present SHA-256 of input_snapshot. Roiva computes the same digest for the same inputs, so a figure can be checked against the entry in Roiva.
vendor_price_effect_cents int64 (cents)may be empty Of a saving in AI spend, the part the provider's own price changes gave, in cents. Empty where the entry carries no such split.
own_changes_effect_cents int64 (cents)may be empty Of the same saving, the part the account's own choices earned, in cents.
notes stringmay be empty · free text What a person wrote about the figure, in their own words.
recorded_by_id int64may be empty The person who recorded it, or who had the Roiva Assistant draft it (source_type assistant). Empty when Roiva calculated or synced it.
recorded_by_name stringmay be empty Their name.
approved_at timestamp (UTC)may be empty When it was approved.
approved_by_id int64may be empty The person who approved it. Empty when the account's auto-approve did.
approved_by_name stringmay be empty Their name.
approval_source stringalways present auto when the account's auto-approve setting approved it, direct when a person did.
created_at timestamp (UTC)always present When it was recorded.
updated_at timestamp (UTC)always present When it last changed, or its month was locked or reopened.
roiva_url stringalways present Its page in Roiva, with its inputs and approval history.
basis stringmay be empty What it was compared with: measured (a baseline measured before go-live), reconstructed (one measured after go-live on work done without the AI), estimated (a benchmark or a judgment, or a figure its recorder marked an estimate) or none (no baseline: a count priced per unit, or a figure a person entered).

value_inputs

One row per input of each approved formula entry. What each calculated figure was computed from, as frozen when it was evaluated. Join to reported_value on value_entry_id, and to metric_readings on observation_id.

Column Type What it means
snapshot_id stringalways present The snapshot this row belongs to. Every table in one snapshot describes the same moment.
value_entry_id int64always present The approved entry these are the inputs of.
initiative_id int64always present The initiative the entry belongs to.
variable stringalways present The input's name in the formula's expression.
label stringmay be empty What the input is, in words.
value doublemay be empty The value the formula used.
source_type stringmay be empty Where the value came from: observation (a metric reading for the period), baseline (the reading before the initiative), assumption, period, or derived (computed from other inputs).
metric_key stringmay be empty The metric the value was read from.
observation_id int64may be empty The metric reading used. Its row is in metric_readings.
assumption_id int64may be empty The assumption used, for an assumption input.
assumption_key stringmay be empty That assumption's key.
assumption_scope stringmay be empty system for one of Roiva's defaults, account for the account's own figure.
requires_confirmation booleanmay be empty Whether the input was one of Roiva's defaults awaiting the account's confirmation when it was used.
assumption_effective_from stringmay be empty The date the assumption's figure took effect, as recorded.
observed_at stringmay be empty When the reading was taken, as recorded (a date or an ISO 8601 time).
input_period_start stringmay be empty The start of the period the value covers, as recorded.
input_period_end stringmay be empty The end of the period the value covers, as recorded.
expression stringmay be empty For a derived input, the expression that computed it.

value_supporting_documents

One row per document an approved value entry cites. The evidence each approved figure cites: business cases, review decks, statements of work and contracts held on the initiative in Roiva. Join to reported_value on value_entry_id.

Column Type What it means
snapshot_id stringalways present The snapshot this row belongs to. Every table in one snapshot describes the same moment.
value_entry_id int64always present The approved entry that cites it.
document_id int64always present The document's id in Roiva.
initiative_id int64always present The initiative the document is held on.
kind stringalways present What the document is: business_case, review_deck, sow, contract, other.
restricted booleanalways present Whether it is an SOW or a contract, which Roiva shows only to owners, admins and the initiative's approvers.
title stringmay be empty The document's title. Empty for a restricted document.
format stringalways present file for an uploaded file, link for a link to one held elsewhere.
cited_at timestamp (UTC)always present When the entry was made to cite it.
roiva_url stringalways present The citing entry's page in Roiva, where the document opens for those allowed to see it.

metric_readings

One row per metric reading an approved formula entry used. The readings behind the reported figures. Join to value_inputs on observation_id.

Column Type What it means
snapshot_id stringalways present The snapshot this row belongs to. Every table in one snapshot describes the same moment.
observation_id int64always present The reading's id in Roiva.
metric_key stringalways present The metric it is a reading of.
metric_name stringmay be empty The metric's name.
initiative_id int64may be empty The initiative it was recorded for. Empty for an account-wide reading.
role stringalways present reading for a period's figure, baseline for the figure before the initiative.
value doublealways present The reading.
currency stringmay be empty The currency of value for a money reading (a CRM's deals all in euros read in EUR); empty for a reading that isn't money.
period_start timestamp (UTC)may be empty When the period it covers begins.
period_end timestamp (UTC)may be empty When the period it covers ends.
observed_at timestamp (UTC)may be empty When it was observed.
sample_size int64may be empty How many records an average was taken over, where recorded.
is_estimated booleanalways present Whether it was marked an estimate.
source_type stringalways present How it reached Roiva: integration (synced from a connection), manual (typed in), assistant (recorded by the Roiva Assistant for the person in recorded_by_id), csv (imported), calculated (by a formula), system (a baseline Roiva estimated or calculated) or time_study (a time study's published mean).
connection_id int64may be empty The connection it was synced from.
dimensions string (JSON)always present The breakdown it belongs to, such as a line of business, as JSON with sorted keys.
notes stringmay be empty · free text What a person wrote about the reading, in their own words.
recorded_by_id int64may be empty The person who recorded it by hand, or who had the Roiva Assistant record it (source_type assistant).
recorded_by_name stringmay be empty Their name.
baseline_method stringmay be empty For a baseline, how the before-figure was measured: history, time_study, without_ai_sample, benchmark, estimate. Empty on a reading.
time_study_id int64may be empty For source_type time_study, the time study it is the published mean of.
valid_until datemay be empty For a time study's figure, the last day it stands: the study's last day plus its re-study interval. Months after it hold value calculated from it as due for re-study.

costs

One row per cost entry, sample initiatives excluded. What the account's initiatives cost to build and run. An entry belongs to the period its period_start falls in, as value does. capex and opex split the same rows, so they add up to the total.

Column Type What it means
snapshot_id stringalways present The snapshot this row belongs to. Every table in one snapshot describes the same moment.
cost_entry_id int64always present The entry's id in Roiva.
initiative_id int64always present The initiative it is booked to.
amount_cents int64 (cents)always present What it cost, in cents of currency.
currency stringalways present The currency of amount_cents.
usd_amount_cents int64 (cents)may be empty What it cost in US dollars, in cents: amount_cents itself for a dollar cost, converted at usd_rate for another currency. Empty, and in no total, when there is no rate: a currency the ECB doesn't publish, or a cost whose month was locked before it was converted. An undated cost takes the rate for the day it was booked. reported_totals add this column.
usd_rate doublemay be empty US dollars per unit of currency: the average of the European Central Bank's daily euro reference rates over usd_rate_from to usd_rate_through, crossed through the euro. Empty for a dollar cost.
usd_rate_from datemay be empty The first ECB day usd_rate averages.
usd_rate_through datemay be empty The last ECB day usd_rate averages.
usd_rate_provisional booleanmay be empty Whether usd_rate is the latest ECB rate rather than its period's average, because the period's rates weren't all published yet. A later snapshot carries the average, unless the month was locked before then.
cost_category stringalways present capex for a one-off cost to build, opex for a cost to run.
cost_type stringalways present What kind of cost it is, such as licenses, infrastructure or labor.
period_start timestamp (UTC)may be empty When the period it covers begins. It decides which period the entry counts in.
period_end timestamp (UTC)may be empty When the period it covers ends.
period_month datemay be empty The first day of the month period_start falls in, in UTC.
is_estimated booleanalways present Whether it was marked an estimate.
locked booleanalways present Whether a closed accounting period holds it, so it can no longer be changed.
vendor_id int64may be empty The vendor it was paid to, in Roiva's vendor list.
vendor_name stringmay be empty The vendor's name as recorded.
description stringmay be empty · free text What the cost was for, as recorded or synced.
notes stringmay be empty · free text What a person wrote about it, in their own words.
books_account_name stringmay be empty The general-ledger account it was booked to, for a cost from the books.
source_type stringalways present How it reached Roiva, such as manual, assistant (recorded by the Roiva Assistant), csv or integration.
connection_id int64may be empty The connection it was synced from.
platform stringmay be empty The platform that connection reads.
source_ref stringmay be empty The id the originating system knows it by.
implementation_id int64may be empty The implementation project it is attributed to, when it is one.
recurring_cost_id int64may be empty The recurring cost that wrote it, when it is one.
allocation_line_id int64may be empty The allocation line that split it from a shared bill, when it is one.
recorded_by_id int64may be empty The person who recorded it by hand, or who had the Roiva Assistant record it (source_type assistant).
recorded_by_name stringmay be empty Their name.
created_at timestamp (UTC)always present When it was recorded.
updated_at timestamp (UTC)always present When it last changed.
roiva_url stringalways present Its page in Roiva.

approval_decisions

One row per approval decision, sample initiatives excluded. Who approved, rejected, disputed or sent back what, and when. A value entry's rows show how it came to be approved; join on subject_id where subject_kind is value_entry.

Column Type What it means
snapshot_id stringalways present The snapshot this row belongs to. Every table in one snapshot describes the same moment.
approval_decision_id int64always present The decision's id in Roiva.
subject_kind stringalways present What was decided on: initiative, value_entry, budget, charter.
subject_id int64always present Its id: a value_entry_id, an initiative_id or a budget_id.
initiative_id int64may be empty The initiative it concerns. Empty once that initiative has been deleted.
subject_title stringalways present What it was called when the decision was taken.
item_label stringmay be empty The line decided on, for a value entry or a budget.
decision stringalways present The decision: approved, step_approved, rejected, disputed, sent_back. step_approved is one approver's sign-off in a chain that needs more.
resulting_state stringmay be empty The state it left the subject in.
step int64may be empty Which step of the approval chain this was.
total_steps int64may be empty How many steps the chain had.
source stringalways present How it was taken: direct, bulk, auto, backfill, assistant, import. auto is the account's auto-approve setting.
amount_cents int64 (cents)may be empty The amount decided on, in cents, for a value entry or a budget.
currency stringmay be empty The currency of amount_cents.
reason stringmay be empty · free text The reason the approver gave, in their own words.
decided_by_id int64may be empty The person who decided. Empty for the account's auto-approve.
decided_by_name stringmay be empty Their name.
decided_at timestamp (UTC)always present When the decision was taken.

budgets

One row per budget version, sample initiatives excluded. What was signed off for each initiative, version by version: its one-off cost and its running cost. This is the approved budget, not the business case. How spend compares with it is in budget_vs_actual.

Column Type What it means
snapshot_id stringalways present The snapshot this row belongs to. Every table in one snapshot describes the same moment.
budget_id int64always present The version's id in Roiva.
initiative_id int64always present The initiative it budgets.
status stringalways present pending, approved, rejected, withdrawn. Only approved versions are budgets.
source stringalways present How it arose: approval (set when the initiative was approved), revision or manual.
capex_cents int64 (cents)always present The one-off cost signed off, in cents: a total, not a rate.
opex_cents int64 (cents)always present The running cost signed off, in cents per opex_cadence.
opex_cadence stringalways present The period opex_cents is stated for: monthly, quarterly or annually.
currency stringalways present The currency of the amounts.
effective_from datealways present The version applies from the start of this date's month.
ends_on datemay be empty The last day it applies, when it has an end.
reason stringmay be empty · free text Why the version was set, in the words of whoever set it.
set_by_id int64may be empty The person who set it.
set_by_name stringmay be empty Their name.
decided_at timestamp (UTC)may be empty When it was approved, rejected or withdrawn.
decided_by_id int64may be empty The person who decided it.
decided_by_name stringmay be empty Their name.
decision_reason stringmay be empty · free text The reason given with the decision, in the decider's words.
approval_decision_id int64may be empty The approval_decisions row that decided it, when one did.
created_at timestamp (UTC)always present When the version was written.
roiva_url stringalways present The initiative's budget page in Roiva.

budget_vs_actual

One row per budgeted initiative per as_of day: the snapshot's day, and the end of each of the last 8 complete fiscal quarters. How spend compares with the approved budget, computed as Roiva's budget pages and the Board Brief compute it. CapEx is a total against a total; OpEx is spend against the budget for the months elapsed. Only initiatives with an approved budget in effect on as_of have a row.

Column Type What it means
snapshot_id stringalways present The snapshot this row belongs to. Every table in one snapshot describes the same moment.
as_of datealways present The day the comparison runs through.
initiative_id int64always present The initiative.
status stringalways present within or over, as Roiva shows it. Over when either the CapEx or the OpEx half is over.
budget_id int64always present The budget version in effect on as_of.
revised booleanalways present Whether the budget has been revised since it was first approved.
capex_budget_cents int64 (cents)always present CapEx signed off, in cents.
capex_actual_cents int64 (cents)always present CapEx spent since the budget began, in cents.
opex_budget_to_date_cents int64 (cents)always present OpEx budget for the months from the budget's start through as_of, in cents.
opex_actual_cents int64 (cents)always present OpEx spent over those months, in cents.
budget_to_date_cents int64 (cents)always present CapEx budget plus OpEx budget to date, in cents.
actual_to_date_cents int64 (cents)always present CapEx plus OpEx spent, in cents.
variance_cents int64 (cents)always present Budget to date less actual, in cents. Positive is under budget.
opex_budget_fiscal_year_cents int64 (cents)always present The OpEx budget for the whole fiscal year as_of falls in, in cents.
opex_budget_fiscal_ytd_cents int64 (cents)always present The part of it through as_of, in cents.
opex_actual_fiscal_ytd_cents int64 (cents)always present OpEx spent in the fiscal year through as_of, in cents.
spent_before_budget_cents int64 (cents)always present Spend dated before the budget began, reported apart rather than charged to it, in cents.
budget_monthly_run_rate_cents int64 (cents)always present The version's OpEx per month, in cents.
actual_monthly_run_rate_cents int64 (cents)may be empty Average OpEx per month over the recent complete months the budget covered, in cents. Empty before one has passed.

portfolio_decisions

One row per portfolio decision, sample initiatives excluded. The account's decisions about its initiatives, with the figures each was taken on. The figures are all-time as of the decision, not the snapshot.

Column Type What it means
snapshot_id stringalways present The snapshot this row belongs to. Every table in one snapshot describes the same moment.
portfolio_decision_id int64always present The decision's id in Roiva.
initiative_id int64may be empty The initiative decided on. Empty once that initiative has been deleted; the decision is kept.
subject_title stringalways present The initiative's name when it was decided.
outcome stringalways present continue, scale, fix, pause, retire.
stage_before stringalways present The initiative's stage before the decision.
stage_after stringalways present Its stage after.
rationale stringalways present · free text Why, in the words of whoever decided.
next_review_on datemay be empty When it is to be reviewed again.
cash_value_cents int64 (cents)always present Approved cash value to the decision, in cents.
freed_capacity_cents int64 (cents)always present Approved freed capacity to the decision, in cents. Not cash, and not in roi.
cost_to_date_cents int64 (cents)always present Cost to the decision, in cents.
planned_value_cents int64 (cents)may be empty The business case's value over its whole horizon, in cents, at the time.
planned_value_to_date_cents int64 (cents)may be empty The business case's value to the decision, in cents.
roi doublemay be empty Cash ROI at the decision: (cash value − cost) ÷ cost. Empty without both.
currency stringalways present The currency of the amounts.
decided_by_id int64may be empty The person who decided.
decided_by_name stringmay be empty Their name.
decided_at timestamp (UTC)always present When.
roiva_url stringmay be empty The initiative's decisions in Roiva. Empty once it has been deleted.

accounting_periods

One row per month finance has opened for close. The account's accounting periods and whether each is locked. A month with no row has never been through close in Roiva.

Column Type What it means
snapshot_id stringalways present The snapshot this row belongs to. Every table in one snapshot describes the same moment.
month datealways present The first day of the month.
status stringalways present open, in_review, locked, reopened.
locked booleanalways present Whether the month is locked now.
locked_at timestamp (UTC)may be empty When it was last locked.
locked_by_id int64may be empty Who locked it.
locked_by_name stringmay be empty Their name.
reopened_at timestamp (UTC)may be empty When it was last reopened.
reopened_by_id int64may be empty Who reopened it.
reopened_by_name stringmay be empty Their name.
reopen_reason stringmay be empty · free text Why it was reopened, in their words.

ai_spend

One row per month per provider connection with a bill, one per month per AI vendor on the books and card feeds with a bill, plus one row per month for the card feeds together. AI spend as the providers billed it and as the books and cards paid AI vendors, before any initiative books it, and how much of it an initiative does. A provider row whose attribution is unlinked or unmapped, and an ai_vendor row whose attribution is unbooked, is spend no initiative carries. ai_billed_cents and ai_booked_cents on provider_bill and ai_vendor rows add up to the figures Finance > AI Spend shows, except that a sample initiative's booking is never counted here: the page counts one while the account has only sample data. Card rows are what corporate cards were charged, stated beside the other rows and never added to them: an AI vendor's charges are in its ai_vendor row too. Every amount is US dollars: a bill in another currency counts at its month's ECB rate (a bill on the books or cards at its day's), or the latest one while that month's rates are out, and one with no ECB rate is in no row. Card rows count charges made in US dollars.

Column Type What it means
snapshot_id stringalways present The snapshot this row belongs to. Every table in one snapshot describes the same moment.
month datealways present The first day of the month.
source_kind stringalways present provider_bill for a provider's own bill, ai_vendor for an AI vendor's bills on the books and card feeds, card for the card feeds.
connection_id int64may be empty The provider connection. Empty on ai_vendor and card rows.
platform stringmay be empty The provider. Empty on ai_vendor and card rows.
connection_name stringmay be empty The connection's name in Roiva. Empty on ai_vendor and card rows.
vendor_name stringmay be empty The AI vendor, as Roiva names it: on its list of AI vendors, or as an Owner or Admin counted it. Empty on provider_bill and card rows.
billed_cents int64 (cents)always present What was billed, or charged to the cards, that month, in cents. The whole bill: for a cloud, data platform or GitHub connection, ai_billed_cents is the AI part of it. On an ai_vendor row, the vendor's bills on the books and cards, less any part its own connection bills.
currency stringalways present The currency of the amounts.
attribution stringmay be empty attributed when an initiative books the connection's bill or the vendor's bills; unlinked when no initiative links the connection; unmapped when it is linked but nothing maps its costs; unbooked when no initiative books the vendor's bills. Empty on card rows.
set_aside booleanmay be empty Whether an admin marked the connection, or the vendor on every connection carrying it, as belonging to no initiative. Its spend still counts as unattributed. Empty on card rows.
initiative_count int64may be empty How many initiatives take cost from the connection or the vendor's bills. Empty on card rows.
booked_cents int64 (cents)may be empty On a card row, the part of the charges already booked to an initiative, and on an ai_vendor row, of the vendor's bills, in cents. Empty on provider rows; ai_booked_cents is theirs.
ai_billed_cents int64 (cents)may be empty The AI part of billed_cents, in cents: all of a model provider's bill; a cloud, data platform or GitHub bill's AI services and the lines an initiative claims; all of an ai_vendor row's billed_cents. What Finance > AI Spend counts as billed. Empty on card rows.
ai_booked_cents int64 (cents)may be empty What of ai_billed_cents an initiative's links book, in cents: 0 when unlinked, unmapped or unbooked. ai_billed_cents less this is what Finance > AI Spend calls attached to nothing. Empty on card rows.

reported_totals

One row per window, for the portfolio and for each initiative: all time, each fiscal quarter and each fiscal year from the first with value or cost. Approved cash value and freed capacity, kept apart, with cost, net cash value and cash ROI, exactly as Roiva's reports compute them, sample initiatives excluded. Freed capacity is in neither the net value nor the ROI. A figure built from reported_value and costs must equal the row for its window; Roiva checks that before publishing a snapshot.

Column Type What it means
snapshot_id stringalways present The snapshot this row belongs to. Every table in one snapshot describes the same moment.
scope stringalways present portfolio for the whole account, initiative for one initiative.
initiative_id int64may be empty The initiative, for an initiative row.
window_kind stringalways present all_time, fiscal_quarter or fiscal_year.
window_key stringalways present The window's key: all, fy2026-q1, fy2026.
window_label stringalways present The window as Roiva names it.
from_date datemay be empty The window's first day. Empty for all time.
through_date datemay be empty The window's last day. Empty for all time.
window_complete booleanalways present Whether the window had ended when the snapshot was built.
cash_value_cents int64 (cents)always present Approved cash value in the window, in cents: the margin on revenue earned, costs that fell, losses and spend that didn't happen, and freed capacity shown to have become cash.
freed_capacity_cents int64 (cents)always present Approved freed capacity in the window, in cents: hours and output freed, priced at what they cost. Not cash, and in no other figure here; never add it to cash_value_cents.
cost_cents int64 (cents)always present Cost in the window, in cents.
net_value_cents int64 (cents)always present Cash value less cost, in cents. Freed capacity is not in it.
roi doublemay be empty Cash ROI: net value ÷ cost. Empty unless both cash value and cost are above zero, as in Roiva.
capex_cents int64 (cents)may be empty The CapEx part of cost_cents, in cents. Portfolio rows only.
opex_cents int64 (cents)may be empty The OpEx part of cost_cents, in cents. Portfolio rows only.
planned_value_to_date_cents int64 (cents)may be empty The business cases' value for the months of the window each initiative was live, in cents: the plan the approved value is set against. Portfolio rows only; leaves out a plan Roiva filled in that no one has confirmed.
planned_capacity_to_date_cents int64 (cents)may be empty The business cases' freed capacity for the months of the window each initiative was live, in cents. Portfolio rows only; leaves out a plan Roiva filled in that no one has confirmed.
planned_opex_to_date_cents int64 (cents)may be empty The business cases' running cost for the months of the window each initiative was under way, in cents. Portfolio rows only; leaves out a plan Roiva filled in that no one has confirmed.
planned_capex_cents int64 (cents)may be empty The business cases' one-off cost, in cents. Portfolio rows only; leaves out a plan Roiva filled in that no one has confirmed.
vendor_price_effect_cents int64 (cents)may be empty Of the approved value, the part AI providers' own price changes gave, in cents. Portfolio rows only; empty where no entry carries that split.