Improves amount parsing for new architecture

Prioritizes parsing amount strings in the new EUR/USD format and introduces support for metadata containing sats equivalent.
Fallbacks to legacy parsing when the new format is not detected.
This ensures correct interpretation of amount data from different sources.
This commit is contained in:
padreug 2025-11-10 16:17:23 +01:00
parent b6886793ee
commit 700beb6f7f

View file

@ -522,10 +522,24 @@ async def api_get_pending_entries(
if isinstance(first_posting, dict):
amount_str = first_posting.get("amount", "")
# Parse amount string format: "36791 SATS {33.33 EUR, 2025-11-09}" or "36791 SATS"
# Parse amount string format
if isinstance(amount_str, str) and amount_str:
import re
# Extract SATS amount (before " SATS")
# Try EUR/USD format first (new architecture): "50.00 EUR"
fiat_match = re.match(r'^(-?[\d.]+)\s+([A-Z]{3})$', amount_str)
if fiat_match and fiat_match.group(2) in ('EUR', 'USD', 'GBP'):
fiat_amount = abs(float(fiat_match.group(1)))
fiat_currency = fiat_match.group(2)
# Extract sats equivalent from metadata
posting_meta = first_posting.get("meta", {})
sats_equiv = posting_meta.get("sats-equivalent")
if sats_equiv:
amount_sats = abs(int(sats_equiv))
else:
# Legacy SATS format: "36791 SATS {33.33 EUR, 2025-11-09}" or "36791 SATS"
sats_match = re.match(r'^(-?\d+)\s+SATS', amount_str)
if sats_match:
amount_sats = abs(int(sats_match.group(1)))