18 lines
1.3 KiB
JSON
18 lines
1.3 KiB
JSON
{
|
|
"feature_id": "F-149",
|
|
"agent": "reviewer",
|
|
"stage": "review_gate",
|
|
"verdict": "APPROVED",
|
|
"summary": "ReportingService.products() implements product rankings via CTE joining orders_items+catalog_products+categories+brands. GET /reporting/products endpoint with REPORTING_PRODUCTS RBAC. Admin products page with table, filters, pagination. tsc 0, boundaries 0.",
|
|
"checks": [
|
|
{"item": "AC1 product rankings CTE", "ok": true, "evidence": "SQL CTE: filtered_orders + filtered_items + product_rank JOIN with catalog_products/categories/brands"},
|
|
{"item": "AC2 units/revenue sort", "ok": true, "evidence": "sortBy: 'units_sold' (default) or 'gross_sales_cents' (sort=revenue param)"},
|
|
{"item": "AC3 category/brand LEFT JOIN", "ok": true, "evidence": "LEFT JOIN catalog_product_categories + categories_categories + brands_brands; NULL for products without category/brand"},
|
|
{"item": "AC4 pagination", "ok": true, "evidence": "LIMIT $7 OFFSET $8 + total_count subquery"},
|
|
{"item": "AC5 filters", "ok": true, "evidence": "filters: from/to/channel/storeId/terminalId applied in CTE"},
|
|
{"item": "AC6 admin page", "ok": true, "evidence": "reporting/products/page.tsx with sortable table, filters, pagination"},
|
|
{"item": "tsc/verify", "ok": true, "evidence": "npm run build 0 errors; boundaries 0 new; verify.sh green"}
|
|
],
|
|
"issues": []
|
|
}
|