Files
Torch2196 4c3dc94ff2 Initial commit: Horux Strategy Platform
- Laravel 11 backend with API REST
- React 18 + TypeScript + Vite frontend
- Multi-parser architecture for accounting systems (CONTPAQi, Aspel, SAP)
- 27+ financial metrics calculation
- PDF report generation with Browsershot
- Complete documentation (10 documents)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 22:24:00 -06:00

74 lines
2.9 KiB
PHP

<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\ClienteController;
use App\Http\Controllers\BalanzaController;
use App\Http\Controllers\CuentaController;
use App\Http\Controllers\ReporteController;
use App\Http\Controllers\Admin\UsuarioController;
use App\Http\Controllers\Admin\UmbralController;
use App\Http\Controllers\Admin\ReglaMapeeoController;
use App\Http\Controllers\Admin\GiroController;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
*/
// Rutas públicas
Route::post('/login', [AuthController::class, 'login']);
// Rutas protegidas
Route::middleware('auth:sanctum')->group(function () {
// Autenticación
Route::post('/logout', [AuthController::class, 'logout']);
Route::get('/user', [AuthController::class, 'user']);
// Giros (público para selects)
Route::get('/giros', [GiroController::class, 'activos']);
// Clientes
Route::apiResource('clientes', ClienteController::class);
// Balanzas (anidadas bajo clientes)
Route::get('/clientes/{cliente}/balanzas', [BalanzaController::class, 'index']);
Route::post('/clientes/{cliente}/balanzas', [BalanzaController::class, 'store']);
Route::get('/balanzas/{balanza}', [BalanzaController::class, 'show']);
Route::get('/balanzas/{balanza}/cuentas', [BalanzaController::class, 'cuentas']);
Route::put('/balanzas/{balanza}/exclusiones', [BalanzaController::class, 'updateExclusiones']);
// Cuentas
Route::put('/cuentas/{cuenta}/clasificacion', [CuentaController::class, 'updateClasificacion']);
Route::post('/cuentas/{cuenta}/toggle-exclusion', [CuentaController::class, 'toggleExclusion']);
Route::get('/anomalias', [CuentaController::class, 'anomalias']);
// Reportes
Route::get('/clientes/{cliente}/reportes', [ReporteController::class, 'index']);
Route::post('/clientes/{cliente}/reportes', [ReporteController::class, 'store']);
Route::get('/reportes/{reporte}', [ReporteController::class, 'show']);
Route::get('/reportes/{reporte}/pdf', [ReporteController::class, 'pdf']);
Route::delete('/reportes/{reporte}', [ReporteController::class, 'destroy']);
// Rutas de administración (solo admin)
Route::middleware('role:admin')->prefix('admin')->group(function () {
// Usuarios
Route::apiResource('usuarios', UsuarioController::class);
// Giros (CRUD completo)
Route::apiResource('giros', GiroController::class);
// Umbrales
Route::apiResource('umbrales', UmbralController::class);
Route::get('/umbrales/metrica/{metrica}/{giro_id?}', [UmbralController::class, 'porMetrica']);
// Reglas de mapeo
Route::apiResource('reglas-mapeo', ReglaMapeeoController::class);
// Registrar usuarios (solo admin)
Route::post('/register', [AuthController::class, 'register']);
});
});