Приём документов → реестр + журнал

Внесение данных из файлов приёма в реестр невостребованных документов
и заполнение журнала. Дата внесения — текущая; журнал заполняется чисто
(без строк-примеров шаблона).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
jze9
2026-06-26 03:11:18 +05:00
commit b5f7060a1f
20 changed files with 1571 additions and 0 deletions

58
priem_register/models.py Normal file
View File

@@ -0,0 +1,58 @@
# -*- coding: utf-8 -*-
"""Доменные модели."""
from __future__ import annotations
import datetime
from dataclasses import dataclass, field
from pathlib import Path
from typing import List, Optional, Union
# Значение ячейки: число, дата, строка либо пусто.
CellValue = Optional[Union[str, int, float, datetime.date]]
@dataclass
class Record:
"""Одна принятая запись — значения колонок B..M (без № п/п)."""
values: List[CellValue] = field(default_factory=list)
def value(self, register_col: int) -> CellValue:
"""Значение для колонки реестра по её индексу (1=B .. 12=M)."""
idx = register_col - 1
if 0 <= idx < len(self.values):
return self.values[idx]
return None
@dataclass
class ReadResult:
"""Результат чтения источника.
records — записи для внесения в реестр;
notes — что было присоединено к записям (информационно, не ошибки);
warnings — данные, которые присоединить не к чему (требуют внимания).
"""
records: List["Record"] = field(default_factory=list)
notes: List[str] = field(default_factory=list)
warnings: List[str] = field(default_factory=list)
@dataclass
class SourceFile:
"""Файл приёма и его привязка к листу реестра."""
path: Path
date: datetime.date
sheet: str # имя листа в реестре, напр. "ТО1_25"
name: str # имя файла без расширения, напр. "09.04.2026_74_25"
@dataclass
class JournalEntry:
"""Строка журнала внесения."""
date: datetime.date
file_name: str
count: int