canina/.ai_agency/memory/backlog.json

908 lines
50 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"tasks": [
{
"id": "EPIC-01-TASK-01",
"title": "Backend NestJS: HeroBanners, VetTestimonials & SmartAdvisorRules CMS Module",
"description": "Create NestJS backend module (controllers, services, DTOs) for full CRUD management of HeroBanners, VetTestimonials, and SmartAdvisorRules under /api/v1/admin/* and public endpoints.",
"architectural_layer": "business_logic",
"assigned_role": "05_dev_backend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 5,
"estimated_minutes": 30,
"dependency_task_ids": [],
"acceptance_criteria": [
"ایجاد سرویس‌ها و کنترلرهای CMS برای بنرها، نظرات دامپزشکان و قوانین دستیار هوشمند",
"پشتیبانی کامل از CRUD در مسیرهای /api/v1/admin/* با احراز هویت ادمین"
],
"sub_steps": [
{ "index": 1, "name": "create_cms_dto", "description": "Create DTOs for HeroBanner, VetTestimonial, SmartAdvisorRule", "status": "done" },
{ "index": 2, "name": "create_cms_service", "description": "Implement CmsService in backend", "status": "done" },
{ "index": 3, "name": "create_cms_controller", "description": "Implement CmsController under /api/v1/admin/cms and /api/v1/cms", "status": "done" }
]
},
{
"id": "EPIC-01-TASK-02",
"title": "Backend NestJS: B2B Wholesale Application & License Upload API",
"description": "Create endpoints for B2B wholesale license upload (/api/v1/wholesale/apply) and admin verification approval (/api/v1/admin/wholesale/requests) to upgrade user roles to User_Wholesale.",
"architectural_layer": "business_logic",
"assigned_role": "05_dev_backend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 4,
"estimated_minutes": 25,
"dependency_task_ids": ["EPIC-01-TASK-01"],
"acceptance_criteria": [
"ثبت درخواست همکاری عمده‌فروشی و آپلود پروانه کلینیک/داروخانه",
"لیست‌گیری و تایید/رد درخواست‌ها در کنترلر Admin و ارتقای نقش کاربر"
],
"sub_steps": [
{ "index": 1, "name": "create_wholesale_dto", "description": "Create WholesaleApplyDto", "status": "done" },
{ "index": 2, "name": "create_wholesale_service", "description": "Implement WholesaleService", "status": "done" },
{ "index": 3, "name": "create_wholesale_controller", "description": "Implement WholesaleController in backend", "status": "done" }
]
},
{
"id": "EPIC-01-TASK-03",
"title": "Backend NestJS: Prescription Attachment & Rx Verification Module",
"description": "Create endpoints for attaching uploaded vet prescriptions to orders with requiresRx=true and admin prescription verification.",
"architectural_layer": "business_logic",
"assigned_role": "05_dev_backend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 20,
"dependency_task_ids": ["EPIC-01-TASK-02"],
"acceptance_criteria": [
"پشتیبانی از آپلود نسخه دارویی سگ و گربه و ثبت در سفارشات نسخه دار",
"تایید نسخه پزشکی توسط مدیر سیستم"
],
"sub_steps": [
{ "index": 1, "name": "add_rx_field_to_order", "description": "Update Order model/DTO with prescriptionUrl", "status": "done" },
{ "index": 2, "name": "implement_rx_verification", "description": "Implement prescription verification in OrdersService", "status": "done" }
]
},
{
"id": "EPIC-02-TASK-01",
"title": "Customer App Next.js: Dynamic Hero Slider & Vet Testimonials Integration",
"description": "Replace static arrays in Hero.tsx and VetGallery.tsx with dynamic API calls fetching live HeroBanner and VetTestimonial records from NestJS API.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 4,
"estimated_minutes": 25,
"dependency_task_ids": ["EPIC-01-TASK-01"],
"acceptance_criteria": [
"دریافت پویا و بدون داده هاردکد بنرهای اصلی و نظرات دامپزشکان",
"استفاده از next/image و رعایت کامل قواعد Next.js"
],
"sub_steps": [
{ "index": 1, "name": "wire_hero_component", "description": "Wire Hero.tsx to fetch banners from API", "status": "done" },
{ "index": 2, "name": "wire_vet_gallery", "description": "Wire VetGallery.tsx to fetch vet testimonials from API", "status": "done" }
]
},
{
"id": "EPIC-02-TASK-02",
"title": "Customer App Next.js: SmartAdvisor Dynamic Rules & Real Product Recommendations",
"description": "Wire SmartAdvisor.tsx to fetch live advisor rules and products dynamically from NestJS backend, displaying real medical rationales for recommended Canina products.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 25,
"dependency_task_ids": ["EPIC-02-TASK-01"],
"acceptance_criteria": [
"توصیه هوشمند محصولات کانینا بر اساس قوانین دیتابیس و علت تجویز پزشکی",
"محاسبه دوز دقیق دارویی بر اساس وزن بدن پت"
],
"sub_steps": [
{ "index": 1, "name": "connect_smart_advisor_api", "description": "Fetch SmartAdvisorRules from backend", "status": "done" },
{ "index": 2, "name": "render_medical_rationale", "description": "Render medical rationale and dosage calculation", "status": "done" }
]
},
{
"id": "EPIC-02-TASK-03",
"title": "Customer App Next.js: B2B Wholesale Portal & Bulk Matrix Real Order Flow",
"description": "Connect B2BPortal.tsx to wholesale registration API, display verified 30% wholesale discount pricing, and submit bulk orders directly to backend.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 4,
"estimated_minutes": 30,
"dependency_task_ids": ["EPIC-02-TASK-02"],
"acceptance_criteria": [
"ثبت درخواست ثبت‌نام کلینیک/داروخانه با آپلود پروانه کسب",
"ثبت مستقیم سفارش حجمی در دیتابیس با قیمت‌های عمده همکار"
],
"sub_steps": [
{ "index": 1, "name": "wire_b2b_application_modal", "description": "Build B2B application modal in B2BPortal.tsx", "status": "done" },
{ "index": 2, "name": "wire_b2b_checkout", "description": "Connect bulk matrix submit to NestJS Orders API", "status": "done" }
]
},
{
"id": "EPIC-02-TASK-04",
"title": "Customer App Next.js: Prescription Upload Modal & Rx Order Flow",
"description": "Wire PrescriptionUploadModal.tsx to upload vet prescription files to NestJS media API and attach them to Rx products during checkout.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 20,
"dependency_task_ids": ["EPIC-02-TASK-03"],
"acceptance_criteria": [
"آپلود نسخه دارویی برای محصولات دارای تگ نسخه پزشک (requiresRx)",
"اتصال نسخه به سبد خرید و سفارش آنلاین"
],
"sub_steps": [
{ "index": 1, "name": "wire_prescription_upload", "description": "Wire PrescriptionUploadModal to media service", "status": "done" },
{ "index": 2, "name": "attach_rx_to_cart", "description": "Attach uploaded prescription ID to cart store", "status": "done" }
]
},
{
"id": "EPIC-03-TASK-01",
"title": "Admin Panel React/Vite: Hero Banners & Vet Testimonials Dynamic CMS Page",
"description": "Create CMS.tsx page in Admin Panel for full CRUD management of Hero Banners (title, subtitle, image, buttonText, link, order) and Vet Testimonials.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 4,
"estimated_minutes": 30,
"dependency_task_ids": ["EPIC-02-TASK-04"],
"acceptance_criteria": [
"افزودن، ویرایش، حذف و تغییر ترتیب بنرهای صفحه اصلی",
"مدیریت نظرات و رتبه‌بندی دامپزشکان"
],
"sub_steps": [
{ "index": 1, "name": "create_cms_page", "description": "Create CMS.tsx in admin-panel/src/pages", "status": "done" },
{ "index": 2, "name": "add_cms_sidebar_link", "description": "Add CMS link to Admin Panel sidebar navigation", "status": "done" }
]
},
{
"id": "EPIC-03-TASK-02",
"title": "Admin Panel React/Vite: Wholesale Applications & License Approval Page",
"description": "Create WholesaleApplications.tsx page in Admin Panel to inspect uploaded business licenses, approve/reject clinic applications, and manage B2B roles.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 4,
"estimated_minutes": 25,
"dependency_task_ids": ["EPIC-03-TASK-01"],
"acceptance_criteria": [
"جدول کامل در خواست‌های ثبت‌نام همکاران با امکان پیش‌نمایش مدارک",
"دکمه ارتقای نقش به User_Wholesale و ارسال هشدار وضعیت"
],
"sub_steps": [
{ "index": 1, "name": "create_wholesale_applications_page", "description": "Create WholesaleApplications.tsx page", "status": "done" },
{ "index": 2, "name": "wire_approval_actions", "description": "Connect approve/reject actions to backend API", "status": "done" }
]
},
{
"id": "EPIC-04-TASK-01",
"title": "SEO & Content: Full On-Page & Schema.org JSON-LD Implementation",
"description": "Implement comprehensive SEO metadata, canonical URLs, OpenGraph tags, and Product/MedicalWebPage JSON-LD schemas across Next.js app, populated with real Canina Germany product data.",
"architectural_layer": "presentation_ui",
"assigned_role": "12_seo_content",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 5,
"estimated_minutes": 30,
"dependency_task_ids": ["EPIC-03-TASK-02"],
"acceptance_criteria": [
"پیاده‌سازی کامل متادیتای پویا و JSON-LD برای تمام صفحات محصولات، دسته‌ها و دانشنامه علمی",
"تولید نقشه سایت XML پویا و فایل robots.txt"
],
"sub_steps": [
{ "index": 1, "name": "implement_product_jsonld", "description": "Add Product JSON-LD script component", "status": "done" },
{ "index": 2, "name": "implement_sitemap_xml", "description": "Generate dynamic XML sitemap route in Next.js", "status": "done" }
]
},
{
"id": "EPIC-05-TASK-01",
"title": "Automated Testing & Build Verification Suite (Backend + Frontends)",
"description": "Write comprehensive Jest unit/integration tests for NestJS services/guards and React component integration tests for Cart, B2BPortal, and Admin Panel pages. Verify npm run build across all 3 apps.",
"architectural_layer": "testing",
"assigned_role": "07_qa_engineer",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 5,
"estimated_minutes": 30,
"dependency_task_ids": ["EPIC-04-TASK-01"],
"acceptance_criteria": [
"پوشش بالای ۸۰٪ تست‌های واحد برای سرویس‌های اصلی بک‌اند و فرانت‌اند",
"اجرای موفقیت‌آمیز npm run build بدون خطا در هر ۳ بخش پروژه"
],
"sub_steps": [
{ "index": 1, "name": "write_backend_jest_tests", "description": "Write NestJS integration tests", "status": "done" },
{ "index": 2, "name": "write_frontend_tests", "description": "Write React component tests", "status": "done" },
{ "index": 3, "name": "verify_all_builds", "description": "Run npm run build in backend, application, and admin-panel", "status": "done" }
]
},
{
"id": "EPIC-07-TASK-01",
"title": "Backend NestJS & Test Suite Errors Resolution",
"description": "Fix backend spec test expectations and Prisma seed dynamic imports for 100% clean type compilation and build pass.",
"architectural_layer": "business_logic",
"assigned_role": "05_dev_backend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 6,
"estimated_minutes": 20,
"dependency_task_ids": ["EPIC-05-TASK-01"],
"acceptance_criteria": [
"حل تمام خطاهای کامپایل TypeScript و تست‌های واحد سرویس‌های سفارشات، پت‌ها و دیتابیس بک‌اند",
"اجرای موفق npx tsc --noEmit و npm run build در بک‌اند"
],
"sub_steps": [
{ "index": 1, "name": "fix_seed_custom", "description": "Fix nameFa and nameEn fields in seed-custom.ts", "status": "done" },
{ "index": 2, "name": "fix_backend_spec_tests", "description": "Fix unit test mocks in orders, pets, and users spec files", "status": "done" }
]
},
{
"id": "EPIC-07-TASK-02",
"title": "Single Source of Truth Auth & Profile Mismatch Resolution",
"description": "Fix user state sync across userStore, Header, CartDrawer, and ClientLayout so unauthenticated/guest state automatically resets stale wallet, address, and pet profile data.",
"architectural_layer": "state_management",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 4,
"estimated_minutes": 25,
"dependency_task_ids": ["EPIC-07-TASK-01"],
"acceptance_criteria": [
"بازنشانی کامل تمام داده‌های پروفایل و کیف پول قبلی هنگام ورود مهمان یا انقضای توکن",
"هماهنگی ۱۰۰٪ دکمه ورود هدر، تیک تمدید سبد خرید و شناسنامه پت با وضعیت توکن لاگین"
],
"sub_steps": [
{ "index": 1, "name": "update_user_store_guest_reset", "description": "Reset profile to empty guest state in userStore on logout/unauthenticated", "status": "done" },
{ "index": 2, "name": "sync_client_layout_auth", "description": "Sync ClientLayout mount check with localStorage token state", "status": "done" }
]
},
{
"id": "EPIC-08-TASK-01",
"title": "Axios 401/403 Global Automatic Token Expiry Interceptor",
"description": "Add response interceptor in api.ts to capture HTTP 401/403 status codes, clear localStorage tokens, and invoke userStore logout to wipe stale profile state globally.",
"architectural_layer": "network_communication",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 20,
"dependency_task_ids": ["EPIC-07-TASK-02"],
"acceptance_criteria": [
"افزودن اینترسپتور پاسخ Axios برای تشخیص ۴۰۱ و ۴۰۳",
"پاکسازی انی و خودکار توکن و ریست پروفایل به حالت مهمان در صورت انقضای جلسه"
],
"sub_steps": [
{ "index": 1, "name": "add_axios_401_interceptor", "description": "Add 401/403 response interceptor to api.ts", "status": "done" }
]
},
{
"id": "EPIC-08-TASK-02",
"title": "Charity Round-Up Exact Math Calculation Fix",
"description": "Fix charity round-up formula in CheckoutPage.tsx and cartStore.ts so total invoice amount is ALWAYS rounded up to the exact next 10,000 Toman multiple.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 20,
"dependency_task_ids": ["EPIC-08-TASK-01"],
"acceptance_criteria": [
"رند کردن دقیق و ریاضیات کامل مبلغ سفارش به اولین ۱۰,۰۰۰ تومان بعدی",
"تطابق ۱۰۰٪ مبلغ اهدایی محاسبه‌شده با کل فاکتور بدون ناهماهنگی ریاضی"
],
"sub_steps": [
{ "index": 1, "name": "fix_checkout_charity_formula", "description": "Fix round-up calculation in CheckoutPage.tsx and cartStore.ts", "status": "done" }
]
},
{
"id": "EPIC-08-TASK-03",
"title": "Backend OrdersService Hardening & Error Inspection",
"description": "Audit OrdersService for edge case exceptions, invalid items handling, and ensure zero unhandled exceptions during order creation.",
"architectural_layer": "business_logic",
"assigned_role": "05_dev_backend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 20,
"dependency_task_ids": ["EPIC-08-TASK-02"],
"acceptance_criteria": [
"بررسی کامل سرویس سفارشات بک‌اند و رفع خطاهای بالقوه در ثبت فاکتور و تخفیف‌ها",
"اجرای موفق بیلد تولیدی بک‌اند"
],
"sub_steps": [
{ "index": 1, "name": "audit_orders_service", "description": "Audit and fix edge case handling in orders.service.ts", "status": "done" }
]
},
{
"id": "EPIC-09-TASK-01",
"title": "Prisma Client Regeneration & isRefill Type Sync",
"description": "Regenerate Prisma Client in backend node_modules so OrderCreateInput type includes isRefill and refillIntervalDays without IDE type errors.",
"architectural_layer": "database_orm",
"assigned_role": "05_dev_backend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 15,
"dependency_task_ids": ["EPIC-08-TASK-03"],
"acceptance_criteria": [
"تولید مجدد و صحیح Prisma Client بدون تداخل پروسه‌ها",
"برطرف شدن کامل خطای TypeScript فیلد isRefill در orders.service.ts"
],
"sub_steps": [
{ "index": 1, "name": "regenerate_prisma_client", "description": "Run npx prisma generate after closing locked processes", "status": "done" }
]
},
{
"id": "EPIC-09-TASK-02",
"title": "Admin Panel Configurable Charity Round-Up Step",
"description": "Add configurable charity_round_step setting in Admin Panel Settings page and connect CheckoutPage.tsx to use dynamic round step (10k, 50k, etc.) from SettingsStore.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 4,
"estimated_minutes": 25,
"dependency_task_ids": ["EPIC-09-TASK-01"],
"acceptance_criteria": [
"امکان تنظیم پله‌های رند کردن مبلغ اهدایی در پنل مدیریت (Settings.tsx)",
"اعمال پله دینامیک رند کردن در CheckoutPage.tsx و محاسبه لحظه‌ای"
],
"sub_steps": [
{ "index": 1, "name": "add_round_step_setting", "description": "Add charity_round_step setting in Admin Settings", "status": "done" },
{ "index": 2, "name": "wire_dynamic_round_step", "description": "Connect CheckoutPage.tsx to dynamic round step", "status": "done" }
]
},
{
"id": "EPIC-09-TASK-03",
"title": "Root Cause Multi-Store Auth Sync & Pet Profile Reset",
"description": "Root cause fix: reset usePetStore and all persisted local stores when user is unauthenticated so guest users NEVER see stale pet profiles, wallet, or address data.",
"architectural_layer": "state_management",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 5,
"estimated_minutes": 30,
"dependency_task_ids": ["EPIC-09-TASK-02"],
"acceptance_criteria": [
"ریست شدن همزمان usePetStore و تمام استورها هنگام خروج یا مهمان بودن کاربر",
"جلوگیری ریشه‌ای از خوانده شدن اسم پت یا اطلاعات کاربر قبلی در حالت خروج"
],
"sub_steps": [
{ "index": 1, "name": "add_pet_store_reset", "description": "Add reset method in usePetStore and call on logout", "status": "done" },
{ "index": 2, "name": "enforce_auth_guard_on_pet_store", "description": "Enforce isLoggedIn check on getActivePet()", "status": "done" }
]
},
{
"id": "EPIC-10-TASK-01",
"title": "Full-Stack Wallet Payment & Balance Deduction Persistence",
"description": "Add paymentMethod to CreateOrderDto and OrdersService.create in NestJS backend to deduct order amount from user walletBalance in PostgreSQL and create withdrawal WalletTransaction record upon checkout.",
"architectural_layer": "business_logic",
"assigned_role": "05_dev_backend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 5,
"estimated_minutes": 25,
"dependency_task_ids": ["EPIC-09-TASK-03"],
"acceptance_criteria": [
"کسر واقعی و دقیق مبلغ سفارش از کیف پول کاربر در دیتابیس PostgreSQL هنگام پرداخت با کیف پول",
"ثبت تراکنش کسر از کیف پول (withdrawal) در دیتابیس و بروزرسانی لحظه‌ای پروفایل کاربر"
],
"sub_steps": [
{ "index": 1, "name": "add_payment_method_dto", "description": "Add paymentMethod field to CreateOrderDto", "status": "done" },
{ "index": 2, "name": "implement_wallet_deduction_in_orders_service", "description": "Deduct user walletBalance and create WalletTransaction in OrdersService.create", "status": "done" },
{ "index": 3, "name": "wire_checkout_page_wallet_sync", "description": "Send paymentMethod in API call and trigger fetchProfile() in CheckoutPage.tsx", "status": "done" }
]
},
{
"id": "EPIC-11-TASK-01",
"title": "Pet Supplement Consumption Tracking & Depletion Monitor Fix",
"description": "Ensure updatePet and setPets in usePetStore update and preserve pet consumptions array locally upon order placement so AI depletion monitor displays remaining supplement levels for active pets.",
"architectural_layer": "state_management",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 4,
"estimated_minutes": 20,
"dependency_task_ids": ["EPIC-10-TASK-01"],
"acceptance_criteria": [
"ثبت واقعی میزان مکمل‌های خریده‌شده در پایش موجودی پت (usePetStore)",
"نمایش لحظه‌ای مکمل‌های خریده‌شده، درصد باقیمانده و تخمین اتمام مصرف پت در پروفایل"
],
"sub_steps": [
{ "index": 1, "name": "update_pet_store_consumptions_persistence", "description": "Always update local pets array in updatePet and preserve consumptions in setPets", "status": "done" }
]
},
{
"id": "EPIC-12-TASK-01",
"title": "Human-Readable Order Tracking ID Display Standard",
"description": "Replace raw UUID displays with clean tracking numbers (e.g., CN-20260726-80836) across OrderDetailsModal, Checkout Success, UserDashboard, and Invoice Print pages.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 5,
"estimated_minutes": 20,
"dependency_task_ids": ["EPIC-11-TASK-01"],
"acceptance_criteria": [
"جایگزینی کد رهگیری ملموس و کوتاه (CN-...) به جای شناسه دیتابیس (UUID) در تمام صفحات فاکتور و جزئیات سفارش",
"تسهیل پیگیری تلفنی و پشتیبانی برای کاربر"
],
"sub_steps": [
{ "index": 1, "name": "replace_uuid_with_tracking_number", "description": "Use trackingNumber across order UI components", "status": "done" }
]
},
{
"id": "EPIC-12-TASK-02",
"title": "Premium Canina Invoice PDF & Print Delay Fix",
"description": "Fix premature window.print execution in checkout success page, correct brand name to CANINA, fix product nameFa rendering, and polish official print invoice layout.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 5,
"estimated_minutes": 25,
"dependency_task_ids": ["EPIC-12-TASK-01"],
"acceptance_criteria": [
"تاخیر در باز شدن پنجره پرینت تا لود کامل دیتا و تصاویر بدون سفید شدن صفحه",
"اصلاح برند فاکتور به CANINA و نمایش صحیح نام فارسی محصول (nameFa) و تصویر در جدول",
"طراحی شکیل و رسمی فاکتور خرید"
],
"sub_steps": [
{ "index": 1, "name": "fix_invoice_print_delay", "description": "Delay window.print until data and images are fully rendered", "status": "done" },
{ "index": 2, "name": "fix_invoice_name_and_brand", "description": "Update brand name to CANINA and resolve product.nameFa undefined error", "status": "done" }
]
},
{
"id": "EPIC-12-TASK-03",
"title": "Detailed Payment & Financial Cost Breakdown Display",
"description": "Display order time alongside date, payment method, refill 5% discount, coupon discount, charity donation, and shipping in OrderDetailsModal, Dashboard, and Invoice.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 5,
"estimated_minutes": 25,
"dependency_task_ids": ["EPIC-12-TASK-02"],
"acceptance_criteria": [
"نمایش کامل تاریخ و ساعت دقیق ثبت سفارش در تمامی بخش‌های فاکتور و جزئیات",
"تفکیک کامل و شفاف روش پرداخت، تخفیف تمدید ۵٪، کد تخفیف، کمک اهداشده و مبلغ نهایی"
],
"sub_steps": [
{ "index": 1, "name": "add_order_time_and_financial_breakdown", "description": "Render order timestamp, payment method, discounts, and charity in OrderDetailsModal and invoice", "status": "done" }
]
},
{
"id": "EPIC-13-TASK-01",
"title": "Unified Order Status Badge & Label Alignment",
"description": "Align order status badge labels in UserDashboard.tsx and OrderDetailsModal.tsx (processing -> در حال پردازش, shipped -> ارسال شده, delivered -> تحویل شده).",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 15,
"dependency_task_ids": ["EPIC-12-TASK-03"],
"acceptance_criteria": [
"تطابق ۱۰۰٪ نشان وضعیت سفارش بین لیست تاریخچه و مدال جزئیات سفارش (در حال پردازش / ارسال شده / تحویل شده)"
],
"sub_steps": [
{ "index": 1, "name": "unify_order_status_badges", "description": "Unify status labels across UserDashboard and OrderDetailsModal", "status": "done" }
]
},
{
"id": "EPIC-14-TASK-01",
"title": "Backend Admin Order Search, Includes & Tracking Number Support",
"description": "Expand getOrders query to include nested orderItems.product and user details, add multi-field search (trackingNumber, customer name, phone), and support updating trackingNumber in updateOrderStatus.",
"architectural_layer": "business_logic",
"assigned_role": "05_dev_backend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 20,
"dependency_task_ids": ["EPIC-13-TASK-01"],
"acceptance_criteria": [
"پشتیبانی کامل بک‌اند از جستجوی شماره پیگیری، نام کاربر و تلفن",
"امکان بروزرسانی همزمان کد پیگیری پستی و وضعیت سفارش توسط ادمین"
],
"sub_steps": [
{ "index": 1, "name": "expand_admin_orders_backend", "description": "Update getOrders includes and add trackingNumber support to updateOrderStatus", "status": "done" }
]
},
{
"id": "EPIC-14-TASK-02",
"title": "Admin Panel Order Details & Official Invoice Modal Overhaul",
"description": "Build comprehensive AdminOrderModal in Orders.tsx featuring customer details, status dropdown, tracking code editor, full product breakdown, financial summary, and print invoice button.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 25,
"dependency_task_ids": ["EPIC-14-TASK-01"],
"acceptance_criteria": [
"عملکرد ۱۰۰٪ دکمه مشاهده فاکتور و باز شدن مدال جامع جزئیات سفارش ادمین",
"امکان ویرایش و ثبت کد پیگیری پستی و تغییر مستقیم وضعیت سفارش از جدول و مدال",
"چاپ مستقیم فاکتور رسمی از داخل پنل مدیریت"
],
"sub_steps": [
{ "index": 1, "name": "build_admin_order_modal", "description": "Build AdminOrderModal with tracking editor, status changer, and invoice printer in Orders.tsx", "status": "done" }
]
},
{
"id": "EPIC-15-TASK-01",
"title": "Refill & Payment Method State Mapping Persistence",
"description": "Map isRefill and paymentMethod in cartStore.ts addOrder and setOrders so refill status is preserved across application and backend syncing.",
"architectural_layer": "state_management",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 15,
"dependency_task_ids": ["EPIC-14-TASK-02"],
"acceptance_criteria": [
"حفظ و نگهداری وضعیت isRefill در تمامی سفارشات دریافت شده از بک‌اند",
"نمایش دقیق تخفیف تمدید ۵٪ در محاسبات سبد خرید"
],
"sub_steps": [
{ "index": 1, "name": "map_refill_in_cart_store", "description": "Map isRefill and paymentMethod in cartStore addOrder and setOrders", "status": "done" }
]
},
{
"id": "EPIC-15-TASK-02",
"title": "Refill UX & Loyalty Program Clarification",
"description": "Improve description and tooltip for Refill subscription in CheckoutPage.tsx explaining that Refill is a free loyalty subscription program providing automated re-orders and 5% lifetime discounts.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 2,
"estimated_minutes": 15,
"dependency_task_ids": ["EPIC-15-TASK-01"],
"acceptance_criteria": [
"توضیح واضح و شفاف کارکرد سرویس تمدید خودکار (برنامه وفاداری رایگان با ۵٪ تخفیف دائم)",
"رفع ابهام کاربر در خصوص عدم وجود هزینه پنهان یا اضافی برای سرویس تمدید"
],
"sub_steps": [
{ "index": 1, "name": "clarify_refill_ux", "description": "Update Refill section text and tooltips in CheckoutPage.tsx", "status": "done" }
]
},
{
"id": "EPIC-15-TASK-03",
"title": "Full-Stack Refill Badge & Discount Breakdown Display",
"description": "Render Refill badge and explicit 5% discount line item across Checkout, OrderSuccess, UserDashboard, OrderDetailsModal, and Admin Panel Orders.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 5,
"estimated_minutes": 25,
"dependency_task_ids": ["EPIC-15-TASK-02"],
"acceptance_criteria": [
"نمایش نشان اختصاصی «تمدید خودکار ۵٪-» در تمام مدال‌ها، لیست‌ها، فاکتورها و پنل مدیریت ادمین",
"نمایش خط ردیف شفاف «تخفیف تمدید خودکار (۵٪)» در فاکتور نهایی"
],
"sub_steps": [
{ "index": 1, "name": "render_refill_badges_and_discounts", "description": "Add Refill badge and discount row in OrderSuccess, UserDashboard, OrderDetailsModal, and Admin Orders", "status": "done" }
]
},
{
"id": "EPIC-16-TASK-01",
"title": "Backend Refill Re-Order Loyalty Voucher & Course Reserve Logic",
"description": "Overhaul OrdersService in NestJS so isRefill marks order for automated smart re-order reminder with 5% next-purchase cashback/voucher instead of upfront instant deduction on first order.",
"architectural_layer": "business_logic",
"assigned_role": "05_dev_backend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 20,
"dependency_task_ids": ["EPIC-15-TASK-03"],
"acceptance_criteria": [
"جلوگیری از سوءاستفاده سوءاستفاده‌کنندگان از تخفیف لحظه‌ای اولیه بدون خرید مجدد",
"ثبت رزرو هوشمند دوره درمان پت و رزرو ۵٪ تخفیف اختصاصی برای خرید تمدید بعدی"
],
"sub_steps": [
{ "index": 1, "name": "refactor_orders_service_refill", "description": "Update OrdersService.create refill logic to issue next-order cashback voucher reservation", "status": "done" }
]
},
{
"id": "EPIC-16-TASK-02",
"title": "Cart & Checkout Refill Course Reserve UX Overhaul",
"description": "Update CartDrawer.tsx and CheckoutPage.tsx to present Refill as Smart Course Reservation & 5% Next-Order Loyalty Reward Voucher.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 20,
"dependency_task_ids": ["EPIC-16-TASK-01"],
"acceptance_criteria": [
"نمایش واضح و جذاب پیشنهاد رزرو دوره درمان پت و ۵٪ پاداش خرید مجدد در کشوی سبد و تسویه‌حساب",
"جلب اعتماد مشتری و ایجاد انگیزه قوی برای خرید بعدی"
],
"sub_steps": [
{ "index": 1, "name": "update_refill_checkout_ux", "description": "Rewrite Refill section text and pricing math in CartDrawer and CheckoutPage", "status": "done" }
]
},
{
"id": "EPIC-16-TASK-03",
"title": "Dashboard & AI Stock Monitor Refill Course Status Integration",
"description": "Integrate course reservation and re-order voucher badge into UserDashboard, PetProfile AI Stock Monitor, OrderDetailsModal, and Admin Panel.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 5,
"estimated_minutes": 25,
"dependency_task_ids": ["EPIC-16-TASK-02"],
"acceptance_criteria": [
"نمایش وضعیت «رزرو تمدید دوره درمان پت فعال است (۵٪ پاداش خرید بعدی)» در پایش موجودی پت و داشبورد",
"نمایش شفاف در فاکتور چاپی و پنل ادمین"
],
"sub_steps": [
{ "index": 1, "name": "update_refill_dashboard_and_ai_monitor", "description": "Render course reserve badge and next-order voucher info in dashboard, pet profile, and admin panel", "status": "done" }
]
},
{
"id": "EPIC-17-TASK-01",
"title": "PDF Catalog Link Replacement to Online Catalog Route",
"description": "Replace all static /canina.pdf links in Footer.tsx and SmartAdvisor.tsx with /catalog route.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 10,
"dependency_task_ids": ["EPIC-16-TASK-03"],
"acceptance_criteria": [
"انتقال تمام لینک‌های کاتالوگ در فوتور و مشاور هوشمند به مسیر /catalog",
"عدم وجود لینک شکسته‌شده به فایل pdf محلی"
],
"sub_steps": [
{ "index": 1, "name": "replace_pdf_catalog_links", "description": "Update Footer.tsx and SmartAdvisor.tsx hrefs to /catalog", "status": "done" }
]
},
{
"id": "EPIC-17-TASK-02",
"title": "Backend Video Module, Prisma Schema & Initial Seed Data",
"description": "Create Video model in Prisma schema and build NestJS Video Module, Controller, and Service with public/admin CRUD endpoints.",
"architectural_layer": "business_logic",
"assigned_role": "05_dev_backend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 5,
"estimated_minutes": 25,
"dependency_task_ids": ["EPIC-17-TASK-01"],
"acceptance_criteria": [
"ایجاد جدول Video در دیتابیس PostgreSQL و Prisma",
"ارائه APIهای کامل دریافت، ایجاد، ویرایش و حذف ویدئوها"
],
"sub_steps": [
{ "index": 1, "name": "create_backend_video_module", "description": "Add Video model in schema.prisma and build NestJS VideoModule", "status": "done" }
]
},
{
"id": "EPIC-17-TASK-03",
"title": "Admin Panel Video Management Page & Navigation Integration",
"description": "Build Videos.tsx in admin-panel featuring video table, create/edit video modal, delete confirmation, and sidebar menu link.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 4,
"estimated_minutes": 25,
"dependency_task_ids": ["EPIC-17-TASK-02"],
"acceptance_criteria": [
"افزوده شدن گزینه مدیریت ویدئوها به منوی اصلی پنل مدیریت",
"مدیریت کامل ویدئوها (ایجاد، مشاهده، تغییر پوستر، ویدئو، توضیحات و فیلد ویژه)"
],
"sub_steps": [
{ "index": 1, "name": "build_admin_videos_page", "description": "Create Videos.tsx and link in Sidebar.tsx and App.tsx", "status": "done" }
]
},
{
"id": "EPIC-17-TASK-04",
"title": "Frontend Dynamic Video Fetching & Synchronization",
"description": "Create videoService.ts and update VetGallery.tsx and VideosPage.tsx to fetch dynamic video data from NestJS API instead of hardcoded mock arrays.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 4,
"estimated_minutes": 20,
"dependency_task_ids": ["EPIC-17-TASK-03"],
"acceptance_criteria": [
"بارگذاری پویا ویدئوها در صفحه اصلی و صفحه اختصاصی /videos از دیتابیس بک‌اند",
"هماهنگی ۱۰۰٪ داده‌های ویدئو بین تمام صفحات سایت و پنل مدیریت"
],
"sub_steps": [
{ "index": 1, "name": "connect_frontend_videos_api", "description": "Create videoService.ts and wire VetGallery.tsx and VideosPage.tsx to NestJS backend API", "status": "done" }
]
},
{
"id": "EPIC-18-TASK-01",
"title": "Backend Video Service & Full Database Seeding Restoration",
"description": "Fix ts-node relative imports in seed.ts for seed-products and seed-home, re-run full database seed to restore all products and categories, and optimize videos.service.ts error handling.",
"architectural_layer": "business_logic",
"assigned_role": "05_dev_backend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 4,
"estimated_minutes": 15,
"dependency_task_ids": ["EPIC-17-TASK-04"],
"acceptance_criteria": [
"بازیابی کامل ۴۰+ محصول تخصصی و دسته‌بندی‌های کانینا در دیتابیس PostgreSQL",
"برطرف شدن خطاهای تداخل پیدا کردن شناسه و ویو کانت در videos.service.ts"
],
"sub_steps": [
{ "index": 1, "name": "fix_seed_and_videos_service", "description": "Fix seed.ts imports, re-seed products, and refine videos.service.ts error handling", "status": "done" }
]
},
{
"id": "EPIC-18-TASK-02",
"title": "Homepage VetGallery Video Feed Disambiguation",
"description": "Update HomeClient.tsx and VetGallery.tsx so VetGallery component renders actual admin-selected Videos from backend API instead of vet testimonials.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 15,
"dependency_task_ids": ["EPIC-18-TASK-01"],
"acceptance_criteria": [
"نمایش دقیق ویدئوهای منتخب ادمین در بخش مشاوره ویدئویی صفحه اصلی",
"امکان پخش فوری ویدئوها در مدال اختصاصی"
],
"sub_steps": [
{ "index": 1, "name": "fix_vet_gallery_homepage_videos", "description": "Wire VetGallery to fetch and display actual Video records from API", "status": "done" }
]
},
{
"id": "EPIC-18-TASK-03",
"title": "Professional Smart Refill & Regimen Cashback Loyalty Loyalty System",
"description": "Transform Refill checkbox into a professional Smart Regimen Auto-Refill & 5% Wallet Cashback Loyalty system across CartDrawer.tsx, CheckoutPage.tsx, and UserDashboard.tsx.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 4,
"estimated_minutes": 20,
"dependency_task_ids": ["EPIC-18-TASK-02"],
"acceptance_criteria": [
"توضیح واضح و جذاب مکانیزم شارژ ۵٪ Cashback کیف پول به همراه یادآوری تمدید دوره مصرف پت",
"ارتقای تجربه کاربری و ایجاد انگیزه واقعی برای وفاداری مشتری"
],
"sub_steps": [
{ "index": 1, "name": "overhaul_refill_cashback_loyalty_system", "description": "Upgrade Refill text and cashback loyalty mechanics in cart drawer and checkout", "status": "done" }
]
},
{
"id": "EPIC-18-TASK-04",
"title": "Header Re-Organization & Mega-Menu / Dropdowns Architecture",
"description": "Refactor Header.tsx into a clean, 2-tier e-commerce header layout with Mega-Menu for Products/Categories and Dropdowns for Science/Wiki/Blog/Videos.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 25,
"dependency_task_ids": ["EPIC-18-TASK-03"],
"acceptance_criteria": [
"رفع ۱۰۰٪ بهم‌ریختگی و تداخل فونت‌ها و دکمه‌ها در هدر سایت",
"دسته‌بندی شکیل تمام بخش‌ها در مگا منو و دراپ‌داون‌های حرفه‌ای"
],
"sub_steps": [
{ "index": 1, "name": "refactor_header_mega_menu", "description": "Build 2-tier header layout with clean mega-menu and dropdowns in Header.tsx", "status": "done" }
]
},
{
"id": "EPIC-19-TASK-01",
"title": "Prisma Service IDE Type Resolution & Model Delegate Fix",
"description": "Fix PrismaService typescript delegate definitions so IDE language server recognizes video model delegate cleanly without type warnings.",
"architectural_layer": "business_logic",
"assigned_role": "05_dev_backend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 10,
"dependency_task_ids": ["EPIC-18-TASK-04"],
"acceptance_criteria": [
"برطرف شدن ۱۰۰٪ خطای تایپ اسکریپت IDE روی PrismaService.video",
"تعریف مشخص و تمیز متدهای سرویس ویدئو"
],
"sub_steps": [
{ "index": 1, "name": "fix_prisma_service_types", "description": "Update prisma.service.ts with explicit video delegate type support", "status": "done" }
]
},
{
"id": "EPIC-19-TASK-02",
"title": "Header React Hydration Mismatch Resolution",
"description": "Fix React hydration mismatch error in Header.tsx by adding isMounted state guard for cart counter rendering.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 2,
"estimated_minutes": 10,
"dependency_task_ids": ["EPIC-19-TASK-01"],
"acceptance_criteria": [
"برطرف شدن ۱۰۰٪ خطای Hydration Mismatch در هدر و کنسول مرورگر",
"تطابق کامل HTML رندر شده در سرور (SSR) و کلاینت"
],
"sub_steps": [
{ "index": 1, "name": "fix_header_hydration_error", "description": "Add isMounted guard to cart counter badge in Header.tsx", "status": "done" }
]
},
{
"id": "EPIC-19-TASK-03",
"title": "Admin Panel Video Management Media Library & Aparat / Embed Support",
"description": "Enhance Videos.tsx in admin panel with Media Picker modal, file upload, and support for Aparat/YouTube iframe embed tags.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 4,
"estimated_minutes": 25,
"dependency_task_ids": ["EPIC-19-TASK-02"],
"acceptance_criteria": [
"امکان انتخاب یا آپلود مستقیم عکس کاور و فایل ویدئو از مدیریت رسانه",
"پشتیبانی کامل از کد آیفرم یا اسکریپت آپارات و یوتیوب در کنار لینک مستقیم MP4"
],
"sub_steps": [
{ "index": 1, "name": "enhance_admin_videos_media_picker", "description": "Add Media picker and embed code parser in Videos.tsx", "status": "done" }
]
},
{
"id": "EPIC-19-TASK-04",
"title": "Online Catalog UI/UX, Scrollbar & Spacing Overhaul",
"description": "Fix CatalogClient.tsx and ArchivePage.tsx category filter scrollbar, margins, padding, and layout touch points.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 3,
"estimated_minutes": 15,
"dependency_task_ids": ["EPIC-19-TASK-03"],
"acceptance_criteria": [
"مخفی‌سازی یا شکیل‌سازی اسکرول‌بار زمخت فیلتر دسته‌بندی‌ها",
"تنظیم پدینگ و مارجین‌ها برای جلوگیری از چسبیدگی عناصر به حاشیه"
],
"sub_steps": [
{ "index": 1, "name": "fix_catalog_scrollbar_and_spacing", "description": "Update CatalogClient.tsx styling, scrollbar, and category pills padding", "status": "done" }
]
},
{
"id": "EPIC-19-TASK-05",
"title": "Section-by-Section Visual Page Builder & CMS Overhaul",
"description": "Re-architect UITexts.tsx and CMS.tsx in admin panel into an organized section-by-section Visual Page Builder supporting media, text, links, and buttons.",
"architectural_layer": "presentation_ui",
"assigned_role": "06_dev_frontend",
"priority": "HIGH",
"status": "completed",
"max_files_allowed": 5,
"estimated_minutes": 30,
"dependency_task_ids": ["EPIC-19-TASK-04"],
"acceptance_criteria": [
"دسته‌بندی منظم متون و بخش‌های سایت بر اساس صفحات (صفحه اصلی، درباره ما، تماس، کاتالوگ)",
"مدیریت کامل لینک دکمه‌ها، متون، بنرها و تصاویر همراه با پیش‌نمایش"
],
"sub_steps": [
{ "index": 1, "name": "build_visual_cms_page_builder", "description": "Refactor UITexts.tsx and CMS.tsx into structured Page Builder tabs", "status": "done" }
]
}
],
"metadata": {
"total": 46,
"completed": 46,
"in_progress": 0,
"pending": 0,
"generated_at": "2026-07-27T12:25:00Z",
"decomposition_pass": 17
}
}