Files
lexmind/prisma/seed.ts

368 lines
16 KiB
TypeScript

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)
})