Guía de procesos
Este documento describe, en formato de guías paso a paso (How-to), los procesos más comunes en el equipo de desarrollo. El objetivo es garantizar consistencia, facilitar el onboarding de nuevos integrantes y servir como referencia para auditorías.
1. Preparación del entorno de desarrollo
Section titled “1. Preparación del entorno de desarrollo”- Cómo clonar el repositorio.
Terminal window git clone https://gitlab.com/queavos/unae_app.git - Instalación de dependencias (backend y frontend).
Terminal window cd unae_appcomposer installnpm install - Configuración de variables de entorno (
.env).Terminal window cp .envExample .env - Arranque de servicios locales (Laravel, React, PostgreSQL).
Terminal window cd unae_appphp artisan servenpm run dev
2. Flujo de control de versiones (Git)
Section titled “2. Flujo de control de versiones (Git)”-
Convenciones de ramas (
prod,development,development2,test). -
Convenciones de mensajes de commit (Conventional Commits).
El flujo de control de versiones es el siguiente:
prodes la rama principal, donde se encuentra el código fuente de producción.developmentes la rama de desarrollo perteneciente a desarrollador x.development2es la rama de desarrollo perteneciente a desarrollador y.testes la rama de test, donde se realizan los merge de las ramasdevelopmentydevelopment2y se hacen las pruebas antes de subir los cambios a producción.- En caso de ser necesario se crean mas ramas para el desarrollo de nuevas funcionalidades.
3. Migraciones y base de datos
Section titled “3. Migraciones y base de datos”- Cómo crear migraciones en Laravel.
Terminal window php artisan make:migration create_table_name - Cómo aplicar migraciones en entornos locales y remotos.
Terminal window php artisan migrate - Estrategia de rollback de migraciones.
Terminal window php artisan migrate:rollback - Carga de datos iniciales (seeders).
Terminal window php artisan db:seed
4. Gestión de dependencias
Section titled “4. Gestión de dependencias”- Actualización de paquetes en Composer (PHP) y NPM/PNPM (JS).
Terminal window composer updatenpm update - Validación de compatibilidad al actualizar dependencias.
- Uso de lock files (
composer.lock,package-lock.json,pnpm-lock.yaml).
5. Despliegue (Deploy)
Section titled “5. Despliegue (Deploy)”- Flujo de despliegue: dev → test → producción.
- Una vez que se han realizado los cambios en las ramas
development2ydevelopment, se debe fusionar contestyprod, probar en entorno de test todas las nuevas features y corregir posibles errores.
(Nota: si hay conflictos, resolverlos y volver a ejecutar el merge)Terminal window git checkout testgit pull origin testgit checkout prodgit pull origin prodgit checkout developmentgit pull origin developmentgit checkout development2git pull origin development2git checkout testgit merge prodgit merge development2git merge developmentgit push origin test- Una vez que se han realizado los cambios en la rama
test, se debe fusionar conprody desplegar.
Terminal window git checkout prodgit pull origin prodgit checkout testgit merge prodgit push origin prod- Despliegue en producción.
- Conectarse via ssh a la máquina de producción.
Terminal window ssh usuario@ip- Actualizar el repositorio.
Terminal window git pull origin prod- Compilar React y limpiar cachés en Laravel.
(Nota: no se compila directamente con el comando run prod ya que se implementó una forma de eliminar todos los archivos de la carpeta public/js y evitar tener problemas de caché; El parametro que recibe es la fecha actual en formato YYYYMMDD, por ejemplo:Terminal window node new_version.js 'YYYYMMDD'php artisan cache:clearphp artisan view:clearphp artisan config:clearnode new_version.js '20250902')
- Una vez que se han realizado los cambios en las ramas
6. Monitoreo y logs
Section titled “6. Monitoreo y logs”- Revisión de logs en Laravel (
storage/logs/).- Actualmente no se tiene una forma de monitorear los logs en tiempo real. Pero se está trabajando en eso
- Revisión de auditorías (
laravel-audits).- Actualmente no se tiene una forma de monitorear las auditorías en tiempo real. Pero los registros de auditoría se guardan en la base de datos y se pueden consultar a través de sql
- Monitoreo de errores en frontend.
- Actualmente no se tiene una forma de monitorear los errores en tiempo real. Pero se planea la implementación a futuro de un sistema de monitoreo de errores.
7. Gestión de roles y permisos
Section titled “7. Gestión de roles y permisos”El sistema utiliza el paquete spatie/laravel-permission para manejar roles y permisos.
-
Cómo crear un rol nuevo
-
Abrir RoleTableSeeder.php.
-
Agregar:
Role::firstOrCreate(['role_name'=>'nombre-del-rol']);- Ejecutar:
Terminal window php artisan db:seed --class=RoleTableSeeder- Confirmar que el rol existe en la tabla
roles.
-
-
Cómo asignar permisos a un rol o usuario
- Abrir PermissionTableSeeder.php:
Permission::firstOrCreate(['name' => 'nuevo-permiso']);- Asignar permiso al rol:
- Ejecutar tinker:
Terminal window php artisan tinker- Ejecutar:
use Spatie\Permission\Models\Role;$role = Role::findByName('nombre-del-rol');$role->givePermissionTo('nuevo-permiso');- Asignar rol al usuario:
use App\Models\User;$user->assignRole('nombre-del-rol');- También se puede asignar permisos directamente a usuarios:
use App\Models\User;$user->givePermissionTo('nuevo-permiso'); -
Validación de accesos en endpoints
En controladores:
public function index(){$this->authorize('nuevo-permiso');// ...}Con middlewares:
Route::get('/reportes', 'ReportController@index')->middleware('permission:nuevo-permiso');En vistas (Blade):
@can('nuevo-permiso')<a href="/reportes">Ver reportes</a>@endcan
8. Backups y restauración
Section titled “8. Backups y restauración”- Procedimiento para generar un backup de la base de datos.
- Se cuenta con un script automatizado que ejecuta backup de la base de datos diariamente y los almacena en una carpeta privada de google drive.
- Procedimiento para restaurar un backup.
- Se descarga el backup desde google drive y se restaura en la base de datos utilizando las herramientas de restauración de dbeaver.
- Pruebas de restauración.
9. Seguridad
Section titled “9. Seguridad”-
Gestión de llaves y secretos
- Todas las claves (DB, JWT, API externas, etc.) deben estar en
.env. - Nunca subir
.enva git. - Para producción, usar un gestor de secretos (ej. Vault, AWS Secrets Manager o equivalente).
- Todas las claves (DB, JWT, API externas, etc.) deben estar en
-
Rotación de contraseñas y tokens
- Las contraseñas de servicios deben rotarse cada 90 días (recomendación estándar).
- Los tokens de API deben tener expiración configurable y renovarse automáticamente cuando sea posible.
-
Procedimiento en caso de incidente
- Identificar y aislar el sistema afectado.
- Revocar todas las llaves y tokens comprometidos.
- Analizar logs para determinar alcance del incidente.
- Informar al equipo y documentar acciones tomadas.
- Aplicar parches o configuraciones necesarias antes de reactivar servicios.
10. Testing
Section titled “10. Testing”Pruebas unitarias en Laravel
Section titled “Pruebas unitarias en Laravel”-
Se ejecutan con:
Terminal window php artisan test -
Ubicación:
tests/Unit/ -
Buenas prácticas: probar lógica de negocio aislada (servicios, helpers, modelos).
Pruebas de integración
Section titled “Pruebas de integración”-
Ubicación:
tests/Feature/ -
Verifican interacción entre controladores, rutas, DB y servicios.
-
Ejemplo:
public function test_usuario_puede_crear_inscripcion(){$user = User::factory()->create();$this->actingAs($user)->post('/inscripciones', [...])->assertStatus(201);}
Tests de frontend (React)
Section titled “Tests de frontend (React)”-
Framework sugerido: Jest + React Testing Library.
-
Ejemplo básico:
import { render, screen } from '@testing-library/react';import Inscripciones from './Inscripciones';test('renderiza título de inscripciones', () => {render(<Inscripciones />);expect(screen.getByText(/Inscripciones/)).toBeInTheDocument();});
Reportes de cobertura
Section titled “Reportes de cobertura”-
Backend:
Terminal window php artisan test --coverage -
Frontend:
Terminal window npm run test -- --coverage -
Resultado debe integrarse en CI/CD para ver métricas de calidad.
11. Documentación
Section titled “11. Documentación”Nota: revisar Guia de estilo de escritura
12. Estándares de código
Section titled “12. Estándares de código”- Convenciones de nombres para archivos, variables, clases y funciones.
- Uso de linters (ESLint/Biome para JS, PHP_CodeSniffer para PHP).
- Uso de formatters (Prettier/Biome, PHP-CS-Fixer).
13. Reuniones y flujos internos
Section titled “13. Reuniones y flujos internos”(Nota: El equipo no suele realizar reuniones)
14. Release management
Section titled “14. Release management”Nota: actualmente no se tiene un sistema de releases, pero se planea implementar en el futuro. Se optará por CalVer (Calendar Versioning)
-
Posible estrategia a implementar
-
Formato sugerido:
YYYY.MM.MINORYYYY→ año (ej. 2025)MM→ mes (ej. 09)MINOR→ número incremental dentro del mismo mes (.0,.1,.2…)- Ejemplo:
2025.09.0,2025.09.1,2025.10.0
-
Ventajas
-
Refleja fácilmente cuándo salió la versión → útil para equipos que siguen ciclos académicos/financieros.
-
Evita discusiones sobre compatibilidad o nivel de cambio (SemVer).
-
Facilita auditorías y trazabilidad: se puede ver de inmediato en qué mes/año se desplegó cierta release.
-
Changelog
-
Se recomienda usar Conventional Commits para que cada release pueda generar automáticamente un changelog.
-
Herramientas posibles:
-
Releases en Git
-
Cada release se etiqueta con el formato CalVer (
git tag 2025.09.0). -
Publicar release en GitLab/GitHub con changelog y artefactos asociados (ej. dump de DB, binarios).
-
Deploy por ambiente
- Dev → pruebas iniciales de integración.
- Test → validación con usuarios internos.
- Prod → deploy definitivo.
Cada release debe pasar en orden y documentarse qué cambió en cada ambiente.
- Rollback plan
Nota: revisar Guia de rollback