feat(F-088): completed feature
This commit is contained in:
@@ -2,12 +2,36 @@
|
||||
"feature_id": "F-081",
|
||||
"verdict": "APPROVED",
|
||||
"trace": [
|
||||
{ "acceptance": "Inventory PRECIO NETO accepts ',' and '.'", "result": "PASS", "evidence": "eurToCents replaces ',' with '.' before parseFloat." },
|
||||
{ "acceptance": "Operator can freely type, delete digits and decimal separator", "result": "PASS", "evidence": "type=text inputMode=decimal; value bound to priceValue state." },
|
||||
{ "acceptance": "Editing triggers PATCH to the variant endpoint", "result": "PASS", "evidence": "savePrice -> pricingApi.setVariantPrice(variantId, cents, vatRate)." },
|
||||
{ "acceptance": "On success value is persisted and shown back; on error inline error and old value restored", "result": "PASS", "evidence": "setRows updates price + priceValue from API response on success; saveMsg = 'Error' on failure; cancelEditPrice restores from r.price." },
|
||||
{ "acceptance": "Format identical to Prices tab Neto (sin IVA)", "result": "PASS", "evidence": "Same centsToEur/eurToCents behaviour; same input attributes." },
|
||||
{ "acceptance": "verify.sh is green", "result": "PASS", "evidence": "tsc --noEmit exit 0; eslint exit 0." }
|
||||
{
|
||||
"acceptance": "Inventory PRECIO NETO accepts ',' and '.'",
|
||||
"result": "PASS",
|
||||
"evidence": "eurToCents replaces ',' with '.' before parseFloat."
|
||||
},
|
||||
{
|
||||
"acceptance": "Operator can freely type, delete digits and decimal separator",
|
||||
"result": "PASS",
|
||||
"evidence": "type=text inputMode=decimal; value bound to priceValue state."
|
||||
},
|
||||
{
|
||||
"acceptance": "Editing triggers PATCH to the variant endpoint",
|
||||
"result": "PASS",
|
||||
"evidence": "savePrice -> pricingApi.setVariantPrice(variantId, cents, vatRate)."
|
||||
},
|
||||
{
|
||||
"acceptance": "On success value is persisted and shown back; on error inline error and old value restored",
|
||||
"result": "PASS",
|
||||
"evidence": "setRows updates price + priceValue from API response on success; saveMsg = 'Error' on failure; cancelEditPrice restores from r.price."
|
||||
},
|
||||
{
|
||||
"acceptance": "Format identical to Prices tab Neto (sin IVA)",
|
||||
"result": "PASS",
|
||||
"evidence": "Same centsToEur/eurToCents behaviour; same input attributes."
|
||||
},
|
||||
{
|
||||
"acceptance": "verify.sh is green",
|
||||
"result": "PASS",
|
||||
"evidence": "tsc --noEmit exit 0; eslint exit 0."
|
||||
}
|
||||
],
|
||||
"regression_checks": [
|
||||
"IVA dropdown still editable",
|
||||
@@ -16,5 +40,6 @@
|
||||
],
|
||||
"verdict_reason": "Format-only fix. All acceptance criteria trace to PASS.",
|
||||
"reviewer": "qa",
|
||||
"reviewed_at": "2026-08-20T04:04:00Z"
|
||||
}
|
||||
"reviewed_at": "2026-08-20T04:04:00Z",
|
||||
"agent": "qa"
|
||||
}
|
||||
|
||||
@@ -2,15 +2,39 @@
|
||||
"feature_id": "F-081",
|
||||
"verdict": "APPROVED",
|
||||
"checks": [
|
||||
{ "name": "priceValue is euros string, not cents string", "result": "PASS", "notes": "centsToEur on load and on success. eurToCents on save." },
|
||||
{ "name": "type=text inputMode=decimal", "result": "PASS", "notes": "Same component shape as PricingSection's Neto input." },
|
||||
{ "name": "PATCH still posts cents to pricingApi", "result": "PASS", "notes": "endpoint and payload unchanged: { netUnitAmountCents, vatRate }." },
|
||||
{ "name": "Cancel restores the previously-persisted value", "result": "PASS", "notes": "cancelEditPrice uses centsToEur(r.price.netUnitAmountCents)." },
|
||||
{ "name": "Pre-existing lint cleaned", "result": "PASS", "notes": "Removed unused useCallback import and grossPrice local." }
|
||||
{
|
||||
"name": "priceValue is euros string, not cents string",
|
||||
"result": "PASS",
|
||||
"notes": "centsToEur on load and on success. eurToCents on save."
|
||||
},
|
||||
{
|
||||
"name": "type=text inputMode=decimal",
|
||||
"result": "PASS",
|
||||
"notes": "Same component shape as PricingSection's Neto input."
|
||||
},
|
||||
{
|
||||
"name": "PATCH still posts cents to pricingApi",
|
||||
"result": "PASS",
|
||||
"notes": "endpoint and payload unchanged: { netUnitAmountCents, vatRate }."
|
||||
},
|
||||
{
|
||||
"name": "Cancel restores the previously-persisted value",
|
||||
"result": "PASS",
|
||||
"notes": "cancelEditPrice uses centsToEur(r.price.netUnitAmountCents)."
|
||||
},
|
||||
{
|
||||
"name": "Pre-existing lint cleaned",
|
||||
"result": "PASS",
|
||||
"notes": "Removed unused useCallback import and grossPrice local."
|
||||
}
|
||||
],
|
||||
"lint": { "errors_introduced": 0, "pre_existing_cleaned": true },
|
||||
"lint": {
|
||||
"errors_introduced": 0,
|
||||
"pre_existing_cleaned": true
|
||||
},
|
||||
"typecheck": "PASS",
|
||||
"verdict_reason": "Format and save behaviour now match Prices tab exactly.",
|
||||
"reviewer": "reviewer",
|
||||
"reviewed_at": "2026-08-20T04:03:00Z"
|
||||
}
|
||||
"reviewed_at": "2026-08-20T04:03:00Z",
|
||||
"agent": "reviewer"
|
||||
}
|
||||
|
||||
@@ -2,14 +2,27 @@
|
||||
"feature_id": "F-081",
|
||||
"verdict": "APPROVED",
|
||||
"checks": [
|
||||
{ "name": "XSS / parser safety", "result": "PASS", "notes": "eurToCents uses parseFloat; result is a number, never rendered as HTML." },
|
||||
{ "name": "Auth unchanged", "result": "PASS", "notes": "Same admin-gated endpoint." },
|
||||
{ "name": "No new dependencies", "result": "PASS", "notes": "No new packages." }
|
||||
{
|
||||
"name": "XSS / parser safety",
|
||||
"result": "PASS",
|
||||
"notes": "eurToCents uses parseFloat; result is a number, never rendered as HTML."
|
||||
},
|
||||
{
|
||||
"name": "Auth unchanged",
|
||||
"result": "PASS",
|
||||
"notes": "Same admin-gated endpoint."
|
||||
},
|
||||
{
|
||||
"name": "No new dependencies",
|
||||
"result": "PASS",
|
||||
"notes": "No new packages."
|
||||
}
|
||||
],
|
||||
"sast": "PASS",
|
||||
"dependency_review": "PASS",
|
||||
"secret_scan": "PASS",
|
||||
"verdict_reason": "Format-only UI change; no new attack surface.",
|
||||
"reviewer": "security",
|
||||
"reviewed_at": "2026-08-20T04:03:30Z"
|
||||
}
|
||||
"reviewed_at": "2026-08-20T04:03:30Z",
|
||||
"agent": "security"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user