MVP orientado a Peru (PEN + IGV 18%) para gestionar facturas de extremo a extremo.
- 👤 Registrar cliente
- 🧾 Crear factura con items
- ✅ Validar calculos y reglas
- 📤 Emitir factura
- 📄 Generar PDF
- 📧 Enviar por correo
- 🕘 Mantener historial y trazabilidad
- ⚙️ Backend API con Spring Boot, JWT, persistencia y migraciones
- 🖥️ Frontend web con React para operar clientes y facturas
- 📄 Generacion de PDF con iText
- ✉️ Envio de correo SMTP (recomendado SendGrid)
- 🐳 Contenedores Docker para entorno local
- 🔁 CI en GitHub Actions
- ☁️ Archivos listos para despliegue en Railway (backend) y Vercel (frontend)
- Backend: Java 17, Spring Boot, Spring Security, JPA, Flyway, MySQL, iText
- Frontend: React + Vite
- Infra: Docker Compose
- Auth: JWT (access + refresh)
- backend: API REST, seguridad y logica de negocio
- frontend: aplicacion React
- database: artefactos de base de datos
- scripts: smoke tests
- docs: guias operativas de despliegue
- Docker + Docker Compose
- Puertos libres 5173, 8080, 3306, 8025
- Copia
.env.examplea.env - Ajusta secretos y credenciales
- Ejecuta:
docker compose up --build- Frontend: http://localhost:5173
- Backend API: http://localhost:8080
- Health: http://localhost:8080/actuator/health
- Mailpit (correo de prueba): http://localhost:8025
cd backend
./mvnw spring-boot:runcd backend
.\mvnw.cmd spring-boot:runcd frontend
npm install
npm run dev- Registra un usuario en
/api/v1/auth/register - Inicia sesion en la UI
- Crea un cliente
- Crea una factura con items
- Emite la factura
- Descarga el PDF
- Envia la factura por correo
💡 Tip: si usas Mailpit en local, revisa los correos en http://localhost:8025.
Usa .env.example como plantilla principal.
- SPRING_PROFILES_ACTIVE
- APP_BASE_URL
- DB_URL (o DB_HOST/DB_PORT/DB_NAME/DB_USER/DB_PASSWORD)
- JWT_SECRET
- JWT_ACCESS_EXP_MIN
- JWT_REFRESH_EXP_DAYS
- MAIL_HOST
- MAIL_PORT
- MAIL_USERNAME
- MAIL_PASSWORD
- MAIL_FROM
- CORS_ALLOWED_ORIGINS
- VITE_API_URL
- POST /api/v1/auth/register
- POST /api/v1/auth/login
- POST /api/v1/auth/refresh
- POST /api/v1/customers
- GET /api/v1/customers
- GET /api/v1/customers/{id}
- POST /api/v1/invoices
- POST /api/v1/invoices/validate
- GET /api/v1/invoices
- GET /api/v1/invoices/{id}
- POST /api/v1/invoices/{id}/emit
- GET /api/v1/invoices/{id}/pdf
- POST /api/v1/invoices/{id}/send-email
- Crea proyecto en Railway
- Agrega MySQL
- Crea servicio backend apuntando a carpeta
backend - Configura variables de entorno (ver
.env.example) - Usa healthcheck en
/actuator/health
📝 Nota: Flyway ejecuta migraciones automaticamente al arranque.
- Crea proyecto apuntando a carpeta
frontend - Configura
VITE_API_URLcon la URL publica del backend - Build command:
npm run build - Output directory:
dist
El archivo frontend/vercel.json ya incluye rewrite SPA para rutas internas.
- docs/DEPLOY_CHECKLIST.md
./scripts/smoke-test.ps1 -BaseUrl "https://api-tu-proyecto.up.railway.app" -FrontendUrl "https://tu-frontend.vercel.app"./scripts/smoke-test.sh "https://api-tu-proyecto.up.railway.app" "https://tu-frontend.vercel.app"Este repositorio usa flujo de ramas + Pull Request obligatorio sobre main.
- Revisa la guia completa en
CONTRIBUTING.md
- 🔐 JWT y control de acceso por roles (ADMIN, EMISOR)
- 👥 Modulo de clientes
- 🧾 Modulo de facturas con validacion
- 📤 Emision, PDF y envio por correo
- 🕓 Historial basico de eventos
- 🟢 CI con build backend y frontend