Add SPEC.md

This commit is contained in:
2026-04-11 03:57:50 +00:00
commit 8bd2e2aa40

168
SPEC.md Normal file
View File

@@ -0,0 +1,168 @@
# API Inventario - Specification
## 1. Project Overview
- **Project**: API Inventario
- **Type**: Microservicio REST
- **Description**: Microservicio para gestionar inventario (productos, categorías, stock, movimientos)
- **Tech Stack**: Python FastAPI, PostgreSQL, SQLAlchemy ORM, Docker
- **Repository**: https://gitea.danielarroyo.cl/proyectos/api-inventario
---
## 2. Domain Model
### 2.1 Entities
#### Category (Categoría)
| Field | Type | Description |
|-------|------|-------------|
| id | UUID | Primary key |
| name | str(100) | Nombre único |
| description | str(500) | Descripción opcional |
| created_at | datetime | Timestamp creación |
#### Product (Producto)
| Field | Type | Description |
|-------|------|-------------|
| id | UUID | Primary key |
| sku | str(50) | SKU único |
| name | str(200) | Nombre |
| description | str(1000) | Descripción |
| category_id | UUID | FK → Category |
| price | Decimal(10,2) | Precio unitario |
| min_stock | int | Stock mínimo (alerta) |
| current_stock | int | Stock actual |
| created_at | datetime | Timestamp creación |
| updated_at | datetime | Timestamp actualización |
#### StockMovement (Movimiento de Stock)
| Field | Type | Description |
|-------|------|-------------|
| id | UUID | Primary key |
| product_id | UUID | FK → Product |
| type | enum | IN (entrada), OUT (salida), ADJUST (ajuste) |
| quantity | int | Cantidad (positiva) |
| reason | str(200) | Motivo del movimiento |
| created_at | datetime | Timestamp |
---
## 3. API Endpoints
### 3.1 Categories
| Method | Endpoint | Description |
|--------|----------|-------------|
| POST | `/api/v1/categories` | Crear categoría |
| GET | `/api/v1/categories` | Listar categorías |
| GET | `/api/v1/categories/{id}` | Obtener categoría |
| PUT | `/api/v1/categories/{id}` | Actualizar categoría |
| DELETE | `/api/v1/categories/{id}` | Eliminar categoría |
### 3.2 Products
| Method | Endpoint | Description |
|--------|----------|-------------|
| POST | `/api/v1/products` | Crear producto |
| GET | `/api/v1/products` | Listar productos (paginated) |
| GET | `/api/v1/products/{id}` | Obtener producto |
| PUT | `/api/v1/products/{id}` | Actualizar producto |
| DELETE | `/api/v1/products/{id}` | Eliminar producto |
| GET | `/api/v1/products/low-stock` | Productos con stock bajo |
### 3.3 Stock Movements
| Method | Endpoint | Description |
|--------|----------|-------------|
| POST | `/api/v1/stock/move` | Registrar movimiento |
| GET | `/api/v1/stock/history/{product_id}` | Historial de movimientos |
| GET | `/api/v1/stock/summary` | Resumen de stock global |
### 3.4 Health
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/health` | Health check |
---
## 4. Acceptance Criteria
1. ✅ CRUD completo de categorías
2. ✅ CRUD completo de productos
3. ✅ Registro de movimientos de stock (IN/OUT/ADJUST)
4. ✅ Validación: no permitir salidas que dejen stock negativo
5. ✅ Alerta de stock bajo cuando `current_stock < min_stock`
6. ✅ Paginación en listado de productos
7. ✅ API documentada con OpenAPI/Swagger
8. ✅ Tests unitarios para core logic
9. ✅ Docker ready (Dockerfile + docker-compose)
---
## 5. Project Structure
```
api-inventario/
├── SPEC.md
├── README.md
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI app
│ ├── config.py # Settings
│ ├── database.py # SQLAlchemy setup
│ ├── models/
│ │ ├── __init__.py
│ │ ├── category.py
│ │ ├── product.py
│ │ └── stock_movement.py
│ ├── schemas/
│ │ ├── __init__.py
│ │ ├── category.py
│ │ ├── product.py
│ │ └── stock_movement.py
│ ├── routers/
│ │ ├── __init__.py
│ │ ├── categories.py
│ │ ├── products.py
│ │ └── stock.py
│ └── services/
│ ├── __init__.py
│ ├── category_service.py
│ ├── product_service.py
│ └── stock_service.py
└── tests/
├── __init__.py
├── conftest.py
├── test_categories.py
├── test_products.py
└── test_stock.py
```
---
## 6. TODO Tasks
| Task | Title | Priority | Labels |
|------|-------|----------|--------|
| TASK-001 | Estructura inicial del proyecto | high | backend,python |
| TASK-002 | Configurar base de datos y modelos SQLAlchemy | high | backend,python |
| TASK-003 | Implementar CRUD Categories | medium | backend,python |
| TASK-004 | Implementar CRUD Products | medium | backend,python |
| TASK-005 | Implementar gestión de Stock Movements | medium | backend,python |
| TASK-006 | Documentación OpenAPI y README | low | spec |
| TASK-007 | Docker setup (Dockerfile + docker-compose) | medium | devops |
| TASK-008 | Tests unitarios | medium | test |
---
## 7. Configuration
Environment variables:
- `DATABASE_URL` (default: postgresql://user:pass@localhost:5432/inventario)
- `API_VERSION` (default: v1)
- `DEBUG` (default: false)
---
_v1.0.0 - 2026-04-11_