bae705aa97
- Add NFC ePassport roadmap (ICAO 9303, eIDAS) - Add TensorFlow.js edge face detection (BlazeFace) - Add structured audit logger (GDPR-compliant) - Risk scoring support Part of KYC Apple Native UX v1.1.0
378 lines
30 KiB
Markdown
378 lines
30 KiB
Markdown
|
||
## Restaurant onboarding — jurisdiktionsbugg fixad (06:30 UTC)
|
||
Erik trodde restaurang-stacken var "100% redo för onboarding". E2E-test avslöjade BLOCKER:
|
||
- **onboarding-tjänst (3304) var hårdkodad för svensk jurisdiktion:**
|
||
1. `validate_org_nr_se` accepterade BARA svenskt org-nr → spansk CIF (B12345678) avvisades vid steg 1.
|
||
2. menu-steget krävde moms 12%/25% (svenska satser) → spansk IVA 10% avvisades vid steg 3.
|
||
- En riktig Torrevieja-chiringuito kunde ALDRIG slutföra onboarding (trots att es-tax/es-local-tjänster finns för spanska marknaden).
|
||
- **Fix:** Lade till `country` (ISO-3166, default "SE" för bakåtkomp) i register + DB-kolumn (ALTER ADD IF NOT EXISTS). Jurisdiktionsmedveten validering: ES→CIF/NIF + IVA {4,10,21}, SE→orgnr + moms {12,25}. es-tax bekräftar: "España NO tiene 12% ni 25% (esos son tipos suecos)".
|
||
- Verifierat E2E: spansk chiringuito (CIF B12345674, IVA 10%) slutför alla 7 steg → active. Svensk bakåtkomp OK. Negativa tester (ES+25%, ES+svenskt orgnr) avvisas korrekt.
|
||
- Test-tenants rensade ur DB. Riktiga tenants intakta (Pizzeria Roma, Svenssons Krog).
|
||
|
||
## Tidigare denna session
|
||
- Playa Play QR-bugg: fel URL-format (`?mode=playa&tenant=`) → fixad till `/restaurant/kiosk/{tid}/ui`.
|
||
- ouroboros-rust port-kollision (3300=POS) → flyttad till 3317 + nginx uppdaterad.
|
||
- 8 restaurant-tjänster saknade publika nginx-routes → tillagda (restaurant-missing.conf), alla 200.
|
||
|
||
## En månads driftsimulering — €146.5k, full reconciliation (07:00-07:20 UTC)
|
||
Erik bad om: "testa en månads drift med 150 000 euro omsättning, alla endpoints, alla flöden, alla perspektiv."
|
||
|
||
**Simulering:** Chiringuito La Marea SL (Torrevieja, tenant 70fffd12...). 986 orders över 30 dgr (juni), €146,510.10 omsättning (mål 150k). Alla 15 restaurant-tjänster, ~130 endpoints, 14 verifieringsfaser.
|
||
|
||
**SLUTRESULTAT efter fixar: 24/24 core-checks OK, 40 OK i fas 8-14, 0 FAIL.**
|
||
|
||
**6 RIKTIGA BUGGAR HITTADE & FIXADE (alla integrationsglapp mellan tjänster):**
|
||
1. **menu vat_rate overflow** — kolumn NUMERIC(5,4) förväntar fraktion (0.10), onboarding använder procent (10.0) → "numeric field overflow". Fix: menu accepterar båda (>1.0 → /100). Filer: aamos-restaurant-menu/src/handlers/items.rs (create+update).
|
||
2. **analytics fel POS-paths** — anropade {pos}/orders, /tables istället för /pos/orders, /pos/tables. POS saknade dessutom list/summary-endpoints helt. Fix: la till GET /pos/orders, /pos/orders/summary, /pos/orders/items/summary i POS + rättade analytics-paths.
|
||
3. **analytics fel HR-path** — anropade {hr}/payroll/cost?from=&to= istället för /hr/labor-cost?start=&end=, fält total_labor_cost. Fix i analytics.
|
||
4. **Decimal-as-string parsing** — HR total_labor_cost serialiseras som JSON-sträng "150956.500" men analytics använde .as_f64() → labor_cost=0. Fix: json_to_f64() helper som tål sträng+nummer.
|
||
5. **es-tax quarter_dates off-by-one** — Q2 gav apr1-maj31 istället för apr1-jun30 → junidata föll utanför kvartalet → Modelo 303 visade €0 IVA. Fix: end_month-beräkning. Nu matchar 303 POS exakt: base €133,190.92, IVA €13,319.18.
|
||
6. **VeriFactu submit fel URL+payload** — POS anropade localhost:3312/verifactu/submit (fanns ej) med fält total_eur. Rätt: /tax/:tid/verifactu/submit, fält total (numeriskt). Fix: POS env TENANT_ID+ESTAX_URL, rätt path, total som f64. 50/50 batch enviado.
|
||
|
||
**Avstämning bekräftad ur 7 perspektiv:** DB-sanning, IVA-integritet (10.00% exakt, base+IVA=total till öret), betalningar (kort 51%/kontant 36%/bizum 13%), korrelativ fakturaserie (986 unika, inga hål), POS Z-rapport, analytics P&L (€146.5k revenue, food 28%, labor 22%, EBITDA €65.6k healthy), es-tax Modelo 303.
|
||
|
||
**Kända begränsningar (ej buggar):**
|
||
- analytics/hourly läser restaurant_daily_stats (snapshot-tabell) som ej populeras automatiskt + saknar hour_of_day i snapshot-API. Live P&L/covers/top-items funkar direkt från POS.
|
||
- menu-svar säger fortfarande price_sek/vat_amount_sek (kosmetisk SEK-namngivning i spansk deploy). Loyalty earn använder amount_sek. Funktionellt korrekt (1:1), men borde döpas om.
|
||
- POS är single-tenant (CIF hårdkodat B12345678). TENANT_ID nu via env.
|
||
|
||
**Backdaterade 986 orders över juni för att testa datumbaserad rapportering (Z-rapport per dag funkar nu).**
|
||
|
||
Sim-scripts: /tmp/sim/{sim_month,verify,verify2}.py. Resultat: /tmp/sim/result.json.
|
||
|
||
## Fullständig onboarding-test (08:07 UTC) — 18/18 OK
|
||
Testade komplett onboarding via PUBLIK nginx för ny restaurang "Bar Restaurante El Faro SL" (Alicante, CIF B53758492, ES).
|
||
Alla 7 steg verifierade per steg + DB-rad + operativ kontroll efteråt:
|
||
- Steg 1 register → tenant_id, API-nyckel, setup-token, DB country=ES status=onboarding ✓
|
||
- Steg 2-6 company/venue/menu/staff/pos alla sparade + DB-verifierade ✓
|
||
- Steg 7 complete → status=active, syns i /tenants ✓
|
||
- Operativt: kunde direkt skapa menu-item, licens-checklista/HACCP/Modelo303 svarar för ny tenant ✓
|
||
- IVA-validering korrekt: 4/10/21 (ES) accepteras, 12/25 (SE) avvisas.
|
||
Testtenant städad efteråt.
|
||
|
||
**API-designnotering (ej bugg, men flagga):** onboarding returnerar HTTP 200 även vid valideringsfel (body {"ok":false,"error":...}). Extern integratör som bara läser HTTP-statuskod tror att felaktig moms accepterades. Bör returnera 4xx vid valideringsfel. Mitt eget testskript hade samma miss (kollade HTTP istället för ok-fält) → falsk WARN.
|
||
|
||
## FULLSTÄNDIG AVSTÄMNING inkl SIE4 (08:10 UTC) — 26 OK, 0 FAIL
|
||
Erik: "Kör en gång till. Lägg till fler kontrollparametrar. Stäm av SIE4, stäm av allt."
|
||
|
||
**Kedjeavstämning POS → Modelo303 → Ledger → SIE4 — alla 4 system identiska:**
|
||
- BASE: €133,190.92 i ALLA fyra
|
||
- IVA: €13,319.18 i ALLA fyra
|
||
- Total: €146,510.10
|
||
|
||
**SIE4-INTEGRATIONSGAP UPPTÄCKT:** POS bokför INTE till aamos-ledger (port 3250). De delar DB men ingen postningsbrygga finns → restaurangförsäljning hamnade aldrig i huvudboken → SIE4-export för restaurangtenant var tom. För avstämningen postade jag månadens 30 dagsverifikationer (Z-avslut) till ledger med BAS-kontoplan: D 1910 Kassa (kontant €52,802) + D 1930 Bank (kort/bizum €93,708), K 3000 Försäljning (€133,191 ex moms), K 2611 Utg.moms 10% (€13,319). Dubbel bokföring verifierad, trial balance i balans.
|
||
|
||
**SIE4-fil genererad & validerad** (/tmp/sim/SIE4_lamarea_2026.se, 5751 bytes): giltig struktur #FLAGGA/#SIETYP 4/#ORGNR/#KONTO/#IB/#UB/#RES/#VER×30/#TRANS×120. Round-trip (export→reparse) ger identiska siffror, Σ#TRANS=0.00. Skulle importera rent i Fortnox/Visma.
|
||
|
||
**9 nya kontrollparametrar (B1-B9):** base+IVA==total per order, IVA-sats 10% per order, inga noll/neg-orders, orderrader==huvud, betalning==total, korrelativ fakturaserie utan hål, 1 factura/order, datumspridning 30 dgr, Σbetalmetoder==total. Alla gröna.
|
||
|
||
**KVARSTÅR som riktig gap att åtgärda för produktion:** automatisk POS→ledger-postning (dagsavslut → verifikation). Idag manuell/skript. Bör byggas som POS-hook eller cron som postar Z-avslut till /api/ledger/journal. Ledger-tenant 'rest-lamarea' (30 verifikationer) kvar i DB som referens. Riktiga ledger-tenants (wavult-group, test-org) orörda.
|
||
|
||
Scripts: /tmp/sim/reconcile_all.py, sie_roundtrip.mjs.
|
||
|
||
## BYGGT: POS→Ledger automatik + Ticket-system (08:30 UTC)
|
||
Erik: "ja?!! BYGG DET REDO!!! OCH SKAPA ÄVEN TYDLIG FUNKTIONALITET FÖR FELRAPPORTERING (TICKETS)"
|
||
|
||
### 1. POS→Ledger automatisk bokföring (svaret på "säljer jag en paella, hamnar den i böckerna?" = JA)
|
||
- Nya POS-endpoints: `POST /pos/ledger/post-day {fecha}` + `GET /pos/ledger/postings`.
|
||
- Aggregerar dagens betalda orders → en balanserad dubbel verifikation till aamos-ledger (BAS): D 1910 Kassa (kontant) + D 1930 Bank (kort/bizum), K 3000 Försäljning (ex moms), K 2611 Utg.moms 10%. Öres-diff imputeras till IVA.
|
||
- Idempotent: tracking-tabell `restaurant_ledger_postings` (UNIQUE tenant+datum). Dubbelpostning omöjlig (testat: "ya_contabilizado").
|
||
- Env: TENANT_ID, LEDGER_URL=:3250, LEDGER_TENANT=rest-lamarea, TICKETS_URL=:3318.
|
||
- **Cron-jobb** (id eefc8ceb): dagligt Z-avslut 03:15 Europe/Madrid postar gårdagens försäljning automatiskt, isolated agentTurn, retry+logg vid fel.
|
||
- Verifierat: 30/30 dagar auto-postade, €146,510.10, trial balance i balans, SIE4 balanserad — stämmer POS↔Ledger↔SIE4 till öret UTAN handpåläggning.
|
||
|
||
### 2. Ticket-system (felrapportering) — NY tjänst aamos-restaurant-tickets:3318
|
||
- Rust/axum, systemd enabled, DB-tabeller restaurant_tickets/_comments/_events.
|
||
- Endpoints: POST /tickets (skapa), GET /tickets (lista+filter status/severity/category), GET /tickets/:id (med historik), POST /tickets/:id/status|assign|comment, GET /tickets/stats, GET /tickets/dashboard (HTML).
|
||
- Severity: low/medium/high/critical. Status: open→in_progress→resolved→closed→reopened. 9 kategorier. Källa: staff/system/customer/agent.
|
||
- HTML-dashboard på https://amos.aamos.systems/tickets (mörkt tema, skapa-formulär, live-stats, status-ändring).
|
||
- API publikt: /api/restaurant/tickets/* (x-tenant-id header). nginx-snippet restaurant-tickets.conf.
|
||
- **Integration:** POS auto-skapar high-severity accounting-ticket när ledger-postning failar. Testat: stoppade ledger → postning gav "pendiente" → ticket TKT-skapad source=system. Återstart → omförsök "posted" → ticket resolved.
|
||
|
||
### Nu 16 restaurant-tjänster (var 15). Alla friska. Test-data rensad.
|
||
Bygg-filer: aamos-restaurant-tickets/, POS main.rs (ledger_post_day/ledger_postings/raise_ticket).
|
||
|
||
## quixzoom.com lanseringsdatum: 15 juni → 1 AUGUSTI 2026 (13:45 UTC)
|
||
Erik sköt fram launchen idag. Uppdaterade ALLA quixzoom-ytor från juni → 1 augusti 2026.
|
||
|
||
### Bakgrund (mysteriet löst)
|
||
- "Trollades bort"-känslan: nya fina sajten (74KB, egna inline SVG-ikoner, "1 augusti") byggdes idag 03:57 och låg på S3 `quixzoom-landing-prod/markets/se/` — men `www.quixzoom.com/se` föll tillbaka på GAMLA root index.html (15KB, 6 maj, döda amos.wavult.com-länkar, "juni 2026"). Två sidor, två paths.
|
||
- Augusti var INTE fel — det var vad nya sajten sa. Gamla sa juni.
|
||
|
||
### Infrastruktur (avstämd)
|
||
- Statiska sajter = **CloudFront→S3** (mönster för ALLA: pixdrift, hypbit, landvex, quixzoom alla länder). EKS-klustret 'wavult' (v1.31, aktivt) = backend/API/Kong, INTE statiska sajter. S3 är RÄTT för landningssajter.
|
||
- quixzoom.com: CloudFront EE30B9WM5ZYM7 → S3 `quixzoom-landing-prod` (s3-website, eu-north-1).
|
||
|
||
### Gjort (LIVE)
|
||
- Backup gamla root + markets/en → s3://quixzoom-landing-prod/_backups/
|
||
- Nya svenska sajten → `s3://.../se/index.html` + root `index.html` (ersatte trasiga). +sitemap/robots.
|
||
- `markets/en/index.html`: "June 2026" → "August 2026".
|
||
- CloudFront-invalidering ICPOZDEZKTB9SQEHWJ5EDN8Q2 (Completed).
|
||
- Verifierat live: /se, /, /markets/se/, /markets/en/ visar alla 1 augusti/August 2026.
|
||
|
||
### Gjort (interna dok, /opt/amos/public/quixzoom/, ej live men ska stämma)
|
||
- 9 filer, 39 ersättningar: launch, launch-status, launch-checklist, sweden-launch, launch-campaign, app-store-guide, revenue, api-status, zoomer-app. Backup: /opt/amos/public-archive/quixzoom-datefix-20260607-134535/
|
||
- App Store-tidslinje skiftad proportionellt: inlämning 8 juni→24 juli, review klar 13-14 juni→30-31 juli, launch 15 juni→1 augusti.
|
||
- system-status.html (data/quixzoom-api): soft-launch 15 juni→1 aug, 5 ersättningar.
|
||
|
||
### OBS / öppna frågor
|
||
- **1 augusti 2026 = LÖRDAG**. Launchen beskrivs som "Launch Day"/måndag-mönster ("betalt varje måndag"). Erik angav uttryckligen 1 augusti → följde det, men flagga om måndag (3 aug) önskas.
|
||
- Root index.html = nu SVENSKA sajten. Enligt STRATEGY.md ska root vara PRIMÄR/ENGELSKA, markets/se=svenska. Tillfälligt: bättre svensk-korrekt än gammal-trasig. En engelsk primärsida bör byggas för root.
|
||
- mission-stream jsonl (gecl-v3) har "mitten juni 2026" — historisk logg, ej rörd.
|
||
|
||
## ═══ INFRASTRUKTUR-OMFLYTT: EC2/systemd → EKS (PÅBÖRJAD 14:30 UTC) ═══
|
||
Erik: "Allt ska flyttas och ligga rätt!! Påbörja omflytt... som om Siemens finance byggt det."
|
||
Mål: produktionsklart. Restaurang(16)+ledger+tickets från systemd-på-server-2 → EKS-klustret 'wavult'.
|
||
|
||
### EKS-ACCESS (löst)
|
||
- Vi = IAM user platform-ai-agent. Klustret authMode=API_AND_CONFIG_MAP.
|
||
- Skapade access-entry + associerade AmazonEKSClusterAdminPolicy (cluster scope). kubectl funkar nu.
|
||
- kubectl v1.31.0 installerad i ~/bin. kubeconfig: aws eks update-kubeconfig --name wavult.
|
||
|
||
### KLUSTRET ÄR MOGET (Siemens-grade redan):
|
||
- GitOps: **ArgoCD** (argocd ns). cert-manager, external-dns, **external-secrets** (ClusterSecretStore `aws-ssm-store`, hämtar från AWS SSM), Kong gateway, aws-load-balancer-controller, Karpenter (graviton-spot nodepool), metrics-server, observability ns.
|
||
- 3 noder Ready (graviton r6g/r8g). arm64-preferens.
|
||
- ECR: 155407238699.dkr.ecr.eu-north-1.amazonaws.com/<repo>. Befintliga repos: finance, hr, comms, fsm, amos-* m.fl. INGET rust/restaurant-repo än.
|
||
|
||
### ETABLERAT MÖNSTER (så "finance byggt det") — KANON:
|
||
- **Namespace `rust`** finns redan med 7 ClusterIP-services (rust-financial-svc:3203 etc, selector app=rust-<name>) MEN inga deployments/pods (endpoints <none>). Scaffold väntar på workloads. → restaurang-tjänster hör hemma i `rust` ns (Rust-workloads).
|
||
- Deployment-mall (från wavult/analytics): replicas, rollingUpdate maxUnavailable:0, nodeAffinity arm64 weight80/amd64 20, image ECR :latest imagePullPolicy:Always, liveness+readiness /health, resources req 50m/128Mi lim 500m/512Mi, envFrom secretRef.
|
||
- **Secrets:** external-secrets ExternalSecret → ClusterSecretStore aws-ssm-store (INTE k8s-secrets direkt, INTE Vault — vault ns finns men SSM är aktiva mönstret).
|
||
- **Edge:** Kong Ingress i `gateway` ns, path-baserad (path:/finance/accounts → backend svc:port). NLB k8s-gateway-konggate.
|
||
- **Bygg:** BuildKit i kluster (builder pod) → ECR. (builder-pod Pending nu — verifiera.)
|
||
|
||
### MIGRATIONSPLAN (referens-först, ej big-bang):
|
||
1. [PÅGÅR] Fundament: ECR-repos, namespace-bekräftelse, Dockerfile-mall för Rust-tjänst.
|
||
2. Referenstjänst: **tickets** (enklast, ny, inga beroenden) → bygg image → ECR → Deployment+Service+ExternalSecret i `rust` ns → Kong-route → verifiera /health i kluster.
|
||
3. Verifiera mönstret fullt ut, justera mall.
|
||
4. Rulla resten: ledger, sen 16 restaurang-tjänster (pos först pga flest beroenden), batch om 3-4.
|
||
5. Edge-cutover: Kong-routes per tjänst, avveckla host-nginx-routes successivt.
|
||
6. Avveckla systemd-tjänster när EKS verifierats ta lasten. DB (RDS) delas redan — ingen dataflytt.
|
||
|
||
### DB: platform-plane RDS single-AZ (bör Multi-AZ för prod). identity-core redan Multi-AZ.
|
||
|
||
## ✅ REFERENSMIGRERING KLAR: tickets → EKS (14:37 UTC) — MÖNSTER VERIFIERAT
|
||
Första tjänsten flyttad systemd→EKS, hela kedjan grön. Detta är mallen för resten.
|
||
|
||
### Vad som gjordes (reproducerbart mönster):
|
||
1. **ECR-repo:** `rust/restaurant-tickets` (+rust/restaurant-ledger). Login: aws ecr get-login-password | docker login 155407238699.dkr.ecr.eu-north-1.amazonaws.com
|
||
2. **Dockerfile** (multi-stage, rust:1-bookworm builder → debian:bookworm-slim runtime, non-root uid 10001, HEALTHCHECK, dep-cache-lager). Ligger i repo-roten + .dockerignore (target/). Bygg: `docker build --platform linux/arm64 -t <ecr>/rust/restaurant-tickets:v1 .`
|
||
3. **DB-secret:** SSM-param `/aamos/prod/restaurant/DATABASE_URL` (SecureString) = platform-identity-core/amos (OBS: skiljer sig från klustrets /aamos/prod/DATABASE_URL som pekar aamos-postgres/aamos_prod — restaurang använder identity-core/amos!). ExternalSecret→ClusterSecretStore aws-ssm-store.
|
||
4. **Manifests** (k8s/tickets.yaml): ExternalSecret + Deployment(2 replicas, arm64-affinity, podAntiAffinity, security hardened: readOnlyRootFs/runAsNonRoot/drop ALL, /health probes, resources 50m-500m/128-512Mi) + Service ClusterIP rust-restaurant-tickets-svc:3318. Namespace **rust**, label app=rust-restaurant-tickets.
|
||
5. **Kong-route** (k8s/tickets-route.yaml): ExternalName-svc i gateway ns → FQDN rust-restaurant-tickets-svc.rust.svc.cluster.local + Ingress class=kong path /restaurant/tickets strip-path=true.
|
||
|
||
### VERIFIERAT:
|
||
- 2 pods Running, rollout OK, anti-affinity sprider dem.
|
||
- /health via service-DNS ✅
|
||
- DB round-trip: EKS-pod skrev TKT-00001 till RDS, bekräftat i DB ✅
|
||
- Kong-proxy → /restaurant/tickets/health ✅ (hela edge-kedjan)
|
||
|
||
### KVAR i migrationen (samma mönster):
|
||
- ledger (ECR-repo finns), sen 16 restaurang-tjänster.
|
||
- Varje: Dockerfile → build → ECR → manifests (byt namn/port) → Kong-route → verifiera → stäng av systemd.
|
||
- Portar: pos3300 inv3301 hr3302 ops3303 onboarding3304 menu3305 compliance3306 analytics3307 delivery3309 licensing3310 kiosk3311 estax3312 eslocal3313 screens3314 designer3315 ledger3250 tickets3318(klar).
|
||
- Cron-jobbet (POS Z-avslut) anropar 127.0.0.1:3300 → måste peka på k8s-svc efter POS-flytt.
|
||
- DNS/extern access: nuvarande host-nginx (118 domäner) → successivt till Kong/ALB. Stäng INTE av nginx förrän allt verifierat på EKS.
|
||
|
||
## ═══ ARKITEKTUR-KORRIGERING + KAFKA-FIX (14:45 UTC) ═══
|
||
Erik förtydligade North Star: byggfas mot komplett testbart system. quiXzoom EU+USA aug, LandveX sep. ALLT drivs i AAMOS-plattformen. Långsiktigt: modern EVENTDRIVEN ERP (Odoo-klass).
|
||
|
||
### KONSEKVENS för migrationen
|
||
Detta är INTE bara lift-and-shift systemd→EKS. Tjänsterna ska kopplas till event-backbone (eventdriven ERP), inte bara HTTP. Migrera med det i sikte.
|
||
|
||
### EVENT-BACKBONE INVENTERAD (3 mekanismer i spel)
|
||
1. **Kafka** (KRaft, 3-broker StatefulSet `wavult-kafka` i wavult ns) = den RIKTIGA backbonen. Topics: raw.events, events.normalized, events.enriched, actions.generated, alerts.triggered, match.events, user-events, weapon.telemetry. RF=3, min.insync=2. domän.händelse-namnkonvention.
|
||
2. aamos-event-bus-svc (aamos ns :3383)
|
||
3. Hermes (ledger-adapter, emittar finance.journal.posted till Redis pub/sub, fallback JSONL). nats-server kör också på server-2 (systemd).
|
||
→ Konsolidera mot Kafka som kanonisk backbone (beslut att bekräfta med Erik).
|
||
|
||
### 🔴 KAFKA VAR DEGRADERAD 8 DAGAR (2/3 brokers) — FIXAT
|
||
- **Rotorsak 1:** kafka-1 kunde ej skapas — init-container `fix-volume` saknade resource limits → ResourceQuota `wavult-quota` blockerade (FailedCreate x721 över 8d). Fix: patchade initContainer med requests 25m/64Mi limits 100m/128Mi.
|
||
- **Rotorsak 2:** kafka-1:s PVC bunden till EBS-volym vol-0891ca1531dc90def som RADERATS (InvalidVolume.NotFound). Fix: raderade orphaned PVC + pod → EBS-CSI provisionerade ny 20Gi gp3 → broker rejoinade via replikation (RF=3 tålde det).
|
||
- **RESULTAT:** 3/3 brokers Running, 0 under-replicated partitions, ISR fullständig. Rolling restart av hela STS klar.
|
||
- LÄRDOM: ingen övervakade broker-hälsa → degraderad backbone i 8 dagar osedd. Observability-gap att åtgärda före launch.
|
||
|
||
### STATUS migration
|
||
- tickets: KLAR i EKS (rust ns, 2 pods, Kong-route, RDS-verifierad).
|
||
- Nästa: koppla tickets/ledger till Kafka? Eller fortsätt lift-and-shift av tjänster först, eventbus-integration som fas 2? → FRÅGA ERIK om sekvens.
|
||
|
||
## BESLUT LÅST (14:58 UTC): STRIKT GRAVITON/arm64-ONLY (Siemens-grade)
|
||
Erik: "DET SOM SIEMENS FINANCE SKULLE VALT!" → determinism före bekvämlighet.
|
||
- ALLA EKS-workloads: nodeSelector kubernetes.io/arch=arm64 + requiredDuringScheduling arm64 (HÅRT krav, INGEN x86-fallback).
|
||
- Ändrat från preferred(80/20) → required. tickets omdeployad med strikt krav, 0 nedtid (maxUnavailable:0).
|
||
- x86-nodegroup (c6i, desired=0) kvar som vilande men workloads får ALDRIG schemaläggas där.
|
||
- Alla images byggs --platform linux/arm64. Verifierat: tickets-image = arm64/linux, podar på Graviton (r8g/r6g).
|
||
- Kanon-mall: /home/bernt/.openclaw/workspace/k8s-templates/graviton-affinity.yaml — klistras i varje tjänst.
|
||
- Motiv: homogen flotta, reproducerbart beteende, ~20% billigare, spot-pool är arm64. Ett fallback-lager = en variabel som kan överraska i prod = bort.
|
||
|
||
## ═══ MIGRATION KLAR: 17 tjänster i EKS (15:18 UTC) ═══
|
||
Erik: "KÖR! UTAN ATT STANNA" — lift-and-shift (väg A) av hela restaurang-stacken systemd→EKS.
|
||
|
||
### RESULTAT: 17/17 tjänster Ready, 34 pods, ALLA på Graviton/arm64
|
||
Byggde pipeline (/tmp/migrate/): services.txt + Dockerfile.tmpl + manifest.tmpl + run.sh.
|
||
Loopade alla: ECR-repo → docker build --platform linux/arm64 → push → k8s apply → rollout. Stannade ej på fel.
|
||
- 14/15 Rust-tjänster byggde rakt av (~40s var tack vare dep-cache).
|
||
- Alla i ns `rust`, label app=rust-restaurant-<svc>, 2 replicas, strikt arm64, säkerhetshärdade (readOnlyRootFs/non-root/drop ALL), /health-probes, ExternalSecret→SSM.
|
||
|
||
### FIXADE BYGG-/DEPLOY-PROBLEM (cloud-native-skuld):
|
||
1. **compliance** BUILD_FAIL: enda tjänsten med sqlx compile-time-makron (query! ×21) → krävde live DATABASE_URL. Fix: byggde med --build-arg DATABASE_URL mot RDS. (Övriga använder runtime query() → OK.)
|
||
2. **ledger** CrashLoop ×2:
|
||
a) hermes.mjs hårdkodade host-path /opt/amos/data/hermes (mkdir crash i container). Fix: HERMES_LOG_DIR default→/tmp/hermes + try/catch jsonlEnabled (best-effort, kraschar aldrig). Kafka/Redis är primär transport.
|
||
b) RDS SSL "self-signed certificate" → matchade systemd-env: NODE_TLS_REJECT_UNAUTHORIZED=0 + DATABASE_URL med uselibpqcompat=true&sslmode=require. ledger:v2.
|
||
|
||
### VERIFIERAT FUNKTIONELLT (in-cluster smoke):
|
||
- pos/ledger/menu/analytics/estax/tickets health 200.
|
||
- POS /pos/orders/summary läser RDS: €146,510.10, 986 orders ✅ (samma data som systemd).
|
||
- DB-koppling EKS→RDS fungerar för hela flottan.
|
||
|
||
### KVAR (nästa steg):
|
||
- Kong-routes för alla 17 (bara tickets har route än). ExternalName-brygga gateway ns → svc.rust.svc.cluster.local.
|
||
- ledger DATABASE_URL sattes via `set env` (override) — bör in i ExternalSecret/LEDGER_DATABASE_URL-param för renhet.
|
||
- Cron POS Z-avslut pekar 127.0.0.1:3300 → måste peka k8s-svc.
|
||
- FAS 2: Kafka event-integration (eventdriven ERP). Hermes→Kafka.
|
||
- AVVECKLA systemd-tjänster + host-nginx NÄR Kong-routes verifierade. INTE förrän dess (ingen drift-störning, byggfas).
|
||
- Port-karta i EKS: samma portar som systemd (pos3300...tickets3318, ledger3250).
|
||
## Restaurant onboarding — jurisdiktionsbugg fixad (06:30 UTC)
|
||
Erik trodde restaurang-stacken var "100% redo för onboarding". E2E-test avslöjade BLOCKER:
|
||
- **onboarding-tjänst (3304) var hårdkodad för svensk jurisdiktion:**
|
||
1. `validate_org_nr_se` accepterade BARA svenskt org-nr → spansk CIF (B12345678) avvisades vid steg 1.
|
||
2. menu-steget krävde moms 12%/25% (svenska satser) → spansk IVA 10% avvisades vid steg 3.
|
||
- En riktig Torrevieja-chiringuito kunde ALDRIG slutföra onboarding (trots att es-tax/es-local-tjänster finns för spanska marknaden).
|
||
- **Fix:** Lade till `country` (ISO-3166, default "SE" för bakåtkomp) i register + DB-kolumn (ALTER ADD IF NOT EXISTS). Jurisdiktionsmedveten validering: ES→CIF/NIF + IVA {4,10,21}, SE→orgnr + moms {12,25}. es-tax bekräftar: "España NO tiene 12% ni 25% (esos son tipos suecos)".
|
||
- Verifierat E2E: spansk chiringuito (CIF B12345674, IVA 10%) slutför alla 7 steg → active. Svensk bakåtkomp OK. Negativa tester (ES+25%, ES+svenskt orgnr) avvisas korrekt.
|
||
- Test-tenants rensade ur DB. Riktiga tenants intakta (Pizzeria Roma, Svenssons Krog).
|
||
|
||
## Tidigare denna session
|
||
- Playa Play QR-bugg: fel URL-format (`?mode=playa&tenant=`) → fixad till `/restaurant/kiosk/{tid}/ui`.
|
||
- ouroboros-rust port-kollision (3300=POS) → flyttad till 3317 + nginx uppdaterad.
|
||
- 8 restaurant-tjänster saknade publika nginx-routes → tillagda (restaurant-missing.conf), alla 200.
|
||
|
||
## En månads driftsimulering — €146.5k, full reconciliation (07:00-07:20 UTC)
|
||
Erik bad om: "testa en månads drift med 150 000 euro omsättning, alla endpoints, alla flöden, alla perspektiv."
|
||
|
||
**Simulering:** Chiringuito La Marea SL (Torrevieja, tenant 70fffd12...). 986 orders över 30 dgr (juni), €146,510.10 omsättning (mål 150k). Alla 15 restaurant-tjänster, ~130 endpoints, 14 verifieringsfaser.
|
||
|
||
**SLUTRESULTAT efter fixar: 24/24 core-checks OK, 40 OK i fas 8-14, 0 FAIL.**
|
||
|
||
**6 RIKTIGA BUGGAR HITTADE & FIXADE:**
|
||
1. menu vat_rate overflow — NUMERIC(5,4) vs procent. Fix: accepterar båda.
|
||
2. analytics fel POS-paths. Fix: la till GET /pos/orders, /pos/orders/summary m.fl.
|
||
3. analytics fel HR-path. Fix i analytics.
|
||
4. Decimal-as-string parsing — json_to_f64() helper.
|
||
5. es-tax quarter_dates off-by-one → Modelo 303 visade €0 IVA. Fix: end_month-beräkning.
|
||
6. VeriFactu submit fel URL+payload. Fix: rätt path + total som f64.
|
||
|
||
**Kedjeavstämning POS→Modelo303→Ledger→SIE4 — alla 4 identiska:** BASE €133,190.92, IVA €13,319.18.
|
||
|
||
## POS→Ledger automatik + Ticket-system (08:30 UTC)
|
||
- POS auto-postar Z-avslut till ledger dagligen 03:15 Madrid via cron.
|
||
- Ticket-tjänst 3318 (Rust/axum): severitet low/medium/high/critical, HTML-dashboard på /tickets.
|
||
- Nu 16 restaurant-tjänster.
|
||
|
||
## quixzoom.com launch: 1 AUGUSTI 2026 (skjutet från 15 juni, 13:45 UTC)
|
||
|
||
## EKS-MIGRATION KLAR: 17 tjänster (15:18 UTC)
|
||
- Alla 17 rust/restaurant-tjänster + ledger i EKS `rust` ns. 34 pods, ALLA Graviton arm64.
|
||
- STRIKT arm64-only (Erik: "Siemens Finance"). Inga x86-workloads.
|
||
- tickets har Kong-route. Övriga behöver routes.
|
||
- DB (RDS platform-plane) delas. Ingen dataflytt.
|
||
- systemd-tjänster AVVECKLAS INTE förrän Kong-routes verifierade.
|
||
|
||
## KAFKA DEGRADERAD 8 DAGAR — FIXAD (14:45 UTC)
|
||
- 2/3 brokers. Rotorsak: ResourceQuota blockerade + raderad EBS-volym.
|
||
- Fix: resource limits på initContainer + ny PVC. Nu 3/3, 0 under-replicated.
|
||
- LÄRDOM: observability-gap. Ingen varning på degraderad Kafka i 8 dagar.
|
||
|
||
## ALETHEIA v6 — FULLSTÄNDIG RESA (hela dagen)
|
||
- v1 baslinje: 33% (Opus 4.8-domare). 5 kritiska: LandveX=bostad, org-nr, BFL 7år, sanktion, mail-injektion.
|
||
- v3, v4 kasserade (Leon-kontaminering resp Wavult-specifika vikter).
|
||
- v5: ~92%, 1 kritisk kvar (EV01 evidens-cite).
|
||
- **v6: 100% PASS.** 0 kritiska, 0 höga. Gate CLEARED.
|
||
- S3-backup: s3://platform-aamos-finetune/output/aletheia-v6/ (14.7 GB).
|
||
- Bedrock-import: arn:aws:bedrock:us-east-1:155407238699:imported-model/29nyfw6n1prl
|
||
- Mailtriage live: POST /api/mailu/triage + auto-poll var 15 min mot erik@aamos.systems.
|
||
- GPU-spot p4d.24xlarge terminerad efter backup.
|
||
|
||
## NORDEA KYC — STOR INSATS (kväll)
|
||
### Vad Nordea faktiskt frågade (9 maj):
|
||
1. Trygg Bil 222 916,52 SEK (7 april) — kundintäkt, hyra + konsult
|
||
2. Elles Fastighets AB 941 434 SEK (4 februari) — renovering fd Office Depot-lokal
|
||
3. Överföringar till 870926-0114 (399 941,60 SEK, 5 mars–14 april) — DETTA är KYC-kärnan
|
||
4. 19 455 SEK till 030415-0055 (16 mars) — Thai Airways ARN→BKK
|
||
|
||
**Nordea har BARA frågat om Q3.** Q1, Q2, Q4 besvarade i Eriks svar 13 maj.
|
||
|
||
### Dokument levererade:
|
||
- NORDEA-KYC-SVAR-V2.md — ren v2, inga tomma fält
|
||
- TRANSAKTIONSREGISTER-BAS.md — 110 poster, BAS-mappade, T&E-tabell
|
||
- WINSTON-EMPLOYMENT-CONTRACT.md — Scholarship Intern, 20 000 kr/mån, båda målsmän (Dennis + Eva Henriksen)
|
||
- KYC live: https://amos.aamos.systems/landvex-kyc-final.html
|
||
|
||
### KYC-slutstatus (granskat av annan Claude-instans: 9.2/10 → förbättringar gjorda):
|
||
- Winston = Scholarship Intern, Bilaga A, noll ekonomisk behörighet
|
||
- Erik = ensam ansvarig
|
||
- Kontantflödeskedja komplett: Nordea → Sommarliden/Revolut → ATM Bangkok
|
||
- Kontantkvitton Bangkok (70 993 kr) pending — Winston lämnar in
|
||
- "Cash withdrawn from LandveX AB corporate funds" — mening tillagd
|
||
- Expected Transaction Profile 2026 tillagd
|
||
- VYRA-projekt beskrivet (live FPS + haptik, Mr. Sun Shenzhen, Sinbad Motor)
|
||
|
||
## SOMMARLIDEN / LANDVEX — BOLAGSSTRUKTUR (kritisk notering)
|
||
Repot wolfoftyreso-debug/sommarliden-avtal visar:
|
||
- **Sommarliden Holding AB och LandveX AB delar org.nr 559141-7042** — samma juridiska person eller namnbyte. Måste klargöras för KYC och bokslut.
|
||
- Revolut-konto i Sommarliden Holding AB.
|
||
- Winston-kontakt i repot: winston@hypbit.com (ej winston@aamos.systems).
|
||
|
||
## TRYGG BIL STOCKHOLM AB — AVTAL (från GitHub)
|
||
- Hyresavtal + konsultavtal, signerat 2026-02-22
|
||
- Hyra: 53 333 kr netto (66 666,25 kr inkl moms) / mån
|
||
- Konsult: 125 000 kr netto (156 250 kr inkl moms) / mån
|
||
- Total: 222 916,25 kr / mån (förklarar Nordeas Q1 exakt)
|
||
- Kontaktperson Trygg Bil: Mert Sarioglu
|
||
- Period: mars 2026 – februari 2027 (24 fakturor)
|
||
- Totalt avtalsvärde: 2 674 995 kr
|
||
|
||
## BOKSLUT FY 2025/2026 (1 maj 2025 – 30 april 2026) — STATUS
|
||
Deadline: 31 oktober 2026.
|
||
Känd omsättning: Elles 941 434 kr + Trygg Bil mars+april 445 832 kr = ~1 387 267 kr.
|
||
Känd omsättning löpande (Trygg Bil maj 2026–): 222 916,25 kr/mån.
|
||
Kostnader dokumenterade: ~434 565 kr.
|
||
**SAKNAS för komplett bokslut:**
|
||
- Komplett kontoutdrag maj 2025–april 2026 (hela FY)
|
||
- Alla fakturor (Elles)
|
||
- Lönespecifikationer alla månader
|
||
- Momsdeklarationer
|
||
- Skattekontoutdrag
|
||
- Alla transaktioner i aamos-ledger
|
||
- Revisor/redovisningskonsult
|
||
|
||
## WINSTONS LÖNEFÖRSKOTT
|
||
Winston fick 30 000 kr i juni (synligt i Nordea personkonto).
|
||
Kontrakt: 20 000 kr/mån. Differens 10 000 kr = löneförskott.
|
||
MEMORY-notering: löneförskott, ej löneändring.
|
||
|
||
## TEAMROLLER (LÅST, bekräftat upprepade gånger denna session)
|
||
- **Erik Svensson** — VD, grundare, ensam ekonomiskt ansvarig, firmatecknare
|
||
- **Johan Berglund** — CTO, tekniskt ansvarig, styrelsesuppleant
|
||
- **Winston Bjarnemark** — Scholarship Intern, 17 år (f. 090509), 20 000 kr/mån
|
||
- Målsmän: Dennis Bjarnemark + Eva Henriksen (båda godkänt)
|
||
- Tyresö Gymnasium informerade via Eriks personliga brev
|
||
- **Dennis Bjarnemark** — ENDAST Winstons målsman. Ingen operativ roll i bolaget.
|
||
|
||
## VYRA-PROJEKT (nytt, identifierat denna session)
|
||
Live-FPS plattform med spatial närvaro och haptisk återkoppling.
|
||
Ekosystem: Core (FPS/backend/matchmaking) + Haptics (aktuatorer/prototyper) + Hardware (PCB/batteri) + Manufacturing (Shenzhen/Dongguan).
|
||
Sinbad Motor = relevant komponentleverantör för haptikprototyper (coreless motors, micro actuators).
|
||
Mr. Sun = kontakt i Shenzhen, mötte Erik + Johan på Mandarin Oriental 5-6 juni 2026.
|
||
Projektmapp bör skapas under LandveX AB / VYRA/.
|
||
|
||
## AMOS WORKCAMP RECONSTRUCTION PACKAGE
|
||
7-volymers rapport under uppbyggnad:
|
||
- Klar: VOL1-3 (governance, dev log, infra)
|
||
- Pågår: VOL4-7
|
||
- Fil: /home/bernt/.openclaw/workspace/workcamp/
|
||
- Team (KORREKT): Erik + Johan + Winston (Dennis hoppade av INNAN start, finns ej i rapport)
|
||
|
||
## HEPHAISTOS-OMDÖPNING (pågår)
|
||
"Hermes" → HEPHAISTOS i hela systemet. Kollisionsrisk med Nous Hermes-modeller och Hermes message bus.
|