Sistema completo de gestión de trámites migratorios con Frontend React + Backend FastAPI + PostgreSQL.
# Windows
verify_integration.bat
# Linux/Mac
chmod +x verify_integration.sh
./verify_integration.shcd back_completo
# Windows
start_backend.bat
# Linux/Mac
chmod +x start_backend.sh
./start_backend.sh# En la raíz del proyecto
npm run devAcceder a:
- 🌐 Frontend: http://localhost:5173
- 📚 API Docs: http://127.0.0.1:8000/docs
- 🔧 API: http://127.0.0.1:8000
- Frontend: React 18 + Vite
- Estilos: TailwindCSS
- Routing: React Router DOM
- HTTP Client: Axios (con opción de migrar a Fetch)
- Icons: Material Symbols
# Instalar dependencias
npm install
# Iniciar servidor de desarrollo
npm run dev
# Compilar para producción
npm run buildsrc/
├── components/ # Componentes reutilizables
│ ├── Sidebar.jsx
│ ├── Header.jsx
│ ├── Layout.jsx
│ ├── Toast.jsx
│ └── LoadingSpinner.jsx
├── pages/ # Páginas principales
│ ├── DashboardPage.jsx
│ ├── MailroomPage.jsx # Clasificación de documentos
│ ├── OCRExtractionPage.jsx # Extracción OCR
│ ├── CompliancePage.jsx # Validación legal
│ └── AppointmentsPage.jsx # Agendamiento de citas
├── services/ # Servicios de API
│ ├── api.js # Configuración de Axios
│ └── index.js # Servicios por módulo
├── App.jsx # Componente principal
├── main.jsx # Punto de entrada
└── index.css # Estilos globales
El proyecto está configurado para conectarse a un backend Python. El servidor backend debe:
- Activar CORS para permitir peticiones desde el frontend:
# Ejemplo con FastAPI
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["http://localhost:3000"], # Frontend URL
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)- Endpoints implementados (basados en escenarios):
GET /api/documents/pending- Listar documentos pendientesPOST /api/documents/:id/link- Vincular documento a trámiteGET /api/cases/:id/documents- Documentos de un trámitePATCH /api/documents/:id/status- Actualizar estado
POST /api/ocr/process/:id- Procesar documentoGET /api/ocr/results/:id- Obtener resultadosPUT /api/ocr/manual-update/:id- Actualización manualPOST /api/ocr/manual-review/:id- Marcar para revisión
POST /api/validation/profile/:id- Validar perfilGET /api/validation/status/:id- Estado de validaciónGET /api/validation/civil-registry/:cedula- Consultar Registro CivilGET /api/validation/migration-police/:cedula- Consultar PolicíaPOST /api/validation/manual-approve/:id- Aprobar manualmente
GET /api/appointments/availability- Ver disponibilidadPOST /api/appointments- Crear citaPUT /api/appointments/:id/reschedule- ReagendarDELETE /api/appointments/:id- Cancelar cita
Si necesitas cambiar de Axios a Fetch, el código ya incluye una función fetchAPI comentada en src/services/api.js.
Para migrar:
- Descomentar la función
fetchAPIenapi.js - Reemplazar las llamadas de los servicios:
// Antes (Axios)
export const documentService = {
getPendingDocuments: () => api.get('/documents/pending'),
};
// Después (Fetch)
export const documentService = {
getPendingDocuments: () => fetchAPI('/documents/pending'),
};- Visualización de documentos pendientes
- Vinculación de documentos a trámites activos
- Validación de estado de trámites
- Prevención de vinculación duplicada
- Procesamiento automático con OCR
- Detección de baja confianza
- Entrada manual cuando falla OCR
- Resaltado de campos con problemas
- Validación contra Registro Civil
- Verificación de impedimentos migratorios
- Manejo de errores de servicios externos
- Validación manual por evidencia física
- Visualización de disponibilidad
- Creación de citas
- Validación de estado legal
- Cancelación y reagendamiento
colors: {
"primary": "#2a67b2", // Azul principal
"primary-dark": "#1e4b85", // Azul oscuro
"primary-light": "#eef4fb", // Azul claro
// ... más colores
}- Display: Manrope (títulos y navegación)
- Body: Noto Sans (contenido)
El sistema está preparado para usar JWT. El interceptor de Axios automáticamente:
- Agrega el token a las peticiones
- Maneja errores 401 (no autorizado)
- Redirige al login cuando expira la sesión
Actualmente el sistema usa datos mock basados en los escenarios de prueba. Para conectar con el backend real:
- Descomentar las llamadas a servicios en cada página
- Comentar/eliminar los datos mock
- Asegurar que el backend esté corriendo en
http://localhost:8000
Vite está configurado para hacer proxy de /api al backend:
// vite.config.js
server: {
proxy: {
'/api': {
target: 'http://localhost:8000',
changeOrigin: true,
}
}
}Cambia el target si tu backend usa otro puerto.
- Chrome DevTools: Network tab para ver peticiones
- Console para logs de errores
- React DevTools para inspeccionar componentes
Proyecto académico - Universidad - Verificación y Validación