# Odoo

> Wie Odoo 19 über die JSON-2-API Los- und Seriennummern an BatteryPass übergibt.

> [!NOTE]
> Diese Seite beschreibt ein Integrationsmuster. BatteryPass liefert keinen Konnektor für Odoo und hat keine Partnerschaft
> mit Odoo S.A.; nichts hier ist eine Freigabe des Herstellers.

Odoo 19 bietet die JSON-2-API: `POST /json/2/<model>/<method>` mit einem API-Schlüssel als Bearer-Token. Seriennummern
sind Datensätze von `stock.lot`, Fertigungsaufträge Datensätze von `mrp.production`. Das Preset `odoo-stock-lot` ordnet
Los- oder Seriennummer und die interne Referenz des Produkts zu; Odoo führt am Los kein Herstelldatum, die Middleware
ergänzt deshalb die Spalte „Manufacturing Date“, etwa aus dem Enddatum des Fertigungsauftrags.

API-Schlüssel haben ein Ablaufdatum: nehmen Sie ihre Rotation in den Betriebsplan auf, wie beim Schlüssel für
BatteryPass. XML-RPC und JSON-RPC sind abgekündigt und fallen mit Odoo 22 (Herbst 2028) beziehungsweise Odoo Online 21.1
weg; bauen Sie keine neuen Integrationen darauf.

Automatisierungsregeln können einen Datensatz als ausgehenden Webhook an eine Adresse senden. Die Nutzlast ist nicht
signiert; behandeln Sie sie deshalb als Hinweis: die Middleware liest den Datensatz über die JSON-2-API, bevor sie
handelt. Danach geht es weiter wie unter [Einheiten aus der Fertigung](https://passport.kabin.sh/docs/de/integrations/workflows/units-from-production).

## Schnittstellen und Prüfstand

- **Hersteller:** Odoo S.A.
- **Cloud:** Odoo Online and Odoo.sh 19
- **On-Premise:** Odoo 19 Community and Enterprise

Odoo 19 bietet die JSON-2-API mit API-Schlüsseln als Bearer-Token; XML-RPC und JSON-RPC sind abgekündigt und fallen mit Odoo 22 (Herbst 2028) beziehungsweise Odoo Online 21.1 weg. API-Schlüssel haben ein Ablaufdatum: die Rotation gehört in den Betriebsplan.

Integrationsmuster, kein Konnektor: BatteryPass liefert keine ERP-Anbindung und ist bei keinem Hersteller zertifiziert.

| Schnittstelle                                                                                                                                                                            | Protokoll | Anmeldung              | Ereignisse                | Objekte                                                                                         | Prüfstand                                          |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ---------------------- | ------------------------- | ----------------------------------------------------------------------------------------------- | -------------------------------------------------- |
| [`JSON-2 API (/json/2/<model>/<method>)`](https://www.odoo.com/documentation/19.0/developer/reference/external_api.html) (Alle Modelle, etwa product.product, stock.lot, mrp.production) | REST      | API-Schlüssel          | keine                     | Produkt-/Materialstamm, Charge/Seriennummer, Fertigungsauftrag, Lieferung/Warenausgang, Retoure | geprüft in der Herstellerdokumentation, 24.10.2026 |
| [`Webhooks (automation rules)`](https://www.odoo.com/documentation/19.0/applications/studio/automated_actions/webhooks.html) (Ausgehende Webhooks aus Automatisierungsregeln)            | REST      | API-Schlüssel          | Webhooks (nicht signiert) | Produkt-/Materialstamm, Charge/Seriennummer, Fertigungsauftrag                                  | geprüft in der Herstellerdokumentation, 24.10.2026 |
| [`XML-RPC and JSON-RPC (deprecated)`](https://www.odoo.com/documentation/19.0/developer/reference/external_api.html) (Ältere externe API)                                                | XML-RPC   | API-Schlüssel, Sitzung | keine                     | Produkt-/Materialstamm, Charge/Seriennummer, Fertigungsauftrag, Lieferung/Warenausgang, Retoure | geprüft in der Herstellerdokumentation, 24.10.2026 |

**Hinweise**

- `Webhooks (automation rules)`: Die Nutzlast ist nicht signiert; bei eingehenden Webhooks ist die geheime URL der Schutz.
- `XML-RPC and JSON-RPC (deprecated)`: Für neue Integrationen nicht mehr verwenden.

**Importvorlagen (Presets): Odoo – Los-/Seriennummern (stock.lot)** (`odoo-stock-lot`): Ein Export des Modells stock.lot aus Odoo mit der internen Referenz des Produkts. Odoo führt am Los kein Herstelldatum; die Middleware ergänzt die Spalte „Manufacturing Date“, zum Beispiel aus dem Enddatum des Fertigungsauftrags.

| Spalte im Export                                                                      | Feld in BatteryPass                                   |
| ------------------------------------------------------------------------------------- | ----------------------------------------------------- |
| `Lot/Serial Number` (auch name, Los-/Seriennummer)                                    | Seriennummer `identification.serial_number`           |
| `Product/Internal Reference` (auch product_id/default_code, Produkt/Interne Referenz) | Modellkennung / SKU `identification.model_identifier` |
| `Manufacturing Date` (auch date_finished, Herstelldatum)                              | Herstellungsdatum `identification.manufacturing_date` |

**Importvorlagen (Presets): Allgemeine CSV-Datei** (`generic-csv`): Für jedes ERP und für Dateien, die eine Middleware selbst schreibt: GTIN, Seriennummer, Herstelldatum, Produktionsstätte (Name oder GLN), Modellversion und Batteriestatus, mit deutschen und englischen Spaltennamen.

| Spalte im Export                                              | Feld in BatteryPass                                   |
| ------------------------------------------------------------- | ----------------------------------------------------- |
| `GTIN` (auch EAN, GTIN-13, GTIN-14)                           | GTIN (GS1) `identification.gtin`                      |
| `Serial number` (auch Seriennummer, serial_number)            | Seriennummer `identification.serial_number`           |
| `Manufacturing date` (auch Herstelldatum, manufacturing_date) | Herstellungsdatum `identification.manufacturing_date` |
| `Facility` (auch Produktionsstätte, Facility GLN, Werk-GLN)   | Herstellungsort `identification.manufacturing_place`  |
| `Model version` (auch Modellversion, model_version)           | Modellversion `model_version`                         |
| `Battery status` (auch Batteriestatus, battery_status)        | Batteriestatus `identification.battery_status`        |

## Abläufe

- [Einheiten aus der Fertigung](https://passport.kabin.sh/docs/de/integrations/workflows/units-from-production.md): Seriennummern aus Fertigungsrückmeldung oder Wareneingang werden als Import bereitgestellt; Mitglieder prüfen, übernehmen und geben frei, bevor ein Pass erscheint. Scopes des Schlüssels: import
- [Pass-Links zurück ins ERP](https://passport.kabin.sh/docs/de/integrations/workflows/passport-links-to-erp.md): Die Middleware folgt dem Änderungsfeed und schreibt den GS1 Digital Link und den Passstatus an den Seriennummernsatz im ERP, damit Etiketten und Lieferpapiere ihn tragen. Scopes des Schlüssels: read
- [Rücksendungen und Reparaturen als Lebenszyklus-Ereignisse](https://passport.kabin.sh/docs/de/integrations/workflows/returns-and-repairs.md): Abgeschlossene Reparaturen, Prüfungen und Komponententausche aus Service- oder Retourenaufträgen erscheinen als Ereignisse in der Historie der Einheit. Scopes des Schlüssels: read, condition
- [Produktänderung führt zu neuer Modellversion](https://passport.kabin.sh/docs/de/integrations/workflows/product-change.md): Eine Änderung am Produktstamm im ERP löst eine Benachrichtigung aus; ein Mitglied legt in BatteryPass eine neue Modellversion an. Deklarierte Daten werden nie automatisch geschrieben. Scopes des Schlüssels: read
