Registro de exportación de datos e infraestructura
Descripción pública actual del alcance, formatos, relaciones, limitaciones y países de infraestructura usados para exportar datos de clientes.
Descargar la especificación de exportación 1.1 legible por máquina (JSON)
1. Finalidad y alcance del registro
El registro describe la exportación estándar y portable de datos de clientes desde Nodali. Es una especificación operativa, no la publicación del esquema de producción ni una versión de los documentos jurídicos. El alcance depende de los módulos activos, los derechos del cliente y una solicitud verificada.
2. Método actual de entrega de la exportación
La exportación estándar se prepara a petición de un cliente autorizado y se entrega mediante descarga segura en el portal u otro método seguro acordado. El método puede depender del alcance y volumen de los datos.
En la versión actual no se garantiza públicamente una API de exportación autoservicio.
Reglas, plazos y cambio de proveedor conforme al EU Data Act
3. Categorías de datos exportables
Según los módulos y permisos, puede incluir:
Los centros operativos y capacidades no tienen un conjunto independiente en la versión 1.1. Si existen en la cuenta, se transfieren mediante los atributos, datos de origen o campos personalizados pertinentes de depósitos, rutas, vehículos y otros objetos relacionados; el manifiesto indica dónde se incluyen.
- datos de entrada proporcionados por el cliente;
- pedidos, envíos e identificadores de clientes;
- transportistas, estados operativos e historial relevante para el cliente;
- rutas, depósitos, centros y capacidades;
- datos de costes y facturación;
- configuración del tenant, mapeos de importación y configuración de conectores;
- usuarios, roles y permisos en un alcance transferible de forma segura;
- resultados, informes y metadatos del cliente;
- archivos subidos por el cliente cuando tenga derecho a recibirlos.
- Los duplicados técnicos no tienen que exportarse repetidamente. Una actualización del mismo objeto no es un objeto nuevo si se conserva el historial relevante.
- Se excluyen los datos operativos y de seguridad internos del operador.
El catálogo siguiente es la especificación técnica del paquete portátil estándar. Una exportación concreta solo contiene los conjuntos para los que el cliente tiene datos y autorización.
Cuenta, accesos y servicios activos
| Conjunto de datos | Archivo del paquete | Clave primaria | Campos | Relaciones |
|---|---|---|---|---|
tenant |
account/tenant.ndjson |
id |
8 Camposid, slug, name, status, defaultCurrency, createdAt, updatedAt, deletedAt |
Sin relaciones |
users |
account/users.ndjson |
id |
6 Camposid, email, fullName, status, createdAt, updatedAt |
Sin relaciones |
memberships |
account/memberships.ndjson |
id |
6 Camposid, userId, roleCode, status, createdAt, updatedAt |
userId -> users.id |
entitlements |
account/entitlements.ndjson |
id |
6 Camposid, moduleCode, status, enabledAt, createdAt, updatedAt |
Sin relaciones |
Clientes y datos maestros operativos
| Conjunto de datos | Archivo del paquete | Clave primaria | Campos | Relaciones |
|---|---|---|---|---|
customers |
master/customers.ndjson |
id |
11 Camposid, customerId, name, email, phone, status, sourceFeedId, sourceData, createdAt, updatedAt, deletedAt |
sourceFeedId -> import-sources.id |
customer-locations |
master/customer-locations.ndjson |
id |
14 Camposid, 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 Camposid, depotCode, name, address, latitude, longitude, type, sourceFeedId, sourceData, createdAt, updatedAt, deletedAt |
sourceFeedId -> import-sources.id |
carriers |
master/carriers.ndjson |
id |
7 Camposid, code, name, type, customerSpecific, createdAt, updatedAt |
Sin relaciones |
drivers |
master/drivers.ndjson |
id |
10 Camposid, driverId, name, email, phone, sourceFeedId, sourceData, createdAt, updatedAt, deletedAt |
sourceFeedId -> import-sources.id |
vehicles |
master/vehicles.ndjson |
id |
10 Camposid, vehicleId, registrationNumber, name, vehicleType, sourceFeedId, sourceData, createdAt, updatedAt, deletedAt |
sourceFeedId -> import-sources.id |
Pedidos, envíos, paquetes y seguimiento
| Conjunto de datos | Archivo del paquete | Clave primaria | Campos | Relaciones |
|---|---|---|---|---|
orders |
logistics/orders.ndjson |
id |
15 Camposid, 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 Camposid, 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 Camposid, orderId, shipmentId, relationType, createdAt |
orderId -> orders.id; shipmentId -> shipments.id |
carrier-accounts |
logistics/carrier-accounts.ndjson |
id |
7 Camposid, carrierId, name, authType, status, createdAt, updatedAt |
carrierId -> carriers.id |
parcels |
logistics/parcels.ndjson |
id |
13 Camposid, 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 Camposid, 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 |
Rutas, paradas y telemática
| Conjunto de datos | Archivo del paquete | Clave primaria | Campos | Relaciones |
|---|---|---|---|---|
routes |
operations/routes.ndjson |
id |
19 Camposid, 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 Camposid, 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 Camposid, 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 Camposid, routeId, telematicsActivityId, driverId, vehicleId, matchMethod, confidence, allocatedDistanceKm, allocatedDurationSeconds, note, createdAt, updatedAt |
routeId -> routes.id; telematicsActivityId -> telematics-activities.id; driverId -> drivers.id; vehicleId -> vehicles.id |
Costes y excepciones operativas
| Conjunto de datos | Archivo del paquete | Clave primaria | Campos | Relaciones |
|---|---|---|---|---|
costs |
finance/costs.ndjson |
id |
19 Camposid, 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 Camposid, 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 |
Campos personalizados y referencias externas
| Conjunto de datos | Archivo del paquete | Clave primaria | Campos | Relaciones |
|---|---|---|---|---|
external-references |
extensions/external-references.ndjson |
id |
9 Camposid, 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 Camposid, entityType, key, label, description, dataType, visibleInReports, searchable, filterable, createdAt, updatedAt, deletedAt |
Sin relaciones |
custom-field-values |
extensions/custom-field-values.ndjson |
id |
7 Camposid, definitionId, entityType, entityId, value, createdAt, updatedAt |
definitionId -> custom-field-definitions.id; entityId -> entity identified by entityType |
Integraciones, importaciones, mapeo y matching
| Conjunto de datos | Archivo del paquete | Clave primaria | Campos | Relaciones |
|---|---|---|---|---|
integrations |
integrations/integrations.ndjson |
id |
10 Camposid, type, name, status, billingStatus, activeFrom, activeTo, portableConfiguration, createdAt, updatedAt |
Sin relaciones |
import-sources |
integrations/import-sources.ndjson |
id |
18 Camposid, 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 Camposid, 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 Camposid, importSourceId, triggerType, status, startedAt, finishedAt, recordsReceived, recordsValid, recordsWarning, recordsFailed, message, createdAt, updatedAt |
importSourceId -> import-sources.id |
import-files |
integrations/import-files.ndjson |
id |
15 Camposid, 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 Camposid, 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 Camposid, 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 Camposid, 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 Camposid, importSourceId, name, leftSource, leftEntityType, leftField, rightSource, rightEntityType, rightField, targetEntity, matchType, configuration, priority, confidenceThreshold, enabled, createdAt, updatedAt |
importSourceId -> import-sources.id |
Informes e historial de exportaciones
| Conjunto de datos | Archivo del paquete | Clave primaria | Campos | Relaciones |
|---|---|---|---|---|
report-definitions |
reports/report-definitions.ndjson |
id |
9 Camposid, name, module, queryConfiguration, columnsConfiguration, filtersConfiguration, createdByUserId, createdAt, updatedAt |
createdByUserId -> users.id |
scheduled-reports |
reports/scheduled-reports.ndjson |
id |
9 Camposid, reportDefinitionId, frequency, recipients, format, enabled, lastSentAt, createdAt, updatedAt |
reportDefinitionId -> report-definitions.id |
export-jobs |
reports/export-jobs.ndjson |
id |
8 Camposid, reportDefinitionId, exportType, format, status, createdByUserId, createdAt, finishedAt |
reportDefinitionId -> report-definitions.id; createdByUserId -> users.id |
Suscripciones, uso, facturas y pagos
| Conjunto de datos | Archivo del paquete | Clave primaria | Campos | Relaciones |
|---|---|---|---|---|
billing-profile |
billing/billing-profile.ndjson |
tenantId |
19 CampostenantId, 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 Camposid, provider, type, cardBrand, cardLast4, cardExpiryMonth, cardExpiryYear, status, default, testMode, removedAt, createdAt, updatedAt |
Sin relaciones |
subscriptions |
billing/subscriptions.ndjson |
id |
17 Camposid, 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 Camposid, productType, productCode, action, activeTo, unitPrice, currency, prorated, createdByUserId, createdAt |
createdByUserId -> users.id |
monthly-usage |
billing/monthly-usage.ndjson |
id |
9 Camposid, periodStart, periodEnd, processedUnits, orders, shipments, parcels, createdAt, updatedAt |
Sin relaciones |
subscription-usage-segments |
billing/subscription-usage-segments.ndjson |
id |
15 Camposid, subscriptionId, periodStart, periodEnd, activeFrom, activeTo, billableDays, periodDays, monthlyUnitPrice, accruedAmount, currency, status, billingItemKey, createdAt, updatedAt |
subscriptionId -> subscriptions.id |
invoices |
billing/invoices.ndjson |
id |
29 Camposid, 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 |
Sin relaciones |
invoice-items |
billing/invoice-items.ndjson |
id |
21 Camposid, 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 Camposid, 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 Camposid, paymentId, invoiceId, provider, providerRefundId, status, amount, currency, reason, requestedByUserId, requestedAt, processedAt, createdAt, updatedAt |
paymentId -> payments.id; invoiceId -> invoices.id; requestedByUserId -> users.id |
Archivos originales del cliente
| Conjunto de datos | Archivo del paquete | Clave primaria | Campos | Relaciones |
|---|---|---|---|---|
file-index |
files/index.ndjson |
id |
9 Camposid, importFileId, originalFilename, packagePath, mediaType, sizeBytes, sha256, createdAt, rawExpiresAt |
importFileId -> import-files.id |
original-files |
files/original/* |
packagePath |
1 Camposbinary content in the original retained format |
packagePath -> file-index.packagePath |
4. Archivos y formatos de salida
El manifiesto indica versión, alcance, conjuntos incluidos y omitidos, recuentos, avisos y checksums.
- Paquete de entrega: ZIP.
- Manifiesto: manifest.json en UTF-8.
- Datos estructurados: JSON Lines (NDJSON), un objeto por línea.
- Archivos originales conservados: formato original en files/original/.
- Fecha y hora: RFC 3339 / ISO 8601 con desfase; fecha YYYY-MM-DD.
- Números de precisión fija como cadenas con punto; importes con moneda ISO 4217.
- Checksum SHA-256 de cada archivo en el manifiesto.
5. Relaciones entre objetos
Pedidos, envíos, clientes, transportistas, rutas, centros y otros objetos se vinculan mediante identificadores estables y referencias descritas en el manifiesto. Se conserva el historial relevante sin tratar cada actualización técnica como un objeto nuevo.
6. Versión del formato de exportación
La versión 1.1 del registro y del formato de exportación es vigente desde el 22/07/2026 y es independiente de las versiones contractuales. Cambiar nombres de archivo, campos obligatorios, significado o relaciones exige una nueva versión; puede añadirse un campo opcional de forma retrocompatible.
7. Limitaciones conocidas
- Solo se incluyen datos de módulos activos y dentro de los derechos del cliente.
- Las exportaciones grandes o complejas pueden requerir una entrega segura acordada individualmente.
- No se garantiza una API autoservicio ni un plazo fijo de preparación.
- Se excluyen código fuente, algoritmos, registros internos de seguridad, credenciales y datos de otros clientes.
- El registro no es el esquema completo de la base de producción.
8. Infraestructura y jurisdicción
La aplicación y PostgreSQL se ejecutan en Docker en un VPS de VEDOS (antes WEDOS) en la República Checa. Las copias se almacenan en un NAS propio en la sede de Progity en la República Checa. Todo el tratamiento indicado queda bajo jurisdicción checa; no se publican IP, dirección física exacta, credenciales ni topología de red.
| Tipo de infraestructura | País / jurisdicción | UE/EEE |
|---|---|---|
| Aplicación en Docker — VEDOS VPS | República Checa | Sí |
| PostgreSQL en Docker — VEDOS VPS | República Checa | Sí |
| Copias — NAS propio en la sede de Progity | República Checa | Sí |
El acceso se controla mediante roles y permisos; la comunicación cliente–servidor utiliza HTTPS.
Las solicitudes de autoridades se someten a evaluación jurídica. No se facilitan datos a autoridades de terceros países en contra del Derecho de la UE o del Estado miembro competente; se aplican medidas técnicas, organizativas y contractuales proporcionadas.
9. Historial de cambios del registro
- 22/07/2026 — versión 1.1: publicados el formato ZIP/JSONL y el catálogo de conjuntos, campos, relaciones y exclusiones de seguridad.
- 21/07/2026 — versión 1.0: primera publicación.
10. Contacto
Las solicitudes de exportación o preguntas pueden enviarse desde una cuenta autorizada del portal o a hello@noda.li. La solicitud puede verificarse razonablemente antes de entregar los datos.