نمای کلی پروژه
| عنوان | اطلاعات |
|---|---|
| نام اپلیکیشن | دوره (Doreh) |
| تاریخ شروع پروژه | اولین نسخه کامل کدبیس در خرداد ۱۴۰۵ (ژوئن ۲۰۲۶)؛ طراحی معماری از اردیبهشت ۱۴۰۵ (مه ۲۰۲۶) |
| پلتفرم هدف | اندروید (حداقل API 21)؛ پشتیبانی iOS اعلامشده در pubspec اما بدون تست رسمی؛ طراحی Portrait-only |
| وضعیت فعلی | آماده برای انتشار (Production-Ready) — نسخه 1.0.0؛ نسخه دیتابیس ۱۰؛ ۲۵ از ۲۵ تست واحد موفق؛ بدون خطا در flutter analyze |
فناوریها، چارچوبها و کتابخانهها
| دسته | ابزار / کتابخانه | نسخه |
|---|---|---|
| زبان برنامهنویسی | Dart | SDK ≥3.2.0 |
| فریمورک اصلی | Flutter | Material Design |
| پایگاه داده محلی | SQLite (sqflite) | 2.3.0+ |
| ذخیرهسازی امن | flutter_secure_storage | 10.3.1+ |
| مدیریت حالت | Flutter BLoC | 8.1.6+ |
| تولید PDF | pdf + arabic_reshaper + bidi | 3.10.8+ |
| خروجی Excel | excel | 4.0.6+ |
| تقویم شمسی | shamsi_date | 1.1.1+ |
| اشتراکگذاری فایل | share_plus | 13.1.0+ |
| انتخاب تصویر | image_picker | 1.1.2+ |
| فونتها | Vazirmatn، Parastoo | — |
| رمزنگاری | crypto (SHA-256) | 3.0.3+ |
| بینالمللیسازی | intl | 0.20.2+ |
معرفی کوتاه
دوره (Doreh) یک اپلیکیشن موبایل اندروید است که برای مدیریت صندوقهای قرضالحسنه گروهی یا «صندوق دوره» (Rotating Savings and Credit Association — ROSCA) طراحی شده است.
در این نوع صندوق، گروهی از افراد در دورههای زمانی مشخص (هفتگی، ماهانه، یا دورهای دیگر) مبلغ ثابتی پرداخت میکنند و هر بار یکی از اعضا — طبق قرعهکشی یا توافق — کل مبلغ جمعآوریشده را دریافت میکند. این فرآیند ادامه مییابد تا همه اعضا نوبت دریافت خود را داشته باشند.
اپلیکیشن دوره این فرآیند را از مدیریت کاغذی و دفتری خارج کرده و آن را به یک سیستم ساده، دقیق و کاملاً آفلاین تبدیل میکند.
هدف پروژه
چرا این پروژه ساخته شد؟
صندوقهای دورهای از دیرباز در میان خانوادهها، دوستان و همکاران ایرانی رایج بودهاند. اما مدیریت سنتی این صندوقها — بهصورت دستی در دفتر یا جداول اکسل ساده — با مشکلات جدی همراه است:
- گم شدن دفاتر یا خرابی فایلهای دیجیتالی
- اشتباه در محاسبات مانده بدهی هر عضو
- اختلافنظر درباره ترتیب نوبتها یا مبلغ پرداختها
- عدم شفافیت در گزارشدهی به اعضا
- فراموشی تاریخ پرداختها یا جزئیات تراکنشها
- دشواری گزارشگیری مالی برای پیگیری مانده و بدهکاریها
مشکلی که حل میکند
- همه اطلاعات اعضا، سهام، پرداختها، نوبتها و گزارشها را در یک جا نگه میدارد
- بدون نیاز به اینترنت کار میکند
- گزارشهای دقیق و رسمی PDF تولید میکند که قابل اشتراکگذاری هستند
- از اطلاعات مالی با قفل امنیتی محافظت میکند
- از گم شدن داده با سیستم پشتیبانگیری جلوگیری میکند
مخاطبان هدف
- مدیران صندوق (هماهنگکنندهها): افرادی که صندوق را تأسیس میکنند، اعضا را ثبت میکنند، قرعهکشی برگزار میکنند و پرداختها را ثبت میکنند
- مسئولان حسابداری صندوق: نظارت مالی، پیگیری واریزیها و صدور گزارش
- اعضای صندوقهای خانوادگی یا دوستانه: آگاهی از وضعیت نوبت و مانده خود
- خانوادههای ایرانی که از صندوق قرضالحسنه استفاده میکنند
- گروههای کاری که صندوق جمعی دارند
این برنامه برای یک کاربر منفرد (single-user) طراحی شده که نقش مدیریت صندوق را بر عهده دارد. نسخه چندکاربره و ابری برای آینده برنامهریزی شده است.
قابلیتهای اصلی
۵.۱ مدیریت اعضا (افراد)
- ثبت، ویرایش و حذف اعضا در یک فهرست مرکزی؛ ذخیره نام، تلفن، ایمیل و توضیحات
- یک شخص میتواند در چند صندوق مختلف عضو باشد
- ویرایش نام پس از ثبت تراکنش مالی قفل میشود؛ حذف شخص دارای تراکنش مسدود میشود
۵.۲ مدیریت صندوقها
- ایجاد، ویرایش و حذف صندوق با نام، مبلغ سهم، دوره پرداخت (هفتگی تا سهماهه)، تاریخ شروع، هماهنگکننده و مسئول حسابداری
- چرخه عمر صندوق: پیشنویس (Draft) → فعال (Active) → تکمیلشده (Completed) → بایگانیشده (Archived)
- محاسبه خودکار تاریخ تقریبی پایان صندوق و قفلشدن پس از اولین پرداخت نوبت
۵.۳ مدیریت سهام
- هر عضو میتواند یک یا چند سهم داشته باشد؛ پشتیبانی از سهام کسری (0.25، 0.5، 0.75، ...)
- مجموع سهام صندوق باید قبل از قرعهکشی یا فعالسازی یک عدد صحیح باشد
- سهام کسری با گروهبندی به یک موقعیت قرعهکشی تبدیل میشوند؛ نمایش زنده مجموع سهام هنگام افزودن اعضا
۵.۴ قرعهکشی و نوبتبندی
- قرعهکشی تصادفی: الگوریتم Shuffle برای ترتیب تصادفی نوبتها
- ترتیب دستی: Drag & Drop برای نوبتهای آینده (پرداختنشده)؛ نوبتهای پرداختشده قفل میشوند
- تمام تغییرات ترتیب در لاگ حسابرسی ثبت میشوند
۵.۵ ثبت پرداخت اعضا (واریزیها)
- مبلغ، تاریخ، روش پرداخت (نقدی/انتقال بانکی)، توضیحات، پیوست رسید
- محاسبه خودکار دوره بر اساس تاریخ پرداخت و تاریخ شروع صندوق؛ پیشپر کردن مبلغ پیشفرض و مانده بدهی
- پشتیبانی از پرداخت جزئی؛ جلوگیری از پرداخت تکراری کامل برای همان دوره
۵.۶ ثبت پرداخت نوبت (خروجی صندوق)
- ثبت تاریخ، مبلغ و روش پرداخت به برنده نوبت؛ پشتیبانی از پرداخت اقساطی
- وضعیت نوبت: در انتظار (Waiting)، پرداخت شده (Paid)، جزئاً پرداخت شده (Partially Paid)
۵.۷ خروج عضو و جایگزینی
- ثبت خروج عضو همراه با تاریخ و یادداشت؛ تعیین عضو جایگزین
- مجموع سهام صندوق پس از جایگزینی ثابت میماند؛ بخش «سوابق جایگزینی» در گزارشهای PDF ثبت میشود
۵.۸ گزارشهای PDF
سه نوع گزارش PDF با پشتیبانی کامل از متن فارسی RTL و فونتهای فارسی:
۸ بخش: خلاصه مدیریتی، نمای کلی، اعضا و سهام، تاریخچه مشارکتها، تاریخچه دریافتها، سوابق جایگزینی، جمعبندی مالی، تأیید مدیر
اطلاعات مختصر و فشرده از وضعیت مالی صندوق
صورتحساب اختصاصی شامل تمام پرداختها و مانده بدهی
ویژگیهای فنی: پشتیبانی Arabic Reshaping و Bidi، فونتهای وزیرمتن/پرستو، قابل اشتراکگذاری از هر اپلیکیشن، جداول راستچین.
۵.۹ خروجی Excel
صادرات کل پایگاه داده در یک فایل اکسل (.xlsx) با ۷ برگه: صندوقها، اعضا/افراد، اعضای صندوق، سهام، پرداختها، لاگ حسابرسی، تنظیمات — قابل استفاده در Excel، LibreOffice و Google Sheets.
۵.۱۰ پشتیبانگیری و بازیابی محلی
- فایل پشتیبان SQLite .db با نامگذاری بر اساس تاریخ/زمان؛ ایمنسازی WAL پیش از کپی
- بازیابی با اعتبارسنجی هدر SQLite؛ نسخه امنیتی .restore_bak و Rollback خودکار در صورت خرابی
۵.۱۱ داشبورد
- نمایش تمام صندوقهای فعال با وضعیت پرداخت و شاخصهای کلیدی (موجودی، تعداد اعضا، تعداد صندوقهای فعال)
- فیلتر بر اساس وضعیت؛ کارت «مانده دوره جاری» با لیست اعضای بدون پرداخت
۵.۱۲ لاگ حسابرسی (Audit Log)
ثبت خودکار تمام تغییرات مهم سیستم (تغییر ترتیب نوبتها، حذفها، ویرایشها)، قابل مشاهده در رابط کاربری و گزارش Excel.
۵.۱۳ تنظیمات شخصیسازی
نحوه کارکرد اپلیکیشن
۶.۱ جریان کلی کاربر
۶.۲ صفحه ورود (Splash / PIN)
اپلیکیشن با یک صفحه قفل شروع میشود: اولین بار کاربر یک کد امنیتی ۴ رقمی تعریف میکند؛ بارهای بعدی باید همان کد را وارد کند. PIN با الگوریتم SHA-256 هششده و در حافظه امن ذخیره میشود.
۶.۳ تا ۶.۴ داشبورد و صفحه جزئیات صندوق
| زبانه | محتوا |
|---|---|
| نمای کلی | اطلاعات صندوق، اعضا، وضعیت پرداخت دوره جاری |
| نوبتبندی | ترتیب قرعهکشی، وضعیت هر نوبت، ثبت پرداخت نوبت |
| پرداختها | لیست کامل واریزیها، ثبت پرداخت جدید |
| گزارشها | دریافت PDF، اشتراکگذاری |
۶.۵ جریان مدیریت صندوق (از ابتدا تا پایان)
دادهها و اطلاعات مدیریتشده
- اطلاعات هویتی اعضا (نام، تلفن، ایمیل)
- مشخصات صندوق (نام، مبلغ، دوره، تاریخ)
- تعداد سهام هر عضو
- پرداختهای واریزی و پرداخت نوبت
- تصویر رسید (دوربین یا گالری)
- شماره دوره پرداخت (بر اساس تاریخ)
- وضعیت و مانده بدهی هر عضو
- پیشرفت قرعهکشی و پیشرفت مالی صندوق
- موجودی واقعی صندوق (واریزها − نوبتهای پرداختشده)
- لاگ حسابرسی تمام رویدادهای مهم
ساختار پایگاه داده (نسخه ۱۰)
| جدول | توضیح |
|---|---|
| persons | فهرست اشخاص |
| funds | صندوقها |
| fund_members | عضویت اشخاص در صندوقها |
| draws | نوبتهای قرعهکشی و اطلاعات پرداخت نوبت |
| shares | سهام هر عضو در هر صندوق |
| payments | واریزیهای اعضا |
| draw_payout_transactions | تراکنشهای جزئی پرداخت نوبت (اقساط) |
| audit_logs | لاگ حسابرسی |
| settings | تنظیمات برنامه |
حریم خصوصی و امنیت
ذخیرهسازی محلی
تمام دادهها فقط روی دستگاه کاربر ذخیره میشوند. هیچ دادهای به سرورهای خارجی ارسال نمیشود؛ برنامه برای کارکرد عادی نیازی به اتصال اینترنت ندارد.
قفل امنیتی PIN
کد امنیتی ۴ رقمی با الگوریتم SHA-256 هش میشود. فقط مقدار هششده در حافظه امن دستگاه (Keychain اندروید) ذخیره میشود؛ هیچگاه کد اصلی ذخیره نمیشود.
حافظه امن و پیوستها
از flutter_secure_storage برای ذخیره هش PIN و تنظیمات بیومتریک استفاده میشود. تصاویر رسیدهای پرداخت در پوشه خصوصی برنامه (attachments/) ذخیره میشوند — نه در پایگاه داده.
چه دادهای جمعآوری نمیشود
بومیسازی و پشتیبانی از زبان
| زبان | کد | جهت نوشتار |
|---|---|---|
| فارسی (پیشفرض) | fa | راستبهچپ (RTL) |
| انگلیسی | en | چپبهراست (LTR) |
تقویمها و اعداد
- تقویم شمسی (جلالی) — پیشفرض فارسی؛ تقویم میلادی (گرگوری) — قابل انتخاب
- اعداد فارسی (۰-۹) و انگلیسی (0-9) بر اساس زبان
پشتیبانی RTL در گزارشهای PDF
- Arabic Reshaping برای اتصال صحیح حروف فارسی/عربی
- Bidi Algorithm برای ترتیب صحیح کاراکترها
- جداول گزارش در حالت RTL بهصورت ستونهای معکوس؛ شماره ردیف در سمت راست
رابط کاربری و تجربه کاربری
سبک طراحی
- Glassmorphism: کارتهای شیشهای با شفافیت جزئی
- Material Design 3 با تم سفارشی؛ تم تاریک/روشن خودکار
- طراحی Responsive با SafeArea؛ حالت Portrait-only
ناوبری و صفحههای کلیدی
| صفحه | عملکرد |
|---|---|
| Splash / PIN | ورود امن به برنامه |
| داشبورد | نمای کلی صندوقها و آمار |
| لیست اعضا | مدیریت افراد |
| فرم صندوق | ایجاد/ویرایش صندوق |
| جزئیات صندوق | مدیریت نوبتها، پرداختها، گزارشها |
| فرم پرداخت | ثبت واریزی عضو |
| صفحه عضو | پروفایل کامل عضو در صندوق |
| تنظیمات | شخصیسازی و پشتیبانگیری |
نوار ناوبری پایینی با سه بخش اصلی: داشبورد، اعضا، تنظیمات.
صادرات، واردات، پشتیبانگیری، بازیابی و گزارشدهی
- فایل .db از کل پایگاه داده
- نام فایل: doreh_backup_YYYYMMDD_HHMMSS.db
- اشتراکگذاری از طریق هر اپلیکیشنی
- بازیابی از فایلهای ذخیرهشده در پوشه برنامه
- اعتبارسنجی ساختار SQLite قبل از بازیابی
- نسخه امنیتی خودکار برای Rollback
سه نوع گزارش RTL با فونت فارسی، قابل اشتراکگذاری.
صادرات ۷ برگه از کل پایگاه داده؛ ذخیره در exports/ و اشتراکگذاری.
معماری فنی
الگوی معماری
| لایه | مسیر | وظیفه |
|---|---|---|
| Domain | lib/domain/ | موجودیتهای خالص Dart + واسطهای انتزاعی |
| Data | lib/data/ | پیادهسازی repository با sqflite |
| Presentation | lib/presentation/ | BLoC Cubits + صفحات + ویجتها |
مدیریت حالت — Flutter BLoC (Cubit)
مدل داده اصلی
پایگاه داده SQLite (نسخه طرح ۱۰) با Foreign Keys و ON DELETE CASCADE، ایندکسهای بهینه روی کلیدهای خارجی، و سیستم Migration از نسخه ۱ تا ۱۰.
محدودیتها و موارد عمداً حذفشده
محدودیتهای فعلی
- پیوستهای خارج از پشتیبان: تصاویر رسیدها در فایل .db پشتیبان نیستند؛ باید پوشه attachments/ دستی منتقل شود.
- پشتیبانگیری Google Drive: تنها UI نمایشی، بدون عملکرد واقعی.
- پشتیبان رمزنگارینشده: فایل .db بدون رمزنگاری ذخیره میشود.
- وارد کردن فایل از مسیر دلخواه: به دلیل ناسازگاری file_picker با share_plus 13.x حذف شده است.
- سیستم یککاربره: فقط یک کاربر مدیریتی؛ ورود چندکاربره پیادهسازی نشده.
- پیشرفت پرداخت اضافی: پرداخت بیش از مبلغ دوره برای دورههای آینده کارت نمیشود.
موارد عمداً خارج از دامنه
وضعیت قابلیتها
- مدیریت اعضا و صندوقها (CRUD کامل)
- قرعهکشی و نوبتبندی (تصادفی + دستی)
- ثبت واریزی اعضا با پیوست رسید
- پردازش پرداخت جزئی و محاسبه مانده
- ثبت پرداخت نوبت با پشتیبانی اقساطی
- خروج عضو و جایگزینی
- پشتیبانی از سهام کسری و گروهبندی
- گزارشهای PDF جامع (RTL فارسی کامل)
- خروجی Excel هفتبرگه
- پشتیبانگیری و بازیابی محلی
- قفل امنیتی PIN
- دو زبانه (فارسی/انگلیسی) کامل
- تقویم شمسی/میلادی؛ تم تاریک و روشن
- لاگ حسابرسی؛ داشبورد با KPIهای کلیدی
| شناسه | توضیح |
|---|---|
| FR-001 | طراحی جایگزین گزارش PDF (قالب بصری دوم) |
| FR-002 | ویرایشگر دستی کامل گروهبندی سهام کسری |
| — | پشتیبانگیری واقعی Google Drive |
| — | سیستم جریمه تأخیر پرداخت |
| — | ورود چندکاربره یا همگامسازی ابری |
معرفی بازاریابی
اپلیکیشن دوره — دستیار هوشمند مدیران صندوقهای قرضالحسنه — راهحلی کامل، آفلاین و امن برای تمام کسانی است که صندوقهای دورهای خانوادگی، دوستانه یا کاری مدیریت میکنند. با دوره، دیگر نیازی به دفترچه، اکسل یا ریاضی پیچیده ندارید؛ اعضا را ثبت کنید، قرعهکشی کنید، پرداختها را ثبت کنید و با یک کلیک گزارش PDF کامل و رسمی بگیرید.
این اپلیکیشن کاملاً فارسی، کاملاً آفلاین، با تقویم شمسی و فونتهای فارسی بهینهسازی شده است تا بهترین تجربه کاری را برای خانوادهها و گروههای ایرانی فراهم کند. از قفل PIN برای حفاظت از اطلاعات مالی تا پشتیبانگیری آسان و بازیابی ایمن — دوره همه چیزی است که یک مدیر صندوق حرفهای نیاز دارد.
جمعبندی نهایی
اپلیکیشن دوره یک پروژه آفلاین-اول (Offline-First) بالغ و آماده برای انتشار است که یک نیاز واقعی و روزمره در جامعه ایرانی را با یک راهحل مدرن، ایمن و کاربرپسند برطرف میکند. این اپلیکیشن با بهرهگیری از معماری تمیز، پایگاه داده قوی SQLite با نسخه Migration مستند، گزارشهای PDF RTL بومی، و رابط کاربری مدرن فارسی، نقطه شروع مناسبی برای یک محصول نرمافزاری پایدار است.
قابلیتهای اصلی کاملاً پیادهسازی و تست شدهاند. موارد باقیمانده (پشتیبانگیری ابری، طراحی جایگزین گزارش) برنامهریزیشده و به نسخههای آینده موکول شدهاند — بدون اینکه مانع استفاده عادی از برنامه شوند. پروژه دوره پایهای محکم برای گسترش به سمت همگامسازی ابری، سیستم چندکاربره و نسخه iOS در آینده دارد.
این سند بر اساس بررسی مستقیم کد منبع، مستندات فنی، تاریخچه پایگاه داده و اسناد موجود در مخزن پروژه تهیه شده است. هیچ قابلیتی فراتر از آنچه در کد پیادهسازی شده، ادعا نشده است.