Registo de exportação de dados e infraestrutura
Descrição pública atual do âmbito, formatos, relações, limitações e países da infraestrutura usada para exportações de dados dos clientes.
Descarregar a especificação de exportação 1.1 legível por máquina (JSON)
1. Finalidade e âmbito do registo
O registo descreve a exportação standard e portável de dados de clientes do Nodali. É uma especificação operacional, não a publicação do esquema da base de produção nem uma versão dos documentos jurídicos. O âmbito depende dos módulos ativos, dos direitos do cliente e de um pedido verificado.
2. Método atual de disponibilização da exportação
A exportação standard é preparada a pedido de um cliente autorizado e entregue por transferência segura no portal ou por outro método seguro acordado. O método pode depender do âmbito e volume dos dados.
Na versão atual não é garantida publicamente uma API de exportação self-service.
Regras, prazos e mudança de fornecedor ao abrigo do EU Data Act
3. Categorias de dados exportáveis
Consoante os módulos e permissões, pode incluir:
As operações e capacidades não têm um conjunto autónomo na versão 1.1. Quando existam na conta, são transferidas nos atributos, dados de origem ou campos personalizados relevantes de depósitos, rotas, veículos e outros objetos relacionados; o manifesto indica onde estão incluídas.
- dados de entrada fornecidos pelo cliente;
- encomendas, envios e identificadores de clientes;
- transportadoras, estados operacionais e histórico relevante para o cliente;
- rotas, depósitos, locais e capacidades;
- dados de custos e faturação;
- configuração do tenant, mapeamentos de importação e configuração de conectores;
- utilizadores, funções e permissões num âmbito transferível com segurança;
- resultados, relatórios e metadados do cliente;
- ficheiros carregados pelo cliente quando tenha direito a recebê-los.
- Os duplicados técnicos não têm de ser exportados repetidamente. A atualização do mesmo objeto não é um objeto novo se o histórico relevante for preservado.
- Excluem-se dados operacionais e de segurança internos do operador.
O catálogo seguinte é a especificação técnica do pacote portável standard. Uma exportação concreta contém apenas os conjuntos para os quais o cliente tem dados e autorização.
Conta, acessos e serviços ativos
| Conjunto de dados | Ficheiro do pacote | Chave primária | Campos | Relações |
|---|---|---|---|---|
tenant |
account/tenant.ndjson |
id |
8 Camposid, slug, name, status, defaultCurrency, createdAt, updatedAt, deletedAt |
Sem relações |
users |
account/users.ndjson |
id |
6 Camposid, email, fullName, status, createdAt, updatedAt |
Sem relações |
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 |
Sem relações |
Clientes e dados mestre operacionais
| Conjunto de dados | Ficheiro do pacote | Chave primária | Campos | Relações |
|---|---|---|---|---|
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 |
Sem relações |
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 |
Encomendas, envios, volumes e tracking
| Conjunto de dados | Ficheiro do pacote | Chave primária | Campos | Relações |
|---|---|---|---|---|
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 |
Rotas, paragens e telemática
| Conjunto de dados | Ficheiro do pacote | Chave primária | Campos | Relações |
|---|---|---|---|---|
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 |
Custos e exceções operacionais
| Conjunto de dados | Ficheiro do pacote | Chave primária | Campos | Relações |
|---|---|---|---|---|
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 e referências externas
| Conjunto de dados | Ficheiro do pacote | Chave primária | Campos | Relações |
|---|---|---|---|---|
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 |
Sem relações |
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 |
Integrações, importações, mapeamento e matching
| Conjunto de dados | Ficheiro do pacote | Chave primária | Campos | Relações |
|---|---|---|---|---|
integrations |
integrations/integrations.ndjson |
id |
10 Camposid, type, name, status, billingStatus, activeFrom, activeTo, portableConfiguration, createdAt, updatedAt |
Sem relações |
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 |
Relatórios e histórico de exportações
| Conjunto de dados | Ficheiro do pacote | Chave primária | Campos | Relações |
|---|---|---|---|---|
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 |
Subscrições, utilização, faturas e pagamentos
| Conjunto de dados | Ficheiro do pacote | Chave primária | Campos | Relações |
|---|---|---|---|---|
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 |
Sem relações |
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 |
Sem relações |
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 |
Sem relações |
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 |
Ficheiros originais do cliente
| Conjunto de dados | Ficheiro do pacote | Chave primária | Campos | Relações |
|---|---|---|---|---|
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. Ficheiros e formatos de saída
O manifesto indica versão, âmbito, conjuntos incluídos e omitidos, contagens, avisos e checksums.
- Pacote de entrega: ZIP.
- Manifesto: manifest.json em UTF-8.
- Dados estruturados: JSON Lines (NDJSON), um objeto por linha.
- Ficheiros originais conservados: formato original em files/original/.
- Data e hora: RFC 3339 / ISO 8601 com desvio; data YYYY-MM-DD.
- Números de precisão fixa como strings com ponto; montantes com moeda ISO 4217.
- Checksum SHA-256 de cada ficheiro no manifesto.
5. Relações entre objetos
Encomendas, envios, clientes, transportadoras, rotas, locais e outros objetos são ligados por identificadores estáveis e referências descritas no manifesto. O histórico relevante é preservado sem tratar cada atualização técnica como novo objeto.
6. Versão do formato de exportação
A versão 1.1 do registo e do formato de exportação vigora desde 22/07/2026 e é independente das versões contratuais. Alterações a nomes, campos obrigatórios, significado ou relações exigem nova versão; um campo opcional pode ser acrescentado de modo retrocompatível.
7. Limitações conhecidas
- Incluem-se apenas dados de módulos ativos e dentro dos direitos do cliente.
- Exportações grandes ou complexas podem exigir entrega segura acordada individualmente.
- Não se garante uma API self-service nem um prazo fixo de preparação.
- Excluem-se código-fonte, algoritmos, registos internos de segurança, credenciais e dados de outros clientes.
- O registo não é o esquema completo da base de produção.
8. Infraestrutura e jurisdição
A aplicação e o PostgreSQL funcionam em Docker num VPS da VEDOS (anteriormente WEDOS) na República Checa. As cópias são guardadas num NAS próprio na sede da Progity na República Checa. Todo o tratamento indicado fica sujeito à jurisdição checa; não são publicados IP, morada física exata, credenciais nem topologia de rede.
| Tipo de infraestrutura | País / jurisdição | UE/EEE |
|---|---|---|
| Aplicação em Docker — VEDOS VPS | República Checa | Sim |
| PostgreSQL em Docker — VEDOS VPS | República Checa | Sim |
| Cópias — NAS próprio na sede da Progity | República Checa | Sim |
O acesso é controlado por funções e permissões; a comunicação cliente–servidor utiliza HTTPS.
Os pedidos de autoridades são sujeitos a avaliação jurídica. Os dados não são fornecidos a autoridades de países terceiros contra o direito da UE ou do Estado-Membro competente; aplicam-se medidas técnicas, organizacionais e contratuais proporcionadas.
9. Histórico de alterações do registo
- 22/07/2026 — versão 1.1: publicados o formato ZIP/JSONL e o catálogo de conjuntos, campos, relações e exclusões de segurança.
- 21/07/2026 — versão 1.0: primeira publicação.
10. Contacto
Pedidos de exportação ou perguntas podem ser enviados por uma conta autorizada do portal ou para hello@noda.li. O pedido pode ser razoavelmente verificado antes da entrega dos dados.