1. Resum Executiu
El projecte consisteix en una solució de mobilitat desenvolupada amb .NET MAUI Blazor Hybrid que automatitza la cadena de subministrament en el punt de recepció de mercaderia. L’aplicació utilitza Visió Artificial (OCR) per llegir albarans físics, processar la informació d’estoc mitjançant lògica difusa i generar etiquetes d’identificació de forma instantània, mantenint un inventari sincronitzat en una base de dades local.
2. Stack Tecnològic
L’elecció de tecnologies es basa en la necessitat d’un alt rendiment natiu amb la flexibilitat d’interfícies web modernes:
Framework Principal: .NET 8.0 MAUI (Multi-platform App UI).
Arquitectura d’UI: Blazor Hybrid (HTML5, Bootstrap 5.3, Razor Components).
Llenguatge de Programació: C# 12.
Base de Dades: SQLite (mitjançant SQLite-net PCL).
Motor d’IA/OCR: Google ML Kit Vision (via Xamarin bindings).
Generació de Documents: QuestPDF (Motor basat en SkiaSharp).
3. Arquitectura del Programari i Serveis
El sistema segueix un patró d’Injecció de Dependències (DI), separant les responsabilitats en serveis especialitzats:
A. DatabaseService (Capa de Persistència)
Gestiona el cicle de vida de les dades. La seva característica principal és la lògica de consolidació:
Sincronització: Implementa un esdeveniment
OnDataChanged(Patró Observer) que notifica a la interfície d’usuari quan hi ha canvis al disc, permetent una reactivitat desacoblada.Upsert Intel·ligent: Abans d’inserir, el servei normalitza els noms de productes (
Trim/Upper) i verifica duplicats per sumar quantitats en lloc de duplicar registres.
B. PdfService (Capa de Sortida)
Encarregat de la transformació de dades a format físic:
Renderització Estructural: Utilitza un sistema de taules i columnes amb mesures en centímetres reals per assegurar la compatibilitat amb impressores d’etiquetes.
Control de Paginació: Implementa la propietat
.ShowEntire()per evitar el tall horitzontal d’etiquetes entre pàgines, garantint la llegibilitat de codis i noms.
4. Flux de Treball del Reconeixement (OCR)
Aquesta és la part més innovadora del projecte, dividida en tres fases:
Fase 1: Adquisició i Pont Natiu
S’utilitza el maquinari de la càmera per capturar un fitxer temporal. Mitjançant compilació condicional (#if ANDROID), s’invoca el motor de Google ML Kit. S’ha implementat un TaskCompletionSource per convertir el model d’esdeveniments asíncrons de Java (Android) en una Tasca awaitable de C#.
Fase 2: Processament de Llenguatge Natural (NLP Simple)
Un cop obtingut el text en brut, s’aplica un algorisme d’extracció basat en Expressions Regulars (Regex):
Patró Multidireccional: La Regex
\d+identifica el primer grup numèric sense importar si està a l’inici (“5 Humidificadors”) o al final (“Humidificadors x5”).Neteja de Soroll: S’eliminen caràcters especials mantenint accents i “ny” per assegurar la integritat dels noms de productes.
Fase 3: El Mètode “Salvavides”
En casos on l’OCR detecta el text però no el número (a causa de tipografies complexes o falta de llum), el sistema està programat per no descartar la informació, assignant automàticament una quantitat d’1 unitat i marcant el registre com a “MANUAL” per a revisió.
5. Interfície d’Usuari (UX/UI)
Reconocimiento.razor: Pantalla operativa amb feedback en temps real. Inclou un indicador de càrrega (spinner) d’estat i una llista de pre-confirmació on l’usuari valida el que la IA ha llegit abans de guardar-ho definitivament.
Inventory.razor: Panell de control que utilitza el cicle de vida
IDisposableper gestionar subscripcions a esdeveniments de base de dades, assegurant que la memòria s’alliberi correctament en navegar per l’aplicació.
6. Conclusions i Futur
El prototip actual resol el coll d’ampolla de l’entrada de dades manual.
Assoliment tècnic: S’ha aconseguit una precisió de l’OCR superior al 90% en condicions de llum estàndard.
Escalabilitat: L’arquitectura permet afegir fàcilment serveis d’exportació al núvol (Azure/AWS) o integració amb lectors de codis de barres tradicionals en futures versions.
I les idees a futur son principalment un sistema per els objectes que surten ,de treure’ls del estoc i generar un albarà escanyant les etiquetes del paquet