Files
mono/components/context/.claude/rules/factory-add-document.mdc
T
2026-01-22 18:13:45 +05:00

51 lines
5.2 KiB
Plaintext
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.
---
description: Добавить документ в фабрику документов. Создать шаблон документа.
alwaysApply: false
---
## Создание шаблона
В библиотеке реестра типов документов находятся шаблоны: cooptypes/src/cooperative/registry/1.WalletAgreement
В каждом шаблоне определяется часть Action, которая отвечает за передаваемые извне параметры для модели документа. И Model, которая отвечает за общую модель документа, которая может включать в себя не только данные, которые передаются извне в действии по генерации документа, но и извлекаются самой фабрикой в процессе генерации. Meta данные при этом являются объединением обоих интерфейсов и на основе этих данных можно произвести полную регенерацию документа.
Содержание каждого index файла включает в себя интерфейс Action для генерации. Model с теми данными которые могут быть предоставлены самой фабрикой документов. Title, description, context и translations и exampleData.
Context включает в себя строковый шаблон jinja2, который использует данные из Action и Meta, а также translations для переводов на русский язык. Кроме того, каждый шаблон содержит стандартную css разметку для заголовка, места подписи, и т.д.
exampleData мы прописываем как пример данных, которые программа-визуализатор может подставить и показать визуально-заполненный шаблон. Потому когда ты создаешь новый документ ты должен в точности соблюдать заполнение всех полей. Во-первых ты должен декомпозировать документ на элементы переводов, затем эти элементы переводов вставить в текст и разбавить использованием переменных. Местами ты можешь использовать вот такие конструкции шаблона для передачи переменных прямо в перевод: {% trans 'phone_and_email_notice', individual.phone, individual.email %}
В объекте перевода:
...phone_and_email_notice: 'номер телефона с активированной функцией получения sms: {0}, адрес электронной почты: {1}.',
Но обычно достаточно просто использовать переменные из Action и Model напрямую.
## Создание схемы
После того, как шаблон создан и экспортирован, необходимо создать схему. Схема создается в factory/src/Templates
Там реэкспортируются Action, Model как типы. И определяется схема ajv. Там есть стандартные, определенные части схемы, которые находятся в factory/src/Schema. Все части моделей Action и Model должны быть определены в одной схеме данных и затем экспортированы в реестр схем factory/src/Templates/registry.ts.
## Создание станка
Далее необходимо создать станок для обработки генерации документа в factory/src/Actions. Он дожен включать в себя интерфейс действия и всю подготовительную обработку данных для передачи информации в шаблон согласно схемы. В качестве ФИО/наименование пайщика используем factory/src/Schema/CommonUserSchema.ts.
## Экспорт станка
Станок необходимо экспортировать в src/index.ts через все реестры. Чтобы в итоге вызов метода генерации был делегирован корректному станку.
## Создание теста
В папке factory/src/tests создаем или используем существующий и подходящий по контексту файл теста для генерации. Используем метод для генерации
it('генерируем соглашение о капитализации', async () => {
await testDocumentGeneration({
registry_id: 1000,
coopname: 'voskhod',
username: 'ant',
lang: 'ru',
})
})