COOPENOMICS  v1
Кооперативная Экономика
accounts.hpp
См. документацию.
1#pragma once
2
3#include <array>
4#include <cstdint>
5#include <string_view>
6
20enum class AccountType : uint8_t {
21 ACTIVE = 0,
22 PASSIVE = 1,
24};
25
26// Пересмотр 2026-06-06: добавлен счёт 76 (А-П) — суспенс для регистрационного
27// взноса между приёмом денег кассой (Dr 51 / Cr 76) и решением совета. На
28// одобрении переносится на 80/86 (Dr 76 / Cr 80, Dr 76 / Cr 86), на отказе
29// возвращается (Dr 76 / Cr 51).
30//
31// Пересмотр 2026-09-08 (решение владельца): счёт 60 «Расчёты с поставщиками и
32// подрядчиками» из плана снят — расчёты с поставщиками «Стола заказов» идут по
33// 76 вместе с расчётами с пайщиками, поэтому 76 назван по плану счетов:
34// «Расчёты с разными дебиторами и кредиторами». Приёмка — Dr 10 / Cr 76,
35// выплата поставщику — Dr 76 / Cr 51.
36
78 // Активы
79 static constexpr uint64_t INTANGIBLE_ASSETS = 4 * 1000;
80 static constexpr uint64_t NON_CURRENT_INVESTMENTS = 8 * 1000;
81 static constexpr uint64_t MATERIALS = 10 * 1000;
82 static constexpr uint64_t BANK_ACCOUNT = 51 * 1000;
83 static constexpr uint64_t FINANCIAL_INVESTMENTS = 58 * 1000;
84
85 // Активно-пассивные
86 static constexpr uint64_t OTHER_SETTLEMENTS = 76 * 1000;
87
88 // Пассивы
89 static constexpr uint64_t TAX_SETTLEMENTS = 68 * 1000;
90 static constexpr uint64_t SHARE_FUND = 80 * 1000;
91 static constexpr uint64_t TARGET_RECEIPTS = 86 * 1000;
92
93 // Активно-пассивный
94 static constexpr uint64_t OTHER_INCOME_EXPENSES = 91 * 1000;
95};
96
105 uint64_t id;
106 std::string_view name;
108};
109
116inline constexpr std::array<Ledger2AccountMeta, 10> LEDGER2_ACCOUNT_MAP = {{
117 { ledger2_accounts::INTANGIBLE_ASSETS, "Нематериальные активы", AccountType::ACTIVE },
118 { ledger2_accounts::NON_CURRENT_INVESTMENTS, "Вложения во внеоборотные активы", AccountType::ACTIVE },
119 { ledger2_accounts::MATERIALS, "Материалы", AccountType::ACTIVE },
120 { ledger2_accounts::BANK_ACCOUNT, "Расчётный счёт", AccountType::ACTIVE },
121 { ledger2_accounts::FINANCIAL_INVESTMENTS, "Финансовые вложения", AccountType::ACTIVE },
122 { ledger2_accounts::OTHER_SETTLEMENTS, "Расчёты с разными дебиторами и кредиторами", AccountType::ACTIVE_PASSIVE },
123 { ledger2_accounts::TAX_SETTLEMENTS, "Расчёты по налогам и сборам", AccountType::PASSIVE },
124 { ledger2_accounts::SHARE_FUND, "Паевой фонд (складочный капитал)", AccountType::PASSIVE },
125 { ledger2_accounts::TARGET_RECEIPTS, "Целевое финансирование", AccountType::PASSIVE },
126 { ledger2_accounts::OTHER_INCOME_EXPENSES, "Прочие доходы и расходы", AccountType::ACTIVE_PASSIVE },
127}};
128
129static constexpr size_t LEDGER2_ACCOUNT_MAP_SIZE = LEDGER2_ACCOUNT_MAP.size();
130
131// Compile-time проверка уникальности id в справочнике счетов.
133 constexpr bool account_ids_unique() {
134 for (size_t i = 0; i < LEDGER2_ACCOUNT_MAP_SIZE; ++i) {
135 for (size_t j = i + 1; j < LEDGER2_ACCOUNT_MAP_SIZE; ++j) {
136 if (LEDGER2_ACCOUNT_MAP[i].id == LEDGER2_ACCOUNT_MAP[j].id) return false;
137 }
138 }
139 return true;
140 }
141}
142
144 "LEDGER2_ACCOUNT_MAP: duplicate account id detected");
145
146inline constexpr const Ledger2AccountMeta* ledger2_find_account_meta(uint64_t account_id) {
147 for (size_t i = 0; i < LEDGER2_ACCOUNT_MAP_SIZE; ++i) {
148 if (LEDGER2_ACCOUNT_MAP[i].id == account_id) return &LEDGER2_ACCOUNT_MAP[i];
149 }
150 return nullptr;
151}
152
153inline std::string_view ledger2_get_account_name_by_id(uint64_t account_id) {
154 const auto* meta = ledger2_find_account_meta(account_id);
155 return meta ? meta->name : std::string_view{};
156}
157
158inline constexpr AccountType ledger2_get_account_type_by_id(uint64_t account_id) {
159 const auto* meta = ledger2_find_account_meta(account_id);
160 return meta ? meta->type : AccountType::ACTIVE_PASSIVE;
161}
std::string_view ledger2_get_account_name_by_id(uint64_t account_id)
Definition: accounts.hpp:153
static constexpr size_t LEDGER2_ACCOUNT_MAP_SIZE
Definition: accounts.hpp:129
constexpr std::array< Ledger2AccountMeta, 10 > LEDGER2_ACCOUNT_MAP
Хардкод-справочник плана счетов (MVP, 10 записей).
Definition: accounts.hpp:116
constexpr const Ledger2AccountMeta * ledger2_find_account_meta(uint64_t account_id)
Definition: accounts.hpp:146
constexpr AccountType ledger2_get_account_type_by_id(uint64_t account_id)
Definition: accounts.hpp:158
AccountType
Тип бухгалтерского счёта.
Definition: accounts.hpp:20
Definition: accounts.hpp:132
constexpr bool account_ids_unique()
Definition: accounts.hpp:133
Справочник счёта: id → (имя, тип).
Definition: accounts.hpp:104
AccountType type
Definition: accounts.hpp:107
std::string_view name
Definition: accounts.hpp:106
uint64_t id
Definition: accounts.hpp:105
План счетов ledger2 (MVP) со смещением *1000.
Definition: accounts.hpp:77
static constexpr uint64_t TARGET_RECEIPTS
86 — Целевое финансирование (П)
Definition: accounts.hpp:91
static constexpr uint64_t FINANCIAL_INVESTMENTS
58 — Финансовые вложения (А)
Definition: accounts.hpp:83
static constexpr uint64_t INTANGIBLE_ASSETS
04 — Нематериальные активы (А)
Definition: accounts.hpp:79
static constexpr uint64_t TAX_SETTLEMENTS
68 — Расчёты по налогам и сборам (П): удержанный НДФЛ до перечисления в бюджет
Definition: accounts.hpp:89
static constexpr uint64_t OTHER_INCOME_EXPENSES
91 — Прочие доходы и расходы (А/П; только уценка остатка при выдаче)
Definition: accounts.hpp:94
static constexpr uint64_t NON_CURRENT_INVESTMENTS
08 — Вложения во внеоборотные активы (А)
Definition: accounts.hpp:80
static constexpr uint64_t BANK_ACCOUNT
51 — Расчётный счёт (А)
Definition: accounts.hpp:82
static constexpr uint64_t MATERIALS
10 — Материалы (А; склад имущества на КУ, per-КУ субсчета)
Definition: accounts.hpp:81
static constexpr uint64_t OTHER_SETTLEMENTS
76 — Расчёты с разными дебиторами и кредиторами (А-П): суспенс регистрационного взноса до решения сов...
Definition: accounts.hpp:86
static constexpr uint64_t SHARE_FUND
80 — Паевой фонд (П)
Definition: accounts.hpp:90