Skip to main content
Solya’s data splits into analytics data (ingested, read-mostly, on Databricks) and app-managed data (created in Solya, on PostgreSQL). See Architecture.

Master data (ingested)

Catalog and transactional entities are populated by the data platform’s ETL from POS systems (Polaris, Kezia) and are read-only in the app. They are organization-scoped.

Analytics layers

The data platform exposes these as silver (cleaned/normalized) and gold (business-ready) tables — e.g. fact_sales_lines, fact_order_lines, fact_movement_lines, stock_ledger, stock_snapshot, the dim_* dimensions, *_shop_analytics summaries, sales_forecasts, and decision_vector. The app reads these for dashboards, KPIs, search, alerts, and recommendations.
Because catalog data is ingested, you don’t create shops/products/variants in the app — they arrive through ingestion. See the Data layer.

App-managed data (created in Solya)

Everything you create lives in PostgreSQL and is org-scoped: inventory plans and their items, business rules and rulesets, budget envelopes, size curves, markdown calendars, supplier constraints, approval/return policies, org lists, alerts, tags and tagging rules, workflows, settings, navigation templates, and the audit log. Each new table documents how its data is populated, modified, and access-controlled.

Plan status enumerations

The exact statuses per plan type (used by the API and surfaced in the UI): Plan item status is shared: TO_REVIEW and READY_FOR_ORDER. Supplier-side plans carry extra enumerations — return reason codes (e.g. defect, transit damage, wrong SKU/quantity, recall, QC fail, other), return source types (restock, pre-season), and exchange sides (return, receive).
These status values are stable identifiers you can branch on. The conceptual lifecycle (reversible transitions, decision moments, approvals) is described in Inventory plans → lifecycle.