Files
kadastr18/README.md
jze9 b5f7060a1f Приём документов → реестр + журнал
Внесение данных из файлов приёма в реестр невостребованных документов
и заполнение журнала. Дата внесения — текущая; журнал заполняется чисто
(без строк-примеров шаблона).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 03:11:18 +05:00

81 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Приём документов → реестр + журнал
Программа вносит данные о принятых документах из файлов в папке `прием`
в файл **2026_ЕДИНЫЙ РЕЕСТР НЕВОСТРЕБОВАННЫХ ДОКУМЕНТОВ** на соответствующие
листы (последующими записями) и заполняет **Журнал внесения**.
Работает на чистых Python-библиотеках (`odfpy`, `openpyxl`, `xlrd`),
**LibreOffice не требуется**. Оформление реестра (стили ячеек, формат дат,
прочие листы) сохраняется: новые строки копируют стиль последней строки листа.
## Запуск
Графический интерфейс (выбор файлов мышью, кнопка «Внести данные»):
```bash
pip install -r requirements.txt
python3 gui.py
```
Или из командной строки (по умолчанию берёт файлы из текущей папки):
```bash
python3 run.py
```
Оригиналы не изменяются — результат пишется рядом:
* `2026_ЕДИНЫЙ РЕЕСТР НЕВОСТРЕБОВАННЫХ ДОКУМЕНТОВ._ЗАПОЛНЕНО.ods`
* `Журнал внесения_ЗАПОЛНЕНО.xlsx`
Скрипт идемпотентен: всегда читает оригиналы, повторный запуск не задваивает данные.
## Правило сопоставления
Файл `DD.MM.YYYY_74_NN.<ext>` из папки `ТОk` → лист `ТОk_NN` реестра.
По заданию: **«внести все строки, начиная со второй»**. Поэтому пропускается
только шапка (строка 1), а каждая последующая **непустая** строка вносится как
отдельная запись — без фильтрации по № п/п. № п/п в реестре проставляется
заново (сквозной, продолжает нумерацию листа), исходный № отбрасывается.
Колонки источника B…M переносятся **позиционно** в одноимённые колонки листа.
Значения ячеек очищаются от внешних пробелов (единообразно для всех форматов).
## Данные правее колонки M
В реестре 13 колонок (A…M). Если в источнике есть данные в 14-й колонке
(напр. «закладная погашена» в `16.04.2026_74_33`), отдельной колонки для них
нет — они добавляются в «Примечание» той же строки. Все такие случаи
перечисляются в `Pipeline().run().notes` (информационно).
## Известное ограничение
Сопоставление колонок — **позиционное** (колонка N источника → колонка N листа).
Это верно для текущего шаблона приёма. Если появится файл с другим порядком
или набором колонок (сдвиг влево), значения попадут не в свои поля, и это
**не** будет обнаружено автоматически — сдвиг вправо/лишние колонки ловятся
предупреждением, сдвиг влево — нет. При смене шаблона нужна проверка по
заголовкам.
## Структура
```
gui.py десктоп-интерфейс (tkinter)
run.py точка входа из командной строки
priem_register/
config.py пути, константы, раскладка колонок A..M
models.py Record, SourceFile, JournalEntry
mapping.py поиск файлов приёма и привязка к листам
readers/ чтение источников по форматам
base.py SourceReader: пропуск шапки, все непустые строки, нарезка колонок
xls_reader.py .xls (xlrd; даты-сериалы Excel)
xlsx_reader.py .xlsx (openpyxl)
ods_reader.py .ods (odfpy; разворот повторов)
factory.py выбор читателя по расширению
writers/
register_writer.py дозапись строк в .ods с копированием стилей
journal_writer.py заполнение журнала .xlsx
pipeline.py оркестратор
```