Merge pull request #19 from ualsweb/claude/add-spanish-help-docs-01J4jvidytcBpS29tg9iiSgF
Claude/add spanish help docs 01 j4jvidytc bp s29tg9ii sg f
This commit is contained in:
38
frontend/package-lock.json
generated
38
frontend/package-lock.json
generated
@@ -138,7 +138,6 @@
|
||||
"integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/generator": "^7.28.3",
|
||||
@@ -2268,6 +2267,7 @@
|
||||
"resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz",
|
||||
"integrity": "sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@formatjs/fast-memoize": "2.2.7",
|
||||
"@formatjs/intl-localematcher": "0.6.2",
|
||||
@@ -2280,6 +2280,7 @@
|
||||
"resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz",
|
||||
"integrity": "sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"tslib": "^2.8.0"
|
||||
}
|
||||
@@ -2289,6 +2290,7 @@
|
||||
"resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.4.tgz",
|
||||
"integrity": "sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@formatjs/ecma402-abstract": "2.3.6",
|
||||
"@formatjs/icu-skeleton-parser": "1.8.16",
|
||||
@@ -2300,6 +2302,7 @@
|
||||
"resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.16.tgz",
|
||||
"integrity": "sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@formatjs/ecma402-abstract": "2.3.6",
|
||||
"tslib": "^2.8.0"
|
||||
@@ -2310,6 +2313,7 @@
|
||||
"resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz",
|
||||
"integrity": "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"tslib": "^2.8.0"
|
||||
}
|
||||
@@ -2738,7 +2742,6 @@
|
||||
"deprecated": "Glob versions prior to v9 are no longer supported",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"fs.realpath": "^1.0.0",
|
||||
"inflight": "^1.0.4",
|
||||
@@ -6041,7 +6044,6 @@
|
||||
"resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-3.5.0.tgz",
|
||||
"integrity": "sha512-pKS3wZnJoL1iTyGBXAvCwduNNeghJHY6QSRSNNvpYnrrQrLZ6Owsazjyynu0e0ObRgks0i7Rv+pe2M7/MBTZpQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=12.16"
|
||||
}
|
||||
@@ -6131,7 +6133,6 @@
|
||||
"resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.89.0.tgz",
|
||||
"integrity": "sha512-SXbtWSTSRXyBOe80mszPxpEbaN4XPRUp/i0EfQK1uyj3KCk/c8FuPJNIRwzOVe/OU3rzxrYtiNabsAmk1l714A==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@tanstack/query-core": "5.89.0"
|
||||
},
|
||||
@@ -6624,7 +6625,6 @@
|
||||
"integrity": "sha512-0dLEBsA1kI3OezMBF8nSsb7Nk19ZnsyE1LLhB8r27KbgU5H4pvuqZLdtE+aUkJVoXgTVuA+iLIwmZ0TuK4tx6A==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@types/prop-types": "*",
|
||||
"csstype": "^3.0.2"
|
||||
@@ -6636,7 +6636,6 @@
|
||||
"integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"peerDependencies": {
|
||||
"@types/react": "^18.0.0"
|
||||
}
|
||||
@@ -6778,7 +6777,6 @@
|
||||
"integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@typescript-eslint/scope-manager": "6.21.0",
|
||||
"@typescript-eslint/types": "6.21.0",
|
||||
@@ -7117,7 +7115,6 @@
|
||||
"integrity": "sha512-xa57bCPGuzEFqGjPs3vVLyqareG8DX0uMkr5U/v5vLv5/ZUrBrPL7gzxzTJedEyZxFMfsozwTIbbYfEQVo3kgg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@vitest/utils": "1.6.1",
|
||||
"fast-glob": "^3.3.2",
|
||||
@@ -7215,7 +7212,6 @@
|
||||
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
},
|
||||
@@ -7758,7 +7754,6 @@
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"baseline-browser-mapping": "^2.8.3",
|
||||
"caniuse-lite": "^1.0.30001741",
|
||||
@@ -7964,7 +7959,6 @@
|
||||
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.0.tgz",
|
||||
"integrity": "sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@kurkle/color": "^0.3.0"
|
||||
},
|
||||
@@ -8329,8 +8323,7 @@
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
|
||||
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/d3-array": {
|
||||
"version": "3.2.4",
|
||||
@@ -8512,7 +8505,6 @@
|
||||
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
|
||||
"integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.21.0"
|
||||
},
|
||||
@@ -8555,7 +8547,8 @@
|
||||
"version": "10.6.0",
|
||||
"resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
|
||||
"integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
|
||||
"license": "MIT"
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/decimal.js-light": {
|
||||
"version": "2.5.1",
|
||||
@@ -9039,7 +9032,6 @@
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"esbuild": "bin/esbuild"
|
||||
},
|
||||
@@ -9143,7 +9135,6 @@
|
||||
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.2.0",
|
||||
"@eslint-community/regexpp": "^4.6.1",
|
||||
@@ -10569,7 +10560,6 @@
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.23.2"
|
||||
}
|
||||
@@ -10618,7 +10608,6 @@
|
||||
"resolved": "https://registry.npmjs.org/immer/-/immer-10.1.3.tgz",
|
||||
"integrity": "sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/immer"
|
||||
@@ -12777,7 +12766,6 @@
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"nanoid": "^3.3.11",
|
||||
"picocolors": "^1.1.1",
|
||||
@@ -12944,7 +12932,6 @@
|
||||
"integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"prettier": "bin/prettier.cjs"
|
||||
},
|
||||
@@ -13217,7 +13204,6 @@
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
|
||||
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"loose-envify": "^1.1.0"
|
||||
},
|
||||
@@ -13290,7 +13276,6 @@
|
||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
|
||||
"integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"loose-envify": "^1.1.0",
|
||||
"scheduler": "^0.23.2"
|
||||
@@ -13344,7 +13329,6 @@
|
||||
"resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.63.0.tgz",
|
||||
"integrity": "sha512-ZwueDMvUeucovM2VjkCf7zIHcs1aAlDimZu2Hvel5C5907gUzMpm4xCrQXtRzCvsBqFjonB4m3x4LzCFI1ZKWA==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
},
|
||||
@@ -13936,7 +13920,6 @@
|
||||
"integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"rollup": "dist/bin/rollup"
|
||||
},
|
||||
@@ -14819,7 +14802,6 @@
|
||||
"integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@alloc/quick-lru": "^5.2.0",
|
||||
"arg": "^5.0.2",
|
||||
@@ -15351,7 +15333,6 @@
|
||||
"integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
@@ -15764,7 +15745,6 @@
|
||||
"integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"esbuild": "^0.21.3",
|
||||
"postcss": "^8.4.43",
|
||||
@@ -16328,7 +16308,6 @@
|
||||
"integrity": "sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@vitest/expect": "1.6.1",
|
||||
"@vitest/runner": "1.6.1",
|
||||
@@ -16710,7 +16689,6 @@
|
||||
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"fast-uri": "^3.0.1",
|
||||
|
||||
6
frontend/src/lib/utils.ts
Normal file
6
frontend/src/lib/utils.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import { type ClassValue, clsx } from 'clsx';
|
||||
import { twMerge } from 'tailwind-merge';
|
||||
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
return twMerge(clsx(inputs));
|
||||
}
|
||||
212
frontend/src/locales/en/help.json
Normal file
212
frontend/src/locales/en/help.json
Normal file
@@ -0,0 +1,212 @@
|
||||
{
|
||||
"helpCenter": {
|
||||
"title": "How Can We Help You Today?",
|
||||
"subtitle": "Help Center",
|
||||
"searchPlaceholder": "Search help... (eg: how do I import data?)",
|
||||
"description": "Find quick answers, complete guides and direct contact with our team",
|
||||
"categoriesTitle": "Browse by Category",
|
||||
"categoriesSubtitle": "Find what you need faster",
|
||||
"faqTitle": "Frequently Asked Questions",
|
||||
"faqResultsCount_one": "{{count}} answer",
|
||||
"faqResultsCount_other": "{{count}} answers",
|
||||
"faqFound": "found",
|
||||
"noResultsTitle": "No results found for",
|
||||
"noResultsAction": "Contact support",
|
||||
"contactTitle": "Can't Find What You're Looking For?",
|
||||
"contactSubtitle": "Our team is here to help you",
|
||||
"contactHours": "Support Hours"
|
||||
},
|
||||
"docs": {
|
||||
"title": "Complete Guides to Master Bakery AI",
|
||||
"subtitle": "Documentation",
|
||||
"description": "Step-by-step tutorials, best practices and tricks to get the most out of the platform",
|
||||
"getStarted": "Get Started",
|
||||
"backToHelp": "Help Center",
|
||||
"sectionsTitle": "Sections",
|
||||
"videoTutorialsTitle": "Video Tutorials",
|
||||
"videoTutorialsSubtitle": "Learn by watching (coming soon)",
|
||||
"additionalResourcesTitle": "Additional Resources",
|
||||
"ctaTitle": "Ready to Get Started?",
|
||||
"ctaSubtitle": "Sign up for the pilot program and get 3 months free",
|
||||
"ctaButton": "Create Free Account",
|
||||
"articlesCount": "articles",
|
||||
"readTime": "min",
|
||||
"quickLinks": "Quick Links",
|
||||
"downloadPdf": "Download PDF",
|
||||
"contactSupport": "Contact Support",
|
||||
"glossary": "Glossary of Terms",
|
||||
"troubleshooting": "Troubleshooting",
|
||||
"bestPractices": "Best Practices"
|
||||
},
|
||||
"difficulty": {
|
||||
"beginner": "Beginner",
|
||||
"intermediate": "Intermediate",
|
||||
"advanced": "Advanced"
|
||||
},
|
||||
"categories": {
|
||||
"gettingStarted": {
|
||||
"title": "Getting Started",
|
||||
"description": "Set up your account and learn the basics"
|
||||
},
|
||||
"features": {
|
||||
"title": "Features",
|
||||
"description": "Complete guides on all features"
|
||||
},
|
||||
"analytics": {
|
||||
"title": "Analytics and Insights",
|
||||
"description": "Interpret data and AI insights"
|
||||
},
|
||||
"account": {
|
||||
"title": "Account Management",
|
||||
"description": "Manage your profile, team and settings"
|
||||
},
|
||||
"billing": {
|
||||
"title": "Billing and Plans",
|
||||
"description": "Information about pricing, payments and subscriptions"
|
||||
},
|
||||
"privacy": {
|
||||
"title": "Privacy and Security",
|
||||
"description": "GDPR, data security and compliance"
|
||||
}
|
||||
},
|
||||
"articles": {
|
||||
"gettingStarted": {
|
||||
"quickStart": {
|
||||
"title": "Quick Start Guide",
|
||||
"description": "Set up your Bakery AI account in just 10 minutes and start reducing waste",
|
||||
"readTime": "5"
|
||||
},
|
||||
"importData": {
|
||||
"title": "Import Historical Sales Data",
|
||||
"description": "Learn how to upload your sales history from Excel, CSV or your POS system",
|
||||
"readTime": "8"
|
||||
},
|
||||
"productsCatalog": {
|
||||
"title": "Configure Product Catalog",
|
||||
"description": "Create your catalog of products, recipes and ingredients for complete inventory management",
|
||||
"readTime": "6"
|
||||
},
|
||||
"firstPrediction": {
|
||||
"title": "Your First Demand Prediction",
|
||||
"description": "Understand how the system interprets and how to adjust predictions based on your experience",
|
||||
"readTime": "10"
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"demandForecasting": {
|
||||
"title": "AI Demand Forecasting",
|
||||
"description": "How the Prophet algorithm works and how to optimize prediction accuracy",
|
||||
"readTime": "12"
|
||||
},
|
||||
"productionPlanning": {
|
||||
"title": "Automated Production Planning",
|
||||
"description": "Optimize your daily baking with production plans automatically generated from forecasts",
|
||||
"readTime": "10"
|
||||
},
|
||||
"inventoryManagement": {
|
||||
"title": "Inventory Management and Stock Control",
|
||||
"description": "Complete control of ingredients with FIFO, low stock alerts and waste reduction",
|
||||
"readTime": "9"
|
||||
},
|
||||
"posIntegration": {
|
||||
"title": "Point of Sale (POS) and Sales Recording",
|
||||
"description": "Record sales manually or sync with your existing POS for more accurate predictions",
|
||||
"readTime": "8"
|
||||
},
|
||||
"wasteTracking": {
|
||||
"title": "Waste Tracking and Sustainability",
|
||||
"description": "Measure, analyze and reduce food waste to achieve zero waste goals",
|
||||
"readTime": "7"
|
||||
}
|
||||
},
|
||||
"analytics": {
|
||||
"dashboardOverview": {
|
||||
"title": "Dashboard and Main KPIs",
|
||||
"description": "Understand all key business metrics at a glance on the main dashboard",
|
||||
"readTime": "8"
|
||||
},
|
||||
"reports": {
|
||||
"title": "Custom Reports",
|
||||
"description": "Generate detailed reports on sales, production, costs and inventory exportable to Excel/PDF",
|
||||
"readTime": "10"
|
||||
},
|
||||
"aiInsights": {
|
||||
"title": "AI Insights and Automatic Recommendations",
|
||||
"description": "The system analyzes your data and gives you actionable recommendations to improve profitability",
|
||||
"readTime": "12"
|
||||
},
|
||||
"performanceMetrics": {
|
||||
"title": "Performance Metrics and Business KPIs",
|
||||
"description": "Key performance indicators to measure business health and make strategic decisions",
|
||||
"readTime": "15"
|
||||
}
|
||||
}
|
||||
},
|
||||
"faqs": [
|
||||
{
|
||||
"category": "general",
|
||||
"question": "What is Bakery AI and how does it work?",
|
||||
"answer": "Bakery AI is an intelligent management platform for bakeries. It uses artificial intelligence to predict demand for your products, optimize production, reduce waste and increase profitability."
|
||||
},
|
||||
{
|
||||
"category": "general",
|
||||
"question": "How long does it take to set up the system?",
|
||||
"answer": "Initial setup takes 10-15 minutes. You need to: 1) Create your account, 2) Upload your product catalog, 3) Import sales history (optional but recommended), 4) Configure basic preferences."
|
||||
},
|
||||
{
|
||||
"category": "pricing",
|
||||
"question": "How much does the pilot program cost?",
|
||||
"answer": "The pilot program is FREE for the first 3 months. After that, you pay only €49/month with a lifetime 20% discount (regular price: €79/month). No commitment contracts, cancel anytime."
|
||||
},
|
||||
{
|
||||
"category": "technical",
|
||||
"question": "How do I import my historical sales data?",
|
||||
"answer": "We accept various formats: Excel (.xlsx), CSV, or direct exports from your POS if compatible. The more history you provide (we recommend minimum 3 months), the more accurate the predictions."
|
||||
},
|
||||
{
|
||||
"category": "privacy",
|
||||
"question": "Where is my data stored?",
|
||||
"answer": "ALL your data is stored on servers physically located in Spain (Barcelona and Madrid), 100% GDPR compliant. We never share, sell or transfer your data outside the EU."
|
||||
}
|
||||
],
|
||||
"contact": {
|
||||
"liveChat": {
|
||||
"title": "Live Chat",
|
||||
"description": "Immediate response from 9:00 to 21:00",
|
||||
"action": "Start Chat"
|
||||
},
|
||||
"email": {
|
||||
"title": "Email",
|
||||
"description": "Response in less than 4 hours",
|
||||
"action": "Send Email",
|
||||
"address": "soporte@panaderia-ia.com"
|
||||
},
|
||||
"documentation": {
|
||||
"title": "Documentation",
|
||||
"description": "Complete guides and tutorials",
|
||||
"action": "View Docs"
|
||||
},
|
||||
"hours": {
|
||||
"liveChat": "Monday to Friday 9:00 - 21:00, Saturdays 10:00 - 18:00",
|
||||
"email": "24/7 (response within 4 hours during business hours)",
|
||||
"phone": "Monday to Friday 10:00 - 19:00 (active customers only)"
|
||||
}
|
||||
},
|
||||
"resources": {
|
||||
"glossary": {
|
||||
"title": "Glossary of Terms",
|
||||
"description": "Definitions of key concepts and technical terminology",
|
||||
"action": "View Glossary"
|
||||
},
|
||||
"troubleshooting": {
|
||||
"title": "Troubleshooting",
|
||||
"description": "Common errors and how to solve them quickly",
|
||||
"action": "View Solutions"
|
||||
},
|
||||
"bestPractices": {
|
||||
"title": "Best Practices",
|
||||
"description": "Expert tips and advice to optimize your use",
|
||||
"action": "Read Tips"
|
||||
}
|
||||
}
|
||||
}
|
||||
843
frontend/src/locales/es/help.json
Normal file
843
frontend/src/locales/es/help.json
Normal file
@@ -0,0 +1,843 @@
|
||||
{
|
||||
"helpCenter": {
|
||||
"title": "¿Cómo Podemos Ayudarte Hoy?",
|
||||
"subtitle": "Centro de Ayuda",
|
||||
"searchPlaceholder": "Buscar en la ayuda... (ej: ¿cómo importo datos?)",
|
||||
"description": "Encuentra respuestas rápidas, guías completas y contacto directo con nuestro equipo",
|
||||
"categoriesTitle": "Explora por Categoría",
|
||||
"categoriesSubtitle": "Encuentra lo que necesitas más rápido",
|
||||
"faqTitle": "Preguntas Frecuentes",
|
||||
"faqResultsCount_one": "{{count}} respuesta",
|
||||
"faqResultsCount_other": "{{count}} respuestas",
|
||||
"faqFound": "encontradas",
|
||||
"noResultsTitle": "No encontramos resultados para",
|
||||
"noResultsAction": "Contacta con soporte",
|
||||
"contactTitle": "¿No Encuentras lo Que Buscas?",
|
||||
"contactSubtitle": "Nuestro equipo está aquí para ayudarte",
|
||||
"contactHours": "Horario de Atención"
|
||||
},
|
||||
"docs": {
|
||||
"title": "Guías Completas Para Dominar Panadería IA",
|
||||
"subtitle": "Documentación",
|
||||
"description": "Tutoriales paso a paso, mejores prácticas y trucos para aprovechar al máximo la plataforma",
|
||||
"getStarted": "Comenzar",
|
||||
"backToHelp": "Centro de Ayuda",
|
||||
"sectionsTitle": "Secciones",
|
||||
"videoTutorialsTitle": "Tutoriales en Vídeo",
|
||||
"videoTutorialsSubtitle": "Aprende viendo (próximamente)",
|
||||
"additionalResourcesTitle": "Recursos Adicionales",
|
||||
"ctaTitle": "¿Listo Para Empezar?",
|
||||
"ctaSubtitle": "Regístrate en el programa piloto y obtén 3 meses gratis",
|
||||
"ctaButton": "Crear Cuenta Gratis",
|
||||
"articlesCount": "artículos",
|
||||
"readTime": "min",
|
||||
"quickLinks": "Enlaces Rápidos",
|
||||
"downloadPdf": "Descargar PDF",
|
||||
"contactSupport": "Contactar Soporte",
|
||||
"glossary": "Glosario de Términos",
|
||||
"troubleshooting": "Solución de Problemas",
|
||||
"bestPractices": "Mejores Prácticas"
|
||||
},
|
||||
"difficulty": {
|
||||
"beginner": "Principiante",
|
||||
"intermediate": "Intermedio",
|
||||
"advanced": "Avanzado"
|
||||
},
|
||||
"categories": {
|
||||
"gettingStarted": {
|
||||
"title": "Primeros Pasos",
|
||||
"description": "Configura tu cuenta y aprende los conceptos básicos"
|
||||
},
|
||||
"features": {
|
||||
"title": "Funcionalidades",
|
||||
"description": "Guías completas sobre todas las características"
|
||||
},
|
||||
"analytics": {
|
||||
"title": "Análisis y Predicciones",
|
||||
"description": "Interpreta datos e insights de IA"
|
||||
},
|
||||
"account": {
|
||||
"title": "Gestión de Cuenta",
|
||||
"description": "Administra tu perfil, equipo y configuración"
|
||||
},
|
||||
"billing": {
|
||||
"title": "Facturación y Planes",
|
||||
"description": "Información sobre precios, pagos y suscripciones"
|
||||
},
|
||||
"privacy": {
|
||||
"title": "Privacidad y Seguridad",
|
||||
"description": "RGPD, seguridad de datos y cumplimiento"
|
||||
}
|
||||
},
|
||||
"articles": {
|
||||
"gettingStarted": {
|
||||
"quickStart": {
|
||||
"title": "Guía de Inicio Rápido",
|
||||
"description": "Configura tu cuenta de Panadería IA en solo 10 minutos y empieza a reducir desperdicios",
|
||||
"readTime": "5",
|
||||
"content": {
|
||||
"intro": "Bienvenido a Panadería IA. Esta guía te ayudará a configurar tu cuenta en 10 minutos para empezar a optimizar tu producción desde el primer día.",
|
||||
"steps": [
|
||||
{
|
||||
"title": "1. Crea tu Cuenta",
|
||||
"description": "Regístrate con tu email y contraseña. Te pediremos información básica de tu panadería: nombre, dirección, número de empleados."
|
||||
},
|
||||
{
|
||||
"title": "2. Configura tu Perfil de Panadería",
|
||||
"description": "Indica el tipo de panadería: artesanal, industrial, obrador central con puntos de venta. Esto ayuda al sistema a personalizar las recomendaciones."
|
||||
},
|
||||
{
|
||||
"title": "3. Añade tus Productos",
|
||||
"description": "Crea tu catálogo: pan, bollería, pasteles. Para cada producto indica nombre, precio de venta y categoría."
|
||||
},
|
||||
{
|
||||
"title": "4. Importa Historial de Ventas (Opcional)",
|
||||
"description": "Cuantos más datos históricos proporciones, más precisas serán las predicciones. Acepta Excel, CSV o importación desde tu TPV."
|
||||
},
|
||||
{
|
||||
"title": "5. Primera Predicción",
|
||||
"description": "El sistema generará automáticamente tu primera predicción de demanda para los próximos 7 días basándose en patrones similares."
|
||||
}
|
||||
],
|
||||
"tips": [
|
||||
"Empieza con 5-10 productos principales, no necesitas todo el catálogo el primer día",
|
||||
"Si tienes historial de ventas de los últimos 3-6 meses, súbelo para predicciones más precisas",
|
||||
"El sistema mejora con el tiempo: las primeras semanas tendrá 15-20% de margen de error, después del primer mes baja a ~10%"
|
||||
]
|
||||
}
|
||||
},
|
||||
"importData": {
|
||||
"title": "Importar Datos Históricos de Ventas",
|
||||
"description": "Aprende a subir tu historial de ventas desde Excel, CSV o tu sistema TPV para mejorar la precisión",
|
||||
"readTime": "8",
|
||||
"content": {
|
||||
"intro": "Cuantos más datos históricos proporciones, más precisas serán las predicciones de demanda. Te recomendamos mínimo 3 meses de historial.",
|
||||
"formats": [
|
||||
{
|
||||
"name": "Excel (.xlsx)",
|
||||
"description": "Formato más común. Necesitas columnas: Fecha, Producto, Cantidad Vendida, Precio (opcional)"
|
||||
},
|
||||
{
|
||||
"name": "CSV (.csv)",
|
||||
"description": "Exportable desde cualquier TPV. Mismo formato que Excel pero en texto plano"
|
||||
},
|
||||
{
|
||||
"name": "Exportación TPV",
|
||||
"description": "Si tu TPV es compatible, puedes exportar directamente el historial"
|
||||
}
|
||||
],
|
||||
"steps": [
|
||||
{
|
||||
"title": "1. Prepara tu archivo",
|
||||
"description": "Asegúrate de tener: Fecha (formato DD/MM/AAAA), Nombre del Producto, Cantidad Vendida. Precio de venta es opcional."
|
||||
},
|
||||
{
|
||||
"title": "2. Ve a Configuración > Importar Datos",
|
||||
"description": "En el menú principal, busca 'Importar Datos Históricos'"
|
||||
},
|
||||
{
|
||||
"title": "3. Selecciona el archivo",
|
||||
"description": "Arrastra y suelta tu archivo Excel/CSV o haz clic para seleccionarlo"
|
||||
},
|
||||
{
|
||||
"title": "4. Mapea las columnas",
|
||||
"description": "El sistema detecta automáticamente las columnas, verifica que coincidan correctamente"
|
||||
},
|
||||
{
|
||||
"title": "5. Confirma e importa",
|
||||
"description": "Revisa el resumen y confirma. El sistema procesará los datos en segundo plano"
|
||||
}
|
||||
],
|
||||
"commonIssues": [
|
||||
{
|
||||
"issue": "Error: Formato de fecha inválido",
|
||||
"solution": "Usa formato DD/MM/AAAA (ejemplo: 15/03/2025)"
|
||||
},
|
||||
{
|
||||
"issue": "Productos no reconocidos",
|
||||
"solution": "Asegúrate de que los nombres coincidan exactamente con los productos creados en tu catálogo"
|
||||
},
|
||||
{
|
||||
"issue": "Importación lenta",
|
||||
"solution": "Archivos grandes (>100.000 filas) pueden tardar 5-10 minutos. Recibirás un email cuando termine"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"productsCatalog": {
|
||||
"title": "Configurar Catálogo de Productos",
|
||||
"description": "Crea tu catálogo de productos, recetas e ingredientes para gestión completa de inventario",
|
||||
"readTime": "6",
|
||||
"content": {
|
||||
"intro": "El catálogo de productos es el corazón del sistema. Aquí defines qué produces, cómo se hace y cuánto cuesta.",
|
||||
"productLevels": [
|
||||
{
|
||||
"level": "Productos Finales",
|
||||
"description": "Lo que vendes (pan, croissant, tarta). Define nombre, precio, categoría, código de barras (opcional)"
|
||||
},
|
||||
{
|
||||
"level": "Recetas",
|
||||
"description": "Cómo se hace cada producto. Lista de ingredientes con cantidades exactas, pasos de elaboración, tiempo de producción"
|
||||
},
|
||||
{
|
||||
"level": "Ingredientes",
|
||||
"description": "Materias primas (harina, azúcar, mantequilla). Define unidad de medida, proveedor, precio por kilo"
|
||||
}
|
||||
],
|
||||
"steps": [
|
||||
{
|
||||
"title": "1. Añadir Productos",
|
||||
"description": "Ve a Productos > Nuevo Producto. Completa: Nombre, Categoría (pan, bollería, pastelería), Precio de venta, Peso/unidades por pieza"
|
||||
},
|
||||
{
|
||||
"title": "2. Crear Recetas",
|
||||
"description": "Para cada producto, crea su receta. Añade ingredientes con cantidades exactas (ej: Harina 500g, Agua 300ml). Indica tiempo de amasado, fermentación y horneado"
|
||||
},
|
||||
{
|
||||
"title": "3. Gestionar Ingredientes",
|
||||
"description": "Ve a Inventario > Ingredientes. Añade todas tus materias primas con: Nombre, Unidad (kg, L, unidades), Proveedor, Precio por unidad, Stock mínimo (para alertas)"
|
||||
}
|
||||
],
|
||||
"tips": [
|
||||
"Empieza con productos de alta rotación (los que más vendes)",
|
||||
"Las recetas permiten calcular automáticamente cuánto ingrediente necesitas para la producción diaria",
|
||||
"El sistema detecta automáticamente cuándo un ingrediente está por acabarse y sugiere hacer un pedido"
|
||||
]
|
||||
}
|
||||
},
|
||||
"firstPrediction": {
|
||||
"title": "Tu Primera Predicción de Demanda",
|
||||
"description": "Entiende cómo interpreta el sistema y cómo ajustar las predicciones según tu experiencia",
|
||||
"readTime": "10",
|
||||
"content": {
|
||||
"intro": "Las predicciones de demanda son el núcleo de Panadería IA. Usan inteligencia artificial para predecir cuánto venderás de cada producto.",
|
||||
"howItWorks": "El algoritmo analiza: Historial de ventas (últimos 3-12 meses), Día de la semana y estacionalidad, Festivos y eventos especiales, Clima (temperatura, lluvia), Tendencias recientes",
|
||||
"readingPredictions": [
|
||||
{
|
||||
"metric": "Demanda Prevista",
|
||||
"description": "Cuántas unidades predice el sistema que venderás. Ejemplo: '150 baguettes para el Viernes 15/11'"
|
||||
},
|
||||
{
|
||||
"metric": "Rango de Confianza",
|
||||
"description": "El mínimo y máximo esperado. Ejemplo: '130-170 baguettes' (95% de confianza). Útil para planificar conservador o agresivo"
|
||||
},
|
||||
{
|
||||
"metric": "Comparación vs Promedio",
|
||||
"description": "'+15%' significa que se espera 15% más de lo habitual para ese día. Ayuda a detectar picos de demanda"
|
||||
}
|
||||
],
|
||||
"adjustments": "Puedes ajustar manualmente las predicciones si tienes información que el sistema no conoce (ej: evento local, promoción). El sistema aprende de tus ajustes.",
|
||||
"tips": [
|
||||
"Los primeros 7-14 días las predicciones pueden tener 15-20% de error mientras el sistema aprende tus patrones",
|
||||
"Después del primer mes, la precisión típica es 85-90%",
|
||||
"Si una predicción parece muy alta o baja, revisa si hay un festivo o evento que explique el cambio",
|
||||
"Ajusta cuando sepas algo que la IA no sabe (ej: reforma en tu calle, feria local)"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"demandForecasting": {
|
||||
"title": "Predicción de Demanda con IA",
|
||||
"description": "Cómo funciona el algoritmo Prophet y cómo optimizar la precisión de las predicciones",
|
||||
"readTime": "12",
|
||||
"content": {
|
||||
"intro": "La predicción de demanda usa Prophet, un algoritmo de inteligencia artificial desarrollado por Facebook, optimizado para panaderías españolas.",
|
||||
"algorithm": {
|
||||
"title": "Cómo Funciona el Algoritmo",
|
||||
"description": "Prophet analiza patrones en tus datos históricos para hacer predicciones precisas. Identifica: Tendencias a largo plazo (¿estás creciendo o bajando ventas?), Estacionalidad diaria (lunes vs viernes), semanal y anual, Efectos de festivos (Navidad, Semana Santa, Reyes), Impacto del clima (lluvia reduce ventas de ciertos productos)"
|
||||
},
|
||||
"features": [
|
||||
{
|
||||
"name": "Predicciones Multi-Día",
|
||||
"description": "Genera predicciones hasta 30 días en adelante. Útil para planificar compras de ingredientes y vacaciones del personal"
|
||||
},
|
||||
{
|
||||
"name": "Intervalos de Confianza",
|
||||
"description": "Cada predicción incluye mínimo, esperado y máximo (95% de confianza). Si dice '100-150 unidades', hay 95% de probabilidad de vender entre 100-150"
|
||||
},
|
||||
{
|
||||
"name": "Ajuste por Festivos",
|
||||
"description": "El sistema conoce todos los festivos nacionales y locales de Madrid. Ajusta automáticamente para Navidad, Reyes, Semana Santa"
|
||||
},
|
||||
{
|
||||
"name": "Integración con Clima",
|
||||
"description": "Consulta la previsión meteorológica de AEMET (Agencia Española de Meteorología). Los días de lluvia suelen tener -20% ventas de algunos productos"
|
||||
}
|
||||
],
|
||||
"optimization": [
|
||||
{
|
||||
"tip": "Datos Históricos",
|
||||
"description": "Cuantos más meses de historial, mejor. Mínimo 3 meses, ideal 12+ meses"
|
||||
},
|
||||
{
|
||||
"tip": "Actualización Continua",
|
||||
"description": "El sistema valida predicciones vs ventas reales cada noche y re-entrena modelos si la precisión baja"
|
||||
},
|
||||
{
|
||||
"tip": "Ajustes Manuales",
|
||||
"description": "Si conoces un evento local (feria, concierto cerca), ajusta la predicción. El sistema aprende de tus correcciones"
|
||||
}
|
||||
],
|
||||
"metrics": {
|
||||
"title": "Métricas de Precisión",
|
||||
"description": "El sistema mide su propia precisión con MAPE (Error Porcentual Absoluto Medio). Objetivo: MAPE < 20% (80%+ precisión). Dashboard muestra precisión por producto y tendencias"
|
||||
}
|
||||
}
|
||||
},
|
||||
"productionPlanning": {
|
||||
"title": "Planificación de Producción Automatizada",
|
||||
"description": "Optimiza tu horneado diario con planes de producción generados automáticamente desde predicciones",
|
||||
"readTime": "10",
|
||||
"content": {
|
||||
"intro": "La planificación de producción convierte predicciones de demanda en lotes de horneado concretos, optimizando eficiencia y reduciendo desperdicio.",
|
||||
"features": [
|
||||
{
|
||||
"name": "Generación Automática",
|
||||
"description": "Cada noche a las 5:30 AM, el sistema genera el plan de producción del día basándose en la predicción de demanda"
|
||||
},
|
||||
{
|
||||
"name": "Optimización por Lotes",
|
||||
"description": "Calcula el tamaño ideal de lote para cada producto. Si vendes 150 baguettes pero tu bandeja es de 40, sugiere 4 lotes (160 total, 6.6% buffer)"
|
||||
},
|
||||
{
|
||||
"name": "Secuenciación",
|
||||
"description": "Ordena los lotes por prioridad y compatibilidad de horno. Productos con mismo tiempo/temperatura se agrupan para eficiencia"
|
||||
},
|
||||
{
|
||||
"name": "Integración con Recetas",
|
||||
"description": "Calcula automáticamente cuánta harina, mantequilla, etc. necesitas según los lotes planificados"
|
||||
}
|
||||
],
|
||||
"workflow": [
|
||||
{
|
||||
"step": "1. Revisión Matinal",
|
||||
"description": "Cada mañana, revisa el plan de producción sugerido en el dashboard. Ve todos los lotes del día con horarios sugeridos"
|
||||
},
|
||||
{
|
||||
"step": "2. Ajustes (Opcional)",
|
||||
"description": "Si ves que hace buen tiempo o tienes info extra, ajusta cantidades. Los cambios se reflejan automáticamente en ingredientes necesarios"
|
||||
},
|
||||
{
|
||||
"step": "3. Ejecución",
|
||||
"description": "Marca lotes como 'En Progreso' cuando empiezas, 'Completado' cuando terminas. Registra cantidad real producida"
|
||||
},
|
||||
{
|
||||
"step": "4. Control de Calidad",
|
||||
"description": "Opcional: registra checks de calidad (peso, textura, color) para seguimiento histórico"
|
||||
}
|
||||
],
|
||||
"tips": [
|
||||
"El buffer automático es 5-10% extra para absorber variabilidad. Ajustable en Configuración",
|
||||
"Si produces de más sistemáticamente, el sistema lo detecta y ajusta las recomendaciones",
|
||||
"Puedes bloquear horarios de horno para mantenimiento o productos especiales"
|
||||
]
|
||||
}
|
||||
},
|
||||
"inventoryManagement": {
|
||||
"title": "Gestión de Inventario y Control de Stock",
|
||||
"description": "Control completo de ingredientes con FIFO, alertas de stock bajo y reducción de desperdicios",
|
||||
"readTime": "9",
|
||||
"content": {
|
||||
"intro": "El inventario rastrea todos tus ingredientes: stock actual, movimientos, proveedores, costos y fechas de caducidad.",
|
||||
"features": [
|
||||
{
|
||||
"name": "Seguimiento en Tiempo Real",
|
||||
"description": "Stock actualizado automáticamente cuando registras producciones o entregas. Ve el stock actual de cada ingrediente en tiempo real"
|
||||
},
|
||||
{
|
||||
"name": "FIFO Automático",
|
||||
"description": "First-In-First-Out (primero en entrar, primero en salir). El sistema consume automáticamente los lotes más antiguos para evitar caducidades"
|
||||
},
|
||||
{
|
||||
"name": "Alertas de Stock Bajo",
|
||||
"description": "Cuando un ingrediente llega al punto de reorden, recibes alerta. Ejemplo: 'Harina T-55: stock 15kg, mínimo 50kg, hacer pedido'"
|
||||
},
|
||||
{
|
||||
"name": "Gestión de Caducidades",
|
||||
"description": "Registra fechas de caducidad de cada lote. Alertas 7 días antes de caducar. Seguimiento de desperdicio por caducidad"
|
||||
}
|
||||
],
|
||||
"stockEntry": [
|
||||
{
|
||||
"title": "Recepción de Pedidos",
|
||||
"description": "Cuando llega un pedido del proveedor: 1) Registra la entrega en el sistema, 2) Escanea código de barras o introduce cantidad manualmente, 3) Registra lote y fecha de caducidad, 4) Stock se actualiza automáticamente"
|
||||
},
|
||||
{
|
||||
"title": "Actualización Automática",
|
||||
"description": "Al completar un lote de producción, el sistema descuenta automáticamente los ingredientes usando FIFO. Si produces 100 baguettes (receta: 500g harina cada), descuenta 50kg de harina del lote más antiguo"
|
||||
}
|
||||
],
|
||||
"compliance": [
|
||||
{
|
||||
"name": "HACCP",
|
||||
"description": "Sistema cumple con normas HACCP de seguridad alimentaria. Trazabilidad completa de lotes, temperaturas de almacenaje"
|
||||
},
|
||||
{
|
||||
"name": "Auditoría",
|
||||
"description": "Historial completo de movimientos de stock para auditorías. Exportable a PDF/Excel"
|
||||
}
|
||||
],
|
||||
"metrics": [
|
||||
"Valor total de inventario (€)",
|
||||
"Rotación de inventario (cuántas veces al año renuevas stock)",
|
||||
"Desperdicio por caducidad (kg y € al mes)",
|
||||
"Ingredientes con stock crítico"
|
||||
]
|
||||
}
|
||||
},
|
||||
"posIntegration": {
|
||||
"title": "Punto de Venta (TPV) y Registro de Ventas",
|
||||
"description": "Registra ventas manualmente o sincroniza con tu TPV existente para predicciones más precisas",
|
||||
"readTime": "8",
|
||||
"content": {
|
||||
"intro": "El módulo POS te permite registrar ventas diarias, ya sea manualmente o integrando con tu TPV actual.",
|
||||
"manualEntry": {
|
||||
"title": "Registro Manual",
|
||||
"description": "Si no tienes TPV o prefieres control manual: Al final del día, introduce ventas por producto (ej: Baguette: 145 unidades, Croissant: 67 unidades). Opcionalmente precio total para tracking de ingresos. Tarda 2-3 minutos al día"
|
||||
},
|
||||
"integration": {
|
||||
"title": "Integración con TPV",
|
||||
"description": "Conecta tu TPV existente para sincronización automática. TPVs soportados: TPV genérico vía exportación Excel/CSV, API personalizada (contacta con soporte). Próximamente: integración directa con principales TPVs españoles"
|
||||
},
|
||||
"benefits": [
|
||||
{
|
||||
"benefit": "Predicciones Más Precisas",
|
||||
"description": "Cada venta registrada mejora las predicciones futuras. El sistema aprende patrones día a día"
|
||||
},
|
||||
{
|
||||
"benefit": "Análisis de Ventas",
|
||||
"description": "Ve tendencias de ventas: productos más/menos vendidos, ingresos diarios/semanales/mensuales, comparativas año anterior"
|
||||
},
|
||||
{
|
||||
"benefit": "Validación Automática",
|
||||
"description": "El sistema compara predicciones vs ventas reales cada noche. Si la precisión baja, ajusta modelos automáticamente"
|
||||
}
|
||||
],
|
||||
"workflow": [
|
||||
{
|
||||
"step": "Registro de Venta",
|
||||
"description": "Manual o automático (TPV). Datos: producto, cantidad, fecha/hora, precio (opcional)"
|
||||
},
|
||||
{
|
||||
"step": "Validación Nocturna",
|
||||
"description": "5:30 AM: sistema compara predicción de ayer vs ventas reales. Calcula precisión (MAPE) por producto"
|
||||
},
|
||||
{
|
||||
"step": "Mejora Continua",
|
||||
"description": "Si MAPE > 30% en un producto por 7 días, sistema re-entrena modelo automáticamente"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"wasteTracking": {
|
||||
"title": "Seguimiento de Desperdicios y Sostenibilidad",
|
||||
"description": "Mide, analiza y reduce el desperdicio alimentario para cumplir objetivos de cero waste",
|
||||
"readTime": "7",
|
||||
"content": {
|
||||
"intro": "El seguimiento de desperdicios es clave para rentabilidad y sostenibilidad. El sistema mide exactamente qué se desperdicia, por qué, y sugiere acciones.",
|
||||
"types": [
|
||||
{
|
||||
"type": "Producción Excesiva",
|
||||
"description": "Productos que horneaste pero no vendiste. Se quedan al final del día. Causas: predicción muy alta, evento cancelado, mal tiempo inesperado"
|
||||
},
|
||||
{
|
||||
"type": "Ingredientes Caducados",
|
||||
"description": "Ingredientes que caducaron antes de usarse. Causas: compra excesiva, lote grande olvidado, FIFO no aplicado"
|
||||
},
|
||||
{
|
||||
"type": "Defectos de Calidad",
|
||||
"description": "Productos que no cumplen estándares y no se pueden vender. Causas: problemas en producción, equipo defectuoso"
|
||||
},
|
||||
{
|
||||
"type": "Merma de Producción",
|
||||
"description": "Diferencia entre ingredientes usados y producto final obtenido. Normal: 5-8%. Si es >10%, revisar proceso"
|
||||
}
|
||||
],
|
||||
"tracking": [
|
||||
{
|
||||
"step": "1. Registro Diario",
|
||||
"description": "Al final del día, registra productos no vendidos. Sistema calcula costo de desperdicio automáticamente"
|
||||
},
|
||||
{
|
||||
"step": "2. Categorización",
|
||||
"description": "Indica razón: producción excesiva, defecto calidad, caducidad. Ayuda a identificar patrones"
|
||||
},
|
||||
{
|
||||
"step": "3. Análisis Mensual",
|
||||
"description": "Dashboard muestra: kg/€ desperdiados al mes, % del total producido, principales productos desperdiados, tendencias"
|
||||
}
|
||||
],
|
||||
"reduction": [
|
||||
{
|
||||
"action": "Ajustar Predicciones",
|
||||
"description": "Si produces de más sistemáticamente, baja buffer de seguridad"
|
||||
},
|
||||
{
|
||||
"action": "Ofertas de Última Hora",
|
||||
"description": "Integra con apps tipo Too Good To Go para vender excedentes"
|
||||
},
|
||||
{
|
||||
"action": "Donaciones",
|
||||
"description": "Registra donaciones a bancos de alimentos (deducibles fiscalmente)"
|
||||
},
|
||||
{
|
||||
"action": "FIFO Estricto",
|
||||
"description": "Sistema asegura consumo de ingredientes antiguos primero"
|
||||
}
|
||||
],
|
||||
"sustainability": {
|
||||
"title": "Objetivos de Sostenibilidad",
|
||||
"metrics": [
|
||||
"Reducción de desperdicio: objetivo 20-40% en 6 meses",
|
||||
"Certificación Zero Waste (posible con <5% desperdicio)",
|
||||
"Huella de carbono (calculada automáticamente)",
|
||||
"Cumplimiento ODS 12.3 (Objetivos de Desarrollo Sostenible ONU)"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"analytics": {
|
||||
"dashboardOverview": {
|
||||
"title": "Panel de Control y KPIs Principales",
|
||||
"description": "Entiende todas las métricas clave del negocio de un vistazo en el dashboard principal",
|
||||
"readTime": "8",
|
||||
"content": {
|
||||
"intro": "El dashboard es tu centro de comando. En una sola pantalla ves el estado actual de tu panadería: ventas, producción, inventario, predicciones.",
|
||||
"sections": [
|
||||
{
|
||||
"section": "Resumen Hoy",
|
||||
"metrics": [
|
||||
"Predicción de ventas del día vs real (se actualiza en tiempo real)",
|
||||
"Producción planificada vs completada",
|
||||
"Ingresos del día (€)",
|
||||
"Alerta de ingredientes con stock bajo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"section": "Predicciones Próximos 7 Días",
|
||||
"metrics": [
|
||||
"Gráfico de demanda esperada",
|
||||
"Comparación vs semana pasada (%)",
|
||||
"Alertas de picos de demanda (festivos, eventos)",
|
||||
"Productos con mayor demanda prevista"
|
||||
]
|
||||
},
|
||||
{
|
||||
"section": "Inventario",
|
||||
"metrics": [
|
||||
"Valor total de stock (€)",
|
||||
"Ingredientes en alerta (< punto de reorden)",
|
||||
"Ingredientes próximos a caducar (<7 días)",
|
||||
"Pedidos a proveedores pendientes"
|
||||
]
|
||||
},
|
||||
{
|
||||
"section": "Rendimiento",
|
||||
"metrics": [
|
||||
"Precisión de predicciones últimos 7 días (MAPE %)",
|
||||
"Desperdicio del mes (kg y €)",
|
||||
"Margen de beneficio por producto",
|
||||
"Productos más/menos rentables"
|
||||
]
|
||||
}
|
||||
],
|
||||
"customization": "Puedes personalizar el dashboard: Añade/quita widgets, Cambia periodo de análisis (hoy, 7 días, 30 días), Filtra por producto o categoría, Exporta a PDF/Excel"
|
||||
}
|
||||
},
|
||||
"reports": {
|
||||
"title": "Informes y Reportes Personalizados",
|
||||
"description": "Genera informes detallados de ventas, producción, costos e inventario exportables a Excel/PDF",
|
||||
"readTime": "10",
|
||||
"content": {
|
||||
"intro": "Los informes te permiten analizar el negocio en profundidad y compartir datos con contables, inversores o equipo.",
|
||||
"types": [
|
||||
{
|
||||
"name": "Informe de Ventas",
|
||||
"description": "Análisis completo de ventas por periodo: Ventas totales (€ y unidades), Desglose por producto/categoría, Comparación vs periodo anterior (%), Top 10 productos más vendidos, Tendencias de ventas (crecimiento/caída)"
|
||||
},
|
||||
{
|
||||
"name": "Informe de Producción",
|
||||
"description": "Rendimiento de producción: Lotes producidos vs planificados, Yield real vs esperado (eficiencia), Tiempo de producción por lote, Defectos de calidad registrados, Utilización de equipos (%)"
|
||||
},
|
||||
{
|
||||
"name": "Informe de Inventario",
|
||||
"description": "Estado y movimientos de inventario: Valor de stock (€) por categoría, Rotación de inventario (veces/año), Movimientos de entrada/salida, Desperdicio por caducidad (kg y €), Compras vs consumo"
|
||||
},
|
||||
{
|
||||
"name": "Informe Financiero",
|
||||
"description": "Análisis de costos y márgenes: Costos de ingredientes por producto, Margen bruto por producto (%), Rentabilidad por categoría, Compras a proveedores (€), ROI de predicciones (ahorros vs desperdicio)"
|
||||
}
|
||||
],
|
||||
"generation": [
|
||||
{
|
||||
"step": "1. Selecciona Tipo de Informe",
|
||||
"description": "Ve a Informes > Nuevo Informe. Elige tipo: Ventas, Producción, Inventario, Financiero"
|
||||
},
|
||||
{
|
||||
"step": "2. Configura Parámetros",
|
||||
"description": "Periodo (día, semana, mes, personalizado), Productos/categorías a incluir, Métricas específicas, Comparación (vs mes anterior, año anterior)"
|
||||
},
|
||||
{
|
||||
"step": "3. Vista Previa",
|
||||
"description": "El sistema genera vista previa en pantalla. Revisa que incluye lo que necesitas"
|
||||
},
|
||||
{
|
||||
"step": "4. Exporta",
|
||||
"description": "Descarga en Excel (.xlsx) para análisis avanzado, PDF para presentaciones/impresión, CSV para integración con contabilidad"
|
||||
}
|
||||
],
|
||||
"automation": "Puedes programar informes automáticos: Frecuencia (diario, semanal, mensual), Envío por email automático, Destinatarios (tú, equipo, contable), Personaliza para cada destinatario"
|
||||
}
|
||||
},
|
||||
"aiInsights": {
|
||||
"title": "Insights de IA y Recomendaciones Automáticas",
|
||||
"description": "El sistema analiza tus datos y te da recomendaciones accionables para mejorar rentabilidad",
|
||||
"readTime": "12",
|
||||
"content": {
|
||||
"intro": "Los Insights de IA son recomendaciones automáticas que el sistema genera analizando tus datos. Van más allá de mostrar números: te dicen QUÉ hacer.",
|
||||
"categories": [
|
||||
{
|
||||
"category": "Optimización de Producción",
|
||||
"insights": [
|
||||
"Productos con sobreproducción sistemática: 'Reduces 15% baguettes, desperdicias 8% cada día'",
|
||||
"Oportunidades de producción: 'Podrías vender 20% más croissants los sábados, siempre te quedas sin stock'",
|
||||
"Eficiencia de lotes: 'Cambia lote de 40 a 50 tartas, mejoras eficiencia de horno 12%'",
|
||||
"Horarios óptimos: 'Hornea bollos a las 7 AM en vez de 6 AM, vendes más frescos'"
|
||||
]
|
||||
},
|
||||
{
|
||||
"category": "Gestión de Inventario",
|
||||
"insights": [
|
||||
"Puntos de reorden: 'Harina: cambiar punto de reorden de 50kg a 75kg, evitas stockouts'",
|
||||
"Optimización de compras: 'Compra azúcar cada 15 días en vez de semanalmente, ahorras €40/mes en envíos'",
|
||||
"Cambio de proveedor: 'Proveedor B ofrece mantequilla 8% más barata con misma calidad'",
|
||||
"Stock muerto: 'Ingrediente X no usado en 60 días, considera eliminar del inventario'"
|
||||
]
|
||||
},
|
||||
{
|
||||
"category": "Precios y Rentabilidad",
|
||||
"insights": [
|
||||
"Margen bajo: 'Croissant margen 22%, objetivo 35%. Sube precio €0.15 o reduce costo ingredientes'",
|
||||
"Precio óptimo: 'Podrías subir pan integral €0.20 sin afectar demanda (análisis de elasticidad)'",
|
||||
"Productos no rentables: 'Tarta de manzana margen negativo -5%, revisar receta o precio'",
|
||||
"Oportunidades de upselling: 'Clientes que compran café +80% compran croissant, sugiérelo activamente'"
|
||||
]
|
||||
},
|
||||
{
|
||||
"category": "Reducción de Desperdicio",
|
||||
"insights": [
|
||||
"Patrones de desperdicio: 'Lunes desperdicias 15% más que otros días, ajusta predicción'",
|
||||
"Caducidades evitables: 'Levadura caduca cada mes, compra lotes más pequeños'",
|
||||
"Donaciones: 'Sobrante diario promedio: 12 unidades, suficiente para banco de alimentos (deducible)'",
|
||||
"Ofertas dinámicas: '2 horas antes de cerrar, baja precio 30% para vender excedentes'"
|
||||
]
|
||||
}
|
||||
],
|
||||
"howToUse": [
|
||||
{
|
||||
"step": "1. Revisa Insights Diarios",
|
||||
"description": "Cada mañana, el dashboard muestra 3-5 insights prioritarios. Ordenados por impacto económico (€/mes)"
|
||||
},
|
||||
{
|
||||
"step": "2. Marca como Implementado",
|
||||
"description": "Cuando actúas sobre un insight, márcalo. Sistema seguirá si funcionó y aprenderá"
|
||||
},
|
||||
{
|
||||
"step": "3. Mide Resultados",
|
||||
"description": "Después de 2-4 semanas, el sistema muestra impacto real: 'Insight: Reducir baguettes 10%. Resultado: desperdicio -25%, ventas -0%. Ahorro: €180/mes'"
|
||||
}
|
||||
],
|
||||
"privacy": "Los insights son privados, solo tú los ves. Basados 100% en TUS datos, no en datos de otras panaderías."
|
||||
}
|
||||
},
|
||||
"performanceMetrics": {
|
||||
"title": "Métricas de Rendimiento y KPIs del Negocio",
|
||||
"description": "Indicadores clave de rendimiento para medir salud del negocio y tomar decisiones estratégicas",
|
||||
"readTime": "15",
|
||||
"content": {
|
||||
"intro": "Los KPIs (Key Performance Indicators) son métricas que miden la salud de tu negocio. El sistema calcula automáticamente los KPIs más importantes para panaderías.",
|
||||
"production": {
|
||||
"title": "KPIs de Producción",
|
||||
"metrics": [
|
||||
{
|
||||
"name": "Precisión de Predicción (MAPE)",
|
||||
"description": "Qué tan acertadas son las predicciones. Objetivo: <20% (80%+ precisión). Se muestra por producto y global",
|
||||
"formula": "MAPE = (|Real - Predicción| / Real) × 100%"
|
||||
},
|
||||
{
|
||||
"name": "Yield de Producción",
|
||||
"description": "Eficiencia de conversión ingredientes → producto final. Objetivo: >95%. Si <90%, revisar proceso",
|
||||
"formula": "Yield = (Producto Final / Ingredientes Usados) × 100%"
|
||||
},
|
||||
{
|
||||
"name": "Utilización de Capacidad",
|
||||
"description": "% de capacidad de horno/equipos usada. Objetivo: 75-85%. <60% infrautilizado, >90% cuello de botella",
|
||||
"formula": "Utilización = (Horas Usadas / Horas Disponibles) × 100%"
|
||||
},
|
||||
{
|
||||
"name": "Tiempo Medio de Producción",
|
||||
"description": "Tiempo promedio para completar un lote. Compara vs estándar de receta. Detecta ineficiencias",
|
||||
"formula": "Tiempo Medio = Σ(Tiempo por Lote) / Número de Lotes"
|
||||
}
|
||||
]
|
||||
},
|
||||
"financial": {
|
||||
"title": "KPIs Financieros",
|
||||
"metrics": [
|
||||
{
|
||||
"name": "Margen Bruto",
|
||||
"description": "Rentabilidad después de costos de ingredientes. Objetivo: 60-70% para panadería artesanal",
|
||||
"formula": "Margen Bruto = ((Precio - Costo Ingredientes) / Precio) × 100%"
|
||||
},
|
||||
{
|
||||
"name": "Costo de Desperdicio",
|
||||
"description": "€ perdidos en productos/ingredientes desperdiados. Objetivo: <5% de ventas",
|
||||
"formula": "Costo Desperdicio = Σ(Unidades Desperdiadas × Costo Unitario)"
|
||||
},
|
||||
{
|
||||
"name": "Valor de Inventario",
|
||||
"description": "€ inmovilizados en stock. Objetivo: 7-15 días de ventas. >30 días = exceso de capital bloqueado",
|
||||
"formula": "Días de Inventario = (Valor Stock / Costo Ventas Diario)"
|
||||
},
|
||||
{
|
||||
"name": "ROI de Panadería IA",
|
||||
"description": "Retorno de inversión del sistema. Calcula ahorros vs costo de suscripción",
|
||||
"formula": "ROI = ((Ahorros Mensuales - €49) / €49) × 100%"
|
||||
}
|
||||
]
|
||||
},
|
||||
"inventory": {
|
||||
"title": "KPIs de Inventario",
|
||||
"metrics": [
|
||||
{
|
||||
"name": "Rotación de Inventario",
|
||||
"description": "Cuántas veces renuevas stock al año. Objetivo: 12-24 (mensual/quincenal). >40 = poca eficiencia de compra",
|
||||
"formula": "Rotación = Costo Anual de Ventas / Valor Promedio de Inventario"
|
||||
},
|
||||
{
|
||||
"name": "Tasa de Caducidad",
|
||||
"description": "% de ingredientes que caducan antes de usarse. Objetivo: <2%",
|
||||
"formula": "Tasa Caducidad = (kg Caducados / kg Comprados) × 100%"
|
||||
},
|
||||
{
|
||||
"name": "Precisión de Inventario",
|
||||
"description": "Diferencia entre stock registrado vs físico. Objetivo: >98%",
|
||||
"formula": "Precisión = (1 - |Stock Físico - Stock Sistema| / Stock Físico) × 100%"
|
||||
}
|
||||
]
|
||||
},
|
||||
"waste": {
|
||||
"title": "KPIs de Sostenibilidad",
|
||||
"metrics": [
|
||||
{
|
||||
"name": "Tasa de Desperdicio",
|
||||
"description": "% de producción que se desperdicia. Objetivo: <5%. Certificación Zero Waste: <3%",
|
||||
"formula": "Tasa Desperdicio = (Unidades Desperdiadas / Unidades Producidas) × 100%"
|
||||
},
|
||||
{
|
||||
"name": "Huella de Carbono",
|
||||
"description": "kg CO2 equivalente por kg de producto. El sistema calcula automáticamente según ingredientes y energía",
|
||||
"formula": "CO2 = Σ(kg Ingrediente × Factor Emisión) + Energía Usada × Factor"
|
||||
}
|
||||
]
|
||||
},
|
||||
"howToTrack": "Dashboard > Métricas: Ve todos los KPIs actualizados en tiempo real. Configura alertas si un KPI sale de rango objetivo. Exporta histórico para ver evolución mensual"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"faqs": [
|
||||
{
|
||||
"category": "general",
|
||||
"question": "¿Qué es Panadería IA y cómo funciona?",
|
||||
"answer": "Panadería IA es una plataforma de gestión inteligente para panaderías. Utiliza inteligencia artificial para predecir la demanda de tus productos, optimizar la producción, reducir desperdicios y aumentar la rentabilidad. Conectas tus datos de ventas históricas y el sistema aprende tus patrones para hacer predicciones precisas."
|
||||
},
|
||||
{
|
||||
"category": "general",
|
||||
"question": "¿Cuánto tiempo toma configurar el sistema?",
|
||||
"answer": "La configuración inicial toma entre 10-15 minutos. Necesitas: 1) Crear tu cuenta, 2) Subir tu catálogo de productos, 3) Importar historial de ventas (opcional pero recomendado), 4) Configurar preferencias básicas. El sistema empieza a generar predicciones desde el primer día, mejorando su precisión con el tiempo."
|
||||
},
|
||||
{
|
||||
"category": "general",
|
||||
"question": "¿Necesito conocimientos técnicos para usarlo?",
|
||||
"answer": "No. Panadería IA está diseñado para panaderos, no para ingenieros. La interfaz es intuitiva, con tutoriales paso a paso. Si sabes usar WhatsApp o un correo electrónico, puedes usar nuestra plataforma. Además, ofrecemos soporte 24/7 en español."
|
||||
},
|
||||
{
|
||||
"category": "general",
|
||||
"question": "¿Funciona para obradores centrales con múltiples puntos de venta?",
|
||||
"answer": "SÍ. Nuestro sistema está diseñado para adaptarse a ambos modelos: producción local (un solo punto) y obrador central con distribución a múltiples puntos de venta. Para obradores centrales, ofrecemos predicción de demanda agregada y granular por cada POS, gestión de distribución multi-ubicación, y un dashboard centralizado con visibilidad por punto de venta."
|
||||
},
|
||||
{
|
||||
"category": "pricing",
|
||||
"question": "¿Cuánto cuesta el programa piloto?",
|
||||
"answer": "El programa piloto es GRATIS durante los primeros 3 meses. Después, pagas solo €49/mes con un 20% de descuento de por vida (precio normal: €79/mes). Sin contratos de permanencia, cancela cuando quieras."
|
||||
},
|
||||
{
|
||||
"category": "pricing",
|
||||
"question": "¿Necesito tarjeta de crédito para empezar el piloto?",
|
||||
"answer": "SÍ, necesitas registrar una tarjeta, pero NO se te cobrará durante los 3 meses de prueba gratuita. Puedes cancelar antes de que termine el periodo gratuito sin ningún cargo."
|
||||
},
|
||||
{
|
||||
"category": "technical",
|
||||
"question": "¿Cómo importo mis datos históricos de ventas?",
|
||||
"answer": "Aceptamos varios formatos: Excel (.xlsx), CSV, o exportaciones directas de tu TPV si es compatible. Cuanto más historial proporciones (recomendamos mínimo 3 meses), más precisas serán las predicciones."
|
||||
},
|
||||
{
|
||||
"category": "technical",
|
||||
"question": "¿Qué pasa si mis predicciones no son precisas?",
|
||||
"answer": "El sistema mejora con el tiempo. Las primeras semanas puede tener un margen de error del 15-20%. Después del primer mes, esto baja al 10%. Con 3+ meses de datos, alcanzamos >90% de precisión. Puedes ajustar manualmente las predicciones y el sistema aprende de tus correcciones."
|
||||
},
|
||||
{
|
||||
"category": "privacy",
|
||||
"question": "¿Dónde se almacenan mis datos?",
|
||||
"answer": "TODOS tus datos se almacenan en servidores físicamente ubicados en España (Barcelona y Madrid), cumpliendo 100% con RGPD. Nunca compartimos, vendemos ni transferimos tus datos fuera de la UE."
|
||||
},
|
||||
{
|
||||
"category": "support",
|
||||
"question": "¿Qué tipo de soporte ofrecen?",
|
||||
"answer": "Soporte 24/7 en español por: Email (respuesta en <4h), Chat en vivo (9:00-21:00), Videollamada (con cita previa). Durante el piloto, también tienes acceso directo a los fundadores por WhatsApp."
|
||||
}
|
||||
],
|
||||
"contact": {
|
||||
"liveChat": {
|
||||
"title": "Chat en Vivo",
|
||||
"description": "Respuesta inmediata de 9:00 a 21:00",
|
||||
"action": "Iniciar Chat"
|
||||
},
|
||||
"email": {
|
||||
"title": "Email",
|
||||
"description": "Respuesta en menos de 4 horas",
|
||||
"action": "Enviar Email",
|
||||
"address": "soporte@panaderia-ia.com"
|
||||
},
|
||||
"documentation": {
|
||||
"title": "Documentación",
|
||||
"description": "Guías completas y tutoriales",
|
||||
"action": "Ver Docs"
|
||||
},
|
||||
"hours": {
|
||||
"liveChat": "Lunes a Viernes 9:00 - 21:00, Sábados 10:00 - 18:00",
|
||||
"email": "24/7 (respuesta en menos de 4 horas en horario laboral)",
|
||||
"phone": "Lunes a Viernes 10:00 - 19:00 (solo para clientes activos)"
|
||||
}
|
||||
},
|
||||
"resources": {
|
||||
"glossary": {
|
||||
"title": "Glosario de Términos",
|
||||
"description": "Definiciones de conceptos clave y terminología técnica",
|
||||
"action": "Ver Glosario"
|
||||
},
|
||||
"troubleshooting": {
|
||||
"title": "Solución de Problemas",
|
||||
"description": "Errores comunes y cómo resolverlos rápidamente",
|
||||
"action": "Ver Soluciones"
|
||||
},
|
||||
"bestPractices": {
|
||||
"title": "Mejores Prácticas",
|
||||
"description": "Tips y consejos de expertos para optimizar tu uso",
|
||||
"action": "Leer Tips"
|
||||
}
|
||||
}
|
||||
}
|
||||
212
frontend/src/locales/eu/help.json
Normal file
212
frontend/src/locales/eu/help.json
Normal file
@@ -0,0 +1,212 @@
|
||||
{
|
||||
"helpCenter": {
|
||||
"title": "Nola Lagun Zaitzakegu Gaur?",
|
||||
"subtitle": "Laguntza Zentroa",
|
||||
"searchPlaceholder": "Bilatu laguntzan... (adib: nola inporta ditudan datuak?)",
|
||||
"description": "Aurkitu erantzun azkarrak, gida osoak eta gure taldearekin zuzeneko harremana",
|
||||
"categoriesTitle": "Arakatu Kategorien arabera",
|
||||
"categoriesSubtitle": "Aurkitu behar duzuna azkarrago",
|
||||
"faqTitle": "Ohiko Galderak",
|
||||
"faqResultsCount_one": "{{count}} erantzun",
|
||||
"faqResultsCount_other": "{{count}} erantzun",
|
||||
"faqFound": "aurkituta",
|
||||
"noResultsTitle": "Ez da emaitzarik aurkitu honetarako",
|
||||
"noResultsAction": "Jarri harremanetan laguntza-zerbitzuarekin",
|
||||
"contactTitle": "Ez duzu bilatzen duzuna aurkitzen?",
|
||||
"contactSubtitle": "Gure taldea hemen dago zu laguntzeko",
|
||||
"contactHours": "Arreta Ordutegia"
|
||||
},
|
||||
"docs": {
|
||||
"title": "Gida Osoak Bakery IA Menperatzeko",
|
||||
"subtitle": "Dokumentazioa",
|
||||
"description": "Urratsez urratseko tutorialak, praktika onenak eta trikimailuak plataformari zuku guztia ateratzeko",
|
||||
"getStarted": "Hasi",
|
||||
"backToHelp": "Laguntza Zentroa",
|
||||
"sectionsTitle": "Atalak",
|
||||
"videoTutorialsTitle": "Bideo Tutorialak",
|
||||
"videoTutorialsSubtitle": "Ikasi ikusten (laster)",
|
||||
"additionalResourcesTitle": "Baliabide Gehigarriak",
|
||||
"ctaTitle": "Prest Hasteko?",
|
||||
"ctaSubtitle": "Erregistratu pilotu-programan eta eskuratu 3 hilabete doan",
|
||||
"ctaButton": "Sortu Kontu Doakoa",
|
||||
"articlesCount": "artikuluak",
|
||||
"readTime": "min",
|
||||
"quickLinks": "Esteka Azkarrak",
|
||||
"downloadPdf": "Deskargatu PDF",
|
||||
"contactSupport": "Jarri harremanetan Laguntza-zerbitzuarekin",
|
||||
"glossary": "Terminoen Glosarioa",
|
||||
"troubleshooting": "Arazoen Konponketa",
|
||||
"bestPractices": "Praktika Onenak"
|
||||
},
|
||||
"difficulty": {
|
||||
"beginner": "Hasiberria",
|
||||
"intermediate": "Ertaina",
|
||||
"advanced": "Aurreratua"
|
||||
},
|
||||
"categories": {
|
||||
"gettingStarted": {
|
||||
"title": "Lehenengo Urratsak",
|
||||
"description": "Konfiguratu zure kontua eta ikasi oinarriak"
|
||||
},
|
||||
"features": {
|
||||
"title": "Funtzionalitateak",
|
||||
"description": "Gida osoak ezaugarri guztiei buruz"
|
||||
},
|
||||
"analytics": {
|
||||
"title": "Analitika eta Aurreikuspenak",
|
||||
"description": "Interpretatu datuak eta AI jakintza"
|
||||
},
|
||||
"account": {
|
||||
"title": "Kontuaren Kudeaketa",
|
||||
"description": "Kudeatu zure profila, taldea eta ezarpenak"
|
||||
},
|
||||
"billing": {
|
||||
"title": "Fakturak eta Planak",
|
||||
"description": "Informazioa prezioak, ordainketak eta harpidetzei buruz"
|
||||
},
|
||||
"privacy": {
|
||||
"title": "Pribatutasuna eta Segurtasuna",
|
||||
"description": "GDPR, datuen segurtasuna eta betebeharra"
|
||||
}
|
||||
},
|
||||
"articles": {
|
||||
"gettingStarted": {
|
||||
"quickStart": {
|
||||
"title": "Hasiera Azkarreko Gida",
|
||||
"description": "Konfiguratu zure Bakery AI kontua 10 minututan eta hasi hondakinak murrizten",
|
||||
"readTime": "5"
|
||||
},
|
||||
"importData": {
|
||||
"title": "Inportatu Salmenta Datu Historikoak",
|
||||
"description": "Ikasi nola kargatu zure salmenta historia Excel, CSV edo zure TPV sistematik",
|
||||
"readTime": "8"
|
||||
},
|
||||
"productsCatalog": {
|
||||
"title": "Konfiguratu Produktuen Katalogoa",
|
||||
"description": "Sortu zure produktuen, errezetak eta osagaien katalogoa inbentario kudeaketa osorako",
|
||||
"readTime": "6"
|
||||
},
|
||||
"firstPrediction": {
|
||||
"title": "Zure Lehen Eskariaren Aurreikuspena",
|
||||
"description": "Ulertu sistemak nola interpretatzen duen eta nola doitu aurreikuspenak zure esperientzian oinarrituta",
|
||||
"readTime": "10"
|
||||
}
|
||||
},
|
||||
"features": {
|
||||
"demandForecasting": {
|
||||
"title": "AI Eskariaren Aurreikuspena",
|
||||
"description": "Nola funtzionatzen duen Prophet algoritmoak eta nola optimizatu aurreikuspen zehaztasuna",
|
||||
"readTime": "12"
|
||||
},
|
||||
"productionPlanning": {
|
||||
"title": "Ekoizpen Planifikazio Automatizatua",
|
||||
"description": "Optimizatu zure eguneroko labea ekoizpen planekin aurreikuspenetatik automatikoki sortuta",
|
||||
"readTime": "10"
|
||||
},
|
||||
"inventoryManagement": {
|
||||
"title": "Inbentarioaren Kudeaketa eta Stock Kontrola",
|
||||
"description": "Osagaien kontrol osoa FIFO, stock baxuko alertak eta hondakinen murrizketarekin",
|
||||
"readTime": "9"
|
||||
},
|
||||
"posIntegration": {
|
||||
"title": "Salmenta Puntua (TPV) eta Salmenten Erregistroa",
|
||||
"description": "Erregistratu salmentak eskuz edo sinkronizatu zure TPV existentzearekin aurreikuspen zehatzagoak lortzeko",
|
||||
"readTime": "8"
|
||||
},
|
||||
"wasteTracking": {
|
||||
"title": "Hondakinen Jarraipena eta Iraunkortasuna",
|
||||
"description": "Neurtu, aztertu eta murriztu elikagaien hondakinak zero hondakin helburuak lortzeko",
|
||||
"readTime": "7"
|
||||
}
|
||||
},
|
||||
"analytics": {
|
||||
"dashboardOverview": {
|
||||
"title": "Aginte Panela eta KPI Nagusiak",
|
||||
"description": "Ulertu negozioaren metrika giltzarri guztiak begiratu bakarrean aginte panel nagusian",
|
||||
"readTime": "8"
|
||||
},
|
||||
"reports": {
|
||||
"title": "Txosten Pertsonalizatuak",
|
||||
"description": "Sortu salmenten, ekoizpenaren, kostuen eta inbentarioaren txosten xehatuak Excel/PDF-ra esportagarriak",
|
||||
"readTime": "10"
|
||||
},
|
||||
"aiInsights": {
|
||||
"title": "AI Jakintza eta Gomendio Automatikoak",
|
||||
"description": "Sistemak zure datuak aztertzen ditu eta ekintza posible diren gomendioak ematen dizkizu errentagarritasuna hobetzeko",
|
||||
"readTime": "12"
|
||||
},
|
||||
"performanceMetrics": {
|
||||
"title": "Errendimendu Metrikak eta Negozioaren KPIak",
|
||||
"description": "Errendimendu adierazle giltzarriak negozioaren osasuna neurtzeko eta erabaki estrategikoak hartzeko",
|
||||
"readTime": "15"
|
||||
}
|
||||
}
|
||||
},
|
||||
"faqs": [
|
||||
{
|
||||
"category": "general",
|
||||
"question": "Zer da Bakery AI eta nola funtzionatzen du?",
|
||||
"answer": "Bakery AI kudeaketa plataforma adimentsua da okindegetarako. Adimen artifiziala erabiltzen du zure produktuen eskaria aurreikusteko, ekoizpena optimizatzeko, hondakinak murrizteko eta errentagarritasuna handitzeko."
|
||||
},
|
||||
{
|
||||
"category": "general",
|
||||
"question": "Zenbat denbora behar da sistema konfiguratzeko?",
|
||||
"answer": "Hasierako konfigurazioak 10-15 minutu hartzen ditu. Behar dituzu: 1) Sortu zure kontua, 2) Kargatu zure produktuen katalogoa, 3) Inportatu salmenta historia (hautazkoa baina gomendatua), 4) Konfiguratu oinarrizko lehentasunak."
|
||||
},
|
||||
{
|
||||
"category": "pricing",
|
||||
"question": "Zenbat kostatzen du pilotu-programak?",
|
||||
"answer": "Pilotu-programa DOAN dago lehenengo 3 hilabeteetan. Gero, 49€/hilean ordaintzen duzu bizitza osoko %20ko deskontua (prezio arrunta: 79€/hilean). Ez dago konpromiso-kontraturik, utzi nahi duzunean."
|
||||
},
|
||||
{
|
||||
"category": "technical",
|
||||
"question": "Nola inporta ditzaket nire salmenta datu historikoak?",
|
||||
"answer": "Hainbat formatu onartzen ditugu: Excel (.xlsx), CSV, edo TPV-tik esportazio zuzenak bateragarria bada. Zenbat eta historia gehiago eman (gutxienez 3 hilabete gomendatzen ditugu), orduan eta aurreikuspen zehatzagoak."
|
||||
},
|
||||
{
|
||||
"category": "privacy",
|
||||
"question": "Non gordetzen dira nire datuak?",
|
||||
"answer": "Zure datu GUZTIAK Espainian fisikoki kokatutako zerbitzarietan gordetzen dira (Bartzelona eta Madril), %100 GDPR betetzen. Inoiz ez ditugu zure datuak parteka, saldu edo EBZ kanpora transferitzen."
|
||||
}
|
||||
],
|
||||
"contact": {
|
||||
"liveChat": {
|
||||
"title": "Zuzeneko Txata",
|
||||
"description": "Erantzun berehalakoa 9:00-21:00",
|
||||
"action": "Hasi Txata"
|
||||
},
|
||||
"email": {
|
||||
"title": "Posta Elektronikoa",
|
||||
"description": "Erantzuna 4 ordu baino gutxiagoan",
|
||||
"action": "Bidali Posta",
|
||||
"address": "soporte@panaderia-ia.com"
|
||||
},
|
||||
"documentation": {
|
||||
"title": "Dokumentazioa",
|
||||
"description": "Gida osoak eta tutorialak",
|
||||
"action": "Ikusi Dokumentuak"
|
||||
},
|
||||
"hours": {
|
||||
"liveChat": "Astelehenetik ostiralera 9:00 - 21:00, Larunbatak 10:00 - 18:00",
|
||||
"email": "24/7 (erantzuna 4 orduen barruan lan orduetan)",
|
||||
"phone": "Astelehenetik ostiralera 10:00 - 19:00 (bezero aktiboak soilik)"
|
||||
}
|
||||
},
|
||||
"resources": {
|
||||
"glossary": {
|
||||
"title": "Terminoen Glosarioa",
|
||||
"description": "Kontzeptu giltzarriak eta termino teknikoen definizioak",
|
||||
"action": "Ikusi Glosarioa"
|
||||
},
|
||||
"troubleshooting": {
|
||||
"title": "Arazoen Konponketa",
|
||||
"description": "Ohiko erroreak eta nola konpondu azkar",
|
||||
"action": "Ikusi Konponketak"
|
||||
},
|
||||
"bestPractices": {
|
||||
"title": "Praktika Onenak",
|
||||
"description": "Adituek emandako aholku eta gomendioak zure erabilera optimizatzeko",
|
||||
"action": "Irakurri Aholkuak"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,7 @@ import reasoningEs from './es/reasoning.json';
|
||||
import wizardsEs from './es/wizards.json';
|
||||
import subscriptionEs from './es/subscription.json';
|
||||
import purchaseOrdersEs from './es/purchase_orders.json';
|
||||
import helpEs from './es/help.json';
|
||||
|
||||
// English translations
|
||||
import commonEn from './en/common.json';
|
||||
@@ -37,6 +38,7 @@ import reasoningEn from './en/reasoning.json';
|
||||
import wizardsEn from './en/wizards.json';
|
||||
import subscriptionEn from './en/subscription.json';
|
||||
import purchaseOrdersEn from './en/purchase_orders.json';
|
||||
import helpEn from './en/help.json';
|
||||
|
||||
// Basque translations
|
||||
import commonEu from './eu/common.json';
|
||||
@@ -57,6 +59,7 @@ import reasoningEu from './eu/reasoning.json';
|
||||
import wizardsEu from './eu/wizards.json';
|
||||
import subscriptionEu from './eu/subscription.json';
|
||||
import purchaseOrdersEu from './eu/purchase_orders.json';
|
||||
import helpEu from './eu/help.json';
|
||||
|
||||
// Translation resources by language
|
||||
export const resources = {
|
||||
@@ -79,6 +82,7 @@ export const resources = {
|
||||
wizards: wizardsEs,
|
||||
subscription: subscriptionEs,
|
||||
purchase_orders: purchaseOrdersEs,
|
||||
help: helpEs,
|
||||
},
|
||||
en: {
|
||||
common: commonEn,
|
||||
@@ -99,6 +103,7 @@ export const resources = {
|
||||
wizards: wizardsEn,
|
||||
subscription: subscriptionEn,
|
||||
purchase_orders: purchaseOrdersEn,
|
||||
help: helpEn,
|
||||
},
|
||||
eu: {
|
||||
common: commonEu,
|
||||
@@ -119,6 +124,7 @@ export const resources = {
|
||||
wizards: wizardsEu,
|
||||
subscription: subscriptionEu,
|
||||
purchase_orders: purchaseOrdersEu,
|
||||
help: helpEu,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -155,7 +161,7 @@ export const languageConfig = {
|
||||
};
|
||||
|
||||
// Namespaces available in translations
|
||||
export const namespaces = ['common', 'auth', 'inventory', 'foodSafety', 'suppliers', 'orders', 'recipes', 'errors', 'dashboard', 'production', 'equipment', 'landing', 'settings', 'ajustes', 'reasoning', 'wizards', 'subscription', 'purchase_orders'] as const;
|
||||
export const namespaces = ['common', 'auth', 'inventory', 'foodSafety', 'suppliers', 'orders', 'recipes', 'errors', 'dashboard', 'production', 'equipment', 'landing', 'settings', 'ajustes', 'reasoning', 'wizards', 'subscription', 'purchase_orders', 'help'] as const;
|
||||
export type Namespace = typeof namespaces[number];
|
||||
|
||||
// Helper function to get language display name
|
||||
@@ -169,7 +175,7 @@ export const isSupportedLanguage = (language: string): language is SupportedLang
|
||||
};
|
||||
|
||||
// Export individual language modules for direct imports
|
||||
export { commonEs, authEs, inventoryEs, foodSafetyEs, suppliersEs, ordersEs, recipesEs, errorsEs, equipmentEs, landingEs, settingsEs, ajustesEs, reasoningEs, wizardsEs, wizardsEn, wizardsEu };
|
||||
export { commonEs, authEs, inventoryEs, foodSafetyEs, suppliersEs, ordersEs, recipesEs, errorsEs, equipmentEs, landingEs, settingsEs, ajustesEs, reasoningEs, wizardsEs, wizardsEn, wizardsEu, helpEs, helpEn, helpEu };
|
||||
|
||||
// Default export with all translations
|
||||
export default resources;
|
||||
|
||||
@@ -39,129 +39,130 @@ interface DocArticle {
|
||||
}
|
||||
|
||||
const DocumentationPage: React.FC = () => {
|
||||
const { t } = useTranslation();
|
||||
const { t } = useTranslation('help');
|
||||
const [activeSection, setActiveSection] = useState<string>('getting-started');
|
||||
const [selectedArticle, setSelectedArticle] = useState<{ sectionId: string; articleId: string } | null>(null);
|
||||
|
||||
const sections: DocSection[] = [
|
||||
{
|
||||
id: 'getting-started',
|
||||
title: 'Primeros Pasos',
|
||||
description: 'Todo lo que necesitas para comenzar',
|
||||
title: t('categories.gettingStarted.title'),
|
||||
description: t('categories.gettingStarted.description'),
|
||||
icon: Rocket,
|
||||
articles: [
|
||||
{
|
||||
id: 'quick-start',
|
||||
title: 'Guía de Inicio Rápido',
|
||||
description: 'Configura tu cuenta en 10 minutos',
|
||||
readTime: '5 min',
|
||||
title: t('articles.gettingStarted.quickStart.title'),
|
||||
description: t('articles.gettingStarted.quickStart.description'),
|
||||
readTime: `${t('articles.gettingStarted.quickStart.readTime')} ${t('docs.readTime')}`,
|
||||
difficulty: 'beginner',
|
||||
},
|
||||
{
|
||||
id: 'import-data',
|
||||
title: 'Importar Datos Históricos',
|
||||
description: 'Cómo subir tu historial de ventas desde Excel o TPV',
|
||||
readTime: '8 min',
|
||||
title: t('articles.gettingStarted.importData.title'),
|
||||
description: t('articles.gettingStarted.importData.description'),
|
||||
readTime: `${t('articles.gettingStarted.importData.readTime')} ${t('docs.readTime')}`,
|
||||
difficulty: 'beginner',
|
||||
},
|
||||
{
|
||||
id: 'products-catalog',
|
||||
title: 'Configurar Catálogo de Productos',
|
||||
description: 'Añade tus productos, recetas e ingredientes',
|
||||
readTime: '6 min',
|
||||
title: t('articles.gettingStarted.productsCatalog.title'),
|
||||
description: t('articles.gettingStarted.productsCatalog.description'),
|
||||
readTime: `${t('articles.gettingStarted.productsCatalog.readTime')} ${t('docs.readTime')}`,
|
||||
difficulty: 'beginner',
|
||||
},
|
||||
{
|
||||
id: 'first-prediction',
|
||||
title: 'Tu Primera Predicción',
|
||||
description: 'Interpreta y ajusta las predicciones de demanda',
|
||||
readTime: '10 min',
|
||||
title: t('articles.gettingStarted.firstPrediction.title'),
|
||||
description: t('articles.gettingStarted.firstPrediction.description'),
|
||||
readTime: `${t('articles.gettingStarted.firstPrediction.readTime')} ${t('docs.readTime')}`,
|
||||
difficulty: 'beginner',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'features',
|
||||
title: 'Funcionalidades',
|
||||
description: 'Guías detalladas de cada módulo',
|
||||
title: t('categories.features.title'),
|
||||
description: t('categories.features.description'),
|
||||
icon: Package,
|
||||
articles: [
|
||||
{
|
||||
id: 'demand-forecasting',
|
||||
title: 'Predicción de Demanda con IA',
|
||||
description: 'Cómo funciona el algoritmo y cómo sacarle el máximo partido',
|
||||
readTime: '12 min',
|
||||
title: t('articles.features.demandForecasting.title'),
|
||||
description: t('articles.features.demandForecasting.description'),
|
||||
readTime: `${t('articles.features.demandForecasting.readTime')} ${t('docs.readTime')}`,
|
||||
difficulty: 'intermediate',
|
||||
},
|
||||
{
|
||||
id: 'production-planning',
|
||||
title: 'Planificación de Producción',
|
||||
description: 'Optimiza tu horneado diario basándote en predicciones',
|
||||
readTime: '10 min',
|
||||
title: t('articles.features.productionPlanning.title'),
|
||||
description: t('articles.features.productionPlanning.description'),
|
||||
readTime: `${t('articles.features.productionPlanning.readTime')} ${t('docs.readTime')}`,
|
||||
difficulty: 'intermediate',
|
||||
},
|
||||
{
|
||||
id: 'inventory-management',
|
||||
title: 'Gestión de Inventario',
|
||||
description: 'Controla stock, proveedores y compras',
|
||||
readTime: '9 min',
|
||||
title: t('articles.features.inventoryManagement.title'),
|
||||
description: t('articles.features.inventoryManagement.description'),
|
||||
readTime: `${t('articles.features.inventoryManagement.readTime')} ${t('docs.readTime')}`,
|
||||
difficulty: 'intermediate',
|
||||
},
|
||||
{
|
||||
id: 'pos-integration',
|
||||
title: 'Punto de Venta (TPV)',
|
||||
description: 'Registra ventas y sincroniza con predicciones',
|
||||
readTime: '8 min',
|
||||
title: t('articles.features.posIntegration.title'),
|
||||
description: t('articles.features.posIntegration.description'),
|
||||
readTime: `${t('articles.features.posIntegration.readTime')} ${t('docs.readTime')}`,
|
||||
difficulty: 'beginner',
|
||||
},
|
||||
{
|
||||
id: 'waste-tracking',
|
||||
title: 'Seguimiento de Desperdicios',
|
||||
description: 'Mide, analiza y reduce el desperdicio alimentario',
|
||||
readTime: '7 min',
|
||||
title: t('articles.features.wasteTracking.title'),
|
||||
description: t('articles.features.wasteTracking.description'),
|
||||
readTime: `${t('articles.features.wasteTracking.readTime')} ${t('docs.readTime')}`,
|
||||
difficulty: 'beginner',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'analytics',
|
||||
title: 'Análisis e Insights',
|
||||
description: 'Interpreta tus datos y métricas',
|
||||
title: t('categories.analytics.title'),
|
||||
description: t('categories.analytics.description'),
|
||||
icon: BarChart3,
|
||||
articles: [
|
||||
{
|
||||
id: 'dashboard-overview',
|
||||
title: 'Panel de Control',
|
||||
description: 'Entiende todas las métricas clave de un vistazo',
|
||||
readTime: '8 min',
|
||||
title: t('articles.analytics.dashboardOverview.title'),
|
||||
description: t('articles.analytics.dashboardOverview.description'),
|
||||
readTime: `${t('articles.analytics.dashboardOverview.readTime')} ${t('docs.readTime')}`,
|
||||
difficulty: 'beginner',
|
||||
},
|
||||
{
|
||||
id: 'reports',
|
||||
title: 'Informes y Reportes',
|
||||
description: 'Genera y exporta informes personalizados',
|
||||
readTime: '10 min',
|
||||
title: t('articles.analytics.reports.title'),
|
||||
description: t('articles.analytics.reports.description'),
|
||||
readTime: `${t('articles.analytics.reports.readTime')} ${t('docs.readTime')}`,
|
||||
difficulty: 'intermediate',
|
||||
},
|
||||
{
|
||||
id: 'ai-insights',
|
||||
title: 'Insights de IA',
|
||||
description: 'Descubre patrones y oportunidades automáticamente',
|
||||
readTime: '12 min',
|
||||
title: t('articles.analytics.aiInsights.title'),
|
||||
description: t('articles.analytics.aiInsights.description'),
|
||||
readTime: `${t('articles.analytics.aiInsights.readTime')} ${t('docs.readTime')}`,
|
||||
difficulty: 'advanced',
|
||||
},
|
||||
{
|
||||
id: 'performance-metrics',
|
||||
title: 'Métricas de Rendimiento',
|
||||
description: 'KPIs clave: márgenes, rotación, precisión de predicciones',
|
||||
readTime: '15 min',
|
||||
title: t('articles.analytics.performanceMetrics.title'),
|
||||
description: t('articles.analytics.performanceMetrics.description'),
|
||||
readTime: `${t('articles.analytics.performanceMetrics.readTime')} ${t('docs.readTime')}`,
|
||||
difficulty: 'intermediate',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'account',
|
||||
title: 'Gestión de Cuenta',
|
||||
description: 'Administra tu perfil y equipo',
|
||||
title: t('categories.account.title'),
|
||||
description: t('categories.account.description'),
|
||||
icon: Settings,
|
||||
articles: [
|
||||
{
|
||||
@@ -196,8 +197,8 @@ const DocumentationPage: React.FC = () => {
|
||||
},
|
||||
{
|
||||
id: 'billing',
|
||||
title: 'Facturación y Planes',
|
||||
description: 'Suscripciones, pagos y facturas',
|
||||
title: t('categories.billing.title'),
|
||||
description: t('categories.billing.description'),
|
||||
icon: CreditCard,
|
||||
articles: [
|
||||
{
|
||||
@@ -232,8 +233,8 @@ const DocumentationPage: React.FC = () => {
|
||||
},
|
||||
{
|
||||
id: 'privacy',
|
||||
title: 'Privacidad y Seguridad',
|
||||
description: 'RGPD, datos y cumplimiento',
|
||||
title: t('categories.privacy.title'),
|
||||
description: t('categories.privacy.description'),
|
||||
icon: Shield,
|
||||
articles: [
|
||||
{
|
||||
@@ -284,16 +285,161 @@ const DocumentationPage: React.FC = () => {
|
||||
};
|
||||
|
||||
const getDifficultyLabel = (difficulty: string) => {
|
||||
switch (difficulty) {
|
||||
case 'beginner':
|
||||
return 'Principiante';
|
||||
case 'intermediate':
|
||||
return 'Intermedio';
|
||||
case 'advanced':
|
||||
return 'Avanzado';
|
||||
default:
|
||||
return difficulty;
|
||||
}
|
||||
return t(`difficulty.${difficulty}` as any) || difficulty;
|
||||
};
|
||||
|
||||
const getCategoryKey = (sectionId: string): string => {
|
||||
const categoryMap: Record<string, string> = {
|
||||
'getting-started': 'gettingStarted',
|
||||
'features': 'features',
|
||||
'analytics': 'analytics',
|
||||
'account': 'account',
|
||||
'billing': 'billing',
|
||||
'privacy': 'privacy',
|
||||
};
|
||||
return categoryMap[sectionId] || sectionId;
|
||||
};
|
||||
|
||||
const getArticleKey = (articleId: string): string => {
|
||||
const articleMap: Record<string, string> = {
|
||||
'quick-start': 'quickStart',
|
||||
'import-data': 'importData',
|
||||
'products-catalog': 'productsCatalog',
|
||||
'first-prediction': 'firstPrediction',
|
||||
'demand-forecasting': 'demandForecasting',
|
||||
'production-planning': 'productionPlanning',
|
||||
'inventory-management': 'inventoryManagement',
|
||||
'pos-integration': 'posIntegration',
|
||||
'waste-tracking': 'wasteTracking',
|
||||
'dashboard-overview': 'dashboardOverview',
|
||||
'reports': 'reports',
|
||||
'ai-insights': 'aiInsights',
|
||||
'performance-metrics': 'performanceMetrics',
|
||||
};
|
||||
return articleMap[articleId] || articleId;
|
||||
};
|
||||
|
||||
const handleArticleClick = (sectionId: string, articleId: string) => {
|
||||
setSelectedArticle({ sectionId, articleId });
|
||||
window.scrollTo({ top: 0, behavior: 'smooth' });
|
||||
};
|
||||
|
||||
const handleBackToList = () => {
|
||||
setSelectedArticle(null);
|
||||
};
|
||||
|
||||
const renderArticleContent = () => {
|
||||
if (!selectedArticle) return null;
|
||||
|
||||
const categoryKey = getCategoryKey(selectedArticle.sectionId);
|
||||
const articleKey = getArticleKey(selectedArticle.articleId);
|
||||
const contentPath = `articles.${categoryKey}.${articleKey}.content`;
|
||||
|
||||
const content: any = t(contentPath, { returnObjects: true });
|
||||
const article = sections
|
||||
.find((s) => s.id === selectedArticle.sectionId)
|
||||
?.articles.find((a) => a.id === selectedArticle.articleId);
|
||||
|
||||
if (!article || !content) return null;
|
||||
|
||||
return (
|
||||
<div>
|
||||
{/* Back Button */}
|
||||
<button
|
||||
onClick={handleBackToList}
|
||||
className="mb-6 flex items-center gap-2 text-[var(--color-primary)] hover:underline"
|
||||
>
|
||||
<ChevronRight className="w-5 h-5 transform rotate-180" />
|
||||
<span>{t('docs.backToHelp')}</span>
|
||||
</button>
|
||||
|
||||
{/* Article Header */}
|
||||
<div className="mb-8 pb-8 border-b border-[var(--border-primary)]">
|
||||
<h1 className="text-4xl font-extrabold text-[var(--text-primary)] mb-4">
|
||||
{article.title}
|
||||
</h1>
|
||||
<p className="text-xl text-[var(--text-secondary)] mb-4">{article.description}</p>
|
||||
<div className="flex items-center gap-4 text-sm">
|
||||
<span className="flex items-center gap-1 text-[var(--text-tertiary)]">
|
||||
<PlayCircle className="w-4 h-4" />
|
||||
{article.readTime}
|
||||
</span>
|
||||
<span className={`font-medium ${getDifficultyColor(article.difficulty)}`}>
|
||||
{getDifficultyLabel(article.difficulty)}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Article Content */}
|
||||
<div className="prose prose-lg dark:prose-invert max-w-none">
|
||||
{/* Intro */}
|
||||
{content.intro && (
|
||||
<div className="bg-[var(--color-primary)]/5 border-l-4 border-[var(--color-primary)] p-6 rounded-r-xl mb-8">
|
||||
<p className="text-[var(--text-primary)] text-lg leading-relaxed m-0">
|
||||
{content.intro}
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Steps */}
|
||||
{content.steps && Array.isArray(content.steps) && (
|
||||
<div className="space-y-6 mb-8">
|
||||
{content.steps.map((step: any, index: number) => (
|
||||
<div
|
||||
key={index}
|
||||
className="bg-[var(--bg-secondary)] rounded-xl p-6 border border-[var(--border-primary)]"
|
||||
>
|
||||
<h3 className="text-xl font-bold text-[var(--text-primary)] mb-3 mt-0">
|
||||
{step.title}
|
||||
</h3>
|
||||
<p className="text-[var(--text-secondary)] leading-relaxed m-0">
|
||||
{step.description}
|
||||
</p>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Tips */}
|
||||
{content.tips && Array.isArray(content.tips) && content.tips.length > 0 && (
|
||||
<div className="bg-amber-50 dark:bg-amber-900/20 border-2 border-amber-200 dark:border-amber-800 rounded-xl p-6 mb-8">
|
||||
<h3 className="text-xl font-bold text-[var(--text-primary)] mb-4 mt-0 flex items-center gap-2">
|
||||
<Info className="w-6 h-6 text-amber-600" />
|
||||
<span>Consejos Útiles</span>
|
||||
</h3>
|
||||
<ul className="space-y-2 m-0 pl-0 list-none">
|
||||
{content.tips.map((tip: string, index: number) => (
|
||||
<li key={index} className="flex items-start gap-3">
|
||||
<CheckCircle2 className="w-5 h-5 text-amber-600 flex-shrink-0 mt-0.5" />
|
||||
<span className="text-[var(--text-secondary)]">{tip}</span>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Conclusion */}
|
||||
{content.conclusion && (
|
||||
<div className="bg-green-50 dark:bg-green-900/20 border-l-4 border-green-600 p-6 rounded-r-xl">
|
||||
<p className="text-[var(--text-primary)] leading-relaxed m-0">
|
||||
{content.conclusion}
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* Back to List Button */}
|
||||
<div className="mt-12 pt-8 border-t border-[var(--border-primary)]">
|
||||
<button
|
||||
onClick={handleBackToList}
|
||||
className="flex items-center gap-2 px-6 py-3 bg-[var(--color-primary)] text-white rounded-xl font-bold hover:shadow-xl transition-all"
|
||||
>
|
||||
<ChevronRight className="w-5 h-5 transform rotate-180" />
|
||||
<span>Volver a la Lista</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
@@ -313,14 +459,13 @@ const DocumentationPage: React.FC = () => {
|
||||
<div className="text-center max-w-4xl mx-auto">
|
||||
<div className="inline-flex items-center gap-2 bg-[var(--color-primary)]/10 text-[var(--color-primary)] px-4 py-2 rounded-full text-sm font-medium mb-6">
|
||||
<FileText className="w-4 h-4" />
|
||||
<span>Documentación</span>
|
||||
<span>{t('docs.subtitle')}</span>
|
||||
</div>
|
||||
<h1 className="text-4xl lg:text-6xl font-extrabold text-[var(--text-primary)] mb-6">
|
||||
Guías Completas Para
|
||||
<span className="block text-[var(--color-primary)]">Dominar Panadería IA</span>
|
||||
{t('docs.title')}
|
||||
</h1>
|
||||
<p className="text-xl text-[var(--text-secondary)] leading-relaxed mb-8">
|
||||
Tutoriales paso a paso, mejores prácticas y trucos para aprovechar al máximo la plataforma
|
||||
{t('docs.description')}
|
||||
</p>
|
||||
|
||||
{/* Quick Actions */}
|
||||
@@ -331,14 +476,14 @@ const DocumentationPage: React.FC = () => {
|
||||
className="inline-flex items-center gap-2 px-6 py-3 bg-[var(--color-primary)] text-white rounded-xl font-bold hover:shadow-xl transition-all hover:scale-105"
|
||||
>
|
||||
<Rocket className="w-5 h-5" />
|
||||
<span>Comenzar</span>
|
||||
<span>{t('docs.getStarted')}</span>
|
||||
</a>
|
||||
<Link
|
||||
to="/help"
|
||||
className="inline-flex items-center gap-2 px-6 py-3 border-2 border-[var(--border-primary)] text-[var(--text-primary)] rounded-xl font-medium hover:border-[var(--color-primary)] transition-all"
|
||||
>
|
||||
<HelpCircle className="w-5 h-5" />
|
||||
<span>Centro de Ayuda</span>
|
||||
<span>{t('docs.backToHelp')}</span>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
@@ -353,13 +498,16 @@ const DocumentationPage: React.FC = () => {
|
||||
<div className="lg:col-span-1">
|
||||
<div className="sticky top-8">
|
||||
<h3 className="text-lg font-bold text-[var(--text-primary)] mb-4">
|
||||
Secciones
|
||||
{t('docs.sectionsTitle')}
|
||||
</h3>
|
||||
<nav className="space-y-2">
|
||||
{sections.map((section) => (
|
||||
<button
|
||||
key={section.id}
|
||||
onClick={() => setActiveSection(section.id)}
|
||||
onClick={() => {
|
||||
setActiveSection(section.id);
|
||||
setSelectedArticle(null);
|
||||
}}
|
||||
className={`w-full flex items-center gap-3 px-4 py-3 rounded-xl text-left transition-all ${
|
||||
activeSection === section.id
|
||||
? 'bg-[var(--color-primary)] text-white'
|
||||
@@ -374,7 +522,7 @@ const DocumentationPage: React.FC = () => {
|
||||
activeSection === section.id ? 'text-white/80' : 'text-[var(--text-tertiary)]'
|
||||
}`}
|
||||
>
|
||||
{section.articles.length} artículos
|
||||
{section.articles.length} {t('docs.articlesCount')}
|
||||
</div>
|
||||
</div>
|
||||
</button>
|
||||
@@ -384,7 +532,7 @@ const DocumentationPage: React.FC = () => {
|
||||
{/* Quick Links */}
|
||||
<div className="mt-8 p-4 bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-primary)]">
|
||||
<h4 className="font-bold text-[var(--text-primary)] mb-3 text-sm">
|
||||
Enlaces Rápidos
|
||||
{t('docs.quickLinks')}
|
||||
</h4>
|
||||
<div className="space-y-2 text-sm">
|
||||
<Link
|
||||
@@ -392,21 +540,21 @@ const DocumentationPage: React.FC = () => {
|
||||
className="flex items-center gap-2 text-[var(--text-secondary)] hover:text-[var(--color-primary)] transition-colors"
|
||||
>
|
||||
<HelpCircle className="w-4 h-4" />
|
||||
<span>Centro de Ayuda</span>
|
||||
<span>{t('docs.backToHelp')}</span>
|
||||
</Link>
|
||||
<Link
|
||||
to="/help/support"
|
||||
className="flex items-center gap-2 text-[var(--text-secondary)] hover:text-[var(--color-primary)] transition-colors"
|
||||
>
|
||||
<ExternalLink className="w-4 h-4" />
|
||||
<span>Contactar Soporte</span>
|
||||
<span>{t('docs.contactSupport')}</span>
|
||||
</Link>
|
||||
<a
|
||||
href="#"
|
||||
className="flex items-center gap-2 text-[var(--text-secondary)] hover:text-[var(--color-primary)] transition-colors"
|
||||
>
|
||||
<Download className="w-4 h-4" />
|
||||
<span>Descargar PDF</span>
|
||||
<span>{t('docs.downloadPdf')}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -415,53 +563,57 @@ const DocumentationPage: React.FC = () => {
|
||||
|
||||
{/* Main Content */}
|
||||
<div className="lg:col-span-3">
|
||||
{activeContent && (
|
||||
<div>
|
||||
{/* Section Header */}
|
||||
<div className="mb-8">
|
||||
<div className="flex items-center gap-4 mb-4">
|
||||
<div className="w-12 h-12 bg-[var(--color-primary)]/10 rounded-xl flex items-center justify-center">
|
||||
<activeContent.icon className="w-6 h-6 text-[var(--color-primary)]" />
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="text-3xl font-extrabold text-[var(--text-primary)]">
|
||||
{activeContent.title}
|
||||
</h2>
|
||||
<p className="text-[var(--text-secondary)]">{activeContent.description}</p>
|
||||
{selectedArticle ? (
|
||||
renderArticleContent()
|
||||
) : (
|
||||
activeContent && (
|
||||
<div>
|
||||
{/* Section Header */}
|
||||
<div className="mb-8">
|
||||
<div className="flex items-center gap-4 mb-4">
|
||||
<div className="w-12 h-12 bg-[var(--color-primary)]/10 rounded-xl flex items-center justify-center">
|
||||
<activeContent.icon className="w-6 h-6 text-[var(--color-primary)]" />
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="text-3xl font-extrabold text-[var(--text-primary)]">
|
||||
{activeContent.title}
|
||||
</h2>
|
||||
<p className="text-[var(--text-secondary)]">{activeContent.description}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Articles Grid */}
|
||||
<div className="space-y-4">
|
||||
{activeContent.articles.map((article) => (
|
||||
<a
|
||||
key={article.id}
|
||||
href={`#${article.id}`}
|
||||
className="block bg-[var(--bg-secondary)] rounded-xl p-6 border border-[var(--border-primary)] hover:border-[var(--color-primary)] hover:shadow-xl transition-all group"
|
||||
>
|
||||
<div className="flex items-start justify-between gap-4">
|
||||
<div className="flex-1">
|
||||
<h3 className="text-xl font-bold text-[var(--text-primary)] mb-2 group-hover:text-[var(--color-primary)] transition-colors">
|
||||
{article.title}
|
||||
</h3>
|
||||
<p className="text-[var(--text-secondary)] mb-4">{article.description}</p>
|
||||
<div className="flex items-center gap-4 text-sm">
|
||||
<span className="flex items-center gap-1 text-[var(--text-tertiary)]">
|
||||
<PlayCircle className="w-4 h-4" />
|
||||
{article.readTime}
|
||||
</span>
|
||||
<span className={`font-medium ${getDifficultyColor(article.difficulty)}`}>
|
||||
{getDifficultyLabel(article.difficulty)}
|
||||
</span>
|
||||
{/* Articles Grid */}
|
||||
<div className="space-y-4">
|
||||
{activeContent.articles.map((article) => (
|
||||
<button
|
||||
key={article.id}
|
||||
onClick={() => handleArticleClick(activeSection, article.id)}
|
||||
className="w-full block bg-[var(--bg-secondary)] rounded-xl p-6 border border-[var(--border-primary)] hover:border-[var(--color-primary)] hover:shadow-xl transition-all group text-left"
|
||||
>
|
||||
<div className="flex items-start justify-between gap-4">
|
||||
<div className="flex-1">
|
||||
<h3 className="text-xl font-bold text-[var(--text-primary)] mb-2 group-hover:text-[var(--color-primary)] transition-colors">
|
||||
{article.title}
|
||||
</h3>
|
||||
<p className="text-[var(--text-secondary)] mb-4">{article.description}</p>
|
||||
<div className="flex items-center gap-4 text-sm">
|
||||
<span className="flex items-center gap-1 text-[var(--text-tertiary)]">
|
||||
<PlayCircle className="w-4 h-4" />
|
||||
{article.readTime}
|
||||
</span>
|
||||
<span className={`font-medium ${getDifficultyColor(article.difficulty)}`}>
|
||||
{getDifficultyLabel(article.difficulty)}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<ChevronRight className="w-6 h-6 text-[var(--text-tertiary)] group-hover:text-[var(--color-primary)] transition-colors flex-shrink-0" />
|
||||
</div>
|
||||
<ChevronRight className="w-6 h-6 text-[var(--text-tertiary)] group-hover:text-[var(--color-primary)] transition-colors flex-shrink-0" />
|
||||
</div>
|
||||
</a>
|
||||
))}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
@@ -473,10 +625,10 @@ const DocumentationPage: React.FC = () => {
|
||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div className="text-center mb-12">
|
||||
<h2 className="text-3xl lg:text-4xl font-extrabold text-[var(--text-primary)] mb-4">
|
||||
Tutoriales en Vídeo
|
||||
{t('docs.videoTutorialsTitle')}
|
||||
</h2>
|
||||
<p className="text-xl text-[var(--text-secondary)]">
|
||||
Aprende viendo (próximamente)
|
||||
{t('docs.videoTutorialsSubtitle')}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -524,7 +676,7 @@ const DocumentationPage: React.FC = () => {
|
||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div className="text-center mb-12">
|
||||
<h2 className="text-3xl lg:text-4xl font-extrabold text-[var(--text-primary)] mb-4">
|
||||
Recursos Adicionales
|
||||
{t('docs.additionalResourcesTitle')}
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
@@ -532,39 +684,39 @@ const DocumentationPage: React.FC = () => {
|
||||
<div className="bg-blue-50 dark:bg-blue-900/20 rounded-2xl p-6 border-2 border-blue-200 dark:border-blue-800">
|
||||
<Info className="w-8 h-8 text-blue-600 mb-4" />
|
||||
<h3 className="text-lg font-bold text-[var(--text-primary)] mb-2">
|
||||
Glosario de Términos
|
||||
{t('resources.glossary.title')}
|
||||
</h3>
|
||||
<p className="text-sm text-[var(--text-secondary)] mb-4">
|
||||
Definiciones de conceptos clave y terminología técnica
|
||||
{t('resources.glossary.description')}
|
||||
</p>
|
||||
<a href="#glossary" className="text-blue-600 hover:underline font-medium text-sm">
|
||||
Ver Glosario →
|
||||
{t('resources.glossary.action')} →
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div className="bg-amber-50 dark:bg-amber-900/20 rounded-2xl p-6 border-2 border-amber-200 dark:border-amber-800">
|
||||
<AlertCircle className="w-8 h-8 text-amber-600 mb-4" />
|
||||
<h3 className="text-lg font-bold text-[var(--text-primary)] mb-2">
|
||||
Solución de Problemas
|
||||
{t('resources.troubleshooting.title')}
|
||||
</h3>
|
||||
<p className="text-sm text-[var(--text-secondary)] mb-4">
|
||||
Errores comunes y cómo resolverlos rápidamente
|
||||
{t('resources.troubleshooting.description')}
|
||||
</p>
|
||||
<Link to="/help" className="text-amber-600 hover:underline font-medium text-sm">
|
||||
Ver Soluciones →
|
||||
{t('resources.troubleshooting.action')} →
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
<div className="bg-green-50 dark:bg-green-900/20 rounded-2xl p-6 border-2 border-green-200 dark:border-green-800">
|
||||
<CheckCircle2 className="w-8 h-8 text-green-600 mb-4" />
|
||||
<h3 className="text-lg font-bold text-[var(--text-primary)] mb-2">
|
||||
Mejores Prácticas
|
||||
{t('resources.bestPractices.title')}
|
||||
</h3>
|
||||
<p className="text-sm text-[var(--text-secondary)] mb-4">
|
||||
Tips y consejos de expertos para optimizar tu uso
|
||||
{t('resources.bestPractices.description')}
|
||||
</p>
|
||||
<a href="#best-practices" className="text-green-600 hover:underline font-medium text-sm">
|
||||
Leer Tips →
|
||||
{t('resources.bestPractices.action')} →
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -575,16 +727,16 @@ const DocumentationPage: React.FC = () => {
|
||||
<section className="py-20 bg-gradient-to-r from-[var(--color-primary)] to-orange-600">
|
||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
||||
<h2 className="text-3xl lg:text-4xl font-bold text-white mb-6">
|
||||
¿Listo Para Empezar?
|
||||
{t('docs.ctaTitle')}
|
||||
</h2>
|
||||
<p className="text-xl text-white/90 mb-8">
|
||||
Regístrate en el programa piloto y obtén 3 meses gratis
|
||||
{t('docs.ctaSubtitle')}
|
||||
</p>
|
||||
<Link
|
||||
to="/register"
|
||||
className="inline-flex items-center gap-2 px-8 py-4 bg-white text-[var(--color-primary)] rounded-xl font-bold hover:shadow-2xl transition-all hover:scale-105"
|
||||
>
|
||||
<span>Crear Cuenta Gratis</span>
|
||||
<span>{t('docs.ctaButton')}</span>
|
||||
<ChevronRight className="w-5 h-5" />
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
@@ -37,132 +37,56 @@ interface HelpCategory {
|
||||
}
|
||||
|
||||
const HelpCenterPage: React.FC = () => {
|
||||
const { t } = useTranslation();
|
||||
const { t } = useTranslation('help');
|
||||
const [searchQuery, setSearchQuery] = useState('');
|
||||
const [expandedFAQ, setExpandedFAQ] = useState<number | null>(null);
|
||||
|
||||
const categories: HelpCategory[] = [
|
||||
{
|
||||
id: 'getting-started',
|
||||
title: 'Primeros Pasos',
|
||||
description: 'Configura tu cuenta y aprende los conceptos básicos',
|
||||
title: t('categories.gettingStarted.title'),
|
||||
description: t('categories.gettingStarted.description'),
|
||||
icon: BookOpen,
|
||||
link: '/help/docs#getting-started',
|
||||
},
|
||||
{
|
||||
id: 'features',
|
||||
title: 'Funcionalidades',
|
||||
description: 'Guías completas sobre todas las características',
|
||||
title: t('categories.features.title'),
|
||||
description: t('categories.features.description'),
|
||||
icon: Package,
|
||||
link: '/help/docs#features',
|
||||
},
|
||||
{
|
||||
id: 'billing',
|
||||
title: 'Facturación y Planes',
|
||||
description: 'Información sobre precios, pagos y suscripciones',
|
||||
title: t('categories.billing.title'),
|
||||
description: t('categories.billing.description'),
|
||||
icon: CreditCard,
|
||||
link: '/help/docs#billing',
|
||||
},
|
||||
{
|
||||
id: 'account',
|
||||
title: 'Gestión de Cuenta',
|
||||
description: 'Administra tu perfil, equipo y configuración',
|
||||
title: t('categories.account.title'),
|
||||
description: t('categories.account.description'),
|
||||
icon: Settings,
|
||||
link: '/help/docs#account',
|
||||
},
|
||||
{
|
||||
id: 'privacy',
|
||||
title: 'Privacidad y Seguridad',
|
||||
description: 'RGPD, seguridad de datos y cumplimiento',
|
||||
title: t('categories.privacy.title'),
|
||||
description: t('categories.privacy.description'),
|
||||
icon: Shield,
|
||||
link: '/help/docs#privacy',
|
||||
},
|
||||
{
|
||||
id: 'analytics',
|
||||
title: 'Análisis y Predicciones',
|
||||
description: 'Interpreta datos e insights de IA',
|
||||
title: t('categories.analytics.title'),
|
||||
description: t('categories.analytics.description'),
|
||||
icon: TrendingUp,
|
||||
link: '/help/docs#analytics',
|
||||
},
|
||||
];
|
||||
|
||||
const faqs: FAQItem[] = [
|
||||
{
|
||||
category: 'general',
|
||||
question: '¿Qué es Panadería IA y cómo funciona?',
|
||||
answer: 'Panadería IA es una plataforma de gestión inteligente para panaderías. Utiliza inteligencia artificial para predecir la demanda de tus productos, optimizar la producción, reducir desperdicios y aumentar la rentabilidad. Conectas tus datos de ventas históricas y el sistema aprende tus patrones para hacer predicciones precisas.',
|
||||
},
|
||||
{
|
||||
category: 'general',
|
||||
question: '¿Cuánto tiempo toma configurar el sistema?',
|
||||
answer: 'La configuración inicial toma entre 10-15 minutos. Necesitas: 1) Crear tu cuenta, 2) Subir tu catálogo de productos, 3) Importar historial de ventas (opcional pero recomendado), 4) Configurar preferencias básicas. El sistema empieza a generar predicciones desde el primer día, mejorando su precisión con el tiempo.',
|
||||
},
|
||||
{
|
||||
category: 'general',
|
||||
question: '¿Necesito conocimientos técnicos para usarlo?',
|
||||
answer: 'No. Panadería IA está diseñado para panaderos, no para ingenieros. La interfaz es intuitiva, con tutoriales paso a paso. Si sabes usar WhatsApp o un correo electrónico, puedes usar nuestra plataforma. Además, ofrecemos soporte 24/7 en español.',
|
||||
},
|
||||
{
|
||||
category: 'pricing',
|
||||
question: '¿Cuánto cuesta el programa piloto?',
|
||||
answer: 'El programa piloto es GRATIS durante los primeros 3 meses. Después, pagas solo €49/mes con un 20% de descuento de por vida (precio normal: €79/mes). Sin contratos de permanencia, cancela cuando quieras. Las primeras 20 panaderías obtienen este beneficio.',
|
||||
},
|
||||
{
|
||||
category: 'pricing',
|
||||
question: '¿Necesito tarjeta de crédito para empezar el piloto?',
|
||||
answer: 'SÍ, necesitas registrar una tarjeta, pero NO se te cobrará durante los 3 meses de prueba gratuita. Esto nos ayuda a asegurar que solo participan panaderías realmente interesadas. Puedes cancelar antes de que termine el periodo gratuito sin ningún cargo.',
|
||||
},
|
||||
{
|
||||
category: 'pricing',
|
||||
question: '¿Qué pasa después de los 3 meses gratis?',
|
||||
answer: 'Tienes 3 opciones: 1) Continuar con el plan Basic (€49/mes con tu descuento del 20%), 2) Actualizar a un plan superior, 3) Cancelar sin penalización. Te avisaremos 7 días antes de que termine tu periodo gratuito.',
|
||||
},
|
||||
{
|
||||
category: 'technical',
|
||||
question: '¿Cómo importo mis datos históricos de ventas?',
|
||||
answer: 'Aceptamos varios formatos: Excel (.xlsx), CSV, o exportaciones directas de tu TPV si es compatible. También puedes introducir datos manualmente si prefieres. Cuanto más historial proporciones (recomendamos mínimo 3 meses), más precisas serán las predicciones.',
|
||||
},
|
||||
{
|
||||
category: 'technical',
|
||||
question: '¿El sistema se integra con mi TPV actual?',
|
||||
answer: 'Actualmente estamos trabajando en integraciones directas con los principales TPV del mercado español. Por ahora, puedes exportar datos de tu TPV e importarlos manualmente (es más fácil de lo que suena). Las integraciones automáticas llegarán en Q2 2025.',
|
||||
},
|
||||
{
|
||||
category: 'technical',
|
||||
question: '¿Qué pasa si mis predicciones no son precisas?',
|
||||
answer: 'El sistema mejora con el tiempo. Las primeras semanas puede tener un margen de error del 15-20%. Después del primer mes, esto baja al 10%. Con 3+ meses de datos, alcanzamos >90% de precisión. Puedes ajustar manualmente las predicciones y el sistema aprende de tus correcciones.',
|
||||
},
|
||||
{
|
||||
category: 'privacy',
|
||||
question: '¿Dónde se almacenan mis datos?',
|
||||
answer: 'TODOS tus datos se almacenan en servidores físicamente ubicados en España (Barcelona y Madrid), cumpliendo 100% con RGPD. Nunca compartimos, vendemos ni transferimos tus datos fuera de la UE. Tienes control total y puedes exportar o eliminar tus datos en cualquier momento.',
|
||||
},
|
||||
{
|
||||
category: 'privacy',
|
||||
question: '¿Quién puede ver mis datos de ventas?',
|
||||
answer: 'Solo TÚ y los miembros de tu equipo que tú autorices. Ni siquiera nuestro equipo técnico puede acceder a tus datos sin tu permiso explícito (y solo lo haríamos para soporte técnico con tu aprobación). Los datos están encriptados end-to-end.',
|
||||
},
|
||||
{
|
||||
category: 'support',
|
||||
question: '¿Qué tipo de soporte ofrecen?',
|
||||
answer: 'Soporte 24/7 en español por: Email (respuesta en <4h), Chat en vivo (9:00-21:00), Videollamada (con cita previa). Durante el piloto, también tienes acceso directo a los fundadores por WhatsApp. Además, biblioteca completa de tutoriales en vídeo.',
|
||||
},
|
||||
{
|
||||
category: 'support',
|
||||
question: '¿Puedo hablar con alguien antes de registrarme?',
|
||||
answer: 'Por supuesto. Agenda una videollamada de 15 minutos con nuestro equipo para ver el producto en acción, hacer todas tus preguntas y confirmar que es adecuado para tu panadería. Sin compromiso. Contacto: hola@panaderia-ia.com o el formulario de contacto.',
|
||||
},
|
||||
{
|
||||
category: 'general',
|
||||
question: '¿Funciona para obradores centrales con múltiples puntos de venta?',
|
||||
answer: 'SÍ. Nuestro sistema está diseñado para adaptarse a ambos modelos: producción local (un solo punto) y obrador central con distribución a múltiples puntos de venta. Para obradores centrales, ofrecemos predicción de demanda agregada y granular por cada POS, gestión de distribución multi-ubicación, y un dashboard centralizado con visibilidad por punto de venta. La IA optimiza tanto la producción total como la distribución entre ubicaciones.',
|
||||
},
|
||||
{
|
||||
category: 'general',
|
||||
question: '¿Qué modelo de negocio es mejor para mi panadería?',
|
||||
answer: 'Depende de tus objetivos. Producción Local es ideal si valoras máximo control, flexibilidad y frescura instantánea, o si estás empezando. Obrador Central + Puntos de Venta es mejor si quieres escalar a múltiples ubicaciones, aprovechar economías de escala, o tener presencia en varios barrios/ciudades. Lo bueno: nuestro sistema funciona para ambos modelos y puede evolucionar contigo si decides cambiar o crecer.',
|
||||
},
|
||||
];
|
||||
const faqs: FAQItem[] = t('faqs', { returnObjects: true }) as FAQItem[];
|
||||
|
||||
const filteredFAQs = searchQuery
|
||||
? faqs.filter(
|
||||
@@ -193,14 +117,13 @@ const HelpCenterPage: React.FC = () => {
|
||||
<div className="text-center max-w-4xl mx-auto">
|
||||
<div className="inline-flex items-center gap-2 bg-[var(--color-primary)]/10 text-[var(--color-primary)] px-4 py-2 rounded-full text-sm font-medium mb-6">
|
||||
<HelpCircle className="w-4 h-4" />
|
||||
<span>Centro de Ayuda</span>
|
||||
<span>{t('helpCenter.subtitle')}</span>
|
||||
</div>
|
||||
<h1 className="text-4xl lg:text-6xl font-extrabold text-[var(--text-primary)] mb-6">
|
||||
¿Cómo Podemos
|
||||
<span className="block text-[var(--color-primary)]">Ayudarte Hoy?</span>
|
||||
{t('helpCenter.title')}
|
||||
</h1>
|
||||
<p className="text-xl text-[var(--text-secondary)] leading-relaxed mb-8">
|
||||
Encuentra respuestas rápidas, guías completas y contacto directo con nuestro equipo
|
||||
{t('helpCenter.description')}
|
||||
</p>
|
||||
|
||||
{/* Search Bar */}
|
||||
@@ -209,7 +132,7 @@ const HelpCenterPage: React.FC = () => {
|
||||
<Search className="absolute left-4 top-1/2 -translate-y-1/2 w-5 h-5 text-[var(--text-tertiary)]" />
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Buscar en la ayuda... (ej: ¿cómo importo datos?)"
|
||||
placeholder={t('helpCenter.searchPlaceholder')}
|
||||
value={searchQuery}
|
||||
onChange={(e) => setSearchQuery(e.target.value)}
|
||||
className="w-full pl-12 pr-4 py-4 bg-[var(--bg-primary)] border-2 border-[var(--border-primary)] rounded-xl text-[var(--text-primary)] placeholder:text-[var(--text-tertiary)] focus:outline-none focus:border-[var(--color-primary)] transition-colors"
|
||||
@@ -225,10 +148,10 @@ const HelpCenterPage: React.FC = () => {
|
||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div className="text-center mb-12">
|
||||
<h2 className="text-3xl lg:text-4xl font-extrabold text-[var(--text-primary)] mb-4">
|
||||
Explora por Categoría
|
||||
{t('helpCenter.categoriesTitle')}
|
||||
</h2>
|
||||
<p className="text-xl text-[var(--text-secondary)]">
|
||||
Encuentra lo que necesitas más rápido
|
||||
{t('helpCenter.categoriesSubtitle')}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -261,11 +184,11 @@ const HelpCenterPage: React.FC = () => {
|
||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div className="text-center mb-12">
|
||||
<h2 className="text-3xl lg:text-4xl font-extrabold text-[var(--text-primary)] mb-4">
|
||||
Preguntas Frecuentes
|
||||
{t('helpCenter.faqTitle')}
|
||||
</h2>
|
||||
<p className="text-xl text-[var(--text-secondary)]">
|
||||
{filteredFAQs.length} {filteredFAQs.length === 1 ? 'respuesta' : 'respuestas'}{' '}
|
||||
{searchQuery && 'encontradas'}
|
||||
{t('helpCenter.faqResultsCount', { count: filteredFAQs.length })}{' '}
|
||||
{searchQuery && t('helpCenter.faqFound')}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -301,9 +224,9 @@ const HelpCenterPage: React.FC = () => {
|
||||
<div className="text-center py-12">
|
||||
<HelpCircle className="w-16 h-16 text-[var(--text-tertiary)] mx-auto mb-4" />
|
||||
<p className="text-[var(--text-secondary)] text-lg">
|
||||
No encontramos resultados para "{searchQuery}".{' '}
|
||||
{t('helpCenter.noResultsTitle')} "{searchQuery}".{' '}
|
||||
<Link to="/help/support" className="text-[var(--color-primary)] hover:underline">
|
||||
Contacta con soporte
|
||||
{t('helpCenter.noResultsAction')}
|
||||
</Link>
|
||||
</p>
|
||||
</div>
|
||||
@@ -316,10 +239,10 @@ const HelpCenterPage: React.FC = () => {
|
||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div className="text-center mb-12">
|
||||
<h2 className="text-3xl lg:text-4xl font-extrabold text-[var(--text-primary)] mb-4">
|
||||
¿No Encuentras lo Que Buscas?
|
||||
{t('helpCenter.contactTitle')}
|
||||
</h2>
|
||||
<p className="text-xl text-[var(--text-secondary)]">
|
||||
Nuestro equipo está aquí para ayudarte
|
||||
{t('helpCenter.contactSubtitle')}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -332,31 +255,31 @@ const HelpCenterPage: React.FC = () => {
|
||||
<MessageSquare className="w-8 h-8 text-[var(--color-primary)] group-hover:text-white transition-colors" />
|
||||
</div>
|
||||
<h3 className="text-xl font-bold text-[var(--text-primary)] mb-2">
|
||||
Chat en Vivo
|
||||
{t('contact.liveChat.title')}
|
||||
</h3>
|
||||
<p className="text-sm text-[var(--text-secondary)] mb-4">
|
||||
Respuesta inmediata de 9:00 a 21:00
|
||||
{t('contact.liveChat.description')}
|
||||
</p>
|
||||
<span className="text-[var(--color-primary)] font-medium group-hover:underline">
|
||||
Iniciar Chat →
|
||||
{t('contact.liveChat.action')} →
|
||||
</span>
|
||||
</Link>
|
||||
|
||||
<a
|
||||
href="mailto:soporte@panaderia-ia.com"
|
||||
href={`mailto:${t('contact.email.address')}`}
|
||||
className="bg-[var(--bg-secondary)] rounded-2xl p-8 border border-[var(--border-primary)] hover:border-[var(--color-primary)] hover:shadow-xl transition-all text-center group"
|
||||
>
|
||||
<div className="w-16 h-16 bg-[var(--color-primary)]/10 rounded-full flex items-center justify-center mx-auto mb-4 group-hover:bg-[var(--color-primary)] transition-colors">
|
||||
<Mail className="w-8 h-8 text-[var(--color-primary)] group-hover:text-white transition-colors" />
|
||||
</div>
|
||||
<h3 className="text-xl font-bold text-[var(--text-primary)] mb-2">
|
||||
Email
|
||||
{t('contact.email.title')}
|
||||
</h3>
|
||||
<p className="text-sm text-[var(--text-secondary)] mb-4">
|
||||
Respuesta en menos de 4 horas
|
||||
{t('contact.email.description')}
|
||||
</p>
|
||||
<span className="text-[var(--color-primary)] font-medium group-hover:underline">
|
||||
Enviar Email →
|
||||
{t('contact.email.action')} →
|
||||
</span>
|
||||
</a>
|
||||
|
||||
@@ -368,13 +291,13 @@ const HelpCenterPage: React.FC = () => {
|
||||
<FileText className="w-8 h-8 text-[var(--color-primary)] group-hover:text-white transition-colors" />
|
||||
</div>
|
||||
<h3 className="text-xl font-bold text-[var(--text-primary)] mb-2">
|
||||
Documentación
|
||||
{t('contact.documentation.title')}
|
||||
</h3>
|
||||
<p className="text-sm text-[var(--text-secondary)] mb-4">
|
||||
Guías completas y tutoriales
|
||||
{t('contact.documentation.description')}
|
||||
</p>
|
||||
<span className="text-[var(--color-primary)] font-medium group-hover:underline">
|
||||
Ver Docs →
|
||||
{t('contact.documentation.action')} →
|
||||
</span>
|
||||
</Link>
|
||||
</div>
|
||||
@@ -389,12 +312,12 @@ const HelpCenterPage: React.FC = () => {
|
||||
<Clock className="w-6 h-6 text-[var(--color-primary)] flex-shrink-0 mt-1" />
|
||||
<div>
|
||||
<h3 className="text-lg font-bold text-[var(--text-primary)] mb-2">
|
||||
Horario de Atención
|
||||
{t('helpCenter.contactHours')}
|
||||
</h3>
|
||||
<div className="space-y-1 text-sm text-[var(--text-secondary)]">
|
||||
<p><strong>Chat en Vivo:</strong> Lunes a Viernes 9:00 - 21:00, Sábados 10:00 - 18:00</p>
|
||||
<p><strong>Email:</strong> 24/7 (respuesta en menos de 4 horas en horario laboral)</p>
|
||||
<p><strong>Teléfono:</strong> Lunes a Viernes 10:00 - 19:00 (solo para clientes activos)</p>
|
||||
<p><strong>{t('contact.liveChat.title')}:</strong> {t('contact.hours.liveChat')}</p>
|
||||
<p><strong>{t('contact.email.title')}:</strong> {t('contact.hours.email')}</p>
|
||||
<p><strong>Teléfono:</strong> {t('contact.hours.phone')}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user