Skip to content

Модуль bank

Путь: app/bank/
Django app: app.bank

Назначение

Управляет банковскими счетами компании, загрузкой выписок и финансовыми операциями. Автоматически загружает курсы валют с сайта ЦБ РФ.

Ключевые модели

BankAccount

python
class BankAccount(Model):
    organization = FK(Organization)
    bank_name = CharField()
    bik = CharField()
    account_number = CharField()
    currency = FK(Currency)
    is_main = BooleanField()
    is_active = BooleanField()

BankOperation

python
class BankOperation(Model):
    account = FK(BankAccount)
    counterparty = FK(CounterParty)
    operation_type = CharField(choices=[
        ('income', 'Поступление'),
        ('outcome', 'Списание'),
        ('transfer', 'Перевод'),
    ])
    amount = DecimalField()
    currency = FK(Currency)
    date = DateField()
    document_number = CharField()    # номер платёжного поручения
    purpose = TextField()            # назначение платежа
    document = FK(Documents, null=True)  # связанный документ

Currency

python
class Currency(Model):
    code = CharField()      # RUB, USD, EUR
    name = CharField()
    symbol = CharField()

class CurrencyRate(Model):
    currency = FK(Currency)
    date = DateField()
    rate = DecimalField()   # курс к рублю
    source = CharField()    # "cbr"

Курсы валют ЦБ РФ

Курсы обновляются ежедневно автоматически через endpoint /api/v2/currency/:

python
# Источник данных
CBR_URL = "https://www.cbr-xml-daily.ru/daily_json.js"

# Celery-задача (запускается каждый день в 10:00 МСК)
@app.task
def update_currency_rates():
    rates = requests.get(CBR_URL).json()
    for code, data in rates['Valute'].items():
        CurrencyRate.objects.update_or_create(
            currency__code=code,
            date=today,
            defaults={'rate': data['Value']}
        )

API

EndpointОписание
GET /api/v2/bank/accounts/Банковские счета
GET /api/v2/bank/operations/Банковские операции
POST /api/v2/bank/import/Загрузить банковскую выписку
GET /api/v2/currency/Курсы валют
GET /api/v2/currency/{date}/Курс на конкретную дату

Сервисный слой

app/bank/service/:

  • Парсинг банковских выписок (форматы 1С, CSV, MT940)
  • Автоматическое сопоставление операций с документами
  • Расчёт остатков по счетам

Связи

  • app.document — связанные документы к операциям
  • app.counterparty — плательщики и получатели
  • app.finance — ДДС и финансовые отчёты