۰۲ — نیازمندیهای MVP
هرجا «تصمیم باز» است → 11-open-decisions.md
۱. ماژولها
| ماژول | کاربر | مسئولیت |
|---|---|---|
| Client app | مشتری | browse، reserve، pay، pickup ticket |
| Vendor panel | رستوران | باکس روزانه، سفارشها، تایید pickup، گزارش |
| Admin panel | تیم TakeEat | تایید vendor، پکیج، تخفیف، تراکنش |
| Ops dashboard (v2) | داخلی | KPI، no-show rate، GMV |
۲. فلو کلاینت
- ثبتنام/ورود OTP موبایل
- لیست باکسهای فعال نزدیک — فیلتر محله/فاصله/قیمت (نقشه → v2)
- جزئیات باکس: قیمت، ارزش تخمینی، pickup window، (v2) امتیاز
- رزرو → کد تخفیف (اختیاری) → پرداخت (درگاه | پرداخت در محل)
- دریافت کد/QR pickup
- مراجعه در بازه → وندور تایید → picked_up
- (v2) امتیاز/نظر
۳. فلو وندور
- ثبتنام کسبوکار (نام، آدرس، lat/lng، نوع، تماس) → تایید دستی ادمین
- انتخاب پلن پکیج
- ساخت باکس روزانه: عنوان، توضیح، دسته، تعداد، قیمت، ارزش تخمینی، pickup window
- مشاهده سفارشهای امروز
- تایید pickup — اسکن QR / وارد کردن کد / لیست
- مدیریت no-show / کنسلی
- گزارش فروش ساده + (v2) تسویه خودکار
۴. فلو ادمین
- تایید/رد/تعلیق vendor
- CRUD Package (پلن رستوران)
- CRUD DiscountCode (platform-wide یا per-vendor)
- لیست تراکنشها، refund دستی
- گزارش پایه: تعداد سفارش، GMV، نرخ pickup
۵. Must-have vs V2
| حوزه | MVP | V2 |
|---|---|---|
| Auth | OTP + JWT | ایمیل، social، 2FA |
| Vendor onboarding | فرم + تایید دستی | KYC، OCR مدارک |
| Surprise box | یک باکس فعال/روز per vendor | چند سایز، schedule تکراری |
| Discovery | لیست + فیلتر محله/قیمت | نقشه، دسته غذا، sort امتیاز |
| Payment | یک درگاه + pay-at-pickup | چند درگاه، wallet |
| Discount | percent/fixed، min order، usage limit | کمپین، referral |
| Pickup confirm | کد عددی یا QR ساده | scanner اختصاصی، geofence |
| Notify | SMS (Panelchi) | push، web push |
| Vendor panel | امروز، confirm، گزارش ساده | analytics، forecast |
| Admin | vendor، package، discount، tx | BI، CO2 |
| Rating | — | stars + comment، follow vendor |
۶. قوانین کسبوکار MVP
باکس
- co-founder گفت: هر رستوران یک آیتم — در MVP: یک
SurpriseBoxفعال در هر روز quantity_remainingبا هر رزرو موفق کم میشود- وقتی
quantity_remaining == 0→sold_out - بعد از
pickup_end→expired(باکسهای باقیمانده)
سفارش
- رزرو موقت: (اختیاری v1.1) hold ۵–۱۰ دقیقه تا پرداخت
- pay-at-pickup:
payment_status: pendingتا وندورpaidکند - no-show: بعد از پایان pickup window بدون confirm →
no_show
refund
- پرداخت آنلاین + کنسل vendor → refund
- pay-at-pickup + no-show → بدون refund (پول گرفته نشده)
۷. پرداخت ایران
درگاه آنلاین
- شروع با Zarinpal (sandbox → production)
- abstraction layer برای IDPay/NextPay/Zibal بعداً
- کارمزد ~۱٪ با سقف چند هزار تومان
پرداخت با POS (پز)
واقعیت فنی: integration مستقیم با دستگاه کارتخوان بانکی برای third-party معمولاً ممکن نیست.
پیادهسازی MVP:
- مشتری «پرداخت در محل» را انتخاب میکند
- سفارش با
payment_status: pendingثبت میشود - inventory رزرو میشود
- وندور هنگام تحویل — بعد از نقد/کارت روی پز خودش — دستی
paidمیزند
تسویه با رستوران
- تصمیم باز: واریز دورهای پس از کسر کمیسیون (شبیه تسهیم Zarinpal)
- در MVP: گزارش «مبلغ قابل تسویه» کافی است
۸. نقشه راه
| فاز | مدت تقریبی | خروجی |
|---|---|---|
| ۰ Smoke test | ۱ هفته | تقاضای واقعی در ۲–۳ رستوران |
| ۱ MVP | ۴–۶ هفته | PWA + vendor + admin + payment + SMS |
| ۲ Growth | — | map، native، push، referral |
۹. منابع
- 06-order-lifecycle.md — state machine
- 08-data-model.md — entities
- 09-api-endpoints.md — API