Сервис-счетов.md


Оглавление

Назначение

Хранит в себе реквизиты счетов.

Информация по поводу реквизитов счетов

Обязательные

  • номер расчётного счёта
  • номер корреспондентского счёта
  • банковский идентификационный код (БИК)

Необязательные

  • идентификационный номер налогоплательщика (ИНН)
  • код причины постановки на учёт (КПП)

Обязательные

Расчётный счёт

Это 20 цифр.
Пример:
408 17 810 8 1634 ХХХХХХХ

1-3 цифры

Показывает, кому принадлежит счет:

  • 102-109 - счета фондов и хранения капитала
  • 203 и 204 - счета драгметаллов
  • 301-329 - счета проведения операций между банками
  • 401 и 402 - счета для переводов в бюджет
  • 403 - управление деньгами в ведении Минфина
  • 404 - внебюджетные фонды
  • 405 и 406 - государственные и бюджетные организации
  • 407 - коммерческие организации (ЮР компании)
  • 408 - физические лица, индивидуальные предприниматели
  • 411-419 - вклады, открытые государственными структурами
  • 420-422 - хранение средств юридических лиц
  • 423 - вклады срочные и до востребования
  • 424 - средства иностранных компаний
  • 425 - средства на вкладе принадлежат физическому лицу-нерезиденту
  • 430 - средства банков
  • 501-526 - счета, необходимые для учета ценных бумаг.

4-5 цифры

В зависимости от первых трёх цифр их назначение меняется:

  • Содержат сведения о владельце (408):
    • 408 17 — текущий счет физического лица
    • 408 02 — счет индивидуального предпринимателя
    • 408 03 — счет индивидуального предпринимателя-нерезидента
  • Обозначают цель и вид деятельности юридического лица (407):
    • 407 01 — финансовые организации (банки, страховые компании и т. д.)
    • 407 02 — коммерческие организации (любые предприятия, работающие для получения прибыли)
    • 407 03 — некоммерческие организации (фонды, религиозные, общественные организации) и пр.
  • Служат для обозначения срока, на который открыт счет (423):
    • 423 04 — депозиты на срок от 91 до 180 дней
    • 423 05 — депозиты на срок от 181 дня до 1 года
    • 423 06 — депозиты на срок от 1 года до 3 лет

Комбинации первых пяти цифр смотреть тут.
А вот тут уже версия 2024 года.

6-8 цифры

Указывает на код валюты:

  • 810 - рубли
  • 840 - доллары
  • 978 - евро

9 цифра

Является произвольным числом

10-13 цифры

Указывает на уникальный номер филиала банка

14-20 цифры

Порядковый номер счёт, присваемый по мере открытия

Корреспондентский счёт

Корреспондентский счет всегда начинается с 30101, а три последние цифры в нем совпадают с последними цифрами БИК.
Пример:

  • БИК 044525411
  • к/с 30101810145250000411

    1-3 цифры

    301 - корреспондентский счёт

    4-5 цифры

    Кто открыл счёт:

  • 01 - кредитная организация
  • 04 - небанковская расчётная кредитная организация, которая занимается депозитными и кредитными операциями
  • 09 - лоро счёт
  • 10 - ностро счёт
  • 25 - НКО

    6-8 цифры

    Валюта

    9 цифра

    Генерируется на основе остальных цифр счёта и БИК

    10-13 цифры

    Номер подразделения - фактически - это склеенные 3-6 цифры БИК.

    14-20 цифры

    Порядковый номер счёта. Причем последние цифры (3 цифры) совпадают с последними цифрами БИК банка.

БИК

БИК — это уникальный банковский номер, принадлежащий конкретному отделению кредитной организации (9 цифр). Центральный Банк РФ присваивает БИК для обозначения вида участия организации в платежной системе, а также ведет учет всех номеров в специальном справочнике.

1 цифра

Участник платёжной системы:

  • 0 - обозначает прямого участника — организацию, которая открыла счет в ЦБ. Это, например, любой российский коммерческий банк.
  • 1 - косвенного участника. Это финансовые кредитные организации, которые открыли счет не в Центробанке, а у прямого участника платежной системы (ОАО). Например, ОАО «Коммерческий банк КЫРГЫЗСТАН»
  • 2 - клиент ЦБ, который не является участником платежной системы Банка России (АО). Это, например, оператор платежной системы «МИР».

    2 цифра

    Код страны. Для РФ это 4.

    3-4 цифры

    Код региона.

    5-6 цифры

    Номер структурного подразделения Банка России. За нижегородские банки, например, отвечает подразделение 02, а за московские — 25.

    7-9 цифры

    Условный номер банка в структуре ЦБ:

  • коммерческим банкам выдают значения от 050 до 999
  • 000, 001, 002 - получают подразделения Банка России.

Необязательные

ИНН

Важно отметить, что ИНН для организации состоит из 10 цифр, а для физического лица - из 12 цифр.

1-2 цифры

Номер региона РФ.

3-4 цифры

Номер налогового органа, который присвоил ИНН

5-9 (5-10 для ФЛ)

Порядковый номер записи о лице в территориальном разделе Единого государственного реестра налогоплательщиков налогового органа, который присвоил ИНН.

10 (11-12 для ФЛ)

Контрольное число

Код причины постановки на учет (КПП)

Филиалам, отделениям и другим структурным подразделениям присваивается КПП — код причины постановки на учет. Например, самая распространенная причина — «по месту нахождения». КПП всегда указывается в паре с ИНН, а сам номер состоит из 9 цифр.

1-2 цифры

Код субъекта РФ.

3-4 цифры

Код налоговой инспекции, поставившей на учет.

5-6 цифры

Отражают причину постановки на учет (по месту нахождения, по месту расположения структурного подразделения, по месту регистрации имущества и т. д.).

  • 01-50 - для российских организаций
  • 51-99 - для иностранных организаций

    7-9 цифры

    Показывают, какое количество раз юридическое лицо вставало на учет.
    Пример Рассмотрим пример одного из филиалов ВТБ. Его КПП — 770943003, где:

  • 77 — регистрация в г. Москве,
  • 09 — номер налоговой инспекции по месту регистрации, Центральный АО,
  • 43 — постановка на учет по месту нахождения филиала,
  • 003 — по данной причине юридическое лицо встало на учет в 3-й раз.

Реализация

БД

Таблица счетов (accounts)

acc_uuid acc_status acc_culc_number acc_corr_number acc_bic acc_cio acc_money_value acc_money_amount
char(16) numeric(3) char(20) char(20) char(9) char(9) numeric(3) numeric(34,4)

ИНН должен храниться в данных у пользователя.
Описание полей:

  • acc_uuid - uuid счёта
  • acc_status - статус счёта
  • acc_culc_number - расчётный номер
  • acc_corr_number - корреспондентский номер
  • acc_bic - БИК
  • acc_cio - КПП
  • acc_money_value - денежная величина
  • acc_money_amount - сколько денег на счету

acc_money_value

acc_money_value может иметь следующие значения:

  • 0 - неизвестная величина
  • 1 - доллар
  • 2 - рубль
  • 3 - евро

и устанавливается в соответствии со значением поля currency в данных к/с.

Статусы счетов:

  • UNKNOWN (0)
  • RESERVED (10)
  • CREATED (20)
  • OPEN (30)
  • CLOSE (40)
  • BLOCKED (50)
  • ERROR (255)

Таблица причин резервирования счёта (accounts_reserved)

acc_uuid reserve_reason
char(16) varchar(512)

reserve_reason - содержит причину резервации счёта в виде текстовой строки.
ЗАПИСИ В ЭТОЙ ТАБЛИЦЕ ПРИ ИЗМЕНЕНИИ СТАТУСА СЧЁТА НЕ УДАЛЯЮТСЯ!

Структуры данных, которые использует сервис при работе с kafka

Запрос

Имеет два формата:

  • формат с данными счёта:
{
  "saga_uuid": "...",
  "operation_name": "...",
  "account_data": {
    "culc_number": "...",
    "corr_number": "...",
    "bic": "...",
    "cio": "...",
    "reserve_reason": "..."
  }
}
  • формат с дополнительными данными и uuid счёта
{
  "saga_uuid": "...",
  "operation_name": "...",
  "additional_info": {
    "acc_uuid": "...",
    "additional_data": ... # число с плавающей запятой
  }
}

Ответ

Бывает следующих видов:

  • ошибка, где в поле info лежит описание ошибки и её код (подробнее см. ниже) в поле status
{
  "saga_uuid": "...",
  "event_uuid": "...",
  "operation_name": "...",
  "status": 0,
  "info": "..."
}
  • удача выполнения простой операции
{
  "saga_uuid": "...",
  "event_uuid": "...",
  "operation_name": "...",
  "info": "..."
}
  • удача получения данных о счёте, где в поле acc_data лежат данные счёта
{
  "saga_uuid": "...",
  "event_uuid": "...",
  "operation_name": "...",
  "acc_data": {
    "acc_details": {
      "culc_number": "...",
      "corr_number": "...",
      "bic": "...",
      "cio": "...",
      "reserve_reason": "..."
    },
    "acc_status": 0,          # целое число
    "acc_money_value": 0,     # целое число
    "acc_money_amount": 0     # число с плавающей запятой
  }
}

Ошибки, которые может вернуть сервис в результате запроса к нему (представляют из себя uint32)

  • Внутренние критические ошибки
    • 1030 - ErrorInvalidInputData
    • 1022 - ErrorCreateAccountRepository ()
    • 1021 - ErrorUpdateAccountStatusRepository ()
    • 1020 - ErrorUpdateAccountAmountRepository ()
    • 1010 - ErrorOverflowAmount ()
    • 1000 - ReserveReasonIsExisting (Reserve reason for this account uuid is existing yet)
  • Ошибки данных
    • 251 - ErrorWrongAccCorrOwner
    • 250 - ErrorWrongAccCorrOwnerLen
    • 240 - ErrorWrongAccCorrBankNumber
    • 230 - ErrorWrongAccCorrFirstGroupNumber
    • 221 - ErrorWrongAccBankNumber
    • 220 - ErrorWrongAccBankNumberLen
    • 211 - ErrorWrongAccMainOffice
    • 210 - ErrorWrongAccMainOfficeLen
    • 201 - ErrorWrongAccCountryRegion
    • 200 - ErrorWrongAccCountryRegionLen
    • 191 - ErrorWrongAccCountry
    • 190 - ErrorWrongAccCountryLen
    • 181 - ErrorWrongPaymentSystem
    • 180 - ErrorWrongPaymentSystemLen
    • 171 - ErrorWrongCurrencyValue
    • 170 - ErrorWrongCurrencyLen
    • 161 - ErrorWrongActivity
    • 160 - ErrorWrongActivityLen
    • 151 - ErrorWrongOwner
    • 150 - ErrorWrongOwnerLen
    • 141 - ErrorWrongAccKPP
    • 140 - ErrorWrongAccKPPLen
    • 131 - ErrorWrongAccCorrNumber
    • 130 - ErrorWrongAccCorrNumberLen
    • 120 - ErrorWrongBICLen
    • 110 - ErrorWrongCulcNumberLen
    • 100 - ErrorUnknownOperationName (Unknown operation name: bad_operation_name)
  • Ошибки выполнения операции (отказ в выполнении операции)
    • 021 - AccountNotFound (Account with such uuid is not existing)
    • 020 - AccountIsExisting (Account with such uuid is existing yet)
    • 014 - ErrorBlockAccountStatus (For this operation account has wrong status: blocked)
    • 013 - ErrorCloseAccountStatus (Same as ^)
    • 012 - ErrorOpenAccountStatus (Same as ^)
    • 011 - ErrorCreateAccountStatus (Same as ^)
    • 010 - ErrorReserveAccountStatus (Same as ^)
    • 001 - NotEnoughMoney (Not enough money)

Выполняемые операции сервисом

  • резервирование счёта
  • создание счёта
  • открытие счёта
  • закрытие счёта
  • блокировка счёта
  • получение данных счёта
  • пополнение счёта
  • снятия со счёта

Резервирование счёта

  • Название запроса:
    • reserv_acc
  • Описание
    • Изменяет статус записи счета на RESERVED, попутно проверяя переданные данные. В случае удачной проверки добавляет запись в таблицу причин резервации.
  • Интерфейс входных данных:
    • формат с данными счёта.
  • Ответ на данный запрос:
    • удача выполнения простой операции, где в поле info будет uuid зарезервированного счёта
    • ошибка.
  • Возможные статусы в ошибочном результате:
    • 1030
    • 1022
    • 100 - 251
    • 020

Создание счёта

  • Название запроса:
    • create_acc
  • Описание
    • Изменяет статус записи счета на CREATED.
  • Интерфейс входных данных:
    • формат с дополнительными данными и uuid счёта.
  • Ответ на данный запрос:
    • удача выполнения простой операции
    • ошибка.
  • Возможные статусы в ошибочном результате:
    • 1021
    • 100
    • 021
    • 011 - 014

Открытие счёта

  • Название запроса:
    • open_acc
  • Описание
    • Изменяет статус записи счета на OPEN.
  • Интерфейс входных данных:
    • формат с дополнительными данными и uuid счёта.
  • Ответ на данный запрос:
    • удача выполнения простой операции
    • ошибка.
  • Возможные статусы в ошибочном результате:
    • 1030
    • 1021
    • 100
    • 021
    • 010
    • 012 - 014

Закрытие счёта

  • Название запроса:
    • close_acc
  • Описание
    • Изменяет статус записи счета на CLOSE.
  • Интерфейс входных данных:
    • формат с дополнительными данными и uuid счёта.
  • Ответ на данный запрос:
    • удача выполнения простой операции
    • ошибка.
  • Возможные статусы в ошибочном результате:
    • 1030
    • 1021
    • 100
    • 021
    • 010
    • 011
    • 013
    • 014

Заблокировать счёт

  • Название запроса:
    • block_acc
  • Описание
    • Изменяет статус записи счета на BLOCKED.
  • Интерфейс входных данных:
    • формат с дополнительными данными и uuid счёта.
  • Ответ на данный запрос:
    • удача выполнения простой операции
    • ошибка.
  • Возможные статусы в ошибочном результате:
    • 1030
    • 1021
    • 100
    • 021
    • 010
    • 011
    • 013
    • 014

Получение данных счёта

  • Название запроса:
    • get_acc_data
  • Описание
    • Получение данных счёта, в том числе и системных.
  • Интерфейс входных данных:
    • формат с дополнительными данными и uuid счёта.
  • Ответ на данный запрос:
    • удача получения данных о счёте
    • ошибка.
  • Возможные статусы в ошибочном результате:
    • 1030
    • 100
    • 021

Пополнение счёта

  • Название запроса:
    • adding_acc
  • Описание
    • Увеличивает денежную сумму на счету.
  • Интерфейс входных данных:
    • формат с дополнительными данными и uuid счёта.
  • Ответ на данный запрос:
    • удача выполнения простой операции
    • ошибка.
  • Возможные статусы в ошибочном результате:
    • 1030
    • 1020
    • 100
    • 021
    • 010
    • 011
    • 013
    • 014

Снятие со счёта

  • Название запроса:
    • width_acc
  • Описание
    • Уменьшает денежную сумму на счету.
  • Интерфейс входных данных:
    • формат с дополнительными данными и uuid счёта.
  • Ответ на данный запрос:
    • удача выполнения простой операции
    • ошибка.
  • Возможные статусы в ошибочном результате:
    • 1030
    • 1020
    • 100
    • 021
    • 010
    • 011
    • 013
    • 014
    • 001
Ссылка на вики репозиторий