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:
@@ -0,0 +1,38 @@
|
||||
# چک خروجی و یادآوری سررسید — برنامه پیادهسازی
|
||||
|
||||
> اجرا در همین نشست؛ کامیت فقط اگر کاربر بخواهد.
|
||||
|
||||
**Goal:** دفتر چک دریافتی/پرداختی + یادآوری یکبار سه روز قبل از سررسید.
|
||||
|
||||
**Architecture:** فیلد `direction` و `reminderNotifiedAt` روی `Cheque`. زمانبند `@nestjs/schedule` ساعت ۸ تهران. متن و تشخیص روز در `cheque-reminder.util.ts`.
|
||||
|
||||
**Tech Stack:** Prisma, NestJS, Vue 3, `@nestjs/schedule`, SMS موجود، اعلان موجود.
|
||||
|
||||
## Global Constraints
|
||||
|
||||
- npm workspaces؛ Prisma فقط از `apps/api`
|
||||
- متن پیامک با `یادآوری منتکت:` و حداکثر ۱۶۰ نویسه
|
||||
- پرداختی به فاکتور وصل نمیشود؛ چک فاکتور همیشه `in`
|
||||
- بدون سند حسابداری
|
||||
|
||||
## Files
|
||||
|
||||
- `apps/api/prisma/schema.prisma` + migration `20260911120000_cheque_direction_reminder`
|
||||
- `packages/shared/src/index.ts`
|
||||
- `apps/api/src/finance/cheque-reminder.util.ts`
|
||||
- `apps/api/src/finance/__tests__/cheque-reminder.check.ts`
|
||||
- `apps/api/src/finance/cheque-reminders.service.ts`
|
||||
- `apps/api/src/finance/{cheques.service,dto,finance.controller,finance.module}.ts`
|
||||
- `apps/api/src/invoices/invoices.service.ts`
|
||||
- `apps/api/src/app.module.ts`
|
||||
- `apps/api/package.json` (`@nestjs/schedule`)
|
||||
- `apps/web/src/views/ChequesView.vue`
|
||||
|
||||
## Tasks
|
||||
|
||||
1. util + unit check (روز تهران، متن پیامک)
|
||||
2. schema/migration + shared types
|
||||
3. API create/list direction؛ فاکتور `direction: in`
|
||||
4. ChequeRemindersService + cron
|
||||
5. UI تب و مودال پرداخت
|
||||
6. `npm run build -w @mento/shared`، migrate، generate، unit check
|
||||
@@ -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 میماند.
|
||||
|
||||
متنها با پیشوند `یادآوری منتکت:` و حداکثر حدود ۱۶۰ نویسه:
|
||||
|
||||
- شخص (فقط دریافتی): `یادآوری منتکت: چک شماره {شماره} به مبلغ {مبلغ} سه روز دیگر ({سررسید شمسی}) سررسید میشود.`
|
||||
- داخلی دریافتی: `یادآوری منتکت: چک دریافتی {شماره} از {نام شخص}، مبلغ {مبلغ}، سررسید {تاریخ} (۳ روز دیگر).`
|
||||
- داخلی پرداختی: `یادآوری منتکت: چک پرداختی {شماره} به {نام شخص}، مبلغ {مبلغ}، سررسید {تاریخ} (۳ روز دیگر).`
|
||||
|
||||
## خارج از این نسخه
|
||||
|
||||
سند حسابداری برای چک خروجی، وصل پرداختی به فاکتور، یادآوری روز سررسید یا برگشت، تنظیم فاصلهٔ روز از داخل تنظیمات.
|
||||
Reference in New Issue
Block a user