خلاصه اطلاعات پروژه
| عنوان | اطلاعات |
|---|---|
| نام پروژه / اپلیکیشن | رقمی — Raqami |
| تاریخ شروع پروژه | ۱۲ ژوئن ۲۰۲۶ (اولین کامیت در مخزن گیت) |
| نسخه فعلی | 1.0.0 (versionCode 1) |
| پلتفرم هدف | اندروید — Android 8.0 (API 26) و بالاتر |
| وضعیت فعلی | V1 توسعهیافته؛ بیش از ۵۰ درخواست پیادهسازیشده؛ منتظر تأیید دستی نسخه نهایی |
| زبانهای پشتیبانیشده | فارسی (پیشفرض) و انگلیسی |
تکنولوژیها، فریمورکها و کتابخانهها
| حوزه | فناوری / ابزار |
|---|---|
| زبان برنامهنویسی | Kotlin 2.0.21 |
| رابط کاربری | Jetpack Compose (BOM 2024.06.00)، Material Design 3 |
| تزریق وابستگی | Hilt 2.51.1 |
| پایگاه داده محلی | Room 2.6.1 | (نسخه ۹ دیتابیس)
| پردازش تصویر | Coil 2.6.0 |
| تولید QR | ZXing Core 3.5.3 |
| امنیت | AndroidX Security-Crypto، AndroidX Biometric، Android Keystore |
| معماری | MVVM + Clean Architecture (سهلایه) |
| ناوبری | AndroidX Navigation Compose |
| ابزار ساخت | AGP 8.4.2، KSP 2.0.21-1.0.27 |
| SDK حداقل / هدف | 26 / 35 |
| نسخه JVM | 17 |
معرفی کوتاه
رقمی (Raqami) یک اپلیکیشن اندرویدی است که به کاربران امکان میدهد اطلاعات بانکی و حسابهای پرداختی خود را بهصورت کارتهای دیجیتال زیبا و قابل بهاشتراکگذاری ذخیره، مدیریت و بهاشتراک بگذارند.
تمام دادهها بهصورت محلی (Local-only) روی دستگاه کاربر ذخیره میشوند و هیچگونه ارتباطی با اینترنت، سرور ابری یا سیستمهای بانکی وجود ندارد.
هدف و دلیل ایجاد پروژه
مشکلی که رقمی حل میکند
اشتراکگذاری اطلاعات بانکی در زندگی روزمره امری ضروری است — پرداخت اجاره، دریافت حقوق، انتقال وجه به دوستان یا مشتریان. اما این کار معمولاً با چالشهایی روبهروست:
- جستجو در پیامها و یادداشتهای پراکنده برای پیدا کردن اطلاعات حساب
- تایپ دستی اطلاعات طولانی مانند شماره شبا (۲۶ کاراکتر) و ارسال آنها
- خطر تایپ اشتباه اعداد حساس
- نداشتن فرمت استاندارد برای ارائه اطلاعات حساب به صورت حرفهای
رقمی با ارائه کارتهای دیجیتال زیبا این مشکل را حل میکند: اطلاعات یکبار وارد میشوند، در قالب یک کارت بانکی گرافیکی ذخیره میشوند، و در هر زمان میتوان آنها را با یک لمس بهاشتراک گذاشت، بهعنوان تصویر یا PDF ذخیره کرد، یا از طریق کد QR منتقل کرد.
کاربران هدف
رقمی برای کاربران ایرانی و حوزه خلیج فارس (بهویژه امارات متحده عربی) طراحی شده و برای افراد زیر مناسب است:
- افرادی که چندین حساب بانکی دارند و میخواهند آنها را سازماندهی کنند
- کسبوکارهای کوچک که باید اطلاعات حساب را به مشتریان ارائه دهند
- فریلنسرها و پیمانکارانی که برای دریافت پرداخت به مشتریان مختلف اطلاعات حساب میدهند
- افرادی که با خانواده و دوستان خود مکرراً اطلاعات بانکی رد و بدل میکنند
- کاربرانی که به حریم خصوصی اهمیت میدهند و نمیخواهند اطلاعات بانکیشان در سرویسهای ابری ذخیره شود
ویژگیهای اصلی
۵.۱ مدیریت کارتهای بانکی
- ایجاد کارت: نام صاحب حساب، کشور، بانک، شماره حساب، IBAN، شماره کارت، یادداشت و نام دلخواه
- ویرایش کارت: اصلاح تمامی فیلدها در هر زمان
- حذف کارت: با دیالوگ تأییدیه نمایش نام صاحب حساب و بانک
- تکثیر کارت: کپی سریع با طراحی جدید (بدون ویژگی پین)
- پین/علاقهمند: حداکثر ۵ کارت پینشده در بالای فهرست
- جستجو و فیلتر: بر اساس نام، بانک، شماره حساب یا دستهبندی
۵.۲ طراحی بصری کارتها
- ۲۴ طرح گرافیکی: ترکیب گرادیانت و الگوهای هندسی تزئینی
- تولید خودکار طرح: بر اساس designSeed، با دکمه بازتولید (بدون طرح مشابه متوالی)
- رابطه یکبهیک Seed و طرح: کاملاً deterministic
- پشتیبانی از لوگوی شبکه کارت: شناسایی خودکار Visa یا Mastercard
۵.۳ جهتبندی RTL و LTR
- هر کارت میتواند بهصورت مستقل RTL یا LTR تنظیم شود — مستقل از زبان رابط کاربری
- اعداد (شماره حساب، شبا، شماره کارت) همیشه LTR نمایش داده میشوند
۵.۴ اعتبارسنجی شماره شبا (IBAN)
- پشتیبانی از ۲۵ کشور با قوانین خاص هر کشور
- الگوریتم MOD-97 برای اعتبارسنجی چکسام و بررسی طول صحیح بر اساس کد کشور
- پیام خطای واضح برای هر نوع اشکال
۵.۵ خروجی و اشتراکگذاری
- ذخیره به گالری از طریق MediaStore
- اشتراکگذاری سریع (Quick Share) بر اساس تنظیمات پیشفرض
- فرمتهای خروجی: PNG (رویکارت ۱۲۶۰×۷۹۵، هر دو طرف ۱۳۸۰×۱۷۷۰) و PDF (A4 با هدر/فوتر سلب مسئولیت)
- جهتبندی PDF: در حالت فارسی، متنها RTL تنظیم میشوند
- هشدار حریم خصوصی QR: دیالوگ اجباری برای خروجیهای شامل پشت کارت
۵.۶ کد QR
- تولید QR از اطلاعات کارت (نام، بانک، شماره حساب، شبا، شماره کارت)
- امکان تنظیم فیلدهای درجشده در QR بهصورت جداگانه برای هر کارت
- فیلدهای ممنوعه هرگز در QR درج نمیشوند
۵.۷ قفل برنامه و امنیت
۵.۸ پشتیبانگیری و بازیابی
- فرمت رمزگذاریشده: فایلهای .rqbk با AES-256-GCM
- مشتقسازی کلید: PBKDF2 با salt 32 بایتی و IV 12 بایتی
- پشتیبان شامل: کارتها، بانکها، دستهبندیها، کشورها، لوگوها و تنظیمات
- پشتیبان ایمنی خودکار قبل از هر بازیابی + قابلحمل بین دستگاهها (V2)
۵.۹ مدیریت بانکها
- بیش از ۲۰ بانک از پیش تعریفشده از ایران و امارات
- افزودن بانک سفارشی با نام، لوگو و رنگ؛ فعال/غیرفعالسازی
- بانکهای پیشفرض قابل حذف دائمی نیستند
۵.۱۰ مدیریت دستهبندیها
دستهبندیهای پیشفرض: شخصی، کسبوکار، مشتریان، خانواده، سایر — با امکان ایجاد دستهبندی سفارشی (نام فارسی/انگلیسی، ایموجی، رنگ) و فیلتر فوری در داشبورد.
۵.۱۱ مدیریت کشورها
پایگاه داده کشورها شامل کد ISO، پرچم ایموجی، طول شبا و نام فارسی/انگلیسی، با قابلیت افزودن و ویرایش.
۵.۱۲ تنظیمات
| گروه | موارد |
|---|---|
| امنیت | رمز عبور، بیومتریک، قفل خودکار |
| کارتها | جهت پیشفرض، فونت پیشفرض، تنظیمات QR پیشفرض |
| اشتراک سریع | فرمت پیشفرض (تصویر/PDF)، طرف پیشفرض (روی/پشت/هر دو) |
| برنامه | زبان رابط کاربری، تم (روشن/تاریک/سیستم) |
نحوه کارکرد اپلیکیشن
۶.۱ فرآیند کلی کاربر
۶.۲ صفحهها و ماژولهای اصلی
| صفحه | توضیح |
|---|---|
| SplashScreen | نمایش لوگو با انیمیشن، مسیریابی به صفحه بعدی |
| OnboardingScreen | راهنمای ۴ مرحلهای برای راهاندازی اولیه |
| AppLockScreen | صفحه ورود با رمز ۶ رقمی و بیومتریک |
| HomeScreen | داشبورد اصلی: آمار، فیلتر، فهرست کارتها، جستجو |
| CardCreateScreen | فرم ایجاد کارت جدید با پیشنمایش زنده |
| CardPreviewScreen | نمایش کامل کارت (روی/پشت)، خروجی، اشتراکگذاری |
| CardEditScreen | فرم ویرایش کارت (همان ساختار ایجاد) |
| BankListScreen | فهرست بانکها با جستجو، فیلتر کشور، فعالسازی |
| BankCreateScreen / BankEditScreen | افزودن/ویرایش بانک با لوگو و رنگ |
| CountryListScreen / Create / Edit | فهرست، افزودن و ویرایش کشورها |
| CategoryListScreen / Create / Edit | فهرست، ایجاد و ویرایش دستهبندیها |
| SettingsScreen | تنظیمات امنیتی، کارت، اشتراک و زبان |
| BackupRestoreScreen | پشتیبانگیری و بازیابی رمزگذاریشده |
| AboutScreen | اطلاعات برنامه، سلب مسئولیت، نسخه |
۶.۳ منطق کسبوکار مهم
- تولید طرح کارت: designSeed (نوع Long) با محاسبه abs(seed) % 24 یکی از ۲۴ ترکیب گرادیانت+الگو را انتخاب میکند — طرح همیشه یکسان نمایش داده میشود.
- اعتبارسنجی شبا: استخراج کد کشور → مقایسه طول با استاندارد آن کشور → اجرای MOD-97 برای تأیید چکسام.
- ترتیب نمایش کارتها: کارتهای پینشده (حداکثر ۵ عدد) در بالا، بقیه بر اساس تاریخ آخرین ویرایش.
- خطمشی اشتراکگذاری: فقط اطلاعات غیرحساس به اشتراک گذاشته میشوند؛ یادداشت و نام دلخواه در خروجی، QR و کلیپبورد درج نمیشوند.
دادهها و اطلاعات مدیریتشده
۷.۱ دادههای واردشده توسط کاربر
| فیلد | نوع | توضیح |
|---|---|---|
| نام صاحب حساب | متن | اجباری |
| کشور | انتخابی | کد ISO، اجباری |
| بانک | انتخابی | از فهرست بانکها، اجباری |
| شماره حساب | متن عددی | اجباری |
| شماره شبا (IBAN) | متن | اختیاری، اعتبارسنجیشده |
| شماره کارت | متن عددی | اختیاری، ۱۶ رقم |
| یادداشت | متن آزاد | اختیاری، نمایش در پیشنمایش، حذف از خروجی |
| نام دلخواه | متن | اختیاری، فقط برای شناسایی کاربر |
| دستهبندی | انتخابی | اختیاری |
| برچسبها (Tags) | متن | اختیاری، چند مقدار |
| جهت کارت | RTL / LTR | اختیاری |
| فونت | انتخابی | اختیاری |
| تنظیمات QR | بولین + فهرست | اختیاری |
۷.۲ دادههای تولیدشده توسط برنامه
- شناسه UUID: برای هر کارت، بانک، دستهبندی و کشور
- designSeed: عدد تصادفی برای انتخاب طرح گرافیکی
- تاریخ ایجاد و ویرایش: بهصورت epoch milliseconds
- وضعیت پین و هش رمز عبور (با PBKDF2؛ اصل رمز هرگز ذخیره نمیشود)
حریم خصوصی و امنیت
۸.۱ دادههایی که هرگز ذخیره نمیشوند
۸.۲ مکانیسمهای امنیتی پیادهسازیشده
- رمزگذاری پایگاه داده: با Android Keystore (AES-256-GCM)
- ذخیره ایمن تنظیمات: در EncryptedSharedPreferences
- مشتقسازی کلید رمز عبور: PBKDF2 با ۱۰۰,۰۰۰ تکرار و salt تصادفی ۲۵۶ بیتی
- رمزگذاری پشتیبان: AES-256-GCM (نسخه V2: salt 32 بایت، IV 12 بایت)
- جلوگیری از پشتیبان سیستم: android:allowBackup="false"
- FileProvider: اشتراکگذاری فایل بدون دسترسی مستقیم به storage
- پاکسازی ورودی: پاکسازی HTML و محدودیت طول روی همه ورودیهای کاربر
- هشدار QR: دیالوگ اجباری هنگام اشتراکگذاری پشت کارت یا هر دو طرف
بومیسازی و پشتیبانی زبانی
| زبان | وضعیت | فایل منبع |
|---|---|---|
| فارسی (Farsi) | کامل — بیش از ۳۵۰ کلید ترجمهشده | values-fa/strings.xml |
| انگلیسی (English) | کامل — بیش از ۳۵۰ کلید | values/strings.xml |
پشتیبانی RTL/LTR
- رابط کاربری فارسی بهصورت کامل RTL است
- هر کارت میتواند مستقل از زبان برنامه، RTL یا LTR باشد
- اعداد همیشه LTR نمایش مییابند؛ PDF فارسی بهصورت RTL رندر میشود
فونتهای پشتیبانیشده
رابط کاربری و تجربه کاربری
۱۰.۱ سبک طراحی
- Material Design 3 با تم سفارشی
- پشتیبانی از تم روشن (Light)، تاریک (Dark) و پیشفرض سیستم
- طراحی کاملاً RTL-native با فونت وزیرمتن برای فارسی
- انیمیشنهای اسکیل و fade در صفحه Splash
۱۰.۲ داشبورد اصلی
- ردیف آمار در بالا (تعداد کل کارتها، تقسیمبندی بر اساس دستهبندی)
- چیپهای فیلتر دستهبندی (فیلتر وابسته: انتخاب دستهبندی، فهرست بانکها را هم فیلتر میکند)
- فهرست کارتها با نمایش: «نام (۴ رقم آخر)» در خط اول، «بانک · نام دلخواه» در خط دوم
- منوی سهنقطه برای هر کارت: مشاهده، ویرایش، کپی، اشتراک سریع، پین/برداشتن پین، حذف
- دکمه شناور (FAB) برای ایجاد کارت جدید و قابلیت Swipe-to-Delete
۱۰.۳ فرم ایجاد/ویرایش کارت
- پیشنمایش زنده کارت در بالای صفحه هنگام تایپ
- بخشبندی واضح: جزئیات کارت، اطلاعات اختیاری، اطلاعات شبا، تنظیمات
- اعتبارسنجی فوری با پیام خطای واضح و دکمه بازتولید طرح
۱۰.۴ صفحه پیشنمایش کارت
- نمایش روی و پشت کارت با دکمه toggle
- پانل اطلاعات حساب (فقط خواندنی) و دکمه کپی به کلیپبورد
- Bottom Sheet خروجی: انتخاب ذخیره/اشتراک، فرمت، طرف
خروجی، پشتیبانگیری و اشتراکگذاری
۱۱.۱ خروجی تصویر
| نوع | ابعاد | توضیح |
|---|---|---|
| روی کارت | 1260×795 px | Canvas-based، deterministic |
| پشت کارت | 1260×795 px | شامل نوار مغناطیسی، امضا، QR |
| هر دو طرف | 1380×1770 px | پشت تاریک، فاصله ۶۰px بین کارتها |
ذخیره به گالری از طریق MediaStore API؛ اشتراکگذاری از طریق FileProvider و Android Share Sheet؛ رندر با Canvas API (بدون Compose) برای دترمینیستیک بودن.
۱۱.۲ خروجی PDF
صفحه A4 (595×842 pt) با هدر، اطلاعات کارت و فوتر سلب مسئولیت. در فارسی: متن RTL و فونت وزیرمتن. رندر کاملاً با Android Canvas (بدون HTML/WebView).
۱۱.۳ پشتیبانگیری و بازیابی
- فرمت فایل .rqbk (magic header: RQBK + بایت نسخه)
- رمزگذاری AES-256-GCM با کلید مشتقشده از PBKDF2
- شامل: کارتها، بانکها، دستهبندیها، کشورها، لوگوهای بانک (base64)، تنظیمات
- اعتبارسنجی اولیه (پسوند و magic header) و پشتیبان ایمنی خودکار قبل از بازیابی
معماری فنی (خلاصه)
۱۲.۱ الگوی معماری
صفحههای Compose، ViewModelها، StateFlow
Use Caseها، مدلهای خالص Kotlin، اعتبارسنجها
Room، Repositoryها، EncryptedSharedPreferences، Keystore
۱۲.۲ تزریق وابستگی
تمام وابستگیها از طریق Hilt تزریق میشوند: DatabaseModule (Room DB، DAOها، بانکهای پیشفرض) و RepositoryModule (Repositoryها و سرویسها).
۱۲.۳ پایگاه داده Room
| موجودیت | توضیح |
|---|---|
| card_records | جدول اصلی کارتها (۲۰ ستون) |
| bank_records | بانکها (پیشفرض + سفارشی) |
| categories | دستهبندیها |
| country_records | کشورها |
| app_settings | تنظیمات برنامه (یک ردیف) |
پایگاه داده در نسخه ۹ است با تاریخچه کامل migration از نسخه ۱؛ از fallbackToDestructiveMigration استفاده نشده.
۱۲.۴ خطلوله خروجی (Export Pipeline)
محدودیتها و موارد عمداً حذفشده
۱۳.۱ دادههای عمداً حذفشده
این موارد بهدلایل امنیتی و اخلاقی هرگز پیادهسازی نخواهند شد: رمز کارت (PIN)، کد امنیتی (CVV/CVC)، تاریخ انقضا، رمز اینترنتی، رمز ATM، کد یکبار مصرف (OTP).
۱۳.۲ محدودیتهای نسخه V1
- بدون همگامسازی ابری: همه دادهها محلی هستند (طراحی عمدی)
- بدون تراکنش مالی: فقط برای ذخیره اطلاعات، نه انجام تراکنش
- بدون چاپ (Print): حذف شده در REQ-027
- بدون لوگوی آماده برای بانکهای پیشفرض: نمایشدهنده حروف اول با رنگ استفاده میشود
۱۳.۳ مشکلات شناختهشده (Known Issues)
| شناسه | شدت | توضیح |
|---|---|---|
| KI-027 | مهم | ۵ رشته روی پشت کارت (مانند "AUTHORIZED SIGNATURE") هنوز فارسی نشدهاند |
| KI-030 | مهم | CardCreateViewModel مقادیر پیشفرض کاربر (جهت کارت، تنظیمات QR) را نادیده میگیرد |
| KI-033 | جزئی | پیامهای خطای ChangePasscodeSheet به انگلیسی hard-coded هستند |
| KI-034 | جزئی | پیامهای Snackbar در SettingsViewModel به انگلیسی hard-coded هستند |
| KI-035 | جزئی | AboutScreen نام و نسخه برنامه به شکل hard-coded است |
| KI-038 | کماهمیت | contentDescription دکمه بیومتریک در PinKeypad انگلیسی hard-coded است |
| KI-039 | کماهمیت | هدر "Payment Details" در payload کد QR فارسی نشده |
| KI-040 | کماهمیت | فایلپیکر import از فیلتر */* بهجای .rqbk استفاده میکند |
ویژگیهای تکمیلشده و موارد باقیمانده
۱۴.۱ ویژگیهای کاملاً پیادهسازیشده
- مدیریت کامل کارت (ایجاد، مشاهده، ویرایش، حذف، تکثیر، پین)
- ذخیرهسازی محلی با Room (نسخه ۹)
- قفل برنامه با رمز PBKDF2 + بیومتریک قوی
- صفحه Onboarding چهار مرحلهای
- خروجی تصویر (Canvas، ۲۴ طرح، روی/پشت/هر دو)
- خروجی PDF (A4، RTL/LTR، فارسی/انگلیسی)
- کد QR با هشدار حریم خصوصی اجباری
- اشتراک سریع (Quick Share) از داشبورد
- اعتبارسنجی شبا برای ۲۵ کشور (MOD-97)
- بیش از ۲۰ بانک پیشفرض از ایران و امارات
- مدیریت بانک، دستهبندی و کشور
- پشتیبانگیری و بازیابی رمزگذاریشده (AES-256-GCM)
- رابط فارسی و انگلیسی با ۳۵۰+ کلید ترجمه
- RTL/LTR مستقل برای هر کارت
- چهار خانواده فونت (Vazirmatn، Rubik، Estedad، Noto Naskh)
- داشبورد با آمار، فیلتر دستهبندی، و جستجو
- تنظیمات کامل (امنیت، کارت، اشتراک سریع، زبان، تم)
۱۴.۲ موارد ناقص یا در انتظار تأیید
در انتظار چندین build در انتظار تأیید دستی (REQ-048، REQ-049، REQ-050)
ناقص بومیسازی ناقص در چند مورد خاص (KI-027، KI-033، KI-034، KI-039)
ناقص CardCreateViewModel مقادیر پیشفرض کاربر را نادیده میگیرد (KI-030)
ناقص لوگوی بانکهای پیشفرض هنوز ایجاد نشده (placeholder رنگی استفاده میشود)
آینده V2 احتمالی: همگامسازی ابری، بانکهای بیشتر، ویژگیهای اضافی (هنوز تعریفنشده)
توضیحات بازاریابی
رقمی — کارتهای بانکی دیجیتال شما، زیبا و ایمن
با رقمی، اطلاعات حسابهای بانکیتان را در کارتهای دیجیتال زیبا ذخیره کنید و در هر زمان با یک لمس به اشتراک بگذارید. دیگر نیازی به حفظ کردن شماره حسابهای طولانی یا جستجو در پیامهای قدیمی نیست. رقمی با پشتیبانی کامل از زبان فارسی و رابط راستبهچپ، برای کاربران ایرانی و منطقه خلیج فارس طراحی شده است.
امنیت دادهها برای ما اولویت اول است: همه اطلاعات فقط روی دستگاه شما ذخیره میشوند (بدون ابر، بدون سرور)، پشتیبانگیری با رمزگذاری پیشرفته AES-256 انجام میشود، و برنامه با رمز عبور و اثر انگشت قابل قفلکردن است. رقمی هرگز اطلاعات حساس مانند رمز کارت، CVV یا رمز اینترنتی را نمیپرسد، ذخیره نمیکند، یا نمایش نمیدهد.
نتیجهگیری
رقمی یک اپلیکیشن اندرویدی V1 است که با موفقیت بیش از ۵۰ درخواست و ویژگی را پیادهسازی کرده است. این برنامه با معماری تمیز (MVVM + Clean Architecture)، امنیت قوی (Keystore + PBKDF2 + AES-256-GCM)، بومیسازی کامل فارسی و انگلیسی، و یک خطلوله خروجی قوی (Canvas + MediaStore + PDF) ساخته شده است.
اپلیکیشن هدف روشنی دارد: کمک به کاربران ایرانی و منطقه خلیج برای سازماندهی و اشتراکگذاری سریع اطلاعات بانکی، بدون هیچگونه ریسک امنیتی. با پیروی سختگیرانه از قانون «اطلاعات ممنوعه» (بدون PIN، CVV، رمز عبور)، رقمی یک ابزار قابل اعتماد و ایمن برای زندگی روزمره مالی کاربرانش است.
چند مورد باقیمانده (عمدتاً بومیسازی برخی رشتهها و اصلاح مقادیر پیشفرض) قبل از انتشار عمومی نیاز به بررسی دارند، اما ساختار کلی و ویژگیهای اصلی بهطور کامل پیادهسازی و آزمایششدهاند.
این سند بر اساس بررسی مستقیم کد منبع، مستندات پروژه، و تاریخچه تغییرات (CHANGELOG) تهیه شده است. تمام ادعاها در کد منبع یا مستندات پروژه قابل راستیآزمایی هستند.