Дмитрий
b55ca6507d
feat(audit): extract AuditChainConfig shared TABLE config (ADR-018 prep)
2026-05-29 18:14:38 +03:00
Дмитрий
662be183db
feat(schema): project_routing_snapshots partitioned table + MonthlyPartitionManager entry (Task 2.1, Slepok routing Etap 2)
...
- migration 2026_05_27_120000: CREATE TABLE project_routing_snapshots PARTITION BY RANGE (snapshot_date)
composite PK (snapshot_date, project_id), FK tenant_id->tenants ON DELETE CASCADE
RLS policy tenant_isolation, indexes tenant_date + signal
GRANT crm_app_user (SELECT/INSERT/UPDATE), crm_supplier_worker (+DELETE)
initial partitions y2026_m05 + y2026_m06
system_settings retention 3m
- MonthlyPartitionManager::PARTITIONED_TABLES +'project_routing_snapshots' => 'snapshot_date'
- db/schema.sql -> v8.39
- tests: ProjectRoutingSnapshotsTableTest (3) + Unit/MonthlyPartitionManagerTest (1) GREEN
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-27 07:56:08 +03:00
Дмитрий
7e79bf714a
feat(project-bulk): distinguish supplier_snapshot_locked from has_deals in bulkDelete
2026-05-26 11:28:57 +03:00
Дмитрий
69aeac3756
feat(project-pause): set/clear paused_at on toggle and bulk pause-resume
2026-05-26 11:27:53 +03:00
Дмитрий
84272c5ccd
feat(project-service): wire SupplierSnapshotGuard into delete() and update()
2026-05-26 11:26:12 +03:00
Дмитрий
0b07debb7a
test(supplier-snapshot-guard): isProtected + assertCanMutateSource unit tests via Mockery
2026-05-26 11:23:27 +03:00
Дмитрий
d51ba5f57d
test(supplier-snapshot-guard): failing unit tests for computeGraceUntil
2026-05-26 11:17:53 +03:00
Дмитрий
871ca6b6aa
fix(billing-v2): regression — Larastan @phpstan type hints + Pint auto-format
2026-05-23 18:46:23 +03:00
Дмитрий
cedf4ae5c4
feat(billing-v2): add BalanceToLeadsConverter (pure ₽→лиды по ступеням)
2026-05-23 18:46:10 +03:00
Дмитрий
5df34a61eb
style+done(p2): pint formatting + P2 plan DONE marker
2026-05-22 18:53:11 +03:00
Дмитрий
bf47d46a8e
feat(audit): OperationsLogger service (tenant_operations_log writer)
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-22 18:53:07 +03:00
Дмитрий
bc09186299
style+fix(pd): pint formatting + nullsafe.neverNull fix + lifecycle test predicate
2026-05-22 16:50:21 +03:00
Дмитрий
c4e6691b28
feat(audit): ImpersonationAuditService (saas_admin_audit_log + pd on verify)
2026-05-22 16:50:19 +03:00
Дмитрий
38914fc779
feat(pd): PdAuditLogger service (152-ФЗ pd_processing_log writer)
2026-05-22 16:50:15 +03:00
Дмитрий
b584ce43dd
feat(supplier): LeadDistributor cap=3 seedable random selection
2026-05-20 11:30:00 +03:00
Дмитрий
3e16c1e656
feat(supplier): RegionTagResolver + RussianRegions (subject name->code)
2026-05-20 11:22:06 +03:00
Дмитрий
5f08459615
feat(services): PhonePrefixService — phone → federal district bit (MVP)
...
Маппинг мобильных + 30+ ABC-кодов городов на 8 ФО RF (synchronized
с projects.region_mask битами). Мобильные → all-districts (255).
Полный Минсвязи справочник отложен на Plan 5+.
Spec: §6 step 2 routing geo-filter.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-10 18:36:43 +03:00