Let cheques be received or paid without an invoice, and remind staff three days before due date.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-11 11:34:49 +03:30
co-authored by Cursor
parent 9a991fc1f1
commit 9beaed96e8
18 changed files with 982 additions and 61 deletions
@@ -0,0 +1,54 @@
# چک خروجی و یادآوری سررسید
تاریخ: ۱۴۰۵/۶/۲۰
وضعیت: تأییدشده برای پیاده‌سازی
## هدف
دفتر چک هم دریافتی و هم پرداختی باشد. سه روز قبل از سررسید، یک‌بار به افراد توافق‌شده اطلاع داده شود.
## صفحه
مسیر همان `/cheques` است؛ لینک سایدبار عوض نمی‌شود.
دو تب: **دریافتی** و **پرداختی**. دو دکمه: **دریافت چک** و **پرداخت چک**. هر کدام مودال جدا با فیلدهای شخص، مبلغ، ارز (اگر بیش از یکی فعال باشد)، شماره، بانک، سررسید، وضعیت، یادداشت. در پرداختی شخص یعنی گیرنده.
ستون‌های جدول مثل الان. وضعیت:
- دریافتی: در جریان / وصول شد / برگشت
- پرداختی: در جریان / پرداخت شد / برگشت
چک وصل به فاکتور فقط در تب دریافتی دیده می‌شود. پرداختی به فاکتور وصل نمی‌شود.
## داده
همان مدل `Cheque` با:
- `direction`: `in` | `out` (چک فاکتور همیشه `in`)
- `reminderNotifiedAt`: تا هر چک فقط یک‌بار یادآوری شود
`POST /cheques` جهت را می‌گیرد. `GET /cheques?direction=in|out` فیلتر می‌کند. `PATCH` وضعیت مثل قبل.
## یادآوری
زمان‌بند روزانه حدود ساعت ۸ به وقت تهران. فقط چک‌های `pending` که روز سررسیدشان دقیقاً ۳ روز بعد است (تقویم تهران).
گیرندگان داخلی: همهٔ کاربران `owner`/`admin` سازمان + ثبت‌کنندهٔ چک (`ownerId`). اگر یک نفر دو نقش دارد، یک‌بار.
کانال:
- همهٔ گیرندگان داخلی: اعلان داخل برنامه (عنوان «سررسید چک»، لینک `/cheques`) + پیامک اگر موبایل داشته باشند
- دریافتی: پیامک به موبایل شخص طرف‌حساب
- پرداختی: به شخص پیامک نمی‌رود
بعد از تلاش برای آن چک، `reminderNotifiedAt` ست می‌شود. خطای یک چک بقیه را متوقف نمی‌کند. اگر پیامک پیکربندی نباشد یا موبایل خالی باشد، همان کانال رد می‌شود؛ اعلان داخل برنامه برای کاربران CRM می‌ماند.
متن‌ها با پیشوند `یادآوری منتکت:` و حداکثر حدود ۱۶۰ نویسه:
- شخص (فقط دریافتی): `یادآوری منتکت: چک شماره {شماره} به مبلغ {مبلغ} سه روز دیگر ({سررسید شمسی}) سررسید می‌شود.`
- داخلی دریافتی: `یادآوری منتکت: چک دریافتی {شماره} از {نام شخص}، مبلغ {مبلغ}، سررسید {تاریخ} (۳ روز دیگر).`
- داخلی پرداختی: `یادآوری منتکت: چک پرداختی {شماره} به {نام شخص}، مبلغ {مبلغ}، سررسید {تاریخ} (۳ روز دیگر).`
## خارج از این نسخه
سند حسابداری برای چک خروجی، وصل پرداختی به فاکتور، یادآوری روز سررسید یا برگشت، تنظیم فاصلهٔ روز از داخل تنظیمات.