Migue1804 commited on
Commit
4d3fe59
·
verified ·
1 Parent(s): a2e560a

Upload 5 files

Browse files
Files changed (6) hide show
  1. .gitattributes +2 -0
  2. 4Papps.jpg +0 -0
  3. app.py +703 -0
  4. current.jpg +3 -0
  5. future.jpg +3 -0
  6. requirements.txt +4 -0
.gitattributes CHANGED
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ current.jpg filter=lfs diff=lfs merge=lfs -text
37
+ future.jpg filter=lfs diff=lfs merge=lfs -text
4Papps.jpg ADDED
app.py ADDED
@@ -0,0 +1,703 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import plotly.express as px
4
+ import plotly.graph_objects as go
5
+ import plotly.figure_factory as ff
6
+ import numpy as np
7
+
8
+ # Configuración de la aplicación
9
+ st.set_page_config(page_title="4 Types of Problems", page_icon="📊",layout="wide")
10
+ # Display the image above the title
11
+ st.image('4Papps.jpg', use_container_width=True)
12
+ st.title("4 Tipos de problemas")
13
+ # Definir pestañas
14
+ tabs = st.tabs(["Contención", "Desviación del Estándar", "Condición Objetivo", "Innovación"])
15
+
16
+ # Trabajamos solo en la pestaña "Contención"
17
+ with tabs[0]:
18
+ # 📌 Resumen del Método 4C’s de Art Smalley
19
+ st.markdown("""
20
+ ## 🛠 Método 4C’s - Resolución Rápida de Problemas (Troubleshooting)
21
+ El método **4C’s** es una estrategia de resolución de problemas tipo 1 (Troubleshooting), utilizado en Toyota y propuesto por **Art Smalley** para abordar **problemas inmediatos sin un análisis profundo**.
22
+
23
+ - **❗ Concern (Preocupación):** Identificar claramente el problema o anomalía detectada.
24
+ - **🔍 Cause (Causa):** Determinar la causa raíz probable o el factor que contribuyó al problema.
25
+ - **🛠 Countermeasure (Acción Correctiva):** Implementar una solución inmediata para restaurar el estándar.
26
+ - **📊 Check (Seguimiento):** Evaluar si la contramedida funcionó y si se requiere más análisis.
27
+
28
+ 👉 *Este método se enfoca en restaurar la operación de manera rápida y efectiva, sin necesidad de un análisis profundo como en los problemas tipo 2.*
29
+ """)
30
+
31
+ # Inicializar DataFrame en sesión si no existe
32
+ if "df_problemas" not in st.session_state:
33
+ data_inicial = [
34
+ # 🚧 Seguridad: Emergencia con equipo de producción
35
+ {"Categoría": "Seguridad", "Fecha Ocurrencia": "2024-01-10",
36
+ "Problema": "Derrame de aceite en zona de trabajo",
37
+ "Causa": "Fuga en manguera hidráulica de prensa",
38
+ "Contramedida": "Limpieza inmediata y cambio de manguera",
39
+ "Seguimiento": "Sí", "Fecha Seguimiento": "2024-01-15", "Estatus Seguimiento": "Cerrada",
40
+ "Investigación Tipo 2": "No", "Estatus": "Cerrado"},
41
+
42
+ # 🔍 Calidad: Defectos en piezas recién producidas
43
+ {"Categoría": "Calidad", "Fecha Ocurrencia": "2024-02-05",
44
+ "Problema": "Riesgo de contaminación en piezas mecanizadas",
45
+ "Causa": "Exceso de virutas en la máquina CNC",
46
+ "Contramedida": "Limpieza del área y ajuste en frecuencia de mantenimiento",
47
+ "Seguimiento": "Sí", "Fecha Seguimiento": "2024-02-09", "Estatus Seguimiento": "En proceso",
48
+ "Investigación Tipo 2": "Sí", "Estatus": "Abierto"},
49
+
50
+ # 💲 Costo: Pérdidas por mal funcionamiento de equipos
51
+ {"Categoría": "Costo", "Fecha Ocurrencia": "2024-03-01",
52
+ "Problema": "Paro de línea por falla en sensor de temperatura",
53
+ "Causa": "Sensor descalibrado tras última inspección",
54
+ "Contramedida": "Reemplazo de sensor y recalibración",
55
+ "Seguimiento": "Sí", "Fecha Seguimiento": "2024-03-05", "Estatus Seguimiento": "En proceso",
56
+ "Investigación Tipo 2": "No", "Estatus": "En proceso"},
57
+
58
+ # 📦 Entrega: Retraso en abastecimiento de materiales
59
+ {"Categoría": "Entrega", "Fecha Ocurrencia": "2024-03-10",
60
+ "Problema": "Retraso en entrega de materiales a producción",
61
+ "Causa": "Error en planificación de inventario",
62
+ "Contramedida": "Ajuste manual de stock y notificación a proveedor",
63
+ "Seguimiento": "Sí", "Fecha Seguimiento": "2024-03-15", "Estatus Seguimiento": "Atrasada",
64
+ "Investigación Tipo 2": "Sí", "Estatus": "Atrasado"}
65
+ ]
66
+
67
+ st.session_state.df_problemas = pd.DataFrame(data_inicial)
68
+
69
+ # Convertir fechas a datetime
70
+ for col in ["Fecha Ocurrencia", "Fecha Seguimiento"]:
71
+ if col in st.session_state.df_problemas.columns:
72
+ st.session_state.df_problemas[col] = pd.to_datetime(st.session_state.df_problemas[col], errors="coerce")
73
+
74
+ st.markdown("""
75
+ ### 📌 Reporta un problema de contención """)
76
+ # Expander 1: Reportar un nuevo problema
77
+ with st.expander("Accede al reporte", expanded=False):
78
+
79
+ categorias = ["Seguridad", "Calidad", "Costo", "Entrega"]
80
+
81
+ # 🔴 1️⃣ CONCERN (PREOCUPACIÓN) - ¿Cuál es el problema?
82
+ st.subheader("🔴 Concern (Preocupación)")
83
+ problema_tipo = st.selectbox("Seleccione la categoría del problema", categorias)
84
+ fecha_ocurrencia = st.date_input("📅 Fecha de ocurrencia del problema")
85
+ problema = st.text_area("❓ ¿Qué sabe usted sobre el problema exacto?")
86
+
87
+ # ⚠️ 2️⃣ CAUSE (CAUSA) - ¿Qué lo originó?
88
+ st.subheader("⚠️ Cause (Causa)")
89
+ causa = st.text_area("🔍 ¿Cuál es la posible causa raíz del problema?")
90
+
91
+ # 🛠️ 3️⃣ COUNTERMEASURE (CONTRAMEDIDA) - ¿Cómo se solucionará?
92
+ st.subheader("🛠️ Countermeasure (Contramedida)")
93
+ contramedida = st.text_area("✅ ¿Qué acción inmediata o temporal puede tomarse para reducir o eliminar el problema?")
94
+
95
+ # ✅ 4️⃣ CHECK (VERIFICACIÓN) - Seguimiento y estatus
96
+ st.subheader("✅ Check (Verificación)")
97
+ seguimiento = st.radio("📊 ¿Es necesario un seguimiento adicional?", ["Sí", "No"])
98
+ fecha_seguimiento = st.date_input("📅 Fecha de seguimiento", disabled=(seguimiento == "No"))
99
+ estatus_seguimiento = st.selectbox("📌 Estatus del seguimiento", ["En proceso", "Atrasada", "Cerrada"], disabled=(seguimiento == "No"))
100
+ investigar_mas = st.checkbox("🔬 ¿Necesita investigar más a fondo usando métodos de Tipo 2?")
101
+ estatus = st.selectbox("📈 Estatus del problema", ["Abierto", "En proceso", "Atrasado", "Cerrado"])
102
+
103
+ # Guardar los datos ingresados
104
+ if st.button("💾 Guardar Nuevo Problema"):
105
+ nuevo_problema = pd.DataFrame([{
106
+ "Categoría": problema_tipo,
107
+ "Fecha Ocurrencia": pd.to_datetime(fecha_ocurrencia),
108
+ "Problema": problema,
109
+ "Causa": causa,
110
+ "Contramedida": contramedida,
111
+ "Seguimiento": seguimiento,
112
+ "Fecha Seguimiento": pd.to_datetime(fecha_seguimiento) if seguimiento == "Sí" else pd.NaT,
113
+ "Estatus Seguimiento": estatus_seguimiento if seguimiento == "Sí" else "N/A",
114
+ "Investigación Tipo 2": "Sí" if investigar_mas else "No",
115
+ "Estatus": estatus
116
+ }])
117
+
118
+ st.session_state.df_problemas = pd.concat([st.session_state.df_problemas, nuevo_problema], ignore_index=True)
119
+ st.success("✅ Nuevo problema guardado correctamente")
120
+
121
+ st.markdown("""
122
+ ### 📝 Reporta los avances """)
123
+ # Expander 2: Reporta avances en los problemas existentes
124
+ with st.expander("Ingresa el progreso"):
125
+ df_editado = st.data_editor(st.session_state.df_problemas, num_rows="dynamic")
126
+
127
+ if st.button("Guardar Cambios en Problemas"):
128
+ st.session_state.df_problemas = df_editado
129
+ st.rerun() # Refresca la app para actualizar la tabla HTML
130
+
131
+ st.markdown("""
132
+ ### 📊 Visualiza el Histórico de Problemas """)
133
+ # Expander 3: Visualiza el Histórico de Problemas
134
+ with st.expander("Revisa como vamos", expanded=True):
135
+ filtro_categoria = st.selectbox("Filtrar por categoría", ["Todas"] + categorias)
136
+ df_mostrar = st.session_state.df_problemas.copy()
137
+
138
+ if filtro_categoria != "Todas":
139
+ df_mostrar = df_mostrar[df_mostrar["Categoría"] == filtro_categoria]
140
+
141
+ # Formatear fechas antes de mostrar
142
+ if "Fecha Ocurrencia" in df_mostrar.columns:
143
+ df_mostrar["Fecha Ocurrencia"] = df_mostrar["Fecha Ocurrencia"].dt.strftime("%Y-%m-%d")
144
+ if "Fecha Seguimiento" in df_mostrar.columns:
145
+ df_mostrar["Fecha Seguimiento"] = df_mostrar["Fecha Seguimiento"].dt.strftime("%Y-%m-%d").replace("NaT", "N/A")
146
+
147
+ # Definir colores para las categorías
148
+ categoria_colores = {
149
+ "Seguridad": "#FF4B4B",
150
+ "Calidad": "#4B83FF",
151
+ "Costo": "#FFA64B",
152
+ "Entrega": "#4BFF83"
153
+ }
154
+
155
+ # Generar tabla HTML con colores
156
+ def generar_tabla_html(df):
157
+ table_html = "<table style='width:100%; border-collapse: collapse;'>"
158
+ table_html += "<tr style='background-color: #dddddd; text-align: left;'><th>Categoría</th><th>Fecha Ocurrencia</th><th>Problema</th><th>Causa</th><th>Estatus</th></tr>"
159
+
160
+ for _, row in df.iterrows():
161
+ color = categoria_colores.get(row["Categoría"], "#FFFFFF")
162
+ table_html += f"<tr style='background-color: {color}; color: white;'>"
163
+ table_html += f"<td>{row['Categoría']}</td>"
164
+ table_html += f"<td>{row['Fecha Ocurrencia']}</td>"
165
+ table_html += f"<td>{row['Problema']}</td>"
166
+ table_html += f"<td>{row['Causa']}</td>"
167
+ table_html += f"<td>{row['Estatus']}</td>"
168
+ table_html += "</tr>"
169
+
170
+ table_html += "</table>"
171
+ return table_html
172
+
173
+ st.markdown(generar_tabla_html(df_mostrar), unsafe_allow_html=True)
174
+ #__________________________________________________________________________________________________________________________________________________________________
175
+
176
+ #Problemas de tipo 2 - Desviación del estandar
177
+
178
+ # 📌 Función para calcular cumplimiento dinámico
179
+ def calcular_cumplimiento(df, mejor_es_mayor):
180
+ resultados_prom = df["Resultados"].mean()
181
+ meta_prom = df["Meta"].mean()
182
+
183
+ # Caso especial para LTI (Seguridad)
184
+ if not mejor_es_mayor:
185
+ if resultados_prom == 0:
186
+ return 100 # Sin eventos = 100% cumplimiento
187
+ return max(0, min(100, (1 - (resultados_prom / (meta_prom + 1))) * 100))
188
+
189
+ # Casos para RFT, OEE y OTIF (donde mayor es mejor)
190
+ if meta_prom == 0:
191
+ return 100 if mejor_es_mayor else 0
192
+
193
+ return max(0, min(100, (resultados_prom / meta_prom) * 100)) # Limitar a 100%
194
+
195
+ # 📌 Función para inicializar MDI con datos corregidos
196
+ def inicializar_mdi():
197
+ if "mdi" not in st.session_state:
198
+ st.session_state["mdi"] = {
199
+ "Seguridad": {"indicador": "LTI", "mejor_es_mayor": False, "datos": pd.DataFrame({
200
+ "Fecha": pd.date_range(start="2024-01-01", periods=12, freq='M'),
201
+ "Resultados": [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0],
202
+ "Meta": [0] * 12,
203
+ "Causa": ["", "", "", "Falta de EPP", "", "", "", "Condiciones inseguras", "", "", "", ""]})},
204
+
205
+ "Calidad": {"indicador": "RFT", "mejor_es_mayor": True, "datos": pd.DataFrame({
206
+ "Fecha": pd.date_range(start="2024-01-01", periods=12, freq='M'),
207
+ "Resultados": [96, 97, 94, 95, 92, 91, 89, 85, 97, 96, 98, 99],
208
+ "Meta": [95] * 12,
209
+ "Causa": ["", "", "Materia prima defectuosa", "", "Falla de calibración", "", "Falta de estandarización", "Error en proceso", "", "", "", ""]})},
210
+
211
+ "Costo": {"indicador": "OEE", "mejor_es_mayor": True, "datos": pd.DataFrame({
212
+ "Fecha": pd.date_range(start="2024-01-01", periods=12, freq='M'),
213
+ "Resultados": [82, 85, 79, 81, 80, 77, 76, 75, 85, 84, 82, 86],
214
+ "Meta": [80] * 12,
215
+ "Causa": ["", "", "Mantenimiento inadecuado", "", "", "Baja eficiencia operativa", "", "Desgaste de equipos", "", "", "", ""]})},
216
+
217
+ "Entrega": {"indicador": "OTIF", "mejor_es_mayor": True, "datos": pd.DataFrame({
218
+ "Fecha": pd.date_range(start="2024-01-01", periods=12, freq='M'),
219
+ "Resultados": [92, 94, 91, 89, 95, 97, 93, 96, 94, 90, 92, 91],
220
+ "Meta": [90] * 12,
221
+ "Causa": ["", "", "", "Falla logística", "", "", "", "", "", "Demora del proveedor", "", ""]})},
222
+ }
223
+
224
+ # 🔄 Calcular cumplimiento dinámico para cada perspectiva
225
+ for perspectiva, data in st.session_state["mdi"].items():
226
+ data["cumplimiento"] = round(calcular_cumplimiento(data["datos"], data["mejor_es_mayor"]), 2)
227
+
228
+ with tabs[1]:
229
+ inicializar_mdi()
230
+ # 📖 Resumen del Problema Tipo 2
231
+ st.markdown("""
232
+ ## 🔄 Management Daily Improvement (MDI) & DMAIC Cycle
233
+ Los **problemas tipo 2** ocurren cuando hay una **desviación del estándar previamente definido** en una operación, proceso o sistema.
234
+ Se centran en **restaurar y mejorar el estándar** a través de la **gestión diaria y análisis estructurado**.
235
+
236
+ ### 🏭 **Management Daily Improvement (MDI) y la Cultura Toyota**
237
+ - El **MDI (Mejora Diaria de Gestión)** es clave en Toyota para detectar y corregir desviaciones en tiempo real.
238
+ - Se basa en la **observación sistemática de métricas clave** en Seguridad, Calidad, Costo y Entrega (**SQCD**).
239
+ - Los **supervisores y equipos** deben identificar, registrar y actuar sobre desviaciones detectadas.
240
+ - Se apoya en el **ciclo DMAIC** para implementar mejoras efectivas.
241
+
242
+ ### 🔬 **Ciclo DMAIC**
243
+ Los problemas de desviación del estándar se analizan y resuelven con el enfoque **DMAIC**:
244
+
245
+ 1️⃣ **Definir**: Identificar el estándar afectado y describir la desviación.
246
+ 2️⃣ **Medir**: Cuantificar el impacto con datos históricos y métricas clave.
247
+ 3️⃣ **Analizar**: Determinar la causa raíz mediante herramientas como Ishikawa, Pareto o 5 Porqués.
248
+ 4️⃣ **Implementar**: Aplicar acciones correctivas para restaurar el estándar.
249
+ 5️⃣ **Controlar**: Asegurar que la mejora sea sostenible en el tiempo.
250
+
251
+ 📌 **Este tablero MDI ayuda a visualizar las desviaciones en SQCD, permitiendo aplicar el ciclo DMAIC para mejorar los procesos.** 🚀
252
+ """)
253
+
254
+ # 📌 Diccionario de iconos por categoría SQCD
255
+ mdi_icons = {
256
+ "Seguridad": "🛑",
257
+ "Calidad": "✔️",
258
+ "Costo": "💰",
259
+ "Entrega": "🚚"
260
+ }
261
+
262
+ st.header("📊 Management Daily Improvement SQCD")
263
+
264
+ # 📌 Obtener las perspectivas del tablero MDI
265
+ perspectives = list(st.session_state["mdi"].keys())
266
+ col1, col2, col3, col4 = st.columns(4)
267
+
268
+ for i, perspective in enumerate(perspectives):
269
+ col = [col1, col2, col3, col4][i]
270
+ with col:
271
+ data = st.session_state["mdi"][perspective]
272
+
273
+ # 📋 Expander para editar los datos
274
+ with st.expander(f"📋 Datos de {perspective}"):
275
+ df_editable = st.data_editor(
276
+ data["datos"], use_container_width=True, num_rows="dynamic", key=f"datos_{perspective}"
277
+ )
278
+
279
+ # 🔄 Actualizar el DataFrame y el cumplimiento después de la edición
280
+ st.session_state["mdi"][perspective]["datos"] = df_editable
281
+ nuevo_cumplimiento = calcular_cumplimiento(df_editable, data["mejor_es_mayor"])
282
+ st.session_state["mdi"][perspective]["cumplimiento"] = round(nuevo_cumplimiento, 2)
283
+
284
+ # 📌 Mostrar Icono + Categoría
285
+ icon = mdi_icons.get(perspective, "📊") # Si no encuentra el icono, usa un default
286
+ st.markdown(f"### {icon} {perspective}")
287
+
288
+ # 🏆 Gráfico de cumplimiento (Gauge) - ALTURA REDUCIDA
289
+ cumplimiento = st.session_state["mdi"][perspective]["cumplimiento"]
290
+
291
+ # 🔄 Definir color según el valor de cumplimiento
292
+ if cumplimiento < 90:
293
+ color_gauge = "red" # 🔴 Menos de 90%
294
+ elif 90 <= cumplimiento < 100:
295
+ color_gauge = "yellow" # 🟡 Entre 90% y 100%
296
+ else:
297
+ color_gauge = "green" # 🟢 Más de 100%
298
+
299
+ # 🔄 Ajustar dinámicamente el rango del gauge
300
+ max_range = max(100, cumplimiento + 5) # Asegurar que siempre haya espacio para valores >100%
301
+
302
+ fig_gauge = go.Figure(go.Indicator(
303
+ mode="gauge+number",
304
+ value=cumplimiento,
305
+ number={"font": {"size": 25}}, # 🔽 REDUCE el tamaño del número del cumplimiento
306
+ title={'text': f"{data['indicador']}", 'font': {'size': 20}},
307
+ gauge={'axis': {'range': [0, max_range]}, 'bar': {'color': color_gauge}}
308
+ ))
309
+ fig_gauge.update_layout(height=280) # 🔽 Ajuste de altura del gauge
310
+ st.plotly_chart(fig_gauge, use_container_width=True)
311
+
312
+ # 📉 Gráfico de control de tendencia - ALTURA AJUSTADA
313
+ fig_control = go.Figure()
314
+ fig_control.add_trace(go.Scatter(
315
+ x=df_editable["Fecha"], y=df_editable["Resultados"],
316
+ mode='lines+markers', name='Resultados'
317
+ ))
318
+ fig_control.add_hline(y=df_editable["Meta"].mean(), line_dash="dash", line_color="red",
319
+ annotation_text="Meta", annotation_position="top right")
320
+ fig_control.update_layout(
321
+ title=f"Tendencia de {perspective}",
322
+ xaxis_title="Fecha", yaxis_title="Valor",
323
+ height=280 # 🔽 Ajuste de altura del gráfico de tendencias
324
+ )
325
+ st.plotly_chart(fig_control, use_container_width=True)
326
+
327
+ # 📊 Gráfico de causas repetitivas corregido - ALTURA REDUCIDA
328
+ df_causas = df_editable[df_editable["Causa"] != ""].copy() # Excluir valores vacíos
329
+ df_causas = df_causas["Causa"].value_counts().reset_index()
330
+ df_causas.columns = ["Causa", "Frecuencia"]
331
+
332
+ if not df_causas.empty:
333
+ fig_barras = px.bar(df_causas, x="Frecuencia", y="Causa", orientation='h',
334
+ title=f"Causas más repetitivas en {perspective}",
335
+ text_auto=True) # Muestra los valores en las barras
336
+ fig_barras.update_yaxes(categoryorder='total ascending') # Invierte el eje Y
337
+ fig_barras.update_layout(height=250) # 🔽 Ajuste de altura del gráfico de barras
338
+ st.plotly_chart(fig_barras, use_container_width=True)
339
+
340
+
341
+ st.header("📝 DMAIC Action Plan")
342
+
343
+ # 📌 Inicializar el DataFrame en la sesión si no existe
344
+ if "acciones" not in st.session_state:
345
+ st.session_state.acciones = [
346
+ {"categoria": "Seguridad", "descripcion": "Capacitación en uso de EPP obligatorio.", "fecha_inicio": "2024-01-10", "fecha_fin": "2024-01-20", "estado": "Abierta",
347
+ "Definir": "Riesgo identificado en inspección.", "Medir": "2 incidentes en 3 meses.", "Analizar": "Falta de EPP adecuado.", "Implementar": "Entrega de EPP.", "Controlar": "Auditorías mensuales."},
348
+ {"categoria": "Seguridad", "descripcion": "Implementación de checklist diario de condiciones inseguras.", "fecha_inicio": "2024-02-01", "fecha_fin": "2024-02-10", "estado": "Cerrada",
349
+ "Definir": "Condiciones inseguras reportadas.", "Medir": "10 reportes en un mes.", "Analizar": "Falta de control visual.", "Implementar": "Checklists diarios.", "Controlar": "Supervisión de líderes."},
350
+ {"categoria": "Calidad", "descripcion": "Cambio de proveedor de materia prima defectuosa.", "fecha_inicio": "2024-03-05", "fecha_fin": "2024-03-15", "estado": "Vencida",
351
+ "Definir": "Defectos recurrentes en producción.", "Medir": "5% de scrap.", "Analizar": "Proveedores inconsistentes.", "Implementar": "Cambio de proveedor.", "Controlar": "Evaluación mensual."},
352
+ {"categoria": "Calidad", "descripcion": "Revisión y ajuste de estándares de calidad en inspección final.", "fecha_inicio": "2024-04-01", "fecha_fin": "2024-04-10", "estado": "Pendiente",
353
+ "Definir": "Errores detectados en auditoría.", "Medir": "Tasa de defectos >2%.", "Analizar": "Falta de criterios claros.", "Implementar": "Capacitación y ajuste de estándares.", "Controlar": "Revisión semanal."},
354
+ {"categoria": "Costo", "descripcion": "Optimización de parámetros de mantenimiento preventivo.", "fecha_inicio": "2024-05-02", "fecha_fin": "2024-05-12", "estado": "Abierta",
355
+ "Definir": "Fallas recurrentes en equipos.", "Medir": "Tiempo de inactividad de 5%.", "Analizar": "Mantenimiento reactivo en lugar de preventivo.", "Implementar": "Plan de mantenimiento preventivo.", "Controlar": "KPIs de disponibilidad."},
356
+ {"categoria": "Costo", "descripcion": "Rediseño de layout para reducir tiempos de inactividad.", "fecha_inicio": "2024-06-01", "fecha_fin": "2024-06-15", "estado": "Pendiente",
357
+ "Definir": "Retrasos en cambio de herramientas.", "Medir": "Tiempo promedio de 30 min por cambio.", "Analizar": "Mal distribución de áreas.", "Implementar": "Optimización del layout.", "Controlar": "Monitoreo de tiempos."},
358
+ {"categoria": "Entrega", "descripcion": "Negociación de tiempos de entrega con proveedor clave.", "fecha_inicio": "2024-07-10", "fecha_fin": "2024-07-20", "estado": "Cerrada",
359
+ "Definir": "Atrasos en entrega de materiales.", "Medir": "Promedio de 5 días de retraso.", "Analizar": "Proveedor con problemas logísticos.", "Implementar": "Renegociación de tiempos.", "Controlar": "Indicador de cumplimiento de entrega."},
360
+ {"categoria": "Entrega", "descripcion": "Implementación de monitoreo en tiempo real de pedidos.", "fecha_inicio": "2024-08-01", "fecha_fin": "2024-08-10", "estado": "Vencida",
361
+ "Definir": "Pedidos sin visibilidad de avance.", "Medir": "40% de pedidos sin trazabilidad.", "Analizar": "Falta de sistema de monitoreo.", "Implementar": "Implementación de tracking en tiempo real.", "Controlar": "Reporte de seguimiento diario."}
362
+ ]
363
+
364
+ # 📌 Convertir a DataFrame
365
+ df_acciones = pd.DataFrame(st.session_state.acciones)
366
+
367
+ # 📌 Expansor para mostrar y editar las acciones
368
+ with st.expander("📌 Ver y Editar Acciones con Ciclo DMAIC", expanded=False):
369
+
370
+ # 📝 Permitir edición de acciones con posibilidad de agregar/eliminar filas
371
+ df_editable = st.data_editor(df_acciones, num_rows="dynamic", use_container_width=True)
372
+
373
+ # 🔄 Actualizar los datos en `st.session_state`
374
+ st.session_state.acciones = df_editable.to_dict(orient="records")
375
+
376
+ # 📌 Recalcular estados de acciones tras edición
377
+ estados_acciones = {"Abierta": 0, "Cerrada": 0, "Vencida": 0, "Pendiente": 0}
378
+ for accion in df_editable["estado"]:
379
+ estados_acciones.setdefault(accion, 0)
380
+ estados_acciones[accion] += 1
381
+
382
+ # 📌 Mostrar métricas con colores (Ahora se actualizan correctamente)
383
+ col1, col2, col3, col4 = st.columns(4)
384
+ col1.markdown(f"<h2 style='color:green;'>Abiertas: {estados_acciones.get('Abierta', 0)}</h2>", unsafe_allow_html=True)
385
+ col2.markdown(f"<h2 style='color:gray;'>Cerradas: {estados_acciones.get('Cerrada', 0)}</h2>", unsafe_allow_html=True)
386
+ col3.markdown(f"<h2 style='color:red;'>Vencidas: {estados_acciones.get('Vencida', 0)}</h2>", unsafe_allow_html=True)
387
+ col4.markdown(f"<h2 style='color:yellow;'>Pendientes: {estados_acciones.get('Pendiente', 0)}</h2>", unsafe_allow_html=True)
388
+
389
+ # 📊 Gantt de Acciones (Se actualiza con los cambios)
390
+ fig = px.timeline(df_editable, x_start="fecha_inicio", x_end="fecha_fin", y="descripcion",
391
+ color="estado", color_discrete_map={
392
+ "Abierta": "green", "Cerrada": "gray", "Vencida": "red", "Pendiente": "yellow"
393
+ },
394
+ title="📅 Estado de las Acciones con DMAIC", labels={"estado": "Estado de la Acción"},
395
+ category_orders={"estado": ["Abierta", "Pendiente", "Vencida", "Cerrada"]})
396
+
397
+ fig.update_yaxes(categoryorder="total ascending") # Ordenar acciones
398
+ fig.update_layout(xaxis_title="Fechas", yaxis_title="Descripción de la Acción", height=350, showlegend=True)
399
+
400
+ # 📌 Mostrar gráfico Gantt
401
+ st.plotly_chart(fig, use_container_width=True)
402
+
403
+
404
+ #__________________________________________________________________________________________________________________________________________________________________
405
+ # Problemas de condición Objetivo
406
+
407
+ # 📌 Precargar imágenes de referencia
408
+ imagen_actual_default = "current.jpg"
409
+ imagen_futura_default = "future.jpg"
410
+
411
+ with tabs[2]:
412
+ # 📖 Introducción a Problemas de Condición Objetivo y VSM
413
+ st.markdown("""
414
+ ## 🔀 Value Stream Mapping (VSM) & A3 Thinking
415
+ Los problemas de **Condición Objetivo** surgen cuando se busca alcanzar una **meta futura específica** en un proceso sin que haya una falla evidente en el presente. No se trata de corregir defectos actuales, sino de **mejorar el flujo y la eficiencia** para lograr un estado futuro optimizado.
416
+
417
+ ### 📌 Relación entre VSM y A3
418
+ 🔹 **Value Stream Mapping (VSM)** permite visualizar la situación actual, identificar desperdicios y diseñar un flujo futuro eficiente.
419
+ 🔹 **A3 Thinking** estructura el análisis y la implementación de mejoras, asegurando que las acciones sean alineadas con la estrategia organizacional.
420
+
421
+ ### 🔄 Proceso de Transformación
422
+ 1️⃣ **Evaluar el estado actual**: Mapear el flujo de valor existente e identificar oportunidades de mejora.
423
+ 2️⃣ **Definir la meta futura**: Establecer una condición objetivo alineada con la estrategia de la empresa.
424
+ 3️⃣ **Diseñar el estado futuro**: Optimizar el flujo mediante la eliminación de desperdicios y sincronización de procesos.
425
+ 4️⃣ **Implementar mejoras con A3**: Planificar y ejecutar acciones basadas en análisis estructurado.
426
+
427
+ Este enfoque permite **reducir Lead Time, mejorar sincronización y aumentar la eficiencia operativa**, facilitando una transición controlada hacia un proceso más ágil y competitivo. 🚀📊
428
+ """)
429
+
430
+ st.markdown("<h1 style='text-align: center;'>📄 A3 - Resolución de Problemas</h1>", unsafe_allow_html=True)
431
+
432
+ # 📌 Distribuir en dos columnas de igual tamaño
433
+ col_izq, col_der = st.columns([2, 2])
434
+
435
+ # 📌 Sección Izquierda: Situación Actual y Análisis
436
+ with col_izq:
437
+ with st.container():
438
+ st.subheader("📜 1. Antecedentes")
439
+ antecedentes = st.text_area("Describe los antecedentes del problema", value="El Lead Time actual es de 23.6 días, generando retrasos y costos elevados.")
440
+
441
+ st.subheader("📊 2. Situación Actual")
442
+ situacion_actual = st.text_area("Describe la situación actual", value="El flujo del proceso tiene esperas innecesarias, loteo excesivo y transporte ineficiente.")
443
+
444
+ st.subheader("📷 Imagen del Problema (Current State VSM)")
445
+ imagen_actual = st.file_uploader("Sube una imagen del estado actual", type=["png", "jpg", "jpeg"])
446
+ if imagen_actual:
447
+ st.image(imagen_actual, caption="Estado Actual - VSM", use_container_width=True)
448
+ else:
449
+ st.image(imagen_actual_default, caption="Estado Actual (Ejemplo)", use_container_width=True)
450
+
451
+ st.subheader("🔎 3. Análisis de Causa Raíz")
452
+ causas = st.text_area("Identifica las causas raíz", value="- Loteo grande\n- Retrasos en el proceso\n- Falta de flujo continuo.")
453
+
454
+ st.subheader("🎯 4. Metas")
455
+ metas = st.text_area("Define las metas a alcanzar", value="Reducir el Lead Time a 4.5 días mejorando la sincronización del proceso.")
456
+
457
+ # 📌 Sección Derecha: Contramedidas y Seguimiento
458
+ with col_der:
459
+ with st.container():
460
+ st.subheader("🛠️ 5. Contramedidas (Plan de Acción)")
461
+ plan = st.text_area("Desarrolla el plan de acción", value="- Reducir tamaños de lote\n- Implementar flujo continuo\n- Mejorar la sincronización del proceso.")
462
+
463
+ st.subheader("📷 Imagen del Estado Futuro (Future State VSM)")
464
+ imagen_futura = st.file_uploader("Sube una imagen del estado futuro", type=["png", "jpg", "jpeg"])
465
+ if imagen_futura:
466
+ st.image(imagen_futura, caption="Estado Futuro - VSM", use_container_width=True)
467
+ else:
468
+ st.image(imagen_futura_default, caption="Estado Futuro (Ejemplo)", use_container_width=True)
469
+
470
+ st.subheader("📅 6. Tablero de Acciones (Gantt)")
471
+
472
+ # 📌 Inicializar DataFrame si no existe en la sesión
473
+ if "acciones_a3" not in st.session_state:
474
+ st.session_state.acciones_a3 = pd.DataFrame([
475
+ {"Task": "Mapear proceso actual", "Start": "2024-02-01", "Finish": "2024-02-10"},
476
+ {"Task": "Reducir tamaños de lote", "Start": "2024-02-15", "Finish": "2024-02-20"},
477
+ {"Task": "Definir flujo continuo", "Start": "2024-02-21", "Finish": "2024-02-28"},
478
+ {"Task": "Capacitación sobre nuevas prácticas", "Start": "2024-03-01", "Finish": "2024-03-05"},
479
+ {"Task": "Implementación final", "Start": "2024-03-06", "Finish": "2024-03-10"},
480
+ ])
481
+
482
+ # 📌 Expander para editar o agregar acciones
483
+ with st.expander("📋 Editar Tablero de Acciones", expanded=False):
484
+ df_acciones = st.data_editor(st.session_state.acciones_a3, use_container_width=True, num_rows="dynamic")
485
+ st.session_state.acciones_a3 = df_acciones # Guardar cambios en la sesión
486
+
487
+ # 🔄 Ajustar altura del Gantt dinámicamente
488
+ if not df_acciones.empty:
489
+ df_acciones.columns = ["Task", "Start", "Finish"]
490
+ num_tareas = len(df_acciones)
491
+ altura_dinamica = max(200, min(num_tareas * 50, 500))
492
+
493
+ # 📊 Generar Gantt después de la edición
494
+ tareas = df_acciones.to_dict("records")
495
+ fig_gantt = ff.create_gantt(tareas, title="Plan de Implementación A3", index_col="Task", show_colorbar=False)
496
+ fig_gantt.update_layout(showlegend=False, height=altura_dinamica)
497
+ st.plotly_chart(fig_gantt, use_container_width=True)
498
+
499
+ # 📌 Tablero de Seguimiento de Indicadores
500
+ st.subheader("📊 7. Seguimiento de Indicadores de Éxito")
501
+
502
+ # 📌 Inicializar DataFrame si no existe en la sesión
503
+ if "indicadores_a3" not in st.session_state:
504
+ st.session_state.indicadores_a3 = pd.DataFrame([
505
+ {"Indicador": "Lead Time (días)", "Antes": 23.6, "Meta": 4.5, "Resultado": None, "Status": "En proceso"},
506
+ {"Indicador": "Tamaño de lote", "Antes": 100, "Meta": 30, "Resultado": None, "Status": "En proceso"},
507
+ {"Indicador": "Tiempo de ciclo (min)", "Antes": 12, "Meta": 6, "Resultado": None, "Status": "En proceso"},
508
+ ])
509
+
510
+ # 📌 Mostrar tabla editable
511
+ df_editable = st.data_editor(st.session_state.indicadores_a3, use_container_width=True, num_rows="dynamic")
512
+ st.session_state.indicadores_a3 = df_editable # Guardar cambios en la sesión
513
+
514
+ #__________________________________________________________________________________________________________________________________________________________________
515
+
516
+ # 📌 Problemas de Innovación
517
+ with tabs[3]:
518
+ st.markdown("<h1 style='text-align: left;'>🚀 Funnel de Innovación</h1>", unsafe_allow_html=True)
519
+
520
+ # 📖 Introducción a la Innovación según Art Smalley
521
+ st.markdown("""
522
+ ## 🌟 Innovación como Cuarto Tipo de Problema
523
+ Según **Art Smalley**, la innovación es el tipo de problema más avanzado, ya que requiere **crear soluciones completamente nuevas** en lugar de corregir fallas existentes.
524
+
525
+ 🔹 **Objetivo:** Superar las limitaciones actuales y desarrollar mejoras **disruptivas** en procesos, productos y servicios.
526
+ 🔹 **Ejemplo:** Implementar **automatización en manufactura** para eliminar la variabilidad humana y aumentar la eficiencia.
527
+ 🔹 **Método:** Para lograr innovación estructurada, combinamos **SCAMPER** (generación de ideas) con **Design Thinking** (planificación y ejecución).
528
+
529
+ 📌 **Ejemplo de Innovación según *Four Types of Problems***
530
+ - Toyota implementando **Producción Just-In-Time** para eliminar inventarios excesivos.
531
+ - Ford introduciendo **manufactura modular** para reducir tiempos de cambio de línea.
532
+ - Amazon desarrollando **almacenes automatizados** con robots para mejorar eficiencia logística.
533
+ """)
534
+
535
+ st.markdown("""
536
+ ## 📝 Generación de Innovación con SCAMPER & Design Thinking""" )
537
+ # 📌 Expander para SCAMPER y Design Thinking
538
+ with st.expander(" Registro de ideas Innovadoras", expanded=False):
539
+ st.subheader("🧠 SCAMPER - Generación de Ideas")
540
+ problema = st.text_area("Describe el problema o necesidad que quieres innovar",
541
+ value="Reducir tiempos de cambio en la línea de producción.")
542
+ tecnica_scamper = st.selectbox("Selecciona una técnica SCAMPER",
543
+ ["Sustituir", "Combinar", "Adaptar", "Modificar", "Poner en otro uso", "Eliminar", "Reorganizar"])
544
+ idea_scamper = st.text_area("Propón una idea innovadora basada en SCAMPER",
545
+ value="Implementar cambios rápidos con herramientas modulares.")
546
+
547
+ # 📌 Design Thinking - Desarrollo de Innovación
548
+ st.subheader("🎨 Plan de Acción - Design Thinking")
549
+ fase_design = st.selectbox("Selecciona la fase actual",
550
+ ["Empatizar", "Definir", "Idear", "Prototipar", "Testear", "Implementación"])
551
+ tarea_design = st.text_area("Describe la tarea o acción clave en esta fase",
552
+ value="Analizar impacto de tiempos de cambio en productividad.")
553
+ fecha_inicio = st.date_input("Fecha de inicio de la tarea")
554
+ fecha_fin = st.date_input("Fecha de compromiso")
555
+
556
+ if st.button("💾 Guardar Innovación"):
557
+ nueva_idea = pd.DataFrame([[problema, tecnica_scamper, idea_scamper, fase_design, tarea_design, fecha_inicio, fecha_fin]],
558
+ columns=["Problema", "SCAMPER", "Idea SCAMPER", "Fase DT", "Tarea", "Inicio", "Compromiso"])
559
+ st.session_state.ideas_innovacion = pd.concat([st.session_state.ideas_innovacion, nueva_idea], ignore_index=True)
560
+ st.success("✅ Innovación guardada correctamente.")
561
+
562
+ # 📌 Inicializar el tablero con una distribución realista en el Funnel
563
+ if "ideas_innovacion" not in st.session_state:
564
+ st.session_state.ideas_innovacion = pd.DataFrame([
565
+ # 🔵 EMPATIZAR (10 ideas)
566
+ {"Problema": "Reducir tiempos de cambio", "SCAMPER": "Modificar",
567
+ "Idea SCAMPER": "Uso de herramientas modulares", "Fase DT": "Empatizar",
568
+ "Tarea": "Análisis de tiempos actuales", "Inicio": "2024-01-01", "Compromiso": "2024-01-15"},
569
+ {"Problema": "Optimizar flujo de materiales", "SCAMPER": "Reorganizar",
570
+ "Idea SCAMPER": "Implementación de logística autónoma", "Fase DT": "Empatizar",
571
+ "Tarea": "Identificar cuellos de botella", "Inicio": "2024-01-02", "Compromiso": "2024-01-16"},
572
+ {"Problema": "Minimizar errores en ensamblaje", "SCAMPER": "Sustituir",
573
+ "Idea SCAMPER": "Guiado con realidad aumentada", "Fase DT": "Empatizar",
574
+ "Tarea": "Identificación de errores recurrentes", "Inicio": "2024-01-03", "Compromiso": "2024-01-17"},
575
+ {"Problema": "Reducción de desperdicios", "SCAMPER": "Eliminar",
576
+ "Idea SCAMPER": "Optimización de corte CNC", "Fase DT": "Empatizar",
577
+ "Tarea": "Medición de desperdicios", "Inicio": "2024-01-04", "Compromiso": "2024-01-18"},
578
+ {"Problema": "Reducir consumo energético", "SCAMPER": "Adaptar",
579
+ "Idea SCAMPER": "Energía renovable en manufactura", "Fase DT": "Empatizar",
580
+ "Tarea": "Evaluación del consumo actual", "Inicio": "2024-01-05", "Compromiso": "2024-01-19"},
581
+ {"Problema": "Rediseñar layout de planta", "SCAMPER": "Reorganizar",
582
+ "Idea SCAMPER": "Modelo de flujo continuo", "Fase DT": "Empatizar",
583
+ "Tarea": "Análisis de distribución", "Inicio": "2024-01-06", "Compromiso": "2024-01-20"},
584
+ {"Problema": "Automatización de inventarios", "SCAMPER": "Combinar",
585
+ "Idea SCAMPER": "RFID con control en tiempo real", "Fase DT": "Empatizar",
586
+ "Tarea": "Evaluar soluciones existentes", "Inicio": "2024-01-07", "Compromiso": "2024-01-21"},
587
+ {"Problema": "Reducir errores en ensamblaje", "SCAMPER": "Sustituir",
588
+ "Idea SCAMPER": "Instrucciones con realidad aumentada", "Fase DT": "Empatizar",
589
+ "Tarea": "Prueba de tecnologías", "Inicio": "2024-01-08", "Compromiso": "2024-01-22"},
590
+ {"Problema": "Optimización de distribución de tareas", "SCAMPER": "Modificar",
591
+ "Idea SCAMPER": "Algoritmos de asignación inteligente", "Fase DT": "Empatizar",
592
+ "Tarea": "Análisis de cargas de trabajo", "Inicio": "2024-01-09", "Compromiso": "2024-01-23"},
593
+ {"Problema": "Reducir tiempo de configuración de maquinaria", "SCAMPER": "Reorganizar",
594
+ "Idea SCAMPER": "Implementación de configuraciones rápidas", "Fase DT": "Empatizar",
595
+ "Tarea": "Estudio de tiempos de cambio", "Inicio": "2024-01-10", "Compromiso": "2024-01-24"},
596
+
597
+ # 🟠 DEFINIR (7 ideas)
598
+ {"Problema": "Automatizar control de calidad", "SCAMPER": "Sustituir",
599
+ "Idea SCAMPER": "Inspección con IA", "Fase DT": "Definir",
600
+ "Tarea": "Análisis de defectos comunes", "Inicio": "2024-01-11", "Compromiso": "2024-01-25"},
601
+
602
+ {"Problema": "Aumentar eficiencia en picking", "SCAMPER": "Adaptar",
603
+ "Idea SCAMPER": "Picking con robots móviles", "Fase DT": "Definir",
604
+ "Tarea": "Identificar oportunidades de automatización", "Inicio": "2024-01-12", "Compromiso": "2024-01-26"},
605
+
606
+ {"Problema": "Reducir desperdicio de empaque", "SCAMPER": "Eliminar",
607
+ "Idea SCAMPER": "Empaque reutilizable", "Fase DT": "Definir",
608
+ "Tarea": "Evaluación de materiales alternativos", "Inicio": "2024-01-13", "Compromiso": "2024-01-27"},
609
+
610
+ {"Problema": "Optimizar planificación de producción", "SCAMPER": "Reorganizar",
611
+ "Idea SCAMPER": "Algoritmo de secuenciación dinámica", "Fase DT": "Definir",
612
+ "Tarea": "Evaluación de algoritmos existentes", "Inicio": "2024-01-14", "Compromiso": "2024-01-28"},
613
+
614
+ {"Problema": "Reducción de tiempos en línea de ensamble", "SCAMPER": "Modificar",
615
+ "Idea SCAMPER": "Uso de estaciones de trabajo móviles", "Fase DT": "Definir",
616
+ "Tarea": "Análisis de tiempos de operación", "Inicio": "2024-01-15", "Compromiso": "2024-01-29"},
617
+
618
+ {"Problema": "Mejorar ergonomía en estaciones de trabajo", "SCAMPER": "Adaptar",
619
+ "Idea SCAMPER": "Implementación de estaciones ajustables", "Fase DT": "Definir",
620
+ "Tarea": "Identificación de riesgos ergonómicos", "Inicio": "2024-01-16", "Compromiso": "2024-01-30"},
621
+
622
+ {"Problema": "Reducir costos en consumibles de producción", "SCAMPER": "Combinar",
623
+ "Idea SCAMPER": "Uso de materiales biodegradables", "Fase DT": "Definir",
624
+ "Tarea": "Análisis de alternativas sustentables", "Inicio": "2024-01-17", "Compromiso": "2024-01-31"},
625
+
626
+ # 🟡 IDEAR (4 ideas)
627
+ {"Problema": "Automatizar planificación de producción", "SCAMPER": "Combinar",
628
+ "Idea SCAMPER": "Sistema con machine learning", "Fase DT": "Idear",
629
+ "Tarea": "Desarrollo del prototipo", "Inicio": "2024-01-15", "Compromiso": "2024-02-05"},
630
+
631
+ {"Problema": "Optimización de rutas de logística", "SCAMPER": "Modificar",
632
+ "Idea SCAMPER": "Uso de IA en distribución", "Fase DT": "Idear",
633
+ "Tarea": "Prueba con datos históricos", "Inicio": "2024-01-16", "Compromiso": "2024-02-06"},
634
+
635
+ {"Problema": "Automatización de gestión de pedidos", "SCAMPER": "Reorganizar",
636
+ "Idea SCAMPER": "Integración de blockchain en trazabilidad", "Fase DT": "Idear",
637
+ "Tarea": "Desarrollo de modelo de trazabilidad", "Inicio": "2024-01-17", "Compromiso": "2024-02-07"},
638
+
639
+ {"Problema": "Estandarización de procesos manuales", "SCAMPER": "Sustituir",
640
+ "Idea SCAMPER": "Aplicaciones móviles para control de procesos", "Fase DT": "Idear",
641
+ "Tarea": "Desarrollo de interfaz de usuario", "Inicio": "2024-01-18", "Compromiso": "2024-02-08"},
642
+
643
+ # 🟢 PROTOTIPAR (3 ideas)
644
+ {"Problema": "Implementar manufactura flexible", "SCAMPER": "Adaptar",
645
+ "Idea SCAMPER": "Uso de robots colaborativos", "Fase DT": "Prototipar",
646
+ "Tarea": "Configuración inicial", "Inicio": "2024-01-20", "Compromiso": "2024-02-10"},
647
+
648
+ {"Problema": "Automatización de gestión de personal", "SCAMPER": "Combinar",
649
+ "Idea SCAMPER": "Análisis de rendimiento con AI", "Fase DT": "Prototipar",
650
+ "Tarea": "Prueba con dataset real", "Inicio": "2024-01-21", "Compromiso": "2024-02-11"},
651
+
652
+ {"Problema": "Monitoreo predictivo de fallas", "SCAMPER": "Sustituir",
653
+ "Idea SCAMPER": "Implementación de sensores IoT con IA", "Fase DT": "Prototipar",
654
+ "Tarea": "Desarrollo del modelo de predicción", "Inicio": "2024-01-22", "Compromiso": "2024-02-12"},
655
+
656
+ # 🔴 TESTEAR (2 ideas)
657
+ {"Problema": "Optimización de órdenes de producción", "SCAMPER": "Reorganizar",
658
+ "Idea SCAMPER": "Planificación adaptativa", "Fase DT": "Testear",
659
+ "Tarea": "Validación con producción real", "Inicio": "2024-01-22", "Compromiso": "2024-02-12"},
660
+
661
+ {"Problema": "Automatización del control de calidad", "SCAMPER": "Sustituir",
662
+ "Idea SCAMPER": "Cámaras de visión artificial con IA", "Fase DT": "Testear",
663
+ "Tarea": "Comparación de defectos detectados manualmente vs IA", "Inicio": "2024-01-23", "Compromiso": "2024-02-13"},
664
+
665
+ # 🔴 IMPLEMENTACIÓN (1 idea)
666
+ {"Problema": "Implementar manufactura sin papel", "SCAMPER": "Adaptar",
667
+ "Idea SCAMPER": "Digitalización con tablets", "Fase DT": "Implementación",
668
+ "Tarea": "Capacitación de operarios", "Inicio": "2024-01-25", "Compromiso": "2024-02-10"},
669
+ ])
670
+
671
+ st.markdown("""
672
+ ## 📋 Ver y Editar Innovaciones Guardadas""" )
673
+ # 📌 Expander para visualizar y editar el DataFrame de Innovaciones
674
+ with st.expander("Ajusta el progreso de las ideas innovadoras", expanded=False):
675
+ df_ideas = st.data_editor(st.session_state.ideas_innovacion, use_container_width=True, num_rows="dynamic")
676
+ st.session_state.ideas_innovacion = df_ideas # Guardar cambios
677
+
678
+ # 📊 Visualización del Funnel en horizontal con Plotly
679
+ st.subheader("📊 Funnel de Innovación - Evolución de Ideas")
680
+ if not st.session_state.ideas_innovacion.empty:
681
+ funnel_counts = st.session_state.ideas_innovacion["Fase DT"].value_counts().reset_index()
682
+ funnel_counts.columns = ["Fase", "Cantidad"]
683
+
684
+ fig_funnel = go.Figure(go.Funnel(
685
+ orientation="v", # 🏆 FUNNEL EN HORIZONTAL
686
+ y=funnel_counts["Cantidad"],
687
+ x=funnel_counts["Fase"],
688
+ textinfo="value+percent initial",
689
+ marker={"color": ["blue", "green", "orange", "red", "purple", "gray"]}
690
+ ))
691
+
692
+ fig_funnel.update_layout(title="Funnel de Innovación - Design Thinking")
693
+ st.plotly_chart(fig_funnel, use_container_width=True)
694
+
695
+ # 📌 Seguimiento de Acciones en un Gantt
696
+ st.subheader("📅 Tablero de Acciones y Compromisos")
697
+ if not st.session_state.ideas_innovacion.empty:
698
+ fig_gantt = px.timeline(st.session_state.ideas_innovacion, x_start="Inicio", x_end="Compromiso", y="Tarea",
699
+ color="Fase DT", title="Tareas y Fechas de Innovación",
700
+ category_orders={"Fase DT": ["Empatizar", "Definir", "Idear", "Prototipar", "Testear", "Implementación"]})
701
+ fig_gantt.update_yaxes(categoryorder="total ascending")
702
+ fig_gantt.update_layout(showlegend=True)
703
+ st.plotly_chart(fig_gantt, use_container_width=True)
current.jpg ADDED

Git LFS Details

  • SHA256: 168b3d4cb05497c98495daab674ba82228234eaefd0fe8b3619097efd55fe4f2
  • Pointer size: 132 Bytes
  • Size of remote file: 1.08 MB
future.jpg ADDED

Git LFS Details

  • SHA256: 552a8eac885ea4af2f50bfb1964d27dad8c1cfa4122ab96052fab572cd3a199a
  • Pointer size: 131 Bytes
  • Size of remote file: 495 kB
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ plotly
2
+ streamlit
3
+ numpy
4
+ pandas