File size: 3,022 Bytes
e6027de
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
##PARA.AI/core/normalizer.py
"""
Normalizer V13.6 - Fase 1 (Python puro, sem LLM)
Extrai metadados e cria estrutura base
"""
import re
import hashlib
from datetime import datetime
from typing import Dict, Any

class Normalizer:
    """Normaliza input e cria estrutura base V13.6"""

    def __init__(self):
        self.version = "v13.6"

    def normalize(self, raw_input: Dict[str, Any]) -> Dict[str, Any]:
        """
        Normaliza input bruto e retorna estrutura base
        INPUT: {"inteiro_teor": "...", "ementa": "...", ...}
        OUTPUT: Estrutura V13.6 com campos base preenchidos
        """
        # Extrair campos básicos
        inteiro_teor = raw_input.get("inteiro_teor", raw_input.get("integra", ""))
        ementa = raw_input.get("ementa", "")

        # Criar estrutura base
        normalized = {
            "protocolo_versao": self.version,
            "id_manifestacao": raw_input.get("acordaoid", 0),
            "hashes": self._generate_hashes(raw_input),
            "metadados": self._extract_metadata(raw_input),
            "classificacao_tematica": None,  # Fase 2.1
            "RELATORIO": None,               # Fase 3.1
            "FUNDAMENTACAO": None,           # Fase 3.2
            "DECISAO": None,                 # Fase 3.3
            "analise_arquivista": None,      # Fase 4
            "secoes_originais": {
                "ementa": ementa,
                "inteiro_teor_bruto": inteiro_teor
            },
            "metadados_processamento": {
                "protocolo_origem": self.version,
                "data_processamento": datetime.utcnow().isoformat(),
                "versao_preprocessador": "v13.6.0"
            },
            "campos_futuros": {
                "embeddings_metadata": None
            }
        }

        return normalized

    def _generate_hashes(self, raw: Dict[str, Any]) -> Dict[str, str]:
        """Gera hashes SHA-256 para deduplicação"""
        processo = raw.get("processo", "")
        ementa = raw.get("ementa", "")
        inteiro_teor = raw.get("inteiro_teor", raw.get("integra", ""))

        return {
            "hash_numero_processo": hashlib.sha256(processo.encode()).hexdigest() if processo else None,
            "hash_ementa": hashlib.sha256(ementa.encode()).hexdigest() if ementa else None,
            "hash_inteiro_teor": hashlib.sha256(inteiro_teor.encode()).hexdigest() if inteiro_teor else None
        }

    def _extract_metadata(self, raw: Dict[str, Any]) -> Dict[str, Any]:
        """Extrai metadados básicos"""
        return {
            "tribunal": "TJPR",
            "orgao_julgador": raw.get("orgaojulgador", ""),
            "classe_processual": raw.get("classe_processual", ""),
            "numeros_processo": [raw.get("processo", "")],
            "relator": raw.get("relator", ""),
            "data_julgamento": raw.get("datadojulgamento", ""),
            "data_publicacao": raw.get("fontedatadapublicacao", ""),
            "url_original": raw.get("urldocumento", "")
        }