Static web app that replaces the Excel SLA calculator with a 4-step wizard: - config.json: all business rules, cross-reference tables, stage matrix, tooltips - index.html: Tailwind CSS UI with dark mode, responsive layout, Flatpickr dates - script.js: business-day calculation engine, real-time SLA computation, PDF + iCal export Matches Excel logic exactly (verified against Tab 2 example). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
359 lines
17 KiB
JSON
359 lines
17 KiB
JSON
{
|
|
"meta": {
|
|
"title": "SLA Calculator",
|
|
"subtitle": "eCom Content Factory",
|
|
"version": "1.0.0",
|
|
"handoverDays": 1,
|
|
"businessDaysOnly": true,
|
|
"syndicationBufferDays": 10,
|
|
"syndicationBufferNote": "When syndication is required, we suggest a 10 business-day buffer between completion date and go-live date due to retailer requirements."
|
|
},
|
|
|
|
"briefTypes": [
|
|
{
|
|
"id": "country_pull_adaptation",
|
|
"label": "Country Pull - Adaptation",
|
|
"projectType": "Country Pull - Adaptation",
|
|
"description": "Global Pull projects refer to assets requested by countries for creation or adaptation. It will go through Production and Opera Upload. It sometimes goes through Copy Creation, Translation, or Syndication."
|
|
},
|
|
{
|
|
"id": "country_pull_creation",
|
|
"label": "Country Pull - Creation",
|
|
"projectType": "Country Pull - Creation",
|
|
"description": "Global Pull projects for asset creation from scratch, requiring full production pipeline."
|
|
},
|
|
{
|
|
"id": "country_pull_simple",
|
|
"label": "Country Pull - Simple",
|
|
"projectType": "Country Pull - Simple",
|
|
"description": "Simple Pull projects with minimal stages - typically Translation, Production, and Opera Upload."
|
|
},
|
|
{
|
|
"id": "country_retailer_request",
|
|
"label": "Country Retailer Request",
|
|
"projectType": "Country Retailer Request",
|
|
"description": "Retailer request is for Syndication only. It sometimes may request simple production (e.g., resize before syndication)."
|
|
},
|
|
{
|
|
"id": "global_push_eventing",
|
|
"label": "Global Push - Eventing",
|
|
"projectType": "Global Push - Eventing",
|
|
"description": "Global Push projects refer to taking DMI assets, cleaning up the master, extracting copy for Amazon tweaking, and rolling out to countries. Runs through Mastering, Global Rollout, and Opera Upload."
|
|
},
|
|
{
|
|
"id": "global_push_pdp",
|
|
"label": "Global Push - PDP",
|
|
"projectType": "Global Push - PDP",
|
|
"description": "Global Push PDP projects for product detail page content rollout to markets."
|
|
},
|
|
{
|
|
"id": "local_push_eventing",
|
|
"label": "Local Push - Eventing",
|
|
"projectType": "Local Push - Eventing",
|
|
"description": "Local Push projects from the moment a local market accepts the Global Push campaign and submits a Brief. Goes through Translation, Production, Opera Upload, and Syndication."
|
|
},
|
|
{
|
|
"id": "local_push_pdp",
|
|
"label": "Local Push - PDP",
|
|
"projectType": "Local Push - PDP",
|
|
"description": "Local Push PDP projects for localised product detail page content."
|
|
},
|
|
{
|
|
"id": "urgent_brief",
|
|
"label": "Urgent Brief",
|
|
"projectType": "Urgent Brief",
|
|
"description": "24hr/48hr turnaround job for Simple Adaptation - Eventing Pull request only, up to 10 simple visual adaptations with changes to existing assets."
|
|
}
|
|
],
|
|
|
|
"stages": [
|
|
{ "id": "stage1", "number": 1, "label": "Missing DMI Asset Creation", "shortLabel": "DMI Asset Creation" },
|
|
{ "id": "stage2", "number": 2, "label": "Mastering, Copy Creation / Extraction", "shortLabel": "Mastering / Copy" },
|
|
{ "id": "stage3", "number": 3, "label": "Global Rollout Invitation", "shortLabel": "Global Rollout" },
|
|
{ "id": "stage4", "number": 4, "label": "Translation (Salsify PDP)", "shortLabel": "Translation (PDP)" },
|
|
{ "id": "stage5", "number": 5, "label": "Translation (Asset)", "shortLabel": "Translation (Asset)" },
|
|
{ "id": "stage6", "number": 6, "label": "Production", "shortLabel": "Production" },
|
|
{ "id": "stage7", "number": 7, "label": "Opera Upload", "shortLabel": "Opera Upload" },
|
|
{ "id": "stage8", "number": 8, "label": "Syndication", "shortLabel": "Syndication" }
|
|
],
|
|
|
|
"stageMatrix": {
|
|
"country_pull_adaptation": [false, true, false, true, true, true, true, false],
|
|
"country_pull_creation": [false, true, false, true, true, true, true, false],
|
|
"country_pull_simple": [false, false, false, true, true, true, true, false],
|
|
"country_retailer_request": [false, false, false, false, false, false, false, true],
|
|
"global_push_eventing": [false, true, true, false, false, false, true, false],
|
|
"global_push_pdp": [false, true, true, false, false, false, true, false],
|
|
"local_push_eventing": [false, false, false, false, true, true, true, true],
|
|
"local_push_pdp": [false, false, false, true, true, true, true, true],
|
|
"urgent_brief": [false, false, false, false, false, true, true, false]
|
|
},
|
|
|
|
"stageConfigs": {
|
|
"stage1": {
|
|
"label": "1. Missing DMI Asset Creation",
|
|
"tooltip": "This stage covers creation of missing DMI assets before they can be mastered.",
|
|
"fields": {
|
|
"complexity": {
|
|
"label": "Complexity",
|
|
"tooltip": "DMI Asset Creation complexity level.",
|
|
"options": [
|
|
{ "value": "creation", "label": "Creation", "days": 6, "definition": "Full creation of missing DMI assets." }
|
|
],
|
|
"default": "creation"
|
|
},
|
|
"revisionRounds": {
|
|
"label": "Rounds of Review",
|
|
"tooltip": "Maximum 2 rounds of review.",
|
|
"min": 0,
|
|
"max": 2,
|
|
"default": 0
|
|
},
|
|
"marketApprovalDays": {
|
|
"label": "Market Approval Days",
|
|
"tooltip": "Recommend 3 days, can be shorter.",
|
|
"min": 0,
|
|
"max": 10,
|
|
"default": 3
|
|
},
|
|
"revisionDays": {
|
|
"label": "Revision Days (per round)",
|
|
"tooltip": "Recommend 2 days per revision round.",
|
|
"min": 0,
|
|
"max": 5,
|
|
"default": 2
|
|
}
|
|
}
|
|
},
|
|
|
|
"stage2": {
|
|
"label": "2. Mastering, Copy Creation / Extraction",
|
|
"tooltip": "This stage covers mastering DMI handover assets and creating/extracting copy.",
|
|
"fields": {
|
|
"masteringComplexity": {
|
|
"label": "Mastering / Copy Extraction Complexity",
|
|
"tooltip": "How complex is it to re-master the DMI handover asset and extract copy.",
|
|
"options": [
|
|
{ "value": "simple", "label": "Simple", "days": 1, "definition": "DMI handover assets are straightforward to re-master and extract copy before automation." },
|
|
{ "value": "mid", "label": "Mid", "days": 2, "definition": "DMI handover assets require manual recreation of the master, extract copy, and format changes (sometimes Figma files)." },
|
|
{ "value": "not_required", "label": "Not Required", "days": 0, "definition": "This step is not required." }
|
|
],
|
|
"default": "not_required"
|
|
},
|
|
"copyComplexity": {
|
|
"label": "Copy Creation / Adaptation Complexity",
|
|
"tooltip": "Complexity of the copy work required for this project.",
|
|
"options": [
|
|
{ "value": "adaptation_simple", "label": "Copy Adaptation Simple", "days": 0.5, "definition": "Simple adjustments to existing text, modifying slightly to fit different formats or audiences. Up to 200 words. Example: Taking PDP copy and adapting it to fit banner headlines." },
|
|
{ "value": "creation_medium", "label": "Copy Creation Medium", "days": 1, "definition": "Generating straightforward original text, such as brief product descriptions or basic promotional materials. Up to 500 words. Example: Writing PDP copy." },
|
|
{ "value": "creation_complex", "label": "Copy Creation Complex", "days": 1.5, "definition": "Crafting original content requiring moderate research and creativity, developing text for specific themes, incorporating brand guidelines. Up to 1,000 words. Example: Writing a bespoke newsletter from scratch." },
|
|
{ "value": "not_required", "label": "Not Required", "days": 0, "definition": "This step is not required." }
|
|
],
|
|
"default": "not_required"
|
|
},
|
|
"bcmApproval": {
|
|
"label": "Does Copy need to be Approved by BCM?",
|
|
"tooltip": "If the copy requires to be tweaked for Amazon, it needs to be approved by BCM. Otherwise, select No.",
|
|
"options": [
|
|
{ "value": "yes", "label": "Yes" },
|
|
{ "value": "no", "label": "No" }
|
|
],
|
|
"default": "yes"
|
|
}
|
|
}
|
|
},
|
|
|
|
"stage3": {
|
|
"label": "3. Global Rollout Invitation",
|
|
"tooltip": "This stage covers the global rollout invitation to markets for campaign acceptance/rejection.",
|
|
"fields": {
|
|
"rolloutDays": {
|
|
"label": "Rollout Days",
|
|
"tooltip": "Number of days for the global rollout invitation process.",
|
|
"min": 1,
|
|
"max": 10,
|
|
"default": 3
|
|
}
|
|
}
|
|
},
|
|
|
|
"stage4_5": {
|
|
"label": "4 & 5. Translation (Salsify PDP & Asset)",
|
|
"tooltip": "Salsify and Asset translation are normally kicked off at the same time. Most translation projects are within 2,000 words.",
|
|
"note": "Stages 4 and 5 run in parallel - enter details once for both.",
|
|
"fields": {
|
|
"wordCount": {
|
|
"label": "Estimated Translation Word Count",
|
|
"tooltip": "Most translation projects are within 2,000 words. Check with TM if you are not certain.",
|
|
"options": [
|
|
{ "value": "0_2000", "label": "0 - 2,000 words", "days": 3 },
|
|
{ "value": "2000_3500", "label": "2,000 - 3,500 words", "days": 4 },
|
|
{ "value": "3500_5000", "label": "3,500 - 5,000 words", "days": 5 },
|
|
{ "value": "not_required", "label": "Not Required", "days": 0 }
|
|
],
|
|
"default": "0_2000"
|
|
},
|
|
"revisionRounds": {
|
|
"label": "Estimated Rounds of Translation",
|
|
"tooltip": "Based on experience, it takes 1-2 rounds for copy review.",
|
|
"min": 0,
|
|
"max": 4,
|
|
"default": 1
|
|
},
|
|
"marketApprovalDays": {
|
|
"label": "Translation Market Approval Days",
|
|
"tooltip": "Based on experience, it takes around 5 working days for Market to provide feedback.",
|
|
"min": 0,
|
|
"max": 15,
|
|
"default": 5
|
|
},
|
|
"revisionDays": {
|
|
"label": "Translation Revision Days (per round)",
|
|
"tooltip": "Based on experience, it takes 2 days for revision.",
|
|
"min": 0,
|
|
"max": 5,
|
|
"default": 1
|
|
}
|
|
}
|
|
},
|
|
|
|
"stage6": {
|
|
"label": "6. Production",
|
|
"tooltip": "Production complexity and volume determine the WIP days. PM can apply a speed-up percentage to reduce timeline.",
|
|
"fields": {
|
|
"complexity": {
|
|
"label": "Asset Complexity",
|
|
"tooltip": "This can be defined based on the Brief/Project Type, or updated by the PM based on actual complexity.",
|
|
"options": [
|
|
{ "value": "simple", "label": "Simple", "definition": "Low-complexity assets require light manual adaptation only: resizing/recropping with no need to reposition or redesign. The layout remains intact." },
|
|
{ "value": "complex", "label": "Complex", "definition": "Medium complexity: layout exists but several elements need manual placement, adjustment or resizing. Partial reshaping required." },
|
|
{ "value": "creation", "label": "Creation", "definition": "High-complexity: creating from scratch, adapting with new full layout, multiple elements redesigned manually." },
|
|
{ "value": "bespoke", "label": "Bespoke", "definition": "Anything outside standard levels: video creation from scratch, re-editing video with new elements/animations, new audio. Must be costed and signed off in advance." }
|
|
],
|
|
"default": "simple"
|
|
},
|
|
"assetVolume": {
|
|
"label": "Estimated Number of Assets",
|
|
"tooltip": "PM to give a rough estimate of no. of Assets to evaluate the timeline. Asset count is key for Production and Opera Upload timelines.",
|
|
"options": [
|
|
{ "value": "0_30", "label": "0 - 30 Assets", "impactPercent": 0 },
|
|
{ "value": "30_50", "label": "30 - 50 Assets", "impactPercent": 75 },
|
|
{ "value": "50_100", "label": "50 - 100 Assets", "impactPercent": 150 }
|
|
],
|
|
"default": "0_30"
|
|
},
|
|
"crossReferenceTable": {
|
|
"_comment": "Production days by complexity x asset volume. Key format: complexity_assetVolume",
|
|
"simple_0_30": 4,
|
|
"simple_30_50": 7,
|
|
"simple_50_100": 10,
|
|
"complex_0_30": 5,
|
|
"complex_30_50": 9,
|
|
"complex_50_100": 13,
|
|
"creation_0_30": 6,
|
|
"creation_30_50": 11,
|
|
"creation_50_100": 15,
|
|
"bespoke_0_30": 10,
|
|
"bespoke_30_50": 18,
|
|
"bespoke_50_100": 25
|
|
},
|
|
"defaultRevisionRounds": {
|
|
"_comment": "Suggested revision rounds by complexity level",
|
|
"simple": 1,
|
|
"complex": 2,
|
|
"creation": 4,
|
|
"bespoke": 0
|
|
},
|
|
"revisionRounds": {
|
|
"label": "Estimated Rounds of Production Revision",
|
|
"tooltip": "PM can evaluate revision rounds based on complexity: Simple=1, Complex=2, Creation=4. If the project has a tight deadline, manage client expectations to reduce rounds.",
|
|
"min": 0,
|
|
"max": 6,
|
|
"default": 0
|
|
},
|
|
"marketApprovalDays": {
|
|
"label": "Production Market Approval Days",
|
|
"tooltip": "Based on experience, it takes around 2-3 working days for Market to provide feedback.",
|
|
"min": 0,
|
|
"max": 10,
|
|
"default": 3
|
|
},
|
|
"revisionDays": {
|
|
"label": "Production Revision Days (per round)",
|
|
"tooltip": "Based on experience, it takes 2 days per revision round.",
|
|
"min": 0,
|
|
"max": 5,
|
|
"default": 2
|
|
},
|
|
"speedUpPercent": {
|
|
"label": "Speed Up by %",
|
|
"tooltip": "PM can adjust manually to speed up production WIP by a percentage. Enter 0 for no speed-up, 50 to halve the days, etc.",
|
|
"min": 0,
|
|
"max": 80,
|
|
"step": 5,
|
|
"default": 0
|
|
}
|
|
}
|
|
},
|
|
|
|
"stage7": {
|
|
"label": "7. Opera Upload",
|
|
"tooltip": "Opera Upload days depend on the number of assets. This stage uses the same asset volume selected in Production.",
|
|
"daysByAssetVolume": {
|
|
"0_30": 1,
|
|
"30_50": 1,
|
|
"50_100": 2
|
|
},
|
|
"defaultDays": 1
|
|
},
|
|
|
|
"stage8": {
|
|
"label": "8. Syndication",
|
|
"tooltip": "Syndication complexity and EAN count determine the timeline. Complex syndication (Brand Store) can take 2-4 weeks.",
|
|
"fields": {
|
|
"eanVolume": {
|
|
"label": "Estimated Number of EANs",
|
|
"tooltip": "Number of EANs impacts the Syndication task timeline the most.",
|
|
"options": [
|
|
{ "value": "1_5", "label": "1 - 5 EANs", "impactPercent": 0 },
|
|
{ "value": "5_10", "label": "5 - 10 EANs", "impactPercent": 50 },
|
|
{ "value": "10_15", "label": "10 - 15 EANs", "impactPercent": 100 }
|
|
],
|
|
"default": "1_5"
|
|
},
|
|
"complexity": {
|
|
"label": "Syndication Complexity",
|
|
"tooltip": "Complexity of the syndication work required.",
|
|
"options": [
|
|
{ "value": "simple", "label": "Simple", "definition": "Salsify Enrichment (adding PDP, Copy) + Standard Syndication (downloading assets, Salsify channel excel, SharePoint, email distribution). Caveat: Assuming all info is available and Salsify channels are set up." },
|
|
{ "value": "mid", "label": "Mid", "definition": "Standard Syndication plus: ASIN creation, BTF content creation/maintenance (e.g., Amazon Comparison Table), Virtual Bundle creation/maintenance (Amazon only)." },
|
|
{ "value": "complex", "label": "Complex", "definition": "Bespoke tasks for Amazon: Brand Store Creation or Brand Store Maintenance. Takes 2-4 weeks." }
|
|
],
|
|
"default": "simple"
|
|
},
|
|
"crossReferenceTable": {
|
|
"_comment": "Syndication days by complexity x EAN volume. Key format: complexity_eanVolume",
|
|
"simple_1_5": 4,
|
|
"simple_5_10": 6,
|
|
"simple_10_15": 8,
|
|
"mid_1_5": 6,
|
|
"mid_5_10": 9,
|
|
"mid_10_15": 12,
|
|
"complex_1_5": 10,
|
|
"complex_5_10": 15,
|
|
"complex_10_15": 20
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
"verdictMessages": {
|
|
"canMeet": "CAN meet the required deadline",
|
|
"cannotMeet": "CANNOT meet the required deadline"
|
|
},
|
|
|
|
"pmInstructions": {
|
|
"canMeet": "The project can meet the Go Live Date based on SLA calculator. The Brief can be accepted and kicked off as per planned Start Date.",
|
|
"cannotMeet": "The project cannot meet the Go Live Date. PM can try to adjust Rounds of Revision and Market Approval Days. Please ensure the client understands the required turnaround. If it still doesn't meet the deadline, negotiate with the client for a new deadline."
|
|
}
|
|
}
|