Amazon FBA-Bestand
Der Amazon FBA-Bestand ist das HerzstĂĽck von PROJ-177 und beantwortet eine Frage, die bis Version v1.37.000 niemand konsistent beantworten konnte:
Wie viele Stück meiner Artikel liegen gerade bei Amazon — und was sind sie wert?
Ab v1.37.000 wird der FBA-Bestand nicht mehr nur in der Amazon-Listings-UI versteckt, sondern als echte Stock-Rows im FBA-Warehouse geführt. Dadurch taucht er automatisch in der Bestandsbewertung, im Bestellvorschlag und in der Artikel-Detailseite auf — ohne dass du etwas manuell tun musst.
Wo finde ich den FBA-Bestand? Einstellungen → Lager → dein Amazon-FBA-Lager anklicken → Lagerplatz
FBA-POOL. Oder auf jeder Artikel-Detailseite im Bereich “Lagerbestand”.
Der Sync auf einen Blick
Der Pull läuft einmal täglich automatisch (via pg_cron) sowie on-demand über den Button “FBA-Bestand jetzt aktualisieren” in der Amazon-Integration-Detailseite.
Was genau passiert pro SKU?
| Schritt | Bedeutung |
|---|---|
1. amazon_listings-Row | Wird bei Bedarf direkt im FBA-Pull angelegt (fulfillment_channel='FBA'). So ist der Pull unabhängig vom Listings-Pull. Auto-Mapping via SKU-Match läuft dabei automatisch. |
2. amazon_fba_inventory-Row | Enthält die rohen SP-API-Zahlen pro Fulfillment-Center-Land (Bestand verfügbar, reserviert, inbound). Ein Trigger hält amazon_listings.quantity als Summe über alle Center aktuell. |
| 3. Cost-Lookup | FĂĽr gemappte SKUs wird der Einstandspreis aus dem bevorzugten Lieferanten gelesen (supplier_products.purchase_price, PROJ-138). Ohne Lieferanten-EK wird der Stock-Sync fĂĽr diesen Artikel ĂĽbersprungen und in details.missing_cost[] protokolliert. |
4. sync_amazon_fba_stock | Setzt public.stock.quantity im FBA-Warehouse absolut auf die aktuelle Amazon-Menge und schreibt einen stock_movements-Eintrag mit dem Delta, Typ amazon_fba_sync und landed_cost_eur aus dem Cost-Lookup. Atomar in einer Transaktion. |
| 5. Reconciliation | Am Ende des Runs werden alle FBA-Stock-Rows auf 0 gesetzt, deren Artikel im aktuellen Pull nicht mehr vorkommen (z.B. nach dem letzten Verkauf bei Amazon). So können keine Phantom-Mengen zurückbleiben. |
Was bedeutet FBA-POOL?
FBA ist ein virtuelles Lager — es hat keine physischen Lagerplätze mit
Regalnummern. Trotzdem braucht Flowkom eine Storage-Location, weil public.stock
eine Unique-Constraint auf (workspace_id, product_id, warehouse_id, storage_location_id) hat.
Deshalb bekommt jedes FBA-Warehouse beim Anlegen automatisch eine einzelne
System-Location namens FBA-POOL (Typ blocked, nicht pickbar). Sie dient
als Sammel-Behälter für den gesamten FBA-Bestand dieses Marketplaces.
Read-only — was heißt das?
Das FBA-Warehouse ist als is_read_only=true markiert. Alle manuellen Buchungs-
Endpoints (Wareneingang, Umlagerung, Bestandskorrektur) prĂĽfen dieses Flag und
lehnen Änderungen ab. Der Bestand wird ausschließlich durch den FBA-Pull
gepflegt.
Warum? Wenn ein Mitarbeiter versehentlich Ware ins FBA-Warehouse bucht, überschreibt der nächste Pull diese Buchung sowieso wieder — inklusive Delta-Movement. Das ist nur Lärm in der Audit-Historie. Lieber gleich blockieren.
Bewertung & Bestellvorschlag
Ab v1.37.000 enthalten zwei Reports den FBA-Bestand automatisch:
- Bestandsbewertung (PROJ-74) — Der Lagerwert summiert alle Warehouses,
inklusive FBA. Die Bewertung nutzt FIFO ĂĽber
stock_movements.landed_cost_eur, und dieamazon_fba_sync-Movements tragen den Cost-Lookup-Wert. - Bestellvorschlag (PROJ-22) — Die Ampel “zu wenig Bestand” berücksichtigt jetzt auch, wie viele Stück bei Amazon liegen. Dadurch bestellst du nicht mehr unnötig nach, wenn du noch 200 Stück im FBA hast.
Bekannte Einschränkungen (Interim-Phase)
Der FBA-Bestand ist in v1.37.000 bewusst pragmatisch approximiert. Der volle Umlagerungs-Workflow (WMS → FBA mit echtem FIFO-Pass-through) kommt als separates Ticket PROJ-178.
| Limit | Was heißt das? | Lösung in PROJ-178 |
|---|---|---|
| Doppelzählung WMS + FBA | Wenn du Ware physisch vom WMS zu Amazon schickst und nicht manuell aus dem WMS ausbuchst, wird sie doppelt gezählt. Das UI warnt dich auf der Artikel-Detailseite, wenn beide Lager gleichzeitig Bestand haben. | Echter Umlagerungs-Dialog mit FIFO-Layer-Transfer. |
| Cost-Approximation | Der Bewertungs-Cost ist der aktuelle Lieferanten-EK, nicht der historische Landed Cost der Ware, die damals zu Amazon ging. Bei stabilen Einkaufspreisen ist die Abweichung klein. | Pass-through der tatsächlichen FIFO-Layer aus dem WMS. |
| Keine Retouren-Semantik | Wenn Amazon einen Artikel zurücknimmt, sieht der Pull nur einen positiven Delta — unterschieden wird nicht, ob das eine Neulieferung oder eine Retoure war. | Retouren-Detail in PROJ-137 + echte Event-Semantik in PROJ-178. |
| Unmapped SKUs | Ein Listing ohne flowkom_product_id bekommt keinen Stock-Eintrag. Erst nach dem Mapping wird automatisch im Backfill-Hook die Menge in stock geschrieben. | Bleibt so — erzwingt saubere Artikelzuordnung. |
Tipps fĂĽr den Alltag
- Pflege deine Lieferanten-EKs. Ohne
supplier_products.purchase_pricekein FBA-Stock-Sync für diesen Artikel. Die UI zeigt betroffene SKUs in der Amazon-Listings-UI als “Cost fehlt”. - Mappe neue Listings zügig. Ein frisch gemapptes FBA-Listing bekommt dank Backfill-Hook sofort seinen Stock-Eintrag — ohne Wartezeit bis zum nächsten Cron-Tick.
- Achte auf die Doppelzählungs-Warnung auf der Artikel-Detailseite, bis PROJ-178 live ist. Sie ist dein einziger Hinweis, dass du ggf. manuell korrigieren solltest.
- Nicht in FBA buchen wollen. Die Wareneingangs- und Umlagerungs-Dialoge blenden FBA-Warehouses aus. Das ist Absicht.
Technische Referenz
- RPC —
sync_amazon_fba_stock(workspace_id, product_id, warehouse_id, storage_location_id, target_quantity, cost_eur) - RPC —
reconcile_amazon_fba_stock(workspace_id, warehouse_id, storage_location_id, seen_product_ids[]) - RPC —
ensure_fba_pool_location(warehouse_id) - Movement-Type —
amazon_fba_sync(instock_movements_check_movement_typeaufgenommen) - Cron —
amazon-fba-inventory-pull(täglich, plus manueller Trigger aus der UI) - Code —
src/lib/amazon/inventory-pull-fba.ts,src/lib/amazon/fba-cost-lookup.ts,src/lib/amazon/fba-warehouse-bootstrap.ts