Estándar de fotos y evidencias
Documento operativo — 2026-06-07
Define qué fotos son obligatorias, en qué momento, con qué calidad, quién puede verlas y cuánto tiempo se guardan. Cubre todos los puntos del ciclo de vida de un paquete y los servicios adicionales.
Audiencia: operadores de almacén, KYC, servicios, devoluciones. También devs backend (formato de almacenamiento) y frontend (visualización).
1. Especificaciones técnicas
| Campo |
Valor |
| Resolución mínima |
1920 × 1080 px (Full HD) |
| Resolución recomendada |
3024 × 4032 px (4:3, cámaras móviles modernas) |
| Tamaño máximo por archivo |
Según el bucket y tipo MIME del contrato de archivos |
| Formatos aceptados |
Según el bucket y tipo MIME del contrato de archivos |
| Compresión al subir |
JPEG quality 85% si el original es mayor a 2 MB |
| Almacenamiento |
MinIO en el bucket definido por tipo de evidencia en el contrato de archivos |
| URLs de acceso |
Prefirmadas, expiración 5 minutos |
| Quién puede verlas |
Definido por resource_type + rol (ver §5) |
| Retención |
Según el contrato de archivos |
2. Cuándo tomar fotos — checklist
2.1 Recepción de paquete (en_almacen)
| # |
Momento |
Obligatoriedad |
Contenido |
| F-1 |
Recepción |
✅ |
Etiqueta del casillero o shipping label completa, legible |
| F-2 |
Recepción |
✅ |
Paquete completo, vista frontal, ~1 m de distancia |
| F-3 |
Recepción |
⚠️ (si daño visible) |
Foto del daño, close-up, con regla si es posible |
| F-4 |
Recepción |
⚠️ (si está abierto) |
Contenido visible |
2.2 KYC del usuario
| # |
Momento |
Obligatoriedad |
Contenido |
| KYC-1 |
Carga de documento |
✅ |
Foto del frente del documento, encuadrado, sin reflejos |
| KYC-2 |
Carga de documento |
⚠️ (si tiene reverso) |
Foto del reverso del documento |
| KYC-3 |
Selfie |
✅ |
Rostro del usuario + documento abierto en la misma imagen |
| KYC-4 |
Selfie |
⚠️ (si rechazo por ilegible) |
Selfie adicional con mejor iluminación |
2.3 Inspección visual (servicio)
| # |
Momento |
Obligatoriedad |
Contenido |
| I-1 |
Inicio |
✅ |
Producto dentro de su empaque original, vista frontal |
| I-2 |
Inicio |
✅ |
Producto extraído, vista frontal, sobre superficie blanca |
| I-3 |
Inicio |
✅ |
Vista lateral izquierda |
| I-4 |
Inicio |
✅ |
Vista lateral derecha |
| I-5 |
Inicio |
✅ |
Vista superior, accesorios visibles |
| I-6 |
Si daño |
✅ |
Foto close-up del daño |
| I-7 |
Si accesorios |
⚠️ |
Cables, manuales, caja original |
2.4 Reempaque
| # |
Momento |
Obligatoriedad |
Contenido |
| R-1 |
Antes |
✅ |
Paquete original (mismo ángulo que F-2) |
| R-2 |
Antes |
⚠️ (si daño) |
Foto del daño |
| R-3 |
Después |
✅ |
Paquete reempacado, vista completa, etiqueta nueva visible |
| R-4 |
Después |
⚠️ (si packing list visible) |
Packing list legible |
2.5 Consolidación
| # |
Momento |
Obligatoriedad |
Contenido |
| C-1 |
Antes de cerrar |
✅ |
Todos los paquetes juntos, vista cenital (desde arriba) |
| C-2 |
Antes de cerrar |
✅ |
Cada paquete individual visible con su tracking |
| C-3 |
Caja cerrada |
✅ |
Caja final con etiqueta de consolidación |
2.6 Despacho
| # |
Momento |
Obligatoriedad |
Contenido |
| D-1 |
Despacho |
✅ |
Caja con etiqueta de envío + master_guide visible |
| D-2 |
Despacho |
⚠️ (si la agencia lo requiere) |
Bulto sobre la báscula con peso visible |
| D-3 |
Despacho |
⚠️ (si la agencia lo requiere) |
Foto del personal de la agencia recibiendo |
2.7 Incidencia
| # |
Momento |
Obligatoriedad |
Contenido |
| INC-1 |
Apertura (usuario) |
✅ (mín. 1) |
Evidencia del problema reportado |
| INC-2 |
Apertura (operador) |
✅ |
Estado actual del paquete o servicio |
| INC-3 |
Resolución |
✅ |
Foto del estado final resuelto |
2.8 Devolución
| # |
Momento |
Obligatoriedad |
Contenido |
| DV-1 |
Inicio |
✅ |
Paquete con etiqueta de retorno |
| DV-2 |
Despacho al vendedor |
✅ |
Comprobante del transportista |
3. Reglas de toma
| Regla |
Detalle |
| Iluminación |
Luz natural o blanca, sin flash directo (evita reflejos en documentos) |
| Encuadre |
Centrado, con margen de ~10% alrededor del objeto |
| Enfoque |
Texto legible, sin motion blur |
| Fondo |
Superficie blanca, gris o de color uniforme (no carpetas con patrones) |
| Identificabilidad |
Si la foto es de un documento, toda la información debe ser legible (sin dedos cubriendo datos) |
| Privacidad |
Las fotos de KYC se almacenan encriptadas en reposo; las URLs de acceso expiran en 5 min (RN-103) |
| Audio/video |
Solo se permite evidencia en video para inspección de productos funcionales; máx 30 segundos, 50 MB |
4. Almacenamiento y nombres de archivo
Convención de nombres
{resource_type}/{resource_id}/{evidence_type}/{YYYY-MM-DD}_{HHmmss}_{short_uuid}.{ext}
Ejemplos:
physical_packages/888/reception/2026-06-05_103045_a1b2c3.jpg
kyc_records/77/document_front/2026-06-07_170012_e4f5g6.jpg
service_requests/55/inspection/2026-06-08_091530_h7i8j9.jpg
incidents/42/evidence/2026-06-09_143022_k0l1m2.jpg
Cada foto guarda en file_attachments:
| Campo |
Valor |
original_filename |
El nombre que tenía al subir |
mime_type |
image/jpeg, image/png, etc. |
size_bytes |
Tamaño en bytes |
width_px, height_px |
Resolución |
uploaded_by_user_id |
Quién subió |
uploaded_at |
Timestamp |
hash_sha256 |
Hash para detectar duplicados |
gps_lat, gps_lng |
Si la cámara del operador tenía GPS activo |
device_info |
Modelo del dispositivo |
5. Permisos de visualización (RN-102, RN-103)
| Recurso |
user (dueño) |
user (ajeno) |
operator |
admin |
sysadmin |
| Foto de recepción de su paquete |
✅ |
❌ |
✅ (enmascaradas parcialmente para datos sensibles) |
✅ |
✅ |
| Foto de recepción de otro paquete |
❌ |
❌ |
⚠️ (datos personales enmascarados) |
✅ |
✅ |
| Foto de KYC propia |
✅ |
❌ |
❌ (solo ve estado, no fotos) |
✅ |
✅ |
| Foto de KYC ajena |
❌ |
❌ |
⚠️ (previsualización con datos enmascarados, requiere motivo) |
✅ |
✅ |
| Foto de inspección de su servicio |
✅ |
❌ |
✅ |
✅ |
✅ |
| Foto de cualquier incidencia |
(solo si la abrió) |
❌ |
✅ (si está asignado) |
✅ |
✅ |
| Foto de despacho |
(solo después de creada) |
❌ |
✅ |
✅ |
✅ |
Toda visualización de KYC ajeno o de paquete ajeno queda auditada con actor_id, subject_id, ip, timestamp, motivo (RN-102).
6. Retención y eliminación
La retención, tipo de eliminación y los buckets se mantienen exclusivamente en el contrato de archivos. Operaciones debe clasificar cada evidencia con el tipo correcto y no aplicar plazos locales distintos.
7. Validación al subir
El backend debe validar antes de aceptar el archivo:
- Tipo MIME dentro de la whitelist (
image/jpeg, image/png, image/heic, application/pdf).
- Tamaño ≤ 10 MB.
- Resolución ≥ 1920×1080 (las menores se rechazan con
EVIDENCE_RESOLUTION_TOO_LOW).
- Hash SHA-256 no esté ya registrado para el mismo
resource_id (deduplicación).
- EXIF stripped para fotos de KYC (eliminar GPS, fecha/hora, modelo del dispositivo) por privacidad.
8. Trazabilidad