apipgu

package module
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 19, 2023 License: MIT Imports: 13 Imported by: 0

README

go-api-epgu

Go Reference Go Report Card

REST-клиент для работы с API Госуслуг (ЕПГУ). Разработан в соответствии с документом «Спецификация API ЕПГУ, версия 1.12»

Методы

Запрос согласия и получение маркера доступа ЕСИА

  • esia/aas — OAuth2-клиент для получения маркера доступа ЕСИА
  • esia/signature — подпись запросов к ЕСИА

Услуги API ЕПГУ

Примеры

Установка

go get -u github.com/ofstudio/go-api-epgu

Системные требования

  • Go 1.21+
  • Для подписания запросов к ЕСИА с помощью LocalCryptoPro — КриптоПро CSP 5.0+ и сертификат для подписания запросов

Регламентные требования

  1. Информационная система должна быть зарегистрирована на Технологическом портале ЕСИА: продуктовом или тестовом (SVCDEV)
  2. Для ИС должен быть выпущен необходимый сертификат
  3. Публичная часть сертификата должна быть загружена на Технологический портал ЕСИА
  4. Выполнены все необходимые шаги регламента и согласованы заявки на подключения ИС к тестовым или продуктовым средам ЕСИА и ЕПГУ

Руководящие документы

  1. Портал API Госуслуг: регламенты подключения, руководства, спецификация API ЕПГУ и отдельных услуг
  2. Методические рекомендации по интеграции с REST API Цифрового профиля
  3. Методические рекомендации по использованию ЕСИА
  4. Руководство пользователя ЕСИА
  5. Руководство пользователя технологического портала ЕСИА

Ссылки

ЕСИА
Технологический портал ЕСИА
Портал Госуслуг
Список согласий предоставленных пользователем

Лицензия

Распространяется по лицензии MIT. Более подробная информация в файле LICENSE.

Documentation

Overview

REST-клиент для API Госуслуг (АПИ ЕПГУ). Разработан в соответствии с документом "Спецификация API ЕПГУ, версия 1.12"

https://partners.gosuslugi.ru/catalog/api_for_gu

Методы

Получение маркера доступа (токена) ЕСИА

Услуги API ЕПГУ

Примеры

Руководящие документы

  1. Спецификация API, основные руководящие документы и регламенты подключения опубликованы на Портале API Госуслуг: https://partners.gosuslugi.ru/catalog/api_for_gu
  2. Методические рекомендации по интеграции с REST API Цифрового профиля: https://digital.gov.ru/ru/documents/7166/
  3. Методические рекомендации по использованию ЕСИА: https://digital.gov.ru/ru/documents/6186/
  4. Руководство пользователя ЕСИА: https://digital.gov.ru/ru/documents/6182/
  5. Руководство пользователя технологического портала ЕСИА: https://digital.gov.ru/ru/documents/6190/

Адреса Портала Госуслуг

Index

Constants

View Source
const (
	DictFilterOneLevel string = "ONELEVEL" // Плоский справочник
	DictFilterSubTree  string = "SUBTREE"  // Иерархический справочник
)

Типы запрашиваемого справочника (плоский / иерархический) для метода Client.Dict.

View Source
const DefaultArchiveName = "archive"

DefaultArchiveName - имя архива по умолчанию для методов Client.OrderPush и Client.OrderPushChunked. Используется, если в Archive.Name не передано имя архива.

View Source
const DefaultChunkSize = 5_000_000

DefaultChunkSize - размер чанка по умолчанию для метода Client.OrderPushChunked. Если размер архива вложения будет больше, то метод отправит архив несколькими запросами. Значение можно изменить с помощью Client.WithChunkSize.

Подробнее см. "Спецификация API ЕПГУ версия 1.12", раздел "2.1.3 Отправка заявления (загрузка архива по частям)".

Variables

View Source
var (
	ErrOrderCreate        = errors.New("ошибка OrderCreate")
	ErrPushChunked        = errors.New("ошибка OrderPushChunked")
	ErrPush               = errors.New("ошибка OrderPush")
	ErrOrderInfo          = errors.New("ошибка OrderInfo")
	ErrOrderCancel        = errors.New("ошибка OrderCancel")
	ErrAttachmentDownload = errors.New("ошибка AttachmentDownload")
	ErrDict               = errors.New("ошибка Dict")
	ErrService            = errors.New("ошибка услуги")
)

Ошибки первого уровня.

View Source
var (
	ErrMultipartBody         = errors.New("ошибка подготовки multipart-содержимого")
	ErrRequest               = errors.New("ошибка HTTP-запроса")
	ErrUnexpectedContentType = errors.New("неожиданный тип содержимого")
	ErrJSONUnmarshal         = errors.New("ошибка чтения JSON")
	ErrNoFiles               = errors.New("нет файлов во вложении")
	ErrZip                   = errors.New("ошибка создания zip-архива")
	ErrGUID                  = errors.New("не удалось сгенерировать GUID")
	ErrXMLMarshal            = errors.New("ошибка создания XML")
	ErrNilArchive            = errors.New("не передан архив")
	ErrWrongOrderID          = errors.New("некорректный ID заявления")
	ErrInvalidFileLink       = errors.New("некорректная ссылка на файл")
	ErrDictResponse          = errors.New("ошибка получения справочных данных")
)

Ошибки второго уровня.

View Source
var (
	ErrStatusOrderNotFound         = errors.New("заявление не найдено")         // HTTP 204
	ErrStatusBadRequest            = errors.New("неверные параметры")           // HTTP 400
	ErrStatusUnauthorized          = errors.New("отказ в доступе")              // HTTP 401
	ErrStatusForbidden             = errors.New("доступ запрещен")              // HTTP 403
	ErrStatusURLNotFound           = errors.New("не найден URL запроса")        // HTTP 404
	ErrStatusUnableToHandleRequest = errors.New("невозможно обработать запрос") // HTTP 409
	ErrStatusTooManyRequests       = errors.New("слишком много запросов")       // HTTP 429
	ErrStatusInternalError         = errors.New("внутренняя ошибка")            // HTTP 500
	ErrStatusBadGateway            = errors.New("некорректный шлюз")            // HTTP 502
	ErrStatusServiceUnavailable    = errors.New("сервис недоступен")            // HTTP 503
	ErrStatusGatewayTimeout        = errors.New("шлюз не отвечает")             // HTTP 504
	ErrStatusUnexpected            = errors.New("неожиданный HTTP-статус")      // Другие HTTP-коды ошибок
)

HTTP-ошибки.

Подробнее см. "Спецификация API ЕПГУ версия 1.12", "Приложение 4. Ошибки, возвращаемые при запросах к API ЕПГУ"

View Source
var (

	// Ошибка ЕПГУ: code = access_denied_person_permissions
	ErrCodeAccessDeniedPersonPermissions = errors.New("пользователь не дал согласие Вашей системе на выполнение данной операции")

	// Ошибка ЕПГУ: code = access_denied_service
	ErrCodeAccessDeniedService = errors.New("доступ ВИС к запрашиваемой услуге запрещен")

	// Ошибка ЕПГУ: code = access_denied_system
	ErrCodeAccessDeniedSystem = errors.New("доступ запрещен для ВИС, отправляющей запрос")

	// Ошибка ЕПГУ: code = access_denied_user
	ErrCodeAccessDeniedUser = errors.New("доступ запрещен для данного типа пользователя")

	// Ошибка ЕПГУ: code = access_denied_user_legal
	ErrCodeAccessDeniedUserLegal = errors.New("попытка создать заявления с использованием токена, полученного для организации, которая не является владельцем ВИС, отправляющей данный запрос")

	// Ошибка ЕПГУ: code = bad_delegation
	ErrCodeBadDelegation = errors.New("нет необходимых полномочий для создания заявления")

	// Ошибка ЕПГУ: code = bad_request
	ErrCodeBadRequest = errors.New("ошибка в параметрах запроса")

	// Ошибка ЕПГУ: code = cancel_not_allowed
	ErrCodeCancelNotAllowed = errors.New("отмена заявления в текущем статусе невозможна")

	// Ошибка ЕПГУ: code = config_delegation
	ErrCodeConfigDelegation = errors.New("полномочие для создания и подачи заявления по заданной услуги не существует")

	// Ошибка ЕПГУ: code = internal_error
	ErrCodeInternalError = errors.New("ошибка в обработке заявления, причины которой можно выяснить при анализе инцидента")

	// Ошибка ЕПГУ: code = limitation_exception
	ErrCodeLimitationException = errors.New("превышение установленных ограничений, указанных в Приложении 3 к Спецификации")

	// Ошибка ЕПГУ: code = not_found
	ErrCodeNotFound = errors.New("заявление не найдено")

	// Ошибка ЕПГУ: code = order_access
	ErrCodeOrderAccess = errors.New("у пользователя нет прав для работы с текущим заявлением")

	// Ошибка ЕПГУ: code = push_denied
	ErrCodePushDenied = errors.New("нет прав для отправки заявления. Отправить заявление может только руководитель организации или сотрудник с доверенностью")

	// Ошибка ЕПГУ: code = service_not_found
	ErrCodeServiceNotFound = errors.New("не найдена услуга, заданная кодом serviceCode в запросе")

	// Ошибка ЕПГУ: неизвестное значение code
	ErrCodeUnexpected = errors.New("неожиданный код ошибки")

	// Ошибка ЕПГУ: code не указан
	ErrCodeNotSpecified = errors.New("код ошибки не указан")
)

Ошибки ЕПГУ.

Подробнее см. "Спецификация API ЕПГУ версия 1.12", "Приложение 4. Ошибки, возвращаемые при запросах к API ЕПГУ"

Пример JSON-ответа от ЕПГУ при ошибке:

{
  "code": "order_access",
  "message": "У пользователя нет прав для работы с текущим заявлением"
}

Functions

This section is empty.

Types

type Archive added in v0.3.0

type Archive struct {
	Name string // Имя архива (без расширения). Пример: "35002123456-archive"
	Data []byte // Содержимое архива в zip-формате
}

Archive - архив вложений к создаваемому заявлению. Используется для методов Client.OrderPush и Client.OrderPushChunked.

func NewArchive added in v0.3.0

func NewArchive(name string, files ...ArchiveFile) (*Archive, error)

NewArchive - создает архив из файлов вложений. В случае ошибки возвращает ErrZip.

type ArchiveFile added in v0.4.0

type ArchiveFile struct {
	Filename string // Имя файла с расширением. Пример: "req_346ee59c-a428-42f6-342e-c780dd2e278e.xml"
	Data     []byte // Содержимое файла
}

ArchiveFile - файл вложения для формирования архива Archive к создаваемому заявлению

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client - REST-клиент для API Госуслуг.

func NewClient

func NewClient(baseURI string) *Client

NewClient - конструктор Client.

func (*Client) AttachmentDownload added in v0.4.0

func (c *Client) AttachmentDownload(token string, link string) ([]byte, error)

AttachmentDownload - скачивание файла вложения созданного заявления.

GET /api/storage/v2/files/{objectId}/{objectType}/download?mnemonic={mnemonic}

Параметр link - значение поля OrderAttachmentFile.Link из ответа метода Client.OrderInfo. Подробнее см "Спецификация API ЕПГУ версия 1.12", раздел "4. Скачивание файла".

В случае успеха возвращает содержимое файла. В случае ошибки возвращает цепочку из ErrAttachmentDownload и следующих возможных ошибок:

func (*Client) Dict added in v0.4.0

func (c *Client) Dict(code string, filter, parent string, pageNum, pageSize int) ([]DictItem, int, error)

Dict - получение справочных данных.

POST /api/nsi/v1/dictionary/{code}

Подробнее см "Спецификация API ЕПГУ версия 1.12", раздел "3. Получение справочных данных".

Параметры:

  • code - код справочника. Примеры: "EXTERNAL_BIC", "TO_PFR"
  • filter - тип справочника (плоский DictFilterOneLevel или иерархический DictFilterSubTree)
  • parent - код родительского элемента (необязательный)
  • pageNum - номер необходимой страницы (необязательный)
  • pageSize - количество записей на странице (необязательный)

Примечание: не все справочники поддерживают параметры parent, pageNum и pageSize.

В случае успеха возвращает элементы справочника с учетом pageNum и pageSize, а также общее количество найденных элементов. В случае ошибки возвращает цепочку из ErrDict и следующих возможных ошибок:

  • ErrRequest - ошибка HTTP-запроса
  • ErrJSONUnmarshal - ошибка разбора ответа
  • ErrDictResponse - ошибка получения справочных данных c указанием code и message из ответа
  • HTTP-ошибок ErrStatusXXXX (например, ErrStatusBadRequest)
  • Ошибок ЕПГУ: ErrCodeXXXX (например, ErrCodeBadRequest)

func (*Client) OrderCancel added in v0.4.0

func (c *Client) OrderCancel(token string, orderId int) error

OrderCancel - отмена заявления.

POST /api/gusmev/order/{orderId}/cancel

Подробнее см "Спецификация API ЕПГУ версия 1.12", раздел "2.2. Отмена заявления".

В случае ошибки возвращает цепочку из ErrOrderCancel и следующих возможных ошибок:

Примечание. В настоящий момент (декабрь 2023) вызов метода возвращает ошибку HTTP 400 Bad Request:

 {
	 "code":"bad_request",
	 "message":"Required request parameter 'reason' for method parameter type String is not present"
 }

При этом, параметр reason не описан в спецификации. На данный момент ни одна из доступных услуг API ЕПГУ не предусматривает возможность отмены. Вероятно, спецификация метода будет изменена в будущем.

func (*Client) OrderCreate

func (c *Client) OrderCreate(token string, meta OrderMeta) (int, error)

OrderCreate - создание заявления.

POST /api/gusmev/order

Подробнее см. "Спецификация API ЕПГУ версия 1.12", раздел "2.1.2 Создание заявления".

В случае успеха возвращает номер созданного заявления. В случае ошибки возвращает цепочку из ErrOrderCreate и следующих возможных ошибок:

func (*Client) OrderInfo

func (c *Client) OrderInfo(token string, orderId int) (*OrderInfo, error)

OrderInfo - запрос детальной информации по отправленному заявлению.

POST /api/gusmev/order/{orderId}

Подробнее см "Спецификация API ЕПГУ версия 1.12", раздел "2.4. Получение деталей по заявлению".

В случае успеха возвращает детальную информацию по заявлению. В случае ошибки возвращает цепочку из ErrOrderInfo и следующих возможных ошибок:

func (*Client) OrderPush added in v0.3.0

func (c *Client) OrderPush(token string, meta OrderMeta, archive *Archive) (int, error)

OrderPush - формирование заявления единым методом.

POST /api/gusmev/push

Подробнее см "Спецификация API ЕПГУ версия 1.12", раздел "2.1.4 Формирование заявления единым методом"

В случае успеха возвращает номер созданного заявления. В случае ошибки возвращает цепочку из ErrPush и следующих возможных ошибок:

func (*Client) OrderPushChunked

func (c *Client) OrderPushChunked(token string, orderId int, meta OrderMeta, archive *Archive) error

OrderPushChunked - загрузка архива по частям.

POST /api/gusmev/push/chunked

Подробнее см "Спецификация API ЕПГУ версия 1.12", раздел "2.1.3 Отправка заявления (загрузка архива по частям)"

Максимальный размер чанка по умолчанию: DefaultChunkSize, может быть изменен с помощью Client.WithChunkSize.

В случае ошибки возвращает цепочку из ErrPushChunked и следующих возможных ошибок:

func (*Client) WithChunkSize

func (c *Client) WithChunkSize(n int) *Client

WithChunkSize устанавливает максимальный размер чанка для метода Client.OrderPushChunked. По умолчанию используется DefaultChunkSize.

Подробнее см "Спецификация API ЕПГУ версия 1.12", раздел "2.1.3 Отправка заявления (загрузка архива по частям)"

func (*Client) WithDebug

func (c *Client) WithDebug(logger utils.Logger) *Client

WithDebug - включает логирование HTTP-запросов и ответов к ЕПГУ. Формат лога:

>>> Request to {url}
...
{полный HTTP-запрос}
...
<<< Response from {url}
...
{полный HTTP-ответ}
...

func (*Client) WithHTTPClient

func (c *Client) WithHTTPClient(httpClient *http.Client) *Client

WithHTTPClient - устанавливает http-клиент для запросов к ЕПГУ.

type DateTime added in v0.4.0

type DateTime struct {
	time.Time
}

DateTime - дата и время в формате API ЕПГУ.

2023-11-02T07:27:22.586+0300

func (DateTime) MarshalJSON added in v0.4.0

func (d DateTime) MarshalJSON() ([]byte, error)

func (*DateTime) UnmarshalJSON added in v0.4.0

func (d *DateTime) UnmarshalJSON(b []byte) (err error)

type DictAttribute added in v0.4.0

type DictAttribute struct {
	Name          string             `json:"name"`          // [Не документировано]
	Type          string             `json:"type"`          // [Не документировано]
	Value         DictAttributeValue `json:"value"`         // [Не документировано]
	ValueAsOfType any                `json:"valueAsOfType"` // [Не документировано]
}

DictAttribute - дополнительный атрибут элемента справочника из структуры DictItem.

type DictAttributeValue added in v0.4.0

type DictAttributeValue struct {
	AsString    string `json:"asString"`    // [Не документировано]
	TypeOfValue string `json:"typeOfValue"` // [Не документировано]
	Value       any    `json:"value"`       // [Не документировано]
}

DictAttributeValue - значение дополнительного атрибута элемента справочника из структуры DictAttribute.

type DictItem added in v0.4.0

type DictItem struct {
	Value           string           `json:"value"`                 // Код элемента справочника
	ParentValue     string           `json:"parentValue,omitempty"` // Код родительского элемента
	Title           string           `json:"title"`                 // Наименование элемента
	IsLeaf          bool             `json:"isLeaf"`                // [?] Признак наличия подчинённых элементов
	Children        []map[string]any `json:"children"`              // Подчинённые элементы
	Attributes      []DictAttribute  `json:"attributes"`            // Дополнительные атрибуты элемента справочника [детально]
	AttributeValues map[string]any   `json:"attributeValues"`       // Список значений дополнительных атрибутов элемента справочника [кратко]
}

DictItem - элемент справочника.

Подробнее см. "Спецификация API ЕПГУ версия 1.12", раздел "3. Получение справочных данных".

Пример элемента справочника EXTERNAL_BIC:

{
  "value": "044525974",
  "title": "044525974 - АО \"Тинькофф Банк\" г Москва",
  "isLeaf": true,
  "children": [],
  "attributes": [
    {
      "name": "ID",
      "type": "STRING",
      "value": {
        "asString": "044525974",
        "typeOfValue": "STRING",
        "value": "044525974"
      },
      "valueAsOfType": "044525974"
    },
    {
      "name": "NAME",
      "type": "STRING",
      "value": {
        "asString": "АО \"Тинькофф Банк\" г Москва",
        "typeOfValue": "STRING",
        "value": "АО \"Тинькофф Банк\" г Москва"
      },
      "valueAsOfType": "АО \"Тинькофф Банк\" г Москва"
    },
    {
      "name": "BIC",
      "type": "STRING",
      "value": {
        "asString": "044525974",
        "typeOfValue": "STRING",
        "value": "044525974"
      },
      "valueAsOfType": "044525974"
    },
    {
      "name": "CORR_ACCOUNT",
      "type": "STRING",
      "value": {
        "asString": "30101810145250000974",
        "typeOfValue": "STRING",
        "value": "30101810145250000974"
      },
      "valueAsOfType": "30101810145250000974"
    }
  ],
  "attributeValues": {
    "ID": "044525974",
    "CORR_ACCOUNT": "30101810145250000974",
    "BIC": "044525974",
    "NAME": "АО \"Тинькофф Банк\" г Москва"
  }
}

Пример элемента справочника TO_PFR:

{
  "value": "087109",
  "title": "Клиентская служба «Замоскворечье, Якиманка» по г. Москве и МО",
  "isLeaf": true,
  "children": [],
  "attributes": [],
  "attributeValues": {}
},

type OrderAttachmentFile

type OrderAttachmentFile struct {
	Id                  string `json:"id"`                  // Идентификатор файла
	FileName            string `json:"fileName"`            // Название файла
	MimeType            string `json:"mimeType"`            // MIME-тип
	Link                string `json:"link"`                // Ссылка на файл в хранилище
	HasDigitalSignature bool   `json:"hasDigitalSignature"` // Наличие подписи

	FileSize int    `json:"fileSize"` // Размер файла
	Type     string `json:"type"`     // Тип
}

OrderAttachmentFile - файл заявления, отправленный пользователем из структуры OrderDetails метода Client.OrderInfo.

Подробнее см "Спецификация API ЕПГУ версия 1.12", раздел "2.4. Получение деталей по заявлению".

type OrderAttributeEvent

type OrderAttributeEvent struct {
	Name     string `json:"name"`     // Наименование атрибута
	NewValue string `json:"newValue"` // Новое значение
	OldValue string `json:"oldValue"` // Старое значение
}

OrderAttributeEvent - атрибуты событий для заявления из структуры OrderDetails метода Client.OrderInfo.

Подробнее см "Спецификация API ЕПГУ версия 1.12", раздел "2.4. Получение деталей по заявлению".

type OrderDetails

type OrderDetails struct {
	Id                   int                   `json:"id"`                   // Номер заявления
	OrderStatusId        int                   `json:"orderStatusId"`        // Код статуса заявления
	Statuses             []OrderStatus         `json:"statuses"`             // Статусы заявления
	CurrentStatusHistory OrderStatusHistory    `json:"currentStatusHistory"` // История статуса
	Updated              DateTime              `json:"updated"`              // Дата и время обновления статуса заявления
	Closed               bool                  `json:"closed"`               // Флаг наличия финального статуса
	HasResult            bool                  `json:"hasResult"`            // Флаг передачи файла в ответ на заявление
	OrderAttachmentFiles []OrderAttachmentFile `json:"orderAttachmentFiles"` // Файлы заявления, отправленные пользователем
	OrderResponseFiles   []OrderResponseFile   `json:"orderResponseFiles"`   // Информация о файлах в ответе заявления

	HasNewStatus           bool   `json:"hasNewStatus"`                 // Флаг нового статуса для заявления
	CurrentStatusHistoryId int    `json:"currentStatusHistoryId"`       // Идентификатор статуса заявления
	OrderStatusName        string `json:"orderStatusName"`              // Наименование статуса заявления
	StateOrgStatusCode     string `json:"stateOrgStatusCode,omitempty"` // Код ведомственного статуса
	StateOrgStatusName     string `json:"stateOrgStatusName,omitempty"` // Наименование ведомственного статуса

	StateOrgId         int    `json:"stateOrgId"`         // Код ведомства
	StateStructureName string `json:"stateStructureName"` // Наименование ведомства
	StateOrgCode       string `json:"stateOrgCode"`       // Сокращенное наименование ведомства
	StateStructureId   string `json:"stateStructureId"`   // Код ведомства [по ФРГУ]
	Gisdo              bool   `json:"gisdo"`              // Признак подключенности ведомства к ФГИС ДО

	SourceSystem       string `json:"sourceSystem"`          // Наименование системы откуда было подано заявление [мнемоника ИС-потребителя API ЕПГУ]
	CreationMode       string `json:"creationMode"`          // Режим создания
	ExtSystem          bool   `json:"extSystem"`             // Признак, что создано внешней системой (через сервис ЕЛК)
	OwnerId            int    `json:"ownerId"`               // Идентификатор пользователя [OID на Госуслугах / ЕСИА]
	UserId             int    `json:"userId"`                // Идентификатор пользователя [OID на Госуслугах / ЕСИА]
	PersonType         string `json:"personType"`            // Тип пользователя
	UserSelectedRegion string `json:"userSelectedRegion"`    // Код ОКАТО местоположения пользователя
	TestUser           bool   `json:"testUser"`              // Флаг тестового пользователя
	Location           string `json:"location"`              // Код уровня услуги [ОКАТО пользователя?]
	OrgUserName        string `json:"orgUserName,omitempty"` // Наименование организации пользователя

	OrderType         string         `json:"orderType"`                // Тип заявления
	EserviceId        string         `json:"eserviceId"`               // Идентификатор формы заявления
	ServiceTargetId   string         `json:"serviceTargetId"`          // Идентификатор цели
	ServicePassportId string         `json:"servicePassportId"`        // Идентификатор паспорта услуги
	ServiceName       string         `json:"serviceName"`              // Наименование цели
	DeprecatedService bool           `json:"deprecatedService"`        // Признак, что услуга больше не заказывается
	HubForm           bool           `json:"hubForm"`                  // Признак, что форма-концентратор
	HubFormVersion    int            `json:"hubFormVersion,omitempty"` // Идентификатор регионо-зависимой формы старого конструктора форм
	AdmLevelCode      string         `json:"admLevelCode"`             // Уровень услуги (региональный/федеральный)
	MultRegion        bool           `json:"multRegion"`               // Признак регионозависимости
	ServiceEpguId     string         `json:"serviceEpguId"`            // Идентификатор цели услуги ЕПГУ
	FormVersion       string         `json:"formVersion"`              // Версия
	ServiceUrl        string         `json:"serviceUrl,omitempty"`     // Ссылка на заявление
	PortalCode        string         `json:"portalCode,omitempty"`     // Код портала
	PortalName        string         `json:"portalName,omitempty"`     // Наименование портала
	PossibleServices  map[string]any `json:"possibleServices"`         // [Не документировано]

	OrderDate               DateTime              `json:"orderDate"`               // Дата и время создания заявления
	RequestDate             DateTime              `json:"requestDate"`             // Метка даты и времени запроса
	OrderAttributeEvents    []OrderAttributeEvent `json:"orderAttributeEvents"`    // Атрибуты событий для заявления
	Online                  bool                  `json:"online"`                  // Признак, онлайн услуга или нет
	HasTimestamp            bool                  `json:"hasTimestamp"`            // Флаг timestamp
	HasActiveInviteToEqueue bool                  `json:"hasActiveInviteToEqueue"` // Флаг записи на прием
	HasChildren             bool                  `json:"hasChildren"`             // Флаг наличия дочерних заявлений
	HasPreviewPdf           bool                  `json:"hasPreviewPdf"`           // Флаг наличия пдф
	HasEmpowerment2021      bool                  `json:"hasEmpowerment2021"`      // Флаг наличия делегирования
	AllowToEdit             bool                  `json:"allowToEdit"`             // Флаг редактирования заявления
	AllowToDelete           bool                  `json:"allowToDelete"`           // Флаг удаления заявки
	DraftHidden             bool                  `json:"draftHidden"`             // Признак скрытия черновика
	CheckQueue              bool                  `json:"checkQueue"`              // Флаг проверки очереди
	EQueueEvents            []map[string]any      `json:"eQueueEvents"`            // Массив объектов eQueueEvent [структура элемента массива не документирована]
	UseAsTemplate           bool                  `json:"useAsTemplate"`           // Флаг черновика заявления
	WithDelivery            bool                  `json:"withDelivery"`            // Флаг доставки
	WithCustomResult        bool                  `json:"withCustomResult"`        // Признак необходимости отображения кнопки в Деталях заявления услуги
	PowerMnemonic           string                `json:"powerMnemonic,omitempty"` // Мнемоника полномочия, с которым подается заявление
	ReadyToPush             bool                  `json:"readyToPush"`             // Служебный параметр
	Elk                     bool                  `json:"elk"`                     // [Не документировано]

	SmevTx        string `json:"smevTx"`                // Код транзакции СМЭВ3
	SmevMessageId string `json:"smevMessageId"`         // Идентификатор СМЭВ-сообщения от ведомства, сменившего статус
	RoutingCode   string `json:"routingCode,omitempty"` // Код маршрутизации СМЭВ-сообщения в ведомство

	PaymentRequired     bool             `json:"paymentRequired"`     // Флаг наличия оплаты
	NoPaidPaymentCount  int              `json:"noPaidPaymentCount"`  // Количество неоплаченных платежей
	PaymentCount        int              `json:"paymentCount"`        // Количество платежей
	HasNoPaidPayment    bool             `json:"hasNoPaidPayment"`    // Флаг наличия оплаченного платежа
	PaymentStatusEvents []map[string]any `json:"paymentStatusEvents"` // Статус событий при оплате [структура события оплаты не документирована]
	OrderPayments       []map[string]any `json:"orderPayments"`       // Информация о платежах [структура объекта платежа не документирована]
	Payback             bool             `json:"payback"`             // Служебный параметр

	ReadyToSign    bool   `json:"readyToSign"`    // Для ЮЛ, для подписания заявки, маркер ожидания УКЭП
	SignCnt        int    `json:"signCnt"`        // Кол-во подписей, для заявлений от нескольких заявителей
	AllFileSign    bool   `json:"allFileSign"`    // Флаг наличия ЭП для файлов
	ChildrenSigned bool   `json:"childrenSigned"` // Флаг подписи дочерних заявлений
	EdsStatus      string `json:"edsStatus"`      // Идентификатор статуса проверки ЭП

	TextMessages     []map[string]any `json:"textMessages"`     // Информация о сообщениях [структура объекта текстового сообщения не документирована]
	InfoMessages     []map[string]any `json:"infoMessages"`     // Информация о сообщениях [структура объекта сообщения не документирована]
	UnreadMessageCnt int              `json:"unreadMessageCnt"` // Кол-во непрочитанных сообщений

	NotifySms   string `json:"notifySms,omitempty"`   // Флаг необходимости уведомления о смене статуса через СМС
	NotifyEmail string `json:"notifyEmail,omitempty"` // Флаг необходимости уведомления о смене статуса через сообщение на эл. почту
	NotifyPush  string `json:"notifyPush,omitempty"`  // Флаг необходимости уведомления о смене статуса через push-сообщение

	Qrlink OrderQrlink `json:"qrlink"` // [Не документировано]
	Steps  []any       `json:"steps"`  // [Не документировано]

}

OrderDetails - детальная информация по заявлению из структуры OrderInfo метода Client.OrderInfo.

Подробнее см "Спецификация API ЕПГУ версия 1.12", раздел "2.4. Получение деталей по заявлению".

Примечание: поля, отмеченные как не документированные, не описаны в спецификации, однако могут приходить в ответе.

Пример для заявления "Доставка пенсии и социальных выплат СФР" (10000000109). Обратите внимание, что структура в примере содержит не все все поля, упомянутые в спецификации.

{
 ////
 // Основные аттрибуты
 ////

 "id": 1230254874,         // Номер заявления
 "orderStatusId": 2,       // Код статуса заявления
 "statuses": [             // Статусы заявления
   {
     "id": 12300714241,                        // Идентификатор статуса
     "statusId": 0,                            // Код статуса
     "title": "Черновик заявления",            // Наименование статуса
     "date": "2023-11-02T07:27:22.586+0300",   // Дата и время смены статуса
     "orderId": 1230254874,                    // Номер заявления
     "finalStatus": false,                     // Флаг финального статуса
     "cancelAllowed": false,                   // Флаг возможности отменить заявление
     "hasResult": "N",                         // Флаг передачи файла в ответ на заявление
     "unreadEvent": true,                      // Признак прочтения
     "deliveryCancelAllowed": false,           // Флаг наличия отмены доставки
     "sendMessageAllowed": false,              // Признак разрешения отправки сообщения
     "editAllowed": false,                     // Признак редактирования
     "statusColorCode": "edit"                 // [Не документировано]
   },
   {
     "id": 12300712489,
     "statusId": 17,
     "title": "Зарегистрировано на портале",
     "date": "2023-11-02T07:27:22.936+0300",
     "orderId": 1230254874,
     "finalStatus": false,
     "hasResult": "N",
     "cancelAllowed": false,
     "sender": "Фонд пенсионного и социального страхования Российской Федерации", // Отправитель СМЭВ-сообщения о смене статуса
     "unreadEvent": true,
     "deliveryCancelAllowed": false,
     "sendMessageAllowed": false,
     "editAllowed": false,
     "statusColorCode": "in_progress"
   },
   {
     "id": 12300710521,
     "statusId": 21,
     "title": "Заявление отправлено в ведомство",
     "date": "2023-11-02T07:27:23.527+0300",
     "orderId": 1230254874,
     "finalStatus": false,
     "hasResult": "N",
     "cancelAllowed": false,
     "sender": "Фонд пенсионного и социального страхования Российской Федерации",
     "unreadEvent": true,
     "deliveryCancelAllowed": false,
     "sendMessageAllowed": false,
     "editAllowed": false,
     "statusColorCode": "in_progress",
   },
   {
     "id": 12300710522,
     "statusId": 2,
     "title": "Заявление получено ведомством",
     "date": "2023-11-02T07:27:44.134+0300",
     "orderId": 1230254874,
     "finalStatus": false,
     "hasResult": "N",
     "cancelAllowed": false,
     "sender": "Фонд пенсионного и социального страхования Российской Федерации",
     "comment": "Сообщение доставлено", // Комментарий к статусу
     "unreadEvent": true,
     "deliveryCancelAllowed": false,
     "sendMessageAllowed": false,
     "editAllowed": false,
     "statusColorCode": "in_progress"
   }
 ],
 "currentStatusHistory": { // История статуса
   "id": 12300710522,                        // Идентификатор статуса
   "statusId": 2,                            // Код статуса
   "title": "Заявление получено ведомством", // Код статуса
   "date": "2023-11-02T07:27:44.134+0300",   // Дата и время смены статуса
   "orderId": 1230254874,                    // Номер заявления
   "finalStatus": false,                     // Флаг финального статуса
   "hasResult": "N",                         // Флаг передачи файла в ответ на заявление
   "cancelAllowed": false,                   // Флаг наличия отмены
   "sender": "Фонд пенсионного и социального страхования Российской Федерации", // Наименование ведомства
   "comment": "Сообщение доставлено",        // Комментарий
   "unreadEvent": true,                      // Признак прочтение события
   "deliveryCancelAllowed": false,           // Флаг наличия отмены доставки
   "sendMessageAllowed": false,              // Признак разрешения отправки сообщения
   "editAllowed": false,                     // Признак редактирования
   "statusColorCode": "in_progress",         // [Не документировано]
 },
 "updated": "2023-11-02T07:27:44.140+0300", // Дата и время обновления статуса заявления
 "closed": false,          // Флаг наличия финального статуса
 "hasResult": false,       // Флаг передачи файла в ответ на заявление
 "orderAttachmentFiles": [ // Файлы заявления, отправленные пользователем
   {
     "id": "1230254874/files/mzXxRzhkODcwOWRiLWRkNDUtNDEyOS1hZTMyLTZiNGNlZmVjYTkwYy54bWw", // Идентификатор файла
     "fileName": "req_8d8567db-d445-4759-a122-6b4cefeca22c.xml",                           // Название файла
     "mimeType": "application/xml",                                                        // MIME-тип
     "link": "terrabyte://00/1230254874/req_8d8567db-d445-4759-a122-6b4cefeca22c.xml/2",   // Ссылка на файл в хранилище
     "hasDigitalSignature": false,                                                         // Наличие подписи
     "fileSize": 5519,                                                                     // Наличие подписи
     "type": "REQUEST"                                                                     // Наличие подписи
   },
   {
     "id": "1230254874/files/dHJhbnNYTRQ4NzA5ZGItZGQ0NS95MTI5LWFlMzItNmI0Y2VmZWNhOTBjLnhtbA",
     "fileName": "trans_8d8567db-d445-4759-a122-6b4cefeca22c.xml",
     "mimeType": "application/xml",
     "link": "terrabyte://00/1230254874/trans_8d8567db-d445-4759-a122-6b4cefeca22c.xml/2",
     "hasDigitalSignature": false,
     "fileSize": 644,
     "type": "ATTACHMENT"
   }
 ],
 "orderResponseFiles": [], // Информация о файлах в ответе заявления

 ////
 // Дополнительные аттрибуты
 ////

 "hasNewStatus": true,                               // Флаг нового статуса для заявления
 "currentStatusHistoryId": 12300710522,              // Идентификатор статуса заявления
 "orderStatusName": "Заявление получено ведомством", // Наименование статуса заявления

 "stateOrgId": 266,                 // Код ведомства
 "stateStructureName": "СФР",       // Наименование ведомства
 "stateOrgCode": "pfr",             // Сокращенное наименование ведомства
 "stateStructureId": "10000002796", // Код ведомства [по ФРГУ]
 "gisdo": false,                    // Признак подключенности ведомства к ФГИС ДО

 "sourceSystem": "Банк ЮЖНЫЙ",        // Наименование системы откуда было подано заявление [мнемоника ИС-потребителя API ЕПГУ]
 "creationMode": "api",               // Режим создания
 "extSystem": false,                  // Признак, что создано внешней системой (через сервис ЕЛК)
 "ownerId": 1000572618,               // Идентификатор пользователя [OID на Госуслугах / ЕСИА]
 "userId": 1000572618,                // Идентификатор пользователя [OID на Госуслугах / ЕСИА]
 "personType": "PERSON",              // Тип пользователя
 "userSelectedRegion": "00000000000", // Код ОКАТО местоположения пользователя
 "testUser": false,                   // Флаг тестового пользователя
 "location": "92000000000",           // Код уровня услуги [ОКАТО пользователя?]

 "orderType": "ORDER",               // Тип заявления
 "eserviceId": "10000000109",        // Идентификатор формы заявления
 "serviceTargetId": "-10000000109",  // Идентификатор цели
 "servicePassportId": "600109",      // Идентификатор паспорта услуги
 "serviceName": "Доставка пенсии и социальных выплат СФР", // Наименование цели
 "deprecatedService": false,        // Признак, что услуга больше не заказывается
 "hubForm": false,                  // Признак, что форма-концентратор
 "admLevelCode": "FEDERAL",         // Уровень услуги (региональный/федеральный)
 "multRegion": true,                // Признак регионозависимости
 "serviceEpguId": "1",              // Идентификатор цели услуги ЕПГУ
 "formVersion": "1",                // Версия
 "possibleServices": {},            // [Не документировано]

 "orderDate": "2023-11-02T07:27:22.000+0300",    // Дата и время создания заявления
 "requestDate": "2023-11-02T07:27:22.942+0300",  // Метка даты и времени запроса
 "orderAttributeEvents": [],       // Атрибуты событий для заявления
 "online": false,                  // Признак, онлайн услуга или нет
 "hasTimestamp": false,            // Флаг timestamp
 "hasActiveInviteToEqueue": false, // Флаг записи на прием
 "hasChildren": false,             // Флаг наличия дочерних заявлений
 "hasPreviewPdf": false,           // Флаг наличия пдф
 "hasEmpowerment2021": false,      // Флаг наличия делегирования
 "allowToEdit": false,             // Флаг редактирования заявления
 "allowToDelete": false,           // Флаг удаления заявки
 "draftHidden": false,             // Признак скрытия черновика
 "checkQueue": false,              // Флаг проверки очереди
 "eQueueEvents": [],               // Массив объектов eQueueEvent [структура элемента массива не документирована]
 "useAsTemplate": false,           // Флаг черновика заявления
 "withDelivery": false,            // Флаг доставки
 "withCustomResult": false,        // Признак необходимости отображения кнопки в Деталях заявления услуги
 "readyToPush": false,             // Служебный параметр
 "elk": false,                     // [Не документировано]

 "smevTx": "e74bc34c-c156-8523-1234-e6c549a28e23", // Код транзакции СМЭВ3
 "smevMessageId": "WAIT_RESPONSE",                 // Идентификатор СМЭВ-сообщения от ведомства, сменившего статус

 "paymentRequired": false,     // Флаг наличия оплаты
 "noPaidPaymentCount": -1,     // Количество неоплаченных платежей
 "paymentCount": 0,            // Количество платежей
 "hasNoPaidPayment": false,    // Флаг наличия оплаченного платежа
 "paymentStatusEvents": [],    // Статус событий при оплате [структура события оплаты не документирована]
 "orderPayments": [],          // Информация о платежах [структура объекта платежа не документирована]
 "payback": false,             // Служебный параметр

 "readyToSign": false,               // Для ЮЛ, для подписания заявки, Маркер ожидания УКЭП
 "signCnt": 0,                       // Кол-во подписей, для заявлений от нескольких заявителей
 "allFileSign": false,               // Флаг наличия ЭП для файлов
 "childrenSigned": false,            // Флаг подписи дочерних заявлений
 "edsStatus": "EDS_NOT_SUPPORTED",   // Идентификатор статуса проверки ЭП

 "infoMessages": [],       // Информация о сообщениях [структура объекта сообщения не документирована]
 "textMessages": [],       // Информация о сообщениях [структура объекта текстового сообщения не документирована]
 "unreadMessageCnt": 0,    // unreadMessageCnt

 "qrlink": { // [Не документировано]
   "hasAltMimeType": false,        // Связанно с alternativeMimeTypes из сервиса тербайта
   "fileSize": 0,                  // Размер файла
   "hasDigitalSignature": false,   // Флаг наличия ЭП
   "canSentToMFC": false,          // Флаг отправки в МФЦ
   "canPrintMFC": false            // [Не документировано]
 },
 "steps": [] // [Не документировано]
}

type OrderInfo

type OrderInfo struct {
	Code      string        // Код состояния заявления в соответствии с Приложением 1 Спецификации
	Message   string        // Текстовое сообщение, описывающее текущее состояние запроса на создание заявления
	MessageId string        // [Не документировано, GUID]
	Order     *OrderDetails // Детали заявления, если оно уже создано на портале и отправлено в ведомство
}

OrderInfo - детальная информация по отправленному заявлению метода Client.OrderInfo.

Подробнее см "Спецификация API ЕПГУ версия 1.12", раздел "2.4. Получение деталей по заявлению".

Пример для заявления "Доставка пенсии и социальных выплат СФР" (10000000109):

{
  "code": "OK",
  "message": null,
  "messageId": "2252fb21-92f8-61ee-a6f0-7ed53c117861",
  "order": {...}
}

type OrderMeta

type OrderMeta struct {
	Region      string // Код интерактивной формы на ЕПГУ
	ServiceCode string // Код цели обращения услуги в ФРГУ
	TargetCode  string // Код ОКАТО местоположения пользователя (можно передавать код ОКАТО региона, если невозможно определить точнее)
}

OrderMeta - метаданные создаваемого заявления.

func (*OrderMeta) JSON

func (m *OrderMeta) JSON() []byte

JSON - возвращает метаданные в формате JSON.

type OrderQrlink struct {
	HasAltMimeType      bool `json:"hasAltMimeType"`      // Связанно с alternativeMimeTypes из сервиса тербайта
	FileSize            int  `json:"fileSize"`            // Размер файла
	HasDigitalSignature bool `json:"hasDigitalSignature"` // Флаг наличия ЭП
	CanSentToMFC        bool `json:"canSentToMFC"`        // Флаг отправки в МФЦ
	CanPrintMFC         bool `json:"canPrintMFC"`         // [Не документировано]
}

OrderQrlink - не документированное поле структуры OrderDetails метода Client.OrderInfo.

Подробнее см "Спецификация API ЕПГУ версия 1.12", раздел "2.4. Получение деталей по заявлению".

type OrderResponseFile

type OrderResponseFile struct {
	Id                  string `json:"id"`                  // Идентификатор файла
	FileName            string `json:"fileName"`            // Наименование файла
	MimeType            string `json:"mimeType"`            // MIME-тип файла
	Link                string `json:"link"`                // Ссылка на файл в TERRABYTE
	HasDigitalSignature bool   `json:"hasDigitalSignature"` // Флаг наличия ЭП к файлу

	HasAltMimeType bool   `json:"hasAltMimeType"` // Флаг наличия альтернативного MIME-типа
	EdsStatus      string `json:"edsStatus"`      // Статус проверки ЭП в EDS
	FileSize       int    `json:"fileSize"`       // Размер файла
}

OrderResponseFile - информация о файле в ответе заявления из структуры OrderDetails.

Подробнее см "Спецификация API ЕПГУ версия 1.12", раздел "2.4. Получение деталей по заявлению".

type OrderStatus

type OrderStatus struct {
	Id                  int      `json:"id"`                            // Идентификатор статуса
	StatusId            int      `json:"statusId"`                      // Код статуса
	Title               string   `json:"title"`                         // Наименование статуса
	Date                DateTime `json:"date"`                          // Дата и время смены статуса
	OrderId             int      `json:"orderId"`                       // Номер заявления
	FinalStatus         bool     `json:"finalStatus"`                   // Флаг финального статуса
	HasResult           string   `json:"hasResult"`                     // Флаг передачи файла в ответ на заявление
	CancelAllowed       bool     `json:"cancelAllowed"`                 // Флаг возможности отменить заявление
	Sender              string   `json:"sender,omitempty"`              // Отправитель СМЭВ-сообщения о смене статуса
	Comment             string   `json:"comment,omitempty"`             // Комментарий к статусу
	StateOrgStatusCode  string   `json:"stateOrgStatusCode,omitempty"`  // Код ведомственного статуса
	StateOrgStatusDescr string   `json:"stateOrgStatusDescr,omitempty"` // Наименование ведомственного статуса

	UnreadEvent           bool   `json:"unreadEvent"`           // Признак прочтения
	DeliveryCancelAllowed bool   `json:"deliveryCancelAllowed"` // Флаг наличия отмены доставки
	SendMessageAllowed    bool   `json:"sendMessageAllowed"`    // Признак разрешения отправки сообщения
	EditAllowed           bool   `json:"editAllowed"`           // Признак редактирования
	Mnemonic              string `json:"mnemonic,omitempty"`    // Мнемоника ИС отправителя
	StatusColorCode       string `json:"statusColorCode"`       // [Не документировано]

}

OrderStatus - статусы заявления структуры OrderDetails метода Client.OrderInfo.

type OrderStatusHistory

type OrderStatusHistory struct {
	Id                  int      `json:"id"`                            // Идентификатор статуса
	StatusId            int      `json:"statusId"`                      // Код статуса
	Title               string   `json:"title"`                         // Наименование статуса
	Date                DateTime `json:"date"`                          // Дата и время смены статуса
	OrderId             int      `json:"orderId"`                       // Номер заявления
	FinalStatus         bool     `json:"finalStatus"`                   // Флаг финального статуса
	HasResult           string   `json:"hasResult"`                     // Флаг передачи файла в ответ на заявление
	CancelAllowed       bool     `json:"cancelAllowed"`                 // Флаг наличия отмены
	Sender              string   `json:"sender,omitempty"`              // Наименование ведомства
	Comment             string   `json:"comment,omitempty"`             // Комментарий
	StateOrgStatusCode  string   `json:"stateOrgStatusCode,omitempty"`  // Код ведомственного статуса
	StateOrgStatusDescr string   `json:"stateOrgStatusDescr,omitempty"` // Наименование ведомственного статуса
	StatusColorCode     string   `json:"statusColorCode"`               // [Не документировано]

	UnreadEvent           bool `json:"unreadEvent"`           // Признак прочтения события
	DeliveryCancelAllowed bool `json:"deliveryCancelAllowed"` // Флаг наличия отмены доставки
	SendMessageAllowed    bool `json:"sendMessageAllowed"`    // Признак разрешения отправки сообщения
	EditAllowed           bool `json:"editAllowed"`           // Признак редактирования

}

OrderStatusHistory - история статуса заявления структуры OrderDetails метода Client.OrderInfo.

Подробнее см "Спецификация API ЕПГУ версия 1.12", раздел "2.4. Получение деталей по заявлению".

Directories

Path Synopsis
esia
aas
OAuth2-клиент для запроса согласия и маркера доступа ЕСИА для получателей услуг ЕПГУ — физических лиц.
OAuth2-клиент для запроса согласия и маркера доступа ЕСИА для получателей услуг ЕПГУ — физических лиц.
signature
Провайдеры электронной подписи запросов к ЕСИА.
Провайдеры электронной подписи запросов к ЕСИА.
examples
esia-token-request
Пример запроса согласия у пользователя и получения маркера доступа ЕСИА для работы с API Госуслуг (АПИ ЕПГУ).
Пример запроса согласия у пользователя и получения маркера доступа ЕСИА для работы с API Госуслуг (АПИ ЕПГУ).
esia-token-update
Пример обновления маркера доступа ЕСИА для работы с API Госуслуг (АПИ ЕПГУ).
Пример обновления маркера доступа ЕСИА для работы с API Госуслуг (АПИ ЕПГУ).
order-info
Пример получения детальной информации по отправленному заявлению.
Пример получения детальной информации по отправленному заявлению.
order-push-chunked
Пример создания заявления и загрузки архива по частям.
Пример создания заявления и загрузки архива по частям.
services
sfr
Услуги и типы данных СФР.
Услуги и типы данных СФР.
sfr/10000000109-zdp
Услуга "Доставка пенсии и социальных выплат ПФР"
Услуга "Доставка пенсии и социальных выплат ПФР"
Утилиты.
Утилиты.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL