Skip to content

Commit 42a7463

Browse files
authored
Merge pull request #6 from spacious-team/develop
Релиз 1.1.0
2 parents 001d032 + f390d01 commit 42a7463

File tree

3 files changed

+616
-78
lines changed

3 files changed

+616
-78
lines changed

README.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,17 @@
44

55
Перечень проектов, поддерживающих открытый формат:
66
1. [JAL](https://github.com/titov-vv/jal)
7-
1. [Izi-invest](https://izi-invest.ru/)
8-
1. [Investbook](https://github.com/spacious-team/investbook)
7+
2. [Izi-invest](https://izi-invest.ru/)
8+
3. [Investbook](https://github.com/spacious-team/investbook)
9+
10+
Если вы хотите поддерживать импорт и экспорт данных в открытом формате:
11+
1. Реализуйте экспорт и импорт.
12+
2. Проверьте экспортируемые данные на соответствие требованиям схемы [json-schema.json](json-schema.json),
13+
при необходимости создайте Pull Request на доработку схемы.
14+
3. Создайте Pull Request для добавления в список из предыдущего абзаца ссылки на свое приложение.
15+
16+
# Валидация данных
17+
Для валидации вашего json объекта с данными используйте, например, онлайн ресурс https://json-schema.hyperjump.io
18+
или https://jschon.dev и схему из файла [json-schema.json](json-schema.json).
19+
20+
Пример данных с комментариями представлен в файле [data-example.json](data-example.json).

statement.jsonc renamed to data-example.json

Lines changed: 41 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,40 @@
1+
// Опциональные поля, не содержащие значения, равные 'null' или пустой строке, должны отсутствовать.
12
{
2-
"version": "1.0.0", // версия формата, строка, в формате "x.y.z"
3+
"version": "1.1.0", // версия формата, строка, в формате "x.y.z", в потоке байтов или в файле это поле должно встречаться первым в объекте
34
"end": 1607817600, // дата-время конца периода (включительно), который покрывается файлом (int, unix timestamp)
45
"start": 1577836800, // опционально дата-время начала периода (включительно), который покрывается файлом (int, unix timestamp)
56
"generated": 1623082700, // дата-время создания (int, unix timestamp)
67
"generated-by": "investbook", // предлагаю использовать как заголовок и заодно отметку об источнике данных
78

9+
"accounts": [ // Счета, встречающиеся в файле
10+
{
11+
"id": 1,
12+
"account-number": "U7654321", // опционально, номер счёта в финансовой организации
13+
"type": "investment", // тип счёта (законченный список): "investment", "bank", "savings" (домашние наличные накопления)
14+
"valuation": 0.0, // оценка стоимости активов на конец периода
15+
"valuation-currency": "RUB" // символьный код валюты оценки ISO 4217
16+
}
17+
],
18+
819
"assets": [ // Активы, встречающиеся в файле
920
{
21+
// одно или более из полей: symbol, name, isin - должно присутствовать обязательно
1022
"id": 1, // уникальный для данной выгрузки идентификатор id (int)
11-
"type": "stock", // тип актива, str: 'money', 'stock', etf', 'adr', 'bond', 'futures', 'option', 'warrant', 'security' (if unknown stock, etf of bond), 'derivative' (if unknown futures or 'option)
12-
"symbol": "AMZN", // тикер, краткое имя, для money - символьный код по ISO 4217
13-
"name": "AMAZON.COM INC", // полное наименование
14-
"isin": "US0231351067",
23+
"type": "stock", // тип актива (законченный список): 'money', 'stock', etf', 'adr' (depositary receipt), 'gdr', 'bond', 'futures', 'option', 'fx-contract' (foreign exchange market contracts), 'warrant', 'security' (if unknown: stock, etf or bond), 'derivative' (if unknown futures or option), 'asset' (for common goods, use if none of prev items is suitable)
24+
"symbol": "AMZN", // тикер, краткое имя, для money - символьный код по ISO 4217 (для срочных и валютных контрактов, а также money - обязательно, для остальных - опционально)
25+
"name": "AMAZON.COM INC", // опционально, полное наименование
26+
"isin": "US0231351067", // опционально
1527
"exchange": "NASDAQ" // опционально, где торгуется, 'NASDAQ', 'NYSE', 'MOEX', 'TSX', 'LSE' etc
1628
},
1729
{
1830
"id": 2,
1931
"type": "money",
2032
"symbol": "RUB",
21-
"name": "Российский рубль",
22-
}
23-
],
24-
25-
"accounts": [ // Счета
26-
{
27-
"id": 1,
28-
"account-number": "U7654321", // опционально, номер счёта в финансовой организации
29-
"type": "investment", // тип счёта: "investment", "bank", "savings" (домашние наличные накопления)
30-
"valuation": 0.0, // оценка стоимости активов на конец периода
31-
"valuation-currency": "RUB" // символьный код валюты оценки ISO 4217
33+
"name": "Российский рубль"
3234
}
3335
],
3436

35-
"cash-balances": [ // Денежные остатки на конец периода
37+
"cash-balances": [ // Денежные остатки на конец периода (на момент, указанный в поле 'end')
3638
{
3739
"account": 1,
3840
"cash": [
@@ -52,12 +54,12 @@
5254
"settlement": 1548447900, // дата-время поставки (int, unix timestamp), может отсутствовать, если есть timestamp
5355
"account": 2, // на каком счете из раздела 'accounts' учитывать
5456
"asset": 3, // с каким активом из раздела 'assets' заключена
55-
"count": 0.567, // количество, если '+' то это покупка, если '-' то это продажа
56-
"price": 69.2215, // цена одной ЦБ в валюте сделки, для облигации - без НКД, для деривативов в валюте - опционально
57-
"quote": 123.17, // котировка для облигации в процентах, для деривативов в пунктах
58-
"accrued-interest": 11.12, // НКД для облигаций в валюте
59-
"currency": "USD", // символьный код валюты сделки ISO 4217
60-
"fee": 0.0, // комиссия. Если отрицательное значение, значит возврат комиссии
57+
"count": 5, // количество, если '+', то это покупка, если '-' то это продажа, может быть целым числом или вещественным в случае дробных акций
58+
"price": 69.2215, // цена бумаги/контракта (за единицу) в валюте сделки, для облигации - без НКД (для деривативов - опциональное)
59+
"accrued-interest": 11.12, // НКД одной облигации на момент сделки в валюте (обязательное поле для облигаций)
60+
"currency": "USD", // символьный код валюты сделки ISO 4217 (может отсутствовать, если значение price равно null или поле price отсутствует)
61+
"quote": 123.17, // котировка. Для облигации в процентах, для деривативов в пунктах (для облигаций - опциональное, для деривативов - обязательное)
62+
"fee": 0.0, // комиссия сделки. Если отрицательное значение, значит возврат комиссии
6163
"fee-currency": "RUB", // символьный код валюты комиссии ISO 4217
6264
"description": "Исполнение опциона" // опционально
6365
}
@@ -69,83 +71,46 @@
6971
"payment-id": "С123", // опционально, строка, идентификатор выплаты в системе учета брокера
7072
"account": 1, // на какой счёт выплачено (из таблицы 'accounts')
7173
"asset": 1, // бумага, по которой произведена выплата (из таблицы 'assets'), если неизвестно, выплата должна быть сохранена в 'cash-flows'
72-
"type": "dividend", // тип выплаты: 'dividend', 'coupon', 'bond-amortization' (амортизация, но не погашение облигации), 'variation-margin', 'fee' (комиссия брокера, например депозитарная, привязанная к бумаге), 'interest' (процентный доход, например по вкладу), other
73-
"count": 10, // количество бумаг, по которым произведена выплата
74+
"type": "dividend", // тип выплаты (законченный список): 'dividend', 'coupon', 'bond-amortization' (амортизация, но не погашение облигации, погашения должны учитываться в 'trades'), 'variation-margin', 'fee' (комиссия брокера, например депозитарная, привязанная к бумаге), 'interest' (процентный доход, например по вкладу), other
75+
"count": 10, // количество бумаг (шт), по которым произведена выплата, положительное или отрицательное число (например, для деривативов), может быть целым числом или вещественным в случае дробных акций
7476
"timestamp": 1578082800, // дата-время выплаты (unix timestamp)
7577
"amount": 1600.20, // сумма выплаты (до выплаты налога), отрицательное значения для удержания (например вариационной маржи)
7678
"currency": "USD", // символьный код валюты ISO 4217
7779
"tax": 208.00, // (опционально) размер уплаченного налога
78-
"tax-currency": "RUB", // символьный код валюты ISO 4217
79-
"description": "Дивиденды за 2021 год" // произвольный комментарий
80+
"tax-currency": "RUB", // (опционально, если отсутствует поле tax) символьный код валюты ISO 4217
81+
"description": "Дивиденды за 2021 год" // опционально, произвольный комментарий
8082
}
8183
],
8284

8385
"cash-flows": [ // Списания-зачисления денег по неторговым операциям
8486
{
8587
"id": 1,
8688
"flow-id": "B178", // опциональный идентификатор в системе учета брокера/банка
87-
"account": 1,
89+
"account": 1, // на какой счёт выплачено (из объекта 'accounts')
8890
"timestamp": 1578073286, // дата-время операции
8991
"amount": -43.21, // положительные числа для зачисления, отрицательные - для списаний
9092
"currency": "RUB", // символьный код валюты ISO 4217
91-
"type": "tax", // withdrawal, deposit, fee, tax, bond-amortization, bond-redemption, coupon, dividend, variation-margin, interest, other
93+
"type": "tax", // тип операции (законченный список): cash, fee, tax, bond-amortization, bond-redemption, coupon, dividend, variation-margin, interest, other
9294
"description": "Описание, например, кто списал" // опционально
9395
}
9496
],
9597

96-
"transfers": [ // Ввод, вывод ценных бумаг, сплиты акций
98+
"transfers": [ // Ввод, вывод ценных бумаг, сплиты акций, обмен валюты не биржевым способом (например банковской операцией)
99+
// Если выполняется сплит акций, то нужно сохранять 2 (или более) объекта с одинаковым transfer-id на каждый сплит (событие списания и зачисления)
97100
{
98101
"id": 1,
99-
"transfer-id": "A123", // опционально, строка, идентификатор операции в системе учета брокера/банка
100-
"withdrawal-account": 1, // счет списания актива (опционально, если зачисляется из-вне)
101-
"withdrawal-asset": 10, // идентификатор списанного актива (опционально, если зачисляется из-вне)
102-
"withdrawal": 1, // списано (опционально, если зачисляется из-вне), целое (шт)
103-
"deposit-account": 2, // счет зачисления актива (опционально, если выводится из системы)
104-
"deposit-asset": 2, // идентификатор зачисленного актива (опционально, если выводится из системы)
105-
"deposit": 2, // зачислено (опционально, если выводится из системы), целое (шт)
102+
"transfer-id": "A123", // строка, идентификатор операции (обязательное для сплитов, для остальных событий - опциональное)
103+
"account": 1, // счёт из объекта 'accounts'
106104
"timestamp": 1581322108, // дата-время операции
107-
"fee-account": 1, // счет списания комиссии (опционально)
108-
"fee": 35.12, // комиссия (опционально)
109-
"fee-currency": "RUB", // символьный код валюты ISO 4217 (опционально)
110-
"description": "Произвольное описание"
111-
},
112-
{ // зачисление бумаг со счета, который не учитывается в системе учета
113-
"id": 2,
114-
"deposit-account": 2,
115-
"deposit-asset": 2,
116-
"deposit": 100,
117-
"timestamp": 1581322108
118-
},
119-
{ // вывод бумаг на счет депо, который не учитывается в системе учета
120-
"id": 3,
121-
"withdrawal-account": 2,
122-
"withdrawal-asset": 2,
123-
"withdrawal": 50,
124-
"timestamp": 1581322108
105+
"asset": 10, // идентификатор актива
106+
"count": 1, // количество бумаг, '+' для зачисления на счет, '-' для списания со счета, может быть целым числом или вещественным в случае дробных акций (шт)
107+
"fee-account": 1, // (опционально) счет списания комиссии
108+
"fee": 35.12, // (опционально) комиссия
109+
"fee-currency": "RUB", // (опционально) символьный код валюты ISO 4217
110+
"description": "Произвольное описание" // опционально
125111
}
126112
],
127113

128-
"money-exchange": [ // Обмен валюты не биржевым способом, например банковской операцией
129-
{
130-
"id": 1,
131-
"exchange-id": "A123", // опционально, строка, идентификатор операции в системе учета брокера/банка
132-
"withdrawal-account": 1, // счет списания валюты
133-
"withdrawal-currency": "RUB", // символьный код валюты списания ISO 4217
134-
"withdrawal": 75.36, // списано
135-
"deposit-account": 2, // счет зачисления валюты
136-
"deposit-currency": "USD", // символьный код зачисленной валюты ISO 4217
137-
"deposit": 1.12, // зачислено
138-
"timestamp": 1581322108, // дата-время операции
139-
"fee-account": 1, // счет списания комиссии (опционально)
140-
"fee": 35.0, // комиссия (опционально)
141-
"fee-currency": "RUB", // символьный код валюты комиссии ISO 4217 (опционально)
142-
"description": "Произвольное описание"
143-
}
144-
],
145-
146-
"corporate-actions": [ // Корпоративные действия (незавершенная спецификация, не действующая)
147-
],
148-
149114
"vnd-ABC": { // vnd-investbook, vnd-jal, vnd-izi-invest и т.п.
150115
// Поля специфичные для ПО ABC, где ABC - произвольное наименование приложения, выполняющего экспорт полей.
151116
// Поля могут парситься приложениями, отличными от ABC, на свой страх и риск.

0 commit comments

Comments
 (0)