workspace/devtools/scripts/erp-tools/migration/migrate-to-multi-project.sh
rckrdmrd ea1879f4ad feat: Initial workspace structure with multi-level Git configuration
- Configure workspace Git repository with comprehensive .gitignore
- Add Odoo as submodule for ERP reference code
- Include documentation: SETUP.md, GIT-STRUCTURE.md
- Add gitignore templates for projects (backend, frontend, database)
- Structure supports independent repos per project/subproject level

Workspace includes:
- core/ - Reusable patterns, modules, orchestration system
- projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.)
- knowledge-base/ - Reference code and patterns (includes Odoo submodule)
- devtools/ - Development tools and templates
- customers/ - Client implementations template

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 10:44:23 -06:00

669 lines
17 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# =============================================================================
# SCRIPT DE MIGRACIÓN A ESTRUCTURA MULTI-PROYECTO
# =============================================================================
# Versión: 1.0.0
# Fecha: 2025-11-23
# Descripción: Migra workspace actual a estructura multi-proyecto
# =============================================================================
set -e # Exit on error
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Variables
WORKSPACE_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
BACKUP_DIR="${WORKSPACE_ROOT}_backup_$(date +%Y%m%d_%H%M%S)"
# =============================================================================
# FUNCIONES
# =============================================================================
log_info() {
echo -e "${BLUE} ${NC}$1"
}
log_success() {
echo -e "${GREEN}${NC}$1"
}
log_warning() {
echo -e "${YELLOW}${NC}$1"
}
log_error() {
echo -e "${RED}${NC}$1"
}
print_header() {
echo ""
echo "============================================================================="
echo "$1"
echo "============================================================================="
echo ""
}
# =============================================================================
# VALIDACIONES PRE-MIGRACIÓN
# =============================================================================
validate_workspace() {
print_header "VALIDANDO WORKSPACE ACTUAL"
log_info "Directorio actual: $WORKSPACE_ROOT"
# Validar que estamos en el workspace correcto
if [ ! -d "$WORKSPACE_ROOT/orchestration" ]; then
log_error "No se encontró carpeta 'orchestration'. ¿Estás en el workspace correcto?"
exit 1
fi
if [ ! -d "$WORKSPACE_ROOT/reference" ]; then
log_error "No se encontró carpeta 'reference'. ¿Estás en el workspace correcto?"
exit 1
fi
log_success "Workspace válido"
}
create_backup() {
print_header "CREANDO BACKUP"
log_info "Creando backup en: $BACKUP_DIR"
# Crear directorio de backup
mkdir -p "$BACKUP_DIR"
# Copiar contenido (excepto .git para no duplicar)
rsync -av --exclude='.git' "$WORKSPACE_ROOT/" "$BACKUP_DIR/"
log_success "Backup creado exitosamente"
log_warning "Si algo sale mal, puedes restaurar desde: $BACKUP_DIR"
}
# =============================================================================
# MIGRACIÓN
# =============================================================================
create_shared_structure() {
print_header "CREANDO ESTRUCTURA SHARED/"
cd "$WORKSPACE_ROOT"
# Crear estructura shared
log_info "Creando carpetas shared/..."
mkdir -p shared/{reference,orchestration,analysis,bugs,components,docs}
# Crear subcarpetas de analysis
mkdir -p shared/analysis/{domain-models/{common,financial,inventory,purchasing,production,crm},odoo-comparison,architecture}
# Crear subcarpetas de bugs
mkdir -p shared/bugs/{global,by-component}
# Crear subcarpetas de components
mkdir -p shared/components/{database/{common-schemas,common-functions},backend/{auth-module,common-entities,common-services,utils},frontend/{ui-kit,common-hooks,common-stores}}
# Crear subcarpetas de docs
mkdir -p shared/docs/{onboarding,standards,guides}
log_success "Estructura shared/ creada"
}
move_shared_content() {
print_header "MOVIENDO CONTENIDO A SHARED/"
cd "$WORKSPACE_ROOT"
# Mover reference
if [ -d "reference" ]; then
log_info "Moviendo reference/ → shared/reference/"
mv reference/* shared/reference/ 2>/dev/null || true
rmdir reference 2>/dev/null || true
log_success "Reference movido"
fi
# Mover orchestration
if [ -d "orchestration" ]; then
log_info "Moviendo orchestration/ → shared/orchestration/"
mv orchestration/* shared/orchestration/ 2>/dev/null || true
rmdir orchestration 2>/dev/null || true
log_success "Orchestration movido"
fi
}
create_projects_structure() {
print_header "CREANDO ESTRUCTURA PROJECTS/"
cd "$WORKSPACE_ROOT"
# Crear carpeta projects
mkdir -p projects
# Crear estructura para cada proyecto
for project in erp-generic erp-construccion erp-vidrio-templado erp-mecanicas-diesel; do
log_info "Creando estructura para $project..."
# Crear carpetas principales
mkdir -p "projects/$project"/{docs,apps,orchestration,bugs}
# Crear subcarpetas de docs
mkdir -p "projects/$project/docs"/{00-overview,01-analysis/{requirements,domain-model,database-design,odoo-comparison},02-modules,03-architecture/{adr,database-schema,api-design},04-development}
# Crear subcarpetas de apps
mkdir -p "projects/$project/apps"/{database/{ddl,seeds,migrations,scripts},backend,frontend/{web,mobile}}
# Crear subcarpetas de orchestration
mkdir -p "projects/$project/orchestration"/{trazas,inventarios,estados,reportes}
log_success "$project creado"
done
}
migrate_construccion_content() {
print_header "MIGRANDO CONTENIDO DE ERP CONSTRUCCIÓN"
cd "$WORKSPACE_ROOT"
# Mover docs
if [ -d "docs" ]; then
log_info "Moviendo docs/ → projects/erp-construccion/docs/"
# Crear carpeta temporal
mkdir -p temp_docs
mv docs/* temp_docs/ 2>/dev/null || true
# Mover a estructura nueva
mv temp_docs/* "projects/erp-construccion/docs/" 2>/dev/null || true
# Limpiar
rmdir temp_docs 2>/dev/null || true
rmdir docs 2>/dev/null || true
log_success "Docs migrados"
fi
# Mover apps
if [ -d "apps" ]; then
log_info "Moviendo apps/ → projects/erp-construccion/apps/"
# Crear carpeta temporal
mkdir -p temp_apps
mv apps/* temp_apps/ 2>/dev/null || true
# Mover a estructura nueva
mv temp_apps/* "projects/erp-construccion/apps/" 2>/dev/null || true
# Limpiar
rmdir temp_apps 2>/dev/null || true
rmdir apps 2>/dev/null || true
log_success "Apps migrados"
fi
}
create_readme_files() {
print_header "CREANDO ARCHIVOS README"
cd "$WORKSPACE_ROOT"
# README.md para cada proyecto
log_info "Creando READMEs de proyectos..."
# ERP Genérico
cat > "projects/erp-generic/README.md" << 'EOF'
# ERP GENÉRICO
**Tipo:** ERP Base
**Estado:** 📋 En planificación
**Versión:** 0.1.0
## Descripción
ERP genérico que sirve como base para todos los demás ERPs. Contiene módulos comunes reutilizables.
## Módulos Base
- Autenticación y autorización
- Gestión de usuarios y roles
- Gestión de empresas/organizaciones
- Catálogos maestros
- Sistema de reportes
- Módulo financiero básico
- Módulo de inventario básico
- Módulo de compras básico
- CRM básico
## Documentación
Ver `docs/00-overview/` para más información.
EOF
# ERP Construcción
cat > "projects/erp-construccion/README.md" << 'EOF'
# ERP CONSTRUCCIÓN
**Tipo:** ERP Especializado
**Giro:** Empresas de construcción e INFONAVIT
**Estado:** 🚧 En desarrollo
**Versión:** 0.1.0
**Base:** ERP Genérico (60-70% de código reutilizado)
## Descripción
ERP especializado para empresas de construcción con módulos específicos para gestión de proyectos, control de obra, presupuestos, y cumplimiento normativo INFONAVIT.
## Módulos Específicos
- Gestión de proyectos de construcción
- Presupuestos y costos
- Control de obra y avances
- INFONAVIT y cumplimiento normativo
- Gestión de activos y maquinaria
- Estimaciones y facturación
- Gestión documental
- HSE (Seguridad e higiene)
## Documentación
Ver `docs/00-overview/MVP-APP.md` para el plan completo del MVP.
EOF
# ERP Vidrio
cat > "projects/erp-vidrio-templado/README.md" << 'EOF'
# ERP VIDRIO TEMPLADO
**Tipo:** ERP Especializado
**Giro:** Producción de vidrio templado
**Estado:** 📋 En planificación
**Versión:** 0.1.0
**Base:** ERP Genérico (60-70% de código reutilizado)
## Descripción
ERP especializado para empresas de producción de vidrio templado con módulos para gestión de producción, control de calidad, inventario de materia prima, y órdenes de producción.
## Módulos Específicos
- Órdenes de producción
- Control de calidad (testing de vidrio)
- Inventario de materia prima
- Gestión de hornos/maquinaria
- Trazabilidad de lotes
- Cotizaciones y ventas
## Documentación
Ver `docs/00-overview/` para más información.
EOF
# ERP Mecánicas
cat > "projects/erp-mecanicas-diesel/README.md" << 'EOF'
# ERP MECÁNICAS DIESEL
**Tipo:** ERP Especializado
**Giro:** Laboratorios de mecánica diesel
**Estado:** 📋 En planificación
**Versión:** 0.1.0
**Base:** ERP Genérico (50-60% de código reutilizado)
## Descripción
ERP especializado para laboratorios de mecánica diesel con módulos para diagnósticos, reparaciones, gestión de refacciones, y mantenimiento.
## Módulos Específicos
- Diagnósticos y pruebas
- Órdenes de reparación
- Inventario de refacciones
- Gestión de vehículos en servicio
- Cotizaciones y facturación
- Historial de servicios
## Documentación
Ver `docs/00-overview/` para más información.
EOF
log_success "READMEs creados"
# README de shared/bugs
log_info "Creando README de shared/bugs..."
cat > "shared/bugs/README.md" << 'EOF'
# SISTEMA DE GESTIÓN DE BUGS
## Estructura
- `global/` - Bugs que afectan a componentes compartidos
- `by-component/` - Bugs organizados por componente
## Workflow
### Bug Local (específico de un proyecto)
Reportar en: `projects/{proyecto}/bugs/BUGS-ACTIVOS.md`
### Bug Global (afecta componente compartido)
1. Reportar en: `shared/bugs/global/BUGS-ACTIVOS.md`
2. Identificar proyectos afectados
3. Priorizar según impacto
4. Corregir en `shared/components/`
5. Actualizar todos los proyectos afectados
6. Validar en todos los proyectos
7. Cerrar bug y documentar
## Template de Bug Global
```yaml
## BUG-GLOBAL-XXX: Título del bug
**Componente:** shared/components/...
**Afecta a:**
- proyecto-1 ✅
- proyecto-2 ❌
**Prioridad:** 🔴 Alta | 🟡 Media | 🟢 Baja
**Estado:** 🔧 En corrección | 🧪 En testing | ✅ Resuelto
**Detectado en:** proyecto-x
**Fecha:** YYYY-MM-DD
**Asignado a:** Agente-X
### Descripción
...
### Impacto
...
### Plan de corrección
1. ...
```
EOF
log_success "README de bugs creado"
}
create_initial_files() {
print_header "CREANDO ARCHIVOS INICIALES"
cd "$WORKSPACE_ROOT"
# Crear BUGS-ACTIVOS.md en shared/bugs/global
log_info "Creando archivos de bugs globales..."
cat > "shared/bugs/global/BUGS-ACTIVOS.md" << 'EOF'
# BUGS GLOBALES ACTIVOS
**Última actualización:** 2025-11-23
---
## 🔴 PRIORIDAD ALTA
_No hay bugs de prioridad alta actualmente_
---
## 🟡 PRIORIDAD MEDIA
_No hay bugs de prioridad media actualmente_
---
## 🟢 PRIORIDAD BAJA
_No hay bugs de prioridad baja actualmente_
---
## 📝 NOTAS
Los bugs globales afectan a componentes compartidos en `shared/components/`.
Para bugs específicos de un proyecto, usar `projects/{proyecto}/bugs/`.
EOF
cat > "shared/bugs/global/BUGS-RESUELTOS.md" << 'EOF'
# BUGS GLOBALES RESUELTOS
**Última actualización:** 2025-11-23
---
_No hay bugs resueltos aún_
---
EOF
log_success "Archivos de bugs creados"
# Crear PROJECT-STATUS.md para cada proyecto
log_info "Creando archivos PROJECT-STATUS.md..."
for project in erp-generic erp-construccion erp-vidrio-templado erp-mecanicas-diesel; do
if [ "$project" = "erp-construccion" ]; then
status="🚧 En desarrollo"
progress="35%"
else
status="📋 En planificación"
progress="0%"
fi
cat > "projects/$project/PROJECT-STATUS.md" << EOF
# ESTADO DEL PROYECTO
**Proyecto:** $project
**Estado:** $status
**Progreso:** $progress
**Última actualización:** $(date +%Y-%m-%d)
---
## 📊 RESUMEN
- **Fase actual:** Análisis y planificación
- **Módulos completados:** 0
- **Módulos en desarrollo:** 0
- **Módulos pendientes:** TBD
---
## 🎯 PRÓXIMOS PASOS
1. Completar análisis de requerimientos
2. Modelado de dominio
3. Comparación con Odoo
4. Diseño de base de datos
5. Inicio de desarrollo
---
EOF
done
log_success "PROJECT-STATUS.md creados"
}
update_gitignore() {
print_header "ACTUALIZANDO .gitignore"
cd "$WORKSPACE_ROOT"
log_info "Agregando entradas a .gitignore..."
cat >> .gitignore << 'EOF'
# =============================================================================
# MULTI-PROJECT WORKSPACE
# =============================================================================
# Backups
*_backup_*/
# Temporary files
temp_*/
*.tmp
# Project-specific node_modules
projects/*/apps/backend/node_modules/
projects/*/apps/frontend/web/node_modules/
projects/*/apps/frontend/mobile/node_modules/
# Project-specific build outputs
projects/*/apps/backend/dist/
projects/*/apps/frontend/web/dist/
projects/*/apps/frontend/mobile/dist/
# Environment files
projects/*/apps/backend/.env
projects/*/apps/frontend/web/.env
projects/*/apps/frontend/mobile/.env
# Database dumps
projects/*/apps/database/*.dump
projects/*/apps/database/*.sql.gz
EOF
log_success ".gitignore actualizado"
}
create_validation_script() {
print_header "CREANDO SCRIPT DE VALIDACIÓN"
cd "$WORKSPACE_ROOT"
log_info "Creando tools/validation/validate-structure.sh..."
cat > "tools/validation/validate-structure.sh" << 'EOFSCRIPT'
#!/bin/bash
# Script de validación de estructura multi-proyecto
WORKSPACE_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
cd "$WORKSPACE_ROOT"
echo "🔍 Validando estructura del workspace..."
echo ""
errors=0
# Validar shared/
echo "Validando shared/..."
for dir in reference orchestration analysis bugs components docs; do
if [ -d "shared/$dir" ]; then
echo " ✓ shared/$dir"
else
echo " ✗ shared/$dir NO EXISTE"
((errors++))
fi
done
# Validar projects/
echo ""
echo "Validando projects/..."
for project in erp-generic erp-construccion erp-vidrio-templado erp-mecanicas-diesel; do
if [ -d "projects/$project" ]; then
echo " ✓ projects/$project"
# Validar subcarpetas
for subdir in docs apps orchestration bugs; do
if [ -d "projects/$project/$subdir" ]; then
echo " ✓ $subdir/"
else
echo " ✗ $subdir/ NO EXISTE"
((errors++))
fi
done
else
echo " ✗ projects/$project NO EXISTE"
((errors++))
fi
done
# Validar tools/
echo ""
echo "Validando tools/..."
for dir in scaffolding migration validation; do
if [ -d "tools/$dir" ]; then
echo " ✓ tools/$dir"
else
echo " ✗ tools/$dir NO EXISTE"
((errors++))
fi
done
echo ""
if [ $errors -eq 0 ]; then
echo "✅ Validación exitosa - Estructura completa"
exit 0
else
echo "❌ Validación fallida - $errors errores encontrados"
exit 1
fi
EOFSCRIPT
chmod +x "tools/validation/validate-structure.sh"
log_success "Script de validación creado"
}
# =============================================================================
# SCRIPT PRINCIPAL
# =============================================================================
main() {
print_header "MIGRACIÓN A ESTRUCTURA MULTI-PROYECTO"
echo "Este script migrará el workspace actual a la nueva estructura multi-proyecto."
echo ""
echo "Workspace: $WORKSPACE_ROOT"
echo "Backup: $BACKUP_DIR"
echo ""
read -p "¿Continuar? (s/N): " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Ss]$ ]]; then
log_warning "Migración cancelada"
exit 0
fi
# Ejecutar migración
validate_workspace
create_backup
create_shared_structure
move_shared_content
create_projects_structure
migrate_construccion_content
create_readme_files
create_initial_files
update_gitignore
create_validation_script
# Validar resultado
print_header "VALIDANDO RESULTADO"
bash "$WORKSPACE_ROOT/tools/validation/validate-structure.sh"
# Resumen
print_header "MIGRACIÓN COMPLETADA"
log_success "Migración completada exitosamente"
echo ""
echo "📁 Estructura nueva:"
echo " - shared/ → Componentes compartidos"
echo " - projects/ → Proyectos ERP individuales"
echo " - tools/ → Scripts de utilidad"
echo ""
echo "📦 Backup guardado en:"
echo " $BACKUP_DIR"
echo ""
echo "📋 Próximos pasos:"
echo " 1. Revisar estructura: tree -L 2"
echo " 2. Revisar README: cat PROPUESTA-REESTRUCTURACION-MULTI-PROYECTO.md"
echo " 3. Commit de cambios: git add . && git commit -m 'chore: migrate to multi-project structure'"
echo ""
}
# Ejecutar
main