از پارسکدرز بیشترین بهره را ببرید و رویای کاری خود را زندگی کنید.
یک روز پیش منتشر شده
تعداد بازدید: 62
کد پروژه: 616159
شرح پروژه
برای ساخت یک اپلیکیشن اندرویدی Native و کاملاً جدید با نام «رأسگیر چک» به برنامهنویس حرفهای Kotlin/Android نیاز دارم. پروژه باید از صفر ساخته شود و در پایان، APK واقعی و قابلنصب به همراه سورس کامل تحویل داده شود.
این برنامه برای محاسبه رأس وزنی چند فاکتور، پیشنهاد خودکار تاریخ و مبلغ چکها، مدیریت پیشپرداخت و ساخت تصویر شرایط تسویه مشتری است.
الزامات فنی قطعی:
- Native Android با Kotlin و ترجیحاً Jetpack Compose
- معماری استاندارد MVVM و پایگاه داده Room
- حداقل Android 8 و سازگار با Android 15
- بدون WebView، HTML، PWA یا تبدیل سایت به APK
- تمام محاسبات و اطلاعات اصلی کاملاً آفلاین
- برنامه اصلی بدون تبلیغات، آمارگیر و ارسال اطلاعات
- رابط فارسی، راستچین، ساده و خوانا
- تاریخها فقط شمسی و از طریق تقویم شمسی
- ورودی مبلغ داخل برنامه به تومان
- جداسازی سهرقمی مبلغ هنگام تایپ؛ مانند 15,000,000
- نمایش اعداد داخل برنامه به انگلیسی
- استفاده از محاسبات صحیح و کسر دقیق؛ استفاده از Float/Double برای محاسبات مالی ممنوع است
- پشتیبانی از مبلغهای بسیار بزرگ بدون سرریز
۱. اطلاعات فاکتورها
تعداد فاکتورها محدودیت ثابت نداشته باشد. هر فاکتور شامل:
- مبلغ فاکتور
- تاریخ خرید شمسی
- تعداد روز رأس همان فاکتور
روز خرید، روز اول حساب میشود:
تاریخ سررسید هر فاکتور = تاریخ خرید + تعداد روز رأس − ۱ روز
مثلاً فاکتور ۱۰ مهر با رأس یکروزه، سررسیدش همان ۱۰ مهر است.
۲. فرمول رأس وزنی
برای هر فاکتور:
aᵢ = مبلغ فاکتور
pᵢ = تاریخ خرید به عدد روز
rᵢ = تعداد روز رأس
qᵢ = pᵢ + rᵢ − 1
جمع بدهی:
D = Σaᵢ
تاریخ مبنای وزنی خرید:
P = Σ(aᵢ × pᵢ) ÷ D
تاریخ سررسید وزنی بدهی:
Q = Σ(aᵢ × qᵢ) ÷ D
هدف برنامه پرداخت همیشه دو روز زودتر از رأس بدهی باشد:
T = Q − 2
محاسبات داخلی باید دقیق و کسری باقی بمانند. برای نمایش تاریخ، کسری روز به نزدیکترین روز گرد شود و نیمروز رو به بالا محاسبه شود.
مثال: خرید مساوی در روزهای ۱ و ۲۰، تاریخ مبنای دقیق ۱۰٫۵ دارد و باید روز ۱۱ نمایش داده شود.
تاریخ مبنای خرید، رأس بدهی و رأس پرداخت فقط برای اپراتور نمایش داده شوند و در تصویر ارسالی مشتری نباشند.
۳. پیشنهاد خودکار چکها
برنامه براساس رأس وزنی، تعداد، تاریخ و مبلغ چکها را خودکار پیشنهاد دهد.
- فاصله پیشفرض چکها دقیقاً ۳۰ روز باشد.
- اولین چک تا حد امکان نزدیک به تاریخ شروع مجاز یا در ماه اول قرار گیرد.
- اگر تاریخ پیشنهادی گذشته باشد، برنامه از امروز یا نزدیکترین تاریخ آینده شروع کند.
- تعداد چک پیشنهادی قابل تغییر باشد.
- مبلغها ابتدا تا حد امکان مساوی باشند.
- مبلغ چکها تا حد امکان مضرب یکمیلیون تومان باشند.
- یک چک میتواند برای حفظ جمع و رأس دقیق از حالت رُند خارج شود.
- جمع مبلغ چکها و پیشپرداخت باید دقیقاً برابر بدهی باشد.
شرط دقیق برنامه پرداخت:
پیشپرداخت + جمع چکها = کل بدهی
و:
پیشپرداخت × تاریخ پیشپرداخت + Σ(مبلغ چک × تاریخ چک) = D × T
این دو شرط نباید حتی یک تومان یا کسری از محاسبات اختلاف داشته باشند.
۴. حالتهای تنظیم چک
هر چهار حالت زیر لازم است:
1. جابهجایی همه چکهای آزاد
2. متمرکزکردن تغییر رأس روی تاریخ یک چک انتخابشده
3. سنگینترکردن مبلغ یک چک و سبکترکردن بقیه
4. تنظیم کاملاً دستی مبلغ و تاریخها
مثلاً در سه چک هممبلغ، جابهجایی هر سه چک بهاندازه ۱۵ روز، از نظر رأس معادل جابهجایی یک چک بهاندازه ۴۵ روز است.
۵. قفل تاریخ و مبلغ
برای هر چک دو قفل مستقل وجود داشته باشد:
- قفل تاریخ
- قفل مبلغ
بعد از تغییر دستی هر بخش، برنامه بپرسد همان بخش قفل شود یا خیر.
با تغییر یک تاریخ یا مبلغ، تمام چکهای آزاد باید همان لحظه اصلاح شوند تا جمع بدهی و رأس وزنی حفظ شود.
اولویت الگوریتم:
1. رعایت کامل قفلها
2. حفظ دقیق جمع مبلغ
3. حفظ دقیق رأس هدف
4. کمترین تغییر مبلغها و تاریخها
5. حفظ فاصله نزدیک به ۳۰ روز
6. رُندماندن مبلغها تا حد امکان
قفلها هرگز خودکار باز یا تغییر داده نشوند.
اگر پاسخ دقیق ممکن نبود:
- هشدار واضح داده شود.
- هیچ قفلی خودکار باز نشود.
- نزدیکترین برنامه ممکن ارائه شود.
- اختلاف رأس، کسری یا اضافه مبلغ دقیقاً نمایش داده شود.
- قفلهای ایجادکننده تعارض مشخص شوند.
۶. پیشپرداخت
در هر محاسبه یک پیشپرداخت اختیاری با مبلغ و تاریخ وجود داشته باشد.
اگر تاریخ چکها دیرتر از رأس مجاز باشد، برنامه باید مبلغ پیشپرداخت لازم برای اصلاح رأس را محاسبه کند.
در حالت ساده:
X = D × (A − T) ÷ (A − d₀)
X = پیشپرداخت لازم
D = بدهی
A = تاریخ وزنی فعلی چکها
T = تاریخ هدف
d₀ = تاریخ پیشپرداخت
تاریخ پیشپرداخت پیشفرض امروز باشد ولی قابل تغییر با تقویم شمسی باشد. با تغییر تاریخ، مبلغ موردنیاز فوراً اصلاح شود.
پیشپرداخت پیشنهادی خودکار اعمال نشود و دکمه «اعمال پیشپرداخت» داشته باشد.
اپراتور بتواند مبلغی بیشتر از پیشنهاد وارد کند. در این حالت چکهای آزاد باید متناسب با پیشپرداخت بیشتر، دیرتر شوند تا منفعت آن برای اپراتور قابل مشاهده باشد.
برای پیشپرداخت هم ورودی دستی مبلغ و هم نوار تغییر مبلغ در نظر گرفته شود.
پیام منفعت پیشپرداخت فقط برای اپراتور باشد و در تصویر مشتری نمایش داده نشود.
تست قطعی:
بدهی ۱۵۰ میلیون تومان، میانگین فعلی چکها روز ۱۰۸، هدف روز ۹۰ و پیشپرداخت در روز صفر، باید پیشپرداخت لازم ۲۵ میلیون تومان بدهد.
۷. هشدار مشتری
اگر رأس واقعی چکهای قفلشده از رأس بدهی بیشتر باشد، تصویر مشتری همچنان ساخته شود ولی داخل آن نوشته شود:
- میزان اختلاف
- مبلغ دقیق پیشپرداخت لازم
- تاریخ پیشپرداخت
- توضیح اینکه پیشپرداخت باید از جمع چکها کسر شود
اگر رأس مساوی یا کمتر از رأس بدهی باشد، هشدار تأخیر داخل تصویر نشان داده نشود.
اگر جمع چکهای قفلشده با بدهی برابر نباشد، کسری یا اضافه مبلغ دقیقاً داخل تصویر هشدار داده شود.
اگر حتی پرداخت کامل امروز نیز برای اصلاح رأس دیر باشد، برنامه صریحاً این موضوع را اعلام کند.
۸. تصویر مشتری
عنوان پیشفرض تصویر:
«شرایط تسویه حساب»
عنوان از تنظیمات قابل تغییر باشد.
تصویر پیشفرض زمینه سفید و جزئیات سبز داشته باشد و هنگام ساخت، چند رنگ دیگر نیز قابل انتخاب باشد.
تصویر فقط شامل این موارد باشد:
- عنوان
- نام اختیاری مشتری
- جمع بدهی
- پیشپرداخت، در صورت وجود
- جدول مبلغ و تاریخ چکها
- هشدار لازم، فقط در صورت وجود مشکل
موارد زیر نباید در تصویر مشتری باشند:
- رأس وزنی
- تاریخ مبنای خرید
- فرمولها
- فهرست فاکتورها
- اطلاعات داخلی اپراتور
مبلغهای تصویر باید از تومان به ریال تبدیل شوند و هم به عدد و هم به حروف نوشته شوند.
مثال:
250,000,000 ریال
دویست و پنجاه میلیون ریال
تصویر باکیفیت PNG در گالری ذخیره و از طریق Share Sheet اندروید ارسال شود. اگر تصویر بیش از حد بلند شد، برنامه هر بار بین «یک تصویر بلند» و «چند تصویر شمارهگذاریشده» سؤال کند.
۹. صفحات و سوابق
مراحل اصلی:
1. اطلاعات مشتری
2. فاکتورها
3. نتیجه رأس
4. چکها
5. تصویر مشتری
صفحه خانه شامل:
- محاسبه جدید
- ادامه محاسبه نیمهتمام
- سوابق
- تنظیمات
ذخیرهسازی خودکار باشد. سوابق قابلیت مشاهده، ویرایش، کپی به محاسبه جدید، حذف و ارسال مجدد تصویر داشته باشند.
حذف ابتدا به سطل زباله منتقل و بعد از ۳۰ روز دائمی شود.
جستوجو براساس نام مشتری، تاریخ، مبلغ و تعداد چک لازم است.
پشتیبان خودکار بعد از تغییرات مهم ساخته شود و ۳۰ نسخه آخر در پوشه Documents/RasGir نگهداری شود.
در بازیابی، انتخاب بین این دو حالت وجود داشته باشد:
- جایگزینی کامل
- ادغام بدون رکورد تکراری
۱۰. جلوگیری از کپی و استفاده غیرمجاز
فایل APK ممکن است برای دیگران فرستاده شود، اما روی هیچ گوشی دیگری بدون تأیید من فعال نشود.
فعالسازی باید آفلاین و وابسته به همان دستگاه باشد:
1. برنامه در اولین اجرا یک کلید اختصاصی داخل Android Keystore بسازد.
2. کد یا QR درخواست فعالسازی نمایش دهد.
3. کاربر کد را برای من ارسال کند.
4. من با ابزار مدیریتی جداگانه مجوز امضاشده تولید کنم.
5. مجوز فقط روی همان گوشی معتبر باشد.
6. کپی APK یا فایل مجوز روی گوشی دیگر کار نکند.
7. حذف برنامه، تعویض گوشی یا بازنشانی کارخانه نیازمند فعالسازی مجدد باشد.
8. مجوزها بتوانند دائمی یا تاریخدار باشند.
کلید خصوصی صدور مجوز نباید داخل APK اصلی قرار گیرد. پیشنهاد فنی: امضای ECDSA P-256/SHA-256، نگهداری کلید دستگاه در Android Keystore، فعالسازی R8 و بررسی امضای برنامه.
برای من یک ابزار مدیریتی جداگانه لازم است که:
- با رمز و اثرانگشت محافظت شود.
- کد درخواست را دریافت یا اسکن کند.
- مجوز دائمی یا زماندار صادر کند.
- فهرست مجوزها را نگهداری کند.
- از کلید اصلی صدور مجوز، خروجی رمزگذاریشده تهیه کند.
- پس از حذف برنامه یا تعویض گوشی من، با فایل و رمز بازیابی قابل بازگردانی باشد.
برنامه اصلی برای کار عادی رمز ورود لازم ندارد؛ قفل فقط برای ابزار مدیریت مجوز است.
۱۱. تست و تحویل
موارد زیر باید تحویل داده شوند:
- سورس کامل Android Studio برنامه اصلی
- سورس کامل ابزار مدیریت مجوز
- APK نصبشونده و امضاشده هر دو
- Gradle Wrapper و نسخه دقیق وابستگیها
- راهنمای Build، نصب، پشتیبانگیری و بازیابی
- راهنمای صدور و بازیابی مجوز
- تستهای واحد و گزارش تست
- کلید امضای Release و کلید مدیریت مجوز بهصورت امن
- مالکیت کامل سورس و کلیدها برای سفارشدهنده
برنامه باید روی Android 8، 10، 13 و 15 آزمایش شود و در حالت پرواز کاملاً کار کند.
تستهای الزامی:
- محاسبه صحیح روز اول
- عبور صحیح از ماه و سال شمسی
- حفظ دقیق جمع مبلغ و رأس
- قفل مستقل تاریخ و مبلغ
- محاسبه صحیح پیشپرداخت
- تبدیل صحیح تومان به ریال و حروف
- تشخیص حالت ناممکن
- جلوگیری از فعالشدن APK یا مجوز کپیشده روی گوشی دوم
- بازیابی ابزار مدیریت پس از حذف یا تعویض گوشی
- عدم نمایش صفحه سفید یا بستهشدن ناگهانی
لطفاً در پیشنهاد خود مشخص کنید:
- سابقه ساخت اپ Native Kotlin و نمونه مشابه
- روش پیادهسازی الگوریتم قفلها و رأس دقیق
- روش امنیت و فعالسازی وابسته به دستگاه
- زمان و هزینه هر مرحله
- تستهایی که تحویل میدهید
مهارت ها و تخصص های مورد نیاز
بودجه
25,000 تومان تا 36,000,000 تومان
مهلت برای انجام
35روز
وضعیت مناقصه
باز (آماده دریافت پیشنهاد)
درباره کارفرما
عضویت نه روز پیش
نیاز به استخدام فریلنسر یا سفارش پروژه مشابه دارید؟
قادر به انجام این پروژه هستید؟
تا کنون 10 پیشنهاد قیمت از سمت فریلنسرها برای این پروژه ارسال شده
پنل ممبر گیر و فالوور گیر و ویو گیر
یک روز پیش منتشر شده
به رایگان یک حساب کاربری بسازید
مهارتها و تخصصهای خود را ثبت کنید، رزومه و نمونهکارهای خود را نشان دهید و سوابق کاری خود را شرح دهید.
به شیوهای که دوست دارید کار کنید
برای پروژههای دلخواه در زمان دلخواه پیشنهاد قیمت خود را ثبت کنید و به فرصتهای شغلی منحصر به فرد دسترسی پیدا کنید.
با اطمینان دستمزد دریافت کنید
از زمان شروع کار تا انتهای کار به امنیت مالی شما کمک خواهیم کرد. وجه پروژه را از ابتدای کار به امانت در سایت نگه خواهیم داشت تا تضمین شودکه بعد از تحویل کار دستمزد شما پرداخت خواهد شد.
میخواهید شروع به کار کنید؟
یک حساب کاربری بسازید
بهترین مشاغل فریلنسری را پیدا کنید
رشد شغلی شما به راحتی ایجاد یک حساب کاربری رایگان و یافتن کار (پروژه) متناسب با مهارتهای شما
است.
پیدا کردن کار (پروژه)
تماشای دمو روش کار