fix: ревью Opus — баги #1-2 + Protocol расширен + BatchGroupingResult

This commit is contained in:
2026-06-28 09:31:59 +04:00
parent fb1362bedc
commit 08c2b0c3a7
3 changed files with 93 additions and 10 deletions
+75 -2
View File
@@ -63,6 +63,30 @@ class Repository(Protocol):
"""Текущая спецификация контракта."""
...
def get_document(self, doc_id: str) -> dict | None:
"""Получить документ по id."""
...
def list_by_batch(self, batch_id: str) -> list[dict]:
"""Все документы батча с полями классификации."""
...
def count_by_status(self, batch_id: str) -> dict[str, int]:
"""Количество документов по classify_status."""
...
def reset_classify_status(self, batch_id: str) -> None:
"""Сбросить classify_status на 'pending'."""
...
def set_classify_processing(self, doc_id: str) -> None:
"""Пометить документ как обрабатываемый."""
...
def delete_document(self, doc_id: str) -> None:
"""Удалить документ."""
...
# ── Продакшен: обёртка над db/*.py ──────────────────────────────
@@ -76,8 +100,7 @@ class PgRepository:
def set_document_parsed(self, doc_id, elements):
from db import documents
import json as _json
documents.set_parsed(doc_id, _json.dumps(elements, ensure_ascii=False))
documents.set_parsed(doc_id, elements) # documents.set_parsed уже делает json.dumps
def set_document_error(self, doc_id, error):
from db import documents
@@ -118,6 +141,30 @@ class PgRepository:
from db import spec_current
return spec_current.list_by_contract(contract_id)
def get_document(self, doc_id):
from db import documents
return documents.get(doc_id)
def list_by_batch(self, batch_id):
from db import documents
return documents.list_by_batch(batch_id)
def count_by_status(self, batch_id):
from db import documents
return documents.count_by_status(batch_id)
def reset_classify_status(self, batch_id):
from db import documents
documents.reset_classify_status(batch_id)
def set_classify_processing(self, doc_id):
from db import documents
documents.set_classify_processing(doc_id)
def delete_document(self, doc_id):
from db import documents
documents.delete(doc_id)
# ── Тестовый: in-memory заглушка ────────────────────────────────
@@ -191,3 +238,29 @@ class MemRepository:
def get_spec_current(self, contract_id):
return self.spec_current.get(contract_id, [])
def get_document(self, doc_id):
return self.documents.get(doc_id)
def list_by_batch(self, batch_id):
return [d for d in self.documents.values() if d.get("batch_id") == batch_id]
def count_by_status(self, batch_id):
counts = {}
for d in self.documents.values():
if d.get("batch_id") == batch_id:
s = d.get("classify_status", "unknown")
counts[s] = counts.get(s, 0) + 1
return counts
def reset_classify_status(self, batch_id):
for d in self.documents.values():
if d.get("batch_id") == batch_id:
d["classify_status"] = "pending"
def set_classify_processing(self, doc_id):
if doc_id in self.documents:
self.documents[doc_id]["classify_status"] = "processing"
def delete_document(self, doc_id):
self.documents.pop(doc_id, None)