
A evolução das tecnologias de TI permitiu controlar enormes fluxos de dados. Os negócios têm muitas soluções de TI: CRM, ERP, BPM, sistemas de contabilidade ou, pelo menos, apenas Excel e Word. As empresas também são diferentes. Algumas empresas são compostas por muitos ramos. Vamos citar como "Pirâmide". Pirâmides têm problema de sincronização de dados para a pilha de sistemas de TI. Os fornecedores e versões de software diferem significativamente nas ramificações. Além disso, a empresa de administração modifica continuamente os requisitos de relatório que causam ataques de frustração nas filiais. Esta é uma história sobre o projeto que encontrei com o caos que precisava ser sistematizado e automatizado. Orçamento baixo e prazos apertados limitavam o uso da maioria das soluções industriais existentes, mas abriam espaço para a criatividade.
Formato de uso geral
A empresa cliente definiu uma tarefa para coletar dados de relatórios de todas as filiais. Deixe-me explicar a escala do desafio - existem dezenas de sistemas, incluindo ambos: auto-criados e monstros como o SAP.
Um relatório pode conter dados de: contadores, técnicos de manutenção, gerentes de relações públicas, EMERCOM, meteorologistas.
Antes do início do projeto, grande parte dos dados era enviada por email à empresa principal como anexos do Word / Excel. Em diante, parecia um pôr do sol feito manualmente: os dados foram processados manualmente por uma equipe especialmente estudada e colocados em alguns sistemas. No final, houve dezenas de relatórios que formaram a base das decisões de gerenciamento.
A escolha da abordagem foi solicitada pelos formatos de arquivos usados - xlsx / docx. Até o software legado suporta o upload de dados para esses formatos. Pelo menos copiar e colar pode ser o último suporte para ramificações.
Portanto, nosso plano opinativo era:
- Descreva a estrutura e o cronograma de cada relatório.
- Forneça às agências os regulamentos dos relatórios. As agências devem usar o software existente para enviar relatórios por e-mail. Se não houver software - envie relatórios manualmente como antes.
- Desenvolva o sistema que:
- leva os documentos certos da caixa de entrada de e-mail;
- extrai dados de documentos;
- grava dados extraídos no DB e penaliza violadores de regulamentos.

Implementação
Questões de não desenvolvimento
Durante o estágio de coleta de requisitos, verificou-se que não há descrição da estrutura dos relatórios. Nada mesmo. A estrutura do relatório foi armazenada na cabeça de alguns funcionários e transferida verbalmente como contos populares. Essa questão foi resolvida com alguns esforços, mas o verdadeiro desafio começou mais tarde na configuração do estágio de troca de dados.
Primeira edição
Alguns dias após o lançamento da versão beta, revelamos uma lacuna entre a estrutura e o modelo do documento. Má qualidade dos dados: os relatórios apresentaram divergências nos valores, as colunas foram misturadas ou tiveram uma nomeação incorreta. Esses problemas ocorreram principalmente nas filiais onde os dados foram coletados e enviados manualmente.
Solução - implementação da verificação em três etapas:
- Fornecendo ramificações com amostras xlsx com estrutura corrigida pelas ferramentas do Excel. Somente células disponíveis nessas amostras foram inseridas nos dados. Algumas células recebem verificação adicional: tipo, convergência de somas etc.
- Verificação de dados durante a extração. Por exemplo, comparando a data e a data atuais no parágrafo do Word, a verificação aritmética dos dados para documentos do Excel (se não for possível definir as ferramentas xlsx).
- Análise profunda de dados após extração. Por exemplo, detecção de desvios significativos por indicadores-chave em comparação com períodos anteriores.
Segunda edição
Uma violação sistemática do cronograma de transferência de dados ou tentativas inescrupulosas de sabotagem: "Nunca enviamos dados a ninguém, e aqui está você com isso ...", "Enviei tudo! A tempo! Provavelmente você não conseguiu por causa de uma latência ruim ".
Feedback tornou-se uma solução. O software notifica automaticamente as pessoas responsáveis na filial em caso de violação do cronograma.
Algum tempo depois, o módulo de feedback foi conectado ao módulo de verificação da qualidade dos dados e ao módulo de geração de relatórios finais. Dessa forma, o ramo recebe imediatamente um resumo dos dados próprios e uma comparação com os "ramos vizinhos". Portanto, seria claro para um ramo, por que foi repreendido.
Módulos desenvolvidos
Ferramenta de configuração de modelos de relatório, que descreve:
- atributos para identificar um relatório;
- regulamentos de transmissão;
- algoritmo de extração de dados;
- outros atributos, como o caminho para o código que valida e armazena os dados.
Um aplicativo de email que move anexos para um armazenamento isolado (sandbox) e armazena informações associadas a cartas;
Um analisador de anexo que identifica o relatório e extrai dados.

Ferramenta de configuração
Historicamente, as cartas com relatórios são enviadas para o endereço de e-mail comum, bem como para muitas outras cartas importantes ou sem importância. É por isso que precisamos de atributos para identificar os tipos de anexos de relatório. O uso de determinado nome ou texto de documento no corpo do email não é confiável e desconfortável para o remetente. Por isso, decidimos que a identificação do relatório será determinada apenas por um conteúdo.
O brainstorming resultou em vários atributos para identificar o tipo de relatório por conteúdo: cor do texto da célula, fonte, etc. Mas a maneira mais adequada é a presença de substring em uma determinada célula - "slot" ou em uma matriz de células para o Excel. Para o Word, usamos parágrafo ou título.
Adicionamos uma lógica de comparação simples para o "slot": "igual", "desigual", "mais", "menos" e assim por diante. Exemplo para o relatório do Excel: no intervalo de A2-E4, o texto da célula deve ser igual a "Relatório diário de carregamento do equipamento".

De maneira semelhante, configuramos a área de pesquisa para o início e o fim dos dados.
Abaixo está um exemplo de condição de pesquisa para os dados que terminam: “2 linhas em branco em uma linha”.

Algumas outras configurações: uma lista de remetentes permitidos, um tipo de documento (Excel / Word), um caminho para a exportação de dados.
A saída é a estrutura JSON (modelo) que descreve o relatório.
Aplicativo de email
Este aplicativo é um leitor de caixa de entrada de email que coloca todos os anexos na sandbox, salva atributos de email, define anexos na fila de análise.
Enfrentamos dois problemas de segurança:
- e se o nome da filial no relatório acidentalmente (ou não) for substituído por outro nome da filial?
- e se o relatório for enviado por invasores?
O primeiro problema é resolvido verificando o endereço de email do remetente da filial e o nome da filial especificado no corpo do relatório.
A segunda questão foi resolvida usando o
SPF .
Analisador de anexo
Quase todas as bibliotecas de análise do Word e Excel oferecem suporte apenas a determinadas versões / extensões. Por isso, decidimos usar a conversão "Libre Office" para trazer os arquivos para um único formato. Por exemplo, entradas: odt, doc, docx (2007, 2010, 2013) ... converter em docx (2016).
Após a conversão:
- filtramos uma variedade de modelos de relatório com base nos atributos básicos, como Word ou Excel, o remetente pertence à lista permitida;
- ameaçar o relatório com os demais modelos;
- se um relatório corresponder ao modelo - extraia os dados e transfira-os para o repositório.
Retomar
Nós conseguimos!
Após dois meses de trabalho meticuloso, a sede começou a receber dados para relatórios de todas as filiais regularmente.
A qualidade e a integridade dos dados tornam-se melhor sem precedentes do que eram antes. O software implementado liberou recursos humanos que pagaram os custos do projeto até o final do ano.
Aprendemos por nós mesmos que o processo de integração nem sempre é doloroso e identificamos os principais aspectos do sucesso:
- não entramos nos sistemas nos galhos;
- formalizamos e aprovamos uma estrutura unificada de relatórios e cronograma de transferências;
- fizemos amostras de saída para cada tipo de relatório com verificação integrada;
- usamos a maneira mais comum de fornecer dados - um email.
Como última palavra, essa abordagem tem duas desvantagens principais:
- baixa velocidade de entrega de dados;
- o tamanho do pacote de dados não deve ser maior que o anexo médio de e-mail.