## Entities (DDL↔Backend sync): - user.entity: 8 missing fields added - role.entity: 4 missing fields added - tenant.entity: 5 missing fields added ## Documentation: - PROXIMA-ACCION.md: Rewritten with 2026-01-27 status - PROJECT-STATUS.md: Added MLM, Goals, Portfolio phases - docs/01-modulos/_INDEX.md: Updated module states to Completado ## Inventories: - DATABASE_INVENTORY.yml: Added mlm/goals schemas (10 tables) - BACKEND_INVENTORY.yml: Added mlm/goals modules (10 entities) - MASTER_INVENTORY.yml: MLM/Goals marked as completado - tareas/_INDEX.yml: Registered TASK-007, SAAS-021, SAAS-022 Metrics: 23 modules, 17 schemas, 48 tables, 260 SP (100%) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
511 lines
12 KiB
YAML
511 lines
12 KiB
YAML
---
|
|
# BACKEND INVENTORY - Template SaaS
|
|
# Version: 4.1.0
|
|
# Ultima actualizacion: 2026-01-25
|
|
# Nota: Portfolio module (SAAS-019) added
|
|
# AUDITORIA DE COHERENCIA - Sincronizado con codigo real
|
|
|
|
metadata:
|
|
proyecto: "template-saas"
|
|
tipo: "BACKEND"
|
|
version: "4.1.0"
|
|
updated: "2026-01-25"
|
|
framework: "NestJS 11.1.8"
|
|
orm: "TypeORM 0.3.22"
|
|
testing: "Jest"
|
|
estado: "parcial"
|
|
nota_auditoria: "Inventario sincronizado con codigo real 2026-01-24"
|
|
|
|
modulos:
|
|
- nombre: "auth"
|
|
estado: "completado"
|
|
services:
|
|
- "auth.service.ts"
|
|
- "token.service.ts"
|
|
- "oauth.service.ts"
|
|
- "mfa.service.ts"
|
|
controllers:
|
|
- "auth.controller.ts"
|
|
entities:
|
|
- "user.entity.ts"
|
|
- "session.entity.ts"
|
|
- "token.entity.ts"
|
|
- "oauth-connection.entity.ts"
|
|
dtos:
|
|
- "login.dto.ts"
|
|
- "register.dto.ts"
|
|
- "refresh-token.dto.ts"
|
|
guards:
|
|
- "jwt-auth.guard.ts"
|
|
- "local-auth.guard.ts"
|
|
tests: 57
|
|
cobertura: 100
|
|
|
|
- nombre: "tenants"
|
|
estado: "completado"
|
|
services:
|
|
- "tenants.service.ts"
|
|
controllers:
|
|
- "tenants.controller.ts"
|
|
entities:
|
|
- "tenant.entity.ts"
|
|
- "tenant-settings.entity.ts"
|
|
dtos:
|
|
- "create-tenant.dto.ts"
|
|
- "update-tenant.dto.ts"
|
|
tests: 25
|
|
cobertura: 100
|
|
|
|
- nombre: "users"
|
|
estado: "completado"
|
|
services:
|
|
- "users.service.ts"
|
|
- "invitation.service.ts"
|
|
controllers:
|
|
- "users.controller.ts"
|
|
entities:
|
|
- "role.entity.ts"
|
|
- "invitation.entity.ts"
|
|
dtos:
|
|
- "create-user.dto.ts"
|
|
- "update-user.dto.ts"
|
|
- "invite-user.dto.ts"
|
|
tests: 42
|
|
cobertura: 98
|
|
|
|
- nombre: "billing"
|
|
estado: "completado"
|
|
services:
|
|
- "billing.service.ts"
|
|
- "stripe.service.ts"
|
|
- "subscription.service.ts"
|
|
- "invoice.service.ts"
|
|
- "plans.service.ts"
|
|
controllers:
|
|
- "billing.controller.ts"
|
|
- "stripe-webhook.controller.ts"
|
|
- "plans.controller.ts"
|
|
entities:
|
|
- "subscription.entity.ts"
|
|
- "invoice.entity.ts"
|
|
- "payment.entity.ts"
|
|
- "payment-method.entity.ts"
|
|
- "plan.entity.ts"
|
|
- "plan-feature.entity.ts"
|
|
dtos:
|
|
- "create-subscription.dto.ts"
|
|
- "update-subscription.dto.ts"
|
|
- "plan-response.dto.ts"
|
|
tests: 160
|
|
cobertura: 100
|
|
|
|
- nombre: "onboarding"
|
|
estado: "completado"
|
|
services:
|
|
- "onboarding.service.ts"
|
|
controllers:
|
|
- "onboarding.controller.ts"
|
|
entities: []
|
|
dtos:
|
|
- "onboarding-status.dto.ts"
|
|
- "complete-onboarding.dto.ts"
|
|
tests: 16
|
|
cobertura: 97
|
|
|
|
- nombre: "notifications"
|
|
estado: "completado"
|
|
services:
|
|
- "notifications.service.ts"
|
|
- "push-notification.service.ts"
|
|
- "notification-queue.service.ts"
|
|
- "devices.service.ts"
|
|
controllers:
|
|
- "notifications.controller.ts"
|
|
- "devices.controller.ts"
|
|
gateways:
|
|
- "notifications.gateway.ts"
|
|
entities:
|
|
- "notification.entity.ts"
|
|
- "template.entity.ts"
|
|
- "user-preferences.entity.ts"
|
|
- "user-device.entity.ts"
|
|
- "notification-queue.entity.ts"
|
|
- "notification-log.entity.ts"
|
|
tests: 45
|
|
cobertura: 98
|
|
|
|
- nombre: "feature-flags"
|
|
estado: "completado"
|
|
services:
|
|
- "feature-flags.service.ts"
|
|
controllers:
|
|
- "feature-flags.controller.ts"
|
|
entities:
|
|
- "flag.entity.ts"
|
|
- "tenant-flag.entity.ts"
|
|
- "user-flag.entity.ts"
|
|
- "flag-evaluation.entity.ts"
|
|
tests: 35
|
|
cobertura: 95
|
|
|
|
- nombre: "audit"
|
|
estado: "completado"
|
|
services:
|
|
- "audit.service.ts"
|
|
controllers:
|
|
- "audit.controller.ts"
|
|
entities:
|
|
- "audit-log.entity.ts"
|
|
- "activity-log.entity.ts"
|
|
tests: 28
|
|
cobertura: 95
|
|
|
|
- nombre: "ai-integration"
|
|
estado: "completado"
|
|
services:
|
|
- "ai.service.ts"
|
|
- "openrouter.service.ts"
|
|
controllers:
|
|
- "ai.controller.ts"
|
|
entities:
|
|
- "ai-config.entity.ts"
|
|
- "ai-usage.entity.ts"
|
|
tests: 32
|
|
cobertura: 95
|
|
|
|
- nombre: "storage"
|
|
estado: "completado"
|
|
services:
|
|
- "storage.service.ts"
|
|
- "s3.provider.ts"
|
|
controllers:
|
|
- "storage.controller.ts"
|
|
entities:
|
|
- "file.entity.ts"
|
|
- "pending-upload.entity.ts"
|
|
- "storage-usage.entity.ts"
|
|
tests: 113
|
|
cobertura: 96
|
|
|
|
- nombre: "webhooks"
|
|
estado: "completado"
|
|
services:
|
|
- "webhooks.service.ts"
|
|
- "webhook-processor.service.ts"
|
|
controllers:
|
|
- "webhooks.controller.ts"
|
|
entities:
|
|
- "webhook.entity.ts"
|
|
- "webhook-delivery.entity.ts"
|
|
tests: 42
|
|
cobertura: 98
|
|
|
|
- nombre: "email"
|
|
estado: "completado"
|
|
services:
|
|
- "email.service.ts"
|
|
- "sendgrid.provider.ts"
|
|
- "ses.provider.ts"
|
|
- "smtp.provider.ts"
|
|
controllers: []
|
|
entities: []
|
|
tests: 35
|
|
cobertura: 92
|
|
|
|
- nombre: "whatsapp"
|
|
estado: "completado"
|
|
services:
|
|
- "whatsapp.service.ts"
|
|
controllers:
|
|
- "whatsapp.controller.ts"
|
|
- "whatsapp-webhook.controller.ts"
|
|
entities:
|
|
- "whatsapp-config.entity.ts"
|
|
- "whatsapp-message.entity.ts"
|
|
tests: 22
|
|
cobertura: 90
|
|
|
|
- nombre: "rbac"
|
|
estado: "completado"
|
|
services:
|
|
- "rbac.service.ts"
|
|
guards:
|
|
- "roles.guard.ts"
|
|
- "permissions.guard.ts"
|
|
decorators:
|
|
- "roles.decorator.ts"
|
|
- "permissions.decorator.ts"
|
|
tests: 25
|
|
cobertura: 95
|
|
|
|
- nombre: "superadmin"
|
|
estado: "completado"
|
|
services:
|
|
- "superadmin.service.ts"
|
|
controllers:
|
|
- "superadmin.controller.ts"
|
|
guards:
|
|
- "superadmin.guard.ts"
|
|
tests: 40
|
|
cobertura: 90
|
|
|
|
- nombre: "health"
|
|
estado: "completado"
|
|
controllers:
|
|
- "health.controller.ts"
|
|
tests: 8
|
|
cobertura: 100
|
|
|
|
- nombre: "analytics"
|
|
estado: "completado"
|
|
nota: "MODULO EXISTENTE - NO DOCUMENTADO previamente. Agregado en auditoria 2026-01-24"
|
|
services:
|
|
- "analytics.service.ts"
|
|
controllers:
|
|
- "analytics.controller.ts"
|
|
entities: []
|
|
dtos:
|
|
- "analytics-query.dto.ts"
|
|
tests: 0
|
|
cobertura: 0
|
|
|
|
- nombre: "sales"
|
|
estado: "completado"
|
|
nota: "SAAS-018 - CORRECCION: SI implementado. Verificado en app.module.ts. 2026-01-24"
|
|
services:
|
|
- "leads.service.ts"
|
|
- "opportunities.service.ts"
|
|
- "pipeline.service.ts"
|
|
- "activities.service.ts"
|
|
- "sales-dashboard.service.ts"
|
|
controllers:
|
|
- "leads.controller.ts"
|
|
- "opportunities.controller.ts"
|
|
- "pipeline.controller.ts"
|
|
- "activities.controller.ts"
|
|
- "dashboard.controller.ts"
|
|
entities:
|
|
- "lead.entity.ts"
|
|
- "opportunity.entity.ts"
|
|
- "pipeline-stage.entity.ts"
|
|
- "activity.entity.ts"
|
|
dtos:
|
|
- "lead.dto.ts"
|
|
- "opportunity.dto.ts"
|
|
- "activity.dto.ts"
|
|
- "pipeline.dto.ts"
|
|
- "dashboard.dto.ts"
|
|
tests: 0
|
|
cobertura: 0
|
|
pendiente: "Tests unitarios"
|
|
|
|
- nombre: "commissions"
|
|
estado: "completado"
|
|
nota: "SAAS-020 - CORRECCION: SI implementado. Verificado en app.module.ts. 2026-01-24"
|
|
services:
|
|
- "schemes.service.ts"
|
|
- "assignments.service.ts"
|
|
- "entries.service.ts"
|
|
- "periods.service.ts"
|
|
- "commissions-dashboard.service.ts"
|
|
controllers:
|
|
- "schemes.controller.ts"
|
|
- "assignments.controller.ts"
|
|
- "entries.controller.ts"
|
|
- "periods.controller.ts"
|
|
- "dashboard.controller.ts"
|
|
entities:
|
|
- "commission-scheme.entity.ts"
|
|
- "commission-assignment.entity.ts"
|
|
- "commission-entry.entity.ts"
|
|
- "commission-period.entity.ts"
|
|
dtos:
|
|
- "scheme.dto.ts"
|
|
- "assignment.dto.ts"
|
|
- "entry.dto.ts"
|
|
- "period.dto.ts"
|
|
- "dashboard.dto.ts"
|
|
tests: 0
|
|
cobertura: 0
|
|
pendiente: "Tests unitarios"
|
|
|
|
- nombre: "portfolio"
|
|
estado: "completado"
|
|
nota: "SAAS-019 - Implementado 2026-01-25. Catálogo de productos/servicios."
|
|
services:
|
|
- "categories.service.ts"
|
|
- "products.service.ts"
|
|
controllers:
|
|
- "categories.controller.ts"
|
|
- "products.controller.ts"
|
|
entities:
|
|
- "category.entity.ts"
|
|
- "product.entity.ts"
|
|
- "variant.entity.ts"
|
|
- "price.entity.ts"
|
|
dtos:
|
|
- "category.dto.ts"
|
|
- "product.dto.ts"
|
|
tests: 0
|
|
cobertura: 0
|
|
pendiente: "Tests unitarios"
|
|
|
|
shared:
|
|
guards:
|
|
- nombre: "JwtAuthGuard"
|
|
estado: "completado"
|
|
- nombre: "TenantGuard"
|
|
estado: "completado"
|
|
- nombre: "RolesGuard"
|
|
estado: "completado"
|
|
- nombre: "PermissionsGuard"
|
|
estado: "completado"
|
|
- nombre: "SuperadminGuard"
|
|
estado: "completado"
|
|
|
|
decorators:
|
|
- nombre: "CurrentUser"
|
|
estado: "completado"
|
|
- nombre: "CurrentTenant"
|
|
estado: "completado"
|
|
- nombre: "RequirePermission"
|
|
estado: "completado"
|
|
- nombre: "Roles"
|
|
estado: "completado"
|
|
- nombre: "Public"
|
|
estado: "completado"
|
|
|
|
interceptors:
|
|
- nombre: "TenantContextInterceptor"
|
|
estado: "completado"
|
|
- nombre: "TransformInterceptor"
|
|
estado: "completado"
|
|
|
|
resumen:
|
|
nota_auditoria: "METRICAS VERIFICADAS 2026-01-27 via find/wc (incluye MLM y Goals)"
|
|
total_modulos_implementados: 23
|
|
total_modulos_no_implementados: 0
|
|
total_services: 46
|
|
total_controllers: 41
|
|
total_endpoints: 195
|
|
total_entities: 64
|
|
total_dtos: 57
|
|
total_tests: 750
|
|
total_test_suites: 35
|
|
cobertura_tests: 70.5
|
|
|
|
planificado:
|
|
services_estimados: 42
|
|
controllers_estimados: 33
|
|
endpoints_estimados: 153
|
|
entities_estimados: 45
|
|
tests_estimados: 900
|
|
nota: "CORRECCION: Sales y Commissions SI implementados. Objetivo alcanzado."
|
|
|
|
gaps_identificados:
|
|
criticos: []
|
|
altos:
|
|
- "Sales, Commissions y Portfolio: Sin tests unitarios (0%)"
|
|
- "2 archivos de tests rotos (billing-usage.spec, webhook-retry.spec)"
|
|
medios:
|
|
- "Modulo analytics: Tests pendientes"
|
|
resueltos_2026_01_24:
|
|
- "Modulo sales (SAAS-018): Ahora completado"
|
|
- "Modulo commissions (SAAS-020): Ahora completado"
|
|
resueltos_2026_01_25:
|
|
- "Modulo portfolio (SAAS-019): Implementado"
|
|
|
|
dependencias_npm:
|
|
core:
|
|
- "@nestjs/core@10.x"
|
|
- "@nestjs/common@10.x"
|
|
- "@nestjs/platform-express@10.x"
|
|
- "typeorm@0.3.x"
|
|
- "@nestjs/typeorm@10.x"
|
|
auth:
|
|
- "@nestjs/jwt@10.x"
|
|
- "@nestjs/passport@10.x"
|
|
- "passport-jwt"
|
|
- "passport-local"
|
|
- "bcrypt"
|
|
billing:
|
|
- "stripe"
|
|
notifications:
|
|
- "web-push"
|
|
- "@nestjs/websockets"
|
|
- "@nestjs/platform-socket.io"
|
|
- "socket.io"
|
|
queue:
|
|
- "@nestjs/bullmq"
|
|
- "bullmq"
|
|
- "ioredis"
|
|
storage:
|
|
- "@aws-sdk/client-s3"
|
|
- "@aws-sdk/s3-request-presigner"
|
|
email:
|
|
- "@sendgrid/mail"
|
|
- "@aws-sdk/client-ses"
|
|
- "nodemailer"
|
|
|
|
- nombre: "mlm"
|
|
estado: "completado"
|
|
nota: "SAAS-021 - Verificado implementado 2026-01-27. Backend 100%, Frontend hooks 100%, UI pendiente."
|
|
services:
|
|
- "structures.service.ts"
|
|
- "ranks.service.ts"
|
|
- "nodes.service.ts"
|
|
- "commissions.service.ts"
|
|
controllers:
|
|
- "structures.controller.ts"
|
|
- "ranks.controller.ts"
|
|
- "nodes.controller.ts"
|
|
- "commissions.controller.ts"
|
|
entities:
|
|
- "structure.entity.ts"
|
|
- "rank.entity.ts"
|
|
- "node.entity.ts"
|
|
- "commission.entity.ts"
|
|
- "rank-history.entity.ts"
|
|
- "bonus.entity.ts"
|
|
dtos:
|
|
- "structure.dto.ts"
|
|
- "rank.dto.ts"
|
|
- "node.dto.ts"
|
|
- "commission.dto.ts"
|
|
tests: 0
|
|
cobertura: 0
|
|
pendiente: "Tests unitarios, Páginas UI"
|
|
|
|
- nombre: "goals"
|
|
estado: "completado"
|
|
nota: "SAAS-022 - Verificado implementado 2026-01-27. Backend 100%, Frontend hooks 100%, UI pendiente."
|
|
services:
|
|
- "definitions.service.ts"
|
|
- "assignments.service.ts"
|
|
controllers:
|
|
- "definitions.controller.ts"
|
|
- "assignments.controller.ts"
|
|
entities:
|
|
- "definition.entity.ts"
|
|
- "assignment.entity.ts"
|
|
- "progress-log.entity.ts"
|
|
- "milestone-notification.entity.ts"
|
|
dtos:
|
|
- "definition.dto.ts"
|
|
- "assignment.dto.ts"
|
|
tests: 0
|
|
cobertura: 0
|
|
pendiente: "Tests unitarios, Páginas UI"
|
|
|
|
ultima_actualizacion: "2026-01-27"
|
|
actualizado_por: "Claude Opus 4.5 (TASK-007 - Verificación MLM y Goals)"
|
|
historial_cambios:
|
|
- fecha: "2026-01-25"
|
|
tipo: "implementacion"
|
|
descripcion: "SAAS-019 Portfolio module implementado. 4 entities, 2 services, 2 controllers, 2 DTOs."
|
|
agente: "Claude Opus 4.5 (SAAS-019 Portfolio)"
|
|
- fecha: "2026-01-24"
|
|
tipo: "correccion_critica"
|
|
descripcion: "CORRECCION: Sales y Commissions SI implementados. Verificado en app.module.ts (imports lineas 31-32, modules lineas 93-94). 25 archivos por modulo."
|
|
agente: "Claude Opus 4.5 (Validacion de Coherencia)"
|