Registro dell’esportazione dati e dell’infrastruttura
Descrizione pubblica aggiornata di ambito, formati, relazioni, limitazioni e paesi dell’infrastruttura usata per gli export dei clienti.
Scarica la specifica di export 1.1 leggibile da macchina (JSON)
1. Scopo e ambito del registro
Il registro descrive l’export standard e portabile dei dati cliente da Nodali. È una specifica operativa, non la pubblicazione dello schema del database di produzione né una versione dei documenti legali. L’ambito dipende dai moduli attivi, dai diritti del cliente e da una richiesta verificata.
2. Modalità attuale di consegna dell’export
L’export standard viene preparato su richiesta di un cliente autorizzato e consegnato tramite download sicuro nel portale o con altro metodo sicuro concordato. La modalità può dipendere da ambito e volume dei dati.
Nella versione attuale non è garantita pubblicamente un’API di export self-service.
Regole, termini e cambio di fornitore ai sensi dell’EU Data Act
3. Categorie di dati esportabili
In base a moduli e autorizzazioni, l’export può includere:
Sedi operative e capacità non hanno un dataset autonomo nella versione 1.1. Se presenti nell’account, sono trasferite negli attributi, dati sorgente o campi personalizzati pertinenti di depositi, rotte, veicoli e altri oggetti collegati; il manifest ne indica la collocazione.
- dati di input forniti dal cliente;
- ordini, spedizioni e identificativi cliente;
- vettori, stati operativi e cronologia rilevante per il cliente;
- rotte, depositi, sedi e capacità;
- dati di costo e fatturazione;
- configurazione tenant, mapping di import e configurazione connettori;
- utenti, ruoli e permessi nel perimetro trasferibile in sicurezza;
- output, report e metadati cliente;
- file caricati dal cliente quando ha diritto a riceverli.
- I duplicati tecnici non devono essere esportati più volte. L’aggiornamento dello stesso oggetto non è un nuovo oggetto se resta la cronologia rilevante.
- Sono esclusi i dati operativi e di sicurezza interni del gestore.
Il catalogo seguente è la specifica tecnica del pacchetto portabile standard. Un export concreto contiene solo i dataset per i quali il cliente dispone di dati e autorizzazioni.
Account, accessi e servizi attivi
| Dataset | File nel pacchetto | Chiave primaria | Campi | Relazioni |
|---|---|---|---|---|
tenant |
account/tenant.ndjson |
id |
8 Campiid, slug, name, status, defaultCurrency, createdAt, updatedAt, deletedAt |
Nessuna relazione |
users |
account/users.ndjson |
id |
6 Campiid, email, fullName, status, createdAt, updatedAt |
Nessuna relazione |
memberships |
account/memberships.ndjson |
id |
6 Campiid, userId, roleCode, status, createdAt, updatedAt |
userId -> users.id |
entitlements |
account/entitlements.ndjson |
id |
6 Campiid, moduleCode, status, enabledAt, createdAt, updatedAt |
Nessuna relazione |
Clienti e dati anagrafici operativi
| Dataset | File nel pacchetto | Chiave primaria | Campi | Relazioni |
|---|---|---|---|---|
customers |
master/customers.ndjson |
id |
11 Campiid, customerId, name, email, phone, status, sourceFeedId, sourceData, createdAt, updatedAt, deletedAt |
sourceFeedId -> import-sources.id |
customer-locations |
master/customer-locations.ndjson |
id |
14 Campiid, 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 Campiid, depotCode, name, address, latitude, longitude, type, sourceFeedId, sourceData, createdAt, updatedAt, deletedAt |
sourceFeedId -> import-sources.id |
carriers |
master/carriers.ndjson |
id |
7 Campiid, code, name, type, customerSpecific, createdAt, updatedAt |
Nessuna relazione |
drivers |
master/drivers.ndjson |
id |
10 Campiid, driverId, name, email, phone, sourceFeedId, sourceData, createdAt, updatedAt, deletedAt |
sourceFeedId -> import-sources.id |
vehicles |
master/vehicles.ndjson |
id |
10 Campiid, vehicleId, registrationNumber, name, vehicleType, sourceFeedId, sourceData, createdAt, updatedAt, deletedAt |
sourceFeedId -> import-sources.id |
Ordini, spedizioni, colli e tracking
| Dataset | File nel pacchetto | Chiave primaria | Campi | Relazioni |
|---|---|---|---|---|
orders |
logistics/orders.ndjson |
id |
15 Campiid, 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 Campiid, 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 Campiid, orderId, shipmentId, relationType, createdAt |
orderId -> orders.id; shipmentId -> shipments.id |
carrier-accounts |
logistics/carrier-accounts.ndjson |
id |
7 Campiid, carrierId, name, authType, status, createdAt, updatedAt |
carrierId -> carriers.id |
parcels |
logistics/parcels.ndjson |
id |
13 Campiid, 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 Campiid, 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 |
Rotte, fermate e telematica
| Dataset | File nel pacchetto | Chiave primaria | Campi | Relazioni |
|---|---|---|---|---|
routes |
operations/routes.ndjson |
id |
19 Campiid, 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 Campiid, 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 Campiid, 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 Campiid, routeId, telematicsActivityId, driverId, vehicleId, matchMethod, confidence, allocatedDistanceKm, allocatedDurationSeconds, note, createdAt, updatedAt |
routeId -> routes.id; telematicsActivityId -> telematics-activities.id; driverId -> drivers.id; vehicleId -> vehicles.id |
Costi ed eccezioni operative
| Dataset | File nel pacchetto | Chiave primaria | Campi | Relazioni |
|---|---|---|---|---|
costs |
finance/costs.ndjson |
id |
19 Campiid, 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 Campiid, 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 |
Campi personalizzati e riferimenti esterni
| Dataset | File nel pacchetto | Chiave primaria | Campi | Relazioni |
|---|---|---|---|---|
external-references |
extensions/external-references.ndjson |
id |
9 Campiid, 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 Campiid, entityType, key, label, description, dataType, visibleInReports, searchable, filterable, createdAt, updatedAt, deletedAt |
Nessuna relazione |
custom-field-values |
extensions/custom-field-values.ndjson |
id |
7 Campiid, definitionId, entityType, entityId, value, createdAt, updatedAt |
definitionId -> custom-field-definitions.id; entityId -> entity identified by entityType |
Integrazioni, import, mapping e matching
| Dataset | File nel pacchetto | Chiave primaria | Campi | Relazioni |
|---|---|---|---|---|
integrations |
integrations/integrations.ndjson |
id |
10 Campiid, type, name, status, billingStatus, activeFrom, activeTo, portableConfiguration, createdAt, updatedAt |
Nessuna relazione |
import-sources |
integrations/import-sources.ndjson |
id |
18 Campiid, 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 Campiid, 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 Campiid, importSourceId, triggerType, status, startedAt, finishedAt, recordsReceived, recordsValid, recordsWarning, recordsFailed, message, createdAt, updatedAt |
importSourceId -> import-sources.id |
import-files |
integrations/import-files.ndjson |
id |
15 Campiid, 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 Campiid, 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 Campiid, 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 Campiid, 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 Campiid, importSourceId, name, leftSource, leftEntityType, leftField, rightSource, rightEntityType, rightField, targetEntity, matchType, configuration, priority, confidenceThreshold, enabled, createdAt, updatedAt |
importSourceId -> import-sources.id |
Report e cronologia export
| Dataset | File nel pacchetto | Chiave primaria | Campi | Relazioni |
|---|---|---|---|---|
report-definitions |
reports/report-definitions.ndjson |
id |
9 Campiid, name, module, queryConfiguration, columnsConfiguration, filtersConfiguration, createdByUserId, createdAt, updatedAt |
createdByUserId -> users.id |
scheduled-reports |
reports/scheduled-reports.ndjson |
id |
9 Campiid, reportDefinitionId, frequency, recipients, format, enabled, lastSentAt, createdAt, updatedAt |
reportDefinitionId -> report-definitions.id |
export-jobs |
reports/export-jobs.ndjson |
id |
8 Campiid, reportDefinitionId, exportType, format, status, createdByUserId, createdAt, finishedAt |
reportDefinitionId -> report-definitions.id; createdByUserId -> users.id |
Abbonamenti, utilizzo, fatture e pagamenti
| Dataset | File nel pacchetto | Chiave primaria | Campi | Relazioni |
|---|---|---|---|---|
billing-profile |
billing/billing-profile.ndjson |
tenantId |
19 CampitenantId, 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 Campiid, provider, type, cardBrand, cardLast4, cardExpiryMonth, cardExpiryYear, status, default, testMode, removedAt, createdAt, updatedAt |
Nessuna relazione |
subscriptions |
billing/subscriptions.ndjson |
id |
17 Campiid, 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 Campiid, productType, productCode, action, activeTo, unitPrice, currency, prorated, createdByUserId, createdAt |
createdByUserId -> users.id |
monthly-usage |
billing/monthly-usage.ndjson |
id |
9 Campiid, periodStart, periodEnd, processedUnits, orders, shipments, parcels, createdAt, updatedAt |
Nessuna relazione |
subscription-usage-segments |
billing/subscription-usage-segments.ndjson |
id |
15 Campiid, subscriptionId, periodStart, periodEnd, activeFrom, activeTo, billableDays, periodDays, monthlyUnitPrice, accruedAmount, currency, status, billingItemKey, createdAt, updatedAt |
subscriptionId -> subscriptions.id |
invoices |
billing/invoices.ndjson |
id |
29 Campiid, 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 |
Nessuna relazione |
invoice-items |
billing/invoice-items.ndjson |
id |
21 Campiid, 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 Campiid, 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 Campiid, paymentId, invoiceId, provider, providerRefundId, status, amount, currency, reason, requestedByUserId, requestedAt, processedAt, createdAt, updatedAt |
paymentId -> payments.id; invoiceId -> invoices.id; requestedByUserId -> users.id |
File originali del cliente
| Dataset | File nel pacchetto | Chiave primaria | Campi | Relazioni |
|---|---|---|---|---|
file-index |
files/index.ndjson |
id |
9 Campiid, importFileId, originalFilename, packagePath, mediaType, sizeBytes, sha256, createdAt, rawExpiresAt |
importFileId -> import-files.id |
original-files |
files/original/* |
packagePath |
1 Campibinary content in the original retained format |
packagePath -> file-index.packagePath |
4. File e formati di output
Il manifest indica versione, ambito, dataset inclusi e omessi, conteggi, avvisi e checksum.
- Pacchetto: ZIP.
- Manifest: manifest.json in UTF-8.
- Dataset strutturati: JSON Lines (NDJSON), un oggetto per riga.
- File originali conservati: formato originale in files/original/.
- Data e ora: RFC 3339 / ISO 8601 con offset; data YYYY-MM-DD.
- Numeri a precisione fissa come stringhe con punto; importi con valuta ISO 4217.
- Checksum SHA-256 di ogni file nel manifest.
5. Relazioni tra oggetti
Ordini, spedizioni, clienti, vettori, rotte, sedi e altri oggetti sono collegati da identificativi stabili e riferimenti descritti nel manifest. La cronologia rilevante è conservata senza trattare ogni aggiornamento tecnico come nuovo oggetto.
6. Versione del formato di export
La versione 1.1 del registro e del formato di export è in vigore dal 22/07/2026 ed è distinta dalle versioni contrattuali. Modifiche a nomi dei file, campi obbligatori, significato o relazioni richiedono una nuova versione; un campo opzionale può essere aggiunto mantenendo la compatibilità.
7. Limitazioni note
- Sono inclusi solo dati dei moduli attivi e nei limiti dei diritti del cliente.
- Export grandi o complessi possono richiedere una consegna sicura concordata individualmente.
- Non sono garantite un’API self-service né una tempistica fissa.
- Codice sorgente, algoritmi, log di sicurezza interni, credenziali e dati di altri clienti sono esclusi.
- Il registro non è lo schema completo del database di produzione.
8. Infrastruttura e giurisdizione
L’applicazione e PostgreSQL funzionano in Docker su un VPS VEDOS (già WEDOS) nella Repubblica Ceca. I backup sono conservati su un NAS di proprietà presso la sede di Progity nella Repubblica Ceca. Tutto il trattamento indicato è quindi soggetto alla giurisdizione ceca; non sono pubblicati IP, indirizzo fisico preciso, credenziali o topologia di rete.
| Tipo di infrastruttura | Paese / giurisdizione | UE/SEE |
|---|---|---|
| Applicazione in Docker — VEDOS VPS | Repubblica Ceca | Sì |
| PostgreSQL in Docker — VEDOS VPS | Repubblica Ceca | Sì |
| Backup — NAS proprio presso la sede di Progity | Repubblica Ceca | Sì |
L’accesso è controllato mediante ruoli e permessi; la comunicazione client–server usa HTTPS.
Le richieste delle autorità sono sottoposte a valutazione legale. I dati non sono forniti alle autorità di paesi terzi in violazione del diritto UE o dello Stato membro competente; si applicano misure tecniche, organizzative e contrattuali proporzionate.
9. Cronologia delle modifiche
- 22/07/2026 — versione 1.1: pubblicati formato ZIP/JSONL e catalogo di dataset, campi, relazioni ed esclusioni di sicurezza.
- 21/07/2026 — versione 1.0: prima pubblicazione.
10. Contatto
La richiesta di export o una domanda sul registro può essere inviata da un account autorizzato del portale o a hello@noda.li. La richiesta può essere ragionevolmente verificata prima della consegna.