Files
boc/projects/landvex/20-automation/aamos_integration.py
T
Bernt 6de2455917 v1.2.0: Add Global Markets footer, translated to 9 languages
- Added GLOBAL_MARKETS_TITLE to all translation files
- Updated footer with 12 markets (4 active + 8 upcoming)
- Translated market section to: zh-cn, zh-tw, ja, ko, th, vi, id, ms, hi
- Built and deployed to production
- CloudFront invalidation: I3RTMXVFDJXWLG3SYX208OP1CC
2026-07-08 19:56:03 +00:00

137 lines
4.1 KiB
Python

#!/usr/bin/env python3
"""
AAMOS Integration för Landvex Artikelautomation
Hämtar data från aamos-ledger och skapar artikelkandidater
"""
import json
import os
from datetime import datetime, timezone
from pathlib import Path
# Använd direkt SQL-klient
from aamos_simple_client import SimpleAamosClient
# Konfiguration
DEFAULT_OUTPUT_DIR = Path(__file__).parent / "intag"
def skapa_artikel_fran_konto(konto):
"""Skapa en artikelkandidat baserat på ett aamos-konto"""
# Mappa kontotyp till domän
doman_map = {
"Asset": "ANL",
"Liability": "FIN",
"Equity": "FIN",
"Income": "FIN",
"Expense": "ANL"
}
doman = doman_map.get(konto['account_type'], 'ANL')
# Skapa artikelstruktur
artikel = {
"kandidat_id": f"K-{datetime.now(timezone.utc).strftime('%Y%m%d')}-aamos-{konto['code']}",
"atgard": "ny",
"serie": {"typ": "klass", "tier": 2},
"paket_ref": [],
"patch": {},
"post": {
"posttyp": "objektklass",
"slug": f"{konto['code']}-{konto['name'].lower().replace(' ', '-').replace('/', '-')}",
"namn": {
"sv": konto['name'],
"en": konto['name'] # Behåll svenskt namn eller översätt
},
"doman": doman,
"identitet": {
"status": "aktiv",
"beskrivning": f"{konto['name']} — accounting category {konto['code']} in Swedish BAS chart of accounts. Used for financial tracking and reporting in infrastructure projects."
},
"teknik": {
"konto": {
"kod": konto['code'],
"typ": konto['account_type'],
"standard": "BAS2024"
}
},
"geografi": {
"marknader": ["SE", "EU"]
},
"standarder": [
{
"beteckning": "BAS2024",
"organ": "BAS",
"roll": "referens"
}
],
"ai": {
"ocr": {"falt": []}
},
"problem": [],
"relationer": [],
"proveniens": {
"skapad": datetime.now(timezone.utc).strftime("%Y-%m-%d"),
"uppdaterad": datetime.now(timezone.utc).strftime("%Y-%m-%d"),
"verifieringsniva": "bekraftad",
"konfidens": 0.9,
"kallor": [
{
"titel": "AAMOS Ledger — BAS Kontoplan",
"url": "https://aamos.wavult.com",
"typ": "system"
}
]
}
},
"verifieringsniva_forslag": "bekraftad",
"motivering": f"Auto-generated from AAMOS ledger account {konto['code']}"
}
return artikel
def hamta_och_skapa_artiklar():
"""Hämta konton från aamos och skapa artikelkandidater"""
print("=== AAMOS Integration ===")
print("Ansluter till aamos-ledger...")
client = SimpleAamosClient().connect()
# Hämta alla konton
accounts = client.list_accounts()
print(f"Hittade {len(accounts)} konton")
# Skapa artiklar
kandidater = []
for konto in accounts:
artikel = skapa_artikel_fran_konto(konto)
kandidater.append(artikel)
print(f"{konto['code']}: {konto['name']}")
# Spara kandidatfil
datum = datetime.now(timezone.utc).strftime("%Y-%m-%d")
filnamn = f"kandidatposter-{datum}-aamos.json"
sokvag = DEFAULT_OUTPUT_DIR / filnamn
payload = {
"beskrivning": f"AAMOS Ledger — konton som artikelkandidater {datum}",
"extraktor": "aamos-ledger-integration",
"genererad": datum,
"kandidater": kandidater
}
with open(sokvag, "w", encoding="utf-8") as f:
json.dump(payload, f, ensure_ascii=False, indent=2)
print(f"\n✅ Sparade {len(kandidater)} artiklar till {sokvag}")
client.close()
return sokvag
if __name__ == "__main__":
hamta_och_skapa_artiklar()