588 lines
6.7 KiB
Markdown
588 lines
6.7 KiB
Markdown
# Proyecto ERP Web Empresarial Integrado con SAP Business One Service Layer
|
|
|
|
# Objetivo General
|
|
|
|
Desarrollar una aplicación web empresarial para mantenimiento de datos maestros de Socios de Negocio similar al formulario estándar de SAP Business One.
|
|
|
|
La solución utilizará:
|
|
|
|
- Frontend:
|
|
- React.js
|
|
- Next.js
|
|
- TypeScript
|
|
|
|
- Backend:
|
|
- Python
|
|
- FastAPI
|
|
|
|
- Integración:
|
|
- SAP Business One Service Layer
|
|
|
|
---
|
|
|
|
# Filosofía de Arquitectura
|
|
|
|
La solución debe:
|
|
|
|
- Ser escalable
|
|
- Ser desacoplada
|
|
- Tener arquitectura por capas
|
|
- Tener código mantenible
|
|
- Tener funciones pequeñas y reutilizables
|
|
- Aplicar principios SOLID
|
|
- Tener separación de responsabilidades
|
|
- Tener documentación técnica
|
|
|
|
---
|
|
|
|
# Arquitectura General
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
|
|
A[Frontend Next.js] --> B[Backend FastAPI]
|
|
B --> C[SAP Business One Service Layer]
|
|
C --> D[SAP Business One Database]
|
|
```
|
|
|
|
---
|
|
|
|
# Tecnologías
|
|
|
|
# Frontend
|
|
|
|
- React.js
|
|
- Next.js
|
|
- TypeScript
|
|
- React Hook Form
|
|
- Zod
|
|
- Axios
|
|
- Zustand
|
|
- TailwindCSS
|
|
- Shadcn UI
|
|
|
|
---
|
|
|
|
# Backend
|
|
|
|
- Python
|
|
- FastAPI
|
|
- Pydantic
|
|
- SQLAlchemy
|
|
- httpx
|
|
- passlib[bcrypt]
|
|
- JWT Authentication
|
|
|
|
---
|
|
|
|
# Integración SAP
|
|
|
|
- SAP Business One Service Layer
|
|
- Session Management
|
|
- B1SESSION
|
|
- ROUTEID
|
|
|
|
---
|
|
|
|
# Estrategia de Desarrollo por Etapas
|
|
|
|
# IMPORTANTE
|
|
|
|
NO desarrollar frontend y backend simultáneamente.
|
|
|
|
El proyecto debe ejecutarse por etapas para:
|
|
- minimizar errores
|
|
- facilitar pruebas
|
|
- mantener arquitectura limpia
|
|
- evitar acoplamiento prematuro
|
|
|
|
---
|
|
|
|
# ETAPA 1 - Diseño de Arquitectura
|
|
|
|
## Objetivo
|
|
|
|
Definir completamente la arquitectura antes de programar.
|
|
|
|
---
|
|
|
|
## Tareas
|
|
|
|
### 1. Crear diagramas Mermaid
|
|
|
|
Crear:
|
|
|
|
- arquitectura general
|
|
- flujo login
|
|
- flujo CRUD
|
|
- flujo Service Layer
|
|
- arquitectura backend
|
|
- arquitectura frontend
|
|
|
|
---
|
|
|
|
## Diagramas recomendados
|
|
|
|
### Flujo Login
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
|
|
Frontend->>Backend: Login usuario
|
|
Backend->>SAP Service Layer: Login técnico SAP
|
|
SAP Service Layer-->>Backend: B1SESSION
|
|
Backend->>SAP Service Layer: Consultar EmployeesInfo
|
|
SAP Service Layer-->>Backend: Datos usuario
|
|
Backend-->>Frontend: JWT
|
|
```
|
|
|
|
---
|
|
|
|
### Arquitectura Backend
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
|
|
A[Routes] --> B[Services]
|
|
B --> C[Repositories]
|
|
C --> D[SAP Integration]
|
|
D --> E[Service Layer]
|
|
```
|
|
|
|
---
|
|
|
|
# Resultado esperado ETAPA 1
|
|
|
|
- Diagramas completos
|
|
- Arquitectura definida
|
|
- Carpetas definidas
|
|
- Responsabilidades definidas
|
|
|
|
---
|
|
|
|
# ETAPA 2 - Backend Base
|
|
|
|
# IMPORTANTE
|
|
|
|
Primero construir backend.
|
|
|
|
Razones:
|
|
- frontend depende APIs
|
|
- frontend depende autenticación
|
|
- frontend depende estructura JSON
|
|
- frontend depende validaciones
|
|
|
|
---
|
|
|
|
# Objetivos ETAPA 2
|
|
|
|
Construir:
|
|
- estructura FastAPI
|
|
- autenticación
|
|
- integración SAP
|
|
- manejo sesiones
|
|
- JWT
|
|
- logging
|
|
- manejo errores
|
|
|
|
---
|
|
|
|
# Estructura Backend
|
|
|
|
```text
|
|
/app
|
|
/api
|
|
/services
|
|
/repositories
|
|
/schemas
|
|
/models
|
|
/validators
|
|
/middlewares
|
|
/core
|
|
/integrations
|
|
/sap
|
|
/utils
|
|
/queries
|
|
```
|
|
|
|
---
|
|
|
|
# Funcionalidades Backend Iniciales
|
|
|
|
## 1. Login SAP técnico
|
|
|
|
Endpoint:
|
|
|
|
```text
|
|
POST /auth/login
|
|
```
|
|
|
|
---
|
|
|
|
## 2. Session Manager SAP
|
|
|
|
Implementar:
|
|
|
|
- login automático
|
|
- refresh automático
|
|
- manejo cookies
|
|
- timeout
|
|
- retry policy
|
|
|
|
---
|
|
|
|
## 3. JWT propio
|
|
|
|
Implementar:
|
|
|
|
- access token
|
|
- refresh token
|
|
- expiración
|
|
- middleware autenticación
|
|
|
|
---
|
|
|
|
## 4. Integración OHEM
|
|
|
|
Usar:
|
|
|
|
```text
|
|
EmployeesInfo
|
|
```
|
|
|
|
del Service Layer.
|
|
|
|
---
|
|
|
|
# Usuarios
|
|
|
|
Los usuarios funcionales estarán en:
|
|
|
|
```text
|
|
OHEM
|
|
```
|
|
|
|
mediante Service Layer.
|
|
|
|
---
|
|
|
|
# UDFs requeridos
|
|
|
|
| Campo | Uso |
|
|
|---|---|
|
|
| U_APP_USERNAME | Usuario |
|
|
| U_APP_PASSWORD | Password hash |
|
|
| U_APP_ROLE | Rol |
|
|
| U_APP_ACTIVE | Estado |
|
|
|
|
---
|
|
|
|
# Seguridad Passwords
|
|
|
|
Usar:
|
|
|
|
```text
|
|
bcrypt
|
|
```
|
|
|
|
Nunca guardar passwords en texto plano.
|
|
|
|
---
|
|
|
|
# Resultado esperado ETAPA 2
|
|
|
|
- Backend funcionando
|
|
- Login funcionando
|
|
- JWT funcionando
|
|
- Integración SAP funcionando
|
|
|
|
---
|
|
|
|
# ETAPA 3 - CRUD Socios de Negocio
|
|
|
|
# Objetivo
|
|
|
|
Implementar CRUD Business Partners.
|
|
|
|
---
|
|
|
|
# Entidad principal
|
|
|
|
```text
|
|
BusinessPartners
|
|
```
|
|
|
|
---
|
|
|
|
# Campos OCRD
|
|
|
|
| Campo | Uso |
|
|
|---|---|
|
|
| CardCode | Código |
|
|
| CardName | Nombre |
|
|
| CardType | Tipo |
|
|
| LicTradNum | Documento |
|
|
| Phone1 | Teléfono |
|
|
| E_Mail | Correo |
|
|
| Currency | Moneda |
|
|
| GroupCode | Grupo |
|
|
|
|
---
|
|
|
|
# Campos CRD1
|
|
|
|
| Campo | Uso |
|
|
|---|---|
|
|
| Address | Dirección |
|
|
| Country | País |
|
|
| Street | Calle |
|
|
| ZipCode | Código Postal |
|
|
| AdresType | Tipo |
|
|
|
|
---
|
|
|
|
# Reglas de negocio
|
|
|
|
## LicTradNum
|
|
|
|
Debe:
|
|
- tener 8 caracteres
|
|
- ser numérico
|
|
|
|
---
|
|
|
|
## CardCode
|
|
|
|
Debe autogenerarse:
|
|
|
|
```text
|
|
CardType + LicTradNum
|
|
```
|
|
|
|
Ejemplo:
|
|
|
|
```text
|
|
C12345678
|
|
```
|
|
|
|
---
|
|
|
|
# Operaciones CRUD
|
|
|
|
| Operación | Método |
|
|
|---|---|
|
|
| Listar | GET |
|
|
| Obtener | GET |
|
|
| Crear | POST |
|
|
| Actualizar | PATCH |
|
|
| Eliminar | DELETE/PATCH |
|
|
|
|
---
|
|
|
|
# Resultado esperado ETAPA 3
|
|
|
|
- CRUD completo
|
|
- Validaciones
|
|
- Integración real SAP
|
|
|
|
---
|
|
|
|
# ETAPA 4 - Queries Optimizados
|
|
|
|
# Objetivo
|
|
|
|
Mejorar performance.
|
|
|
|
---
|
|
|
|
# IMPORTANTE
|
|
|
|
NO usar entidades completas SAP para listados masivos.
|
|
|
|
---
|
|
|
|
# Estrategia
|
|
|
|
## Escrituras
|
|
|
|
Usar:
|
|
- Service Layer estándar
|
|
|
|
---
|
|
|
|
## Lecturas masivas
|
|
|
|
Usar:
|
|
- SQLQueries
|
|
- queries optimizados
|
|
- paginación
|
|
|
|
---
|
|
|
|
# Resultado esperado ETAPA 4
|
|
|
|
- Listados rápidos
|
|
- Filtros
|
|
- Paginación
|
|
|
|
---
|
|
|
|
# ETAPA 5 - Frontend Base
|
|
|
|
# Objetivo
|
|
|
|
Construir frontend luego de estabilizar backend.
|
|
|
|
---
|
|
|
|
# Estructura Frontend
|
|
|
|
```text
|
|
/src
|
|
/app
|
|
/components
|
|
/services
|
|
/hooks
|
|
/layouts
|
|
/store
|
|
/validators
|
|
/types
|
|
/utils
|
|
```
|
|
|
|
---
|
|
|
|
# Pantallas Iniciales
|
|
|
|
## Login
|
|
|
|
Campos:
|
|
- usuario
|
|
- password
|
|
- company db
|
|
|
|
---
|
|
|
|
## Master Layout
|
|
|
|
- sidebar
|
|
- header
|
|
- content
|
|
|
|
---
|
|
|
|
## Socio de Negocio
|
|
|
|
- formulario OCRD
|
|
- grid CRD1
|
|
- CRUD
|
|
- validaciones
|
|
|
|
---
|
|
|
|
# Resultado esperado ETAPA 5
|
|
|
|
- Login UI
|
|
- navegación
|
|
- consumo APIs
|
|
|
|
---
|
|
|
|
# ETAPA 6 - Frontend Empresarial
|
|
|
|
# Objetivo
|
|
|
|
Mejorar experiencia usuario.
|
|
|
|
---
|
|
|
|
# Funcionalidades
|
|
|
|
- loading states
|
|
- toast notifications
|
|
- manejo errores
|
|
- tablas
|
|
- búsqueda
|
|
- debounce
|
|
- paginación
|
|
- responsive
|
|
|
|
---
|
|
|
|
# ETAPA 7 - Seguridad y Performance
|
|
|
|
# Objetivo
|
|
|
|
Preparar entorno productivo.
|
|
|
|
---
|
|
|
|
# Implementar
|
|
|
|
- cache
|
|
- retry policy
|
|
- correlation ID
|
|
- logs
|
|
- auditoría
|
|
- middleware seguridad
|
|
- rate limiting
|
|
- circuit breaker
|
|
|
|
---
|
|
|
|
# ETAPA 8 - DevOps y Despliegue
|
|
|
|
# Backend
|
|
|
|
- Docker
|
|
- Variables entorno
|
|
- Gunicorn/Uvicorn
|
|
|
|
---
|
|
|
|
# Frontend
|
|
|
|
- Build Next.js
|
|
- Reverse proxy
|
|
|
|
---
|
|
|
|
# Infraestructura
|
|
|
|
- HTTPS
|
|
- NGINX
|
|
- SSL
|
|
- monitoreo
|
|
|
|
---
|
|
|
|
# Recomendaciones Arquitectónicas
|
|
|
|
## NO hacer
|
|
|
|
- acceso SQL directo escritura SAP
|
|
- passwords en texto plano
|
|
- lógica SAP en frontend
|
|
- consultas gigantes Service Layer
|
|
|
|
---
|
|
|
|
# SI hacer
|
|
|
|
- backend desacoplado
|
|
- funciones pequeñas
|
|
- validaciones separadas
|
|
- logs centralizados
|
|
- manejo global errores
|
|
|
|
---
|
|
|
|
# Objetivo Final
|
|
|
|
Construir una plataforma empresarial:
|
|
- mantenible
|
|
- escalable
|
|
- desacoplada
|
|
- compatible con SAP Business One
|
|
- optimizada para crecimiento futuro
|