feat(F-113): completed feature

This commit is contained in:
chattie
2026-08-21 12:27:13 +02:00
parent 027cacd871
commit c05c0b0582
25 changed files with 581 additions and 74 deletions

View File

@@ -4862,6 +4862,81 @@
"security": false,
"qa": false
}
},
{
"id": "F-113",
"type": "feature",
"title": "Email customer on processing/shipped with tracking and editable courier",
"problem": "Customer gets no email when order moves to processing or shipped; shipped email does not say which courier carries the parcel",
"goal": "Send email on PROCESSING and SHIPPED transitions; shipped email includes tracking number and courier chosen from an admin-editable courier list",
"scope_in": [
"order status mailer",
"admin transition flow",
"courier list settings",
"order courier field"
],
"scope_out": [
"no redesign of other state emails",
"no external carrier API integration"
],
"priority": "high",
"risk": "med",
"description": "Problem: Customer gets no email when order moves to processing or shipped; shipped email does not say which courier carries the parcel. Goal: Send email on PROCESSING and SHIPPED transitions; shipped email includes tracking number and courier chosen from an admin-editable courier list. Scope IN: order status mailer, admin transition flow, courier list settings, order courier field. Scope OUT: no redesign of other state emails, no external carrier API integration. Type: feature. Priority: high. Risk: med.",
"acceptance": [
"PROCESSING transition sends email to customer when SMTP configured",
"SHIPPED transition email shows tracking number and courier",
"Courier comes from admin-editable list stored in settings",
"Selecting courier is required when marking order shipped",
"Missing or failing SMTP reports notified false without breaking transition",
"Typecheck, tests, verify pass"
],
"status": "done",
"created_at": "2026-08-21",
"gates": {
"reviewer": true,
"security": true,
"qa": true,
"close": true
},
"completed_at": "2026-08-21T10:27:13Z"
},
{
"id": "F-114",
"type": "feature",
"title": "Import legacy OpenCart categories into the catalog without duplicates",
"problem": "Legacy OpenCart database has 76 categories including product categories and brand names; current catalog only has 5 root categories and is missing many product subcategories and brand entries, blocking migration of the old inventory",
"goal": "Map and import the legacy oc_category_description entries into the active categories module, normalizing HTML entities and skipping exact-name duplicates; route brand-looking entries into the existing brand module instead of categories",
"scope_in": [
"categories module",
"brands module",
"mapping helper",
"legacy category normalization",
"admin seed script"
],
"scope_out": [
"no product migration",
"no design changes",
"no category attribute redesign"
],
"priority": "high",
"risk": "med",
"description": "Problem: Legacy OpenCart database has 76 categories including product categories and brand names; current catalog only has 5 root categories and is missing many product subcategories and brand entries, blocking migration of the old inventory. Goal: Map and import the legacy oc_category_description entries into the active categories module, normalizing HTML entities and skipping exact-name duplicates; route brand-looking entries into the existing brand module instead of categories. Scope IN: categories module, brands module, mapping helper, legacy category normalization, admin seed script. Scope OUT: no product migration, no design changes, no category attribute redesign. Type: feature. Priority: high. Risk: med.",
"acceptance": [
"Legacy oc_category_description entries are parsed and normalized (HTML entities and casing)",
"Existing category names are skipped to avoid duplicates (case-insensitive match)",
"Brand-looking entries (e.g. SOLGAR, EL GRANERO INTEGRAL, BIOSPIRIT) are created in the brands module, not categories",
"New product categories are added as subcategories under the existing root (Alimentacion, Cosmetica e Higiene, Hogar y Mascotas, Limpieza Ecologica, Suplementos) or as new roots when they do not fit",
"Each new category has a unique slug and a sensible parent",
"Seed script is idempotent and safe to run multiple times",
"Typecheck, tests, verify pass"
],
"status": "pending",
"created_at": "2026-08-21",
"gates": {
"reviewer": false,
"security": false,
"qa": false
}
}
]
}