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// суспенс для регистрационного взноса между приёмом денег кассой
28// (Dr 51 / Cr 76) и решением совета. На одобрении переносится на 80/86
29// (Dr 76 / Cr 80, Dr 76 / Cr 86), на отказе возвращается (Dr 76 / Cr 51).
30
70 // Активы
71 static constexpr uint64_t INTANGIBLE_ASSETS = 4 * 1000;
72 static constexpr uint64_t NON_CURRENT_INVESTMENTS = 8 * 1000;
73 static constexpr uint64_t MATERIALS = 10 * 1000;
74 static constexpr uint64_t BANK_ACCOUNT = 51 * 1000;
75 static constexpr uint64_t FINANCIAL_INVESTMENTS = 58 * 1000;
76
77 // Активно-пассивные
78 static constexpr uint64_t PARTICIPANT_SETTLEMENTS = 76 * 1000;
79
80 // Пассивы
81 static constexpr uint64_t TAX_SETTLEMENTS = 68 * 1000;
82 static constexpr uint64_t SHARE_FUND = 80 * 1000;
83 static constexpr uint64_t TARGET_RECEIPTS = 86 * 1000;
84
85 // Активно-пассивный
86 static constexpr uint64_t OTHER_INCOME_EXPENSES = 91 * 1000;
87};
88
97 uint64_t id;
98 std::string_view name;
100};
101
108inline constexpr std::array<Ledger2AccountMeta, 10> LEDGER2_ACCOUNT_MAP = {{
109 { ledger2_accounts::INTANGIBLE_ASSETS, "Нематериальные активы", AccountType::ACTIVE },
110 { ledger2_accounts::NON_CURRENT_INVESTMENTS, "Вложения во внеоборотные активы", AccountType::ACTIVE },
111 { ledger2_accounts::MATERIALS, "Материалы", AccountType::ACTIVE },
112 { ledger2_accounts::BANK_ACCOUNT, "Расчётный счёт", AccountType::ACTIVE },
113 { ledger2_accounts::FINANCIAL_INVESTMENTS, "Финансовые вложения", AccountType::ACTIVE },
114 { ledger2_accounts::PARTICIPANT_SETTLEMENTS, "Расчёты с пайщиками", AccountType::ACTIVE_PASSIVE },
115 { ledger2_accounts::TAX_SETTLEMENTS, "Расчёты по налогам и сборам", AccountType::PASSIVE },
116 { ledger2_accounts::SHARE_FUND, "Паевой фонд (складочный капитал)", AccountType::PASSIVE },
117 { ledger2_accounts::TARGET_RECEIPTS, "Целевое финансирование", AccountType::PASSIVE },
118 { ledger2_accounts::OTHER_INCOME_EXPENSES, "Прочие доходы и расходы", AccountType::ACTIVE_PASSIVE },
119}};
120
121static constexpr size_t LEDGER2_ACCOUNT_MAP_SIZE = LEDGER2_ACCOUNT_MAP.size();
122
123// Compile-time проверка уникальности id в справочнике счетов.
125 constexpr bool account_ids_unique() {
126 for (size_t i = 0; i < LEDGER2_ACCOUNT_MAP_SIZE; ++i) {
127 for (size_t j = i + 1; j < LEDGER2_ACCOUNT_MAP_SIZE; ++j) {
128 if (LEDGER2_ACCOUNT_MAP[i].id == LEDGER2_ACCOUNT_MAP[j].id) return false;
129 }
130 }
131 return true;
132 }
133}
134
136 "LEDGER2_ACCOUNT_MAP: duplicate account id detected");
137
138inline constexpr const Ledger2AccountMeta* ledger2_find_account_meta(uint64_t account_id) {
139 for (size_t i = 0; i < LEDGER2_ACCOUNT_MAP_SIZE; ++i) {
140 if (LEDGER2_ACCOUNT_MAP[i].id == account_id) return &LEDGER2_ACCOUNT_MAP[i];
141 }
142 return nullptr;
143}
144
145inline std::string_view ledger2_get_account_name_by_id(uint64_t account_id) {
146 const auto* meta = ledger2_find_account_meta(account_id);
147 return meta ? meta->name : std::string_view{};
148}
149
150inline constexpr AccountType ledger2_get_account_type_by_id(uint64_t account_id) {
151 const auto* meta = ledger2_find_account_meta(account_id);
152 return meta ? meta->type : AccountType::ACTIVE_PASSIVE;
153}
std::string_view ledger2_get_account_name_by_id(uint64_t account_id)
Definition: accounts.hpp:145
static constexpr size_t LEDGER2_ACCOUNT_MAP_SIZE
Definition: accounts.hpp:121
constexpr std::array< Ledger2AccountMeta, 10 > LEDGER2_ACCOUNT_MAP
Хардкод-справочник плана счетов (MVP, 10 записей).
Definition: accounts.hpp:108
constexpr const Ledger2AccountMeta * ledger2_find_account_meta(uint64_t account_id)
Definition: accounts.hpp:138
constexpr AccountType ledger2_get_account_type_by_id(uint64_t account_id)
Definition: accounts.hpp:150
AccountType
Тип бухгалтерского счёта.
Definition: accounts.hpp:20
Definition: accounts.hpp:124
constexpr bool account_ids_unique()
Definition: accounts.hpp:125
Справочник счёта: id → (имя, тип).
Definition: accounts.hpp:96
AccountType type
Definition: accounts.hpp:99
std::string_view name
Definition: accounts.hpp:98
uint64_t id
Definition: accounts.hpp:97
План счетов ledger2 (MVP) со смещением *1000.
Definition: accounts.hpp:69
static constexpr uint64_t TARGET_RECEIPTS
86 — Целевое финансирование (П)
Definition: accounts.hpp:83
static constexpr uint64_t FINANCIAL_INVESTMENTS
58 — Финансовые вложения (А)
Definition: accounts.hpp:75
static constexpr uint64_t INTANGIBLE_ASSETS
04 — Нематериальные активы (А)
Definition: accounts.hpp:71
static constexpr uint64_t PARTICIPANT_SETTLEMENTS
76 — Расчёты с пайщиками (А-П): суспенс регистрационного взноса до решения совета
Definition: accounts.hpp:78
static constexpr uint64_t TAX_SETTLEMENTS
68 — Расчёты по налогам и сборам (П): удержанный НДФЛ до перечисления в бюджет
Definition: accounts.hpp:81
static constexpr uint64_t OTHER_INCOME_EXPENSES
91 — Прочие доходы и расходы (А/П; транзит на выдаче и при утилизации скоропорта)
Definition: accounts.hpp:86
static constexpr uint64_t NON_CURRENT_INVESTMENTS
08 — Вложения во внеоборотные активы (А)
Definition: accounts.hpp:72
static constexpr uint64_t BANK_ACCOUNT
51 — Расчётный счёт (А)
Definition: accounts.hpp:74
static constexpr uint64_t MATERIALS
10 — Материалы (А; склад имущества на КУ, per-КУ субсчета)
Definition: accounts.hpp:73
static constexpr uint64_t SHARE_FUND
80 — Паевой фонд (П)
Definition: accounts.hpp:82