Abimael Torcate Claude commited on
Commit
3d7739f
·
1 Parent(s): da316b1

Add database population script with realistic test data

Browse files

- Create 20 checklists based on public procurement standards (ETP and TR)
- Simulate diverse completion scenarios (15% to 100% progress)
- Generate realistic user interactions over time periods (20-220 days)
- Include various process types: systems, services, acquisitions, consultancy
- Populate database with meaningful data for dashboard testing
- Enable comprehensive testing of all application features

Categories created:
- 10 ETP checklists (Technical Preliminary Studies)
- 10 TR checklists (Terms of Reference)
- Multiple completion scenarios for informative analytics
- Time-distributed interactions simulating real user behavior

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

Co-Authored-By: Claude <noreply@anthropic.com>

Files changed (1) hide show
  1. populate_database.py +679 -0
populate_database.py ADDED
@@ -0,0 +1,679 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Script para popular o banco de dados com checklists de teste baseados nas normas de compras públicas"""
2
+
3
+ import uuid
4
+ import random
5
+ from datetime import datetime, timedelta
6
+ from utils.database import get_db_connection
7
+
8
+ def create_etp_checklists():
9
+ """Cria 10 checklists baseados nas normas ETP (Estudo Técnico Preliminar)"""
10
+
11
+ etp_checklists = [
12
+ {
13
+ "name": "ETP - Sistema de Gestão Eletrônica",
14
+ "numero_processo": "2024/001-ETP",
15
+ "items": [
16
+ "Evidenciar problema a ser resolvido",
17
+ "Definir melhor solução proposta",
18
+ "Avaliar viabilidade técnica",
19
+ "Avaliar viabilidade socioeconômica",
20
+ "Avaliar viabilidade ambiental",
21
+ "Verificar alinhamento com Plano de Contratações Anual",
22
+ "Verificar alinhamento com Plano Diretor de Logística Sustentável",
23
+ "Registrar descrição da necessidade da contratação",
24
+ "Definir requisitos da contratação",
25
+ "Realizar levantamento de mercado",
26
+ "Analisar alternativas possíveis",
27
+ "Justificar escolha técnica e econômica",
28
+ "Descrever solução como um todo",
29
+ "Estimar quantidades a serem contratadas",
30
+ "Elaborar memórias de cálculo",
31
+ "Estimar valor da contratação",
32
+ "Definir preços unitários referenciais",
33
+ "Justificar parcelamento ou não da solução",
34
+ "Identificar contratações correlatas",
35
+ "Demonstrar previsão no Plano de Contratações",
36
+ "Demonstrar resultados pretendidos",
37
+ "Listar providências prévias da Administração",
38
+ "Descrever possíveis impactos ambientais",
39
+ "Definir medidas mitigadoras",
40
+ "Elaborar posicionamento conclusivo"
41
+ ]
42
+ },
43
+ {
44
+ "name": "ETP - Serviços de Limpeza e Conservação",
45
+ "numero_processo": "2024/002-ETP",
46
+ "items": [
47
+ "Evidenciar necessidade dos serviços de limpeza",
48
+ "Definir escopo dos serviços",
49
+ "Avaliar viabilidade da terceirização",
50
+ "Verificar conformidade com legislação trabalhista",
51
+ "Analisar impacto ambiental dos produtos",
52
+ "Verificar alinhamento estratégico",
53
+ "Registrar área total a ser atendida",
54
+ "Definir frequência dos serviços",
55
+ "Especificar materiais e equipamentos",
56
+ "Pesquisar preços de mercado",
57
+ "Comparar fornecedores qualificados",
58
+ "Justificar modalidade licitatória",
59
+ "Calcular quantidade de profissionais",
60
+ "Estimar custos mensais",
61
+ "Definir critérios de qualidade",
62
+ "Estabelecer indicadores de desempenho",
63
+ "Planejar gestão e fiscalização",
64
+ "Verificar necessidade de treinamentos",
65
+ "Avaliar sustentabilidade ambiental",
66
+ "Concluir sobre adequação da contratação"
67
+ ]
68
+ },
69
+ {
70
+ "name": "ETP - Aquisição de Veículos Oficiais",
71
+ "numero_processo": "2024/003-ETP",
72
+ "items": [
73
+ "Justificar necessidade dos veículos",
74
+ "Definir especificações técnicas",
75
+ "Avaliar compra vs locação",
76
+ "Analisar economia circular",
77
+ "Verificar disponibilidade orçamentária",
78
+ "Pesquisar mercado automotivo",
79
+ "Comparar modelos disponíveis",
80
+ "Avaliar custo-benefício",
81
+ "Definir critérios de sustentabilidade",
82
+ "Especificar combustível (flex/elétrico)",
83
+ "Calcular custos de manutenção",
84
+ "Estimar vida útil",
85
+ "Definir garantia mínima",
86
+ "Planejar entrega e recebimento",
87
+ "Verificar documentação necessária",
88
+ "Avaliar impacto ambiental",
89
+ "Definir destinação de veículos antigos",
90
+ "Concluir sobre viabilidade"
91
+ ]
92
+ },
93
+ {
94
+ "name": "ETP - Software de Gestão Financeira",
95
+ "numero_processo": "2024/004-ETP",
96
+ "items": [
97
+ "Identificar deficiências do sistema atual",
98
+ "Definir funcionalidades obrigatórias",
99
+ "Especificar requisitos de segurança",
100
+ "Avaliar integração com sistemas existentes",
101
+ "Verificar conformidade com LGPD",
102
+ "Pesquisar soluções de mercado",
103
+ "Analisar fornecedores especializados",
104
+ "Comparar custos de licenciamento",
105
+ "Avaliar custos de implementação",
106
+ "Definir necessidades de treinamento",
107
+ "Planejar migração de dados",
108
+ "Especificar suporte técnico",
109
+ "Calcular retorno sobre investimento",
110
+ "Definir critérios de aceitação",
111
+ "Estabelecer cronograma de implantação",
112
+ "Avaliar riscos tecnológicos",
113
+ "Concluir sobre adequação da solução"
114
+ ]
115
+ },
116
+ {
117
+ "name": "ETP - Manutenção Predial Terceirizada",
118
+ "numero_processo": "2024/005-ETP",
119
+ "items": [
120
+ "Diagnosticar estado atual das instalações",
121
+ "Definir serviços de manutenção necessários",
122
+ "Especificar manutenção preventiva",
123
+ "Especificar manutenção corretiva",
124
+ "Listar equipamentos a serem mantidos",
125
+ "Definir periodicidade das manutenções",
126
+ "Pesquisar empresas especializadas",
127
+ "Avaliar qualificação técnica requerida",
128
+ "Calcular custos estimados",
129
+ "Definir indicadores de desempenho",
130
+ "Especificar materiais e peças",
131
+ "Estabelecer prazos de atendimento",
132
+ "Definir garantias dos serviços",
133
+ "Planejar fiscalização contratual",
134
+ "Avaliar impactos na operação",
135
+ "Verificar certificações necessárias",
136
+ "Concluir sobre viabilidade da terceirização"
137
+ ]
138
+ },
139
+ {
140
+ "name": "ETP - Consultoria em Gestão de Processos",
141
+ "numero_processo": "2024/006-ETP",
142
+ "items": [
143
+ "Identificar processos críticos",
144
+ "Definir objetivos da consultoria",
145
+ "Especificar metodologia a ser aplicada",
146
+ "Definir perfil dos consultores",
147
+ "Estabelecer cronograma de trabalho",
148
+ "Pesquisar empresas de consultoria",
149
+ "Analisar cases de sucesso",
150
+ "Avaliar custo dos serviços",
151
+ "Definir produtos a serem entregues",
152
+ "Especificar transferência de conhecimento",
153
+ "Estabelecer critérios de avaliação",
154
+ "Definir indicadores de resultado",
155
+ "Planejar acompanhamento dos trabalhos",
156
+ "Avaliar impacto organizacional",
157
+ "Verificar necessidade de capacitação",
158
+ "Concluir sobre retorno esperado"
159
+ ]
160
+ },
161
+ {
162
+ "name": "ETP - Equipamentos de Informática",
163
+ "numero_processo": "2024/007-ETP",
164
+ "items": [
165
+ "Levantar necessidades computacionais",
166
+ "Definir configurações mínimas",
167
+ "Especificar software compatível",
168
+ "Avaliar vida útil esperada",
169
+ "Pesquisar fornecedores homologados",
170
+ "Comparar especificações técnicas",
171
+ "Analisar garantia oferecida",
172
+ "Calcular custos totais",
173
+ "Avaliar suporte técnico",
174
+ "Definir logística de entrega",
175
+ "Planejar instalação e configuração",
176
+ "Especificar descarte sustentável",
177
+ "Verificar certificações ambientais",
178
+ "Definir cronograma de substituição",
179
+ "Avaliar compatibilidade tecnológica",
180
+ "Concluir sobre adequação técnica"
181
+ ]
182
+ },
183
+ {
184
+ "name": "ETP - Serviços de Segurança Patrimonial",
185
+ "numero_processo": "2024/008-ETP",
186
+ "items": [
187
+ "Avaliar vulnerabilidades de segurança",
188
+ "Definir postos de vigilância",
189
+ "Especificar qualificação dos vigilantes",
190
+ "Definir equipamentos de segurança",
191
+ "Estabelecer procedimentos operacionais",
192
+ "Pesquisar empresas especializadas",
193
+ "Verificar certificações de segurança",
194
+ "Analisar histórico das empresas",
195
+ "Calcular custos dos serviços",
196
+ "Definir indicadores de qualidade",
197
+ "Estabelecer penalidades contratuais",
198
+ "Planejar gestão do contrato",
199
+ "Verificar seguro de responsabilidade",
200
+ "Avaliar conformidade legal",
201
+ "Definir treinamentos específicos",
202
+ "Concluir sobre necessidade da contratação"
203
+ ]
204
+ },
205
+ {
206
+ "name": "ETP - Material de Expediente e Consumo",
207
+ "numero_processo": "2024/009-ETP",
208
+ "items": [
209
+ "Levantar consumo histórico",
210
+ "Definir itens essenciais",
211
+ "Especificar qualidade mínima",
212
+ "Calcular demanda anual",
213
+ "Pesquisar fornecedores locais",
214
+ "Comparar preços de mercado",
215
+ "Avaliar critérios de sustentabilidade",
216
+ "Definir prazos de entrega",
217
+ "Estabelecer condições de armazenamento",
218
+ "Planejar controle de estoque",
219
+ "Verificar certificações ambientais",
220
+ "Definir embalagens recicláveis",
221
+ "Calcular economia de escala",
222
+ "Avaliar parcelamento de entregas",
223
+ "Concluir sobre estratégia de aquisição"
224
+ ]
225
+ },
226
+ {
227
+ "name": "ETP - Reforma e Modernização de Instalações",
228
+ "numero_processo": "2024/010-ETP",
229
+ "items": [
230
+ "Diagnosticar estado das instalações",
231
+ "Definir escopo da reforma",
232
+ "Elaborar projeto arquitetônico",
233
+ "Especificar materiais sustentáveis",
234
+ "Calcular área a ser reformada",
235
+ "Obter licenças e autorizações",
236
+ "Pesquisar empresas construtoras",
237
+ "Analisar qualificação técnica",
238
+ "Estimar custos da obra",
239
+ "Definir cronograma de execução",
240
+ "Planejar gestão da obra",
241
+ "Estabelecer critérios de recebimento",
242
+ "Avaliar impacto nas atividades",
243
+ "Definir medidas de segurança",
244
+ "Verificar conformidade com normas",
245
+ "Avaliar eficiência energética",
246
+ "Concluir sobre viabilidade da reforma"
247
+ ]
248
+ }
249
+ ]
250
+
251
+ return etp_checklists
252
+
253
+ def create_tr_checklists():
254
+ """Cria 10 checklists baseados nas normas TR (Termo de Referência)"""
255
+
256
+ tr_checklists = [
257
+ {
258
+ "name": "TR - Contratação de Auditoria Externa",
259
+ "numero_processo": "2024/011-TR",
260
+ "items": [
261
+ "Definir objeto da auditoria",
262
+ "Especificar natureza dos serviços",
263
+ "Definir quantitativos necessários",
264
+ "Estabelecer prazo do contrato",
265
+ "Avaliar possibilidade de prorrogação",
266
+ "Especificar qualificação dos auditores",
267
+ "Definir metodologia de trabalho",
268
+ "Estabelecer cronograma de execução",
269
+ "Especificar produtos a serem entregues",
270
+ "Definir locais de prestação dos serviços",
271
+ "Estabelecer regras de recebimento",
272
+ "Especificar garantia dos serviços",
273
+ "Referenciar estudos técnicos preliminares",
274
+ "Descrever solução considerando ciclo de vida",
275
+ "Definir requisitos da contratação",
276
+ "Estabelecer modelo de execução",
277
+ "Definir modelo de gestão do contrato",
278
+ "Estabelecer critérios de medição",
279
+ "Definir critérios de pagamento",
280
+ "Optar por critério técnica e preço",
281
+ "Estimar valor da contratação",
282
+ "Verificar adequação orçamentária"
283
+ ]
284
+ },
285
+ {
286
+ "name": "TR - Sistema de Gestão Documental",
287
+ "numero_processo": "2024/012-TR",
288
+ "items": [
289
+ "Definir funcionalidades do sistema",
290
+ "Especificar capacidade de armazenamento",
291
+ "Definir prazo de implementação",
292
+ "Estabelecer níveis de segurança",
293
+ "Especificar integração com sistemas",
294
+ "Definir perfis de usuários",
295
+ "Estabelecer backup e recuperação",
296
+ "Especificar treinamento de usuários",
297
+ "Definir suporte técnico",
298
+ "Estabelecer garantia do sistema",
299
+ "Referenciar ETP correspondente",
300
+ "Descrever arquitetura da solução",
301
+ "Definir requisitos de performance",
302
+ "Estabelecer modelo de implementação",
303
+ "Definir fiscalização técnica",
304
+ "Estabelecer marcos de pagamento",
305
+ "Aplicar critério técnica e preço",
306
+ "Calcular estimativa de custos",
307
+ "Verificar previsão orçamentária"
308
+ ]
309
+ },
310
+ {
311
+ "name": "TR - Serviços de Telecomunicações",
312
+ "numero_processo": "2024/013-TR",
313
+ "items": [
314
+ "Definir serviços de conectividade",
315
+ "Especificar velocidade mínima",
316
+ "Estabelecer disponibilidade exigida",
317
+ "Definir pontos de acesso",
318
+ "Especificar equipamentos inclusos",
319
+ "Estabelecer SLA dos serviços",
320
+ "Definir suporte técnico 24x7",
321
+ "Especificar monitoramento da rede",
322
+ "Estabelecer procedimentos de contingência",
323
+ "Definir garantia de equipamentos",
324
+ "Referenciar estudos preliminares",
325
+ "Descrever topologia da rede",
326
+ "Definir requisitos de segurança",
327
+ "Estabelecer modelo de prestação",
328
+ "Definir gestão do contrato",
329
+ "Estabelecer medição de performance",
330
+ "Definir forma de pagamento",
331
+ "Aplicar julgamento técnica e preço",
332
+ "Estimar custos mensais",
333
+ "Confirmar adequação orçamentária"
334
+ ]
335
+ },
336
+ {
337
+ "name": "TR - Manutenção de Elevadores",
338
+ "numero_processo": "2024/014-TR",
339
+ "items": [
340
+ "Definir elevadores a serem mantidos",
341
+ "Especificar tipo de manutenção",
342
+ "Estabelecer periodicidade das visitas",
343
+ "Definir peças inclusas no contrato",
344
+ "Especificar tempo de atendimento",
345
+ "Estabelecer garantia dos reparos",
346
+ "Definir qualificação dos técnicos",
347
+ "Especificar certificações necessárias",
348
+ "Estabelecer relatórios de manutenção",
349
+ "Definir modernizações incluídas",
350
+ "Referenciar diagnóstico técnico",
351
+ "Descrever escopo completo",
352
+ "Definir requisitos de segurança",
353
+ "Estabelecer execução dos serviços",
354
+ "Definir acompanhamento técnico",
355
+ "Estabelecer medição mensal",
356
+ "Definir pagamento por elevador",
357
+ "Avaliar propostas técnicas",
358
+ "Calcular custos anuais",
359
+ "Verificar previsão orçamentária"
360
+ ]
361
+ },
362
+ {
363
+ "name": "TR - Consultoria Jurídica Especializada",
364
+ "numero_processo": "2024/015-TR",
365
+ "items": [
366
+ "Definir áreas do direito",
367
+ "Especificar perfil dos advogados",
368
+ "Estabelecer prazo de atendimento",
369
+ "Definir produtos jurídicos",
370
+ "Especificar pareceres necessários",
371
+ "Estabelecer representação processual",
372
+ "Definir acompanhamento de processos",
373
+ "Especificar relatórios periódicos",
374
+ "Estabelecer reuniões de trabalho",
375
+ "Definir sigilo profissional",
376
+ "Referenciar demandas identificadas",
377
+ "Descrever metodologia jurídica",
378
+ "Definir requisitos de qualificação",
379
+ "Estabelecer forma de prestação",
380
+ "Definir gestão dos trabalhos",
381
+ "Estabelecer critérios de avaliação",
382
+ "Definir pagamento por produto",
383
+ "Aplicar análise técnica",
384
+ "Estimar custos por hora",
385
+ "Verificar disponibilidade orçamentária"
386
+ ]
387
+ },
388
+ {
389
+ "name": "TR - Fornecimento de Energia Elétrica",
390
+ "numero_processo": "2024/016-TR",
391
+ "items": [
392
+ "Definir demanda energética",
393
+ "Especificar qualidade da energia",
394
+ "Estabelecer disponibilidade mínima",
395
+ "Definir pontos de medição",
396
+ "Especificar proteções elétricas",
397
+ "Estabelecer manutenção preventiva",
398
+ "Definir atendimento de emergência",
399
+ "Especificar relatórios de consumo",
400
+ "Estabelecer eficiência energética",
401
+ "Definir sustentabilidade ambiental",
402
+ "Referenciar estudo energético",
403
+ "Descrever infraestrutura necessária",
404
+ "Definir requisitos técnicos",
405
+ "Estabelecer modelo de fornecimento",
406
+ "Definir fiscalização energética",
407
+ "Estabelecer medição de consumo",
408
+ "Definir estrutura tarifária",
409
+ "Avaliar propostas comerciais",
410
+ "Calcular custos de demanda",
411
+ "Confirmar previsão orçamentária"
412
+ ]
413
+ },
414
+ {
415
+ "name": "TR - Serviços de Jardinagem e Paisagismo",
416
+ "numero_processo": "2024/017-TR",
417
+ "items": [
418
+ "Definir áreas verdes a manter",
419
+ "Especificar tipos de plantas",
420
+ "Estabelecer frequência de podas",
421
+ "Definir sistema de irrigação",
422
+ "Especificar adubação necessária",
423
+ "Estabelecer controle de pragas",
424
+ "Definir limpeza de áreas",
425
+ "Especificar replantio de mudas",
426
+ "Estabelecer manutenção de gramados",
427
+ "Definir sustentabilidade ambiental",
428
+ "Referenciar projeto paisagístico",
429
+ "Descrever cronograma sazonal",
430
+ "Definir requisitos técnicos",
431
+ "Estabelecer execução dos serviços",
432
+ "Definir supervisão técnica",
433
+ "Estabelecer medição mensal",
434
+ "Definir pagamento por área",
435
+ "Avaliar capacidade técnica",
436
+ "Estimar custos sazonais",
437
+ "Verificar adequação orçamentária"
438
+ ]
439
+ },
440
+ {
441
+ "name": "TR - Aquisição de Mobiliário Ergonômico",
442
+ "numero_processo": "2024/018-TR",
443
+ "items": [
444
+ "Definir tipos de móveis necessários",
445
+ "Especificar critérios ergonômicos",
446
+ "Estabelecer materiais sustentáveis",
447
+ "Definir dimensões padrão",
448
+ "Especificar acabamentos",
449
+ "Estabelecer garantia mínima",
450
+ "Definir prazos de entrega",
451
+ "Especificar montagem inclusa",
452
+ "Estabelecer assistência técnica",
453
+ "Definir certificações de qualidade",
454
+ "Referenciar estudo ergonômico",
455
+ "Descrever layout planejado",
456
+ "Definir requisitos de durabilidade",
457
+ "Estabelecer logística de entrega",
458
+ "Definir recebimento técnico",
459
+ "Estabelecer medição por item",
460
+ "Definir pagamento após entrega",
461
+ "Avaliar amostras técnicas",
462
+ "Calcular investimento total",
463
+ "Confirmar previsão orçamentária"
464
+ ]
465
+ },
466
+ {
467
+ "name": "TR - Serviços de Impressão Gráfica",
468
+ "numero_processo": "2024/019-TR",
469
+ "items": [
470
+ "Definir tipos de impressos",
471
+ "Especificar qualidade do papel",
472
+ "Estabelecer tiragens necessárias",
473
+ "Definir acabamentos gráficos",
474
+ "Especificar cores de impressão",
475
+ "Estabelecer prazos de produção",
476
+ "Definir embalagem e entrega",
477
+ "Especificar armazenagem temporária",
478
+ "Estabelecer controle de qualidade",
479
+ "Definir sustentabilidade do papel",
480
+ "Referenciar demanda histórica",
481
+ "Descrever especificações técnicas",
482
+ "Definir requisitos de produção",
483
+ "Estabelecer processo produtivo",
484
+ "Definir controle de qualidade",
485
+ "Estabelecer medição por produto",
486
+ "Definir pagamento por entrega",
487
+ "Avaliar capacidade produtiva",
488
+ "Estimar custos unitários",
489
+ "Verificar adequação orçamentária"
490
+ ]
491
+ },
492
+ {
493
+ "name": "TR - Licenciamento de Software Corporativo",
494
+ "numero_processo": "2024/020-TR",
495
+ "items": [
496
+ "Definir tipos de licenças",
497
+ "Especificar número de usuários",
498
+ "Estabelecer funcionalidades mínimas",
499
+ "Definir compatibilidade técnica",
500
+ "Especificar suporte técnico",
501
+ "Estabelecer atualizações incluídas",
502
+ "Definir treinamento de usuários",
503
+ "Especificar migração de dados",
504
+ "Estabelecer backup e segurança",
505
+ "Definir integração com sistemas",
506
+ "Referenciar análise de necessidades",
507
+ "Descrever arquitetura proposta",
508
+ "Definir requisitos funcionais",
509
+ "Estabelecer implementação faseada",
510
+ "Definir gestão de licenças",
511
+ "Estabelecer medição de uso",
512
+ "Definir pagamento anual",
513
+ "Avaliar soluções técnicas",
514
+ "Calcular custo por usuário",
515
+ "Confirmar previsão orçamentária"
516
+ ]
517
+ }
518
+ ]
519
+
520
+ return tr_checklists
521
+
522
+ def populate_interactions(checklist_id, items, completion_percentage, days_ago):
523
+ """Simula interações de usuários com diferentes padrões de uso"""
524
+
525
+ with get_db_connection() as conn:
526
+ with conn.cursor() as cur:
527
+ # Calcular quantos itens devem estar concluídos
528
+ total_items = len(items)
529
+ completed_count = int(total_items * completion_percentage / 100)
530
+
531
+ # Simular interações ao longo do tempo
532
+ base_date = datetime.now() - timedelta(days=days_ago)
533
+
534
+ for i, item in enumerate(items):
535
+ # Determinar se este item deve estar concluído
536
+ should_be_completed = i < completed_count
537
+
538
+ if should_be_completed:
539
+ # Simular algumas interações (marcar/desmarcar) antes da conclusão final
540
+ interaction_count = random.randint(1, 4)
541
+
542
+ for interaction in range(interaction_count):
543
+ # Distribuir interações ao longo do tempo
544
+ days_offset = random.randint(0, days_ago)
545
+ hours_offset = random.randint(0, 23)
546
+ minutes_offset = random.randint(0, 59)
547
+
548
+ interaction_time = base_date + timedelta(
549
+ days=days_offset,
550
+ hours=hours_offset,
551
+ minutes=minutes_offset
552
+ )
553
+
554
+ # Determinar ação (última deve ser checked se item estiver concluído)
555
+ if interaction == interaction_count - 1:
556
+ action = 'checked'
557
+ else:
558
+ action = random.choice(['checked', 'unchecked'])
559
+
560
+ cur.execute("""
561
+ INSERT INTO item_interactions (item_id, checklist_id, action, timestamp)
562
+ VALUES (%s, %s, %s, %s)
563
+ """, (item['id'], checklist_id, action, interaction_time))
564
+ else:
565
+ # Para itens não concluídos, simular algumas interações ocasionais
566
+ if random.random() < 0.3: # 30% chance de ter alguma interação
567
+ interaction_count = random.randint(1, 2)
568
+
569
+ for interaction in range(interaction_count):
570
+ days_offset = random.randint(0, days_ago // 2)
571
+ hours_offset = random.randint(0, 23)
572
+ minutes_offset = random.randint(0, 59)
573
+
574
+ interaction_time = base_date + timedelta(
575
+ days=days_offset,
576
+ hours=hours_offset,
577
+ minutes=minutes_offset
578
+ )
579
+
580
+ # Última ação deve ser 'unchecked' para itens não concluídos
581
+ if interaction == interaction_count - 1:
582
+ action = 'unchecked'
583
+ else:
584
+ action = random.choice(['checked', 'unchecked'])
585
+
586
+ cur.execute("""
587
+ INSERT INTO item_interactions (item_id, checklist_id, action, timestamp)
588
+ VALUES (%s, %s, %s, %s)
589
+ """, (item['id'], checklist_id, action, interaction_time))
590
+
591
+ conn.commit()
592
+
593
+ def populate_database():
594
+ """Popular o banco de dados com dados de teste"""
595
+
596
+ print("🚀 Iniciando população do banco de dados...")
597
+
598
+ # Criar listas de checklists
599
+ etp_checklists = create_etp_checklists()
600
+ tr_checklists = create_tr_checklists()
601
+ all_checklists = etp_checklists + tr_checklists
602
+
603
+ # Cenários diversos para criar gráficos informativos
604
+ scenarios = [
605
+ {"completion": 100, "days_ago": 45}, # Processo concluído rapidamente
606
+ {"completion": 100, "days_ago": 120}, # Processo concluído no prazo
607
+ {"completion": 95, "days_ago": 30}, # Quase concluído, rápido
608
+ {"completion": 85, "days_ago": 60}, # Bom progresso
609
+ {"completion": 75, "days_ago": 90}, # Progresso médio
610
+ {"completion": 60, "days_ago": 45}, # Progresso lento para o tempo
611
+ {"completion": 40, "days_ago": 150}, # Em risco de atraso
612
+ {"completion": 30, "days_ago": 200}, # Atrasado
613
+ {"completion": 20, "days_ago": 180}, # Muito atrasado
614
+ {"completion": 80, "days_ago": 20}, # Progresso rápido recente
615
+ {"completion": 50, "days_ago": 100}, # Progresso médio
616
+ {"completion": 90, "days_ago": 80}, # Quase concluído
617
+ {"completion": 15, "days_ago": 220}, # Crítico
618
+ {"completion": 70, "days_ago": 70}, # No prazo
619
+ {"completion": 25, "days_ago": 160}, # Em risco
620
+ {"completion": 100, "days_ago": 35}, # Concluído rapidamente
621
+ {"completion": 65, "days_ago": 110}, # Progresso regular
622
+ {"completion": 45, "days_ago": 130}, # Progresso abaixo do esperado
623
+ {"completion": 100, "days_ago": 90}, # Concluído no prazo
624
+ {"completion": 35, "days_ago": 170} # Em risco grave
625
+ ]
626
+
627
+ with get_db_connection() as conn:
628
+ with conn.cursor() as cur:
629
+
630
+ for idx, checklist_data in enumerate(all_checklists):
631
+ scenario = scenarios[idx]
632
+
633
+ # Criar checklist
634
+ checklist_id = str(uuid.uuid4())
635
+ created_at = datetime.now() - timedelta(days=scenario["days_ago"])
636
+
637
+ cur.execute("""
638
+ INSERT INTO checklists (id, name, numero_processo, created_at)
639
+ VALUES (%s, %s, %s, %s)
640
+ """, (checklist_id, checklist_data["name"], checklist_data["numero_processo"], created_at))
641
+
642
+ # Criar itens do checklist
643
+ items_with_ids = []
644
+ for position, item_text in enumerate(checklist_data["items"]):
645
+ item_id = str(uuid.uuid4())
646
+ cur.execute("""
647
+ INSERT INTO checklist_items (id, checklist_id, text, position)
648
+ VALUES (%s, %s, %s, %s)
649
+ """, (item_id, checklist_id, item_text, position))
650
+
651
+ items_with_ids.append({
652
+ "id": item_id,
653
+ "text": item_text,
654
+ "position": position
655
+ })
656
+
657
+ conn.commit()
658
+
659
+ # Simular interações
660
+ populate_interactions(
661
+ checklist_id,
662
+ items_with_ids,
663
+ scenario["completion"],
664
+ scenario["days_ago"]
665
+ )
666
+
667
+ print(f"✅ Checklist criado: {checklist_data['name']} ({scenario['completion']}% concluído)")
668
+
669
+ print("🎉 População do banco concluída!")
670
+ print(f"📊 Criados {len(all_checklists)} checklists com diversos cenários de progresso")
671
+ print("📈 Dashboard deve agora mostrar gráficos informativos com:")
672
+ print(" • Processos concluídos rapidamente")
673
+ print(" • Processos no prazo")
674
+ print(" • Processos em risco de atraso")
675
+ print(" • Processos atrasados")
676
+ print(" • Diversos padrões de interação de usuários")
677
+
678
+ if __name__ == "__main__":
679
+ populate_database()