DHEIVER commited on
Commit
c660ad9
·
verified ·
1 Parent(s): 23b1f8d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +247 -66
app.py CHANGED
@@ -14,12 +14,17 @@ class DefenseGenerator:
14
  "resposta_acusacao": {
15
  "system": "Você é um advogado criminalista especializado em respostas à acusação.",
16
  "sections": {
17
- "cabecalho": """EXCELENTÍSSIMO(A) SENHOR(A) DOUTOR(A) JUIZ(A) DE DIREITO DA {vara} VARA CRIMINAL DA COMARCA DE {comarca}""",
 
 
18
  "qualificacao": """{nome_reu}, já qualificado nos autos do processo em epígrafe, por seu advogado que esta subscreve, vem, respeitosamente, à presença de Vossa Excelência, apresentar RESPOSTA À ACUSAÇÃO, nos termos do art. 396-A do Código de Processo Penal, pelos fatos e fundamentos a seguir expostos:""",
19
- "preliminares": "{preliminares}",
20
- "merito": "{merito}",
21
- "provas": """{provas}""",
22
- "pedidos": """{pedidos}
 
 
 
23
 
24
  {comarca}, {data}
25
 
@@ -27,14 +32,21 @@ Advogado(a)
27
  OAB/{estado} {numero_oab}"""
28
  }
29
  },
30
- "alegacoes_finais": {
31
- "system": "Você é um advogado criminalista especializado em alegações finais.",
32
  "sections": {
33
- "cabecalho": """EXCELENTÍSSIMO(A) SENHOR(A) DOUTOR(A) JUIZ(A) DE DIREITO DA {vara} VARA CRIMINAL DA COMARCA DE {comarca}""",
34
- "qualificacao": """{nome_reu}, qualificado nos autos do processo em epígrafe, por seu advogado que esta subscreve, vem, respeitosamente, à presença de Vossa Excelência, apresentar ALEGAÇÕES FINAIS, pelos fatos e fundamentos a seguir expostos:""",
35
- "relatorio": "{relatorio}",
36
- "merito": "{merito}",
37
- "pedidos": """{pedidos}
 
 
 
 
 
 
 
38
 
39
  {comarca}, {data}
40
 
@@ -42,13 +54,23 @@ Advogado(a)
42
  OAB/{estado} {numero_oab}"""
43
  }
44
  },
45
- "habeas_corpus": {
46
- "system": "Você é um advogado criminalista especializado em Habeas Corpus.",
47
  "sections": {
48
- "cabecalho": """EXCELENTÍSSIMO(A) SENHOR(A) DOUTOR(A) DESEMBARGADOR(A) DO EGRÉGIO TRIBUNAL DE JUSTIÇA DO ESTADO DE {estado}""",
49
- "qualificacao": """{nome_reu}, {qualificacao}, vem, por seu advogado, impetrar HABEAS CORPUS, com fundamento no art. 5º, LXVIII, da CF e arts. 647 e ss. do CPP, em face de ato do MM. Juiz de Direito da {vara} Vara Criminal da Comarca de {comarca}, pelos fatos e fundamentos a seguir expostos:""",
50
- "fundamentos": "{fundamentos}",
51
- "pedidos": """{pedidos}
 
 
 
 
 
 
 
 
 
 
52
 
53
  {comarca}, {data}
54
 
@@ -58,6 +80,84 @@ OAB/{estado} {numero_oab}"""
58
  }
59
  }
60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  def generate_section(self, messages: list, section: str) -> str:
62
  try:
63
  response = self.client.chat.completions.create(
@@ -99,72 +199,138 @@ def interface():
99
  gerador = DefenseGenerator()
100
 
101
  with gr.Blocks() as demo:
102
- gr.Markdown("# Sistema de Geração de Peças Criminais")
 
 
103
 
104
  with gr.Row():
105
  tipo_peca = gr.Dropdown(
106
- choices=[
107
- "resposta_acusacao",
108
- "alegacoes_finais",
109
- "habeas_corpus"
110
- ],
111
- label="Selecione o tipo de peça",
112
- value="resposta_acusacao"
113
  )
114
 
115
  with gr.Row():
116
  with gr.Column():
117
- comarca = gr.Textbox(label="Comarca")
118
- vara = gr.Textbox(label="Vara")
119
- estado = gr.Textbox(label="Estado")
120
- numero_oab = gr.Textbox(label="Número OAB")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
 
122
  with gr.Column():
123
- nome_reu = gr.Textbox(label="Nome do(a) Cliente")
124
- qualificacao = gr.Textbox(label="Qualificação", visible=False)
125
- fundamentos = gr.Textbox(label="Fundamentos", visible=False)
126
-
127
- with gr.Row():
128
- with gr.Column():
129
- preliminares = gr.Textbox(label="Preliminares", lines=3)
130
- merito = gr.Textbox(label="Mérito", lines=5)
131
- provas = gr.Textbox(label="Provas", lines=3)
132
- pedidos = gr.Textbox(label="Pedidos", lines=3)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
 
134
  def update_fields(tipo):
135
- if tipo == "habeas_corpus":
136
- return {
137
- qualificacao: gr.update(visible=True),
138
- fundamentos: gr.update(visible=True),
139
- preliminares: gr.update(visible=False),
140
- merito: gr.update(visible=False),
141
- provas: gr.update(visible=False)
142
- }
143
- else:
144
- return {
145
- qualificacao: gr.update(visible=False),
146
- fundamentos: gr.update(visible=False),
147
- preliminares: gr.update(visible=True),
148
- merito: gr.update(visible=True),
149
- provas: gr.update(visible=True)
150
- }
 
151
 
152
- tipo_peca.change(fn=update_fields, inputs=tipo_peca, outputs=[
153
- qualificacao, fundamentos, preliminares, merito, provas
154
- ])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
 
156
  with gr.Row():
157
- submit_btn = gr.Button("Gerar Peça")
 
158
 
159
- output = gr.Textbox(label="Documento Gerado", lines=20)
 
 
 
 
160
 
161
- def process(tipo, comarca, vara, estado, numero_oab, nome_reu, qualificacao,
162
- fundamentos, preliminares, merito, provas, pedidos):
 
163
  dados = {
164
  "comarca": comarca,
165
  "vara": vara,
166
  "estado": estado,
167
  "numero_oab": numero_oab,
 
168
  "nome_reu": nome_reu,
169
  "qualificacao": qualificacao,
170
  "fundamentos": fundamentos,
@@ -174,17 +340,32 @@ def interface():
174
  "pedidos": pedidos
175
  }
176
  return gerador.gerar_documento(tipo, dados)
 
 
 
177
 
178
  submit_btn.click(
179
  fn=process,
180
  inputs=[
181
- tipo_peca, comarca, vara, estado, numero_oab, nome_reu,
182
- qualificacao, fundamentos, preliminares, merito, provas, pedidos
 
183
  ],
184
  outputs=output
185
  )
186
 
 
 
 
 
 
 
 
 
 
 
187
  return demo
188
 
189
  if __name__ == "__main__":
190
- interface().launch()
 
 
14
  "resposta_acusacao": {
15
  "system": "Você é um advogado criminalista especializado em respostas à acusação.",
16
  "sections": {
17
+ "cabecalho": """EXCELENTÍSSIMO(A) SENHOR(A) DOUTOR(A) JUIZ(A) DE DIREITO DA {vara} VARA CRIMINAL DA COMARCA DE {comarca}
18
+
19
+ Processo nº: {numero_processo}""",
20
  "qualificacao": """{nome_reu}, já qualificado nos autos do processo em epígrafe, por seu advogado que esta subscreve, vem, respeitosamente, à presença de Vossa Excelência, apresentar RESPOSTA À ACUSAÇÃO, nos termos do art. 396-A do Código de Processo Penal, pelos fatos e fundamentos a seguir expostos:""",
21
+ "preliminares": "I - PRELIMINARES\n\n{preliminares}",
22
+ "merito": "II - MÉRITO\n\n{merito}",
23
+ "provas": """III - DAS PROVAS\n\nPara provar o alegado, requer-se a produção de todos os meios de prova em direito admitidos, especialmente:\n\n{provas}""",
24
+ "pedidos": """IV - DOS PEDIDOS\n\nAnte o exposto, requer:\n\n{pedidos}
25
+
26
+ Termos em que,
27
+ Pede deferimento.
28
 
29
  {comarca}, {data}
30
 
 
32
  OAB/{estado} {numero_oab}"""
33
  }
34
  },
35
+ "habeas_corpus": {
36
+ "system": "Você é um advogado criminalista especializado em Habeas Corpus.",
37
  "sections": {
38
+ "cabecalho": """EXCELENTÍSSIMO(A) SENHOR(A) DOUTOR(A) DESEMBARGADOR(A) DO EGRÉGIO TRIBUNAL DE JUSTIÇA DO ESTADO DE {estado}""",
39
+ "qualificacao": """{nome_reu}, {qualificacao}, vem, por seu advogado que esta subscreve, com fundamento no art. 5º, LXVIII, da Constituição Federal e arts. 647 e seguintes do Código de Processo Penal, impetrar
40
+
41
+ HABEAS CORPUS
42
+ com pedido liminar
43
+
44
+ em face de ato coator praticado pelo MM. Juiz de Direito da {vara} Vara Criminal da Comarca de {comarca}, pelos fatos e fundamentos a seguir expostos:""",
45
+ "fundamentos": """I - DOS FATOS E FUNDAMENTOS\n\n{fundamentos}""",
46
+ "pedidos": """II - DOS PEDIDOS\n\nAnte o exposto, requer:\n\n{pedidos}
47
+
48
+ Termos em que,
49
+ Pede deferimento.
50
 
51
  {comarca}, {data}
52
 
 
54
  OAB/{estado} {numero_oab}"""
55
  }
56
  },
57
+ "liberdade_provisoria": {
58
+ "system": "Você é um advogado criminalista especializado em pedidos de liberdade provisória.",
59
  "sections": {
60
+ "cabecalho": """EXCELENTÍSSIMO(A) SENHOR(A) DOUTOR(A) JUIZ(A) DE DIREITO DA {vara} VARA CRIMINAL DA COMARCA DE {comarca}
61
+
62
+ Processo nº: {numero_processo}""",
63
+ "qualificacao": """{nome_reu}, já qualificado nos autos do processo em epígrafe, por seu advogado que esta subscreve, vem, respeitosamente, à presença de Vossa Excelência, com fundamento no art. 321 do Código de Processo Penal, requerer a
64
+
65
+ LIBERDADE PROVISÓRIA
66
+ com ou sem fiança
67
+
68
+ pelos motivos de fato e de direito a seguir expostos:""",
69
+ "fundamentos": """I - DOS FATOS E FUNDAMENTOS\n\n{fundamentos}""",
70
+ "pedidos": """II - DOS PEDIDOS\n\nAnte o exposto, requer:\n\n{pedidos}
71
+
72
+ Termos em que,
73
+ Pede deferimento.
74
 
75
  {comarca}, {data}
76
 
 
80
  }
81
  }
82
 
83
+ self.exemplos = {
84
+ "resposta_acusacao": {
85
+ "tipo": "resposta_acusacao",
86
+ "comarca": "São Paulo",
87
+ "vara": "1ª",
88
+ "estado": "SP",
89
+ "numero_oab": "123456",
90
+ "numero_processo": "0000000-11.2024.8.26.0000",
91
+ "nome_reu": "João da Silva",
92
+ "qualificacao": "",
93
+ "fundamentos": "",
94
+ "preliminares": """1. Inépcia da denúncia, vez que não descreve adequadamente a conduta imputada ao denunciado;
95
+
96
+ 2. Ausência de justa causa para a ação penal, diante da atipicidade da conduta;""",
97
+ "merito": """No mérito, deve-se destacar que o denunciado não praticou o crime que lhe é imputado. As testemunhas arroladas pela acusação apresentam contradições em seus depoimentos que demonstram a fragilidade da acusação.
98
+
99
+ Além disso, os elementos de prova colhidos na fase investigativa não foram corroborados sob o crivo do contraditório, sendo insuficientes para embasar uma condenação criminal.""",
100
+ "provas": """1. Oitiva das testemunhas abaixo arroladas;
101
+ 2. Juntada dos documentos em anexo;
102
+ 3. Outras provas admitidas em direito.""",
103
+ "pedidos": """1. O acolhimento das preliminares arguidas, com o consequente trancamento da ação penal;
104
+
105
+ 2. Subsidiariamente, a absolvição do acusado, nos termos do art. 386, incisos III, V ou VII do Código de Processo Penal;
106
+
107
+ 3. A produção de todas as provas requeridas."""
108
+ },
109
+ "habeas_corpus": {
110
+ "tipo": "habeas_corpus",
111
+ "comarca": "São Paulo",
112
+ "vara": "1ª",
113
+ "estado": "SP",
114
+ "numero_oab": "123456",
115
+ "numero_processo": "0000000-11.2024.8.26.0000",
116
+ "nome_reu": "João da Silva",
117
+ "qualificacao": "brasileiro, casado, comerciante, RG 12.345.678-9 SSP/SP, CPF 123.456.789-00",
118
+ "fundamentos": """O paciente encontra-se preso preventivamente desde 10/01/2024, por suposta prática do crime previsto no art. 155, caput, do Código Penal.
119
+
120
+ Contudo, a prisão preventiva carece dos requisitos legais previstos no art. 312 do CPP, vez que:
121
+
122
+ 1. O paciente é primário, possui bons antecedentes e residência fixa;
123
+ 2. Não há elementos que indiquem risco à ordem pública ou à instrução criminal;
124
+ 3. A medida é desproporcional ao crime imputado.""",
125
+ "preliminares": "",
126
+ "merito": "",
127
+ "provas": "",
128
+ "pedidos": """1. A concessão de liminar para determinar a imediata soltura do paciente;
129
+
130
+ 2. No mérito, a concessão definitiva da ordem para revogar a prisão preventiva;
131
+
132
+ 3. Subsidiariamente, a substituição da prisão por medidas cautelares diversas."""
133
+ },
134
+ "liberdade_provisoria": {
135
+ "tipo": "liberdade_provisoria",
136
+ "comarca": "São Paulo",
137
+ "vara": "1ª",
138
+ "estado": "SP",
139
+ "numero_oab": "123456",
140
+ "numero_processo": "0000000-11.2024.8.26.0000",
141
+ "nome_reu": "João da Silva",
142
+ "qualificacao": "",
143
+ "fundamentos": """O requerente foi preso em flagrante no dia 10/01/2024, pela suposta prática do crime previsto no art. 155, caput, do Código Penal.
144
+
145
+ Entretanto, estão ausentes os requisitos que autorizam a conversão do flagrante em prisão preventiva, pois:
146
+
147
+ 1. Trata-se de réu primário, com bons antecedentes e residência fixa;
148
+ 2. O crime imputado tem pena máxima inferior a 4 anos;
149
+ 3. Não há indicativos de que, em liberdade, prejudicará a instrução criminal.""",
150
+ "preliminares": "",
151
+ "merito": "",
152
+ "provas": "",
153
+ "pedidos": """1. A concessão da liberdade provisória, preferencialmente sem fiança;
154
+
155
+ 2. Subsidiariamente, a fixação de fiança em valor compatível com a situação econômica do requerente;
156
+
157
+ 3. A aplicação de medidas cautelares diversas da prisão, se necessário."""
158
+ }
159
+ }
160
+
161
  def generate_section(self, messages: list, section: str) -> str:
162
  try:
163
  response = self.client.chat.completions.create(
 
199
  gerador = DefenseGenerator()
200
 
201
  with gr.Blocks() as demo:
202
+ gr.Markdown("""# Sistema de Geração de Peças Criminais
203
+
204
+ Este sistema auxilia advogados criminalistas na geração de peças processuais.""")
205
 
206
  with gr.Row():
207
  tipo_peca = gr.Dropdown(
208
+ choices=list(gerador.templates.keys()),
209
+ label="Tipo de Peça",
210
+ value="resposta_acusacao",
211
+ info="Selecione o tipo de documento que deseja gerar"
 
 
 
212
  )
213
 
214
  with gr.Row():
215
  with gr.Column():
216
+ comarca = gr.Textbox(
217
+ label="Comarca",
218
+ placeholder="Ex: São Paulo"
219
+ )
220
+ vara = gr.Textbox(
221
+ label="Vara",
222
+ placeholder="Ex: 1ª"
223
+ )
224
+ estado = gr.Textbox(
225
+ label="Estado",
226
+ placeholder="Ex: SP"
227
+ )
228
+ numero_oab = gr.Textbox(
229
+ label="Número OAB",
230
+ placeholder="Ex: 123456"
231
+ )
232
+ numero_processo = gr.Textbox(
233
+ label="Número do Processo",
234
+ placeholder="Ex: 0000000-00.0000.0.00.0000"
235
+ )
236
 
237
  with gr.Column():
238
+ nome_reu = gr.Textbox(
239
+ label="Nome do(a) Cliente",
240
+ placeholder="Ex: João da Silva"
241
+ )
242
+ qualificacao = gr.Textbox(
243
+ label="Qualificação",
244
+ placeholder="Ex: brasileiro, casado, comerciante...",
245
+ lines=2,
246
+ visible=False
247
+ )
248
+ fundamentos = gr.Textbox(
249
+ label="Fundamentos",
250
+ placeholder="Descreva os fundamentos do pedido...",
251
+ lines=5,
252
+ visible=False
253
+ )
254
+ preliminares = gr.Textbox(
255
+ label="Preliminares",
256
+ placeholder="Liste as preliminares...",
257
+ lines=3
258
+ )
259
+ merito = gr.Textbox(
260
+ label="Mérito",
261
+ placeholder="Desenvolva os argumentos de mérito...",
262
+ lines=5
263
+ )
264
+ provas = gr.Textbox(
265
+ label="Provas",
266
+ placeholder="Liste as provas requeridas...",
267
+ lines=3
268
+ )
269
+ pedidos = gr.Textbox(
270
+ label="Pedidos",
271
+ placeholder="Liste os pedidos...",
272
+ lines=3
273
+ )
274
 
275
  def update_fields(tipo):
276
+ is_resposta = tipo == "resposta_acusacao"
277
+ is_hc = tipo == "habeas_corpus"
278
+ is_liberdade = tipo == "liberdade_provisoria"
279
+
280
+ return {
281
+ qualificacao: gr.update(visible=(is_hc or is_liberdade)),
282
+ fundamentos: gr.update(visible=(is_hc or is_liberdade)),
283
+ preliminares: gr.update(visible=is_resposta),
284
+ merito: gr.update(visible=is_resposta),
285
+ provas: gr.update(visible=is_resposta)
286
+ }
287
+
288
+ tipo_peca.change(
289
+ fn=update_fields,
290
+ inputs=tipo_peca,
291
+ outputs=[qualificacao, fundamentos, preliminares, merito, provas]
292
+ )
293
 
294
+ def carregar_exemplo(tipo):
295
+ exemplo = gerador.exemplos.get(tipo, {})
296
+ return [
297
+ exemplo.get(campo, "") for campo in [
298
+ "comarca", "vara", "estado", "numero_oab", "numero_processo",
299
+ "nome_reu", "qualificacao", "fundamentos", "preliminares",
300
+ "merito", "provas", "pedidos"
301
+ ]
302
+ ]
303
+
304
+ exemplo_btn = gr.Button("Carregar Exemplo")
305
+ exemplo_btn.click(
306
+ fn=carregar_exemplo,
307
+ inputs=tipo_peca,
308
+ outputs=[
309
+ comarca, vara, estado, numero_oab, numero_processo,
310
+ nome_reu, qualificacao, fundamentos, preliminares,
311
+ merito, provas, pedidos
312
+ ]
313
+ )
314
 
315
  with gr.Row():
316
+ submit_btn = gr.Button("Gerar Peça", variant="primary")
317
+ clear_btn = gr.Button("Limpar Campos")
318
 
319
+ output = gr.Textbox(
320
+ label="Documento Gerado",
321
+ lines=20,
322
+ show_copy_button=True
323
+ )
324
 
325
+ def process(tipo, comarca, vara, estado, numero_oab, numero_processo,
326
+ nome_reu, qualificacao, fundamentos, preliminares, merito,
327
+ provas, pedidos):
328
  dados = {
329
  "comarca": comarca,
330
  "vara": vara,
331
  "estado": estado,
332
  "numero_oab": numero_oab,
333
+ "numero_processo": numero_processo,
334
  "nome_reu": nome_reu,
335
  "qualificacao": qualificacao,
336
  "fundamentos": fundamentos,
 
340
  "pedidos": pedidos
341
  }
342
  return gerador.gerar_documento(tipo, dados)
343
+
344
+ def clear():
345
+ return [""] * 12
346
 
347
  submit_btn.click(
348
  fn=process,
349
  inputs=[
350
+ tipo_peca, comarca, vara, estado, numero_oab, numero_processo,
351
+ nome_reu, qualificacao, fundamentos, preliminares, merito,
352
+ provas, pedidos
353
  ],
354
  outputs=output
355
  )
356
 
357
+ clear_btn.click(
358
+ fn=clear,
359
+ inputs=None,
360
+ outputs=[
361
+ comarca, vara, estado, numero_oab, numero_processo,
362
+ nome_reu, qualificacao, fundamentos, preliminares,
363
+ merito, provas, pedidos
364
+ ]
365
+ )
366
+
367
  return demo
368
 
369
  if __name__ == "__main__":
370
+ demo = interface()
371
+ demo.launch()