{ "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" } ] } ], "metadata": { "total": 41, "completed": 41, "in_progress": 0, "pending": 0, "generated_at": "2026-07-27T12:05:00Z", "decomposition_pass": 16 } }