
L'évolution des technologies informatiques a permis de contrôler d'énormes flux de données. Les entreprises ont beaucoup de solutions informatiques: CRM, ERP, BPM, systèmes comptables ou au moins juste Excel et Word. Les entreprises sont également différentes. Certaines entreprises sont composées de nombreuses succursales. Appelons par exemple «Pyramide». Les pyramides ont un problème de synchronisation des données pour une pile de systèmes informatiques. Les éditeurs de logiciels et les versions diffèrent considérablement pour les succursales. De plus, la société de gestion modifie en permanence les exigences en matière de rapports, ce qui provoque des attaques de frustration dans les succursales. Il s'agit d'une histoire sur le projet où j'ai rencontré un chaos qui devait être systématisé et automatisé. Le faible budget et les délais serrés ont limité l'utilisation de la plupart des solutions industrielles existantes mais ont ouvert la voie à la créativité.
Format à usage général
L'entreprise cliente a défini une tâche pour collecter les données des rapports de toutes les succursales. Permettez-moi d'expliquer l'ampleur du défi - il existe des dizaines de systèmes, y compris les deux: self-made et des monstres tels que SAP.
Un rapport pourrait contenir des données de: comptables, réparateurs, responsables des relations publiques, EMERCOM, météorologues.
Avant le démarrage du projet, une grande partie des données était envoyée par e-mail à la société mère sous forme de pièces jointes Word / Excel. À partir de là, cela ressemblait à un coucher de soleil fait manuellement: les données étaient traitées manuellement par du personnel spécialement étudié et placées dans quelques systèmes. Au final, des dizaines de rapports ont constitué la base des décisions de gestion.
Le choix de l'approche a été demandé par les formats de fichiers utilisés - xlsx / docx. Même le logiciel hérité prend en charge le téléchargement de données vers ces formats. Au moins le copier-coller peut être un dernier support pour les branches.
Notre plan d'opinion était donc:
- Décrivez la structure et le calendrier de chaque rapport.
- Fournir aux succursales des règlements sur les rapports. Les succursales devraient utiliser le logiciel existant pour envoyer des rapports par e-mail. S'il n'y a pas de logiciel - envoyez les rapports manuellement comme auparavant.
- Développer le système, qui:
- prend les bons documents de la boîte de réception de courrier électronique;
- extrait les données des documents;
- écrit les données extraites dans la base de données et pénalise les contrevenants aux réglementations.

Implémentation
Problèmes non liés au développement
Lors de la collecte des exigences, il s'est avéré qu'il n'y avait pas de description de la structure des rapports. Rien du tout. La structure du rapport a été stockée dans la tête de certains employés et transférée verbalement sous forme de contes populaires. Ce problème a été résolu avec quelques efforts, mais le véritable défi a commencé plus tard lors de la mise en place de la phase d'échange de données.
Premier numéro
Quelques jours après la sortie de la version bêta, nous avons révélé un écart entre la structure des documents et le modèle de document. Mauvaise qualité des données: les rapports présentaient des divergences de montants, les colonnes étaient mélangées ou avaient une dénomination incorrecte. Ces problèmes se sont principalement produits dans les succursales où les données ont été collectées et envoyées manuellement.
Solution - mise en œuvre de la vérification en trois étapes:
- Fournir aux branches des exemples xlsx dont la structure est fixée par les outils Excel. Seules les cellules disponibles dans ces échantillons ont été saisies. Certaines cellules font l'objet d'une vérification supplémentaire: type, convergence des sommes, etc.
- Vérification des données lors de l'extraction. Par exemple, comparer la date et la date actuelles dans le paragraphe Word, vérification de l'arithmétique des données pour les documents Excel (s'il n'est pas possible de les définir avec les outils xlsx).
- Analyse approfondie des données après extraction. Par exemple, détection d'écarts significatifs par des indicateurs clés par rapport aux périodes précédentes.
Deuxième numéro
Une violation systématique du calendrier de transfert de données ou des tentatives de sabotage sans scrupules: "Nous n'envoyons jamais de données à personne, et vous voici avec votre ceci ...", "J'ai tout envoyé! À l'heure! Vous ne l'avez probablement pas obtenu en raison d'une mauvaise latence. "
Le feedback est devenu une solution. Le logiciel avertit automatiquement les personnes responsables de l'agence en cas de non-respect du planning.
Quelque temps plus tard, le module de rétroaction a été connecté au module de vérification de la qualité des données et au module de génération des rapports finaux. De cette façon, la branche reçoit immédiatement un résumé de ses propres données et une comparaison avec les «branches voisines». Il serait donc clair pour une succursale, pourquoi elle a été réprimandée.
Modules développés
Outil de configuration des modèles de rapport, qui décrit:
- des attributs pour identifier un rapport;
- règlements de transmission;
- algorithme d'extraction de données;
- d'autres attributs tels que le chemin d'accès au code qui valide et stocke les données.
Une application de messagerie électronique qui déplace les pièces jointes vers un stockage isolé (bac à sable) et stocke les informations associées aux lettres;
Un analyseur de pièces jointes qui identifie le rapport et extrait les données.

Outil de configuration
Historiquement, les lettres contenant des rapports sont envoyées à l'adresse e-mail commune, ainsi que de nombreuses autres lettres importantes ou sans importance. C'est pourquoi nous avions besoin d'attributs pour identifier les types de pièces jointes de rapport. L'utilisation d'un certain nom ou texte de document dans le corps de l'e-mail n'est pas fiable et inconfortable pour l'expéditeur. C'est pourquoi nous avons décidé que l'identification du rapport ne serait déterminée que par un contenu.
Le brainstorming a abouti à un tas d'attributs pour identifier le type de rapport par contenu: couleur du texte de la cellule, police, etc. Mais le moyen le plus approprié est une présence de sous-chaîne dans une certaine cellule - «slot», ou dans un tableau de cellules pour Excel. Pour Word, nous avons utilisé un paragraphe ou un titre.
Nous avons ajouté une logique de comparaison simple pour le «créneau»: «égal», «inégal», «plus», «moins», etc. Exemple de rapport Excel: dans la plage A2-E4, le texte de la cellule doit être égal à «Rapport de chargement d'équipement quotidien».

De la même manière, nous avons configuré la zone de recherche pour le début et la fin des données.
Voici un exemple de condition de recherche pour la fin des données: «2 lignes vides d'affilée».

Quelques autres paramètres: une liste d'expéditeurs autorisés, un type de document (Excel / Word), un chemin pour l'exportation des données.
La sortie est une structure JSON (modèle) qui décrit le rapport.
Application de messagerie
Cette application est un lecteur de boîte de réception de courrier électronique qui place toutes les pièces jointes dans le bac à sable, enregistre les attributs de courrier électronique, définit les pièces jointes dans la file d'attente d'analyse.
Nous avons rencontré 2 problèmes de sécurité:
- que se passe-t-il si le nom de la branche dans le rapport est accidentellement (ou non) remplacé par un autre nom de branche?
- que faire si le rapport est envoyé par des intrus?
Le premier problème est résolu en vérifiant l'adresse e-mail de l'expéditeur de la branche et le nom de la branche spécifié dans le corps du rapport.
Le deuxième problème est résolu à l'aide de
SPF .
Analyseur de pièces jointes
Presque toutes les bibliothèques d'analyse Word et Excel ne prennent en charge que certaines versions / extensions. C'est pourquoi nous avons décidé d'utiliser la conversion «Libre Office» pour amener les fichiers dans un seul format. Par exemple entrées: odt, doc, docx (2007, 2010, 2013) ... convertir en docx (2016).
Après la conversion:
- nous filtrons un tableau de modèles de rapport en fonction des attributs de base comme est-ce Word ou Excel, l'expéditeur appartient à la liste autorisée;
- menacer le rapport avec les modèles restants;
- si un modèle correspond à un rapport - extrayez les données et transférez-les dans le référentiel.
Reprendre
Nous l'avons fait!
Après deux mois de travail minutieux, le siège social a commencé à recevoir régulièrement des données pour les rapports de toutes les succursales.
La qualité et l'exhaustivité des données deviennent meilleures sans précédent par rapport à ce qu'elles étaient auparavant. Le logiciel mis en œuvre a libéré des ressources humaines qui ont remboursé les coûts du projet d'ici la fin de l'année.
Pour nous, nous avons appris que le processus d'intégration n'est pas toujours douloureux et avons identifié les principaux aspects de la réussite:
- nous n'avons pas pénétré dans les systèmes des succursales;
- nous avons officialisé et approuvé une structure de rapport et un calendrier de transfert unifiés;
- nous avons fait des échantillons de sortie pour chaque type de rapport avec vérification intégrée;
- nous avons utilisé le moyen le plus courant pour transmettre des données: un e-mail.
Enfin, cette approche présente deux inconvénients principaux:
- faible vitesse de livraison des données;
- la taille du package de données ne doit pas être supérieure à la pièce jointe moyenne d'un e-mail