feat: assign deterministic operation UUIDs

This commit is contained in:
2026-08-19 17:46:50 +03:00
parent 3d08c9e5c6
commit 5c059cbc62
8 changed files with 34 additions and 7 deletions

View File

@@ -8,6 +8,7 @@ import hashlib
import json
import re
import sys
import uuid
from collections import defaultdict
from datetime import datetime, timedelta
from decimal import Decimal, ROUND_HALF_UP
@@ -18,6 +19,7 @@ from xml.etree import ElementTree as ET
NS = {'m': 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'}
EPOCH = datetime(1899, 12, 30)
COLS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
OPERATION_NAMESPACE = uuid.UUID('7a4a1c7d-7d3c-4f53-9f45-5e7dbb2c6f31')
def excel_date(value):
@@ -106,12 +108,14 @@ def cash_transactions(rows, start, end):
description = text(f'{operation}. {comment}'.strip('. '))
digest = hashlib.sha256(f'{operation_at}|{amount}|{description}'.encode()).hexdigest()[:16]
occurrences[digest] += 1
source_id = f'vtb-broker-cash:{digest}:{occurrences[digest]}'
transactions.append({
'operationAt': operation_at,
'amountSigned': amount,
'commission': 0,
'description': description,
'sourceId': f'vtb-broker-cash:{digest}:{occurrences[digest]}',
'sourceId': source_id,
'operationId': str(uuid.uuid5(OPERATION_NAMESPACE, source_id)),
'_sourceRow': number,
})
if not transactions:
@@ -151,6 +155,7 @@ def portfolio(rows, holdings_start, movement_start, trades_start, trades_end, ac
item['sourceRow'] = number
item['concludedAt'] = concluded_at
item['sourceId'] = f"vtb-broker-trade:{item['tradeId'] or number}"
item['operationId'] = str(uuid.uuid5(OPERATION_NAMESPACE, item['sourceId']))
trades.append(item)
return {
'schemaVersion': 'broker-portfolio-1.0',