erp-core/docs/API-NUEVAS-TABLAS-FASE8.md
rckrdmrd 4c4e27d9ba feat: Documentation and orchestration updates
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 05:35:20 -06:00

589 lines
13 KiB
Markdown

# API Endpoints para Nuevas Tablas - FASE 8
**Fecha:** 2026-01-04
**Version:** 1.0
**Cobertura:** 61 nuevas tablas, 25 funciones
---
## 1. Resumen de Endpoints Requeridos
| Modulo | Tablas | Endpoints Estimados | Prioridad |
|--------|--------|---------------------|-----------|
| Financial | 5 | 17 | Alta |
| Inventory | 5 | 15 | Alta |
| Purchase | 1 | 4 | Alta |
| Sales | 0 (solo campos) | 2 (funciones) | Media |
| CRM | 3 | 10 | Alta |
| Projects | 3 | 9 | Media |
| HR | 11 | 30 | Alta |
| **Total** | **28 core** | **87** | |
---
## 2. Financial Module
### 2.1 PaymentTermLines
**Tabla:** `financial.payment_term_lines`
```
GET /api/v1/financial/payment-terms/:termId/lines
POST /api/v1/financial/payment-terms/:termId/lines
GET /api/v1/financial/payment-terms/:termId/lines/:id
PATCH /api/v1/financial/payment-terms/:termId/lines/:id
DELETE /api/v1/financial/payment-terms/:termId/lines/:id
```
**Campos clave:**
- `sequence` - Orden de aplicacion
- `value` - Tipo: percent, fixed, balance
- `value_amount` - Porcentaje o monto
- `days` - Dias para vencimiento
- `end_month` - Si vence fin de mes
### 2.2 Incoterms
**Tabla:** `financial.incoterms`
```
GET /api/v1/financial/incoterms
GET /api/v1/financial/incoterms/:id
```
**Nota:** Solo lectura, datos pre-cargados (11 incoterms estandar)
### 2.3 PaymentMethods
**Tabla:** `financial.payment_methods`
```
GET /api/v1/financial/payment-methods
POST /api/v1/financial/payment-methods
GET /api/v1/financial/payment-methods/:id
PATCH /api/v1/financial/payment-methods/:id
DELETE /api/v1/financial/payment-methods/:id
```
**Campos clave:**
- `payment_type` - ENUM: inbound, outbound
- `code` - Codigo unico por tenant
### 2.4 ReconcileModels
**Tabla:** `financial.reconcile_models`
```
GET /api/v1/financial/reconcile-models
POST /api/v1/financial/reconcile-models
GET /api/v1/financial/reconcile-models/:id
PATCH /api/v1/financial/reconcile-models/:id
DELETE /api/v1/financial/reconcile-models/:id
```
**Campos clave:**
- `rule_type` - ENUM: writeoff_button, writeoff_suggestion, invoice_matching
- `auto_reconcile` - Automatizar conciliacion
- `match_amount` - percentage, fixed, any
### 2.5 ReconcileModelLines
**Tabla:** `financial.reconcile_model_lines`
```
GET /api/v1/financial/reconcile-models/:modelId/lines
POST /api/v1/financial/reconcile-models/:modelId/lines
GET /api/v1/financial/reconcile-models/:modelId/lines/:id
PATCH /api/v1/financial/reconcile-models/:modelId/lines/:id
DELETE /api/v1/financial/reconcile-models/:modelId/lines/:id
```
**Campos clave:**
- `account_id` - Cuenta contable destino (requerido)
- `amount_type` - percentage, fixed, regex
- `amount_value` - Valor/porcentaje a aplicar
---
## 3. Inventory Module
### 3.1 PackageTypes
**Tabla:** `inventory.package_types`
```
GET /api/v1/inventory/package-types
POST /api/v1/inventory/package-types
GET /api/v1/inventory/package-types/:id
PATCH /api/v1/inventory/package-types/:id
DELETE /api/v1/inventory/package-types/:id
```
**Campos clave:**
- Dimensiones: height, width, length
- Pesos: base_weight, max_weight
### 3.2 Packages
**Tabla:** `inventory.packages`
```
GET /api/v1/inventory/packages
POST /api/v1/inventory/packages
GET /api/v1/inventory/packages/:id
PATCH /api/v1/inventory/packages/:id
DELETE /api/v1/inventory/packages/:id
GET /api/v1/inventory/locations/:locationId/packages
```
### 3.3 PutawayRules
**Tabla:** `inventory.putaway_rules`
```
GET /api/v1/inventory/putaway-rules
POST /api/v1/inventory/putaway-rules
GET /api/v1/inventory/putaway-rules/:id
PATCH /api/v1/inventory/putaway-rules/:id
DELETE /api/v1/inventory/putaway-rules/:id
```
**Logica:**
- Ordenar por sequence
- Buscar por producto o categoria
- Aplicar location_out como destino
### 3.4 StorageCategories
**Tabla:** `inventory.storage_categories`
```
GET /api/v1/inventory/storage-categories
POST /api/v1/inventory/storage-categories
GET /api/v1/inventory/storage-categories/:id
PATCH /api/v1/inventory/storage-categories/:id
DELETE /api/v1/inventory/storage-categories/:id
```
### 3.5 RemovalStrategies
**Tabla:** `inventory.removal_strategies`
```
GET /api/v1/inventory/removal-strategies
```
**Nota:** Solo lectura, datos pre-cargados (FIFO, LIFO, FEFO, Closest)
---
## 4. Purchase Module
### 4.1 ProductSupplierinfo
**Tabla:** `purchase.product_supplierinfo`
```
GET /api/v1/purchase/suppliers/:partnerId/products
POST /api/v1/purchase/suppliers/:partnerId/products
GET /api/v1/purchase/suppliers/:partnerId/products/:id
PATCH /api/v1/purchase/suppliers/:partnerId/products/:id
DELETE /api/v1/purchase/suppliers/:partnerId/products/:id
# Alternativa por producto
GET /api/v1/inventory/products/:productId/suppliers
```
**Campos clave:**
- `min_qty` - Cantidad minima
- `price` - Precio del proveedor
- `delay` - Lead time en dias
- `date_start/date_end` - Vigencia
### 4.2 Funciones
```
POST /api/v1/purchase/orders/:id/create-stock-moves
```
**Funcion:** `purchase.action_create_stock_moves(order_id)`
- Crea picking de recepcion
- Genera stock_moves por cada linea
---
## 5. Sales Module
### 5.1 Funciones
```
POST /api/v1/sales/orders/:id/confirm
```
**Funcion:** `sales.action_confirm(order_id)`
- Cambia status a 'sale'
- Genera nombre de secuencia
- Actualiza qty_to_deliver, qty_to_invoice
```
GET /api/v1/sales/pricelists/:id/price
```
**Query params:**
- `product_id` - UUID del producto
- `quantity` - Cantidad (default 1)
- `date` - Fecha (default hoy)
**Funcion:** `sales.get_pricelist_price(pricelist_id, product_id, quantity, date)`
---
## 6. CRM Module
### 6.1 Tags
**Tabla:** `crm.tags`
```
GET /api/v1/crm/tags
POST /api/v1/crm/tags
GET /api/v1/crm/tags/:id
PATCH /api/v1/crm/tags/:id
DELETE /api/v1/crm/tags/:id
```
### 6.2 Lead-Tag Relations
```
POST /api/v1/crm/leads/:id/tags
DELETE /api/v1/crm/leads/:id/tags/:tagId
GET /api/v1/crm/leads/:id/tags
```
### 6.3 Opportunity-Tag Relations
```
POST /api/v1/crm/opportunities/:id/tags
DELETE /api/v1/crm/opportunities/:id/tags/:tagId
GET /api/v1/crm/opportunities/:id/tags
```
### 6.4 Funciones CRM
```
POST /api/v1/crm/leads/:id/convert-to-opportunity
```
**Body:**
```json
{
"partner_id": "uuid (opcional)",
"create_partner": true
}
```
**Funcion:** `crm.convert_lead_to_opportunity(lead_id, partner_id, create_partner)`
```
POST /api/v1/crm/leads/:id/set-lost
POST /api/v1/crm/opportunities/:id/set-lost
```
**Body:**
```json
{
"lost_reason_id": "uuid",
"lost_notes": "string (opcional)"
}
```
```
POST /api/v1/crm/opportunities/:id/set-won
```
---
## 7. Projects Module
### 7.1 Collaborators
**Tabla:** `projects.collaborators`
```
GET /api/v1/projects/:projectId/collaborators
POST /api/v1/projects/:projectId/collaborators
GET /api/v1/projects/:projectId/collaborators/:id
PATCH /api/v1/projects/:projectId/collaborators/:id
DELETE /api/v1/projects/:projectId/collaborators/:id
```
**Constraint:** Debe tener partner_id OR user_id (no ambos)
### 7.2 Ratings
**Tabla:** `projects.ratings`
```
GET /api/v1/projects/:projectId/ratings
POST /api/v1/projects/:projectId/ratings
GET /api/v1/projects/tasks/:taskId/ratings
POST /api/v1/projects/tasks/:taskId/ratings
```
### 7.3 Burndown Chart
**Tabla:** `projects.burndown_chart_data`
```
GET /api/v1/projects/:projectId/burndown
POST /api/v1/projects/:projectId/burndown/snapshot
```
**Funcion:** `projects.generate_burndown_snapshot(project_id)`
**Response GET:**
```json
{
"data": [
{
"date": "2026-01-04",
"total_tasks": 50,
"completed_tasks": 20,
"remaining_tasks": 30,
"total_hours": 400,
"completed_hours": 150,
"remaining_hours": 250
}
]
}
```
---
## 8. HR Module
### 8.1 Work Locations
**Tabla:** `hr.work_locations`
```
GET /api/v1/hr/work-locations
POST /api/v1/hr/work-locations
GET /api/v1/hr/work-locations/:id
PATCH /api/v1/hr/work-locations/:id
DELETE /api/v1/hr/work-locations/:id
```
### 8.2 Skills System
**Tablas:** `hr.skill_types`, `hr.skills`, `hr.skill_levels`, `hr.employee_skills`
```
# Skill Types
GET /api/v1/hr/skill-types
POST /api/v1/hr/skill-types
GET /api/v1/hr/skill-types/:id
PATCH /api/v1/hr/skill-types/:id
DELETE /api/v1/hr/skill-types/:id
# Skills (por tipo)
GET /api/v1/hr/skill-types/:typeId/skills
POST /api/v1/hr/skill-types/:typeId/skills
# Skill Levels (por tipo)
GET /api/v1/hr/skill-types/:typeId/levels
POST /api/v1/hr/skill-types/:typeId/levels
# Employee Skills
GET /api/v1/hr/employees/:employeeId/skills
POST /api/v1/hr/employees/:employeeId/skills
DELETE /api/v1/hr/employees/:employeeId/skills/:skillId
```
### 8.3 Expenses
**Tablas:** `hr.expense_sheets`, `hr.expenses`
```
# Expense Sheets
GET /api/v1/hr/expense-sheets
POST /api/v1/hr/expense-sheets
GET /api/v1/hr/expense-sheets/:id
PATCH /api/v1/hr/expense-sheets/:id
DELETE /api/v1/hr/expense-sheets/:id
POST /api/v1/hr/expense-sheets/:id/submit
POST /api/v1/hr/expense-sheets/:id/approve
POST /api/v1/hr/expense-sheets/:id/reject
# Expenses (lineas)
GET /api/v1/hr/expense-sheets/:sheetId/expenses
POST /api/v1/hr/expense-sheets/:sheetId/expenses
GET /api/v1/hr/expenses/:id
PATCH /api/v1/hr/expenses/:id
DELETE /api/v1/hr/expenses/:id
# Expenses sin sheet (draft individuales)
GET /api/v1/hr/employees/:employeeId/expenses
POST /api/v1/hr/employees/:employeeId/expenses
```
### 8.4 Resume Lines
**Tabla:** `hr.employee_resume_lines`
```
GET /api/v1/hr/employees/:employeeId/resume
POST /api/v1/hr/employees/:employeeId/resume
GET /api/v1/hr/employees/:employeeId/resume/:id
PATCH /api/v1/hr/employees/:employeeId/resume/:id
DELETE /api/v1/hr/employees/:employeeId/resume/:id
```
**Tipos:** experience, education, certification, internal
### 8.5 Payslips
**Tablas:** `hr.payslip_structures`, `hr.payslips`, `hr.payslip_lines`
```
# Structures
GET /api/v1/hr/payslip-structures
POST /api/v1/hr/payslip-structures
GET /api/v1/hr/payslip-structures/:id
PATCH /api/v1/hr/payslip-structures/:id
DELETE /api/v1/hr/payslip-structures/:id
# Payslips
GET /api/v1/hr/payslips
POST /api/v1/hr/payslips
GET /api/v1/hr/payslips/:id
PATCH /api/v1/hr/payslips/:id
DELETE /api/v1/hr/payslips/:id
POST /api/v1/hr/payslips/:id/verify
POST /api/v1/hr/payslips/:id/done
POST /api/v1/hr/payslips/:id/cancel
# Payslip Lines
GET /api/v1/hr/payslips/:payslipId/lines
```
---
## 9. Campos Adicionales (Existentes)
Las siguientes tablas existentes tienen nuevos campos que requieren actualizar los DTOs:
### 9.1 financial.journal_entries
Nuevos campos:
- `payment_state`
- `amount_residual`
- `invoice_date_due`
- `fiscal_position_id`
- `incoterm_id`
- `auto_post`
### 9.2 financial.payments
Nuevos campos:
- `is_matched`
- `partner_bank_id`
- `destination_journal_id`
### 9.3 inventory.products
Nuevos campos:
- `tracking` (none, serial, lot)
- `sale_delay`
- `purchase_ok`
- `sale_ok`
- `invoice_policy`
- `volume`, `weight`
- `hs_code`
- `origin_country_id`
### 9.4 inventory.stock_pickings
Nuevos campos:
- `scheduled_date`
- `date_deadline`
- `weight`
- `shipping_weight`
### 9.5 purchase.orders
Nuevos campos:
- `incoterm_id`
- `fiscal_position_id`
- `origin`
- `receipt_status`
### 9.6 sales.orders
Nuevos campos:
- `incoterm_id`
- `campaign_id`
- `require_signature`
- `signed_by`
### 9.7 crm.leads / crm.opportunities
Nuevos campos:
- `color`
- `referred`
- `day_open`, `day_close`
- `is_won` (opportunities)
- `date_action`, `title_action`
### 9.8 projects.projects / projects.tasks
Nuevos campos:
- `sequence`
- `is_favorite`
- `task_count`, `open_task_count`, `closed_task_count`
- `kanban_state` (tasks)
- `color` (tasks)
### 9.9 hr.employees
30+ nuevos campos:
- Datos privados: private_street, private_city, etc.
- Documentos: visa_no, work_permit_no, etc.
- Personal: children, vehicle, etc.
- Identificacion: badge_id, pin, barcode
---
## 10. Notas de Implementacion
### 10.1 RLS (Row Level Security)
Todas las nuevas tablas tienen RLS habilitado. Los endpoints deben:
1. Establecer `app.current_tenant_id` antes de queries
2. Verificar permisos de company cuando aplique
### 10.2 Transacciones
Las funciones que modifican multiples tablas (ej. convert_lead_to_opportunity)
ya manejan transacciones internamente.
### 10.3 Triggers
- `projects.tasks` - Trigger automatico para actualizar conteos en proyecto
- No requiere accion del API, los conteos se actualizan solos
### 10.4 ENUMs
Nuevos ENUMs a mapear en DTOs:
- `financial.payment_method_type`: inbound, outbound
- `financial.reconcile_model_type`: writeoff_button, writeoff_suggestion, invoice_matching
- `hr.expense_status`: draft, submitted, approved, posted, paid, rejected
- `hr.resume_line_type`: experience, education, certification, internal
- `hr.payslip_status`: draft, verify, done, cancel
---
**Generado:** 2026-01-04
**Para:** Equipo Backend
**Referencia:** FASE-8 Cobertura Maxima