openspec: архив nats-files-subjects (#74) #78
@ -8,7 +8,7 @@
|
||||
## Requirements
|
||||
|
||||
### Requirement: Сообщение запроса распознавания
|
||||
Тело сообщения на subject `recognition.tabular.request` или `recognition.image.request` SHALL соответствовать
|
||||
Тело сообщения на subject `files.tabular_uploaded` или `files.img_uploaded` SHALL соответствовать
|
||||
`docs/contracts/recognition-request.schema.json` v1.0: обязательные поля `schema_version` (`"1.0"`), `job_id` (uuid =
|
||||
`recognition_job.id`), `file_id` (uuid = `stored_file.id`), `pipeline` (`tabular` | `image`), `file_type`
|
||||
(`XLS` | `XLSX` | `XLSB` | `PDF` | `PNG` | `JPG`), `original_name`, `s3 {bucket, key}` исходника в роли `uploads`,
|
||||
@ -46,7 +46,7 @@
|
||||
сервиса (`scan-gateway` отвечает `error TIMEOUT`, если `reply_deadline` истёк до отправки файла в ИС Сканирование)
|
||||
|
||||
### Requirement: Подтверждение взятия в работу (ack без JetStream)
|
||||
Получив корректный запрос (прошедший проверку схемы и `MAJOR`), сервис SHALL немедленно, до чтения файла из S3, опубликовать в `recognition.result` конверт со
|
||||
Получив корректный запрос (прошедший проверку схемы и `MAJOR`), сервис SHALL немедленно, до чтения файла из S3, опубликовать в `files.tabular_parsed` конверт со
|
||||
`status = processing`, `job_id`, `file_id`, `service {name, version}` и заголовком `Nats-Msg-Id = ack:<job_id>:<attempt>`.
|
||||
Ядро SHALL перевести задание `published → processing` и записать `started_at`, `service_name`, `service_version`. Если
|
||||
ack не получен за `ACK_TIMEOUT_SECONDS` (по умолчанию 30), ядро SHALL опубликовать запрос повторно с тем же
|
||||
@ -54,7 +54,7 @@ ack не получен за `ACK_TIMEOUT_SECONDS` (по умолчанию 30),
|
||||
|
||||
#### Scenario: Сервис жив
|
||||
- **WHEN** запрос опубликован и сервис подписан
|
||||
- **THEN** в течение `ACK_TIMEOUT_SECONDS` в `recognition.result` появляется конверт `processing`, задание получает
|
||||
- **THEN** в течение `ACK_TIMEOUT_SECONDS` в `files.tabular_parsed` появляется конверт `processing`, задание получает
|
||||
`status = processing` и `started_at`
|
||||
|
||||
#### Scenario: Сервис недоступен
|
||||
@ -67,7 +67,7 @@ ack не получен за `ACK_TIMEOUT_SECONDS` (по умолчанию 30),
|
||||
- **THEN** сервис публикует ack повторно и не начинает вторую обработку
|
||||
|
||||
### Requirement: Сообщение результата распознавания
|
||||
Тело сообщения на subject `recognition.result` SHALL соответствовать `docs/contracts/recognition-result-message.schema.json`
|
||||
Тело сообщения на subject `files.tabular_parsed` SHALL соответствовать `docs/contracts/recognition-result-message.schema.json`
|
||||
v1.0: обязательные поля `schema_version` (`"1.0"`), `job_id`, `file_id`, `status` (`processing` | `done` | `needs_check` |
|
||||
`error`), `service {name, version}`; при `status ∈ {done, needs_check}` обязательны `result_s3 {bucket, key}` и
|
||||
`result_schema_version`; при `status = error` обязателен `error {code, message}`; опциональны `raw_s3_key`
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user