Marketplace móvil para negocios locales mexicanos. Estructura inicial: - apps/backend (NestJS API) - apps/frontend (React Web) - apps/mobile (Expo/React Native) - apps/mcp-server (Claude MCP Server) - apps/whatsapp-service (WhatsApp Business API) - database/ (PostgreSQL DDL) - docs/ (Documentación) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
434 lines
12 KiB
Plaintext
434 lines
12 KiB
Plaintext
# =============================================================================
|
|
# MICHANGARRITO - VARIABLES DE ENTORNO
|
|
# =============================================================================
|
|
# Copiar este archivo a .env y configurar los valores
|
|
# Generado: 2026-01-04
|
|
# =============================================================================
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# APLICACION
|
|
# -----------------------------------------------------------------------------
|
|
|
|
NODE_ENV=development
|
|
APP_NAME=michangarrito
|
|
APP_VERSION=1.0.0
|
|
APP_DESCRIPTION="POS inteligente para micro-negocios"
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# PUERTOS DE SERVICIOS
|
|
# -----------------------------------------------------------------------------
|
|
|
|
WEB_PORT=3140
|
|
BACKEND_PORT=3141
|
|
MCP_PORT=3142
|
|
WHATSAPP_PORT=3143
|
|
MOBILE_METRO_PORT=8081
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# BASE DE DATOS POSTGRESQL
|
|
# -----------------------------------------------------------------------------
|
|
|
|
DB_HOST=localhost
|
|
DB_PORT=5432
|
|
DB_NAME=michangarrito_dev
|
|
DB_USER=michangarrito_dev
|
|
# Generar con: openssl rand -base64 32
|
|
DB_PASSWORD=
|
|
|
|
# URL de conexion completa (se construye automaticamente)
|
|
DATABASE_URL=postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}
|
|
|
|
# Pool de conexiones
|
|
DB_POOL_SIZE=10
|
|
DB_POOL_MIN=2
|
|
|
|
# SSL (solo produccion)
|
|
DB_SSL=false
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# REDIS
|
|
# -----------------------------------------------------------------------------
|
|
|
|
REDIS_HOST=localhost
|
|
REDIS_PORT=6379
|
|
REDIS_PASSWORD=
|
|
REDIS_DATABASE=8
|
|
# Nota: Puerto 6379 es instancia compartida del workspace, DB 8 asignado a MiChangarrito
|
|
REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT}/${REDIS_DATABASE}
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# JWT / AUTENTICACION
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Generar con: openssl rand -base64 64
|
|
JWT_SECRET=
|
|
JWT_EXPIRES_IN=7d
|
|
JWT_REFRESH_EXPIRES_IN=30d
|
|
|
|
# OTP para login
|
|
OTP_EXPIRES_MINUTES=5
|
|
OTP_LENGTH=6
|
|
|
|
# PIN de acceso rapido
|
|
PIN_LENGTH=4
|
|
PIN_MAX_ATTEMPTS=3
|
|
PIN_LOCKOUT_MINUTES=30
|
|
|
|
# Biometrico
|
|
BIOMETRIC_ENABLED=true
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# WHATSAPP BUSINESS API (Meta)
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Verificacion del webhook
|
|
WHATSAPP_VERIFY_TOKEN=
|
|
|
|
# Token de acceso (obtener de Meta Business)
|
|
WHATSAPP_ACCESS_TOKEN=
|
|
|
|
# ID del numero de telefono
|
|
WHATSAPP_PHONE_NUMBER_ID=
|
|
|
|
# ID de la cuenta de negocio
|
|
WHATSAPP_BUSINESS_ACCOUNT_ID=
|
|
|
|
# Webhook URL (para configurar en Meta)
|
|
WHATSAPP_WEBHOOK_URL=https://tu-dominio.com/webhook/whatsapp
|
|
|
|
# Numero compartido de la plataforma (para multi-tenant)
|
|
WHATSAPP_PLATFORM_NUMBER=+52XXXXXXXXXX
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# LLM / INTELIGENCIA ARTIFICIAL
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Proveedor: openrouter, openai, anthropic, ollama
|
|
LLM_PROVIDER=openrouter
|
|
|
|
# API Key del proveedor
|
|
LLM_API_KEY=
|
|
|
|
# Modelo a usar
|
|
# OpenRouter: anthropic/claude-3-haiku, openai/gpt-4o-mini, meta-llama/llama-3-8b
|
|
# OpenAI: gpt-4o-mini, gpt-4o
|
|
# Anthropic: claude-3-haiku-20240307, claude-3-sonnet-20240229
|
|
# Ollama: llama3, mistral, phi3
|
|
LLM_MODEL=anthropic/claude-3-haiku
|
|
|
|
# URL base del proveedor
|
|
# OpenRouter: https://openrouter.ai/api/v1
|
|
# OpenAI: https://api.openai.com/v1
|
|
# Anthropic: https://api.anthropic.com/v1
|
|
# Ollama: http://localhost:11434/api
|
|
LLM_BASE_URL=https://openrouter.ai/api/v1
|
|
|
|
# Limites
|
|
LLM_MAX_TOKENS=4096
|
|
LLM_TEMPERATURE=0.7
|
|
|
|
# Tokens por defecto para nuevos usuarios
|
|
LLM_DEFAULT_TOKENS=500
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# MCP SERVER (Model Context Protocol)
|
|
# -----------------------------------------------------------------------------
|
|
|
|
MCP_SERVER_NAME=michangarrito-mcp
|
|
MCP_SERVER_VERSION=1.0.0
|
|
MCP_LOG_LEVEL=info
|
|
|
|
# Herramientas habilitadas (separadas por coma)
|
|
MCP_ENABLED_TOOLS=ventas,productos,inventario,clientes,fiados,pedidos,reportes,configuracion
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# STRIPE (Suscripciones y Pagos)
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Claves de API (modo test)
|
|
# Obtener de: https://dashboard.stripe.com/test/apikeys
|
|
STRIPE_SECRET_KEY=sk_test_
|
|
STRIPE_PUBLISHABLE_KEY=pk_test_
|
|
|
|
# Webhook secret
|
|
# Obtener de: https://dashboard.stripe.com/test/webhooks
|
|
STRIPE_WEBHOOK_SECRET=whsec_
|
|
|
|
# IDs de productos/precios (crear en Stripe Dashboard)
|
|
STRIPE_PRICE_CHANGARRITO=price_
|
|
STRIPE_PRICE_TIENDITA=price_
|
|
STRIPE_PRICE_TOKENS_1000=price_
|
|
STRIPE_PRICE_TOKENS_3000=price_
|
|
STRIPE_PRICE_TOKENS_8000=price_
|
|
STRIPE_PRICE_TOKENS_20000=price_
|
|
|
|
# Referencia OXXO
|
|
STRIPE_OXXO_ENABLED=true
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# MERCADO PAGO (Terminal de Pago)
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Access Token (obtener de Mercado Pago Developers)
|
|
MERCADOPAGO_ACCESS_TOKEN=
|
|
|
|
# Public Key
|
|
MERCADOPAGO_PUBLIC_KEY=
|
|
|
|
# User ID (para Point integration)
|
|
MERCADOPAGO_USER_ID=
|
|
|
|
# Device ID de la terminal
|
|
MERCADOPAGO_DEVICE_ID=
|
|
|
|
# Webhook URL
|
|
MERCADOPAGO_WEBHOOK_URL=https://tu-dominio.com/webhook/mercadopago
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# CLIP (Terminal de Pago)
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# API Key (obtener de Clip Dashboard)
|
|
CLIP_API_KEY=
|
|
|
|
# Merchant ID
|
|
CLIP_MERCHANT_ID=
|
|
|
|
# Device ID de la terminal
|
|
CLIP_DEVICE_ID=
|
|
|
|
# Webhook URL
|
|
CLIP_WEBHOOK_URL=https://tu-dominio.com/webhook/clip
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# CODI (Banxico QR)
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Habilitado
|
|
CODI_ENABLED=true
|
|
|
|
# CLABE virtual para recepcion
|
|
CODI_CLABE=
|
|
|
|
# Certificado (path o base64)
|
|
CODI_CERTIFICATE=
|
|
|
|
# Llave privada (path o base64)
|
|
CODI_PRIVATE_KEY=
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# FIREBASE (Push Notifications)
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Project ID
|
|
FIREBASE_PROJECT_ID=
|
|
|
|
# Service Account (JSON)
|
|
# Opcion 1: Path al archivo
|
|
FIREBASE_SERVICE_ACCOUNT_PATH=./firebase-service-account.json
|
|
|
|
# Opcion 2: JSON como string (para produccion)
|
|
FIREBASE_SERVICE_ACCOUNT_JSON=
|
|
|
|
# Habilitado
|
|
FIREBASE_PUSH_ENABLED=true
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# OCR / VISION (Procesamiento de Imagenes)
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Google Cloud Vision
|
|
# Obtener de: https://console.cloud.google.com/apis/credentials
|
|
GOOGLE_VISION_API_KEY=
|
|
|
|
# Alternativa: Tesseract local
|
|
OCR_PROVIDER=google
|
|
# OCR_PROVIDER=tesseract
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# TRANSCRIPCION DE AUDIO
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# OpenAI Whisper API
|
|
# Obtener de: https://platform.openai.com/api-keys
|
|
OPENAI_API_KEY=
|
|
|
|
# Modelo de Whisper
|
|
WHISPER_MODEL=whisper-1
|
|
|
|
# Alternativa: Whisper local
|
|
TRANSCRIPTION_PROVIDER=openai
|
|
# TRANSCRIPTION_PROVIDER=local
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# ALMACENAMIENTO
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Tipo: local, s3, cloudinary
|
|
STORAGE_TYPE=local
|
|
|
|
# Local
|
|
STORAGE_LOCAL_PATH=./uploads
|
|
STORAGE_MAX_SIZE_MB=10
|
|
|
|
# AWS S3 (para produccion)
|
|
AWS_ACCESS_KEY_ID=
|
|
AWS_SECRET_ACCESS_KEY=
|
|
AWS_REGION=us-east-1
|
|
AWS_S3_BUCKET=michangarrito-uploads
|
|
|
|
# Cloudinary (alternativa)
|
|
CLOUDINARY_CLOUD_NAME=
|
|
CLOUDINARY_API_KEY=
|
|
CLOUDINARY_API_SECRET=
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# CORS
|
|
# -----------------------------------------------------------------------------
|
|
|
|
FRONTEND_URL=http://localhost:3140
|
|
ALLOWED_ORIGINS=http://localhost:3140,http://localhost:3141,exp://localhost:8081
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# LOGGING
|
|
# -----------------------------------------------------------------------------
|
|
|
|
LOG_LEVEL=debug
|
|
LOG_FORMAT=pretty
|
|
# LOG_FORMAT=json (para produccion)
|
|
|
|
# Sentry (error tracking - produccion)
|
|
SENTRY_DSN=
|
|
SENTRY_ENVIRONMENT=development
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# SMTP / EMAIL (Opcional)
|
|
# -----------------------------------------------------------------------------
|
|
|
|
SMTP_HOST=localhost
|
|
SMTP_PORT=1025
|
|
SMTP_USER=
|
|
SMTP_PASSWORD=
|
|
SMTP_FROM=noreply@michangarrito.com
|
|
|
|
# Mailhog para desarrollo
|
|
MAILHOG_WEB_PORT=8025
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# RATE LIMITING
|
|
# -----------------------------------------------------------------------------
|
|
|
|
RATE_LIMIT_TTL=60
|
|
RATE_LIMIT_LIMIT=100
|
|
|
|
# WhatsApp rate limits
|
|
WHATSAPP_RATE_LIMIT_MESSAGES=1000
|
|
WHATSAPP_RATE_LIMIT_WINDOW=86400
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# CACHE
|
|
# -----------------------------------------------------------------------------
|
|
|
|
CACHE_TTL=300
|
|
CACHE_MAX_ITEMS=1000
|
|
|
|
# Cache de productos (mas largo)
|
|
CACHE_PRODUCTS_TTL=3600
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# JOBS / QUEUES (Bull)
|
|
# -----------------------------------------------------------------------------
|
|
|
|
BULL_REDIS_HOST=${REDIS_HOST}
|
|
BULL_REDIS_PORT=${REDIS_PORT}
|
|
|
|
# Colas disponibles
|
|
QUEUE_NOTIFICATIONS=notifications
|
|
QUEUE_REPORTS=reports
|
|
QUEUE_SYNC=sync
|
|
QUEUE_WHATSAPP=whatsapp
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# EXPO / MOBILE
|
|
# -----------------------------------------------------------------------------
|
|
|
|
EXPO_PROJECT_ID=
|
|
EXPO_OWNER=
|
|
|
|
# EAS Build
|
|
EAS_PROJECT_ID=
|
|
|
|
# Updates
|
|
EXPO_UPDATES_URL=https://u.expo.dev/
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# MULTI-TENANT
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Modo: single (un negocio por instancia) o multi (varios negocios)
|
|
TENANT_MODE=multi
|
|
|
|
# Deteccion de tenant por:
|
|
# - subdomain: negocio.michangarrito.com
|
|
# - header: X-Tenant-ID
|
|
# - whatsapp: detectar por contexto de conversacion
|
|
TENANT_DETECTION=whatsapp
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# NEGOCIO / CONFIGURACION
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Moneda por defecto
|
|
DEFAULT_CURRENCY=MXN
|
|
|
|
# Zona horaria
|
|
DEFAULT_TIMEZONE=America/Mexico_City
|
|
|
|
# Idioma
|
|
DEFAULT_LANGUAGE=es-MX
|
|
|
|
# Impuestos
|
|
DEFAULT_TAX_RATE=16
|
|
TAX_INCLUDED=true
|
|
|
|
# Tickets
|
|
TICKET_COMPANY_NAME=MiChangarrito
|
|
TICKET_FOOTER=Gracias por su compra
|
|
|
|
# Horario de operacion por defecto
|
|
DEFAULT_OPENING_HOUR=8
|
|
DEFAULT_CLOSING_HOUR=22
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# DESARROLLO
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Hot reload
|
|
HOT_RELOAD=true
|
|
|
|
# Debug
|
|
DEBUG=true
|
|
DEBUG_SQL=false
|
|
|
|
# Seed data
|
|
SEED_ENABLED=true
|
|
|
|
# Swagger docs
|
|
SWAGGER_ENABLED=true
|
|
SWAGGER_PATH=/api/docs
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# PRODUCCION (descomentar para produccion)
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# NODE_ENV=production
|
|
# DEBUG=false
|
|
# LOG_FORMAT=json
|
|
# SWAGGER_ENABLED=false
|
|
# DB_SSL=true
|
|
# STORAGE_TYPE=s3
|
|
|
|
# =============================================================================
|
|
# FIN DE CONFIGURACION
|
|
# =============================================================================
|