Metadata-Version: 2.4
Name: rosstat-flc
Version: 2.0.0
Summary: Tool for format-logistic control of reports sent to RosStat
Project-URL: Repository, https://github.com/WoolenSweater/rosstat-flc
Project-URL: Changelog, https://github.com/WoolenSweater/rosstat-flc/blob/master/CHANGELOG.md
Author-email: Никита Рябинин <ryabinin.ne@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: control,flc,format,format-logistic,fsgs,processing,report,rosstat,russian-specific,tool
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: Russian
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Requires-Python: >=3.11
Requires-Dist: lark[interegular]==1.3.1
Requires-Dist: lxml==6.1.1
Requires-Dist: multidict==6.7.1
Requires-Dist: numpy==2.4.6
Description-Content-Type: text/markdown

# Rosstat FLC 2

![PyPI - License](https://img.shields.io/pypi/l/rosstat-flc)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/rosstat-flc)

---

Инструмент для форматно-логического контроля отчетности, отправляемой в Росстат (ФСГС).

Документация, описывающая формат отчётности, структуру элементов шаблона и язык описания контролей - [Приказ Росстата от 28.10.2010 №372](http://www.consultant.ru/document/cons_doc_LAW_115689/)

Список изменений - [CHANGELOG](CHANGELOG.md)

## Установка
```bash
pip install rosstat-flc
```

## Зависимости
* [lark](https://github.com/lark-parser/lark)
* [lxml](https://github.com/lxml/lxml)
* [numpy](https://github.com/numpy/numpy)
* [multidict](https://github.com/aio-libs/multidict)

## Использование
```python
from rosstat.flc import parse_schema, parse_report

# На вход передаются ElementTree, Element, bytes, file name/path, или file-like объекты

schema = parse_schema('schema.xml')
report = parse_report('report.xml', alerts=True)

for result in schema.validate(report):
    print(result)

# {'code': '4.30', 'name': 'Проверка контролей', 'description': 'XML Подраздел 2 стр. 201-202 гр.3 = "1" или "2", при хотя бы одной из стр. 105,106,108,109 гр.3 = 1; слева 1.0 <= справа 0.0 разница 1.0', 'level': 1}
# {'code': '4.60', 'name': 'Проверка контролей', 'description': 'XML Подраздел 2 стр. 203 гр. 3 = "1" или "2", или "3", или "4", или "5", или "6", при хотя бы одной из стр. 105,106,108,109 гр.3 = 1; слева 1.0 <= справа 0.0 разница 1.0', 'level': 1}
```

Результат проверки всегда список. При успешной проверке список будет пустой.

Если на одном из этапов проверки будут выявлены ошибки, проверка будет прервана и вернутся все ошибки обнаруженные на этом этапе.

С блоками проверок их порядком и описанием ошибок можно ознакомиться [здесь](docs/docs.md).

Флаг `alerts` определяет будут ли выводится предупреждения о пропуске контролей с проверками за прошлый период (эти проверки невозможно реализовать не имея доступа к ранее сформированному отчёту).

Поле `level` в результатах означает уровень проверки. 1 - ошибка, 0 - предупреждение.
