Carlex22 commited on
Commit
e71dab3
·
1 Parent(s): 77f0bb6

ParaAIV3.0

Browse files
api/__init__.py DELETED
@@ -1,7 +0,0 @@
1
- """
2
- API Package
3
- FastAPI application for para.AI v2.0
4
- """
5
-
6
- __version__ = "2.0.0"
7
- __author__ = "para.AI Team"
 
 
 
 
 
 
 
 
api/processors/__init__.py DELETED
@@ -1 +0,0 @@
1
- """Processors package - 9 Especialistas"""
 
 
api/processors/base.py DELETED
@@ -1,32 +0,0 @@
1
- """Classe base abstrata para todos os processadores"""
2
- from abc import ABC, abstractmethod
3
- from typing import Dict, Any
4
- from datetime import datetime
5
-
6
- class ProcessorBase(ABC):
7
- """Classe base para processadores"""
8
-
9
- def __init__(self, specialist_id: int, specialist_name: str):
10
- self.specialist_id = specialist_id
11
- self.specialist_name = specialist_name
12
- self.confidence_score = 0
13
-
14
- @abstractmethod
15
- def process(self, acordao_data: Dict[str, Any]) -> Dict[str, Any]:
16
- """Processa acórdão"""
17
- pass
18
-
19
- @abstractmethod
20
- def get_schema(self) -> Dict[str, Any]:
21
- """Retorna schema JSON"""
22
- pass
23
-
24
- def post_process(self, result: Dict[str, Any]) -> Dict[str, Any]:
25
- """Pós-processamento"""
26
- return {
27
- "specialist_id": self.specialist_id,
28
- "specialist_name": self.specialist_name,
29
- "result": result,
30
- "confidence_score": self.confidence_score,
31
- "timestamp": datetime.now().isoformat()
32
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
api/routers/processors.py CHANGED
@@ -24,8 +24,8 @@ async def test_processor(request: ProcessorTestRequest):
24
 
25
  processor_name = processor_map.get(request.processor_name, request.processor_name)
26
 
27
- from processors import base_processor
28
- processor = base_processor.get_processor(processor_name)
29
 
30
  # Processar
31
  result = await processor.process(
 
24
 
25
  processor_name = processor_map.get(request.processor_name, request.processor_name)
26
 
27
+ from processors import processor_base
28
+ processor = processor_base.get_processor(processor_name)
29
 
30
  # Processar
31
  result = await processor.process(
processors/processor_analise_contextual.py CHANGED
@@ -4,7 +4,7 @@ Análise semântica, contextual e de relacionamentos
4
  """
5
  from typing import Dict, Any, List
6
  import logging
7
- from processors.base_processor import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
 
4
  """
5
  from typing import Dict, Any, List
6
  import logging
7
+ from .processors.processor_base import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
processors/processor_arquivo_relacional.py CHANGED
@@ -4,7 +4,7 @@ Arquivamento estruturado e indexação para recuperação
4
  """
5
  from typing import Dict, Any, List
6
  import logging
7
- from processors.base_processor import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
 
4
  """
5
  from typing import Dict, Any, List
6
  import logging
7
+ from .processors.processor_base import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
processors/processor_auditoria.py CHANGED
@@ -4,7 +4,7 @@ Verificação de integridade e conformidade do acórdão
4
  """
5
  from typing import Dict, Any, List
6
  import logging
7
- from processors.base_processor import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
 
4
  """
5
  from typing import Dict, Any, List
6
  import logging
7
+ from .processors.processor_base import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
processors/processor_decisao.py CHANGED
@@ -4,7 +4,7 @@ Análise do resultado/decisão e seus impactos
4
  """
5
  from typing import Dict, Any, List
6
  import logging
7
- from processors.base_processor import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
 
4
  """
5
  from typing import Dict, Any, List
6
  import logging
7
+ from .processors.processor_base import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
processors/processor_fundamentacao.py CHANGED
@@ -4,7 +4,7 @@ Análise de fundamentação legal e precedentes
4
  """
5
  from typing import Dict, Any, List
6
  import logging
7
- from processors.base_processor import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
 
4
  """
5
  from typing import Dict, Any, List
6
  import logging
7
+ from .processors.processor_base import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
processors/processor_metadados.py CHANGED
@@ -4,7 +4,7 @@ Extração de informações estruturais do acórdão
4
  """
5
  from typing import Dict, Any
6
  import logging
7
- from processors.base_processor import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
 
4
  """
5
  from typing import Dict, Any
6
  import logging
7
+ from .processors.processor_base import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
processors/processor_relatorio.py CHANGED
@@ -4,7 +4,7 @@ Análise estrutural e argumentativa do relatório
4
  """
5
  from typing import Dict, Any, List
6
  import logging
7
- from processors.base_processor import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
 
4
  """
5
  from typing import Dict, Any, List
6
  import logging
7
+ from .processors.processor_base import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
processors/processor_segmentacao_sintatica.py CHANGED
@@ -4,7 +4,7 @@ Análise sintática profunda e segmentação de unidades semânticas
4
  """
5
  from typing import Dict, Any, List
6
  import logging
7
- from processors.base_processor import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
 
4
  """
5
  from typing import Dict, Any, List
6
  import logging
7
+ from .processors.processor_base import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
processors/processor_transcricao_3partite.py CHANGED
@@ -4,7 +4,7 @@ Transcrição estruturada com mapeamento triplo (original → análise → resum
4
  """
5
  from typing import Dict, Any, List
6
  import logging
7
- from processors.base_processor import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
 
4
  """
5
  from typing import Dict, Any, List
6
  import logging
7
+ from .processors.processor_base import ProcessorBase
8
 
9
  logger = logging.getLogger(__name__)
10
 
scripts/docker-entrypoint.sh DELETED
@@ -1,127 +0,0 @@
1
- #!/bin/bash
2
- # ============================================================================
3
- # Docker Entrypoint - para.AI API v3.0
4
- # Inicializa PostgreSQL local + API FastAPI
5
- # ============================================================================
6
-
7
- set -e
8
-
9
- echo ""
10
- echo "╔══════════════════════════════════════════════════════════════╗"
11
- echo "║ para.AI API v3.0 ║"
12
- echo "║ Análise Jurisprudencial com IA ║"
13
- echo "╚══════════════════════════════════════════════════════════════╝"
14
- echo ""
15
-
16
- # ============================================================================
17
- # FASE 1: VERIFICAR AMBIENTE
18
- # ============================================================================
19
- echo "🔍 Verificando ambiente..."
20
-
21
- # Mostrar informações do sistema
22
- echo " Python: $(python --version)"
23
- echo " PostgreSQL: $(su - postgres -c 'psql --version' | head -1)"
24
- echo " Diretório: $(pwd)"
25
- echo ""
26
-
27
- # ============================================================================
28
- # FASE 2: INICIALIZAR POSTGRESQL
29
- # ============================================================================
30
- echo "🐘 Inicializando PostgreSQL local..."
31
- /init-postgres.sh
32
-
33
- # Verificar se PostgreSQL está rodando
34
- if ! pg_isready -h localhost -p 5432 &> /dev/null; then
35
- echo "❌ PostgreSQL não está rodando!"
36
- exit 1
37
- fi
38
-
39
- echo "✅ PostgreSQL OK"
40
- echo ""
41
-
42
- # ============================================================================
43
- # FASE 3: CONFIGURAR VARIÁVEIS DE AMBIENTE
44
- # ============================================================================
45
- echo "⚙️ Configurando variáveis de ambiente..."
46
-
47
- # Se DATABASE_URL não foi fornecida, usar a local
48
- if [ -z "$DATABASE_URL" ] || [ "$DATABASE_URL" = "postgresql://para_ai:para_ai_temp@localhost:5432/para_ai" ]; then
49
- export DATABASE_URL="postgresql://${POSTGRES_USER:-para_ai}:${POSTGRES_PASSWORD:-para_ai_temp}@localhost:5432/${POSTGRES_DB:-para_ai}"
50
- echo " DATABASE_URL configurada para PostgreSQL local"
51
- fi
52
-
53
- # Configurações padrão para HF Spaces
54
- export APP_ENV="${APP_ENV:-production}"
55
- export DEBUG="${DEBUG:-false}"
56
- export HOST="${HOST:-0.0.0.0}"
57
- export PORT="${PORT:-7860}"
58
-
59
- echo " APP_ENV: $APP_ENV"
60
- echo " PORT: $PORT"
61
- echo " DATABASE: PostgreSQL local"
62
- echo ""
63
-
64
- # ============================================================================
65
- # FASE 4: TESTAR CONEXÃO COM BANCO
66
- # ============================================================================
67
- echo "🔗 Testando conexão com banco de dados..."
68
-
69
- python3 << 'PYTHON_TEST'
70
- import sys
71
- from api.config import get_settings
72
-
73
- try:
74
- settings = get_settings()
75
- print(f" ✅ Configurações carregadas")
76
- print(f" ✅ Environment: {settings.APP_ENV}")
77
- print(f" ✅ Database URL configurada")
78
- except Exception as e:
79
- print(f" ❌ Erro ao carregar configurações: {e}")
80
- sys.exit(1)
81
-
82
- # Testar conexão com DB
83
- try:
84
- from database.db_manager import get_db_manager
85
- db = get_db_manager()
86
- if db.health_check():
87
- print(f" ✅ Conexão com PostgreSQL OK")
88
- else:
89
- print(f" ❌ Falha no health check do DB")
90
- sys.exit(1)
91
- except Exception as e:
92
- print(f" ❌ Erro ao conectar com DB: {e}")
93
- sys.exit(1)
94
- PYTHON_TEST
95
-
96
- if [ $? -ne 0 ]; then
97
- echo "❌ Falha ao testar conexão com banco!"
98
- exit 1
99
- fi
100
-
101
- echo ""
102
-
103
- # ============================================================================
104
- # FASE 5: INICIALIZAR API
105
- # ============================================================================
106
- echo "🚀 Iniciando API FastAPI..."
107
- echo ""
108
- echo "╔══════════════════════════════════════════════════════════════╗"
109
- echo "║ API ONLINE ║"
110
- echo "╚══════════════════════════════════════════════════════════════╝"
111
- echo ""
112
- echo "📍 Endpoints disponíveis:"
113
- echo " • Documentação: http://localhost:$PORT/api/docs"
114
- echo " • Health Check: http://localhost:$PORT/api/v1/health"
115
- echo " • Upload: http://localhost:$PORT/api/v1/process/upload"
116
- echo ""
117
- echo "💡 PostgreSQL rodando localmente (temporário)"
118
- echo "⚠️ ATENÇÃO: Dados são perdidos ao reiniciar o container!"
119
- echo ""
120
- echo "🔧 Para banco persistente, configure DATABASE_URL nas Secrets"
121
- echo " Recomendado: Neon (https://neon.tech) ou Supabase"
122
- echo ""
123
- echo "=================================================="
124
- echo ""
125
-
126
- # Executar comando passado (geralmente uvicorn)
127
- exec "$@"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
scripts/init-postgres.sh DELETED
@@ -1,140 +0,0 @@
1
- #!/bin/bash
2
- # ============================================================================
3
- # Script de inicialização do PostgreSQL dentro do container Docker
4
- # para.AI API v3.0 - Hugging Face Spaces
5
- # ============================================================================
6
-
7
- set -e
8
-
9
- echo "=================================================="
10
- echo "🐘 Inicializando PostgreSQL local..."
11
- echo "=================================================="
12
-
13
- # Variáveis
14
- POSTGRES_USER="${POSTGRES_USER:-para_ai}"
15
- POSTGRES_PASSWORD="${POSTGRES_PASSWORD:-para_ai_temp}"
16
- POSTGRES_DB="${POSTGRES_DB:-para_ai}"
17
- PGDATA="/var/lib/postgresql/data"
18
-
19
- # Verificar se já foi inicializado
20
- if [ -d "$PGDATA/base" ]; then
21
- echo "✅ PostgreSQL já inicializado (dados existem)"
22
- else
23
- echo "📦 Inicializando cluster PostgreSQL..."
24
-
25
- # Criar diretório de dados
26
- mkdir -p "$PGDATA"
27
- chown -R postgres:postgres "$PGDATA"
28
- chmod 700 "$PGDATA"
29
-
30
- # Inicializar cluster como usuário postgres
31
- su - postgres -c "/usr/lib/postgresql/15/bin/initdb -D $PGDATA --encoding=UTF8 --locale=C"
32
-
33
- echo "✅ Cluster criado"
34
- fi
35
-
36
- # Configurar pg_hba.conf para aceitar conexões locais
37
- cat > "$PGDATA/pg_hba.conf" << EOF
38
- # TYPE DATABASE USER ADDRESS METHOD
39
- local all all trust
40
- host all all 127.0.0.1/32 md5
41
- host all all ::1/128 md5
42
- host all all 0.0.0.0/0 md5
43
- EOF
44
-
45
- # Configurar postgresql.conf
46
- cat >> "$PGDATA/postgresql.conf" << EOF
47
-
48
- # Configurações para ambiente Docker/HF Spaces
49
- listen_addresses = '*'
50
- port = 5432
51
- max_connections = 50
52
- shared_buffers = 128MB
53
- work_mem = 4MB
54
- maintenance_work_mem = 64MB
55
- effective_cache_size = 256MB
56
- log_destination = 'stderr'
57
- logging_collector = off
58
- log_min_messages = warning
59
- log_min_error_statement = error
60
- EOF
61
-
62
- echo "✅ Configurações aplicadas"
63
-
64
- # Iniciar PostgreSQL em background
65
- echo "🚀 Iniciando servidor PostgreSQL..."
66
- su - postgres -c "/usr/lib/postgresql/15/bin/pg_ctl -D $PGDATA -l /var/log/postgresql/postgresql.log start"
67
-
68
- # Aguardar PostgreSQL ficar pronto
69
- echo "⏳ Aguardando PostgreSQL ficar pronto..."
70
- for i in {1..30}; do
71
- if su - postgres -c "psql -l" &> /dev/null; then
72
- echo "✅ PostgreSQL está pronto!"
73
- break
74
- fi
75
- echo " Tentativa $i/30..."
76
- sleep 1
77
- done
78
-
79
- # Verificar se ficou pronto
80
- if ! su - postgres -c "psql -l" &> /dev/null; then
81
- echo "❌ PostgreSQL não iniciou corretamente!"
82
- cat /var/log/postgresql/postgresql.log
83
- exit 1
84
- fi
85
-
86
- # Criar usuário se não existir
87
- echo "👤 Criando usuário $POSTGRES_USER..."
88
- su - postgres -c "psql -tc \"SELECT 1 FROM pg_user WHERE usename = '$POSTGRES_USER'\" | grep -q 1" || su - postgres -c "psql -c \"CREATE USER $POSTGRES_USER WITH PASSWORD '$POSTGRES_PASSWORD';\"" && echo "✅ Usuário criado"
89
-
90
- # Criar database se não existir
91
- echo "🗄️ Criando database $POSTGRES_DB..."
92
- su - postgres -c "psql -lqt | cut -d \| -f 1 | grep -qw $POSTGRES_DB" || su - postgres -c "psql -c \"CREATE DATABASE $POSTGRES_DB OWNER $POSTGRES_USER;\"" && echo "✅ Database criado"
93
-
94
- # Dar permissões
95
- su - postgres -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE $POSTGRES_DB TO $POSTGRES_USER;\""
96
-
97
- # Executar DDL se arquivo existir
98
- if [ -f "/app/database/init_db.sql" ]; then
99
- echo "📜 Executando DDL..."
100
- PGPASSWORD=$POSTGRES_PASSWORD psql -h localhost -U $POSTGRES_USER -d $POSTGRES_DB -f /app/database/init_db.sql
101
- echo "✅ DDL executado"
102
- else
103
- echo "⚠️ Arquivo init_db.sql não encontrado"
104
- fi
105
-
106
- # Executar seed data se arquivo existir
107
- if [ -f "/app/scripts/seed_data.sql" ]; then
108
- echo "🌱 Inserindo dados de teste..."
109
- PGPASSWORD=$POSTGRES_PASSWORD psql -h localhost -U $POSTGRES_USER -d $POSTGRES_DB -f /app/scripts/seed_data.sql
110
- echo "✅ Seed data inserido"
111
- fi
112
-
113
- # Mostrar status
114
- echo ""
115
- echo "=================================================="
116
- echo "✅ PostgreSQL inicializado com sucesso!"
117
- echo "=================================================="
118
- echo "📊 Informações:"
119
- echo " Host: localhost"
120
- echo " Port: 5432"
121
- echo " Database: $POSTGRES_DB"
122
- echo " User: $POSTGRES_USER"
123
- echo ""
124
-
125
- # Mostrar estatísticas
126
- echo "📈 Estatísticas:"
127
- PGPASSWORD=$POSTGRES_PASSWORD psql -h localhost -U $POSTGRES_USER -d $POSTGRES_DB -c "
128
- SELECT
129
- 'Tribunais' as tabela, COUNT(*)::text as registros FROM tribunais
130
- UNION ALL
131
- SELECT 'Usuários', COUNT(*)::text FROM usuarios
132
- UNION ALL
133
- SELECT 'Acórdãos', COUNT(*)::text FROM acordaos
134
- UNION ALL
135
- SELECT 'Decisões', COUNT(*)::text FROM decisoes;
136
- " 2>/dev/null || echo " (tabelas ainda não criadas)"
137
-
138
- echo ""
139
- echo "✅ Pronto para iniciar API!"
140
- echo "=================================================="
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
scripts/seed-data.sql DELETED
@@ -1,83 +0,0 @@
1
- -- ============================================================================
2
- -- Seed Data para desenvolvimento local - para.AI
3
- -- ============================================================================
4
- -- Este script insere dados de teste para desenvolvimento
5
-
6
- -- Inserir tribunal de teste
7
- INSERT INTO tribunais (id, nome, sigla, uf, tipo, url_base, created_at, updated_at)
8
- VALUES
9
- (gen_random_uuid(), 'Tribunal de Justiça do Paraná', 'TJPR', 'PR', 'Estadual', 'https://www.tjpr.jus.br', NOW(), NOW()),
10
- (gen_random_uuid(), 'Tribunal de Justiça de São Paulo', 'TJSP', 'SP', 'Estadual', 'https://www.tjsp.jus.br', NOW(), NOW()),
11
- (gen_random_uuid(), 'Superior Tribunal de Justiça', 'STJ', 'DF', 'Superior', 'https://www.stj.jus.br', NOW(), NOW())
12
- ON CONFLICT (sigla) DO NOTHING;
13
-
14
- -- Inserir usuário de teste
15
- INSERT INTO usuarios (id, email, nome, senha_hash, ativo, role, created_at, updated_at)
16
- VALUES
17
- (gen_random_uuid(), 'admin@para.ai', 'Administrador', '$2b$12$dummy_hash_for_development', TRUE, 'admin', NOW(), NOW()),
18
- (gen_random_uuid(), 'dev@para.ai', 'Desenvolvedor', '$2b$12$dummy_hash_for_development', TRUE, 'user', NOW(), NOW())
19
- ON CONFLICT (email) DO NOTHING;
20
-
21
- -- Inserir acórdão de teste
22
- DO $$
23
- DECLARE
24
- v_tribunal_id VARCHAR(36);
25
- v_acordao_id VARCHAR(36);
26
- BEGIN
27
- -- Pegar ID do TJPR
28
- SELECT id INTO v_tribunal_id FROM tribunais WHERE sigla = 'TJPR' LIMIT 1;
29
-
30
- -- Inserir acórdão de teste
31
- INSERT INTO acordaos (
32
- id, tribunal_id, numero, ano, data_julgamento,
33
- ementa, relator, orgao_julgador,
34
- hash_conteudo, status_processamento,
35
- created_at, updated_at
36
- )
37
- VALUES (
38
- gen_random_uuid(),
39
- v_tribunal_id,
40
- '0000001-00.2025.8.16.0000',
41
- 2025,
42
- '2025-01-15 14:30:00',
43
- 'APELAÇÃO CÍVEL. DIREITO DO CONSUMIDOR. RESPONSABILIDADE CIVIL. DANO MORAL. CDC ART. 14. RECURSO PROVIDO.',
44
- 'Des. Teste da Silva',
45
- '1ª Câmara Cível',
46
- encode(sha256('teste_acordao_1'::bytea), 'hex'),
47
- 'pendente',
48
- NOW(),
49
- NOW()
50
- )
51
- ON CONFLICT (hash_conteudo) DO NOTHING
52
- RETURNING id INTO v_acordao_id;
53
-
54
- -- Inserir palavras-chave de teste
55
- INSERT INTO palavras_chave (id, termo, categoria, frequencia, ativo, created_at)
56
- VALUES
57
- (gen_random_uuid(), 'responsabilidade civil', 'direito_civil', 100, TRUE, NOW()),
58
- (gen_random_uuid(), 'dano moral', 'direito_civil', 150, TRUE, NOW()),
59
- (gen_random_uuid(), 'consumidor', 'direito_consumidor', 200, TRUE, NOW()),
60
- (gen_random_uuid(), 'CDC', 'legislacao', 180, TRUE, NOW())
61
- ON CONFLICT (termo) DO NOTHING;
62
-
63
- END $$;
64
-
65
- -- Criar índices adicionais úteis
66
- CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_acordao_ano_tribunal ON acordaos(ano, tribunal_id);
67
- CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_acordao_status_data ON acordaos(status_processamento, data_julgamento DESC);
68
-
69
- -- Vacuum e analyze
70
- VACUUM ANALYZE acordaos;
71
- VACUUM ANALYZE tribunais;
72
- VACUUM ANALYZE usuarios;
73
-
74
- -- Mensagem de sucesso
75
- DO $$
76
- BEGIN
77
- RAISE NOTICE '✅ Seed data inserido com sucesso!';
78
- RAISE NOTICE '📊 Estatísticas:';
79
- RAISE NOTICE ' - Tribunais: %', (SELECT COUNT(*) FROM tribunais);
80
- RAISE NOTICE ' - Usuários: %', (SELECT COUNT(*) FROM usuarios);
81
- RAISE NOTICE ' - Acórdãos: %', (SELECT COUNT(*) FROM acordaos);
82
- RAISE NOTICE ' - Palavras-chave: %', (SELECT COUNT(*) FROM palavras_chave);
83
- END $$;