EN|ES
← projects/
caja-menor.django.pyIn production

Petty Cash Management

Multi-hotel finance system: expenses, petty cash and purchase requests

company:
GEH Suites
period:
Feb 2025 — Jun 2026
  • Django
  • Django REST Framework
  • PostgreSQL
  • Redis
  • Astro
  • React
  • TypeScript
  • Tailwind CSS
  • Docker
  • Bitrix24 API

// problem

Each hotel in the group handled its petty cash and administrative expenses manually, with no centralized traceability or consolidated reports, and reconciling supplier invoices was an error-prone manual process.

// my role

I designed and modeled the database, built the API with Django REST Framework, defined the layered backend architecture, developed the frontend with Astro/React, and automated invoice ingestion with an RPA bot. I also built Federico, an AI accounting assistant (OpenCLAW) that analyzed purchase patterns and generated accounting and petty cash reports.

// architecture

FrontendAstro + React + TS
API DjangoDRF · Views
Service layerbusiness logic
Redisquery cache
RPA botinvoices by email
Bitrix24external CRM
PostgreSQLcaja_menor
PostgreSQLpurchase requests
PostgreSQLinvoices

Simplified view of the real system, rebuilt from internal technical documentation — without exposing proprietary code.

// technical decisions

Services as the single source of business logic

DRF views only translate HTTP; all balance calculations, validation and cash allocation live in an independent service layer, which kept the system testable while scaling to 13 hotels.

Routing to multiple databases

I split petty cash, purchase requests and processed invoices into three separate PostgreSQL databases with a dedicated router, so the growth of one module wouldn't degrade the performance of the others.

RPA to automate invoicing

A bot reads invoices from email, records them in the CRM (Bitrix24) and attaches the supporting documents automatically, cutting the accounting team's operational time by 40%.

// impact

Hotels managed
13
Time reduction (RPA)
-40%
Databases
3

PostgreSQL routed by domain

Access roles
5

admin · manager · cashier · accountant · purchasing

Proprietary GEH Suites code — I still have access to the repository, but it must remain private. This case study uses only technical documentation and does not reproduce real code.