Compare commits
208 Commits
a3abb6d3a8
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 6aff32f93b | |||
| 7d21d21200 | |||
| 0eb5984263 | |||
| b78523102d | |||
| 27358312dc | |||
| 5e9ac57f08 | |||
| 8796cadb56 | |||
| 3378d26a31 | |||
| a9052e63c2 | |||
| c1e93ed52a | |||
| 70233671a6 | |||
| 33df6e9280 | |||
| 1967ad1073 | |||
| 917ff00310 | |||
| 913e507adc | |||
| 383799ff3d | |||
| 203960fff3 | |||
| 0419f8285a | |||
| 3d70c3fcc9 | |||
| 041efd5c5c | |||
| 2cbd69d5fa | |||
| 98b3b1c8c1 | |||
| efbfadd17a | |||
| 43691ce83b | |||
| 7a4a676890 | |||
| 08362c5677 | |||
| 2b73c2c6db | |||
| ea29cc31c0 | |||
| 5ea667b80e | |||
| 77541e4c52 | |||
| 9f04bfe0bb | |||
| 718fa06888 | |||
| 999591e248 | |||
| 3d0d52c60b | |||
| c5fc8c5ec6 | |||
| 5c815bc2f5 | |||
| b6a327c98c | |||
| 68d6f81671 | |||
| 61bf84b2dc | |||
| 3009ffa1b0 | |||
| 7cef8db6af | |||
| 03b32f3b17 | |||
| eb107e2778 | |||
| 031c190635 | |||
| 7020890b0e | |||
| 23dbf54f3f | |||
| 3060dab471 | |||
| 716e19d079 | |||
| 51f64921a5 | |||
| 91caf91b79 | |||
| 584cc385b9 | |||
| 314075021e | |||
| f742cdaa42 | |||
| 79d3368041 | |||
| bfb4921ac0 | |||
| b314a781a1 | |||
| 4866823ba9 | |||
| a236187f3a | |||
| 159d0ed625 | |||
| 50c0dbe7d4 | |||
| 0b1dc89faf | |||
| dbf45e374b | |||
| 07b9b9130a | |||
| ae2273f864 | |||
| d9741b21f6 | |||
| e38148e8d5 | |||
| 912fe4cef5 | |||
| a7334513ac | |||
| 2f8b9dd5aa | |||
| 60dd8162f7 | |||
| bfa7bc2997 | |||
| 6196234d8b | |||
| e8db3e926c | |||
| d725ed2e0c | |||
| 36dd6634e3 | |||
| 24cdd71262 | |||
| 9ad624d26c | |||
| 2af2389294 | |||
| be4bb8d9ad | |||
| da362e32a6 | |||
| 79fa7984a1 | |||
| 30abecc07d | |||
| 521455f156 | |||
| 24db5eff43 | |||
| 4d6a7d9f32 | |||
| c6b3ca9bdf | |||
| 9da14e40da | |||
| e61063bdd7 | |||
| 6734993508 | |||
| 2b0215d6b8 | |||
| ee9eea58c1 | |||
| ff45905b49 | |||
| 371d72887e | |||
| af7b010e55 | |||
| 5421c47ffc | |||
| 2e80ba7400 | |||
| 0e549e7746 | |||
| 2b418701b6 | |||
| 91826487f9 | |||
| b27dd720aa | |||
| b94b194217 | |||
| 623c57bb08 | |||
| 3cd2874ed7 | |||
| cf46790ed8 | |||
| 45b69bcae8 | |||
| 3792e4053c | |||
| 5a913dcac1 | |||
| cc9a0cf57c | |||
| f78d4c9b44 | |||
| ca239a458b | |||
| fb591c7de6 | |||
| b803950fae | |||
| bd2cf307f7 | |||
| 9b02005116 | |||
| 2cfe4b3913 | |||
| 12989e30be | |||
| c4db5e7550 | |||
| 3b8224d15e | |||
| 4b3b0f8313 | |||
| c766571b7d | |||
| 44c3a6c910 | |||
| f24f25e74e | |||
| b829e4f026 | |||
| c75e2a75c9 | |||
| 27cb4ee683 | |||
| afb3b2405c | |||
| 1f909f4c42 | |||
| a1be8dd0ea | |||
| 042acd6207 | |||
| f893391916 | |||
| 5eab18bfa2 | |||
| 21959f1b37 | |||
| e21722a3a9 | |||
| e3c85fd647 | |||
| 175dda6212 | |||
| efbd763e43 | |||
|
|
142abbc217 | ||
|
|
9ff3dc4c8b | ||
| b70cb3042b | |||
| e5f2ba356a | |||
| 787d24fe71 | |||
| bf1473d6bd | |||
| 48f6fd819a | |||
| 5bb82bac04 | |||
| 438b449063 | |||
| 579947a331 | |||
| c09a071103 | |||
| bdda1ca6ba | |||
| e95f7cf684 | |||
| 6b097614a0 | |||
| e29c99d9a6 | |||
| 341bdcc743 | |||
| c333f2eaf0 | |||
| 5a88d7c7ff | |||
| 4cc2c66208 | |||
| 1bea31e83f | |||
| e43894b7a4 | |||
| 5f92fe83ba | |||
| 04340f2f29 | |||
| c1d0638b45 | |||
| e00dce7d5a | |||
| ecdc3526a6 | |||
| f9589f4a4e | |||
| 5d5a2777eb | |||
| c61e58ac6a | |||
| 39f2aaf98f | |||
| fd31864cea | |||
| 2463c2fbcf | |||
| db5bbf6718 | |||
| c645bc03f3 | |||
| 840790a4d0 | |||
| 9702cdc9cc | |||
| 6676e5cb4c | |||
| 31bfd0064e | |||
| f55925fa6a | |||
| cc2336ca06 | |||
| f85e53cee8 | |||
| 29174c9108 | |||
| 8539720645 | |||
| d32de87d5f | |||
| b5d13c1f04 | |||
| ff9bb87aa9 | |||
| 9f4e8bc290 | |||
| f85de24bf7 | |||
| fa6f713b7d | |||
| 0f979b7912 | |||
| d1093ab9a2 | |||
| 1547b35b14 | |||
| 97704fd804 | |||
| 10e318bfd7 | |||
| 67e214db15 | |||
| f30a782feb | |||
| 10d5b62e00 | |||
| 1a770999f5 | |||
| 77e45bdc1e | |||
| b5d62c2812 | |||
| 9908c045c9 | |||
| 230407b750 | |||
| 0a44fb5304 | |||
| 32581739ad | |||
| 6628f2deef | |||
| bdbbc78a15 | |||
| fa7015e642 | |||
| a389228048 | |||
| 989a178143 | |||
| e7376ddaed | |||
| a74fe94187 | |||
| d5569d0cb6 |
71
.env.example
Normal file
@@ -0,0 +1,71 @@
|
||||
# Nexus Autoparts — Environment Variables
|
||||
# Copy this file to .env and fill in your values.
|
||||
# NEVER commit .env to git.
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# DATABASE (REQUIRED)
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
DATABASE_URL=postgresql://nexus:YOUR_DB_PASSWORD@localhost/nexus_autoparts
|
||||
MASTER_DB_URL=postgresql://nexus:YOUR_DB_PASSWORD@localhost/nexus_autoparts
|
||||
TENANT_DB_URL_TEMPLATE=postgresql://nexus:YOUR_DB_PASSWORD@localhost/{db_name}
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# SECURITY (REQUIRED)
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# Generate with: python3 -c "import secrets; print(secrets.token_hex(32))"
|
||||
JWT_SECRET=change-me-to-a-random-64-char-hex-string
|
||||
POS_JWT_SECRET=change-me-to-a-different-random-64-char-hex-string
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# AI / OpenRouter (OPTIONAL — enables chatbot)
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
OPENROUTER_API_KEY=sk-or-v1-your-openrouter-key
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# WHATSAPP BRIDGE (OPTIONAL — enables WhatsApp integration)
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
WHATSAPP_BRIDGE_URL=http://localhost:21465
|
||||
WHATSAPP_BRIDGE_KEY=your-whatsapp-bridge-secret
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# SMTP (OPTIONAL — enables email quotations)
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
SMTP_HOST=smtp.gmail.com
|
||||
SMTP_PORT=587
|
||||
SMTP_USER=your-email@gmail.com
|
||||
SMTP_PASS=your-app-password
|
||||
SMTP_FROM=noreply@yourdomain.com
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# REDIS CACHE (OPTIONAL — enables sub-millisecond stock lookups)
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
REDIS_URL=redis://localhost:6379/0
|
||||
REDIS_ENABLED=true
|
||||
REDIS_STOCK_TTL=300
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# MEILISEARCH (OPTIONAL — enables sub-100ms catalog search)
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
MEILI_URL=http://localhost:7700
|
||||
MEILI_API_KEY=nexus-master-key-change-me
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# METABASE KPIs (OPTIONAL — Business Intelligence dashboards)
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
METABASE_URL=http://localhost:3000
|
||||
METABASE_ADMIN_EMAIL=admin@nexus.local
|
||||
METABASE_ADMIN_PASS=change-me-to-a-strong-password
|
||||
METABASE_DB_PASS=metabase_secret
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# FACTURAPI (OPTIONAL — auto-organization mode for new tenants)
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# If set, new tenants can create Facturapi organizations automatically.
|
||||
# Otherwise each tenant must store its secret key in tenant_config.cfdi_facturapi_key.
|
||||
FACTURAPI_USER_KEY=sk_user_xxxxxxxxxxxxxxxx
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# CURRENCY
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
DEFAULT_CURRENCY=MXN
|
||||
EXCHANGE_RATE_USD_MXN=17.5
|
||||
30
.gitignore
vendored
@@ -43,6 +43,21 @@ Thumbs.db
|
||||
# Local configuration
|
||||
.claude/
|
||||
*.local.json
|
||||
.env
|
||||
.env.local
|
||||
.env.production
|
||||
|
||||
# Secrets
|
||||
*.pem
|
||||
*.key
|
||||
|
||||
# POS static uploads
|
||||
pos/static/images/parts/
|
||||
|
||||
# SQLite databases
|
||||
*.db
|
||||
*.db-shm
|
||||
*.db-wal
|
||||
|
||||
# Temporary files
|
||||
*.tmp
|
||||
@@ -54,6 +69,10 @@ Thumbs.db
|
||||
|
||||
# Data files (TecDoc downloads, too large for git)
|
||||
data/
|
||||
vehicle_database/
|
||||
CapturasWeb/
|
||||
.pytest_cache/
|
||||
node_modules/
|
||||
|
||||
# SQLite WAL files
|
||||
*.db-shm
|
||||
@@ -61,3 +80,14 @@ data/
|
||||
|
||||
# Diagram images (served from static, too large for git)
|
||||
dashboard/static/diagrams/
|
||||
|
||||
# Playwright / Node
|
||||
package-lock.json
|
||||
|
||||
# Backups
|
||||
backups/
|
||||
|
||||
|
||||
# Local tools (AWS CLI)
|
||||
tools/
|
||||
|
||||
|
||||
39
.kimi/plan.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# Plan: Catálogo por Marca de Vehículo
|
||||
|
||||
## Resumen
|
||||
Reorganizar el catálogo para que la navegación principal sea:
|
||||
**Marca de vehículo → Categoría/Sistema → Partes compatibles**
|
||||
|
||||
Ejemplo: Toyota → Frenos → [balatas Bosch, discos Brembo, pastillas NGK...]
|
||||
|
||||
## Opción recomendada: Materialized View
|
||||
|
||||
No tocamos la tabla masiva `vehicle_parts` (billones de rows). Creamos una materialized view que agregue por marca + categoría.
|
||||
|
||||
### Cambios DB (Master)
|
||||
1. Crear `brand_catalog_parts` MV desde `vehicle_parts → MYE → models → brands`
|
||||
2. Agregar índices: `(brand_id, category_id)`, `(brand_id, part_id)`
|
||||
3. Crear función `refresh_brand_catalog()` para refrescar
|
||||
|
||||
### Cambios Backend
|
||||
1. Nuevos endpoints:
|
||||
- `GET /catalog/vehicle-brands` → lista marcas con conteo de partes
|
||||
- `GET /catalog/brand-categories?brand_id=` → categorías disponibles para esa marca
|
||||
- `GET /catalog/brand-parts?brand_id=&category_id=` → partes compatibles
|
||||
2. Modificar `catalog_service.py` con filtros por marca
|
||||
|
||||
### Cambios Frontend
|
||||
1. Nueva vista inicial: grid de marcas de vehículo (tarjetas con logo/contador)
|
||||
2. Click en marca → lista de categorías/sistemas (frenos, motor, suspensión...)
|
||||
3. Click en categoría → grid de partes compatibles con esa marca
|
||||
4. Filtro opcional: modelo/año/motor para refinar resultados
|
||||
|
||||
### Datos
|
||||
- `vehicle_parts` ya tiene todo. La MV solo agrega/distinct.
|
||||
- Las marcas fabricantes (Bosch, NGK) se muestran como badges en cada parte.
|
||||
|
||||
## Tiempo estimado
|
||||
- DB + Backend: 2-3 horas
|
||||
- Frontend: 2-3 horas
|
||||
- Testing: 1 hora
|
||||
- Total: ~6 horas
|
||||
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005621.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005630.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005636.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005641.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005645.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005649.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005655.png
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005659.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005703.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005707.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005713.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005717.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005722.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005729.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005735.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005740.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005743.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005748.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005751.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005755.png
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005759.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005803.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005809.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005813.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005817.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005822.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005826.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005830.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005834.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005837.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005841.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005848.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005857.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005904.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005907.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005911.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005915.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005920.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005923.png
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005929.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005932.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005936.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005939.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005943.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005946.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005953.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 005956.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010009.png
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010012.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010016.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010019.png
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010022.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010026.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010029.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010033.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010037.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010041.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010045.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010049.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010054.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010058.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010102.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010106.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010110.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010114.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010118.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010122.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010126.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010135.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010138.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010144.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010148.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010152.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010157.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010201.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010206.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010210.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010214.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010217.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010221.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010224.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010229.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010232.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010237.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010245.png
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010249.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010252.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010256.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010259.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010303.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010309.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010313.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010317.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010321.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010326.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010329.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
CapturasWeb/Captura de pantalla 2026-04-08 010333.png
Normal file
|
After Width: | Height: | Size: 43 KiB |