Register für Datenexport und Infrastruktur
Aktuelle öffentliche Beschreibung von Umfang, Formaten, Beziehungen, Einschränkungen und Infrastrukturstaaten für Kundendatenexporte.
Maschinenlesbare Exportspezifikation 1.1 herunterladen (JSON)
1. Zweck und Umfang des Registers
Dieses Register beschreibt den standardmäßigen portablen Export von Kundendaten aus Nodali. Es ist eine betriebliche Spezifikation, keine Veröffentlichung des Produktionsdatenbankschemas und keine Fassung der Rechtstexte. Der konkrete Umfang hängt von aktivierten Modulen, Kundenrechten und einem geprüften Antrag ab.
2. Aktuelle Bereitstellung des Exports
Ein Standardexport wird auf Antrag eines berechtigten Kunden vorbereitet und über einen sicheren Download im Portal oder auf einem anderen vereinbarten sicheren Weg bereitgestellt. Der Übertragungsweg kann von Umfang und Datenmenge abhängen.
Eine Self-Service-Export-API wird in der aktuellen Version nicht öffentlich garantiert.
3. Kategorien exportierbarer Daten
Je nach Modulen und Berechtigungen kann der Export insbesondere enthalten:
Betriebe und Kapazitäten bilden in Version 1.1 keinen eigenen Datensatz. Soweit sie im Konto vorhanden sind, werden sie über einschlägige Attribute, Quelldaten oder benutzerdefinierte Felder von Depots, Routen, Fahrzeugen und verbundenen Objekten übertragen; das Manifest nennt ihre Einordnung.
- vom Kunden bereitgestellte Eingabedaten;
- Aufträge, Sendungen und Kundenkennungen;
- Carrier, Betriebsstatus und kundenrelevante Historie;
- Routen, Depots, Betriebe und Kapazitäten;
- Kosten- und Abrechnungsdaten;
- Tenant-Konfiguration, Import-Mappings und Konnektor-Konfiguration;
- Benutzer, Rollen und Rechte im sicher portablen Umfang;
- Ergebnisse, Berichte und Kundenmetadaten;
- hochgeladene Dateien, soweit ein Herausgaberecht besteht.
- Technische Duplikate müssen nicht mehrfach exportiert werden. Aktualisierungen desselben Objekts sind keine neuen Objekte, wenn die relevante Historie erhalten bleibt.
- Interne Betriebs- und Sicherheitsdaten des Betreibers sind ausgeschlossen.
Der folgende Katalog ist die technische Spezifikation des standardmäßigen portablen Pakets. Ein konkreter Export enthält nur Datensätze, für die der Kunde Daten und Berechtigungen besitzt.
Konto, Zugriffe und aktivierte Dienste
| Datensatz | Paketdatei | Primärschlüssel | Felder | Beziehungen |
|---|---|---|---|---|
tenant |
account/tenant.ndjson |
id |
8 Felderid, slug, name, status, defaultCurrency, createdAt, updatedAt, deletedAt |
Keine Beziehungen |
users |
account/users.ndjson |
id |
6 Felderid, email, fullName, status, createdAt, updatedAt |
Keine Beziehungen |
memberships |
account/memberships.ndjson |
id |
6 Felderid, userId, roleCode, status, createdAt, updatedAt |
userId -> users.id |
entitlements |
account/entitlements.ndjson |
id |
6 Felderid, moduleCode, status, enabledAt, createdAt, updatedAt |
Keine Beziehungen |
Kunden und operative Stammdaten
| Datensatz | Paketdatei | Primärschlüssel | Felder | Beziehungen |
|---|---|---|---|---|
customers |
master/customers.ndjson |
id |
11 Felderid, customerId, name, email, phone, status, sourceFeedId, sourceData, createdAt, updatedAt, deletedAt |
sourceFeedId -> import-sources.id |
customer-locations |
master/customer-locations.ndjson |
id |
14 Felderid, customerId, locationCode, name, address, latitude, longitude, defaultUnloadingMinutes, accessNote, sourceFeedId, sourceData, createdAt, updatedAt, deletedAt |
customerId -> customers.id; sourceFeedId -> import-sources.id |
depots |
master/depots.ndjson |
id |
12 Felderid, depotCode, name, address, latitude, longitude, type, sourceFeedId, sourceData, createdAt, updatedAt, deletedAt |
sourceFeedId -> import-sources.id |
carriers |
master/carriers.ndjson |
id |
7 Felderid, code, name, type, customerSpecific, createdAt, updatedAt |
Keine Beziehungen |
drivers |
master/drivers.ndjson |
id |
10 Felderid, driverId, name, email, phone, sourceFeedId, sourceData, createdAt, updatedAt, deletedAt |
sourceFeedId -> import-sources.id |
vehicles |
master/vehicles.ndjson |
id |
10 Felderid, vehicleId, registrationNumber, name, vehicleType, sourceFeedId, sourceData, createdAt, updatedAt, deletedAt |
sourceFeedId -> import-sources.id |
Aufträge, Sendungen, Pakete und Tracking
| Datensatz | Paketdatei | Primärschlüssel | Felder | Beziehungen |
|---|---|---|---|---|
orders |
logistics/orders.ndjson |
id |
15 Felderid, orderId, customerId, customerLocationId, depotId, status, orderCreatedAt, promisedDeliveryAt, sourceFeedId, firstSeenAt, lastSeenAt, sourceData, createdAt, updatedAt, deletedAt |
customerId -> customers.id; customerLocationId -> customer-locations.id; depotId -> depots.id; sourceFeedId -> import-sources.id |
shipments |
logistics/shipments.ndjson |
id |
14 Felderid, shipmentId, status, carrierId, shippingMethod, originDepotId, promisedDeliveryAt, handedOverAt, deliveredAt, sourceFeedId, sourceData, createdAt, updatedAt, deletedAt |
carrierId -> carriers.id; originDepotId -> depots.id; sourceFeedId -> import-sources.id |
order-shipments |
logistics/order-shipments.ndjson |
id |
5 Felderid, orderId, shipmentId, relationType, createdAt |
orderId -> orders.id; shipmentId -> shipments.id |
carrier-accounts |
logistics/carrier-accounts.ndjson |
id |
7 Felderid, carrierId, name, authType, status, createdAt, updatedAt |
carrierId -> carriers.id |
parcels |
logistics/parcels.ndjson |
id |
13 Felderid, shipmentId, carrierId, carrierAccountId, trackingNumber, status, lastTrackingEventAt, deliveredAt, sourceFeedId, sourceData, createdAt, updatedAt, deletedAt |
shipmentId -> shipments.id; carrierId -> carriers.id; carrierAccountId -> carrier-accounts.id; sourceFeedId -> import-sources.id |
tracking-events |
logistics/tracking-events.ndjson |
id |
13 Felderid, parcelId, carrierId, carrierAccountId, trackingNumber, eventTime, rawStatus, normalizedStatus, location, countryCode, sourceFeedId, sourceData, createdAt |
parcelId -> parcels.id; carrierId -> carriers.id; carrierAccountId -> carrier-accounts.id; sourceFeedId -> import-sources.id |
Routen, Stopps und Telematik
| Datensatz | Paketdatei | Primärschlüssel | Felder | Beziehungen |
|---|---|---|---|---|
routes |
operations/routes.ndjson |
id |
19 Felderid, routeId, routeCode, routeDate, depotId, driverId, vehicleId, status, plannedStartAt, plannedEndAt, actualStartAt, actualEndAt, plannedDistanceKm, actualDistanceKm, sourceFeedId, sourceData, createdAt, updatedAt, deletedAt |
depotId -> depots.id; driverId -> drivers.id; vehicleId -> vehicles.id; sourceFeedId -> import-sources.id |
route-stops |
operations/route-stops.ndjson |
id |
17 Felderid, routeId, orderId, customerLocationId, sequence, stopType, plannedArrivalAt, actualArrivalAt, plannedDepartureAt, actualDepartureAt, address, latitude, longitude, status, sourceData, createdAt, updatedAt |
routeId -> routes.id; orderId -> orders.id; customerLocationId -> customer-locations.id |
telematics-activities |
operations/telematics-activities.ndjson |
id |
13 Felderid, driverId, vehicleId, activityDate, startedAt, finishedAt, distanceKm, durationSeconds, engineOnSeconds, sourceFeedId, sourceData, createdAt, updatedAt |
driverId -> drivers.id; vehicleId -> vehicles.id; sourceFeedId -> import-sources.id |
route-activity-matches |
operations/route-activity-matches.ndjson |
id |
12 Felderid, routeId, telematicsActivityId, driverId, vehicleId, matchMethod, confidence, allocatedDistanceKm, allocatedDurationSeconds, note, createdAt, updatedAt |
routeId -> routes.id; telematicsActivityId -> telematics-activities.id; driverId -> drivers.id; vehicleId -> vehicles.id |
Kosten und operative Ausnahmen
| Datensatz | Paketdatei | Primärschlüssel | Felder | Beziehungen |
|---|---|---|---|---|
costs |
finance/costs.ndjson |
id |
19 Felderid, costId, relatedEntityType, relatedEntityId, orderId, shipmentId, parcelId, routeId, carrierId, depotId, customerId, costType, amount, currency, costDate, sourceFeedId, sourceData, createdAt, updatedAt |
orderId -> orders.id; shipmentId -> shipments.id; parcelId -> parcels.id; routeId -> routes.id; carrierId -> carriers.id; depotId -> depots.id; customerId -> customers.id; sourceFeedId -> import-sources.id |
exceptions |
quality/exceptions.ndjson |
id |
18 Felderid, entityType, entityId, orderId, shipmentId, parcelId, routeId, carrierId, type, severity, status, message, detectedAt, resolvedAt, source, details, createdAt, updatedAt |
orderId -> orders.id; shipmentId -> shipments.id; parcelId -> parcels.id; routeId -> routes.id; carrierId -> carriers.id |
Benutzerdefinierte Felder und externe Referenzen
| Datensatz | Paketdatei | Primärschlüssel | Felder | Beziehungen |
|---|---|---|---|---|
external-references |
extensions/external-references.ndjson |
id |
9 Felderid, entityType, entityId, sourceFeedId, sourceSystemName, externalKey, externalValue, createdAt, updatedAt |
sourceFeedId -> import-sources.id; entityId -> entity identified by entityType |
custom-field-definitions |
extensions/custom-field-definitions.ndjson |
id |
12 Felderid, entityType, key, label, description, dataType, visibleInReports, searchable, filterable, createdAt, updatedAt, deletedAt |
Keine Beziehungen |
custom-field-values |
extensions/custom-field-values.ndjson |
id |
7 Felderid, definitionId, entityType, entityId, value, createdAt, updatedAt |
definitionId -> custom-field-definitions.id; entityId -> entity identified by entityType |
Integrationen, Importe, Mapping und Matching
| Datensatz | Paketdatei | Primärschlüssel | Felder | Beziehungen |
|---|---|---|---|---|
integrations |
integrations/integrations.ndjson |
id |
10 Felderid, type, name, status, billingStatus, activeFrom, activeTo, portableConfiguration, createdAt, updatedAt |
Keine Beziehungen |
import-sources |
integrations/import-sources.ndjson |
id |
18 Felderid, integrationId, name, description, connectorType, status, sourceLabel, rawRetentionDays, dependencyTimeoutHours, allowedSenders, expectedFrequency, lastReceivedAt, lastProcessedAt, activeFrom, activeTo, createdAt, updatedAt, deletedAt |
integrationId -> integrations.id |
import-file-rules |
integrations/import-file-rules.ndjson |
id |
12 Felderid, importSourceId, name, filenamePattern, fileType, targetEntity, mappingProfileId, required, enabled, sortOrder, createdAt, updatedAt |
importSourceId -> import-sources.id; mappingProfileId -> mapping-profiles.id |
import-runs |
integrations/import-runs.ndjson |
id |
13 Felderid, importSourceId, triggerType, status, startedAt, finishedAt, recordsReceived, recordsValid, recordsWarning, recordsFailed, message, createdAt, updatedAt |
importSourceId -> import-sources.id |
import-files |
integrations/import-files.ndjson |
id |
15 Felderid, importRunId, importSourceId, fileRuleId, originalFilename, fileType, contentType, sizeBytes, sha256, status, errorMessage, rawExpiresAt, rawDeletedAt, createdAt, updatedAt |
importRunId -> import-runs.id; importSourceId -> import-sources.id; fileRuleId -> import-file-rules.id |
import-row-results |
integrations/import-row-results.ndjson |
id |
13 Felderid, importFileId, rowNumber, status, targetEntity, targetEntityId, sourceData, mappedData, errors, dependencyWaitStartedAt, rawExpiresAt, rawDeletedAt, createdAt |
importFileId -> import-files.id; targetEntityId -> entity identified by targetEntity |
mapping-profiles |
integrations/mapping-profiles.ndjson |
id |
17 Felderid, importSourceId, name, targetEntity, status, version, delimiter, decimalSeparator, dateFormat, timezone, identityTargetField, identityRequired, identityConfiguration, dependencyConfiguration, activatedAt, createdAt, updatedAt |
importSourceId -> import-sources.id |
mapping-rules |
integrations/mapping-rules.ndjson |
id |
16 Felderid, mappingProfileId, sourceField, targetType, targetField, customFieldDefinitionId, externalKey, transformType, transformConfiguration, required, identity, defaultValue, visibleInReports, sortOrder, createdAt, updatedAt |
mappingProfileId -> mapping-profiles.id; customFieldDefinitionId -> custom-field-definitions.id |
matching-rules |
integrations/matching-rules.ndjson |
id |
17 Felderid, importSourceId, name, leftSource, leftEntityType, leftField, rightSource, rightEntityType, rightField, targetEntity, matchType, configuration, priority, confidenceThreshold, enabled, createdAt, updatedAt |
importSourceId -> import-sources.id |
Berichte und Exporthistorie
| Datensatz | Paketdatei | Primärschlüssel | Felder | Beziehungen |
|---|---|---|---|---|
report-definitions |
reports/report-definitions.ndjson |
id |
9 Felderid, name, module, queryConfiguration, columnsConfiguration, filtersConfiguration, createdByUserId, createdAt, updatedAt |
createdByUserId -> users.id |
scheduled-reports |
reports/scheduled-reports.ndjson |
id |
9 Felderid, reportDefinitionId, frequency, recipients, format, enabled, lastSentAt, createdAt, updatedAt |
reportDefinitionId -> report-definitions.id |
export-jobs |
reports/export-jobs.ndjson |
id |
8 Felderid, reportDefinitionId, exportType, format, status, createdByUserId, createdAt, finishedAt |
reportDefinitionId -> report-definitions.id; createdByUserId -> users.id |
Abonnements, Nutzung, Rechnungen und Zahlungen
| Datensatz | Paketdatei | Primärschlüssel | Felder | Beziehungen |
|---|---|---|---|---|
billing-profile |
billing/billing-profile.ndjson |
tenantId |
19 FeldertenantId, billingName, companyId, vatId, billingEmail, contactEmail, contactPhone, billingPhone, billingAddress, registrationCountryCode, billingCountryCode, customerType, invoiceLanguage, taxRegime, paymentMode, currency, paymentTermsDays, createdAt, updatedAt |
tenantId -> tenant.id |
payment-methods |
billing/payment-methods.ndjson |
id |
13 Felderid, provider, type, cardBrand, cardLast4, cardExpiryMonth, cardExpiryYear, status, default, testMode, removedAt, createdAt, updatedAt |
Keine Beziehungen |
subscriptions |
billing/subscriptions.ndjson |
id |
17 Felderid, productType, productCode, status, quantity, unitPrice, currency, activeFrom, currentPeriodStart, currentPeriodEnd, cancelAtPeriodEnd, cancelRequestedAt, cancelledAt, endedAt, createdByUserId, createdAt, updatedAt |
createdByUserId -> users.id |
subscription-events |
billing/subscription-events.ndjson |
id |
10 Felderid, productType, productCode, action, activeTo, unitPrice, currency, prorated, createdByUserId, createdAt |
createdByUserId -> users.id |
monthly-usage |
billing/monthly-usage.ndjson |
id |
9 Felderid, periodStart, periodEnd, processedUnits, orders, shipments, parcels, createdAt, updatedAt |
Keine Beziehungen |
subscription-usage-segments |
billing/subscription-usage-segments.ndjson |
id |
15 Felderid, subscriptionId, periodStart, periodEnd, activeFrom, activeTo, billableDays, periodDays, monthlyUnitPrice, accruedAmount, currency, status, billingItemKey, createdAt, updatedAt |
subscriptionId -> subscriptions.id |
invoices |
billing/invoices.ndjson |
id |
29 Felderid, invoiceNumber, externalInvoiceId, invoiceType, status, subtotal, tax, total, currency, accountingCurrency, exchangeRate, issuedAt, dueAt, taxableSupplyAt, servicePeriodStart, servicePeriodEnd, paidAt, cancelledAt, variableSymbol, paymentReference, invoiceLanguage, taxRegime, reverseCharge, supplier, customer, vatValidationStatus, taxLegalNoteCode, taxReasonCode, createdAt |
Keine Beziehungen |
invoice-items |
billing/invoice-items.ndjson |
id |
21 Felderid, invoiceId, lineNumber, productType, productCode, description, servicePeriodStart, servicePeriodEnd, quantity, unit, unitPrice, netAmount, taxRate, taxAmount, grossAmount, currency, prorated, subscriptionId, subscriptionEventId, metadata, createdAt |
invoiceId -> invoices.id; subscriptionId -> subscriptions.id; subscriptionEventId -> subscription-events.id |
payments |
billing/payments.ndjson |
id |
15 Felderid, invoiceId, provider, providerPaymentId, type, status, amount, currency, description, testMode, paidAt, cancelledAt, failedAt, createdAt, updatedAt |
invoiceId -> invoices.id |
payment-refunds |
billing/payment-refunds.ndjson |
id |
14 Felderid, paymentId, invoiceId, provider, providerRefundId, status, amount, currency, reason, requestedByUserId, requestedAt, processedAt, createdAt, updatedAt |
paymentId -> payments.id; invoiceId -> invoices.id; requestedByUserId -> users.id |
Ursprüngliche Kundendateien
| Datensatz | Paketdatei | Primärschlüssel | Felder | Beziehungen |
|---|---|---|---|---|
file-index |
files/index.ndjson |
id |
9 Felderid, importFileId, originalFilename, packagePath, mediaType, sizeBytes, sha256, createdAt, rawExpiresAt |
importFileId -> import-files.id |
original-files |
files/original/* |
packagePath |
1 Felderbinary content in the original retained format |
packagePath -> file-index.packagePath |
4. Ausgabedateien und Formate
Das Manifest nennt Spezifikationsversion, Umfang, alle enthaltenen und ausgelassenen Datensätze, Datensatzzahlen, Warnungen und Prüfsummen.
- Übergabepaket: ZIP.
- Paketmanifest: manifest.json in UTF-8.
- Strukturierte Datensätze: JSON Lines (NDJSON), ein Objekt je Zeile.
- Aufbewahrte Originaldateien: Originalformat unter files/original/.
- Datum und Zeit: RFC 3339 / ISO 8601 mit Offset; Datum YYYY-MM-DD.
- Festkommazahlen als Zeichenketten mit Dezimalpunkt; Geldwerte mit ISO-4217-Währung.
- SHA-256-Prüfsumme jeder Datei im Manifest.
5. Beziehungen zwischen Objekten
Stabile Kennungen und im Manifest beschriebene Referenzen verbinden Aufträge, Sendungen, Kunden, Carrier, Routen, Betriebe und weitere Objekte. Relevante Historie bleibt erhalten, ohne jede technische Aktualisierung als neues Objekt auszugeben.
6. Version des Exportformats
Register- und Exportformatversion 1.1 gilt ab 22.07.2026 und ist von den Vertragsfassungen getrennt. Änderungen an Dateinamen, Pflichtfeldern, Feldbedeutung oder Beziehungen erfordern eine neue Registerversion; optionale Felder können rückwärtskompatibel ergänzt werden.
7. Bekannte Einschränkungen
- Enthalten sind nur Daten aus aktivierten Modulen und im Umfang der Kundenrechte.
- Große oder komplexe Exporte können einen individuell vereinbarten sicheren Übertragungsweg erfordern.
- Weder Self-Service-API noch feste Bereitstellungszeit werden öffentlich garantiert.
- Quellcode, Algorithmen, interne Sicherheitslogs, Zugangsdaten und Daten anderer Kunden sind ausgeschlossen.
- Das Register ist kein vollständiges Produktionsdatenbankschema.
8. Infrastruktur und Rechtsraum
Anwendung und PostgreSQL laufen in Docker auf einem VPS von VEDOS (vormals WEDOS) in der Tschechischen Republik. Backups liegen auf einem eigenen NAS am Sitz von Progity in der Tschechischen Republik. Die genannte Verarbeitung unterliegt damit tschechischer Gerichtsbarkeit; IP-Adressen, genaue Anschrift, Zugangsdaten und Netztopologie werden nicht veröffentlicht.
| Infrastrukturtyp | Staat / Rechtsraum | EU/EWR |
|---|---|---|
| Anwendung in Docker — VEDOS VPS | Tschechische Republik | Ja |
| PostgreSQL in Docker — VEDOS VPS | Tschechische Republik | Ja |
| Backups — eigenes NAS am Sitz von Progity | Tschechische Republik | Ja |
Zugriffe werden über Rollen und Rechte gesteuert; die Client-Server-Kommunikation nutzt HTTPS.
Behördenanfragen werden rechtlich geprüft. Daten werden Drittstaatenbehörden nicht entgegen EU-Recht oder dem Recht des zuständigen Mitgliedstaats bereitgestellt; angemessene technische, organisatorische und vertragliche Maßnahmen werden eingesetzt.
9. Änderungshistorie des Registers
- 22.07.2026 — Version 1.1: konkretes ZIP/JSONL-Format sowie Katalog der Datensätze, Felder, Beziehungen und Sicherheitsausnahmen veröffentlicht.
- 21.07.2026 — Version 1.0: erste Veröffentlichung.
10. Kontakt
Exportanträge und Fragen können über ein berechtigtes Portalkonto oder an hello@noda.li gestellt werden. Vor der Datenfreigabe kann der Antrag angemessen geprüft werden.