🔧 PROTOCOLO DE CREACION DE NUEVOS CLIENTES
Crear Nuevo Cliente - Paso a Paso Detallado
🏫 SITUACIÓN:
Nuevo colegio quiere contratar el servicio
📋 PASO 1: OBTENER INFORMACIÓN DEL CLIENTE
📞 "Necesito la siguiente información para activar su sistema:"
- Nombre oficial completo del colegio
Ejemplo: "Colegio Santa María de los Ángeles"
- Nombre corto para el sistema (una palabra, sin espacios)
Ejemplo: "santamaria"
⚠️ IMPORTANTE: Solo letras minúsculas, sin espacios, sin tildes
- Contraseña que desean usar
Ejemplo: "sm2025"
⚠️ IMPORTANTE: Anotar exactamente como la dicen
- Datos de contacto (email, teléfono)
🔑 PASO 2: GENERAR HASH DE LA CONTRASEÑA
2.1 - Abrir el archivo app.py
- 💻 Abre VS Code
- 📂 Abre el archivo app.py
2.2 - Buscar la sección de hashes
- 🔍 Presiona Ctrl+F
- 🔍 Busca: if __name__ == '__main__':
- 📍 Deberías encontrar algo como:
if __name__ == '__main__':
print("=== GENERANDO HASHES PARA CONTRASEÑAS ===")
print("=== COPIA ESTOS HASHES AL DICCIONARIO CLIENTES_CONFIG ===")
# Inicializar archivos para ambos colegios
for colegio in CLIENTES_CONFIG.keys():
2.3 - Agregar línea temporal
DESPUÉS de la línea print("=== GENERANDO HASHES PARA CONTRASEÑAS ===") y ANTES de print("=== COPIA ESTOS HASHES...")
AGREGAR:
print(f"Hash para '[CONTRASEÑA_CLIENTE]': {generar_hash_password('[CONTRASEÑA_CLIENTE]')}")
⚠️ REEMPLAZAR [CONTRASEÑA_CLIENTE] con la contraseña real del cliente
EJEMPLO:
print(f"Hash para 'sm2025': {generar_hash_password('sm2025')}")
2.4 - Guardar archivo
2.5 - Ejecutar aplicación
- 📱 En la terminal de VS Code escribir: python app.py
- ⏱️ Esperar a que aparezcan los hashes en la consola
2.6 - Copiar el hash
En la consola buscar la línea:
Hash para 'sm2025': $2b$12$AbC123DeF456GhI789...
📋 COPIAR TODO el hash que empieza con $2b$12$...
2.7 - IMPORTANTE: Quitar línea temporal
- 🗑️ INMEDIATAMENTE eliminar la línea que agregaste en el paso 2.3
- 💾 Guardar archivo (Ctrl+S)
📝 PASO 3: AGREGAR AL DICCIONARIO CLIENTES_CONFIG
3.1 - Buscar CLIENTES_CONFIG
- 🔍 En app.py, presiona Ctrl+F
- 🔍 Buscar: CLIENTES_CONFIG
- 📍 Deberías encontrar algo como:
CLIENTES_CONFIG = {
"sanjose": {
"nombre": "Colegio San José",
"usuarios": {
"admin": "$2b$12$...",
}
},
"alba": {
"nombre": "Colegio Alba",
"usuarios": {
"admin": "$2b$12$...",
}
},
# otros colegios...
}
3.2 - Agregar nuevo colegio
ANTES del último } que cierra CLIENTES_CONFIG, agregar:
# ✅ NUEVO COLEGIO [NOMBRE_COLEGIO]
"[NOMBRE_CORTO]": {
"nombre": "[NOMBRE_OFICIAL_COMPLETO]",
"usuarios": {
"admin": "[HASH_COPIADO_DEL_PASO_2]",
}
},
⚠️ REEMPLAZAR:
- [NOMBRE_CORTO]: nombre corto del paso 1
- [NOMBRE_OFICIAL_COMPLETO]: nombre oficial del paso 1
- [HASH_COPIADO_DEL_PASO_2]: hash copiado en paso 2.6
EJEMPLO REAL:
# ✅ NUEVO COLEGIO SANTA MARÍA
"santamaria": {
"nombre": "Colegio Santa María de los Ángeles",
"usuarios": {
"admin": "$2b$12$AbC123DeF456GhI789...",
}
},
3.3 - Verificar comas
- ✅ VERIFICAR que hay coma , después del }
- ✅ NO debe haber coma después del último colegio antes del } final
3.4 - Guardar archivo
🌐 PASO 4: CREAR RUTA DE LOGIN
4.1 - Buscar otras rutas de login
- 🔍 En app.py, presiona Ctrl+F
- 🔍 Buscar: @app.route('/login/
- 📍 Deberías encontrar rutas como @app.route('/login/phillips') o similares
4.2 - Agregar nueva ruta
DESPUÉS de cualquier ruta de login existente, agregar:
@app.route('/login/[NOMBRE_CORTO]', methods=['GET', 'POST'])
def login_[NOMBRE_CORTO]():
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
colegio = '[NOMBRE_CORTO]'
if validar_usuario(username, password, colegio):
session['user'] = username
session['colegio'] = colegio
return redirect(url_for('index'))
else:
return "Credenciales inválidas. <a href='/login/[NOMBRE_CORTO]'>Intentar de nuevo</a>"
return send_file('login.html')
⚠️ REEMPLAZAR todas las apariciones de [NOMBRE_CORTO] con el nombre corto del cliente
EJEMPLO REAL:
@app.route('/login/santamaria', methods=['GET', 'POST'])
def login_santamaria():
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
colegio = 'santamaria'
if validar_usuario(username, password, colegio):
session['user'] = username
session['colegio'] = colegio
return redirect(url_for('index'))
else:
return "Credenciales inválidas. <a href='/login/santamaria'>Intentar de nuevo</a>"
return send_file('login.html')
4.3 - Guardar archivo
🚀 PASO 5: ACTIVAR EL SISTEMA
5.1 - Detener aplicación actual
- ⏹️ En la terminal presionar Ctrl+C para detener la app
5.2 - Ejecutar aplicación
- ▶️ En la terminal escribir: python app.py
- ⏱️ Esperar a que cargue completamente
5.3 - Verificar creación automática de archivos
- 📁 Ir a la carpeta data/ de tu proyecto
- ✅ DEBEN aparecer automáticamente 3 archivos nuevos:
- [nombre_corto]_Data_saved.xlsx
- [nombre_corto]_Cuestionarios_pendientes.xlsx
- [nombre_corto]_Bitacora_saved.xlsx
Si NO aparecen los archivos:
- 🚨 HAY UN ERROR en el código
- 🔍 Revisar que CLIENTES_CONFIG esté bien escrito
- 🔍 Verificar que no falten comas o llaves
🧪 PASO 6: PROBAR EL SISTEMA
6.1 - Probar login administrativo
- 🌐 Abrir navegador
- 🌐 Ir a: localhost:5000/login/[nombre_corto]
- 👤 Usuario: admin
- 🔑 Contraseña: [contraseña_elegida_por_cliente]
- ✅ DEBE entrar al dashboard sin problemas
6.2 - Probar formulario de profesores
- 🌐 Ir a: localhost:5000/formulario_profesor/[nombre_corto]
- ✅ DEBE cargar el formulario sin errores
Si hay errores:
- 🚨 Revisar que las rutas estén bien escritas
- 🚨 Verificar que no haya errores de sintaxis en el código
📄 PASO 7: DOCUMENTAR EN BÓVEDA FÍSICA
7.1 - Ir a la bóveda bancaria
- 🏦 Tomar el documento físico de contraseñas
7.2 - Agregar nueva entrada
En el documento físico escribir:
[Nombre Colegio]: [contraseña_elegida]
EJEMPLO:
Santa María: sm2025
📞 PASO 8: ENTREGAR CREDENCIALES AL CLIENTE
8.1 - Llamar al cliente
📞 "Su sistema ya está activo. Estas son sus credenciales:"
- 🌐 URL Administradores: localhost:5000/login/[nombre_corto]
- 👤 Usuario: admin
- 🔑 Contraseña: [la_que_eligieron]
- 📝 URL Profesores: localhost:5000/formulario_profesor/[nombre_corto]
8.2 - Explicación básica
📞 "Los profesores usan la segunda URL para enviar cuestionarios. Usted los revisa y aprueba desde la primera URL."
✅ CHECKLIST FINAL - VERIFICAR TODO:
- Hash generado y copiado
- Línea temporal eliminada del código
- CLIENTES_CONFIG actualizado correctamente
- Ruta de login creada
- Aplicación reiniciada
- 3 archivos Excel creados automáticamente
- Login administrativo probado y funcionando
- Formulario profesores probado y funcionando
- Contraseña registrada en bóveda física
- Cliente informado de sus credenciales
🚨 ERRORES COMUNES - EVITAR:
- ❌ Olvidar quitar la línea temporal → Contraseñas quedan en código
- ❌ Escribir mal el nombre corto → Archivos no se crean
- ❌ Olvidar las comas en CLIENTES_CONFIG → Error de sintaxis
- ❌ No guardar antes de ejecutar → Cambios no se aplican
- ❌ No detener la app antes de reiniciar → Cambios no se cargan
- ❌ Escribir mal las URLs al cliente → Cliente no puede entrar
⏱️ TIEMPO TOTAL ESTIMADO: 30-45 MINUTOS
⚠️ IMPORTANTE: Seguir EXACTAMENTE este orden de pasos
📅 Versión 2.0 - Agosto 2025
✅ 100% Probado y Verificado