Sprint 3-4 deliverables: - 28 epics documented (MCH-001 to MCH-028) - 7 development phases fully documented - DATABASE_INVENTORY.yml, BACKEND_INVENTORY.yml, FRONTEND_INVENTORY.yml - Task traces for database and frontend 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
182 lines
4.0 KiB
Markdown
182 lines
4.0 KiB
Markdown
# MCH-016: Entregas a Domicilio
|
|
|
|
## Metadata
|
|
- **Codigo:** MCH-016
|
|
- **Fase:** 4 - Pedidos y Clientes
|
|
- **Prioridad:** P2
|
|
- **Estado:** Pendiente
|
|
- **Fecha estimada:** Sprint 10-11
|
|
|
|
## Descripcion
|
|
|
|
Sistema de entregas a domicilio para micro-negocios: definicion de zonas de cobertura, costos de envio, asignacion de repartidores, y tracking basico del pedido.
|
|
|
|
## Objetivos
|
|
|
|
1. Definir zonas de cobertura
|
|
2. Configurar costos de envio
|
|
3. Asignar repartidores
|
|
4. Tracking basico de entrega
|
|
5. Confirmacion de entrega
|
|
|
|
## Alcance
|
|
|
|
### Incluido
|
|
- Zonas de cobertura (radio o colonias)
|
|
- Costo de envio fijo o por zona
|
|
- Asignacion manual de repartidor
|
|
- Estados: asignado, en camino, entregado
|
|
- Confirmacion con foto/firma
|
|
|
|
### Excluido
|
|
- GPS tracking en tiempo real
|
|
- Optimizacion de rutas
|
|
- Integracion con apps de delivery
|
|
- Repartidores externos (Rappi, Uber)
|
|
|
|
## Modelo de Datos
|
|
|
|
### Tablas Adicionales
|
|
|
|
**delivery_zones**
|
|
- id, tenant_id, name, type (radius/polygon)
|
|
- coordinates (JSONB), delivery_fee
|
|
- min_order, estimated_time, active
|
|
|
|
**deliveries**
|
|
- id, order_id, assigned_to (user_id)
|
|
- status, pickup_at, delivered_at
|
|
- delivery_address, notes
|
|
- proof_photo_url, signature_url
|
|
|
|
## Flujo de Entrega
|
|
|
|
### Cliente Solicita Delivery
|
|
```
|
|
Bot: "¿Como quieres recibir tu pedido?
|
|
[Paso a recoger] [Enviar a domicilio]"
|
|
|
|
Cliente: [Enviar a domicilio]
|
|
|
|
Bot: "¿A que direccion lo enviamos?"
|
|
|
|
Cliente: "Calle Hidalgo 45, Col. Centro"
|
|
|
|
Bot: "Perfecto! Envio a Col. Centro = $25
|
|
Total con envio: $79
|
|
Tiempo estimado: 30-45 min
|
|
|
|
¿Confirmas?
|
|
[Confirmar] [Cambiar direccion]"
|
|
```
|
|
|
|
### Asignacion de Repartidor
|
|
```
|
|
1. Pedido confirmado con delivery
|
|
2. Dueno ve pedido en dashboard
|
|
3. Asigna a repartidor (empleado)
|
|
4. Repartidor recibe notificacion
|
|
5. Cliente notificado: "Tu pedido va en camino"
|
|
```
|
|
|
|
### Confirmacion de Entrega
|
|
```
|
|
1. Repartidor llega a direccion
|
|
2. Entrega pedido
|
|
3. Toma foto de entrega (opcional)
|
|
4. Marca como entregado en app
|
|
5. Cliente recibe: "Pedido entregado!"
|
|
```
|
|
|
|
## Endpoints API
|
|
|
|
| Metodo | Endpoint | Descripcion |
|
|
|--------|----------|-------------|
|
|
| GET | /delivery/zones | Zonas de cobertura |
|
|
| POST | /delivery/zones | Crear zona |
|
|
| PUT | /delivery/zones/:id | Editar zona |
|
|
| DELETE | /delivery/zones/:id | Eliminar zona |
|
|
| POST | /delivery/check-coverage | Verificar cobertura |
|
|
| POST | /orders/:id/assign-delivery | Asignar repartidor |
|
|
| PUT | /deliveries/:id/status | Actualizar estado |
|
|
| POST | /deliveries/:id/confirm | Confirmar entrega |
|
|
|
|
## Configuracion de Zonas
|
|
|
|
### Por Radio
|
|
```typescript
|
|
{
|
|
type: 'radius',
|
|
center: { lat: 19.4326, lng: -99.1332 },
|
|
radius_km: 3,
|
|
delivery_fee: 25,
|
|
estimated_time: 30
|
|
}
|
|
```
|
|
|
|
### Por Colonias
|
|
```typescript
|
|
{
|
|
type: 'polygon',
|
|
name: 'Centro',
|
|
colonias: ['Centro', 'Roma Norte', 'Condesa'],
|
|
delivery_fee: 30,
|
|
estimated_time: 45
|
|
}
|
|
```
|
|
|
|
## UI Components
|
|
|
|
### DeliveryZonesMap
|
|
- Mapa con zonas definidas
|
|
- Edicion visual de poligonos
|
|
- Configuracion de tarifas
|
|
|
|
### DeliveryAssignment
|
|
- Lista de pedidos pendientes de asignar
|
|
- Dropdown de repartidores disponibles
|
|
- Boton asignar
|
|
|
|
### DeliveryTracking (Mobile - Repartidor)
|
|
- Lista de entregas asignadas
|
|
- Boton "En camino"
|
|
- Boton "Entregado" + foto
|
|
|
|
## Entregables
|
|
|
|
| Entregable | Estado | Archivo |
|
|
|------------|--------|---------|
|
|
| delivery.module | Pendiente | `modules/delivery/` |
|
|
| delivery_zones tabla | Pendiente | DDL |
|
|
| DeliveryZonesMap | Pendiente | `components/delivery/` |
|
|
| Mobile delivery screen | Pendiente | `mobile/screens/Delivery.tsx` |
|
|
|
|
## Dependencias
|
|
|
|
### Depende de
|
|
- MCH-015 (Pedidos WhatsApp)
|
|
- MCH-002 (Auth - para repartidores)
|
|
|
|
### Bloquea a
|
|
- Ninguno
|
|
|
|
## Criterios de Aceptacion
|
|
|
|
- [ ] Zonas de cobertura se configuran
|
|
- [ ] Costo de envio se calcula correctamente
|
|
- [ ] Repartidor recibe notificacion
|
|
- [ ] Estados de entrega funcionan
|
|
- [ ] Confirmacion con foto funciona
|
|
|
|
## Roles
|
|
|
|
| Rol | Permisos |
|
|
|-----|----------|
|
|
| owner | Configurar zonas, ver todas las entregas |
|
|
| employee | Asignar entregas, ver entregas |
|
|
| delivery | Ver entregas asignadas, actualizar estado |
|
|
|
|
---
|
|
|
|
**Ultima actualizacion:** 2026-01-07
|