21 lines
1.3 KiB
JSON
21 lines
1.3 KiB
JSON
{
|
|
"feature_id": "F-072",
|
|
"agent": "qa",
|
|
"verdict": "APPROVED",
|
|
"summary": "F-072 fully implemented. Migration applied. API verified. Typecheck and verify.sh green.",
|
|
"evidence": [
|
|
"AC1 'PricingSection fetches active tax rates from GET /admin/tax-rates' — taxApi.list() called in useEffect, active rates filtered and stored in state, mapped to dropdown options",
|
|
"AC2 'Dropdown shows all active rates dynamically' — activeTaxRates.map() renders option per active rate; fallback shows 2 original options if API fails",
|
|
"AC3 'VAT calculation uses fetched rate percentages instead of hardcoded constants' — grossCents = Math.round(netCents * (1 + ratePercent / 100)) where ratePercent comes from activeTaxRates.find()",
|
|
"AC4 'verify.sh is green' — exit 0, 145 features valid",
|
|
"Migration 031 applied successfully to dev DB",
|
|
"npx tsc --noEmit backend exit 0",
|
|
"npx tsc --noEmit admin exit 0",
|
|
"npx eslint on changed files exit 0",
|
|
"API: PUT /pricing/variants/:id with vatRate='super-reduced' → HTTP 200, variant saved with super-reduced",
|
|
"API: GET /pricing/variants/:id confirms vatRate='super-reduced' persisted",
|
|
"API: GET /admin/tax-rates returns all 3 active rates including 4% super-reduced"
|
|
],
|
|
"timestamp": "2026-08-19T17:24:00Z"
|
|
}
|