
Flux - Sincronizacao de Dados de Fornecedores
Uma plataforma ETL interna automatizando a sincronizacao diaria de dados de produtos (estoque, precos, catalogos) de mais de 30 fornecedores europeus via FTP, HTTP e APIs REST para o marketplace European Sourcing.
Fornecedores Integrados
30+
8+ paises europeus
Classes de Conectores
37
Padrao Strategy (Lib/*.php)
Formatos de Dados
7
CSV, XML, JSON, XLS, TSV, TXT, GZ
Tamanho do BD
~15 Go
Dump SQL completo (marco 2019)
Apresentacao
O centro nervoso da integracao de dados de fornecedores europeus
Flux (v1) e FluxV2 sao aplicacoes web internas desenvolvidas para a European Sourcing, empresa especializada em sourcing de produtos promocionais e publicitarios em toda a Europa. Essas aplicacoes constituem a espinha dorsal da sincronizacao de dados de produtos entre fornecedores e a plataforma European Sourcing.
A plataforma opera no dominio de e-commerce B2B / marketplace de produtos promocionais. A European Sourcing atua como agregadora de catalogos de fornecedores de objetos promocionais (brindes, texteis, acessorios, material de escritorio, etc.) para revendedores europeus. A empresa coleta, normaliza e redistribui dados de produtos (niveis de estoque, precos, imagens, fichas tecnicas) de dezenas de fornecedores para sua plataforma online, atendendo aproximadamente 60 sites revendedores.
Recuperacao de dados multi-protocolo
FTP, HTTP, API REST com autenticacao variada (chaves API, login/senha, tokens, hash)
Normalizacao de dados heterogeneos
30+ formatos proprietarios transformados em um esquema interno unificado
Atualizacoes de estoque e precos quase em tempo real
Sincronizacao automatizada diaria via cron com grades de precos degressivos
Re-indexacao automatica de busca
Dispara sincronizacao Elasticsearch apos cada atualizacao de fornecedor
Relatorios detalhados e rastreabilidade
Relatorios de execucao com timestamp, logs baixaveis, arquivos CSV e ZIP
Alertas de falha por email
Notificacao automatica por email para a equipe em caso de falha
Objetivos, Contexto, Desafios e Riscos
Compreendendo a visao estrategica por tras do pipeline de dados
- Automatizar 100% da sincronizacao de estoque e precos dos fornecedores (execucao diaria via cron)
- Garantir a frescura dos dados: estoques e precos atualizados diariamente para cada fornecedor ativo
- Normalizar 30+ formatos proprietarios heterogeneos em um esquema interno unificado
- Garantir rastreabilidade: cada execucao gera um relatorio com timestamp e logs detalhados
- Permitir controle granular: ativacao por fornecedor e por tipo de dados
- Parte de um ecossistema de 20+ aplicacoes sob *.europeansourcing.com (extranet, API, motor de busca, exportacao, estatisticas, traducao, etc.)
- Desenvolvimento sob a organizacao GitHub medialeads (~8 desenvolvedores) em Bordeaux, Franca
- Banco de dados MySQL master/slave compartilhado (~15 GB) com todos os outros projetos da plataforma
- Multiplos ambientes: desenvolvedor (local), homologacao (es-recette.com), producao (OVH)
- Impacto comercial importante: estoque ou precos desatualizados geram pedidos impossiveis de atender, impactando diretamente a credibilidade e a receita
- Cobertura internacional: fornecedores em 8+ paises europeus com variacoes especificas por pais
- Multiplicidade de protocolos: FTP, HTTP, API REST com metodos de autenticacao variados
Dependencia de formato de fornecedor
Qualquer mudanca de formato por um fornecedor requer adaptacao do codigo - risco de quebra silenciosa
Vulnerabilidade de injecao SQL
O handler POST de configuracoes constroi clausulas SQL diretamente de dados do usuario sem sanitizacao
Credenciais codificadas
Credenciais FTP e chaves API codificadas diretamente nas classes PHP (melhorado na v2)
Sem testes automatizados
O unico arquivo de teste e um boilerplate Symfony intocado (~0% de cobertura)
As Etapas - O que Fiz
Uma jornada concreta, fase por fase, da construcao
- Desenvolvidos 30+ conectores de fornecedores individualmente (classes Lib/*.php)
- Construido o pipeline ETL completo: download → parsing → matching → atualizacao BD → geracao de relatorios
- Implementada interface web com dashboard, configuracao por fornecedor, visualizacao de relatorios e download de arquivos
- Criada execucao CLI via comando Symfony (php app/console lanceramaj)
- Minhas contribuicoes: conector BIC France, conector PF Concept v2 com correcoes, conector Midocean (novo FTP), commit inicial e importacao SVN
- Interface modernizada migrada de Bootstrap 3 para Bootstrap 4
- Arquitetura melhorada: namespace AppBundle\Flow\ substituindo o bundle legado
- Configuracao externalizada: URL e tipo de autenticacao configuraveis via interface web (vs codificado na v1)
- Adicionada coluna "Status" em tempo real ao dashboard para monitoramento de execucoes
- Sistema de notificacao para desenvolvedores em qualquer modificacao de fluxo
Os Atores - Interacoes
Uma equipe pequena e focada dentro de um ecossistema maior
O projeto Flux foi desenvolvido principalmente por 2 desenvolvedores dentro da organizacao medialeads (~8 pessoas no total). Thomas C. foi o desenvolvedor principal, implementando a maioria dos conectores de fornecedores (28 commits, 65% do codigo). Eu contribui com 15 commits (35%) incluindo o commit inicial, migracao SVN e conectores-chave para BIC France, PF Concept e Midocean.
Marina Lalague
Gerente de Catalogo / Product OwnerDecisoes de negocios sobre prioridades de sincronizacao de dados
Jennifer
Gerente de Dados/CatalogoDestinataria de alertas, gerenciamento de credenciais API
O projeto interagia diretamente com mais de 30 APIs e feeds de dados de fornecedores europeus - cada um com seus proprios protocolos, formatos, metodos de autenticacao e contatos tecnicos. Isso exigia adaptacao e comunicacao constantes com equipes tecnicas externas.
Resultados
Impacto mensuravel para o negocio e crescimento pessoal
- Sincronizacao automatizada diaria garante dados de produtos atualizados para revendedores no europeansourcing.com → conversao melhorada, erros de pedido reduzidos
- 6.120 variantes de produtos atualizadas em uma unica execucao de 45 segundos (fornecedor Anda, agosto 2019)
- ~100 execucoes diarias em todos os fornecedores, garantindo frescura continua dos dados
- Cobertura massiva de catalogo: banco de dados de ~15 GB atendendo mais de 60 sites revendedores
- Alcance geografico pan-europeu: fornecedores de 8+ paises integrados perfeitamente
- Expertise profunda em integracao de dados heterogeneos (ETL) atraves de multiplos protocolos e formatos
- Dominio do padrao de design Strategy aplicado a arquitetura real de conectores de fornecedores
- Compreensao da gestao de catalogos de e-commerce B2B em escala europeia
- Experiencia com arquitetura MySQL master/slave e operacoes de dados em grande escala
- Conhecimento pratico de comandos CLI, servicos e sistema de eventos do Symfony 2
O Futuro do Projeto
Alem da entrega - ciclo de vida e evolucao
- 1FluxV2 estava operacional e funcional em agosto de 2019, com logs mostrando execucoes diarias bem-sucedidas
- 2O sistema funcionou continuamente em producao por pelo menos 3 anos, processando centenas de sincronizacoes diarias
- 3A evolucao da v1 para v2 demonstrou a capacidade da equipe de iterar e melhorar: configuracao externalizada, UI modernizada, melhor monitoramento
- 4Backups completos foram arquivados em agosto de 2019 (codigo, dumps de banco, capturas de tela), sugerindo um periodo de transicao
- 5O projeto esta agora arquivado - a European Sourcing provavelmente evoluiu sua infraestrutura de sincronizacao desde entao
Reflexao Critica
Retrospectiva honesta sobre pontos fortes, fracos e licoes aprendidas
- Cobertura funcional impressionante: 30+ fornecedores integrados com protocolos e formatos muito diversos, cada um com requisitos especificos de parsing
- Pipeline robusto: o padrao Base/filho permite adicionar um novo fornecedor implementando apenas transformerEnProduits(), herdando todo o pipeline
- Rastreabilidade exemplar: cada execucao produz um relatorio com timestamp, logs detalhados e arquivos de resultado
- Evolucao continua: criar o FluxV2 mostra capacidade de questionar e melhorar o sistema existente
- Arquitetura pragmatica: SQL bruto ao inves de Doctrine ORM, justificado pela natureza das operacoes (atualizacoes em massa)
- Seguranca: injecao SQL no handler POST de configuracoes, credenciais FTP/API codificadas, autenticacao basica por sessao compartilhada
- Sem testes: zero testes unitarios ou de integracao - o unico arquivo de teste e um boilerplate Symfony intocado
- Sem CI/CD: implantacao provavelmente manual via git pull no servidor, sem pipeline de integracao continua
- Acoplamento forte: classes de conectores misturam logica de download, parsing, matching e atualizacao BD
- Documentacao inexistente: o doc/index.rst e um placeholder vazio, sem README personalizado
- Integracao de dados heterogeneos e um problema de normalizacao, nao de codigo - entender o formato de cada fornecedor e o verdadeiro trabalho antes de escrever qualquer codigo
- O padrao Strategy e ideal para variacoes do mesmo processo - Base define o "o que" (pipeline de sync), cada filho define o "como" (parsing especifico)
- Rastreabilidade nao e um luxo - em um sistema automatizado diario, logs e relatorios sao indispensaveis para diagnostico rapido de problemas
- Externalizar URLs e autenticacao do codigo para uma interface configuravel e uma grande vitoria de manutenibilidade (melhoria v2)
Trajetoria relacionada
Experiencia profissional ligada a esta realizacao
Competencias aplicadas
Competencias tecnicas e humanas aplicadas
Competencias tecnicas
Competencias humanas
Galeria de imagens
Capturas e visuais do projeto