soma.cell

Sales report: a List<Map> of orders rolled up by region and category

Demonstrates filter_by -> agg (group + sum/avg) -> sort_by, plus sum_by and pluck for headline numbers. Self-verifying via a test cell.

A Soma program from the data part of the verified corpus: 54 lines, cells SalesReport, SalesReportTests. It passes soma check with soma 3.2.4.

How it is built

The cell SalesReport has no face and no memory. Handlers: orders (line 6), by_region (line 20), category_avg (line 27), total_revenue (line 34) and run (line 36).

The file also holds 1 test cell (SalesReportTests) with 3 assertions, run by soma test.

Generated from soma describe on this file.

The source

sales_report.cell

// Sales report: a List<Map> of orders rolled up by region and category.
// Demonstrates filter_by -> agg (group + sum/avg) -> sort_by, plus sum_by
// and pluck for headline numbers. Self-verifying via a test cell.

cell SalesReport {
    on orders() {
        return list(
            map("id", 1, "region", "EU", "category", "Hardware", "amount", 1200, "units", 3),
            map("id", 2, "region", "US", "category", "Software", "amount", 800,  "units", 1),
            map("id", 3, "region", "EU", "category", "Software", "amount", 450,  "units", 2),
            map("id", 4, "region", "US", "category", "Hardware", "amount", 2100, "units", 5),
            map("id", 5, "region", "EU", "category", "Hardware", "amount", 300,  "units", 1),
            map("id", 6, "region", "APAC", "category", "Software", "amount", 1500, "units", 4),
            map("id", 7, "region", "US", "category", "Software", "amount", 950,  "units", 2),
            map("id", 8, "region", "APAC", "category", "Hardware", "amount", 80,  "units", 1)
        )
    }

    // Revenue by region, biggest first. Each group row carries amount_sum.
    on by_region() {
        return orders()
            |> agg("region", "amount:sum", "units:sum")
            |> sort_by("amount_sum", "desc")
    }

    // Only material orders (>= 500), averaged per category.
    on category_avg() {
        return orders()
            |> filter_by("amount", ">=", 500)
            |> agg("category", "amount:avg")
            |> sort_by("amount_avg", "desc")
    }

    on total_revenue() { return orders() |> sum_by("amount") }

    on run() {
        let regions = by_region()
        for r in regions {
            print("{r.region}: {r.amount_sum} ({r.units_sum} units)")
        }
        return total_revenue()
    }
}

cell test SalesReportTests {
    rules {
        assert total_revenue() == 7380
        // EU = 1200 + 450 + 300 = 1950
        assert (by_region() |> filter_by("region", "=", "EU"))[0].amount_sum == 1950
        // top region by revenue is US (800+2100+950 = 3850)
        assert by_region()[0].region == "US"
    }
}

What the toolchain says

Run on a fresh copy of the program at build time; the outputs are pasted unedited.

$ soma check sales_report.cell
✓ All checks passed.
$ soma test sales_report.cell
test SalesReportTests ...
  ✓ assert total_revenue() == 7380
  ✓ assert (by_region() |> filter_by("region", "=", "EU"))[0].amount_sum == 1950
  ✓ assert by_region()[0].region == "US"

3 tests: 3 passed, 0 failed
$ soma verify sales_report.cell
Verifying sales_report.cell...
No state machine in this program: nothing to prove beyond `soma check` (invariants and lifecycles are what verify proves).
VERIFY OK (vacuous — no state machine)

Builtins used

agg, filter_by, list, map, print, sort_by, sum_by

Source file: /corpus/data/sales_report.cell · examples/corpus/data/sales_report.cell