Pular para o conteúdo

Steve Trucking, o que eu arquitetaria

Também em 28 idiomas

English · Español · 日本語 · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Nederlands · العربية · עברית · Українська · हिन्दी · Русский · Svenska · Dansk · Norsk bokmål · Suomi · Español (México) · Français (Canada) · Deutsch (Schweiz)

A row of plain white delivery trucks ready at the loading doors at first light, a clipboard on the front of the nearest one.
Imagem gerada com IA

Módulo 6 de 6 do capítulo Dados mestres e identidade, capítulo 6 do curso Data Architect, e o fim da Parte 1. Anterior: Quando a autoridade é compartilhada · Próximo: a Parte 2 começa com Designing for Scale (coming soon)

A pergunta que este checkpoint responde: Você consegue juntar a Parte 1 num cenário real?

Tente o desafio primeiro. Este é o meu passo a passo do desafio do Checkpoint 1. Se você ainda não desenhou o seu próprio design, faça isso antes de continuar lendo. O valor está em comparar o seu raciocínio com o meu, não em ler a resposta.

Isto é “O que eu arquitetaria”: uma solução viável possível, não a resposta, com os trade-offs nomeados e minhas posições tomadas. Ainda não cobrimos grandes volumes de dados, design de consultas, padrões de integração, migração nem transações, e isso é de propósito: a arquitetura se desenvolve à medida que você aprende mais. Mas a Parte 1 nos dá o bastante para montar o esqueleto.

Do briefing: cerca de 3.300 entregas por dia útil, um milhão por ano, crescendo 30% ao ano. Cerca de 1,6 item de linha por entrega (1,6 milhão por ano); umas oito mudanças de status por entrega (8 milhões por ano); quatro a cinco milhões de fotos por ano; cerca de 200 mil leituras de GPS por dia; cerca de 180 mil casos por ano; três Parceiros varejistas enviando manifestos de três jeitos diferentes; nove centros de distribuição; 330 caminhões com equipes de duas pessoas. E a Steve Trucking já roda uma org Salesforce com Service Cloud, Field Service e um portal de parceiros. Conte os zeros antes de desenhar uma única caixa. Eles vão decidir várias coisas a seguir.

As entregas são o coração disto, e o Field Service já faz o despacho. Então começo pelo modelo padrão do Field Service, como fez o recorte do capítulo 3:

Conceito de negócioObjeto SalesforcePor quê
Parceiro varejistaAccount (tipo de registro Retail Partner)Uma empresa com a qual a Steve Trucking tem contrato; carrega contratos, casos e acesso ao portal
Pessoal do parceiro (gerentes de CD, pessoal das lojas)ContactUsuários do portal precisam ser Contatos
Uma entrega: um Destinatário, um endereço, um pedido do parceiro, um diaWork OrderA unidade de trabalho do Field Service; o agendamento, o app móvel e os relatórios de serviço dependem dela
Cada item ou serviço: a geladeira, a instalação, o recolhimentoWork Order Line ItemDivide o trabalho, guia os checklists e o faturamento
O tipo de parada: só entrega, com instalação, com recolhimentoWork TypeDefine a duração, as habilidades e o checklist de instalação
A visita agendada e sua janelaService AppointmentO que o Field Service agenda e o app da equipe mostra
Equipes e caminhões; áreas de despacho dos CDsService Resource, Service Crew, Service TerritoryO Field Service agenda uma equipe como um único recurso
Dúvidas dos Destinatários, reclamações dos parceirosCaseO console de atendimento, direitos (entitlements), e-mail para caso
A lista do parceiro para terça-feira no CD de PhoenixManifest__c (personalizado)Nada padrão representa a unidade de recebimento, reconciliação e reprocessamento

Todo o resto continua padrão. Resistir a mais objetos personalizados é deliberado: a pergunta do capítulo 1 era quando um arquiteto deve resistir a mais um, e aqui a resposta é “quase sempre”. A linha de pedido do parceiro, por exemplo, não é um objeto novo. É a Ordem de serviço, identificada pela referência do parceiro.

Checkpoint 1: o núcleo das entregas O núcleo físico do Checkpoint 1 para a Steve Trucking. No núcleo: um Parceiro varejista, uma Conta com um tipo de registro, envia Manifestos, o único objeto personalizado, e cada Entrega é de um parceiro. Um Manifesto lista Entregas. Uma Entrega é uma Ordem de serviço que carrega o Destinatário como campos; ela é agendada como Compromissos, Compromissos de serviço, e contém Itens de entrega, Itens de linha da ordem de serviço, cada um descrito por um Tipo de parada, um Tipo de trabalho. Uma Equipe, uma Service Crew, é atribuída a Compromissos e trabalha numa Área de despacho do CD, um Service Territory. Uma Consulta ou reclamação, um Caso, pode se referir a Entregas. Fora do núcleo: os sinais de GPS da Equipe vão para o data warehouse, a Entrega se liga às Fotos de entrega num armazenamento de fotos, e cada Compromisso publica seu Histórico de status como eventos no data warehouse. Embaixo: olhe para a nave-mãe: o Field Service é o núcleo das entregas. NO NÚCLEO FORA DO NÚCLEO envia é dono da lista refere se a agendada como contém descreve equipes trabalham em atribuída a emite sinais liga se a publica Parceiro varejista Account · tipo de registro Manifesto Manifest__c · personalizado Consulta ou reclamação Case Entrega WorkOrder · campos do Destinatário Item de entrega WorkOrderLineItem Compromisso ServiceAppointment Tipo de parada WorkType Área de despacho do CD ServiceTerritory Equipe ServiceCrew Histórico de status eventos, data warehouse Fotos de entrega armazenamento de fotos, vinculado Sinais de GPS data warehouse, por referência Olhe para a nave-mãe: o Field Service é o núcleo das entregas. exatamente um zero ou um um ou muitos zero ou muitos pesquisa © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Ele cresce a partir do final do capítulo 3 (Projete o modelo físico Salesforce): os mesmos objetos nos mesmos lugares, com a equipe, a área de despacho, o caso e o que o Checkpoint 1 mantém fora do núcleo acrescentados.

A chave que casa o pedido de um parceiro com uma entrega

Seção intitulada “A chave que casa o pedido de um parceiro com uma entrega ”

Cada linha do manifesto vira uma Ordem de serviço, ligada ao seu Manifesto. A chave é a pergunta que mais quero respondida: como sabemos que esta linha do parceiro é aquela entrega? Minha resposta: um ID externo na Ordem de serviço construído a partir do Parceiro varejista e da própria referência de pedido e de entrega do parceiro (algo como KEYSTONE-PHX-8843119-1), marcado como único. Um campo por fonte, um-para-um. É o identificador do parceiro, não o nosso: o “vários identificadores para uma coisa” do capítulo 2, e o “o parceiro é dono da sua referência de pedido” do módulo 1.

Por que importa: os manifestos chegam com um a dois dias de antecedência e são revisados no próprio dia. Com essa chave, cada manifesto reenviado ou revisado faz upsert em vez de criar duplicatas. A revisão atualiza a Ordem de serviço, um campo a registra, e uma mudança numa entrega já roteirizada alerta o coordenador: a mudança do parceiro é aplicada, mas sinalizada até o despacho confirmá-la. É também isso que muda em relação ao desenho do capítulo 4. Hoje todo manifesto cai no RouteDesk, e os coordenadores redigitam as rotas no Salesforce e as paradas concluídas de volta. Neste design, os manifestos entram direto no Salesforce, com upsert pela chave do parceiro; o RouteDesk é aposentado, e a redigitação acaba. O capítulo de integração projeta os três formatos de entrada. A decisão de dados é a chave.

O Destinatário: conta pessoal, Contato ou nenhum dos dois?

Seção intitulada “O Destinatário: conta pessoal, Contato ou nenhum dos dois? ”

Esta é a decisão de dados mais interessante da Parte 1, então aqui estão as opções, e depois a minha escolha.

Opção A: contas pessoais. Cada Destinatário vira uma conta pessoal, ligada a cada entrega. A favor: padrão, funciona naturalmente com o Service Cloud, as mensagens e o console, reconhece Destinatários recorrentes. Contra: cerca de um milhão de novos Destinatários por ano, cada um uma conta pessoal com cerca do dobro do armazenamento de uma conta comercial (Estimated Record Size by Object Type (opens in a new tab), em inglês), então, em dois anos, um dos maiores objetos da org. E os Destinatários não são clientes da Steve Trucking. São clientes de cada Parceiro varejista, e a Steve Trucking nunca pode misturar o cliente de um parceiro com o de outro (S2).

Opção B: Contatos sob a conta do Parceiro varejista. Contra: um milhão de Contatos sob três ou quatro contas é desequilíbrio pai-filho em escala gigantesca, muito além da orientação da Salesforce de cerca de 10 mil filhos por pai (Considerations for Object Relationships (opens in a new tab); Parent-Child Data Skew (opens in a new tab), em inglês). Esta é a opção para mostrar, e rejeitar.

Opção C: o Destinatário vive na entrega. O nome, o telefone, o e-mail, o endereço e as observações de entrega do Destinatário são campos na Ordem de serviço (os campos de endereço já são padrão ali), capturados do manifesto. A favor: nenhum objeto grande novo; os dados vivem exatamente enquanto a entrega precisa deles; a exclusão acontece por entrega, no prazo do parceiro; e o isolamento entre parceiros vem de graça, porque cada entrega pertence a um parceiro. Contra: um Destinatário recorrente não é reconhecido como a mesma pessoa.

Esse é o equilíbrio a encontrar. Algum dia vai ser preciso reconhecer várias entregas como sendo da mesma pessoa, no mesmo lugar? Dar um login para essa pessoa? Essa é a linha entre um Destinatário que precisa de um registro próprio e os dados do Destinatário que são simplesmente dados sobre a entrega. E existe um caminho do meio. Leve o próprio ID de cliente do Parceiro varejista como um campo na entrega, um Retail Partner Customer ID (ID de cliente do Parceiro varejista). Ele não cria um registro de Destinatário, mas amarra as entregas que um parceiro envia para o mesmo cliente, o que é o começo de uma experiência do cliente mais unificada, e leva direto de volta ao sistema do Parceiro varejista, onde esse cliente realmente vive. É o identificador deles, então só significa algo junto com o parceiro: o cliente 4417 de um parceiro não tem nada a ver com o de outro.

Na minha opinião profissional, a Opção C é a escolha certa. A parte do não reconhecimento é aceitável, até desejável: a Steve Trucking não tem relacionamento com essas pessoas além da entrega. É o módulo 1 de novo: o Destinatário é cliente do parceiro, e o parceiro é a autoridade sobre quem ele é. E é o capítulo 5: dados pessoais que caem num só lugar, ligados a uma entrega, são muito mais fáceis de proteger, reter e excluir. E ela se sustenta diante das formas normais do capítulo 2: os dados do Destinatário são um para um com a entrega, então pertencem a ela. Um filho Destinatário separado economizaria alguns valores repetidos ao custo de mais um objeto, mais um relacionamento e a sobrecarga dele, e a única forma de economizar mais seria tratar a mesma pessoa como uma só entre Parceiros varejistas, o que não vamos fazer. Então a entrega carrega o Destinatário, com o Retail Partner Customer ID como o caminho de volta ao próprio sistema do parceiro.

Quem é o Destinatário? Três opções para o Destinatário, cada uma com seus prós e contras. Opção A, uma conta pessoal por Destinatário: falha no relacionamento, porque o Destinatário é cliente do parceiro; falha no volume, cerca de um milhão por ano com o dobro do armazenamento de uma conta comercial; passa no desequilíbrio, cada um é sua própria conta; falha no isolamento entre parceiros, porque mistura os clientes dos parceiros; falha na exclusão, sobrevivendo à entrega; passa no reconhecimento de recorrências. Rejeitada. Opção B, Contatos sob o Parceiro varejista: falha no relacionamento, já que não são funcionários do parceiro; falha no volume; falha no desequilíbrio, um milhão sob três ou quatro contas; passa no isolamento, sob a conta de um único parceiro; falha na exclusão; reconhece recorrências dentro de um parceiro. Mostrar e rejeitar. Opção C, campos do Destinatário na Ordem de serviço, destacada como a escolha do Checkpoint 1: o único relacionamento é a entrega; nenhum objeto novo; nenhum pai novo; um parceiro por entrega; excluídos no prazo do parceiro; e um Destinatário recorrente não é reconhecido, e tudo bem. Embaixo: modele a pessoa de acordo com o relacionamento que você realmente tem. A: Conta pessoal rejeitada A FAVOR Reconhece um Destinatário recorrente Sem desequilíbrio de pai: cada um é sua própria conta CONTRA O cliente é do parceiro, não nosso Cerca de 1 mi por ano, com o dobro do armazenamento Mistura os clientes dos parceiros (S2) Sobrevive à entrega B: Contato sob o Parceiro varejista: mostrar e rejeitar A FAVOR Fica sob um único parceiro (S2) Recorrências reconhecidas dentro de um parceiro CONTRA Não são funcionários do parceiro 1 mi sob 3 ou 4 contas: desequilíbrio Sobrevive à entrega C: Na entrega campos na Ordem de serviço: a escolha A FAVOR O único relacionamento é a entrega Nenhum objeto novo, nenhum pai novo Um parceiro por entrega (S2) Excluídos no prazo do parceiro CONTRA Um Destinatário recorrente não é reconhecido: tudo bem Modele a pessoa de acordo com o relacionamento que você realmente tem. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

João Silva, Rua Principal, 123, aparece no manifesto da Redrock e no da Brightwave. Provavelmente a mesma pessoa. A Steve Trucking deve unificá-los? Não, de propósito. Unificar Destinatários entre Parceiros varejistas violaria o S2: um parceiro nunca pode ver os Destinatários de outro, e uma identidade unificada é exatamente a ponte por onde isso vaza. É a posição deste capítulo aplicada: corresponda de menos onde misturar custa caro, e aqui misturar custa muito caro.

Se mais tarde um Parceiro varejista quiser o reconhecimento de Destinatários recorrentes dentro das suas próprias entregas, esse é um trabalho para uma ferramenta de resolução de identidade, como a do Data 360, limitada àquele parceiro: um mapa no estilo registry, não uma conta pessoal, e nunca entre parceiros. Um mapa de quem é quem não concede propriedade, e não concede acesso.

O capítulo 3 perguntou onde os dados devem viver. Aqui os zeros respondem:

  • O status atual vive no Compromisso de serviço e na Ordem de serviço. O histórico das mudanças de status, cerca de 8 milhões por ano e crescendo, não precisa viver na org do núcleo. Cada mudança é publicada como um evento e guardada no data warehouse, o Snowflake. A org guarda o estado atual; o histórico continua lá para atendimento, operações e análise, só que não no banco de dados operacional.
  • As fotos (quatro a cinco milhões por ano, algumas mostrando pessoas ou o interior de uma casa) vivem fora do núcleo, num armazenamento feito para esse volume, enviadas direto do app da equipe. A org guarda só o que precisa: um pequeno registro de índice por foto, ou só uma contagem e um sinalizador de “fotos obrigatórias da instalação completas”. Minha preferência é a opção mais leve: manter a org enxuta, e deixar o repositório de fotos ser dono do seu índice e da sua retenção.
  • As leituras de GPS (200 mil por dia) ficam no FleetLink e vão para o Snowflake; a org só precisa da última posição para a página de rastreamento e o mapa do despachante.
  • Os oito anos de histórico do RouteDesk (cerca de 5 milhões de entregas) vão para o data warehouse ou um arquivo, acessíveis para reclamações. O que, se é que algo, entra na org é uma decisão de migração para a Parte 2.
Checkpoint 1: o que eu arquitetaria O panorama do Checkpoint 1, o que eu arquitetaria, nos mesmos lugares do panorama atual do capítulo 4. As pessoas à esquerda: 45 coordenadores de despacho dentro de 9 CDs dos parceiros, cerca de 700 membros das equipes de entrega em 330 caminhões, 100 pessoas de atendimento e escritório, todos usando o Salesforce; cerca de 300 usuários dos Parceiros varejistas em 3 parceiros, usando o portal dos Parceiros varejistas; e cerca de um milhão de Destinatários por ano, que abrem uma página de rastreamento por um link, sem login, e ligam para os agentes de atendimento por telefone. No meio, uma única org Salesforce nos EUA com o Field Service, o provedor de identidade corporativo acima dela só para o pessoal de escritório, e o e-mail para caso trazendo os casos. Os três Parceiros varejistas, abaixo à direita, a Redrock por API REST e webhooks, a Keystone por CSV via SFTP e a Brightwave por EDI por uma rede de terceiros, enviam manifestos para uma única camada de integração, projetada na Parte 2, que faz upsert deles no Salesforce pela chave do parceiro e devolve o status a cada parceiro. À direita: o Salesforce envia eventos de status ao Snowflake, que guarda o histórico de status e a análise de dados; o FleetLink, onde o GPS bruto fica, envia só a última posição ao Salesforce; o Salesforce envia as contagens de entregas pela integração ao ERP financeiro, que fatura os parceiros e paga as equipes; as fotos, de 4 a 5 milhões por ano, vão do app das equipes para um armazenamento de fotos fora do núcleo; e o RouteDesk é aposentado, virando um arquivo dos seus 8 anos de histórico. O Salesforce envia a mensagem da véspera, com um link, pelo provedor de SMS e e-mail. Embaixo: a mesma empresa do capítulo 4; a redigitação e a planilha acabaram; o histórico e as fotos vivem fora do núcleo. ACIMA: IDENTIDADE, APPEXCHANGE, WEB PESSOAS DIREITA: SISTEMAS INTERNOS ABAIXO: CANAIS DE CLIENTES ABAIXO À DIREITA: PARCEIROS E PROVEDORES Coordenadores de despacho 45, dentro de 9 CDs dos parceiros Equipes de entrega ~700 em 330 caminhões Atendimento e escritório 100: serviço, operações, finanças Usuários dos Parceiros varejistas ~300 em 3 parceiros Destinatários ~1 milhão por ano IdP corporativo SSO só para o pessoal de escritório Portal dos Parceiros varejistas Página de rastreamento INTEGRAÇÃO Snowflake histórico de status, análise de dados FleetLink o GPS bruto fica aqui ERP financeiro fatura os parceiros, paga as equipes Armazenamento de fotos 4–5 milhões por ano, fora do núcleo Arquivo do RouteDesk aposentado; 8 anos de histórico Telefone agentes de atendimento E-mail e-mail para caso Provedor de SMS e e-mail mensagem na véspera, com um link Redrock API REST, webhooks Keystone CSV por SFTP Brightwave EDI por uma rede de terceiros Salesforce Field Service, uma org nos EUA um link, sem login só pessoal de escritório ligações casos entram manifestos entram status sai manifestos entram status sai manifestos entram status sai upserts, chave do parceiro eventos de status só a última posição contagens de entregas contagens de entregas fotos, do app das equipes na véspera, com um link Salesforce uma comunidade pessoas identidade, apps, web um sistema interno um canal de clientes a camada de integração parte do sistema que abre a conexão; o rótulo diz o que se move um certificado compartilhado: confiança, sem chamada direta A mesma empresa do capítulo 4. A redigitação e a planilha acabaram; o histórico e as fotos vivem fora do núcleo. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Checkpoint 1: o que eu arquitetaria. Os mesmos lugares do panorama do capítulo 4 (O panorama da Steve Trucking), sem a redigitação e sem a planilha.

  • Os Parceiros varejistas veem só as suas próprias entregas (S2). Cada Ordem de serviço carrega seu Parceiro varejista; os usuários do portal veem as entregas do seu parceiro, e os gerentes de CD só as do seu CD.
  • Os usuários parceiros precisam de uma licença de portal que suporte regras de compartilhamento e papéis: Customer Community Plus ou Partner Community. Os lugares no estádio do capítulo 3: os lugares mais baratos não recebem o compartilhamento de que este design precisa. As duas licenças precisam de papéis para os usuários externos, e a Salesforce avisa que mais papéis deixam a org mais lenta (Experience Cloud User Licenses (opens in a new tab), em inglês). Um papel por parceiro e por CD tudo bem; um papel para cada loja, não.

Conhecimento para o exame. Saiba quais licenças externas trazem compartilhamento padrão: Customer Community Plus e Partner Community (com papéis para os usuários externos), não a Customer Community, que usa conjuntos de compartilhamento.

  • Os Destinatários não precisam de licença. A página de rastreamento mostra uma entrega por meio de um link com um token que expira (S3), não de um login.
  • Cuidado com o desequilíbrio. Centenas de milhares de Ordens de serviço por ano apontando para três ou quatro contas de parceiros é desequilíbrio de dados na conta. Uma opção é uma conta filha por CD sob cada parceiro, o que espalha os filhos por nove ou mais pais; arquivar as entregas concluídas depois do prazo de reclamações mantém baixo o número de filhos ativos por pai. A Parte 2 enfrenta isso.

Eu não criaria uma conta pessoal para cada Destinatário só porque um Destinatário é um indivíduo. Não penduraria um milhão de Contatos em três contas. Não construiria um objeto Entrega personalizado ao lado da Ordem de serviço do Field Service. Não unificaria Destinatários entre parceiros. Não colocaria milhões de fotos ou leituras de GPS no armazenamento do núcleo. E não chamaria um Destinatário unificado de golden record a menos que tivéssemos de fato tomado uma decisão de dados mestres.

A Parte 1 montou o esqueleto; a Parte 2 o testa. A régua de grandes volumes de dados no terceiro ano (Ordens de serviço, Compromissos de serviço e itens de linha estão todos em território de grande volume em dois ou três anos), o design de consultas para visualizações de lista limitadas por parceiro, as três integrações de entrada e os três feeds de status, a migração do RouteDesk, as transações no próprio dia, e o design de segurança por trás do portal. A Steve Trucking também vai mudar. Guarde este design; você vai revisitá-lo.

  • Quais objetos padrão carregam o núcleo (aqui, os do Field Service), e quais objetos personalizados são realmente justificados (aqui, um).
  • A chave que casa a linha de pedido de cada parceiro com uma entrega, e por que ela pertence ao parceiro.
  • O que é o Destinatário, com base no relacionamento que a Steve Trucking realmente tem com ele.
  • Se identidades devem ser unificadas, e onde misturar é caro demais para arriscar.
  • O que fica na org, o que vive fora do núcleo, e de quais licenças o design depende.