README.md

    Portal5-Works

    Build status .NET8 Desktop GitHub Release

    Works with API of Portal5.
    Работа с Portal5 по API.

    Settings / Параметры

    Appsettings с именем исполняемой программы - в отличие от принятого при разработке в .NET единого имени, так можно все файлы настроек разных программ размещать в одной папке для скриптов, но при этом какие-то общие параметры (будут иметь приоритет) вынести из папки с программой, где они могут быть нечаянно затерты при обновлении версии или конфиденциальная информация может попасть в дистрибутивный архив:

    • CryptoBot.config.json (located with App exe)
    • %ProgramData%\Diev\CryptoBot.config.json (these settings overwrite if exist)

    Однако, при запуске в Linux программа может не получать путь к папке с программой - тогда она будет искать традиционный appsettings.json в текущей папке.

    Windows Credential Manager в Панели управления - Диспетчер учетных данных (все пароли для всех программ меняются в одном месте и скрыты от пользователей, как было бы при хранении в индивидуальных файлах настроек к каждой программе):

    • Portal5test * (name: Portal5test https://{host}, user: {username}, pass: {password})
    • Portal5 * (name: Portal5 https://{host}, user: {username}, pass: {password})
    • CryptoPro My (name: CryptoPro My, user: {cert}, pass: {pin})
    • SMTP * (name: SMTP {host} {port} tls, user: {sender}, pass: {password})

    Однако в Linux такой программы нет, и все параметры надо написать в JSON открытым текстом (в Windows тоже так можно, игнорируя безопасность):

    • "TargetName": "https://{host} {username} {password}" (три параметра)
    • "CryptoName": "cert {cert} {pin}" (три параметра, первый игнорируется)
    • "SmtpName": "{host} {port} tls {sender} {password}" (4-5 параметров)

    При наличии (в Windows) КриптоПро можно указать, какая утилита командной строки будет использоваться (важно для больших файлов и в случае необходимости прикладывания всей цепочки сертификатов к подписи):

    • "UtilName": "CspTest" - бесплатная тестовая утилита из состава КриптоПро CSP
    • "UtilName": "CryptCP" - утилита для больших файлов (приобретается отдельно, должна соответствовать установленной версии КриптоПро CSP)

    CLI - параметры командной строки:

    help

    Используйте --help, чтобы получить все параметры командной строки:

    Description:
      Exchange point to upload/download with Portal5.
    
    Usage:
      CryptoBot [command] [options]
    
    Options:
      --version       Show version information
      -?, -h, --help  Show help and usage information
    
    Commands:
      lki    ЛК: Входящие
      lko    ЛК: Исходящие
      z130   ЗСК: Получение информации об уровне риска ЮЛ/ИП
      z137   ЗСК: Ежедневное информирование Банка России о составе и объеме клиентской базы
      z222   ZBR: Получение Запроса информации о платежах КО
      z221   ZBR: Ответ на Запрос информации о платежах КО
      load   API: Загрузить сообщения по <id> или по фильтру
      clean  API: Удалить сообщения по <id> или по фильтру
    

    lki

    Description:
      ЛК: Входящие
    
    Usage:
      CryptoBot lki [options]
    
    Options:
      -d, --days <days>  Сколько последних дней (7 - на этой неделе)
    

    lko

    Description:
      ЛК: Исходящие
    
    Usage:
      CryptoBot lko [options]
    
    Options:
      -d, --days <days>  Сколько последних дней (7 - на этой неделе)
    

    z130

    Description:
      Получение информации об уровне риска ЮЛ/ИП
    
    Usage:
      CryptoBot z130 [options]
    
    Options:
      -d, --days <days>  Сколько последних дней (7 - на этой неделе)
    

    z137

    Description:
      Ежедневное информирование Банка России о составе и объеме клиентской базы
    
    Usage:
      CryptoBot z137 [options]
    
    Options:
      -d, --days <days>  Сколько последних дней (7 - на этой неделе)
    

    z222

    Description:
      Получение Запроса информации о платежах КО
    
    Usage:
      CryptoBot z222 [options]
    
    Options:
      -d, --days <days>  Сколько последних дней (7 - на этой неделе)
    

    z221

    Description:
      Ответ на Запрос информации о платежах КО
    
    Usage:
      CryptoBot z221 [options]
    
    Options:
      --req <req>     Идентификатор Запроса (guid)
    

    load

    По команде load --help, где надо указать или id, или условия фильтра:

    Description:
      API: Загрузить сообщения по <id> или по фильтру
    
    Usage:
      CryptoBot load [options]
    
    Options:
      --id <id>                  Идентификатор одного сообщения (guid)
      -z, --zadacha <zadacha>    Номер задачи XX[,XX, ...]
      -b, --before <before>      Ранее скольки дней назад (7 - раньше недели назад)
      -d, --days <days>          Сколько последних дней (7 - на этой неделе)
      -n, --day <day>            Какой день назад конкретно (1 - вчера)
      -f, --min-date <min-date>  С какой даты (yyyy-mm-dd[Thh:mm:ssZ])
      -t, --max-date <max-date>  До какой даты (время по умолчанию 00:00!)
      --min-size <min-size>      От какого размера (байты)
      --max-size <max-size>      До какого размера (байты)
      --inbox                    Входящие сообщения только
      --outbox                   Исходящие сообщения только
      --status <status>          Статус сообщений
                                 для inbox: new, read, replied
                                 для outbox: draft, sent, delivered, error, processing, registered, rejected, success
      --page <page>              Номер страницы (по 100 сообщений)
    

    clean

    Description:
      API: Удалить сообщения по <id> или по фильтру
    
    Usage:
      CryptoBot clean [options]
    
    Options:
      --id <id>                  Идентификатор одного сообщения (guid)
      -z, --zadacha <zadacha>    Номер задачи XX[,XX, ...]
      -b, --before <before>      Ранее скольки дней назад (7 - раньше недели назад)
      -d, --days <days>          Сколько последних дней (7 - на этой неделе)
      -n, --day <day>            Какой день назад конкретно (1 - вчера)
      -f, --min-date <min-date>  С какой даты (yyyy-mm-dd[Thh:mm:ssZ])
      -t, --max-date <max-date>  До какой даты (время по умолчанию 00:00!)
      --min-size <min-size>      От какого размера (байты)
      --max-size <max-size>      До какого размера (байты)
      --inbox                    Входящие сообщения только
      --outbox                   Исходящие сообщения только
      --status <status>          Статус сообщений
                                 для inbox: new, read, replied
                                 для outbox: draft, sent, delivered, error, processing, registered, rejected, success
      --page <page>              Номер страницы (по 100 сообщений)
    

    API usage examples / Примеры использования API

    Документация на REST-API по Portal5 (ЕПВВ) находится по адресу https://www.cbr.ru/lk_uio/guide/rest_api/.

    В программе реализованы по документу “30.09.2023 Описание внешнего взаимодействия. Технические условия внешнего обмена. Версия 2.4” все актуальные разделы 3.1.3-3.1.6.

    Программа получает с портала всю справочную информацию и решает следующие конкретные задачи (названия приведены по справочнику задач tasks):

    • Zadacha_2-1 - Ответ на запрос, предписание. Запрос в Банк России. Квитанции из ВП ЕПВВ
    • Zadacha_3-1 - Запрос, предписание. Ответ на запрос НФО. Квитанции из САДД
    • Zadacha_54 - Запросы ЦИК
    • Zadacha_130 - Получение информации об уровне риска ЮЛ/ИП
    • Zadacha_137 - Ежедневное информирование Банка России о составе и объеме клиентской базы (ФПС “Отчетность”)
    • Zadacha_221 - Ответ на Запрос информации о платежах КО
    • Zadacha_222 - Запрос информации о платежах КО
    • Очистка сообщений отчетности ПП Дельта в inbox:
      • Zadacha_97 - Извещение о результатах контроля информации о ВПОДК и их результатах (ИЭС1)
      • Zadacha_107 - Извещение о результатах контроля отчетности субъектов НПС (ИЭС1)
      • Zadacha_114 - Извещение о результатах контроля представления формы 0409310 (ИЭС1)
      • Zadacha_123 - Извещение о результатах контроля представления формы 0409310 (ИЭС2)
      • Zadacha_130 - Получение информации об уровне риска ЮЛ/ИП
      • Zadacha_133 - Извещение о результатах контроля отчетности субъектов НПС (ИЭС2)
      • Zadacha_140 - Извещение о результатах контроля информации о ВПОДК и их результатах (ИЭС2)
      • Zadacha_156 - Извещение о результатах контроля представления формы 0409601 отчет ко(нко) (ИЭС1) и др.
      • Zadacha_159 - Извещение о результатах контроля представления формы 0409601 отчет ко(нко) (ИЭС2) и др.
    • Очистка сообщений отчетности ПП Дельта в outbox:
      • Zadacha_155 - Представление отчетности КО в Банк России

    Легко добавить и остальные по потребности. На данный момент их уже больше.

    К каждой задаче в API может применяться фильтр дат (в программе некоторые зафиксированы на 14 или 30 дней - по смыслу).

    По завершении каждой операции подписчикам отправляются уведомления по e-mail.

    Единый личный кабинет (ЛК ЦБ)

    Получение подписчиками уведомлений на email о входящих сообщениях с вложенным PDF и краткой информацией о документе (и на что он ссылается, если есть):

    CryptoBot lki
    

    Получение сводной информации о всех зарегистрированных исходящих:

    CryptoBot lko
    

    Если робот не работал несколько дней, то можно перезапросить за неделю:

    CryptoBot lki -d 7
    

    Робот скачает и распакует только недостающее. Параметр влияет только на глубину просмотра. По умолчанию - только за текущий день.

    ЗСК (Светофор)

    Получение последнего реестра (Zadacha_130):

    CryptoBot z130
    

    Отправка перечня клиентов (Zadacha_137):

    CryptoBot z137
    

    При необходимости отправить файл не текущей даты, можно указать число дней для просмотра назад в поисках последнего: 1 - вчера, 7 - за неделю.

    ZBR (Запрос информации о платежах КО)

    Получение запросов (Zadacha_222):

    CryptoBot z222
    

    Отправка ответов на запрос (Zadacha_221):

    CryptoBot z221 --req d55cdbbb-e41f-4a2a-8967-78e2a6e15701
    

    Скачивание конкретного сообщения или по фильтру

    Скачивание конкретного сообщения (указать его Id или URL с окончанием на Id):

    CryptoBot load d55cdbbb-e41f-4a2a-8967-78e2a6e15701
    

    Скачивание Входящих писем из ЛК (Zadacha_3-1) по фильтру дат (за сегодня):

    CryptoBot load -z 3-1 -d
    

    Скачивание Входящих писем из ЛК (Zadacha_3-1) по фильтру дат (за вчера):

    CryptoBot load -z 3-1 -d 1
    

    Скачивание Исходящих писем из ЛК (Zadacha_2-1) по фильтру дат (за 2023):

    CryptoBot load -z 2-1 -f 2023-01-01 -t 2023-12-31
    

    Скачивание запросов ЦИК (Zadacha_54) по фильтру дат (с начала июля):

    CryptoBot load -z 54 -f 2024-07-01
    

    Скачивание всех сообщений обмена для архива:

    CryptoBot load -z 2-1,3-1,54,130,137
    

    При необходимости даты можно уточнить временем по полному формату yyyy-mm-ddThh:mm:ssZ. Контроль ошибок указания такой строки не ведется, но сервер вернет ошибку 400 - “Некорректное значение параметра запроса” в таком случае.

    Будьте осторожны с указанием фильтра: сервер ограничивает выдачу - не более 100 сообщений за раз, но программа попытается скачать все, попадающее в условия фильтра, без ограничений. Для получения сообщений страницами по 100 - используйте параметр фильтра --page N, где N от 1.

    Если стоит CryptoPro CSP, то все скачанные пакеты можно расшифровать для помещения на хранение. Если в скачиваемом периоде менялись ключи, то можно указать предыдущие через запятую.

    После скачивания можно очистить место в ЛК.

    Очистка места в ЛК

    Очистка ЛК от служебной информации ПП Дельта. В коде зафиксировано оставить последние 30 дней (на самом деле и они не нужны - все есть в самой ПП Дельта).

    CryptoBot clean -z 97,107,114,123,133,140,156,169,155 -b 30
    

    Requirements / Требования

    • .NET 8-9 Desktop Runtime
    • CryptoPro CSP и CryptCP (опционально - для криптоопераций)

    Build / Построение

    Build an app with many dlls. В папке дистрибутива будет exe и очень много сопутствующих отдельных dll - вариант разработки в .NET по умолчанию:

    dotnet publish CryptoBot\CryptoBot.csproj -o Distr
    

    Build a single-file app when NET Desktop runtime required. Будет один исполняемый файл exe, но требуется установка .NET - предпочитаемый мною вариант:

    dotnet publish CryptoBot\CryptoBot.csproj -o Distr -r win-x64 -p:PublishSingleFile=true --no-self-contained
    

    Build a single-file app when no runtime required. Вариант, когда .NET устанавливать не нужно - всё есть в одном большом файле, который можно перенести в закрытую систему, где ничего устанавливать нельзя:

    dotnet publish CryptoBot\CryptoBot.csproj -o Distr -r win-x64 -p:PublishSingleFile=true
    

    Build an app on Windows and transfer binary files to Linux. Вариант, когда папку с файлами, собранную на Windows, можно просто перенести на Linux и там запустить, ничего там не устанавливая:

    dotnet publish CryptoBot\CryptoBot.csproj -o Distr -r linux-x64 --self-contained
    

    Для использования одного/нескольких из этих вариантов можно применять build.cmd - он создаст нужный дистрибутив(ы) с архивом исходных файлов текущей версии.

    Versioning / Порядок версий

    Номер версии программы указывается по нарастающему принципу:

    • Протестированная максимальная версия .NET (9);
    • Год текущей разработки (2024);
    • Месяц без первого нуля и день редакции (624 - 24.06.2024);
    • Номер билда - просто нарастающее число для внутренних отличий. Если настроен сервис AppVeyor, то это его автоинкремент.

    Продукт развивается для собственных нужд, а не по коробочной стратегии, и поэтому Breaking Changes могут случаться чаще, чем это принято в SemVer.

    License / Лицензия

    Licensed under the Apache License, Version 2.0.
    Вы можете использовать эти материалы под свою ответственность.

    Telegram

    Описание

    Works with API of Portal5.

    Релизы
    v8.2024.611.1 2024-06-11
    Конвейеры
    0 успешных
    0 с ошибкой