proposal, design (D-1…D-13), спеки primary-files, osv-result-mapping, documents-api (новые), recognition-job-exchange, data-model (MODIFIED), audit-trail (ADDED), tasks (13 задач). Issue: RSHB/arm-core#14 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2.9 KiB
Spec Delta: documents-api
Purpose
Чтение файлов, документов и строк ОСВ для панели «Первичные документы» (подсрез 2d) и подтверждение документа.
ADDED Requirements
Requirement: Файлы организации и карточка файла
GET /api/v1/legal-entities/{id}/files (DOCUMENT_VIEW, policy; include_superseded=false по умолчанию) SHALL
возвращать Page файлов ЮЛ по убыванию uploaded_at: поля stored_file, текущее задание (status, error_code,
error_message, metrics.warnings, metrics.mapping_warnings, finished_at), документы файла (id, document_type,
osv_account_code, period_year, period_quarter, is_cumulative, status, period_check, counterparty_check).
GET /api/v1/files/{file_id} SHALL отдавать ту же карточку; чужой или несуществующий файл — 404.
Scenario: Список после обработки
- WHEN у ЮЛ два файла:
PROCESSEDс документом иERROR - THEN оба в списке; у первого
documentsнепустой, у второгоjob.error_codeзаполнен
Requirement: Документ и строки
GET /api/v1/documents/{document_id} (DOCUMENT_VIEW, policy по ЮЛ владельца) SHALL отдавать документ, статус,
проверки, locator, схему группировок листа из recognition_job.group_schema и file_id.
GET /api/v1/documents/{document_id}/entries SHALL отдавать Page строк по возрастанию row_number (limit ≤ 2000,
по умолчанию 500) с полями osv_entry, включая parent_entry_id, account_id, counterparty_id.
Scenario: Строки деревом
- WHEN запрошены строки документа ОСВ 66
- THEN первая строка — счёт
66уровня 0 без родителя, у строк уровня 2parent_entry_idуказывает на субсчёт
Requirement: Подтверждение документа
POST /api/v1/documents/{document_id}/confirm (DOCUMENT_EDIT, policy) SHALL переводить документ из RECOGNIZED
или NEEDS_CHECK в CONFIRMED (confirmed_by, confirmed_at) с audit_event(DOCUMENT_CONFIRM, PRIMARY_DOCUMENTS);
из CONFIRMED повторно — 409 ALREADY_CONFIRMED; документ файла SUPERSEDED — 409 FILE_SUPERSEDED.
Scenario: Подтверждение
- WHEN
ka_rfподтверждает документNEEDS_CHECKсвоего филиала - THEN
status = CONFIRMED,confirmed_by= пользователь,audit_event(DOCUMENT_CONFIRM)сbefore_value.status = NEEDS_CHECK