# 🚀 OneC Contract Generator
[](https://badge.fury.io/py/onec-contract-generator)
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
**Autonomous system for generating structured JSON contracts from 1C:Enterprise configurations**
Полностью автономная система для генерации структурированных JSON-контрактов из конфигураций 1С, включая контракты метаданных объектов, форм и модулей.
## 📋 Возможности
- 🎯 **Контракты метаданных** - структурированное описание объектов (справочники, документы, обработки)
- 📋 **Контракты форм** - архитектура форм с элементами управления и атрибутами
- 🔧 **Контракты модулей** - описание модулей объектов с функциями и процедурами
- 🔍 **Группированные логи** - структурированный вывод результатов с группировкой по категориям
- 📊 **Статистика и отчеты** - анализ структуры конфигурации
- 🚀 **Интерактивный режим** - пошаговый мастер с подсказками
- ⚡ **Командный режим** - автоматизация через аргументы
- 🔍 **Semantic Search Ready** - оптимизированная структура для поисковых систем
## 🚀 Быстрый старт
### Установка
```bash
# Установка с PyPI
pip install onec-contract-generator
```
### Использование
#### Интерактивный режим (рекомендуется)
```bash
onec-contract-generate
```
Запустится пошаговый мастер:
1. 📁 Выбор директории конфигурации
2. 📄 Выбор файла отчета
3. 📂 Выбор выходной директории
4. 🔧 Выбор компонентов для генерации
5. 🎯 Подтверждение и запуск
#### Командный режим
```bash
onec-contract-generate --auto \
--conf-dir "C:\YourProject\YourConfig\conf_files" \
--report-path "C:\YourProject\YourConfig\conf_report\ОтчетПоКонфигурации.txt" \
--output-dir "C:\YourProject\YourConfig\metadata_contracts"
```
#### Анализ контрактов
```bash
# Статистика
onec-contract-analyze --action stats
# Поиск
onec-contract-analyze --action search --query "ДокументыПредприятия"
# Валидация
onec-contract-analyze --action validate
# Экспорт отчета
onec-contract-analyze --action report --output analysis.md
```
#### Тестирование
```bash
# Запуск тестов
onec-contract-test
# Или с pytest
pytest tests/
```
## 🏗️ Структура проекта
```
onec-contract-generator/
├── src/ # Исходный код
│ ├── core/ # Основные компоненты
│ │ ├── launcher.py # 🚀 Единый запускатор
│ │ ├── metadata_generator.py # 📋 Генератор контрактов метаданных
│ │ ├── form_generator.py # 📝 Генератор контрактов форм
│ │ └── module_generator.py # 🔧 Генератор контрактов модулей
│ ├── utils/ # Утилиты
│ └── parsers/ # Парсеры
├── scripts/ # Скрипты запуска
│ ├── generate.py # 🚀 Главный скрипт
│ ├── analyze.py # 📊 Скрипт анализа
│ ├── test.py # 🧪 Скрипт тестирования
│ └── publish.py # 📦 Скрипт публикации на PyPI
├── tests/ # Тесты
├── docs/ # Документация
├── examples/ # Примеры
├── old/ # Резервная копия старого функционала
├── setup.py # Конфигурация пакета
├── pyproject.toml # Современная конфигурация
├── requirements.txt # Зависимости
├── requirements-dev.txt # Зависимости для разработки
└── README.md # Эта документация
```
## 📦 Установка для разработки
```bash
# Клонируйте репозиторий
git clone <repository-url>
cd onec-contract-generator
# Установка в режиме разработки
pip install -e ".[dev]"
# Или установка зависимостей вручную
pip install -r requirements-dev.txt
```
## 🛠️ Ручной запуск без pip
Если вы хотите запустить генератор без установки через pip, используйте прямые скрипты:
### Клонирование и настройка
```bash
# Клонируйте репозиторий
git clone <repository-url>
cd onec-contract-generator
# Установите зависимости (если нужно)
pip install -r requirements.txt
```
### Запуск через Python скрипты
```bash
# Основной генератор
python scripts/generate.py
# Или с параметрами
python scripts/generate.py --auto \
--conf-dir "C:\YourProject\YourConfig\conf_files" \
--report-path "C:\YourProject\YourConfig\conf_report\ОтчетПоКонфигурации.txt" \
--output-dir "C:\YourProject\YourConfig\metadata_contracts"
# Анализ контрактов
python scripts/analyze.py --action stats
# Тестирование
python scripts/test.py
```
### Запуск через модули напрямую
```bash
# Запуск основного модуля
python -m src.core.launcher
# Или с параметрами
python -m src.core.launcher --auto \
--conf-dir "C:\YourProject\YourConfig\conf_files" \
--report-path "C:\YourProject\YourConfig\conf_report\ОтчетПоКонфигурации.txt" \
--output-dir "C:\YourProject\YourConfig\metadata_contracts"
```
### Запуск отдельных компонентов
```bash
# Только генератор метаданных
python -c "
from src.core.metadata_generator import MetadataGenerator
generator = MetadataGenerator('output_dir')
generator.generate('path/to/report.txt')
"
# Только генератор форм
python -c "
from src.core.form_generator import FormGenerator
generator = FormGenerator('output_dir')
generator.generate('path/to/conf_files')
"
```
## 📁 Поддерживаемые типы объектов 1С
### Основные объекты
- **Справочники** - справочные данные
- **Документы** - документооборот
- **Отчеты** - отчетные формы
- **Обработки** - обработки данных
### Регистры
- **РегистрыСведений** - регистры сведений
- **РегистрыНакопления** - регистры накопления
- **РегистрыБухгалтерии** - регистры бухгалтерии
- **РегистрыРасчета** - регистры расчета
### Планы
- **ПланыВидовХарактеристик** - планы видов характеристик
- **ПланыОбмена** - планы обмена
- **ПланыСчетов** - планы счетов
- **ПланыВидовРасчета** - планы видов расчета
### Общие объекты
- **Перечисления** - перечисления
- **ОбщиеМодули** - общие модули
- **ОбщиеКартинки** - общие картинки
- **ОбщиеКоманды** - общие команды
### Сервисы
- **HTTPСервисы** - HTTP сервисы
- **WebСервисы** - Web сервисы
- **XDTOПакеты** - XDTO пакеты
## 📊 Примеры выходных данных
### Контракт метаданных
```json
{
"type": "Справочник",
"name": "Номенклатура",
"comment": "Номенклатура товаров и услуг",
"properties": [
{
"name": "Код",
"type": "Строка",
"length": 9,
"comment": "Код номенклатуры"
},
{
"name": "Наименование",
"type": "Строка",
"length": 150,
"comment": "Наименование номенклатуры"
}
],
"search_info": {
"type": "Справочник",
"category": "ОсновныеОбъекты",
"full_name": "Справочник_Номенклатура",
"search_keywords": ["Справочник", "Номенклатура", "товары", "услуги"],
"object_short_name": "Номенклатура"
}
}
```
### Контракт формы
```json
{
"form_type": "ФормаЭлемента",
"object_name": "Справочник.Номенклатура",
"form_name": "ФормаЭлементаФорма",
"controls": [
{
"name": "Код",
"type": "Поле",
"data_path": "Объект.Код",
"title": "Код"
},
{
"name": "Наименование",
"type": "Поле",
"data_path": "Объект.Наименование",
"title": "Наименование"
}
]
}
```
## 🔧 Конфигурация
### Переменные окружения
- `ONEC_DEBUG` - включить отладочный режим
- `ONEC_LOG_LEVEL` - уровень логирования (INFO, WARNING, ERROR)
### Параметры командной строки
- `--auto` - автоматический режим
- `--conf-dir` - директория конфигурации
- `--report-path` - путь к отчету
- `--output-dir` - выходная директория
- `--skip-metadata` - пропустить метаданные
- `--skip-forms` - пропустить формы
- `--skip-modules` - пропустить модули
## 📚 Документация
- [📖 Полная документация](docs/README.md)
- [🚀 Руководство по использованию](docs/USAGE.md)
- [📋 Примеры использования](docs/EXAMPLES.md)
- [🔧 API документация](docs/API.md)
- [🛠️ Руководство разработчика](docs/DEVELOPMENT.md)
- [📦 Руководство по публикации](PUBLISH_GUIDE.md)
## 🧪 Тестирование
```bash
# Запуск всех тестов
pytest
# Запуск с покрытием
pytest --cov=src
# Запуск конкретного теста
pytest tests/test_launcher.py::test_main_function
# Запуск с подробным выводом
pytest -v
```
## 🤝 Вклад в проект
1. Форкните репозиторий
2. Создайте ветку для новой функции (`git checkout -b feature/amazing-feature`)
3. Зафиксируйте изменения (`git commit -m 'Add amazing feature'`)
4. Отправьте в ветку (`git push origin feature/amazing-feature`)
5. Откройте Pull Request
## 📄 Лицензия
Этот проект лицензирован под MIT License - см. файл [LICENSE](LICENSE) для деталей.
## 🆘 Поддержка
- **Issues**: [GitHub Issues](https://github.com/onec-contract-generator/onec-contract-generator/issues)
- **Email**: support@onec-contract-generator.dev
- **Документация**: [Полная документация](docs/README.md)
## 📈 Статистика проекта
- **Версия**: 2.2.0
- **Python**: 3.7+
- **Лицензия**: MIT
- **Статус**: Активная разработка
- **PyPI**: [onec-contract-generator](https://pypi.org/project/onec-contract-generator/)
---
**Создано с ❤️ для сообщества 1С:Предприятие**
Raw data
{
"_id": null,
"home_page": "https://github.com/onec-contract-generator/onec-contract-generator",
"name": "onec-contract-generator",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "1C Contract Generator Team <support@onec-contract-generator.dev>",
"keywords": "1c, enterprise, metadata, contracts, generation, analysis, json, xml, documentation",
"author": "1C Contract Generator Team",
"author_email": "1C Contract Generator Team <support@onec-contract-generator.dev>",
"download_url": "https://files.pythonhosted.org/packages/f2/08/3973fad06dee27874f8ea82f241af10327b9958b555cfbb0604f230eb3f7/onec_contract_generator-2.2.0.tar.gz",
"platform": null,
"description": "# \ud83d\ude80 OneC Contract Generator\r\n\r\n[](https://badge.fury.io/py/onec-contract-generator)\r\n[](https://www.python.org/downloads/)\r\n[](https://opensource.org/licenses/MIT)\r\n\r\n**Autonomous system for generating structured JSON contracts from 1C:Enterprise configurations**\r\n\r\n\u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 JSON-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 1\u0421, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0444\u043e\u0440\u043c \u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439.\r\n\r\n## \ud83d\udccb \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438\r\n\r\n- \ud83c\udfaf **\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445** - \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0438, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438)\r\n- \ud83d\udccb **\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u0444\u043e\u0440\u043c** - \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0444\u043e\u0440\u043c \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438\r\n- \ud83d\udd27 **\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u043c\u043e\u0434\u0443\u043b\u0435\u0439** - \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430\u043c\u0438\r\n- \ud83d\udd0d **\u0413\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043b\u043e\u0433\u0438** - \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0441 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u043f\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u043c\r\n- \ud83d\udcca **\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0438 \u043e\u0442\u0447\u0435\u0442\u044b** - \u0430\u043d\u0430\u043b\u0438\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\r\n- \ud83d\ude80 **\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c** - \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0442\u0435\u0440 \u0441 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430\u043c\u0438\r\n- \u26a1 **\u041a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c** - \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b\r\n- \ud83d\udd0d **Semantic Search Ready** - \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\r\n\r\n## \ud83d\ude80 \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\r\n\r\n### \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\r\n\r\n```bash\r\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441 PyPI\r\npip install onec-contract-generator\r\n```\r\n\r\n### \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\r\n\r\n#### \u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c (\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f)\r\n\r\n```bash\r\nonec-contract-generate\r\n```\r\n\r\n\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0442\u0435\u0440:\r\n1. \ud83d\udcc1 \u0412\u044b\u0431\u043e\u0440 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\r\n2. \ud83d\udcc4 \u0412\u044b\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u0430 \u043e\u0442\u0447\u0435\u0442\u0430\r\n3. \ud83d\udcc2 \u0412\u044b\u0431\u043e\u0440 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438\r\n4. \ud83d\udd27 \u0412\u044b\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438\r\n5. \ud83c\udfaf \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\r\n\r\n#### \u041a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c\r\n\r\n```bash\r\nonec-contract-generate --auto \\\r\n --conf-dir \"C:\\YourProject\\YourConfig\\conf_files\" \\\r\n --report-path \"C:\\YourProject\\YourConfig\\conf_report\\\u041e\u0442\u0447\u0435\u0442\u041f\u043e\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.txt\" \\\r\n --output-dir \"C:\\YourProject\\YourConfig\\metadata_contracts\"\r\n```\r\n\r\n#### \u0410\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432\r\n\r\n```bash\r\n# \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430\r\nonec-contract-analyze --action stats\r\n\r\n# \u041f\u043e\u0438\u0441\u043a\r\nonec-contract-analyze --action search --query \"\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u044f\"\r\n\r\n# \u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f\r\nonec-contract-analyze --action validate\r\n\r\n# \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u043e\u0442\u0447\u0435\u0442\u0430\r\nonec-contract-analyze --action report --output analysis.md\r\n```\r\n\r\n#### \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\r\n\r\n```bash\r\n# \u0417\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0441\u0442\u043e\u0432\r\nonec-contract-test\r\n\r\n# \u0418\u043b\u0438 \u0441 pytest\r\npytest tests/\r\n```\r\n\r\n## \ud83c\udfd7\ufe0f \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\r\n\r\n```\r\nonec-contract-generator/\r\n\u251c\u2500\u2500 src/ # \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434\r\n\u2502 \u251c\u2500\u2500 core/ # \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b\r\n\u2502 \u2502 \u251c\u2500\u2500 launcher.py # \ud83d\ude80 \u0415\u0434\u0438\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u043e\u0440\r\n\u2502 \u2502 \u251c\u2500\u2500 metadata_generator.py # \ud83d\udccb \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445\r\n\u2502 \u2502 \u251c\u2500\u2500 form_generator.py # \ud83d\udcdd \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0444\u043e\u0440\u043c\r\n\u2502 \u2502 \u2514\u2500\u2500 module_generator.py # \ud83d\udd27 \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u043c\u043e\u0434\u0443\u043b\u0435\u0439\r\n\u2502 \u251c\u2500\u2500 utils/ # \u0423\u0442\u0438\u043b\u0438\u0442\u044b\r\n\u2502 \u2514\u2500\u2500 parsers/ # \u041f\u0430\u0440\u0441\u0435\u0440\u044b\r\n\u251c\u2500\u2500 scripts/ # \u0421\u043a\u0440\u0438\u043f\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\r\n\u2502 \u251c\u2500\u2500 generate.py # \ud83d\ude80 \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442\r\n\u2502 \u251c\u2500\u2500 analyze.py # \ud83d\udcca \u0421\u043a\u0440\u0438\u043f\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\r\n\u2502 \u251c\u2500\u2500 test.py # \ud83e\uddea \u0421\u043a\u0440\u0438\u043f\u0442 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\r\n\u2502 \u2514\u2500\u2500 publish.py # \ud83d\udce6 \u0421\u043a\u0440\u0438\u043f\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0430 PyPI\r\n\u251c\u2500\u2500 tests/ # \u0422\u0435\u0441\u0442\u044b\r\n\u251c\u2500\u2500 docs/ # \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\r\n\u251c\u2500\u2500 examples/ # \u041f\u0440\u0438\u043c\u0435\u0440\u044b\r\n\u251c\u2500\u2500 old/ # \u0420\u0435\u0437\u0435\u0440\u0432\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430\r\n\u251c\u2500\u2500 setup.py # \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430\r\n\u251c\u2500\u2500 pyproject.toml # \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\r\n\u251c\u2500\u2500 requirements.txt # \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438\r\n\u251c\u2500\u2500 requirements-dev.txt # \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\r\n\u2514\u2500\u2500 README.md # \u042d\u0442\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\r\n```\r\n\r\n## \ud83d\udce6 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\r\n\r\n```bash\r\n# \u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439\r\ngit clone <repository-url>\r\ncd onec-contract-generator\r\n\r\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\r\npip install -e \".[dev]\"\r\n\r\n# \u0418\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432\u0440\u0443\u0447\u043d\u0443\u044e\r\npip install -r requirements-dev.txt\r\n```\r\n\r\n## \ud83d\udee0\ufe0f \u0420\u0443\u0447\u043d\u043e\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0431\u0435\u0437 pip\r\n\r\n\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0431\u0435\u0437 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 pip, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0440\u044f\u043c\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b:\r\n\r\n### \u041a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\r\n\r\n```bash\r\n# \u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439\r\ngit clone <repository-url>\r\ncd onec-contract-generator\r\n\r\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 (\u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e)\r\npip install -r requirements.txt\r\n```\r\n\r\n### \u0417\u0430\u043f\u0443\u0441\u043a \u0447\u0435\u0440\u0435\u0437 Python \u0441\u043a\u0440\u0438\u043f\u0442\u044b\r\n\r\n```bash\r\n# \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\r\npython scripts/generate.py\r\n\r\n# \u0418\u043b\u0438 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438\r\npython scripts/generate.py --auto \\\r\n --conf-dir \"C:\\YourProject\\YourConfig\\conf_files\" \\\r\n --report-path \"C:\\YourProject\\YourConfig\\conf_report\\\u041e\u0442\u0447\u0435\u0442\u041f\u043e\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.txt\" \\\r\n --output-dir \"C:\\YourProject\\YourConfig\\metadata_contracts\"\r\n\r\n# \u0410\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432\r\npython scripts/analyze.py --action stats\r\n\r\n# \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\r\npython scripts/test.py\r\n```\r\n\r\n### \u0417\u0430\u043f\u0443\u0441\u043a \u0447\u0435\u0440\u0435\u0437 \u043c\u043e\u0434\u0443\u043b\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e\r\n\r\n```bash\r\n# \u0417\u0430\u043f\u0443\u0441\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f\r\npython -m src.core.launcher\r\n\r\n# \u0418\u043b\u0438 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438\r\npython -m src.core.launcher --auto \\\r\n --conf-dir \"C:\\YourProject\\YourConfig\\conf_files\" \\\r\n --report-path \"C:\\YourProject\\YourConfig\\conf_report\\\u041e\u0442\u0447\u0435\u0442\u041f\u043e\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.txt\" \\\r\n --output-dir \"C:\\YourProject\\YourConfig\\metadata_contracts\"\r\n```\r\n\r\n### \u0417\u0430\u043f\u0443\u0441\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432\r\n\r\n```bash\r\n# \u0422\u043e\u043b\u044c\u043a\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445\r\npython -c \"\r\nfrom src.core.metadata_generator import MetadataGenerator\r\ngenerator = MetadataGenerator('output_dir')\r\ngenerator.generate('path/to/report.txt')\r\n\"\r\n\r\n# \u0422\u043e\u043b\u044c\u043a\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0444\u043e\u0440\u043c\r\npython -c \"\r\nfrom src.core.form_generator import FormGenerator\r\ngenerator = FormGenerator('output_dir')\r\ngenerator.generate('path/to/conf_files')\r\n\"\r\n```\r\n\r\n## \ud83d\udcc1 \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 1\u0421\r\n\r\n### \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b\r\n- **\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0438** - \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435\r\n- **\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b** - \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u043e\u0431\u043e\u0440\u043e\u0442\r\n- **\u041e\u0442\u0447\u0435\u0442\u044b** - \u043e\u0442\u0447\u0435\u0442\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u044b\r\n- **\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438** - \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\r\n\r\n### \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b\r\n- **\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u0439** - \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u0439\r\n- **\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b\u041d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u044f** - \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u044f\r\n- **\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b\u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u0438** - \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u0438\r\n- **\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b\u0420\u0430\u0441\u0447\u0435\u0442\u0430** - \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0440\u0430\u0441\u0447\u0435\u0442\u0430\r\n\r\n### \u041f\u043b\u0430\u043d\u044b\r\n- **\u041f\u043b\u0430\u043d\u044b\u0412\u0438\u0434\u043e\u0432\u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a** - \u043f\u043b\u0430\u043d\u044b \u0432\u0438\u0434\u043e\u0432 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\r\n- **\u041f\u043b\u0430\u043d\u044b\u041e\u0431\u043c\u0435\u043d\u0430** - \u043f\u043b\u0430\u043d\u044b \u043e\u0431\u043c\u0435\u043d\u0430\r\n- **\u041f\u043b\u0430\u043d\u044b\u0421\u0447\u0435\u0442\u043e\u0432** - \u043f\u043b\u0430\u043d\u044b \u0441\u0447\u0435\u0442\u043e\u0432\r\n- **\u041f\u043b\u0430\u043d\u044b\u0412\u0438\u0434\u043e\u0432\u0420\u0430\u0441\u0447\u0435\u0442\u0430** - \u043f\u043b\u0430\u043d\u044b \u0432\u0438\u0434\u043e\u0432 \u0440\u0430\u0441\u0447\u0435\u0442\u0430\r\n\r\n### \u041e\u0431\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b\r\n- **\u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f** - \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\r\n- **\u041e\u0431\u0449\u0438\u0435\u041c\u043e\u0434\u0443\u043b\u0438** - \u043e\u0431\u0449\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438\r\n- **\u041e\u0431\u0449\u0438\u0435\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0438** - \u043e\u0431\u0449\u0438\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438\r\n- **\u041e\u0431\u0449\u0438\u0435\u041a\u043e\u043c\u0430\u043d\u0434\u044b** - \u043e\u0431\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b\r\n\r\n### \u0421\u0435\u0440\u0432\u0438\u0441\u044b\r\n- **HTTP\u0421\u0435\u0440\u0432\u0438\u0441\u044b** - HTTP \u0441\u0435\u0440\u0432\u0438\u0441\u044b\r\n- **Web\u0421\u0435\u0440\u0432\u0438\u0441\u044b** - Web \u0441\u0435\u0440\u0432\u0438\u0441\u044b\r\n- **XDTO\u041f\u0430\u043a\u0435\u0442\u044b** - XDTO \u043f\u0430\u043a\u0435\u0442\u044b\r\n\r\n## \ud83d\udcca \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445\r\n\r\n### \u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445\r\n```json\r\n{\r\n \"type\": \"\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\",\r\n \"name\": \"\u041d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u0430\",\r\n \"comment\": \"\u041d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u0430 \u0442\u043e\u0432\u0430\u0440\u043e\u0432 \u0438 \u0443\u0441\u043b\u0443\u0433\",\r\n \"properties\": [\r\n {\r\n \"name\": \"\u041a\u043e\u0434\",\r\n \"type\": \"\u0421\u0442\u0440\u043e\u043a\u0430\",\r\n \"length\": 9,\r\n \"comment\": \"\u041a\u043e\u0434 \u043d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u044b\"\r\n },\r\n {\r\n \"name\": \"\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\",\r\n \"type\": \"\u0421\u0442\u0440\u043e\u043a\u0430\",\r\n \"length\": 150,\r\n \"comment\": \"\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u044b\"\r\n }\r\n ],\r\n \"search_info\": {\r\n \"type\": \"\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\",\r\n \"category\": \"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435\u041e\u0431\u044a\u0435\u043a\u0442\u044b\",\r\n \"full_name\": \"\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a_\u041d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u0430\",\r\n \"search_keywords\": [\"\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\", \"\u041d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u0430\", \"\u0442\u043e\u0432\u0430\u0440\u044b\", \"\u0443\u0441\u043b\u0443\u0433\u0438\"],\r\n \"object_short_name\": \"\u041d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u0430\"\r\n }\r\n}\r\n```\r\n\r\n### \u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0444\u043e\u0440\u043c\u044b\r\n```json\r\n{\r\n \"form_type\": \"\u0424\u043e\u0440\u043c\u0430\u042d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\",\r\n \"object_name\": \"\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a.\u041d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u0430\",\r\n \"form_name\": \"\u0424\u043e\u0440\u043c\u0430\u042d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0424\u043e\u0440\u043c\u0430\",\r\n \"controls\": [\r\n {\r\n \"name\": \"\u041a\u043e\u0434\",\r\n \"type\": \"\u041f\u043e\u043b\u0435\",\r\n \"data_path\": \"\u041e\u0431\u044a\u0435\u043a\u0442.\u041a\u043e\u0434\",\r\n \"title\": \"\u041a\u043e\u0434\"\r\n },\r\n {\r\n \"name\": \"\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\",\r\n \"type\": \"\u041f\u043e\u043b\u0435\",\r\n \"data_path\": \"\u041e\u0431\u044a\u0435\u043a\u0442.\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\",\r\n \"title\": \"\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\"\r\n }\r\n ]\r\n}\r\n```\r\n\r\n## \ud83d\udd27 \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\r\n\r\n### \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\r\n- `ONEC_DEBUG` - \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c\r\n- `ONEC_LOG_LEVEL` - \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (INFO, WARNING, ERROR)\r\n\r\n### \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438\r\n- `--auto` - \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0436\u0438\u043c\r\n- `--conf-dir` - \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\r\n- `--report-path` - \u043f\u0443\u0442\u044c \u043a \u043e\u0442\u0447\u0435\u0442\u0443\r\n- `--output-dir` - \u0432\u044b\u0445\u043e\u0434\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\r\n- `--skip-metadata` - \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435\r\n- `--skip-forms` - \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u044b\r\n- `--skip-modules` - \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438\r\n\r\n## \ud83d\udcda \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\r\n\r\n- [\ud83d\udcd6 \u041f\u043e\u043b\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f](docs/README.md)\r\n- [\ud83d\ude80 \u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e](docs/USAGE.md)\r\n- [\ud83d\udccb \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f](docs/EXAMPLES.md)\r\n- [\ud83d\udd27 API \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f](docs/API.md)\r\n- [\ud83d\udee0\ufe0f \u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430](docs/DEVELOPMENT.md)\r\n- [\ud83d\udce6 \u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438](PUBLISH_GUIDE.md)\r\n\r\n## \ud83e\uddea \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\r\n\r\n```bash\r\n# \u0417\u0430\u043f\u0443\u0441\u043a \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u043e\u0432\r\npytest\r\n\r\n# \u0417\u0430\u043f\u0443\u0441\u043a \u0441 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435\u043c\r\npytest --cov=src\r\n\r\n# \u0417\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430\r\npytest tests/test_launcher.py::test_main_function\r\n\r\n# \u0417\u0430\u043f\u0443\u0441\u043a \u0441 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c \u0432\u044b\u0432\u043e\u0434\u043e\u043c\r\npytest -v\r\n```\r\n\r\n## \ud83e\udd1d \u0412\u043a\u043b\u0430\u0434 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\r\n\r\n1. \u0424\u043e\u0440\u043a\u043d\u0438\u0442\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439\r\n2. \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0432\u0435\u0442\u043a\u0443 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (`git checkout -b feature/amazing-feature`)\r\n3. \u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0439\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f (`git commit -m 'Add amazing feature'`)\r\n4. \u041e\u0442\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u0432 \u0432\u0435\u0442\u043a\u0443 (`git push origin feature/amazing-feature`)\r\n5. \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 Pull Request\r\n\r\n## \ud83d\udcc4 \u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f\r\n\r\n\u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e\u0434 MIT License - \u0441\u043c. \u0444\u0430\u0439\u043b [LICENSE](LICENSE) \u0434\u043b\u044f \u0434\u0435\u0442\u0430\u043b\u0435\u0439.\r\n\r\n## \ud83c\udd98 \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430\r\n\r\n- **Issues**: [GitHub Issues](https://github.com/onec-contract-generator/onec-contract-generator/issues)\r\n- **Email**: support@onec-contract-generator.dev\r\n- **\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f**: [\u041f\u043e\u043b\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f](docs/README.md)\r\n\r\n## \ud83d\udcc8 \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\r\n\r\n- **\u0412\u0435\u0440\u0441\u0438\u044f**: 2.2.0\r\n- **Python**: 3.7+\r\n- **\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f**: MIT\r\n- **\u0421\u0442\u0430\u0442\u0443\u0441**: \u0410\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430\r\n- **PyPI**: [onec-contract-generator](https://pypi.org/project/onec-contract-generator/)\r\n\r\n---\r\n\r\n**\u0421\u043e\u0437\u0434\u0430\u043d\u043e \u0441 \u2764\ufe0f \u0434\u043b\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435** \r\n",
"bugtrack_url": null,
"license": null,
"summary": "Autonomous system for generating structured JSON contracts from 1C:Enterprise configurations",
"version": "2.2.0",
"project_urls": {
"Bug Tracker": "https://github.com/onec-contract-generator/onec-contract-generator/issues",
"Changelog": "https://github.com/onec-contract-generator/onec-contract-generator/blob/main/CHANGELOG.md",
"Documentation": "https://github.com/onec-contract-generator/onec-contract-generator#readme",
"Homepage": "https://github.com/onec-contract-generator/onec-contract-generator",
"Repository": "https://github.com/onec-contract-generator/onec-contract-generator"
},
"split_keywords": [
"1c",
" enterprise",
" metadata",
" contracts",
" generation",
" analysis",
" json",
" xml",
" documentation"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "acae3318edccf8bc41dc867cba1f81868e104f282a4115395236b098c782fbd2",
"md5": "50bf9bcdb5f321aeb0bd4fa987d9da0f",
"sha256": "3be28c454677ae48a59d3d192595c4ac418fd3c0db7cbe69cb28dc96cfb9f4b7"
},
"downloads": -1,
"filename": "onec_contract_generator-2.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "50bf9bcdb5f321aeb0bd4fa987d9da0f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 25020,
"upload_time": "2025-07-22T18:54:04",
"upload_time_iso_8601": "2025-07-22T18:54:04.825169Z",
"url": "https://files.pythonhosted.org/packages/ac/ae/3318edccf8bc41dc867cba1f81868e104f282a4115395236b098c782fbd2/onec_contract_generator-2.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f2083973fad06dee27874f8ea82f241af10327b9958b555cfbb0604f230eb3f7",
"md5": "91e9ddfba1d8f29ff841215fe41d228b",
"sha256": "03d646befd10ed98cf190c686830abf64cab11099a771dc11e0207be9764ccd9"
},
"downloads": -1,
"filename": "onec_contract_generator-2.2.0.tar.gz",
"has_sig": false,
"md5_digest": "91e9ddfba1d8f29ff841215fe41d228b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 51481,
"upload_time": "2025-07-22T18:54:06",
"upload_time_iso_8601": "2025-07-22T18:54:06.414099Z",
"url": "https://files.pythonhosted.org/packages/f2/08/3973fad06dee27874f8ea82f241af10327b9958b555cfbb0604f230eb3f7/onec_contract_generator-2.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-22 18:54:06",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "onec-contract-generator",
"github_project": "onec-contract-generator",
"github_not_found": true,
"lcname": "onec-contract-generator"
}