docs(sprint5): чек-лист — Demand, OrgAudit, Email-шаблоны, ImportJob persistence

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
nns 2026-05-28 16:10:35 +05:00
parent d3355a9445
commit 602c0579ec

31
docs/sprint5-progress.md Normal file
View file

@ -0,0 +1,31 @@
# Спринт 5 — оптовые продажи, email, аудит, надёжность import-job
Автономная работа. После каждого пункта: `dotnet build` (SDK 8.0.126),
unit + integration тесты, коммит порцией, отметка `[x]`, коммит прогресса.
Multi-tenant: все новые сущности — `TenantEntity` с `OrganizationId` +
query filter. E2E на изоляцию A vs B где применимо.
## Чек-лист
1. [ ] **P1-5 Оптовая отгрузка (Demand)** — Domain `Demand`+`DemandLine`
(CounterpartyId юрлица, способ оплаты нал/безнал, цена опт., НДС). EF +
миграция. Контроллер CRUD + Post/Unpost. Web `/sales/demands`.
`StockMovement` тип `WholesaleSale`. Multi-tenant. Тесты.
2. [ ] **P1-18 Аудит мутаций tenant'а** — Domain `OrgAuditLog` (как
`SuperAdminAuditLog`, но per-org). Hook через EF SaveChangesInterceptor
на Supply/Sale/Demand/Product/Counterparty. UI: `/audit-log` для админа.
Multi-tenant строго. Тесты.
3. [ ] **P1-22 Email-шаблоны** — расширить MailKit-сервис:
`Resources/EmailTemplates/*.html`. Шаблоны: приглашение сотрудника с
временным паролем (sendInvite=true), еженедельный summary владельцу
(Hangfire recurring), low-stock alert (Hangfire daily). Тесты рендеринга.
4. [ ] **TD-5 ImportJobRegistry в БД** — сейчас in-memory `ConcurrentDictionary`,
теряется при рестарте. Перевод на таблицу `ImportJobs` (Id, OrgId, Status,
Progress, Total, StartedAt, FinishedAt, Errors JSON). Миграция.
`MoySkladImportController` использует. Тесты.
## Лог
- Каждый пункт: build + тесты + коммит порцией + отметка [x] + коммит прогресса.
- Все правки на `main` (origin Forgejo), без коммита `global.json`.