À propos du projet
Licitarium est un programme informatique pour Windows qui réplique sur la machine de l'organe ce que la municipalité publie sur le PNCP (Portal Nacional de Contratações Públicas). Il rassemble les contrats (aviso et appels d'offres), contrats, registres de prix, le Plano de Contratações Anual (PCA) et les items de chaque achat, avec le prix unitaire payé et le fournisseur gagnant. Le fonds est consultable, hors ligne et permanent — répondant au besoin de consulter l'historique dossier par dossier sur le portail, qui n'est ni recherché ni disponible sans internet. Le pilote s'exécute à Orindiúva-SP et rien n'est figé dans le code pour la municipalité.
Fonds et interface
L'interface propose cinq onglets avec recherche, filtres par année, modalité, situation et organe, tri par clic, colonnes ajustables et export en .xlsx : Contratações (avis et appels d'offres des modalités de la Lei 14.133), Contratos (fournisseur, valeur globale, durée et badge de situation vigente/vence em 60 dias/encerrado), Atas (objet et durée, avec le même badge), PCA (items du plan de chaque organe) et Preços (recherche par item, résumé statistique avec médiane, quartiles et alerte outlier, sélection et rejet avec motif, et municipalités de référence). Cliquer sur une ligne ouvre le détail complet, y compris l'enregistrement JSON intégral tel que publié sur le PNCP et lien direct vers le processus officiel. L'écran d'accueil affiche trois indicateurs cliquables (total des contratações, valeur homologuée dans l'année, contrats vigents) et alertes d'échéance dans 60 jours et de propositions en attente.
Construction du PCA
Le module PCA utilise l'historique des items déjà contractés pour suggérer le plan de l'exercice suivant : il regroupe des items similaires par radical de la description, écartant les préfixes bureaucratiques, et fusionne des groupes de radical différent avec description fortement chevauchante ; corrige les valeurs par la série IPCA (Banco Central) avant projection ; projette les quantités par moyenne, dernière année, plus grande valeur, somme ou tendance par régression linéaire ; estime le prix par médiane, moyenne, valeur la plus récente ou la plus basse ; applique une marge de sécurité standard de 10 %, modifiable par item ; classe selon courbe ABC et regroupe par famille ; et signale unité divergente, occurrence unique, prix dispersé, item déjà couvert par ata vigente et variation par rapport au plan précédent. Il permet de fusionner et diviser des groupes, avec prix pondéré par volume, et préserve les ajustements manuels lors d'une nouvelle génération. La livraison est un projet révisable humainement, et non un fichier d'importation.
Rapports
Huit rapports sont décrits en HTML en-têlé (prêts pour impression PDF) et, lorsque applicable, aussi en .xlsx : Relação de Contratações, Relação de Contratos, Relação de Atas, Resumo Executivo Anual, Alerta de Fracionamento (autocontrôle qui regroupe les dispensas par similarité d'objet et suit les limites de l'art. 75, avec fenêtre par exercice ou période mobile), Minuta do PCA et Pesquisa de Preços (subsídio à l'art. 23). L'impression est toujours claire, indépendamment du thème choisi sur l'écran.
Synchronisation et opération
Lors de la première exécution, l'utilisateur choisit la municipalité (tableau IBGE intégré avec 5.571 municipalités) et le programme télécharge l'historique publié depuis 2021. À chaque ouverture, il ne synchronise que les changements, en respectant un intervalle de 10 minutes depuis la dernière collecte ; le bouton Sincronizar collecte toujours. Les organes de la municipalité sont découverts automatiquement à partir des contratações, et d'autres peuvent être ajoutés par CNPJ. Les données résident dans une base SQLite locale dans %LOCALAPPDATA%\Licitarium, traitée comme cache reconstituable. Sans internet, le programme s'ouvre avec les données locales et avertit qu'il n'a pas été mis à jour. Le README indique que la synchronisation du fonds du pilote a pris 33 secondes avec 69 requêtes au portail, avec trois phases en parallèle et reconsultation uniquement des items modifiés. En cas d'échec du portail, le client tente cinq fois avec attente croissante (30 à 90 s), choisit aléatoirement l'intervalle entre les tentatives et réduit les connexions simultanées en cas de surcharge ; ce qui échoue est enregistré et repris lors de la collecte suivante.
Panneau
L'écran d'accueil résume l'exercice en quatre vues (Execução, Análise, Vigilância et Economia), avec des alertes au-dessus menant à la liste déjà filtrée. Les graphiques sont des SVG dessinés par le programme lui-même, sans bibliothèque et sans réseau, dans une palette décrite comme validée pour daltonisme et contraste, et peuvent être imprimés en A3 paysage. Le README mentionne que la requête alimentant les quatre vues coûte environ 120 ms sur un fonds de 114 Mo (3.360 contratações, 25.000 items) et que les graphiques sont redessinés lors du changement de taille de la fenêtre.
Confidentialité
Le programme ne lit que des données publiques du PNCP : il n'envoie aucune donnée de l'ordinateur, ne dispose ni de télémétrie ni de compte utilisateur et n'ouvre aucun port réseau. Les seules connexions sortantes sont vers pncp.gov.br et vers l'API publique de GitHub, utilisée pour vérifier les nouvelles versions.
Installation et architecture
La voie recommandée est l'exécutable de la page releases, sans installation, sans Python et sans droits d'administrateur ; le README note que SmartScreen peut avertir car l'exécutable est nouveau et non signé, et que Smart App Control de Windows 11 bloque les binaires sans signature numérique, désactivant la mise à jour automatique dans ce cas. Alternativement, il s'exécute depuis le code avec pip install -r requirements.txt et python licitarium.py, sur Windows 10/11 avec WebView2 ; les dépendances externes citées sont pywebview, openpyxl et motor_pncp, le reste étant dans la bibliothèque standard de Python, et la version indiquée est Python 3.12. L'architecture repose sur un seul processus : fenêtre pywebview/WebView2 communiquant avec Python via un pont js_api, sans serveur HTTP, port ni firewall ; le JSON brut de chaque enregistrement est conservé comme source de vérité et les colonnes de la base sont une projection de celui-ci. Le répertoire comprend licitarium.py, pncp.py, pca_builder.py, relatorios.py, fichiers d'interface dans ui/ (avec quatre thèmes par data-theme et fonts vendorisées), tests dans tests/ avec pytest et HTTP mocké, tests d'interface dans tests-e2e/ avec Playwright, ainsi que DESIGN.md, design/IDENTIDADE.md et design/DASHBOARD.md. Le CI exécute les tests Python et d'interface sur Windows à chaque push et, lors du marquage d'un tag v*, compile l'exécutable et l'attache à la release via PyInstaller. Dans Configurações, Salvar cópia... e Restaurar cópia... sauvegardent et restaurent l'intégralité du fonds en .zip, vérifient le fichier et préservent la base précédente.
Auteur et licence
La licence est MIT (© 2026 Túlio Ribeiro de Moura e Silva). Chaque version reçoit un DOI sur Zenodo, avec citation suggérée dans le README. Les données affichées sont publiques, originaires du PNCP, conformément à la Lei 14.133/2021 et à la Lei de Acesso à Informação, et le projet déclare ne pas être un produit officiel du PNCP ni du Governo Federal.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.