Carlos Isael Ramírez González commited on
Commit
0c29434
·
1 Parent(s): 5fc4ff1

Reenvio de Modelo

Browse files
Files changed (3) hide show
  1. app.py +1 -1
  2. mojica_agent.py +338 -98
  3. supervised_dataset_train.json +1082 -0
app.py CHANGED
@@ -28,7 +28,7 @@ def ask_question(req: QuestionRequest):
28
 
29
  # Si es dataframe lo convertimos a json
30
  if isinstance(result, pd.DataFrame):
31
- result = result.to_dict(orient="records")
32
 
33
  return {"sql": sql, "result": result}
34
  # return {"sql": "WASA"}
 
28
 
29
  # Si es dataframe lo convertimos a json
30
  if isinstance(result, pd.DataFrame):
31
+ result = result.to_json(orient="records")
32
 
33
  return {"sql": sql, "result": result}
34
  # return {"sql": "WASA"}
mojica_agent.py CHANGED
@@ -3,52 +3,78 @@ from config import Config
3
  from transformers import AutoTokenizer, AutoModelForCausalLM
4
  import torch, gc
5
  import unicodedata
6
- from typing import Dict, Tuple
7
- import re
8
  import pandas as pd
9
  import sqlite3
10
 
 
11
  class MojicaAgent:
12
  def __init__(self, config: Config):
13
  self.config = config
14
  self.memory = ConversationMemory()
15
- self.schema = self._load_schema()
16
- self._safe_initializer_model()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
- def _safe_initializer_model(self):
19
  def try_load_model():
20
- dtype = torch.float16 if "cuda" in self.config.DEVICE else torch.float32
21
- tokenizer = AutoTokenizer.from_pretrained(self.config.MODEL_NAME)
22
- model = (
23
- AutoModelForCausalLM.from_pretrained(
24
- self.config.MODEL_NAME, trust_remote_code=True, torch_dtype=dtype
25
- )
26
- .to(self.config.DEVICE)
27
- .eval()
28
- ) # eval porque solo se predice
29
- return tokenizer, model
30
 
31
  try:
32
- self.tokenizer, self.model = try_load_model()
33
  except torch.cuda.OutOfMemoryError:
34
- # Liberar memoria y volver a intentar
35
  gc.collect()
36
  torch.cuda.empty_cache()
37
  torch.cuda.ipc_collect()
 
38
 
39
- self.tokenizer, self.model = try_load_model()
 
40
 
41
- def _load_schema(self) -> Dict:
42
- conn = sqlite3.connect(self.config.DB_PATH)
43
- cursor = conn.cursor()
44
- cursor.execute(f"PRAGMA table_info({self.config.TABLE_NAME})")
45
- columns = [
46
- {"name": column[1], "type": column[2]} for column in cursor.fetchall()
 
47
  ]
48
- schema = {"table_name": self.config.TABLE_NAME, "columns": columns}
49
- conn.close()
50
- return schema
51
-
 
 
 
 
 
52
  def _get_schema_structured(self) -> Dict:
53
  if self.memory.schema_cache:
54
  return self.memory.schema_cache
@@ -61,17 +87,28 @@ class MojicaAgent:
61
  self.memory.schema_cache = schema
62
  return schema
63
 
64
- def _build_prompt(self, question: str) -> str:
65
- memory_context = self.memory.get_context(question)
66
  table_name = self.schema["table_name"]
67
 
68
  # 1. Detectar tipo de pregunta
69
  question_type = (
70
  "PRODUCTOS"
71
  if "producto" in question.lower()
72
- else "CLIENTES" if "cliente" in question.lower() else "GENERAL"
 
 
 
 
 
 
 
 
 
 
 
 
73
  )
74
-
75
  # 2. Ejemplos dinámicos
76
  examples = {
77
  "PRODUCTOS": (
@@ -82,28 +119,130 @@ class MojicaAgent:
82
  'GROUP BY "Descripcion"\n'
83
  "ORDER BY total_vendido DESC\n"
84
  "LIMIT 10;\n\n"
85
- "-- P: 'Productos con mayor valor neto'\n"
86
  'SELECT "Descripcion", SUM("Neto") AS valor_total\n'
87
  f'FROM "{table_name}"\n'
88
  'WHERE "Descripcion" IS NOT NULL\n'
89
  'GROUP BY "Descripcion"\n'
90
  "ORDER BY valor_total DESC\n"
91
- "LIMIT 5;"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
  ),
93
  "CLIENTES": (
94
- "-- P: 'Top 5 clientes con mayor valor neto'\n"
95
  'SELECT "Cliente", SUM("Neto") AS valor_total\n'
96
  f'FROM "{table_name}"\n'
97
  "WHERE \"Cliente\" IS NOT NULL AND \"Fecha\" BETWEEN '2025-01-01' AND '2025-12-31'\n"
98
  'GROUP BY "Cliente"\n'
99
  "ORDER BY valor_total DESC\n"
100
- "LIMIT 5;\n\n"
101
- "-- P: 'Clientes con más compras en marzo'\n"
 
 
 
 
 
 
 
 
 
 
 
102
  'SELECT "Cliente", COUNT(*) AS total_compras\n'
103
  f'FROM "{table_name}"\n'
104
  "WHERE \"Cliente\" IS NOT NULL AND strftime('%m', \"Fecha\") = '03'\n"
105
  'GROUP BY "Cliente"\n'
106
- "ORDER BY total_compras DESC\n"
107
  "LIMIT 10;\n\n"
108
  "-- P: 'Clientes de Guadalajara con más compras'\n"
109
  'SELECT "Cliente", "Razon Social", COUNT(*) AS total_compras\n'
@@ -112,6 +251,44 @@ class MojicaAgent:
112
  'GROUP BY "Cliente", "Razon Social"\n'
113
  "ORDER BY total_compras DESC\n"
114
  "LIMIT 10;"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  ),
116
  "GENERAL": (
117
  "-- P: 'Ventas totales por mes'\n"
@@ -130,29 +307,6 @@ class MojicaAgent:
130
  ),
131
  }
132
 
133
- # 3. Columnas esenciales
134
- essential_columns = [
135
- {
136
- "name": "Descripcion",
137
- "type": "TEXT",
138
- "description": "Nombre del producto",
139
- },
140
- {"name": "Cantidad", "type": "REAL", "description": "Unidades vendidas"},
141
- {"name": "Cliente", "type": "TEXT", "description": "Código de cliente"},
142
- {
143
- "name": "Razon Social",
144
- "type": "TEXT",
145
- "description": "Nombre completo del cliente",
146
- },
147
- {"name": "Ciudad", "type": "TEXT", "description": "Ciudad del cliente"},
148
- {
149
- "name": "Fecha",
150
- "type": "TEXT",
151
- "description": "Fecha de venta (YYYY-MM-DD)",
152
- },
153
- {"name": "Neto", "type": "REAL", "description": "Valor neto de la venta"},
154
- ]
155
-
156
  # 4. Prompt final con nueva regla
157
  return (
158
  f"""
@@ -164,7 +318,7 @@ class MojicaAgent:
164
  + "\n".join(
165
  [
166
  f"- {col['name']} ({col['type']}): {col['description']}"
167
- for col in essential_columns
168
  ]
169
  )
170
  + f"""
@@ -177,17 +331,27 @@ class MojicaAgent:
177
 
178
  ### REGLAS CRÍTICAS ###
179
  - Usar siempre nombres exactos de columnas
 
 
 
 
 
180
  - Agrupar por la dimensión principal (producto/cliente)
181
  - Ordenar DESC para 'más/mayor', ASC para 'menos/menor'
182
- - Usar LIMIT para top N
183
  - Año actual: 2025
184
- - Siempre terminar con un LIMIT = 1 en caso que se indique lo contrario
 
 
 
185
  - Para 'más vendido' usar SUM("Cantidad"), para 'mayor valor' usar SUM("Neto")
186
  - Usar "Razon Social" cuando pregunten por el nombre del cliente
187
  - Usar "Ciudad" para filtrar o agrupar por ubicación
188
  - Queda estrictamente prohibido usar acentos
189
  - **Siempre excluir valores nulos con 'IS NOT NULL' en las columnas usadas en WHERE, GROUP BY u ORDER BY**
190
-
 
 
191
  ### PREGUNTA ACTUAL ###
192
  \"\"\"{question}\"\"\"
193
 
@@ -195,7 +359,42 @@ class MojicaAgent:
195
  """
196
  )
197
 
198
- def _clean_sql_output(self, output: str) -> str:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  # Encuentra todas las posibles queries completas que terminen en ;
200
  sql_matches = list(
201
  re.finditer(
@@ -236,38 +435,63 @@ class MojicaAgent:
236
  # 2. Agregar LIMIT si no existe
237
  # ────────────────────────────────
238
  # Buscar si ya hay un LIMIT en la query
239
- if not re.search(r"\bLIMIT\s+\d+", sql, re.IGNORECASE):
240
- # Insertar antes del último punto y coma
241
- sql = (
242
- sql[:-1] + " LIMIT 1;"
243
- ) # puedes cambiar 100 por el valor default que quieras
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
 
245
- return sql
 
 
 
 
246
 
247
- def _execute_sql(self, sql: str):
248
- conn = sqlite3.connect(self.config.DB_PATH)
 
249
  try:
250
- result = pd.read_sql_query(sql, conn)
251
- conn.close()
252
- return result
253
  except Exception as e:
254
- return f"Error de ejecución: {str(e)}"
255
- finally:
256
- conn.close()
257
-
258
- def consult(self, question: str) -> Tuple[str, any]:
259
- prompt = self._build_prompt(question)
260
 
 
 
261
  tokenized_input = self.tokenizer(
262
- prompt,
263
  return_tensors="pt",
264
  truncation=True,
265
  max_length=self.config.MAX_TOKENS,
266
  ).to(self.config.DEVICE)
267
-
268
- # Desactiva el cálculo de gradientes -> Siempre poner cuando se haga prediccion
269
- # - Reduce consumo de memoria
270
- # - Acelera inferencia
271
  with torch.no_grad():
272
  tokenized_output_model = self.model.generate(
273
  **tokenized_input,
@@ -279,17 +503,33 @@ class MojicaAgent:
279
  do_sample=True,
280
  pad_token_id=self.tokenizer.eos_token_id,
281
  )
282
-
283
  output_model = self.tokenizer.decode(
284
  tokenized_output_model[0], skip_special_tokens=True
285
  )
 
 
 
 
 
286
 
287
- sql_query = self._clean_sql_output(output_model)
288
-
289
- if not sql_query:
290
- return "Error: No se pudo generar SQL válido" + "\n" + output_model, None
291
-
292
- result = self._execute_sql(sql_query)
293
- self.memory.add_interaction(question, sql_query, result)
294
-
295
- return sql_query, result
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  from transformers import AutoTokenizer, AutoModelForCausalLM
4
  import torch, gc
5
  import unicodedata
6
+ from typing import Dict, Tuple, Optional, Any
7
+ import re
8
  import pandas as pd
9
  import sqlite3
10
 
11
+
12
  class MojicaAgent:
13
  def __init__(self, config: Config):
14
  self.config = config
15
  self.memory = ConversationMemory()
16
+ self.essential_columns = [
17
+ {
18
+ "name": "Descripcion",
19
+ "type": "TEXT",
20
+ "description": "Nombre del producto",
21
+ },
22
+ {"name": "Cantidad", "type": "REAL", "description": "Unidades vendidas"},
23
+ {"name": "Cliente", "type": "TEXT", "description": "Código de cliente"},
24
+ {
25
+ "name": "Razon Social",
26
+ "type": "TEXT",
27
+ "description": "Nombre completo del cliente",
28
+ },
29
+ {"name": "Ciudad", "type": "TEXT", "description": "Ciudad del cliente"},
30
+ {
31
+ "name": "Fecha",
32
+ "type": "TEXT",
33
+ "description": "Fecha de venta (YYYY-MM-DD)",
34
+ },
35
+ {"name": "Neto", "type": "REAL", "description": "Valor neto de la venta"},
36
+ ]
37
+ self._initialize_database()
38
+ self._initialize_model()
39
 
40
+ def _initialize_model(self):
41
  def try_load_model():
42
+ self.tokenizer = AutoTokenizer.from_pretrained(self.config.MODEL_NAME)
43
+ self.model = AutoModelForCausalLM.from_pretrained(
44
+ self.config.MODEL_NAME,
45
+ device_map="auto",
46
+ torch_dtype="auto",
47
+ trust_remote_code=True,
48
+ ).eval()
 
 
 
49
 
50
  try:
51
+ try_load_model()
52
  except torch.cuda.OutOfMemoryError:
 
53
  gc.collect()
54
  torch.cuda.empty_cache()
55
  torch.cuda.ipc_collect()
56
+ try_load_model()
57
 
58
+ def _initialize_database(self):
59
+ self.conn = sqlite3.connect(self.config.DB_PATH)
60
 
61
+ cursor = self.conn.cursor()
62
+ cursor.execute(f"DROP TABLE IF EXISTS {self.config.TABLE_NAME}")
63
+ self.conn.commit()
64
+ df = pd.read_csv(self.config.CSV_PATH, low_memory=False)
65
+
66
+ real_cols = [
67
+ col["name"] for col in self.essential_columns if col["type"] == "REAL"
68
  ]
69
+ for col in real_cols:
70
+ if col in df.columns:
71
+ df[col] = pd.to_numeric(df[col], errors="coerce")
72
+
73
+ df.to_sql(self.config.TABLE_NAME, self.conn, if_exists="replace", index=False)
74
+ self.schema = self._get_schema_structured()
75
+ # Configuracion de pandas:
76
+ pd.set_option("display.float_format", "{:,.2f}".format)
77
+
78
  def _get_schema_structured(self) -> Dict:
79
  if self.memory.schema_cache:
80
  return self.memory.schema_cache
 
87
  self.memory.schema_cache = schema
88
  return schema
89
 
90
+ def _generate_sql_prompt(self, question: str) -> str:
91
+ memory_context = self.memory.get_context()
92
  table_name = self.schema["table_name"]
93
 
94
  # 1. Detectar tipo de pregunta
95
  question_type = (
96
  "PRODUCTOS"
97
  if "producto" in question.lower()
98
+ else (
99
+ "CERO"
100
+ if "cero" in question.lower()
101
+ else (
102
+ "CIUDADES"
103
+ if "ciudad" in question.lower()
104
+ else (
105
+ "DINERO"
106
+ if "dinero" in question.lower()
107
+ else "CLIENTES" if "cliente" in question.lower() else "GENERAL"
108
+ )
109
+ )
110
+ )
111
  )
 
112
  # 2. Ejemplos dinámicos
113
  examples = {
114
  "PRODUCTOS": (
 
119
  'GROUP BY "Descripcion"\n'
120
  "ORDER BY total_vendido DESC\n"
121
  "LIMIT 10;\n\n"
122
+ "-- P: 'Producto con mayor valor neto'\n"
123
  'SELECT "Descripcion", SUM("Neto") AS valor_total\n'
124
  f'FROM "{table_name}"\n'
125
  'WHERE "Descripcion" IS NOT NULL\n'
126
  'GROUP BY "Descripcion"\n'
127
  "ORDER BY valor_total DESC\n"
128
+ "LIMIT 1;"
129
+ "--P: ' ¿En que ciudad es mas comprado el producto Queso Gouda Importado Chileno Colun?'\n"
130
+ 'SELECT "Descripcion", "Ciudad", SUM("Cantidad") AS total_vendido\n'
131
+ f'FROM "{table_name}"\n'
132
+ 'WHERE "Descripcion" LIKE \'%Queso Gouda%\' AND "Cliente" IS NOT NULL\n'
133
+ 'GROUP BY "Ciudad"\n'
134
+ "ORDER BY total_vendido DESC\n"
135
+ "LIMIT 1;\n\n"
136
+ ),
137
+ "CERO": (
138
+ "-- P: '¿Cuántos clientes cero tenemos en total (al día de hoy)?'\n"
139
+ 'SELECT COUNT(DISTINCT "Cliente") AS clientes_cero\n'
140
+ f'FROM "{table_name}"\n'
141
+ 'WHERE "Cliente" IS NOT NULL\n'
142
+ 'AND "Cliente" NOT IN (\n'
143
+ ' SELECT DISTINCT "Cliente"\n'
144
+ f' FROM "{table_name}"\n'
145
+ " WHERE DATE(\"Fecha\") > DATE('now', '-28 day')\n"
146
+ ");\n\n"
147
+ "-- P: '¿Cuántos clientes cero tenemos en Guadalajara (al día de hoy)?'\n"
148
+ 'SELECT COUNT(DISTINCT "Cliente") AS clientes_cero\n'
149
+ f'FROM "{table_name}"\n'
150
+ 'WHERE "Cliente" IS NOT NULL\n'
151
+ "AND \"Ciudad\" LIKE '%Guadalajara%'\n"
152
+ 'AND "Cliente" NOT IN (\n'
153
+ ' SELECT DISTINCT "Cliente"\n'
154
+ f' FROM "{table_name}"\n'
155
+ " WHERE DATE(\"Fecha\") > DATE('now', '-28 day')\n"
156
+ ");\n\n"
157
+ "-- P: '¿Cuántos clientes cero tuvimos en Abril?"
158
+ 'SELECT COUNT(DISTINCT "Cliente") AS clientes_cero\n'
159
+ f'FROM "{table_name}"\n'
160
+ 'WHERE "Cliente" IS NOT NULL\n'
161
+ "AND DATE(\"Fecha\") <= DATE('2025-04-30')\n"
162
+ 'AND "Cliente" NOT IN (\n'
163
+ ' SELECT DISTINCT "Cliente"\n'
164
+ f' FROM "{table_name}"\n'
165
+ " WHERE DATE(\"Fecha\") BETWEEN DATE('2025-04-30','-27 day') AND DATE('2025-04-30')\n"
166
+ ");\n\n"
167
+ ),
168
+ "DINERO": (
169
+ "-- P: '¿Cuánto dinero nos ha generado el producto queso adobera?'\n"
170
+ 'SELECT "Descripcion", SUM("Neto") AS valor_total\n'
171
+ f'FROM "{table_name}"\n'
172
+ 'WHERE "Descripcion" LIKE \'%queso adobera%\' AND "Cliente" IS NOT NULL\n'
173
+ 'GROUP BY "Descripcion"\n'
174
+ "ORDER BY valor_total DESC\n"
175
+ "LIMIT 1;\n\n"
176
+ "-- P: '¿Cuánto dinero nos ha generado el cliente C1261?'\n"
177
+ 'SELECT "Cliente", SUM("Neto") AS valor_total\n'
178
+ f'FROM "{table_name}"\n'
179
+ 'WHERE "Cliente" = \'C1261\' AND "Cliente" IS NOT NULL\n'
180
+ 'GROUP BY "Cliente"\n'
181
+ "ORDER BY valor_total DESC\n"
182
+ "LIMIT 1;\n\n"
183
+ "-- P: '¿Cuánto dinero nos ha generado la ciudad de Zapopan?'\n"
184
+ 'SELECT "Ciudad", SUM("Neto") AS valor_total\n'
185
+ f'FROM "{table_name}"\n'
186
+ 'WHERE "Ciudad" LIKE \'%Zapopan%\' AND "Cliente" IS NOT NULL\n'
187
+ 'GROUP BY "Ciudad"\n'
188
+ "ORDER BY valor_total DESC\n"
189
+ "LIMIT 1;\n\n"
190
+ ),
191
+ "CIUDADES": (
192
+ "-- P: '¿Cuál es la ciudad que más nos compra?'\n"
193
+ 'SELECT "Ciudad", SUM("Cantidad") AS total_comprado\n'
194
+ f'FROM "{table_name}"\n'
195
+ 'WHERE "Ciudad" IS NOT NULL AND "Cliente" IS NOT NULL\n'
196
+ 'GROUP BY "Ciudad"\n'
197
+ "ORDER BY total_comprado DESC\n"
198
+ "LIMIT 1;\n\n"
199
+ "-- P: '¿Cuál es la ciudad con más clientes registrados?'\n"
200
+ 'SELECT "Ciudad", COUNT(DISTINCT "Cliente") AS cantidad_clientes\n'
201
+ f'FROM "{table_name}"\n'
202
+ 'WHERE "Ciudad" IS NOT NULL AND "Cliente" IS NOT NULL\n'
203
+ 'GROUP BY "Ciudad"\n'
204
+ "ORDER BY cantidad_clientes DESC\n"
205
+ "LIMIT 1;\n\n"
206
+ "-- P: '¿Cuál es la ciudad que más dinero nos genera?'\n"
207
+ 'SELECT "Ciudad", SUM("Neto") AS valor_total\n'
208
+ f'FROM "{table_name}"\n'
209
+ 'WHERE "Ciudad" IS NOT NULL AND "Cliente" IS NOT NULL\n'
210
+ 'GROUP BY "Ciudad"\n'
211
+ "ORDER BY valor_total DESC\n"
212
+ "LIMIT 1;\n\n"
213
+ "-- P: '¿Cuál es la ciudad que menos dinero nos genera?'\n"
214
+ 'SELECT "Ciudad", SUM("Neto") AS valor_total\n'
215
+ f'FROM "{table_name}"\n'
216
+ 'WHERE "Ciudad" IS NOT NULL AND "Cliente" IS NOT NULL\n'
217
+ 'GROUP BY "Ciudad"\n'
218
+ "ORDER BY valor_total ASC\n"
219
+ "LIMIT 1;\n\n"
220
  ),
221
  "CLIENTES": (
222
+ "-- P: 'El cliente con mayor valor neto'\n"
223
  'SELECT "Cliente", SUM("Neto") AS valor_total\n'
224
  f'FROM "{table_name}"\n'
225
  "WHERE \"Cliente\" IS NOT NULL AND \"Fecha\" BETWEEN '2025-01-01' AND '2025-12-31'\n"
226
  'GROUP BY "Cliente"\n'
227
  "ORDER BY valor_total DESC\n"
228
+ "LIMIT 1;\n\n"
229
+ "-- P: '¿Cuántos clientes tenemos en Guadalajara?'\n"
230
+ 'SELECT COUNT(DISTINCT "Cliente") AS cantidad_clientes\n'
231
+ f'FROM "{table_name}"\n'
232
+ 'WHERE "Ciudad" LIKE \'%Guadalajara%\' AND "Cliente" IS NOT NULL;\n\n'
233
+ "-- P: 'El cliente con menor valor neto'\n"
234
+ 'SELECT "Cliente", SUM("Neto") AS valor_total\n'
235
+ f'FROM "{table_name}"\n'
236
+ "WHERE \"Cliente\" IS NOT NULL AND \"Fecha\" BETWEEN '2025-01-01' AND '2025-12-31'\n"
237
+ 'GROUP BY "Cliente"\n'
238
+ "ORDER BY valor_total ASC\n"
239
+ "LIMIT 1;\n\n"
240
+ "-- P: 'Clientes con menos compras en marzo'\n"
241
  'SELECT "Cliente", COUNT(*) AS total_compras\n'
242
  f'FROM "{table_name}"\n'
243
  "WHERE \"Cliente\" IS NOT NULL AND strftime('%m', \"Fecha\") = '03'\n"
244
  'GROUP BY "Cliente"\n'
245
+ "ORDER BY total_compras ASC\n"
246
  "LIMIT 10;\n\n"
247
  "-- P: 'Clientes de Guadalajara con más compras'\n"
248
  'SELECT "Cliente", "Razon Social", COUNT(*) AS total_compras\n'
 
251
  'GROUP BY "Cliente", "Razon Social"\n'
252
  "ORDER BY total_compras DESC\n"
253
  "LIMIT 10;"
254
+ "-- P: '¿Cuál es la ciudad con más clientes registrados?'\n"
255
+ 'SELECT "Ciudad", COUNT(DISTINCT "Cliente") AS cantidad_clientes\n'
256
+ f'FROM "{table_name}"\n'
257
+ 'WHERE "Ciudad" IS NOT NULL AND "Cliente" IS NOT NULL\n'
258
+ 'GROUP BY "Ciudad"\n'
259
+ "ORDER BY cantidad_clientes DESC\n"
260
+ "LIMIT 1;\n\n"
261
+ "-- P: 'Un cliente que no nos ha comprado en las últimas 2 semanas'\n"
262
+ 'SELECT "Cliente"\n'
263
+ f'FROM "{table_name}"\n'
264
+ 'WHERE "Cliente" IS NOT NULL\n'
265
+ 'AND "Cliente" NOT IN (\n'
266
+ ' SELECT DISTINCT "Cliente"\n'
267
+ f' FROM "{table_name}"\n'
268
+ " WHERE DATE(\"Fecha\") >= DATE('now', '-14 day')\n"
269
+ ")\n"
270
+ 'GROUP BY "Cliente"\n'
271
+ "LIMIT 1;\n\n"
272
+ "-- P: 'Un cliente que no nos ha comprado en las últimas 3 semanas'\n"
273
+ 'SELECT "Cliente"\n'
274
+ f'FROM "{table_name}"\n'
275
+ 'WHERE "Cliente" IS NOT NULL\n'
276
+ 'AND "Cliente" NOT IN (\n'
277
+ ' SELECT DISTINCT "Cliente"\n'
278
+ f' FROM "{table_name}"\n'
279
+ " WHERE DATE(\"Fecha\") >= DATE('now', '-14 day')\n"
280
+ ")\n"
281
+ 'GROUP BY "Cliente"\n'
282
+ "LIMIT 1;\n\n"
283
+ "-- P: '¿Cuántos clientes cero tenemos en total?'\n"
284
+ 'SELECT COUNT(DISTINCT "Cliente") AS clientes_cero\n'
285
+ f'FROM "{table_name}"\n'
286
+ 'WHERE "Cliente" IS NOT NULL\n'
287
+ 'AND "Cliente" NOT IN (\n'
288
+ ' SELECT DISTINCT "Cliente"\n'
289
+ f' FROM "{table_name}"\n'
290
+ " WHERE DATE(\"Fecha\") >= DATE('now', '-28 day')\n"
291
+ ");\n\n"
292
  ),
293
  "GENERAL": (
294
  "-- P: 'Ventas totales por mes'\n"
 
307
  ),
308
  }
309
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
310
  # 4. Prompt final con nueva regla
311
  return (
312
  f"""
 
318
  + "\n".join(
319
  [
320
  f"- {col['name']} ({col['type']}): {col['description']}"
321
+ for col in self.essential_columns
322
  ]
323
  )
324
  + f"""
 
331
 
332
  ### REGLAS CRÍTICAS ###
333
  - Usar siempre nombres exactos de columnas
334
+ - Usar solo las columnas listadas
335
+ - Prohibido inventar columnas
336
+ - Para el nombre del cliente, usar SIEMPRE "Razon Social".
337
+ - Para un mes específico usar: strftime('%m', "Fecha") = 'MM'
338
+ - Para cantidades usar SUM("Cantidad"), para dinero usar SUM("Neto")
339
  - Agrupar por la dimensión principal (producto/cliente)
340
  - Ordenar DESC para 'más/mayor', ASC para 'menos/menor'
341
+ - Contesta siempre en el idioma en el que se te pregunta no traduzcas.
342
  - Año actual: 2025
343
+ - No inventes columnas o tablas que no existan
344
+ - Para preguntas sobre clientes cero, SIEMPRE usar la subconsulta NOT IN con las últimas 4 semanas.
345
+ - Si se menciona una ciudad, incluir el filtro AND "Ciudad" LIKE '%...%'
346
+ - Usa LIMIT cuando se te pida un numero finito de datos
347
  - Para 'más vendido' usar SUM("Cantidad"), para 'mayor valor' usar SUM("Neto")
348
  - Usar "Razon Social" cuando pregunten por el nombre del cliente
349
  - Usar "Ciudad" para filtrar o agrupar por ubicación
350
  - Queda estrictamente prohibido usar acentos
351
  - **Siempre excluir valores nulos con 'IS NOT NULL' en las columnas usadas en WHERE, GROUP BY u ORDER BY**
352
+ - Para preguntas sobre ciudad SIEMPRE incluir "Ciudad" en la query
353
+ - Para busquedas por Descripcion siempre usar LIKE
354
+ - Mandar solo la cantidad de rows que el usuario pide.
355
  ### PREGUNTA ACTUAL ###
356
  \"\"\"{question}\"\"\"
357
 
 
359
  """
360
  )
361
 
362
+ def _generate_analysis_prompt(self, question: str, result: Any) -> str:
363
+ # print(str(result)[:1000])
364
+ # print(result.to_dict(orient="records"))
365
+ try:
366
+ data_json = result.to_dict(orient="records")
367
+ except:
368
+ data_json = result
369
+
370
+ return f"""
371
+ Eres un analista de datos. Explica los siguientes resultados de manera clara y concisa.
372
+
373
+ Pregunta del usuario: {question}
374
+
375
+ Datos obtenidos:
376
+ {data_json}
377
+
378
+ Reglas OBLIGATORIAS:
379
+ - NO inventes números, porcentajes ni comparaciones.
380
+ - SOLO usa los valores que aparecen en Datos.
381
+ - Si existe la clave 'clientes_cero', debes repetir EXACTAMENTE su valor, formateado, y nada más.
382
+ - Responde en UNA sola oración, clara y breve.
383
+ - Escribe cantidades con separador de miles (ej. 12,345).
384
+ - No agregues interpretación extra si no hay más columnas.
385
+
386
+ Respuesta:
387
+ """
388
+
389
+ def _clean_analysis_output(self, ouput: str) -> Optional[str]:
390
+ pattern = r"Respuesta:([\s\S]+)"
391
+ match = re.search(pattern, ouput)
392
+ if match:
393
+ return match.group(1).strip()
394
+ else:
395
+ return "Sin análisis"
396
+
397
+ def _clean_sql_output(self, output: str) -> Optional[str]:
398
  # Encuentra todas las posibles queries completas que terminen en ;
399
  sql_matches = list(
400
  re.finditer(
 
435
  # 2. Agregar LIMIT si no existe
436
  # ────────────────────────────────
437
  # Buscar si ya hay un LIMIT en la query
438
+ # if not re.search(r"\bLIMIT\s+\d+", sql, re.IGNORECASE):
439
+ # # Insertar antes del último punto y coma
440
+ # sql = sql[:-1] + " LIMIT 1;" # puedes cambiar 100 por el valor default que quieras
441
+
442
+ validate_sql = self._validate_and_correct_sql(sql)
443
+ return validate_sql
444
+
445
+ def _validate_and_correct_sql(self, sql: str) -> str:
446
+ cur = self.conn.cursor()
447
+ cur.execute(f'PRAGMA table_info("{self.config.TABLE_NAME}")')
448
+ real_columns = [row[1] for row in cur.fetchall()]
449
+ column_lower_map = {col.lower(): col for col in real_columns}
450
+ aliases = {
451
+ "city": "Ciudad",
452
+ "client": "Cliente",
453
+ "razon_social": "Razon Social",
454
+ "razón social": "Razon Social",
455
+ "Sales": "sells",
456
+ '"Date"': "Fecha",
457
+ "mojica_Clientes": "sells",
458
+ "value_total": "valor_total",
459
+ "strstrftime": "strftime",
460
+ }
461
+ alias_map = {k.lower(): v for k, v in aliases.items()}
462
+
463
+ pattern = r"\b\w+\b"
464
+
465
+ def replace_column(m):
466
+ candidate = m.group(0) # Palabra encontrada
467
+ key = candidate.lower()
468
+ # ¿Es una columna?
469
+ corrected = column_lower_map.get(key)
470
+ if corrected:
471
+ return corrected
472
 
473
+ # ¿Es una alias?
474
+ corrected = alias_map.get(key)
475
+ if corrected is not None:
476
+ return corrected
477
+ return candidate # si no encuentra nada, lo deja igual
478
 
479
+ return re.sub(pattern, replace_column, sql).replace("\\", "")
480
+
481
+ def _execute_sql(self, sql: str) -> Any:
482
  try:
483
+ return pd.read_sql_query(sql, self.conn)
 
 
484
  except Exception as e:
485
+ return f"Error: {str(e)}"
 
 
 
 
 
486
 
487
+ def consult(self, question: str) -> Tuple[str, Any, str]:
488
+ sql_prompt = self._generate_sql_prompt(question)
489
  tokenized_input = self.tokenizer(
490
+ sql_prompt,
491
  return_tensors="pt",
492
  truncation=True,
493
  max_length=self.config.MAX_TOKENS,
494
  ).to(self.config.DEVICE)
 
 
 
 
495
  with torch.no_grad():
496
  tokenized_output_model = self.model.generate(
497
  **tokenized_input,
 
503
  do_sample=True,
504
  pad_token_id=self.tokenizer.eos_token_id,
505
  )
 
506
  output_model = self.tokenizer.decode(
507
  tokenized_output_model[0], skip_special_tokens=True
508
  )
509
+ sql = self._clean_sql_output(output_model)
510
+ # print("-----------------------------------------------------")
511
+ # print(output_model)
512
+ # print(sql)
513
+ # print("-----------------------------------------------------")
514
 
515
+ # * Ejecución de SQL y generación de analisis
516
+ result = self._execute_sql(sql)
517
+ analysis_prompt = self._generate_analysis_prompt(question, result)
518
+ analyzed_token_input = self.tokenizer(
519
+ analysis_prompt,
520
+ return_tensors="pt",
521
+ truncation=True,
522
+ max_length=self.config.MAX_TOKENS,
523
+ ).to(self.config.DEVICE)
524
+ with torch.no_grad():
525
+ tokenized_analysis_output_model = self.model.generate(
526
+ **analyzed_token_input,
527
+ max_new_tokens=self.config.MAX_NEW_TOKENS,
528
+ temperature=0.65,
529
+ )
530
+ analysis = self.tokenizer.decode(
531
+ tokenized_analysis_output_model[0], skip_special_tokens=True
532
+ )
533
+ analysis = self._clean_analysis_output(analysis)
534
+ self.memory.add_interaction(question, sql, result, analysis)
535
+ return sql, result, analysis
supervised_dataset_train.json ADDED
@@ -0,0 +1,1082 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "CLIENTES_CERO": [
3
+ "¿Cuántos clientes cero tenemos actualmente?",
4
+ "Dame el total de clientes cero registrados",
5
+ "Clientes que están marcados como cero en la base",
6
+ "Cantidad de clientes sin compras realizadas",
7
+ "Total de clientes que nunca han comprado",
8
+ "¿Cuántos clientes se encuentran sin actividad?",
9
+ "Clientes sin historial de compras",
10
+ "Dame los clientes considerados como cero",
11
+ "Cantidad total de clientes sin movimientos",
12
+ "¿Qué clientes están identificados como cero?",
13
+ "Clientes cero en nuestro registro",
14
+ "Número de clientes que no han comprado nada",
15
+ "Total de clientes sin transacciones",
16
+ "¿Cuántos clientes permanecen como cero?",
17
+ "Clientes que no registran compras",
18
+ "Cantidad de clientes que no han generado ventas",
19
+ "¿Quiénes son los clientes cero actualmente?",
20
+ "Clientes que no muestran actividad",
21
+ "Dame el total de clientes sin operaciones",
22
+ "Cantidad de clientes que siguen como cero",
23
+ "Clientes sin registros de compras",
24
+ "Total de clientes que no han realizado ninguna compra",
25
+ "¿Cuántos clientes figuran como cero?",
26
+ "Clientes que no han consumido",
27
+ "Cantidad de clientes sin generar ingresos",
28
+ "¿Quiénes son los clientes que siguen inactivos?",
29
+ "Clientes que no reflejan transacciones",
30
+ "Dame la lista de clientes sin movimientos",
31
+ "Total de clientes que no presentan actividad",
32
+ "¿Cuántos clientes siguen siendo cero?",
33
+ "Clientes sin operaciones registradas",
34
+ "Cantidad de clientes que no tienen consumos",
35
+ "¿Qué clientes permanecen como cero?",
36
+ "Clientes con estatus cero",
37
+ "Total de clientes sin acciones registradas",
38
+ "¿Cuántos clientes se encuentran como inactivos?",
39
+ "Clientes que no tienen registros de ventas",
40
+ "Cantidad de clientes que no presentan operaciones",
41
+ "¿Qué clientes aún son cero?",
42
+ "Clientes que no han generado compras",
43
+ "Total de clientes que no muestran actividad alguna",
44
+ "¿Cuántos clientes figuran como inactivos?",
45
+ "Clientes que no aparecen en transacciones",
46
+ "Cantidad de clientes que nunca han generado operaciones",
47
+ "¿Quiénes son los clientes sin compras?",
48
+ "Clientes que no aportan registros de venta",
49
+ "Total de clientes que están sin actividad",
50
+ "¿Cuántos clientes permanecen inactivos?",
51
+ "Clientes que no tienen ninguna compra",
52
+ "Cantidad de clientes que no están activos",
53
+ "¿Qué clientes siguen sin comprar?",
54
+ "Clientes que no están vinculados a ventas",
55
+ "Total de clientes que no han sido activos",
56
+ "¿Cuántos clientes se mantienen como cero?",
57
+ "Clientes que no tienen movimiento de compras",
58
+ "Cantidad de clientes sin historial de operaciones",
59
+ "¿Quiénes son los clientes sin consumos?",
60
+ "Clientes que aparecen como cero en la base",
61
+ "Total de clientes que siguen sin actividad",
62
+ "¿Cuántos clientes no figuran con compras?",
63
+ "Clientes que no tienen consumos registrados",
64
+ "Cantidad de clientes que no aparecen en ventas",
65
+ "¿Qué clientes aún no han comprado?",
66
+ "Clientes identificados como cero",
67
+ "Total de clientes sin participación en ventas",
68
+ "¿Cuántos clientes están clasificados como cero?",
69
+ "Clientes que no tienen registros de operación",
70
+ "Cantidad de clientes sin consumos generados",
71
+ "¿Quiénes son los clientes sin actividad?",
72
+ "Clientes que están marcados como inactivos",
73
+ "Total de clientes sin relación con ventas",
74
+ "¿Cuántos clientes están en estado cero?",
75
+ "Clientes que no aparecen en movimientos",
76
+ "Cantidad de clientes que no generaron actividad",
77
+ "¿Qué clientes no muestran actividad de compra?",
78
+ "Clientes clasificados como cero",
79
+ "Total de clientes sin participación en operaciones",
80
+ "¿Cuántos clientes están sin consumos?",
81
+ "Clientes que no tienen acciones de compra",
82
+ "Cantidad de clientes que no reflejan operaciones",
83
+ "¿Quiénes son los clientes que permanecen sin compras?",
84
+ "Clientes que no están generando actividad",
85
+ "Total de clientes sin compras activas",
86
+ "¿Cuántos clientes están sin registros de venta?",
87
+ "Clientes que nunca han realizado compras",
88
+ "Cantidad de clientes que siguen como inactivos",
89
+ "¿Qué clientes son considerados cero?"
90
+ ],
91
+ "CIUDAD_CERO": [
92
+ "¿Cuántos clientes cero tenemos por ciudad?",
93
+ "Dame la cantidad de clientes inactivos por ciudad",
94
+ "Clientes que no compraron en las últimas 4 semanas por ciudad",
95
+ "Total de clientes inactivos actualmente por ciudad",
96
+ "Clientes cero organizados por ciudad",
97
+ "¿Cuántos clientes están inactivos en cada ciudad?",
98
+ "Lista de clientes sin compras recientes por ciudad",
99
+ "Cantidad de clientes sin actividad por ciudad",
100
+ "Clientes inactivos en cada ciudad",
101
+ "¿Cuántos clientes no realizaron compras en cada ciudad?",
102
+ "Clientes cero actuales agrupados por ciudad",
103
+ "Total de clientes sin compras recientes por ciudad",
104
+ "Clientes sin compras en el último mes por ciudad",
105
+ "Clientes cero en Guadalajara",
106
+ "Clientes cero en Zapopan",
107
+ "Clientes inactivos en Vallarta",
108
+ "Total de clientes inactivos en Colima",
109
+ "Clientes sin compras recientes en Tepic",
110
+ "Clientes cero en la ciudad de Planta",
111
+ "Dame la cantidad de clientes cero en Guadalajara",
112
+ "Clientes que no compraron en Zapopan en las últimas 4 semanas",
113
+ "Clientes cero organizados por ciudad en Vallarta",
114
+ "Lista de clientes inactivos en Colima",
115
+ "Cantidad de clientes cero en Tepic",
116
+ "Clientes sin actividad reciente en Planta",
117
+ "¿Cuántos clientes están inactivos en Guadalajara?",
118
+ "Clientes cero actuales en Zapopan",
119
+ "Total de clientes sin compras recientes en Vallarta",
120
+ "Clientes sin compras en el último mes en Colima",
121
+ "Clientes cero de Guadalajara agrupados por ciudad",
122
+ "Clientes que no realizaron compras en Tepic",
123
+ "Clientes inactivos en Zapopan durante el último mes",
124
+ "Lista de clientes cero en Vallarta",
125
+ "Cantidad de clientes sin compras recientes en Planta",
126
+ "Clientes sin actividad en Guadalajara",
127
+ "Clientes cero en Colima actualmente",
128
+ "Clientes inactivos en Zapopan este mes",
129
+ "Clientes sin compras recientes en Tepic",
130
+ "Total de clientes cero en Planta",
131
+ "Dame la cantidad de clientes inactivos en Guadalajara",
132
+ "Clientes que no compraron en Vallarta en las últimas semanas",
133
+ "Clientes cero organizados por ciudad en Colima",
134
+ "Lista de clientes inactivos en Tepic",
135
+ "Cantidad de clientes sin actividad en Zapopan",
136
+ "Clientes sin compras recientes en Planta",
137
+ "¿Cuántos clientes están inactivos en Vallarta?",
138
+ "Clientes cero actuales en Colima",
139
+ "Total de clientes sin compras recientes en Guadalajara",
140
+ "Clientes sin compras en el último mes en Zapopan",
141
+ "Clientes cero en Tepic agrupados por ciudad",
142
+ "Clientes que no realizaron compras en Planta"
143
+ ],
144
+ "PRODUCTO_CIUDAD": [
145
+ "Cuántos productos se vendieron en la ciudad de Guadalajara?",
146
+ "Lista de productos más vendidos por ciudad",
147
+ "Qué producto se vendió más en la ciudad de Zapopan?",
148
+ "Productos con mayor cantidad vendida en Guadalajara",
149
+ "Top 5 productos por ventas en la ciudad de Colima",
150
+ "Productos que más ingresos generaron en Tepic",
151
+ "Cuáles son los productos más populares en la ciudad de Vallarta?",
152
+ "Ranking de ventas de productos por ciudad",
153
+ "Producto más vendido en la ciudad de Planta",
154
+ "Dame los productos que más se vendieron en Guadalajara",
155
+ "Productos líderes por cantidad vendida en Zapopan",
156
+ "Cuáles productos tuvieron mayor rotación en la ciudad de Colima?",
157
+ "Productos más vendidos en Tepic este mes",
158
+ "Top productos por ventas en la ciudad de Vallarta",
159
+ "Qué productos se vendieron más en Guadalajara este trimestre?",
160
+ "Productos con más unidades vendidas en Zapopan",
161
+ "Lista de productos con más ventas por ciudad",
162
+ "Producto estrella de ventas en la ciudad de Planta",
163
+ "Cuáles son los productos más vendidos en Colima?",
164
+ "Ranking de productos por ventas en la ciudad de Tepic",
165
+ "Productos más populares en Guadalajara",
166
+ "Top productos vendidos en la ciudad de Zapopan",
167
+ "Cuáles productos lideran ventas en Vallarta?",
168
+ "Productos más vendidos por ciudad este mes",
169
+ "Dame los productos más vendidos en la ciudad de Planta",
170
+ "Productos que generan más ingresos en Guadalajara",
171
+ "Producto más vendido en la ciudad de Tepic este mes",
172
+ "Lista de productos más populares por ciudad",
173
+ "Cuáles productos se vendieron más en Zapopan?",
174
+ "Productos con mayor número de unidades vendidas en Guadalajara",
175
+ "Top productos por ventas en la ciudad de Colima",
176
+ "Ranking de productos más vendidos por ciudad",
177
+ "Productos más vendidos en Vallarta este mes",
178
+ "Qué productos lideran ventas en la ciudad de Planta?",
179
+ "Productos con mayor cantidad vendida en Zapopan",
180
+ "Lista de productos más vendidos en Guadalajara",
181
+ "Top productos vendidos en la ciudad de Tepic",
182
+ "Productos más populares en Colima",
183
+ "Cuáles productos tuvieron mayor rotación por ciudad?",
184
+ "Productos con más ventas en la ciudad de Vallarta",
185
+ "Producto más vendido en Guadalajara este trimestre",
186
+ "Dame los productos más vendidos por ciudad este mes",
187
+ "Ranking de productos por cantidad vendida en Zapopan",
188
+ "Productos más vendidos en la ciudad de Planta",
189
+ "Cuáles productos son los más populares en Guadalajara?",
190
+ "Top 10 productos vendidos por ciudad",
191
+ "Productos con mayor rotación en Tepic",
192
+ "Qué productos se vendieron más en la ciudad de Vallarta?",
193
+ "Lista de los productos más vendidos en Zapopan",
194
+ "Productos más vendidos en Guadalajara este mes",
195
+ "Ranking de productos por ventas en la ciudad de Planta",
196
+ "Top productos con mayor cantidad vendida por ciudad"
197
+ ],
198
+ "CLIENTE_CIUDAD": [
199
+ "Clientes más valiosos por ciudad",
200
+ "Dame los clientes con mayor compra por ciudad",
201
+ "Clientes frecuentes en la ciudad",
202
+ "Total de clientes por ciudad",
203
+ "Distribución de clientes activos por ciudad",
204
+ "Clientes que compran más en cada ciudad",
205
+ "Lista de clientes por ciudad",
206
+ "Cantidad de clientes por ciudad",
207
+ "Clientes con más compras en cada ciudad",
208
+ "Clientes destacados por ciudad",
209
+ "Clientes top en Guadalajara",
210
+ "Clientes frecuentes en Zapopan",
211
+ "Clientes más valiosos en Vallarta",
212
+ "Total de clientes activos en Colima",
213
+ "Distribución de clientes en Tepic",
214
+ "Clientes con mayor historial de compras en Planta",
215
+ "Lista de clientes de Guadalajara",
216
+ "Cantidad de clientes en Zapopan",
217
+ "Clientes frecuentes en Vallarta",
218
+ "Clientes top en Colima",
219
+ "Clientes con más compras en Tepic",
220
+ "Clientes destacados en Planta",
221
+ "Clientes valiosos en Guadalajara",
222
+ "Clientes con mayor gasto en Zapopan",
223
+ "Lista de clientes top en Vallarta",
224
+ "Cantidad de clientes activos en Colima",
225
+ "Clientes frecuentes en Tepic",
226
+ "Clientes con más compras en Planta",
227
+ "Clientes más valiosos de Guadalajara",
228
+ "Clientes destacados en Zapopan",
229
+ "Total de clientes top en Vallarta",
230
+ "Clientes con mayor historial de compras en Colima",
231
+ "Clientes frecuentes en Tepic",
232
+ "Clientes más valiosos en Planta",
233
+ "Distribución de clientes por ciudad",
234
+ "Clientes con mayor gasto en Guadalajara",
235
+ "Clientes frecuentes en Zapopan",
236
+ "Clientes más valiosos en Vallarta",
237
+ "Distribución de clientes en Colima",
238
+ "Clientes con más compras en Tepic",
239
+ "Clientes destacados en Planta",
240
+ "Clientes valiosos en Guadalajara",
241
+ "Clientes con mayor historial de compras en Zapopan",
242
+ "Lista de clientes top en Vallarta",
243
+ "Cantidad de clientes por ciudad en Colima",
244
+ "Clientes frecuentes en Tepic",
245
+ "Clientes con más compras en Planta",
246
+ "Clientes más valiosos de Guadalajara",
247
+ "Clientes destacados en Zapopan",
248
+ "Total de clientes top en Vallarta",
249
+ "Clientes con mayor historial de compras en Colima",
250
+ "Clientes frecuentes en Tepic",
251
+ "Clientes más valiosos en Planta",
252
+ "Distribución de clientes por ciudad",
253
+ "Clientes con mayor compra en Guadalajara",
254
+ "Clientes destacados en Zapopan",
255
+ "Lista de clientes por ciudad en Vallarta",
256
+ "Cantidad de clientes en Colima",
257
+ "Clientes top en Tepic",
258
+ "Clientes frecuentes en Planta",
259
+ "Clientes con más compras en Guadalajara",
260
+ "Clientes valiosos en Zapopan",
261
+ "Clientes destacados en Vallarta",
262
+ "Total de clientes por ciudad en Colima",
263
+ "Clientes con mayor historial de compras en Tepic",
264
+ "Clientes frecuentes en Planta",
265
+ "Clientes más valiosos en Guadalajara",
266
+ "Lista de clientes destacados en Zapopan",
267
+ "Cantidad de clientes top en Vallarta",
268
+ "Clientes con más compras en Colima",
269
+ "Clientes valiosos en Tepic",
270
+ "Clientes destacados en Planta",
271
+ "Clientes top por ciudad",
272
+ "Clientes con mayor gasto en Guadalajara",
273
+ "Clientes frecuentes en Zapopan",
274
+ "Clientes más valiosos en Vallarta",
275
+ "Distribución de clientes en Colima",
276
+ "Clientes con más compras en Tepic",
277
+ "Clientes destacados en Planta",
278
+ "Clientes valiosos en Guadalajara",
279
+ "Clientes con mayor historial de compras en Zapopan",
280
+ "Lista de clientes top en Vallarta",
281
+ "Cantidad de clientes por ciudad en Colima"
282
+ ],
283
+ "PRODUCTO_DINERO": [
284
+ "Productos que generan más ingresos",
285
+ "Producto con mayores ventas en dinero",
286
+ "Top productos por ingresos",
287
+ "Ingresos totales por producto",
288
+ "Producto más rentable por unidad",
289
+ "Rentabilidad de cada producto",
290
+ "Productos con mejor margen de ganancia",
291
+ "Ingresos generados por producto",
292
+ "Producto que más dinero genera",
293
+ "Top 10 productos con mayores ingresos",
294
+ "Ingresos por Queso Adobera",
295
+ "Rentabilidad del producto Aderezo Ranch",
296
+ "Cuánto dinero genera Caja Plástica",
297
+ "Ingresos por Arroz con Leche",
298
+ "Ingresos por Caja Plástica",
299
+ "Margen del producto Arroz con Leche",
300
+ "Producto Gelatina con mayor ingreso",
301
+ "Ganancia por unidad de Crema",
302
+ "Ingresos por Empanizador",
303
+ "Producto Jamón top en ingresos",
304
+ "Ventas en dinero de Manteca",
305
+ "Producto que más ingresos genera",
306
+ "Ingresos totales por cada producto",
307
+ "Producto Queso Adobera más rentable",
308
+ "Ganancia del producto Aderezo Ranch",
309
+ "Ingresos de Caja Plástica",
310
+ "Top ingresos de Arroz con Leche",
311
+ "Producto Gelatina que más dinero genera",
312
+ "Rentabilidad de Crema",
313
+ "Ingresos por Empanizador",
314
+ "Producto Jamón más vendido en dinero",
315
+ "Ventas totales de Manteca",
316
+ "Producto que genera más dinero",
317
+ "Dinero generado por producto Queso Adobera",
318
+ "Producto más rentable Aderezo Ranch",
319
+ "Ingresos de Caja Plástica",
320
+ "Producto Arroz con Leche con mayor margen",
321
+ "Ganancia de Gelatina",
322
+ "Ingresos por Crema",
323
+ "Producto Empanizador rentable",
324
+ "Ingresos totales de Jamón",
325
+ "Producto Manteca más rentable",
326
+ "Dinero generado por Queso Adobera",
327
+ "Producto Aderezo Ranch con mayor ingreso",
328
+ "Ingresos del producto Caja Plástica",
329
+ "Top productos por dinero Arroz con Leche",
330
+ "Producto Gelatina más vendido en ingresos",
331
+ "Margen por unidad Crema",
332
+ "Ingresos por Empanizador",
333
+ "Producto Jamón más rentable en dinero",
334
+ "Ventas totales de Manteca",
335
+ "Producto que genera más ingresos",
336
+ "Top ingresos por producto",
337
+ "Producto Queso Adobera más rentable",
338
+ "Dinero generado por Aderezo Ranch",
339
+ "Ingresos del producto Caja Plástica",
340
+ "Producto Arroz con Leche con mayor margen",
341
+ "Ganancia de Gelatina",
342
+ "Ingresos por Crema",
343
+ "Producto Empanizador rentable",
344
+ "Ingresos de Jamón",
345
+ "Producto Manteca más rentable",
346
+ "Dinero generado por Queso Adobera",
347
+ "Producto Aderezo Ranch con mayor ingreso",
348
+ "Ingresos del producto Caja Plástica",
349
+ "Top ingresos de Arroz con Leche",
350
+ "Producto Gelatina más rentable",
351
+ "Rentabilidad de Crema",
352
+ "Ingresos por Empanizador",
353
+ "Producto Jamón más vendido",
354
+ "Ventas totales de Manteca",
355
+ "Producto que genera más dinero",
356
+ "Dinero generado por producto Queso Adobera",
357
+ "Producto más rentable Aderezo Ranch",
358
+ "Ingresos de Caja Plástica",
359
+ "Producto Arroz con Leche con mayor margen",
360
+ "Ganancia de Gelatina",
361
+ "Ingresos por Crema",
362
+ "Producto Empanizador rentable",
363
+ "Ingresos totales de Jamón",
364
+ "Producto Manteca más rentable",
365
+ "Dinero generado por Queso Adobera",
366
+ "Producto Aderezo Ranch con mayor ingreso",
367
+ "Ingresos del producto Caja Plástica",
368
+ "Top productos por dinero Arroz con Leche",
369
+ "Producto Gelatina más vendido",
370
+ "Margen por unidad Crema",
371
+ "Ingresos por Empanizador",
372
+ "Producto Jamón más rentable",
373
+ "Ventas totales de Manteca"
374
+ ],
375
+ "CIUDAD_DINERO": [
376
+ "Ciudades con mayor facturación",
377
+ "Ciudad con más ingresos en el último mes",
378
+ "Total de dinero generado por ciudad",
379
+ "Ingresos totales por ciudad",
380
+ "Ticket promedio por ciudad",
381
+ "Ciudad con mayor ticket promedio",
382
+ "Ingresos generados en Guadalajara",
383
+ "Ingresos generados en Zapopan",
384
+ "Ingresos totales en Colima",
385
+ "Ventas totales en Tepic",
386
+ "Crecimiento de ingresos en Vallarta",
387
+ "Dinero generado por productos en Planta",
388
+ "Ciudad que más dinero genera",
389
+ "Ingresos de Guadalajara por ventas",
390
+ "Facturación total en Zapopan",
391
+ "Ingresos de Colima en el último trimestre",
392
+ "Dinero generado en Tepic",
393
+ "Ciudad Vallarta con mayores ingresos",
394
+ "Facturación total en Planta",
395
+ "Ingresos promedio por ciudad",
396
+ "Ventas totales por ciudad",
397
+ "Ciudad con mayor facturación mensual",
398
+ "Dinero generado por ciudad Guadalajara",
399
+ "Total de ingresos en ciudad Zapopan",
400
+ "Facturación en Colima por productos",
401
+ "Ingresos generados en Tepic por ventas",
402
+ "Crecimiento mensual de ingresos Vallarta",
403
+ "Dinero total generado en Planta",
404
+ "Ciudad con mayores ingresos 2025",
405
+ "Ingresos totales de Guadalajara",
406
+ "Facturación por ciudad Zapopan",
407
+ "Dinero generado en Colima",
408
+ "Ingresos de Tepic por mes",
409
+ "Ventas totales Vallarta",
410
+ "Ingresos promedio de Planta",
411
+ "Total de facturación Guadalajara",
412
+ "Dinero generado por ciudad Zapopan",
413
+ "Facturación Colima por productos",
414
+ "Ingresos en Tepic durante junio",
415
+ "Crecimiento mensual de ventas Vallarta",
416
+ "Dinero generado en Planta este año",
417
+ "Ciudad con más ingresos Guadalajara",
418
+ "Facturación total Zapopan",
419
+ "Ingresos por ciudad Colima",
420
+ "Ventas de Tepic en dinero",
421
+ "Dinero generado Vallarta",
422
+ "Ingresos promedio Planta",
423
+ "Total de dinero generado en Guadalajara",
424
+ "Ciudad con mayor facturación Zapopan",
425
+ "Ingresos totales Colima",
426
+ "Ventas por ciudad Tepic",
427
+ "Dinero generado en Vallarta",
428
+ "Ingresos promedio en Planta",
429
+ "Facturación mensual Guadalajara",
430
+ "Dinero generado en ciudad Zapopan",
431
+ "Total ingresos Colima",
432
+ "Ventas Tepic en dinero",
433
+ "Crecimiento de facturación Vallarta",
434
+ "Dinero generado en Planta",
435
+ "Ciudad con mayores ingresos Guadalajara",
436
+ "Ingresos totales Zapopan",
437
+ "Ventas por ciudad Colima",
438
+ "Dinero generado Tepic",
439
+ "Ingresos promedio Vallarta",
440
+ "Total facturación Planta",
441
+ "Ciudad con mayor ticket promedio Guadalajara",
442
+ "Ingresos generados Zapopan",
443
+ "Ventas totales Colima",
444
+ "Dinero generado Tepic",
445
+ "Ingresos de Vallarta",
446
+ "Facturación Planta",
447
+ "Ciudad que más dinero genera Guadalajara",
448
+ "Ingresos de Zapopan por productos",
449
+ "Ventas en Colima",
450
+ "Dinero generado en Tepic",
451
+ "Total ingresos Vallarta",
452
+ "Ticket promedio en Planta",
453
+ "Facturación total Guadalajara",
454
+ "Ingresos generados Zapopan",
455
+ "Ventas de Colima en dinero",
456
+ "Dinero generado Tepic",
457
+ "Ingresos promedio Vallarta",
458
+ "Total facturación Planta",
459
+ "Ciudad con más ingresos Guadalajara",
460
+ "Dinero generado Zapopan",
461
+ "Ingresos por ciudad Colima",
462
+ "Ventas Tepic en dinero",
463
+ "Dinero total Vallarta",
464
+ "Ingresos promedio Planta",
465
+ "Facturación Guadalajara",
466
+ "Dinero generado Zapopan",
467
+ "Total ingresos Colima",
468
+ "Ventas Tepic",
469
+ "Dinero generado Vallarta",
470
+ "Ingresos promedio Planta",
471
+ "Ciudad con mayor facturación Guadalajara",
472
+ "Ingresos totales Zapopan",
473
+ "Ventas por ciudad Colima",
474
+ "Dinero generado Tepic",
475
+ "Ingresos promedio Vallarta",
476
+ "Total facturación Planta"
477
+ ],
478
+ "CLIENTE_DINERO": [
479
+ "Top clientes por valor de compras",
480
+ "Clientes que más dinero han gastado",
481
+ "Clientes con mayor ticket promedio",
482
+ "Total de dinero gastado por cliente",
483
+ "Clientes con compras de alto valor",
484
+ "Clientes con mayor frecuencia de compra",
485
+ "Clientes con mayor potencial de crecimiento",
486
+ "Valor total de compras por cliente",
487
+ "Clientes que más contribuyen a los ingresos",
488
+ "Clientes con mayores ingresos acumulados",
489
+ "Clientes con compras recientes de alto valor",
490
+ "Clientes más valiosos en el último mes",
491
+ "Clientes que generaron más dinero este año",
492
+ "Clientes con mayor gasto promedio por compra",
493
+ "Clientes con más compras de alto ticket",
494
+ "Clientes con mayores ingresos totales",
495
+ "Clientes que contribuyeron más al total de ventas",
496
+ "Clientes con ticket promedio superior a 500",
497
+ "Clientes con historial de compras lucrativo",
498
+ "Clientes que representan más del 10% de ingresos",
499
+ "Clientes con mayor facturación acumulada",
500
+ "Clientes con mayor margen de gasto",
501
+ "Clientes con compras frecuentes de alto valor",
502
+ "Clientes con mayor crecimiento en compras",
503
+ "Clientes más rentables",
504
+ "Clientes que han generado más ingresos",
505
+ "Clientes con mayor dinero invertido en productos",
506
+ "Clientes con mayor ticket promedio mensual",
507
+ "Clientes con mayor volumen de compras en dinero",
508
+ "Clientes que más aportan a los ingresos totales",
509
+ "Clientes con gasto acumulado alto",
510
+ "Clientes que más han comprado este trimestre",
511
+ "Clientes con mayor valor de compras históricas",
512
+ "Clientes con mayor ticket promedio anual",
513
+ "Clientes con más compras de productos caros",
514
+ "Clientes con mayor potencial de facturación",
515
+ "Clientes que generaron más dinero este mes",
516
+ "Clientes con mayor valor total de pedidos",
517
+ "Clientes con compras frecuentes y altas",
518
+ "Clientes que generan ingresos consistentes",
519
+ "Clientes con mayor gasto promedio por periodo",
520
+ "Clientes con mayor contribución a ingresos",
521
+ "Clientes con más ventas acumuladas",
522
+ "Clientes con valor de compras superior al promedio",
523
+ "Clientes con mayor ticket promedio reciente",
524
+ "Clientes con compras de alto valor acumuladas",
525
+ "Clientes con mayor crecimiento de ingresos",
526
+ "Clientes que más gastaron en el último año",
527
+ "Clientes con mayor facturación mensual",
528
+ "Clientes con más ingresos generados",
529
+ "Clientes con historial de compras rentable",
530
+ "Clientes que generan más dinero por compra",
531
+ "Clientes con mayor ticket promedio histórico",
532
+ "Clientes con compras frecuentes y de alto valor",
533
+ "Clientes con mayor aporte a ventas totales",
534
+ "Clientes que más gastan por producto",
535
+ "Clientes con mayor ticket promedio acumulado",
536
+ "Clientes con más ingresos por periodo",
537
+ "Clientes con compras de alto valor este mes",
538
+ "Clientes más valiosos económicamente",
539
+ "Clientes que generan más ingresos anuales",
540
+ "Clientes con mayor gasto mensual",
541
+ "Clientes con más compras lucrativas",
542
+ "Clientes con alto valor de compras",
543
+ "Clientes con mayor aporte al total de ventas",
544
+ "Clientes que más contribuyen al dinero generado",
545
+ "Clientes con ticket promedio superior a la media",
546
+ "Clientes con compras frecuentes y rentables",
547
+ "Clientes con mayor gasto total acumulado",
548
+ "Clientes con mayor facturación anual",
549
+ "Clientes que generan más dinero por periodo",
550
+ "Clientes con mayor ticket promedio trimestral",
551
+ "Clientes con compras valiosas históricas",
552
+ "Clientes con mayor gasto promedio anual",
553
+ "Clientes con más ingresos generados por compras",
554
+ "Clientes con compras frecuentes de alto ticket",
555
+ "Clientes con mayor valor acumulado de compras",
556
+ "Clientes con mayor contribución económica",
557
+ "Clientes con compras frecuentes de alto valor",
558
+ "Clientes más rentables históricamente",
559
+ "Clientes con mayor ticket promedio mensual",
560
+ "Clientes con mayor gasto acumulado",
561
+ "Clientes con más ingresos generados por compras",
562
+ "Clientes con historial de compras rentable",
563
+ "Clientes que más gastan en productos",
564
+ "Clientes con mayor ticket promedio reciente",
565
+ "Clientes con compras de alto valor totales",
566
+ "Clientes con mayor crecimiento económico",
567
+ "¿Cuánto dinero gastó cada cliente este mes?",
568
+ "¿Cuánto dinero generaron los clientes más valiosos?",
569
+ "¿Cuánto gastó cada cliente en promedio?",
570
+ "¿Cuánto aportó cada cliente a los ingresos totales?",
571
+ "¿Cuánto dinero acumularon los clientes top 10?",
572
+ "¿Cuánto gastaron los clientes en el último trimestre?",
573
+ "¿Cuánto valor generaron los clientes frecuentes?",
574
+ "¿Cuánto dinero invirtieron los clientes más importantes?",
575
+ "¿Cuánto representa cada cliente en los ingresos totales?",
576
+ "¿Cuánto gastó cada cliente en productos de alto valor?"
577
+ ],
578
+ "TIEMPO_DINERO": [
579
+ "¿Cuánto vendimos este mes?",
580
+ "¿Cuál fue el mes con mayores ventas este año?",
581
+ "¿Cuánto generamos en ingresos en junio?",
582
+ "¿Cuál es la tendencia de ventas mensuales?",
583
+ "Ventas por día de la semana",
584
+ "Promedio de ventas diarias",
585
+ "¿Cuánto se vendió el lunes pasado?",
586
+ "¿Cuál fue el día con más ingresos este mes?",
587
+ "Total de ventas acumuladas por mes",
588
+ "¿Cuánto crecieron nuestras ventas comparando mayo y junio?",
589
+ "Ventas semanales del mes actual",
590
+ "¿Cuánto facturamos en la última semana?",
591
+ "Crecimiento interanual de ventas",
592
+ "Comparativa de ingresos entre años",
593
+ "Ingresos generados por mes",
594
+ "¿Cuánto vendimos en el trimestre pasado?",
595
+ "Ventas históricas por mes",
596
+ "¿Cuál es el promedio de ingresos mensuales?",
597
+ "Ingresos diarios del último mes",
598
+ "Total de ventas del último trimestre",
599
+ "¿Cuánto aumentaron las ventas este año respecto al anterior?",
600
+ "Ventas acumuladas por semana",
601
+ "Promedio de ingresos por día de la semana",
602
+ "¿Cuál fue la semana con más ventas?",
603
+ "Crecimiento mensual de ingresos",
604
+ "Ventas históricas por trimestre",
605
+ "Ingresos totales del año",
606
+ "¿Cuánto ingresamos en cada mes?",
607
+ "Total de ventas por semestre",
608
+ "¿Cuál fue el mes más rentable?",
609
+ "Ventas promedio mensuales",
610
+ "Ingresos generados semanalmente",
611
+ "Comparativa mensual de ingresos",
612
+ "¿Cuánto se vendió por mes y categoría?",
613
+ "Ventas por día y ciudad",
614
+ "¿Cuál fue el día más productivo de ventas?",
615
+ "Ingresos mensuales del año anterior",
616
+ "Promedio de ventas anuales",
617
+ "Crecimiento anual de ingresos",
618
+ "Total de ingresos por trimestre",
619
+ "¿Cuánto generamos el trimestre pasado?",
620
+ "Ventas promedio por mes",
621
+ "Ingresos acumulados trimestrales",
622
+ "Comparativa de ventas anuales",
623
+ "¿Cuál fue la venta más alta por mes?",
624
+ "Total de ventas por día",
625
+ "Ventas por mes y cliente",
626
+ "¿Cuánto vendió cada mes nuestro producto estrella?",
627
+ "Total de ventas del mes pasado",
628
+ "Ventas del año actual por mes",
629
+ "Crecimiento mensual comparativo",
630
+ "Ingresos generados mes a mes",
631
+ "Total de ventas diarias acumuladas",
632
+ "¿Cuál fue el promedio de ventas por día esta semana?",
633
+ "¿Cuánto incrementaron los ingresos en comparación con el mes anterior?"
634
+ ],
635
+ "CIUDADES": [
636
+ "¿Cuántas ciudades diferentes tenemos registradas?",
637
+ "Lista de todas las ciudades registradas",
638
+ "¿Cuáles son las ciudades que tenemos en la base?",
639
+ "Nombra las ciudades únicas",
640
+ "Dame un listado de ciudades",
641
+ "¿Cuántas ciudades distintas aparecen en nuestra base?",
642
+ "Muestra las ciudades disponibles",
643
+ "Listado de ciudades al azar",
644
+ "¿Cuáles son las ciudades registradas?",
645
+ "Ciudades únicas de nuestra base",
646
+ "Nombra algunas ciudades",
647
+ "Dame las ciudades que existen en la base",
648
+ "¿Cuántas ciudades distintas tenemos actualmente?",
649
+ "Lista de ciudades conocidas en la base",
650
+ "Dame un listado de ciudades únicas",
651
+ "¿Cuáles ciudades están registradas?",
652
+ "Muestra todas las ciudades",
653
+ "Nombra todas las ciudades de la base",
654
+ "Dame algunas ciudades al azar",
655
+ "Listado de ciudades distintas",
656
+ "¿Cuántas ciudades tenemos registradas?",
657
+ "Dame ciudades únicas",
658
+ "Lista completa de ciudades",
659
+ "Nombra las ciudades presentes en la base",
660
+ "¿Cuáles ciudades están en nuestra base?",
661
+ "Muestra las ciudades únicas",
662
+ "Dame las ciudades existentes",
663
+ "Lista de ciudades al azar de la base",
664
+ "¿Cuántas ciudades diferentes hay?",
665
+ "Nombra algunas ciudades de la base",
666
+ "Dame todas las ciudades registradas",
667
+ "Listado de ciudades únicas en la base",
668
+ "¿Cuáles son todas las ciudades registradas?",
669
+ "Dame un listado de ciudades disponibles",
670
+ "Lista de ciudades según el registro",
671
+ "¿Cuántas ciudades distintas existen?",
672
+ "Nombra las ciudades que tenemos",
673
+ "Dame ciudades registradas",
674
+ "Listado completo de ciudades",
675
+ "¿Cuáles ciudades existen en la base?",
676
+ "Muestra algunas ciudades",
677
+ "Dame todas las ciudades únicas",
678
+ "Lista de ciudades presentes en la base",
679
+ "¿Cuántas ciudades tenemos en total?",
680
+ "Nombra ciudades al azar",
681
+ "Dame ciudades diferentes",
682
+ "Listado de todas las ciudades únicas",
683
+ "¿Cuáles ciudades tenemos registradas?",
684
+ "Dame un listado de ciudades al azar",
685
+ "Nombra ciudades existentes en la base",
686
+ "Lista de ciudades únicas en el sistema",
687
+ "¿Cuántas ciudades únicas hay en la base?",
688
+ "Dame algunas ciudades registradas",
689
+ "Listado de ciudades conocidas",
690
+ "¿Cuáles son las ciudades únicas?",
691
+ "Dame todas las ciudades disponibles",
692
+ "Lista de ciudades diferentes",
693
+ "¿Cuántas ciudades únicas tenemos actualmente?",
694
+ "Nombra algunas ciudades al azar",
695
+ "Dame un listado completo de ciudades",
696
+ "Lista de todas las ciudades de la base",
697
+ "¿Cuáles ciudades existen actualmente?",
698
+ "Dame ciudades únicas registradas",
699
+ "Nombra todas las ciudades del sistema",
700
+ "Listado de ciudades registradas",
701
+ "¿Cuántas ciudades distintas se encuentran en la base?",
702
+ "Dame un listado de ciudades existentes",
703
+ "Lista completa de ciudades únicas",
704
+ "¿Cuáles son las ciudades disponibles?",
705
+ "Dame algunas ciudades únicas",
706
+ "Listado de ciudades al azar",
707
+ "¿Cuántas ciudades tenemos registradas actualmente?",
708
+ "Nombra ciudades presentes en la base",
709
+ "Dame un listado de todas las ciudades únicas",
710
+ "Lista de ciudades que existen en el sistema",
711
+ "¿Cuáles ciudades están registradas en la base?",
712
+ "Dame todas las ciudades diferentes",
713
+ "Nombra algunas ciudades de la base",
714
+ "Listado de ciudades distintas y únicas",
715
+ "¿Cuántas ciudades existen en la base actualmente?",
716
+ "Dame ciudades únicas disponibles",
717
+ "Lista de ciudades registradas en la base",
718
+ "¿Cuáles son las ciudades al azar de la base?",
719
+ "Dame un listado de ciudades diferentes",
720
+ "Nombra todas las ciudades únicas registradas"
721
+ ],
722
+ "CLIENTES": [
723
+ "¿Cuántos clientes diferentes tenemos registrados?",
724
+ "Lista de todos los clientes registrados",
725
+ "¿Cuáles son los clientes que tenemos en la base?",
726
+ "Nombra los clientes únicos",
727
+ "Dame un listado de clientes",
728
+ "¿Cuántos clientes distintos aparecen en nuestra base?",
729
+ "Muestra los clientes disponibles",
730
+ "Listado de clientes al azar",
731
+ "¿Cuáles son los clientes registrados?",
732
+ "Clientes únicos de nuestra base",
733
+ "Nombra algunos clientes",
734
+ "Dame los clientes que existen en la base",
735
+ "¿Cuántos clientes distintos tenemos actualmente?",
736
+ "Lista de clientes conocidos en la base",
737
+ "Dame un listado de clientes únicos",
738
+ "¿Cuáles clientes están registrados?",
739
+ "Muestra todos los clientes",
740
+ "Nombra todos los clientes de la base",
741
+ "Dame algunos clientes al azar",
742
+ "Listado de clientes distintos",
743
+ "¿Cuántos clientes tenemos registrados?",
744
+ "Dame clientes únicos",
745
+ "Lista completa de clientes",
746
+ "Nombra los clientes presentes en la base",
747
+ "¿Cuáles clientes están en nuestra base?",
748
+ "Muestra los clientes únicos",
749
+ "Dame los clientes existentes",
750
+ "Lista de clientes al azar de la base",
751
+ "¿Cuántos clientes diferentes hay?",
752
+ "Nombra algunos clientes de la base",
753
+ "Dame todos los clientes registrados",
754
+ "Listado de clientes únicos en la base",
755
+ "¿Cuáles son todos los clientes registrados?",
756
+ "Dame un listado de clientes disponibles",
757
+ "Lista de clientes según el registro",
758
+ "¿Cuántos clientes distintos existen?",
759
+ "Nombra los clientes que tenemos",
760
+ "Dame clientes registrados",
761
+ "Listado completo de clientes",
762
+ "¿Cuáles clientes existen en la base?",
763
+ "Muestra algunos clientes",
764
+ "Dame todos los clientes únicos",
765
+ "Lista de clientes presentes en la base",
766
+ "¿Cuántos clientes tenemos en total?",
767
+ "Nombra clientes al azar",
768
+ "Dame clientes diferentes",
769
+ "Listado de todos los clientes únicos",
770
+ "¿Cuáles clientes tenemos registrados?",
771
+ "Dame un listado de clientes al azar",
772
+ "Nombra clientes existentes en la base",
773
+ "Lista de clientes únicos en el sistema",
774
+ "¿Cuántos clientes únicos hay en la base?",
775
+ "Dame algunos clientes registrados",
776
+ "Listado de clientes conocidos",
777
+ "¿Cuáles son los clientes únicos?",
778
+ "Dame todos los clientes disponibles",
779
+ "Lista de clientes diferentes",
780
+ "¿Cuántos clientes únicos tenemos actualmente?",
781
+ "Nombra algunos clientes al azar",
782
+ "Dame un listado completo de clientes",
783
+ "Lista de todos los clientes de la base",
784
+ "¿Cuáles clientes existen actualmente?",
785
+ "Dame clientes únicos registrados",
786
+ "Nombra todos los clientes del sistema",
787
+ "Listado de clientes registrados",
788
+ "¿Cuántos clientes distintos se encuentran en la base?",
789
+ "Dame un listado de clientes existentes",
790
+ "Lista completa de clientes únicos",
791
+ "¿Cuáles son los clientes disponibles?",
792
+ "Dame algunos clientes únicos",
793
+ "Listado de clientes al azar",
794
+ "¿Cuántos clientes tenemos registrados actualmente?",
795
+ "Nombra clientes presentes en la base",
796
+ "Dame un listado de todos los clientes únicos",
797
+ "Lista de clientes que existen en el sistema",
798
+ "¿Cuáles clientes están registrados en la base?",
799
+ "Dame todos los clientes diferentes",
800
+ "Nombra algunos clientes de la base",
801
+ "Listado de clientes distintos y únicos",
802
+ "¿Cuántos clientes existen en la base actualmente?",
803
+ "Dame clientes únicos disponibles",
804
+ "Lista de clientes registrados en la base",
805
+ "¿Cuáles son los clientes al azar de la base?",
806
+ "Dame un listado de clientes diferentes",
807
+ "Nombra todos los clientes únicos registradas"
808
+ ],
809
+ "VENTAS": [
810
+ "¿Desde cuándo tenemos registros de ventas?",
811
+ "¿Cuál es la primera fecha con ventas registradas?",
812
+ "¿Cuál es la última fecha con ventas registradas?",
813
+ "Rango de fechas de nuestro historial de ventas",
814
+ "¿Cuántos días diferentes con ventas tenemos?",
815
+ "Número total de días con actividad de ventas",
816
+ "¿Cuántas transacciones totales se han registrado?",
817
+ "Total de ventas realizadas hasta la fecha",
818
+ "Promedio de ventas por día",
819
+ "Valor promedio de ventas diarias",
820
+ "Día con mayor número de transacciones",
821
+ "Día con menor número de transacciones",
822
+ "Valor promedio de una venta",
823
+ "Cantidad promedio de productos por venta",
824
+ "Valor máximo de una venta registrada",
825
+ "Valor mínimo de una venta registrada",
826
+ "¿Cuántas ventas se realizaron en la primera semana de registros?",
827
+ "¿Cuál fue el día con más ingresos?",
828
+ "¿Cuál fue el día con menos ingresos?",
829
+ "Número total de ventas por mes",
830
+ "Promedio de ventas por mes",
831
+ "Mes con mayor facturación",
832
+ "Mes con menor facturación",
833
+ "¿Cuántas ventas superaron el valor de 1000?",
834
+ "Número de ventas con más de 10 productos",
835
+ "Día con mayor cantidad de productos vendidos",
836
+ "Día con menor cantidad de productos vendidos",
837
+ "Promedio de productos vendidos por día",
838
+ "¿Cuál es la venta más reciente registrada?",
839
+ "¿Cuál fue la venta más antigua registrada?",
840
+ "Cantidad total de productos vendidos hasta la fecha",
841
+ "Total de transacciones con valor superior a 500",
842
+ "Promedio de ingresos por transacción",
843
+ "Venta promedio en los últimos 7 días",
844
+ "Venta promedio en los últimos 30 días",
845
+ "Valor total de ventas en los últimos 7 días",
846
+ "Valor total de ventas en los últimos 30 días",
847
+ "Día con más transacciones en la última semana",
848
+ "Día con menos transacciones en la última semana",
849
+ "Número de ventas por trimestre",
850
+ "Promedio de ventas por trimestre",
851
+ "Trimestre con mayor volumen de ventas",
852
+ "Trimestre con menor volumen de ventas",
853
+ "Número total de productos vendidos por semana",
854
+ "Promedio de ventas por semana",
855
+ "Semana con mayor número de transacciones",
856
+ "Semana con menor número de transacciones",
857
+ "Cantidad total de ventas registradas por año",
858
+ "Promedio de ventas anuales",
859
+ "Año con mayor número de transacciones",
860
+ "Año con menor número de transacciones",
861
+ "¿Cuántas ventas se realizaron en días hábiles?",
862
+ "¿Cuántas ventas se realizaron en fines de semana?",
863
+ "Promedio de ventas en días hábiles",
864
+ "Promedio de ventas en fines de semana",
865
+ "Valor promedio de venta en días hábiles",
866
+ "Valor promedio de venta en fines de semana",
867
+ "Día con mayor ticket promedio",
868
+ "Día con menor ticket promedio",
869
+ "Número de ventas por hora del día",
870
+ "Hora con mayor número de transacciones",
871
+ "Hora con menor número de transacciones",
872
+ "Promedio de productos vendidos por hora",
873
+ "Promedio de ingresos por hora",
874
+ "Cantidad de ventas por rango de precios",
875
+ "Total de ventas por rango de cantidad de productos",
876
+ "Promedio de ventas por categoría de producto",
877
+ "Día con mayor venta de productos específicos",
878
+ "Día con menor venta de productos específicos",
879
+ "Total de ventas por día de la semana",
880
+ "Promedio de ventas por día de la semana",
881
+ "Día de la semana con más ingresos",
882
+ "Día de la semana con menos ingresos",
883
+ "Número de transacciones consecutivas por día",
884
+ "Valor total de transacciones consecutivas por día",
885
+ "Cantidad promedio de ventas por cliente",
886
+ "Promedio de ingresos por cliente",
887
+ "Cliente con mayor ticket promedio",
888
+ "Cliente con menor ticket promedio",
889
+ "¿Cuánto hemos vendido desde el inicio del mes?",
890
+ "¿Cuánto hemos vendido hasta la fecha actual?",
891
+ "Total de productos vendidos en los últimos 7 días",
892
+ "Total de productos vendidos en los últimos 30 días",
893
+ "Promedio de ventas diarias en los últimos 7 días",
894
+ "Promedio de ventas diarias en los últimos 30 días",
895
+ "Día con más ventas acumuladas",
896
+ "Día con menos ventas acumuladas",
897
+ "Valor total de ventas en un período específico",
898
+ "Promedio de ventas en un período específico",
899
+ "Venta promedio por transacción en un período específico"
900
+ ],
901
+ "PRODUCTOS": [
902
+ "¿Qué producto se vende siempre junto a otro producto?",
903
+ "¿Cuál es el producto más vendido en toda la base de datos?",
904
+ "¿Cuáles son los 10 productos con más ventas históricas?",
905
+ "¿Qué producto genera el mayor ingreso neto?",
906
+ "¿Qué producto genera el menor ingreso neto?",
907
+ "¿Cuál es el ticket promedio por producto?",
908
+ "¿Qué productos nunca se han vendido?",
909
+ "¿Cuál es la venta máxima alcanzada por un solo producto?",
910
+ "¿Cuál es la venta mínima registrada por un producto?",
911
+ "¿Qué producto aparece en más transacciones únicas?",
912
+ "¿Qué producto tiene la mayor cantidad total vendida?",
913
+ "¿Qué producto tiene la menor cantidad total vendida?",
914
+ "¿Qué productos se han vendido solo una vez?",
915
+ "¿Cuáles son los productos que han tenido más de 1,000 ventas?",
916
+ "¿Qué productos han tenido menos de 10 ventas?",
917
+ "¿Cuál es el valor promedio de venta por producto?",
918
+ "¿Qué producto genera más ingresos en promedio por transacción?",
919
+ "¿Qué producto genera menos ingresos en promedio por transacción?",
920
+ "¿Cuál es el margen entre el producto más caro y el más barato vendido?",
921
+ "¿Qué productos se vendieron por primera vez este año?",
922
+ "¿Qué productos ya no se han vendido en los últimos 6 meses?",
923
+ "¿Qué producto tuvo la primera venta registrada en la base?",
924
+ "¿Qué producto tuvo la última venta registrada?",
925
+ "¿Qué producto se ha mantenido con ventas constantes cada mes?",
926
+ "¿Qué producto ha tenido más crecimiento de ventas en el último año?",
927
+ "¿Qué producto ha tenido la caída más fuerte en ventas?",
928
+ "¿Qué producto se vende más en fines de semana?",
929
+ "¿Qué producto se vende más entre semana?",
930
+ "¿Cuál es el producto con más ingresos generados en un solo día?",
931
+ "¿Cuál es el producto con menos ingresos generados en un solo día?",
932
+ "¿Qué productos se vendieron en todas las semanas del último año?",
933
+ "¿Qué productos se vendieron en todos los meses del historial?",
934
+ "¿Qué productos han aparecido en ventas en más de 3 años distintos?",
935
+ "Cinco artículos que más rotación tuvieron en 2025",
936
+ "¿Cuáles son los productos estrella de este año (5 principales)?",
937
+ "Productos con más éxito en ventas durante 2025 (top 5)",
938
+ "Dame los cinco artículos que encabezan las ventas de este año",
939
+ "Top 5 en ventas por producto en el año en curso",
940
+ "Lista de los cinco productos más vendidos en el año",
941
+ "¿Cuáles son los 5 artículos más solicitados en 2025?",
942
+ "Productos con mayor popularidad este año (cinco principales)",
943
+ "Ranking de los productos más vendidos (top 5 de 2025)",
944
+ "Enséñame el listado de los cinco más vendidos este año",
945
+ "Cinco artículos con más ventas registradas en 2025",
946
+ "Top 5 de ventas acumuladas por producto en el año actual",
947
+ "Los 5 productos más vendidos a lo largo de 2025",
948
+ "Productos con mejor desempeño en ventas en 2025 (top 5)",
949
+ "Los cinco artículos más comprados durante este año",
950
+ "¿Qué productos lideraron las ventas de 2025 (top 5)?",
951
+ "Cinco productos con más ventas en este año",
952
+ "Top 5 de artículos con más demanda en el 2025",
953
+ "Ranking de los cinco productos con mayor número de ventas",
954
+ "Los 5 productos con mayor éxito en ventas este año",
955
+ "Productos que tuvieron más compras en 2025 (top 5)",
956
+ "Lista de los cinco más populares en ventas de este año",
957
+ "Cinco artículos que más se vendieron en el año actual",
958
+ "Top 5 productos con más ventas en lo que va del 2025",
959
+ "¿Qué 5 productos encabezan las ventas este año?",
960
+ "Productos estrella del 2025 (top 5 más vendidos)",
961
+ "¿Qué producto se vende más en la segunda mitad del año?",
962
+ "¿Qué producto fue el más vendido en el último mes?",
963
+ "¿Qué producto fue el menos vendido en el último mes?",
964
+ "¿Qué productos tuvieron ventas en cada trimestre del año pasado?",
965
+ "¿Qué producto fue el más vendido en el último trimestre?",
966
+ "¿Qué producto fue el menos vendido en el último trimestre?",
967
+ "¿Qué productos han sido tendencia solo por un periodo corto?",
968
+ "¿Qué productos han mantenido ventas consistentes durante todo el historial?",
969
+ "¿Qué producto aparece con mayor frecuencia en grandes compras?",
970
+ "¿Qué producto aparece con mayor frecuencia en compras pequeñas?",
971
+ "¿Qué producto suele acompañar a compras de alto valor?",
972
+ "¿Qué producto suele aparecer en compras de bajo valor?",
973
+ "¿Qué productos tienen ventas exclusivamente en ciertos meses?",
974
+ "¿Qué productos se han dejado de vender por más de un año?",
975
+ "¿Qué productos fueron introducidos en los últimos dos años?",
976
+ "¿Cuál es el producto más nuevo en el catálogo de ventas?",
977
+ "¿Cuál es el producto más antiguo con ventas registradas?",
978
+ "¿Qué producto acumula el mayor total de cantidad física vendida?",
979
+ "¿Qué producto acumula el menor total de cantidad física vendida?",
980
+ "¿Qué producto tiene mayor dispersión en sus precios de venta?",
981
+ "¿Qué producto tiene precios más estables?",
982
+ "¿Qué producto se ha vendido en más días distintos?",
983
+ "¿Qué producto se ha vendido en menos días distintos?",
984
+ "¿Qué producto tiene mayor promedio de cantidad por transacción?",
985
+ "¿Qué producto tiene menor promedio de cantidad por transacción?",
986
+ "¿Qué productos se han vendido cada mes del último año?",
987
+ "¿Qué productos se han vendido solo en un mes específico?",
988
+ "¿Qué productos presentan un patrón estacional de ventas?",
989
+ "¿Qué productos nunca han aparecido juntos en una misma transacción?",
990
+ "¿Qué producto fue el más vendido en diciembre del último año?",
991
+ "¿Qué producto fue el más vendido en enero del último año?",
992
+ "¿Qué producto se vendió el primer día registrado?",
993
+ "¿Qué producto se vendió el último día registrado?"
994
+ ],
995
+ "CLIENTES_CERO_TIEMPO": [
996
+ "¿Cuántos clientes cero tuvimos en enero?",
997
+ "Dame el total de clientes cero en febrero",
998
+ "Cantidad de clientes cero registrados en marzo",
999
+ "Clientes cero correspondientes a abril",
1000
+ "¿Cuántos clientes cero hubo en mayo?",
1001
+ "Total de clientes cero que tuvimos en junio",
1002
+ "Número de clientes cero en julio",
1003
+ "Clientes cero contabilizados en agosto",
1004
+ "¿Cuántos clientes cero aparecieron en septiembre?",
1005
+ "Clientes cero en el mes de octubre",
1006
+ "Total de clientes cero en noviembre",
1007
+ "¿Cuántos clientes cero cerramos en diciembre?",
1008
+ "Clientes cero durante el primer trimestre",
1009
+ "Dame la cantidad de clientes cero en el segundo trimestre",
1010
+ "Número de clientes cero del tercer trimestre",
1011
+ "Total de clientes cero en el cuarto trimestre",
1012
+ "Clientes cero que hubo en el primer semestre",
1013
+ "Cantidad de clientes cero en el segundo semestre",
1014
+ "¿Cuántos clientes cero registramos esta semana?",
1015
+ "Clientes cero durante la semana pasada",
1016
+ "Total de clientes cero en la última semana del mes",
1017
+ "Número de clientes cero de hace dos semanas",
1018
+ "Clientes cero contabilizados en los últimos siete días",
1019
+ "Dame los clientes cero que se generaron este fin de semana",
1020
+ "Cantidad de clientes cero durante el fin de semana pasado",
1021
+ "Clientes cero que tuvimos ayer",
1022
+ "Número de clientes cero detectados hoy",
1023
+ "Clientes cero en los últimos tres días",
1024
+ "Total de clientes cero de la última quincena",
1025
+ "Cantidad de clientes cero de esta quincena",
1026
+ "Clientes cero que hubo en la primera quincena del mes",
1027
+ "Clientes cero en la segunda quincena del mes",
1028
+ "¿Cuántos clientes cero tuvimos en los últimos 30 días?",
1029
+ "Clientes cero en los últimos 60 días",
1030
+ "Cantidad de clientes cero durante los últimos 90 días",
1031
+ "Número de clientes cero del último semestre",
1032
+ "Clientes cero que aparecieron en los últimos 6 meses",
1033
+ "Clientes cero acumulados este año",
1034
+ "Clientes cero registrados el año pasado",
1035
+ "¿Cuántos clientes cero hubo en 2022?",
1036
+ "Total de clientes cero que tuvimos en 2023",
1037
+ "Número de clientes cero en 2024",
1038
+ "Clientes cero durante el año actual",
1039
+ "Clientes cero en la primera mitad del año",
1040
+ "Clientes cero en la segunda mitad del año",
1041
+ "Cantidad de clientes cero durante el primer trimestre de 2023",
1042
+ "Número de clientes cero en el segundo trimestre de 2023",
1043
+ "Clientes cero que aparecieron en el tercer trimestre de 2023",
1044
+ "Total de clientes cero en el cuarto trimestre de 2023",
1045
+ "Clientes cero registrados durante el verano",
1046
+ "Número de clientes cero en invierno",
1047
+ "Clientes cero contabilizados en primavera",
1048
+ "Clientes cero en otoño",
1049
+ "Clientes cero durante las vacaciones de verano",
1050
+ "Cantidad de clientes cero en las fiestas decembrinas",
1051
+ "Clientes cero que tuvimos en Semana Santa",
1052
+ "Clientes cero en el Buen Fin",
1053
+ "Número de clientes cero durante las vacaciones de invierno",
1054
+ "Clientes cero en la temporada navideña",
1055
+ "¿Cuántos clientes cero aparecieron en Black Friday?",
1056
+ "Clientes cero detectados en Cyber Monday",
1057
+ "Cantidad de clientes cero en el Día de las Madres",
1058
+ "Clientes cero en el Día del Padre",
1059
+ "Clientes cero durante el regreso a clases",
1060
+ "Número de clientes cero en el Día de la Independencia",
1061
+ "Clientes cero que tuvimos en el Día de Muertos",
1062
+ "Clientes cero en el Día del Trabajo",
1063
+ "Total de clientes cero en el Día de la Revolución",
1064
+ "Clientes cero que aparecieron en Año Nuevo",
1065
+ "Clientes cero durante el Día de Reyes",
1066
+ "Clientes cero en San Valentín",
1067
+ "Cantidad de clientes cero en Halloween",
1068
+ "Número de clientes cero durante Pascua",
1069
+ "Clientes cero registrados en marzo de 2022",
1070
+ "Clientes cero en septiembre de 2023",
1071
+ "Clientes cero contabilizados en diciembre de 2024",
1072
+ "Cantidad de clientes cero de octubre del año pasado",
1073
+ "¿Cuántos clientes cero tuvimos en abril de este año?",
1074
+ "Clientes cero que aparecieron en julio del año anterior",
1075
+ "Número de clientes cero que registramos en junio 2022",
1076
+ "Clientes cero que hubo en mayo 2023",
1077
+ "Cantidad de clientes cero en noviembre de 2021",
1078
+ "Clientes cero de agosto del año pasado",
1079
+ "Clientes cero que surgieron en enero de este año",
1080
+ "¿Cuántos clientes cero aparecieron en febrero de 2024?"
1081
+ ]
1082
+ }