Files
coopops 5298e55a7b [989-10][@ant] fix: ЕФС-1 (4-ФСС) — использовать рег. номер ПФР, а не СФР, в имени файла и <ЕФС8:РегНомер>
Сторонние бухгалтерские системы (СБИС и др.) при приёме ЕФС-1 отклоняли выгруженный XML: "Рег. номер отправителя из наименования файла не соответствует ни рег. номеру ПФР организации, ни рег. номеру СФР". Причина в двух местах:
1) generateGenericFileName для FSS4 хардкодил сегмент отправителя как "0000000000" — реальный номер туда не попадал вообще (тот же класс бага, что чинили в idFile для нулёвок ранее).
2) fss4.generator.ts писал в <ЕФС8:РегНомер> sfrRegNumber (10-значный унифицированный номер СФР) — но внешние системы сверяют этот тег с рег. номером ПФР организации (формат XXX-XXX-XXXXXX), который у них уже настроен через канал ФСС ЭДО, а не с номером СФР.

Добавлено отдельное обязательное поле pfrRegNumber (report_requisites.pfr_reg_number, XXX-XXX-XXXXXX) — не заменяет sfrRegNumber (оставлен, вдруг понадобится), а используется отдельно для генерации ЕФС-1: и в сегменте имени файла, и в теге <ЕФС8:РегНомер>. Заодно сузили маску sfrRegNumber до строго 10 цифр (раньше маска дублировала формат ПФР и два поля выглядели взаимозаменяемыми — по замечанию в ревью). Цепочка regen пройдена (generate-schema → generate-client → sdk build), controller tsc и desktop vue-tsc чистые, добавлены/обновлены unit-тесты Fss4Generator.
2026-07-21 18:45:12 +00:00
..
2025-01-14 13:45:45 +05:00
2026-01-21 21:49:35 +05:00
2025-05-01 21:52:49 +05:00
2025-01-14 13:45:45 +05:00
2025-01-14 13:45:45 +05:00
2025-01-14 13:45:45 +05:00
2025-03-27 18:13:33 +05:00
2025-01-14 13:45:45 +05:00
2025-01-14 13:45:45 +05:00
2025-01-14 13:45:45 +05:00
2026-07-21 08:50:38 +00:00
2025-01-14 13:45:45 +05:00
2026-03-23 00:40:49 +05:00

🔌 @coopenomics/sdk

TypeScript SDK для типобезопасной работы с GraphQL API кооператива

Описание

@coopenomics/sdk — клиентская библиотека для программного взаимодействия с API платформы «Цифровой Кооператив». Обеспечивает полную типизацию запросов, мутаций и подписок через GraphQL Zeus. Включает классы для работы с блокчейном EOSIO, цифровыми подписями, генерацией документов и JWT-аутентификацией.

📖 Документация: цифровой-кооператив.рф/sdk

Возможности

  • Типобезопасные запросы — все GraphQL-запросы и мутации полностью типизированы через Zeus-селекторы
  • Блокчейн-операции — подпись транзакций, работа с аккаунтами и ключами EOSIO (@wharfkit)
  • Документооборот — генерация, подпись и верификация юридических документов
  • Голосование — участие в голосованиях совета кооператива
  • Подписки в реальном времени — WebSocket-подписки на события через graphql-ws
  • JWT-аутентификация — управление токенами доступа
  • Canvas — утилиты для генерации визуальных представлений

Установка

pnpm install --filter @coopenomics/sdk

# Для внешних проектов:
pnpm add @coopenomics/sdk

Быстрый старт

import { Client } from '@coopenomics/sdk'

const client = new Client({
  api_url: '<CONTROLLER_API_URL>/v1/graphql',
  chain_url: '<CHAIN_ENDPOINT>',
  chain_id: '<CHAIN_ID>',
})

// Установка JWT-токена
client.setToken('<jwt_token>')

// Выполнение типизированного запроса
const result = await client.Query(Queries.GetSystemInfo, {})

Скрипты

Скрипт Описание
pnpm run build Сборка библиотеки (unbuild, с предварительной проверкой типов)
pnpm run dev Режим разработки (unbuild --stub)
pnpm run test Запуск тестов (vitest, таймаут 60 сек)
pnpm run lint Проверка кода (ESLint)
pnpm run typecheck Проверка типов TypeScript (tsc --noEmit)
pnpm run docs Генерация документации (TypeDoc + автокомментарии)

Все скрипты запускаются из корня монорепозитория через фильтр: pnpm --filter @coopenomics/sdk run <скрипт>

Конфигурация

SDK не требует .env файлов — параметры передаются при создании клиента:

Параметр Описание
api_url URL GraphQL API контроллера
chain_url URL блокчейн-ноды
chain_id Идентификатор цепочки блоков

Архитектура

src/
├── classes/               # Высокоуровневые классы
│   ├── account.ts         # Работа с аккаунтами
│   ├── blockchain.ts      # Блокчейн-операции
│   ├── canvas.ts          # Визуальные утилиты
│   ├── crypto.ts          # Криптографические операции
│   ├── document.ts        # Документооборот
│   └── vote.ts            # Голосование
├── mutations/             # Типизированные мутации (Zeus selectors)
├── queries/               # Типизированные запросы (Zeus selectors)
├── selectors/             # Переиспользуемые селекторы по доменам
│   ├── system/            # Системные запросы
│   ├── registration/      # Регистрация
│   ├── wallet/            # Кошелёк
│   ├── gateway/           # Платежи
│   ├── documents/         # Документы
│   ├── decisions/         # Решения совета
│   ├── meet/              # Собрания
│   ├── ledger/            # Бухгалтерия
│   ├── extensions/        # Расширения
│   └── ...                # Другие домены
├── types/                 # Типы и интерфейсы клиента
│   ├── client/            # Опции подключения
│   ├── blockchain/        # Блокчейн-типы
│   ├── controller/        # Типы контроллера
│   └── document/          # Типы документов
├── zeus/                  # Сгенерированный клиент GraphQL Zeus
└── index.ts               # Точка входа (экспорт Client)

Селекторы генерируются из GraphQL-схемы контроллера с помощью graphql-zeus. Каждый селектор валидируется через MakeAllFieldsRequired для гарантии полноты полей.

Тестирование

pnpm --filter @coopenomics/sdk run test

Проект содержит 4 интеграционных теста на vitest с таймаутом 60 секунд, проверяющих корректность работы клиента с API.

Лицензия

BY-NC-SA 4.0