Skip to content
NowThesis: Spanish questions → SQL over public budget data

Rodrigo Solbes

Engineering software and AI systems you can verify.

Computer Engineering student and Systems Auxiliary in Tampico, Mexico, with three years across software, data and IT infrastructure. I ship production machine learning inside an enterprise .NET ERP, and I’m moving into Software Engineering and Enterprise AI, building systems where every answer shows its evidence.

Focus
Applied ML · Text-to-SQL
Based in
Tampico, MX · EN / ES
Eligible to work
Mexico · EU (Spanish citizen)
Degree
B.Eng. CompE · UAT ’27
schema presupuestoloaded · reconciled
Star schema of the Mexican federal budget warehouseA central fact table, hecho_gasto, with 1,285,233 rows, joined to twelve dimension tables.programa_presupuestario901 rowsunidad_responsable1,926 rowsramo50 rowspartida459 rowsmodalidad23 rowsentidad_federativa34 rowsactividad_institucional375 rowsfuente_financiamiento6 rowsfinalidad4 rowsfuncion28 rowssubfuncion91 rowstipo_gasto9 rowshecho_gasto1,285,233 rows
Fig. 1 · Federal budget warehouse, 2020–2025. Twelve conformed dimensions around one fact table. Hover a node.

§01Abstract

I work where enterprise data meets language models. At work, I ship a calibrated churn model inside a .NET ERP that serves about a hundred branches. In research, I’m building a system that answers Spanish questions about Mexico’s federal budget, choosing between generated SQL and retrieved regulation, and abstaining when the evidence isn’t there. What connects the two: systems that are reproducible, least-privileged, and honest about what they know.

Keywords text-to-SQL·retrieval-augmented generation·churn modeling·probability calibration·dimensional modeling·least privilege·enterprise .NET

i.

Evidence over assertion

Every answer carries its proof: the SQL that ran, or the passage it cites. When the data can’t support an answer, the right output is an abstention.

ii.

Reproducible by default

Sources recorded with URL, date and hash. Prompts versioned like code. Three runs per configuration, reported with mean and spread.

iii.

Defense in depth

The database doesn’t trust the validator, and the validator doesn’t trust the model. Each layer is named for what it can and can’t stop.

§02Selected work

Case studies in data systems, applied AI and full-stack engineering.

The problem, the architecture and how it ships, with the real numbers behind each one.

FeaturedUndergraduate thesis · Facultad de Ingeniería Tampico, UAT2026 – 2027 In progress

presupuesto-nlq-mx

Ask Mexico’s federal budget a question in Spanish, and see the SQL that answered it.

View repository
Python 3.14PostgreSQLpsycopg 3sqlglotYAMLLLM APIs

01Problem

Mexico publishes its federal budget as open data, but reading it takes both data skills and government-accounting knowledge. The figures live in tables keyed by alphanumeric codes that only make sense against external catalogs; the rules that explain them live in regulatory PDFs. The data is open, but most people can’t use it.

02Approach

A system that answers Spanish questions by one of two routes. The data route translates the question into SQL over a documented semantic layer, validates it, runs it under a read-only role and returns the table with the exact query. The document route retrieves passages from official regulations and answers with citations. A router picks the route, and the system abstains when the evidence can’t support an answer.

fact rows loaded and reconciled
1,285,233
fiscal years normalized, 2020–2025
6
conformed dimensions
12
security checks passing
11/11

03Architecture

Fig. 2 · System architecture and build status
  • Built
  • In progress
  • Planned
Question

Spanish, natural language

RouterPlanned

LLM vs trained classifier vs both routes

Data route · text-to-SQL

Semantic contextBuilt

Descriptive views + classification docs v1

SQL validationPlanned

One SELECT only; reject SET and set_config()

Read-only executionBuilt

consulta_nlq role, 15 s limit

Table + executed SQLPlanned

The query is always shown

Document route · RAG

Document indexPlanned

Articles and clauses with provenance

RetrievalPlanned

BM25 vs dense vs hybrid, ± reranking

Grounded generationPlanned

Faithfulness measured separately

Answer + citationsPlanned

Every claim points to a source

Foundations

PostgreSQL warehouseBuilt

Star schema · 1,285,233 rows · validated load

Evaluation setIn progress

61 questions drafted · human verification gate

Either route can end in an abstention. When the evidence can’t support an answer, saying so is the correct output.

04Engineering notes

The CSV and the XLSX disagree.

The Ministry of Finance publishes every fiscal year as both CSV and XLSX. A row-level cross-check showed they aren’t equivalent, so the source format is chosen per year. Every correction is declared in a normalization log, because a silent fix can’t be told apart from altering the data.

Loads run in a single transaction and end by reconciling row counts and per-stage totals (approved, accrued, paid) against the source, to the peso. Any mismatch rolls back the whole load. If the load log exists, validation passed.

YearSourceWhy
2020.xlsxCSV drops 10 rows
2021.xlsxCSV drops 2 rows and blanks amounts
2022.xlsxCSV drops 3 rows, adds 828,067 filler rows
2023.xlsxCSV drops 1 row and corrupts a key
2024.xlsxCSV overstates branch 51 by MXN 9,699 M
2025.csvFormats identical; CSV parses faster
Table 1 · Source format per fiscal year, from docs/bitacora_normalizacion.md
Applied ML · In productionCompany work · Unitam

Customer Churn Prediction

Ranks 136K business customers of a retailer with ~100 branches by their probability of lapsing, scored monthly inside the company’s .NET ERP.

Lapsing customers were flagged with a recency heuristic. The business needed a ranked list it could act on, with a risk percentage that means what it says, built from seven years of invoice history.
PR-AUC (was 0.567)
0.617
Brier (was 0.260)
0.167
training snapshots
385K
PythonLightGBMPyTorchpandasSQL ServerC# · .NET2026
Full-stack · Client projectPrivate repositories

Casita Azul Real-Estate Platform

Public listings site and back office for a real-estate agency: a property catalog with maps and favorites, plus an admin console for properties, agents and users.

The agency needed its listings online and a way for staff to manage them without touching the database: publish properties with photo galleries, manage in-house and external agents, control who can administer what, and see which listings get attention.
API endpoints
37
commits
104
Angular apps
2
Angular 20TypeScriptFlaskPostgreSQLSupabase AuthCloudflare R2DockerAug – Dec 2025

OS Simulators: Memory & CPU Scheduling

Two operating-systems simulators with live visualization: a paged memory manager built by a team of five, and a CPU scheduler.

Paging, TLB hits, page faults and scheduling policies are easy to describe and hard to see. The goal was to show, step by step, how an OS allocates memory and CPU time, and what happens under pressure with many processes running.
max processes
50
scheduling policies
4
page replacement
FIFO
C99GTKMakeLinux · MinGWNov – Dec 2025

Point-of-Sale System

Sales, inventory, customers and users for a small retailer, with role-based access, receipts and email notifications.

A retail business needed to register sales in real time, keep inventory accurate, manage customers and staff, and give managers reports, with each role seeing only what it should.
PythonFlaskMySQLJavaScriptAug – Dec 2025
§03Experience & credentials

Three years from server rooms to production ML.

IT infrastructure, independent consulting and enterprise .NET, now shipping machine learning inside an ERP that serves about a hundred branches.

Timeline

  1. Jul 2026 – Presentnow

    Systems Auxiliary (Software Development)

    Unitam Uniformes · Tampico, MX

    • Full-time development on UNITAM NT, the company’s ERP and point-of-sale platform (C#, .NET Framework 4.7.1, WinForms, DevExpress, SQL Server), used across ~100 retail branches.
    • Shipped a customer-churn model: monthly batch scoring written back to SQL Server and surfaced in the ERP’s reports. See the case study above.
    • Built reporting modules in a five-layer architecture that replaced hand-assembled reports, and wrote or optimized T-SQL procedures, fixing query timeouts and data-attribution bugs in regional sales reporting.
    • Integrated BBVA and Banamex payment terminals into the point of sale (in bank certification) and automated order generation for a key wholesale client.
    • Gathered requirements with marketing, sales and finance; my technical assessment ruled out a TikTok Shop → Shopify → ERP integration at this stage.
    C#.NET FrameworkDevExpressSQL ServerT-SQLPythonLightGBM
  2. Jan – Jun 2026

    Academic Exchange, Computer Engineering

    Universidad de Burgos · Spain

    • Data mining in Python (classification, clustering, association), network analysis with NetworkX, and reverse engineering and refactoring of Java codebases against formal quality metrics.
    PythonData miningNetworkXJava
  3. Feb – Dec 2025

    Software Developer & IT Consultant

    Solbes Soluciones Inteligentes · Tampico, MX

    • Independent practice serving 10–12 local businesses end to end, from requirements through deployment and support.
    • Delivered client software, including a real-estate platform and a questionnaire app for a psychology practice, plus point-of-sale systems with inventory and reporting. Automation scripts cut manual data entry by 60%.
    • Deployed servers, networks and security-camera systems for small-business clients.
    PythonTypeScriptAngularFlaskPostgreSQLDocker
  4. Jan 2023 – Sep 2025

    IT Support & Infrastructure (part-time)

    CIYASA S.A. de C.V. · Tampico, MX

    • Sole IT resource for the offices: on-site servers at ~99% uptime and a dual-ISP failover network with no single point of failure.
    • Administered Google Workspace and Cloud, and wrote Python tools for monitoring and automation, plus internal utilities and documentation portals.
    PythonLinuxGCPNetworking
  5. Aug 2022 – May 2027

    B.Eng. Computer Engineering

    Universidad Autónoma de Tamaulipas · Tampico, MX

    • GPA 9.13 / 10. Thesis in progress: natural-language querying of Mexico’s public budget data (featured above).
    • Coursework spans linear algebra, probability and statistics, numerical methods, algorithms, operating systems, networks and databases, with AI and embedded systems in the final year.
    AlgorithmsOperating systemsDatabasesAI

Recognition

  • 1st place · team

    CTF MetaRed Mexico National Championship

    Capture the Flag · 2025

  • 1st place · team

    ANIEI CTF at ANUIES-TIC

    Capture the Flag · 2025

Capabilities

ML & Data
LightGBMPyTorchscikit-learnpandasCalibrationText-to-SQLRAG
Languages
PythonC#SQLTypeScriptCJava
Databases
SQL Server · T-SQLPostgreSQLMySQLFirebaseDimensional modeling
Enterprise .NET
.NET FrameworkWinFormsDevExpressLayered architectureReporting
Web & APIs
AngularFlaskRESTSupabaseDocker
Infra & Security
LinuxGCPNetworkingLeast privilegeCTF

§04Contact

Let’s build systems people can check.

Open to software engineering and enterprise AI roles, internships and research collaborations, remote or on-site. As a Spanish citizen, I can work anywhere in the EU with no visa sponsorship. I reply in English or Spanish.