Asistencia Geo — Documentación

01 — Arquitectura

1. Visión general

Sistema multi-tenant de control de asistencia con geocercas y anti-fraude. Componentes:

  1. App móvil Flutter — captura ubicación, valida integridad del dispositivo, autoriza (estándar / huella-FaceID / facial) y envía el check-in/out.
  2. Backend FastAPI — autentica (JWT), valida geocerca (ST_DWithin), es la autoridad de tiempo (NTP), escribe eventos inmutables y sincroniza con Odoo.
  3. PostgreSQL + PostGIS — fuente de verdad; eventos append-only con cadena de hash.
  4. Panel web — dashboard para RR.HH. con mapa y reportes.
  5. Odoo — ERP de nómina vía XML-RPC (hr.attendance).

2. Principios de diseño

3. Flujo de un check-in

sequenceDiagram
  participant App as App Flutter
  participant API as FastAPI
  participant DB as PostgreSQL+PostGIS
  participant Odoo as Odoo

  App->>App: biometría + detección mock/root/jailbreak + GPS
  App->>API: POST /attendance/check-in (JWT, coords, flags, idempotency_key)
  API->>API: valida JWT + offset NTP + flags anti-spoofing
  API->>DB: ST_DWithin(site.geom, coords, radius_m)
  DB-->>API: inside/outside
  API->>DB: INSERT evento (cadena de hash, server_time)
  API->>DB: INSERT odoo_sync (pending)
  API-->>App: 200 { geofence_status, server_time, hash }
  Note over Odoo: worker asíncrono
  DB->>Odoo: XML-RPC hr.attendance create/write

4. Estructura de carpetas

asistencia-geo/
├── docs/       ← documentación técnica y legal
├── db/         ← DDL + triggers de inmutabilidad + seed
├── backend/    ← FastAPI (app/ por capas: core, models, schemas, api, services, tasks)
├── mobile/     ← Flutter (lib/ por feature + core)
└── web/        ← panel web React + Vite + MapLibre

Backend (capas)

Móvil (features)

5. Seguridad en tránsito y reposo

6. Escalabilidad