Initial commit: LexMind - Plataforma Jurídica Inteligente
This commit is contained in:
367
prisma/seed.ts
Normal file
367
prisma/seed.ts
Normal file
@@ -0,0 +1,367 @@
|
||||
import { PrismaClient } from '@prisma/client'
|
||||
import bcrypt from 'bcryptjs'
|
||||
|
||||
const prisma = new PrismaClient()
|
||||
|
||||
async function main() {
|
||||
console.log('🌱 Seeding database...')
|
||||
|
||||
// ── Users ──
|
||||
const passwordHash = await bcrypt.hash('123456', 10)
|
||||
|
||||
const admin = await prisma.user.upsert({
|
||||
where: { email: 'admin@juridico.ai' },
|
||||
update: {},
|
||||
create: {
|
||||
name: 'Admin Sistema',
|
||||
email: 'admin@juridico.ai',
|
||||
password: passwordHash,
|
||||
role: 'ADMIN',
|
||||
plan: 'ENTERPRISE',
|
||||
credits: 9999,
|
||||
phone: '11999999999',
|
||||
},
|
||||
})
|
||||
|
||||
const advogadoPro = await prisma.user.upsert({
|
||||
where: { email: 'maria@advocacia.com' },
|
||||
update: {},
|
||||
create: {
|
||||
name: 'Maria Silva',
|
||||
email: 'maria@advocacia.com',
|
||||
password: passwordHash,
|
||||
role: 'ADVOGADO',
|
||||
plan: 'PRO',
|
||||
oabNumber: '123456',
|
||||
oabState: 'SP',
|
||||
credits: 100,
|
||||
phone: '11988888888',
|
||||
},
|
||||
})
|
||||
|
||||
const advogadoFree = await prisma.user.upsert({
|
||||
where: { email: 'joao@email.com' },
|
||||
update: {},
|
||||
create: {
|
||||
name: 'João Santos',
|
||||
email: 'joao@email.com',
|
||||
password: passwordHash,
|
||||
role: 'ADVOGADO',
|
||||
plan: 'FREE',
|
||||
oabNumber: '654321',
|
||||
oabState: 'RJ',
|
||||
credits: 5,
|
||||
phone: '21977777777',
|
||||
},
|
||||
})
|
||||
|
||||
console.log('✅ Users created:', admin.name, advogadoPro.name, advogadoFree.name)
|
||||
|
||||
// ── Subscriptions ──
|
||||
await prisma.subscription.createMany({
|
||||
data: [
|
||||
{ userId: admin.id, plan: 'ENTERPRISE', status: 'ACTIVE' },
|
||||
{ userId: advogadoPro.id, plan: 'PRO', status: 'ACTIVE', stripeId: 'sub_mock_pro_001' },
|
||||
{ userId: advogadoFree.id, plan: 'FREE', status: 'ACTIVE' },
|
||||
],
|
||||
})
|
||||
|
||||
// ── Templates ──
|
||||
const templates = await Promise.all([
|
||||
prisma.template.create({
|
||||
data: {
|
||||
name: 'Petição Inicial Cível',
|
||||
description: 'Modelo de petição inicial para ações cíveis com fundamentação completa',
|
||||
type: 'PETICAO_INICIAL',
|
||||
area: 'CIVIL',
|
||||
prompt: 'Elabore uma petição inicial cível com os seguintes dados: {{fatos}}. Inclua fundamentação jurídica com base no CPC e CC, pedidos e valor da causa.',
|
||||
isPublic: true,
|
||||
userId: admin.id,
|
||||
},
|
||||
}),
|
||||
prisma.template.create({
|
||||
data: {
|
||||
name: 'Contestação Trabalhista',
|
||||
description: 'Modelo de contestação para reclamações trabalhistas',
|
||||
type: 'CONTESTACAO',
|
||||
area: 'TRABALHISTA',
|
||||
prompt: 'Elabore uma contestação trabalhista para a reclamação: {{fatos}}. Inclua preliminares, mérito e impugnação aos pedidos com base na CLT.',
|
||||
isPublic: true,
|
||||
userId: admin.id,
|
||||
},
|
||||
}),
|
||||
prisma.template.create({
|
||||
data: {
|
||||
name: 'Recurso de Apelação',
|
||||
description: 'Modelo de recurso de apelação com razões recursais',
|
||||
type: 'APELACAO',
|
||||
area: 'CIVIL',
|
||||
prompt: 'Elabore um recurso de apelação com base na sentença: {{sentenca}}. Apresente razões recursais, error in judicando/procedendo e pedido de reforma.',
|
||||
isPublic: true,
|
||||
userId: admin.id,
|
||||
},
|
||||
}),
|
||||
prisma.template.create({
|
||||
data: {
|
||||
name: 'Contrato de Prestação de Serviços',
|
||||
description: 'Modelo de contrato de prestação de serviços advocatícios',
|
||||
type: 'CONTRATO',
|
||||
area: 'CIVIL',
|
||||
prompt: 'Elabore um contrato de prestação de serviços entre {{contratante}} e {{contratado}}. Escopo: {{escopo}}. Valor: {{valor}}. Inclua cláusulas de confidencialidade, rescisão e foro.',
|
||||
isPublic: true,
|
||||
userId: admin.id,
|
||||
},
|
||||
}),
|
||||
prisma.template.create({
|
||||
data: {
|
||||
name: 'Habeas Corpus',
|
||||
description: 'Modelo de habeas corpus preventivo ou liberatório',
|
||||
type: 'HABEAS_CORPUS',
|
||||
area: 'PENAL',
|
||||
prompt: 'Elabore um habeas corpus {{tipo}} em favor de {{paciente}}, contra ato de {{autoridade_coatora}}. Fatos: {{fatos}}. Fundamente no art. 5º, LXVIII da CF e arts. 647-667 do CPP.',
|
||||
isPublic: true,
|
||||
userId: admin.id,
|
||||
},
|
||||
}),
|
||||
])
|
||||
|
||||
console.log('✅ Templates created:', templates.length)
|
||||
|
||||
// ── Jurisprudências ──
|
||||
const jurisprudencias = await Promise.all([
|
||||
prisma.jurisprudencia.create({
|
||||
data: {
|
||||
tribunal: 'STF',
|
||||
numero: 'RE 1.322.076/SP',
|
||||
ementa: 'RECURSO EXTRAORDINÁRIO. DIREITO DO CONSUMIDOR. RESPONSABILIDADE CIVIL. DANO MORAL. INSCRIÇÃO INDEVIDA EM CADASTRO DE INADIMPLENTES. A inscrição indevida do nome do consumidor em cadastros de proteção ao crédito configura dano moral in re ipsa, dispensando a comprovação do prejuízo efetivo. Recurso extraordinário não provido.',
|
||||
data: '2024-03-15',
|
||||
area: 'CONSUMIDOR',
|
||||
relator: 'Min. Luís Roberto Barroso',
|
||||
orgaoJulgador: 'Primeira Turma',
|
||||
tags: JSON.stringify(['dano moral', 'consumidor', 'cadastro inadimplentes', 'SPC', 'Serasa']),
|
||||
},
|
||||
}),
|
||||
prisma.jurisprudencia.create({
|
||||
data: {
|
||||
tribunal: 'STJ',
|
||||
numero: 'REsp 2.045.123/RJ',
|
||||
ementa: 'RECURSO ESPECIAL. DIREITO CIVIL. RESPONSABILIDADE CIVIL. ACIDENTE DE TRÂNSITO. DANOS MATERIAIS E MORAIS. QUANTUM INDENIZATÓRIO. Revisão do valor da indenização por danos morais quando se mostrar irrisório ou excessivo. Manutenção do quantum fixado pelo Tribunal de origem dentro dos parâmetros de razoabilidade.',
|
||||
data: '2024-05-20',
|
||||
area: 'CIVIL',
|
||||
relator: 'Min. Nancy Andrighi',
|
||||
orgaoJulgador: 'Terceira Turma',
|
||||
tags: JSON.stringify(['acidente trânsito', 'dano moral', 'dano material', 'quantum indenizatório']),
|
||||
},
|
||||
}),
|
||||
prisma.jurisprudencia.create({
|
||||
data: {
|
||||
tribunal: 'STF',
|
||||
numero: 'ADI 6.341/DF',
|
||||
ementa: 'AÇÃO DIRETA DE INCONSTITUCIONALIDADE. DIREITO ADMINISTRATIVO. COMPETÊNCIA CONCORRENTE. ESTADOS E MUNICÍPIOS. MEDIDAS SANITÁRIAS. Reconhecimento da competência concorrente de estados e municípios para adoção de medidas restritivas durante emergência sanitária. Interpretação conforme à Constituição.',
|
||||
data: '2024-01-10',
|
||||
area: 'ADMINISTRATIVO',
|
||||
relator: 'Min. Marco Aurélio',
|
||||
orgaoJulgador: 'Tribunal Pleno',
|
||||
tags: JSON.stringify(['competência concorrente', 'saúde pública', 'federalismo', 'autonomia']),
|
||||
},
|
||||
}),
|
||||
prisma.jurisprudencia.create({
|
||||
data: {
|
||||
tribunal: 'STJ',
|
||||
numero: 'RHC 163.334/SC',
|
||||
ementa: 'RECURSO EM HABEAS CORPUS. DIREITO PENAL. FURTO. PRINCÍPIO DA INSIGNIFICÂNCIA. CRIME DE BAGATELA. Aplicação do princípio da insignificância ao furto de bem avaliado em valor inferior a 10% do salário mínimo. Atipicidade material da conduta. Recurso provido.',
|
||||
data: '2024-04-18',
|
||||
area: 'PENAL',
|
||||
relator: 'Min. Sebastião Reis Júnior',
|
||||
orgaoJulgador: 'Sexta Turma',
|
||||
tags: JSON.stringify(['furto', 'insignificância', 'bagatela', 'atipicidade']),
|
||||
},
|
||||
}),
|
||||
prisma.jurisprudencia.create({
|
||||
data: {
|
||||
tribunal: 'STF',
|
||||
numero: 'ARE 1.121.633/GO',
|
||||
ementa: 'AGRAVO EM RECURSO EXTRAORDINÁRIO. DIREITO DO TRABALHO. TERCEIRIZAÇÃO. ATIVIDADE-FIM. LICITUDE. É lícita a terceirização ou qualquer outra forma de divisão do trabalho entre pessoas jurídicas distintas, independentemente do objeto social das empresas envolvidas, mantida a responsabilidade subsidiária da empresa contratante. Tema 725 de repercussão geral.',
|
||||
data: '2024-02-28',
|
||||
area: 'TRABALHISTA',
|
||||
relator: 'Min. Gilmar Mendes',
|
||||
orgaoJulgador: 'Tribunal Pleno',
|
||||
tags: JSON.stringify(['terceirização', 'atividade-fim', 'responsabilidade subsidiária', 'tema 725']),
|
||||
},
|
||||
}),
|
||||
prisma.jurisprudencia.create({
|
||||
data: {
|
||||
tribunal: 'STJ',
|
||||
numero: 'REsp 1.869.043/SP',
|
||||
ementa: 'RECURSO ESPECIAL. DIREITO TRIBUTÁRIO. ICMS. BASE DE CÁLCULO. EXCLUSÃO DO PIS E COFINS. Em consonância com o entendimento firmado pelo STF no Tema 69, o ICMS a ser excluído da base de cálculo do PIS e da COFINS é o destacado na nota fiscal. Recurso especial não provido.',
|
||||
data: '2024-06-05',
|
||||
area: 'TRIBUTARIO',
|
||||
relator: 'Min. Herman Benjamin',
|
||||
orgaoJulgador: 'Segunda Turma',
|
||||
tags: JSON.stringify(['ICMS', 'PIS', 'COFINS', 'base de cálculo', 'tema 69']),
|
||||
},
|
||||
}),
|
||||
prisma.jurisprudencia.create({
|
||||
data: {
|
||||
tribunal: 'STF',
|
||||
numero: 'RE 898.060/SC',
|
||||
ementa: 'RECURSO EXTRAORDINÁRIO. DIREITO DE FAMÍLIA. PATERNIDADE SOCIOAFETIVA. MULTIPARENTALIDADE. A paternidade socioafetiva, declarada ou não em registro público, não impede o reconhecimento do vínculo de filiação concomitante baseado na origem biológica, com os efeitos jurídicos próprios. Tema 622.',
|
||||
data: '2024-03-22',
|
||||
area: 'FAMILIA',
|
||||
relator: 'Min. Luiz Fux',
|
||||
orgaoJulgador: 'Tribunal Pleno',
|
||||
tags: JSON.stringify(['paternidade socioafetiva', 'multiparentalidade', 'filiação', 'tema 622']),
|
||||
},
|
||||
}),
|
||||
prisma.jurisprudencia.create({
|
||||
data: {
|
||||
tribunal: 'STJ',
|
||||
numero: 'REsp 1.951.532/RS',
|
||||
ementa: 'RECURSO ESPECIAL. DIREITO EMPRESARIAL. RECUPERAÇÃO JUDICIAL. PLANO DE RECUPERAÇÃO. CRAM DOWN. Possibilidade de aprovação do plano de recuperação judicial pelo juiz mesmo sem a concordância de todas as classes de credores, desde que preenchidos os requisitos do art. 58, §1º da Lei 11.101/2005.',
|
||||
data: '2024-07-12',
|
||||
area: 'EMPRESARIAL',
|
||||
relator: 'Min. Ricardo Villas Bôas Cueva',
|
||||
orgaoJulgador: 'Terceira Turma',
|
||||
tags: JSON.stringify(['recuperação judicial', 'cram down', 'plano recuperação', 'credores']),
|
||||
},
|
||||
}),
|
||||
prisma.jurisprudencia.create({
|
||||
data: {
|
||||
tribunal: 'STF',
|
||||
numero: 'HC 124.306/RJ',
|
||||
ementa: 'HABEAS CORPUS. DIREITO PENAL. ABORTO. INTERRUPÇÃO VOLUNTÁRIA DA GESTAÇÃO. PRIMEIRO TRIMESTRE. É preciso conferir interpretação conforme a Constituição aos arts. 124 a 126 do Código Penal para excluir do seu âmbito de incidência a interrupção voluntária da gestação efetivada no primeiro trimestre.',
|
||||
data: '2024-08-01',
|
||||
area: 'PENAL',
|
||||
relator: 'Min. Luís Roberto Barroso',
|
||||
orgaoJulgador: 'Primeira Turma',
|
||||
tags: JSON.stringify(['aborto', 'primeiro trimestre', 'interpretação conforme', 'direitos fundamentais']),
|
||||
},
|
||||
}),
|
||||
prisma.jurisprudencia.create({
|
||||
data: {
|
||||
tribunal: 'STJ',
|
||||
numero: 'REsp 1.733.013/PR',
|
||||
ementa: 'RECURSO ESPECIAL. DIREITO DO CONSUMIDOR. COMÉRCIO ELETRÔNICO. RESPONSABILIDADE DO MARKETPLACE. A plataforma digital que intermedia a venda de produtos responde solidariamente pelos vícios e defeitos dos produtos comercializados por terceiros em seu ambiente virtual, nos termos do CDC.',
|
||||
data: '2024-09-10',
|
||||
area: 'CONSUMIDOR',
|
||||
relator: 'Min. Paulo de Tarso Sanseverino',
|
||||
orgaoJulgador: 'Terceira Turma',
|
||||
tags: JSON.stringify(['marketplace', 'comércio eletrônico', 'responsabilidade solidária', 'CDC', 'plataforma digital']),
|
||||
},
|
||||
}),
|
||||
])
|
||||
|
||||
console.log('✅ Jurisprudências created:', jurisprudencias.length)
|
||||
|
||||
// ── Sample Documents ──
|
||||
const documents = await Promise.all([
|
||||
prisma.document.create({
|
||||
data: {
|
||||
userId: advogadoPro.id,
|
||||
type: 'PETICAO_INICIAL',
|
||||
title: 'Petição Inicial - Ação de Indenização por Danos Morais',
|
||||
prompt: 'Elaborar petição inicial para ação de indenização por danos morais decorrente de inscrição indevida no SPC',
|
||||
content: 'EXCELENTÍSSIMO SENHOR DOUTOR JUIZ DE DIREITO DA ___ VARA CÍVEL DA COMARCA DE SÃO PAULO/SP\n\nMARIA DA SILVA, brasileira, solteira, professora, portadora do RG nº 12.345.678-9 e CPF nº 123.456.789-00, residente e domiciliada na Rua das Flores, nº 100, Jardim Primavera, São Paulo/SP, CEP 01234-567, vem, respeitosamente, à presença de Vossa Excelência, por intermédio de seus procuradores que esta subscrevem, propor a presente AÇÃO DE INDENIZAÇÃO POR DANOS MORAIS em face de BANCO XYZ S/A...\n\n[Documento completo gerado pela IA]',
|
||||
wordCount: 2500,
|
||||
status: 'COMPLETED',
|
||||
area: 'CONSUMIDOR',
|
||||
tokens: 3200,
|
||||
cost: 0.032,
|
||||
},
|
||||
}),
|
||||
prisma.document.create({
|
||||
data: {
|
||||
userId: advogadoPro.id,
|
||||
type: 'CONTESTACAO',
|
||||
title: 'Contestação - Reclamação Trabalhista',
|
||||
prompt: 'Elaborar contestação para reclamação trabalhista sobre horas extras e adicional noturno',
|
||||
content: 'EXCELENTÍSSIMO SENHOR DOUTOR JUIZ DO TRABALHO DA ___ VARA DO TRABALHO DE SÃO PAULO/SP\n\nProcesso nº 0001234-56.2024.5.02.0001\n\nEMPRESA ABC LTDA, pessoa jurídica de direito privado, inscrita no CNPJ sob nº 12.345.678/0001-90, com sede na Avenida Paulista, nº 1000, São Paulo/SP, vem, respeitosamente, apresentar CONTESTAÇÃO à reclamação trabalhista movida por JOÃO CARLOS SOUZA...\n\n[Documento completo gerado pela IA]',
|
||||
wordCount: 3100,
|
||||
status: 'COMPLETED',
|
||||
area: 'TRABALHISTA',
|
||||
tokens: 4100,
|
||||
cost: 0.041,
|
||||
},
|
||||
}),
|
||||
prisma.document.create({
|
||||
data: {
|
||||
userId: advogadoFree.id,
|
||||
type: 'CONTRATO',
|
||||
title: 'Contrato de Honorários Advocatícios',
|
||||
prompt: 'Elaborar contrato de honorários para consultoria jurídica empresarial mensal',
|
||||
content: 'CONTRATO DE PRESTAÇÃO DE SERVIÇOS ADVOCATÍCIOS\n\nPelo presente instrumento particular, de um lado EMPRESA DELTA COMÉRCIO LTDA como CONTRATANTE e de outro a DRA. JOÃO SANTOS - OAB/RJ 654321 como CONTRATADO...\n\n[Documento completo gerado pela IA]',
|
||||
wordCount: 1800,
|
||||
status: 'COMPLETED',
|
||||
area: 'EMPRESARIAL',
|
||||
tokens: 2200,
|
||||
cost: 0.022,
|
||||
},
|
||||
}),
|
||||
])
|
||||
|
||||
console.log('✅ Documents created:', documents.length)
|
||||
|
||||
// ── Sample Chat ──
|
||||
const chat = await prisma.chat.create({
|
||||
data: {
|
||||
userId: advogadoPro.id,
|
||||
title: 'Dúvida sobre prescrição em ação de cobrança',
|
||||
messages: {
|
||||
create: [
|
||||
{
|
||||
role: 'USER',
|
||||
content: 'Qual o prazo prescricional para ação de cobrança de dívida por contrato verbal?',
|
||||
tokens: 25,
|
||||
},
|
||||
{
|
||||
role: 'ASSISTANT',
|
||||
content: 'O prazo prescricional para ação de cobrança de dívida originada de contrato verbal é de **10 anos**, conforme o art. 205 do Código Civil de 2002, que estabelece o prazo prescricional genérico. Contudo, se houver documento escrito (como um título de crédito), o prazo pode ser diferente:\n\n- **Cheque:** 6 meses (art. 59, Lei 7.357/85)\n- **Nota promissória:** 3 anos (art. 70, LUG)\n- **Duplicata:** 3 anos (art. 18, Lei 5.474/68)\n\nImportante: O prazo começa a contar da data do vencimento da dívida (art. 199, CC).',
|
||||
tokens: 180,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
console.log('✅ Chat created:', chat.title)
|
||||
|
||||
// ── Usage Logs ──
|
||||
await prisma.usageLog.createMany({
|
||||
data: [
|
||||
{ userId: advogadoPro.id, type: 'DOCUMENT', tokens: 3200, cost: 0.032 },
|
||||
{ userId: advogadoPro.id, type: 'DOCUMENT', tokens: 4100, cost: 0.041 },
|
||||
{ userId: advogadoPro.id, type: 'CHAT', tokens: 205, cost: 0.002 },
|
||||
{ userId: advogadoFree.id, type: 'DOCUMENT', tokens: 2200, cost: 0.022 },
|
||||
{ userId: advogadoPro.id, type: 'JURISPRUDENCIA', tokens: 150, cost: 0.001 },
|
||||
],
|
||||
})
|
||||
|
||||
console.log('✅ Usage logs created')
|
||||
|
||||
// ── API Keys ──
|
||||
await prisma.apiKey.create({
|
||||
data: {
|
||||
key: 'jur_live_sk_' + 'a'.repeat(32),
|
||||
name: 'API Principal',
|
||||
userId: advogadoPro.id,
|
||||
active: true,
|
||||
},
|
||||
})
|
||||
|
||||
console.log('✅ API keys created')
|
||||
console.log('\n🎉 Seed completed successfully!')
|
||||
console.log('\n📋 Login credentials (all passwords: 123456):')
|
||||
console.log(' Admin: admin@juridico.ai')
|
||||
console.log(' Pro: maria@advocacia.com')
|
||||
console.log(' Free: joao@email.com')
|
||||
}
|
||||
|
||||
main()
|
||||
.then(async () => {
|
||||
await prisma.$disconnect()
|
||||
})
|
||||
.catch(async (e) => {
|
||||
console.error(e)
|
||||
await prisma.$disconnect()
|
||||
process.exit(1)
|
||||
})
|
||||
Reference in New Issue
Block a user