🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
589 lines
13 KiB
Markdown
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
|