chaskiwasi-plugin-remaju 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,48 @@
1
+ Metadata-Version: 2.4
2
+ Name: chaskiwasi-plugin-remaju
3
+ Version: 0.1.0
4
+ Summary: Plugin para extracción de datos en resoluciones de remate judicial (REMAJU)
5
+ Requires-Python: >=3.9
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: chaskiwasi>=0.2.1
8
+
9
+ # Plugin Chaskiwasi - REMAJU
10
+
11
+ Este plugin permite la detección y extracción estructurada de datos relevantes en resoluciones judiciales de remate electrónico (`REM@JU`):
12
+ - Nombres de Demandante(s)
13
+ - Nombres de Demandado(s)
14
+ - Dirección del Inmueble
15
+ - Indicador de requerimiento de fijación de Cartel
16
+
17
+ ## Instalación
18
+ ```bash
19
+ pip install -e .
20
+ ```
21
+ ---
22
+
23
+ ## 3. `src/chaskiwasi_remaju/__init__.py`
24
+ ```python
25
+
26
+ """
27
+ Módulo principal del plugin chaskiwasi-remaju.
28
+ Aplica Lazy Loading estricto para no importar enums globales a nivel de módulo.
29
+ """
30
+
31
+ def get_taxonomy_registry():
32
+ from chaskiwasi_remaju.taxonomy import get_taxonomy_registry as _get_taxonomy
33
+ return _get_taxonomy()
34
+
35
+ def get_query_rules():
36
+ from chaskiwasi_remaju.query_rules import get_query_rules as _get_query_rules
37
+ return _get_query_rules()
38
+
39
+ def create_cascade_factory():
40
+ from chaskiwasi_remaju.factory import create_cascade_factory as _create_factory
41
+ return _create_factory()
42
+
43
+ __all__ = [
44
+ "get_taxonomy_registry",
45
+ "get_query_rules",
46
+ "create_cascade_factory",
47
+ ]
48
+ ```
@@ -0,0 +1,40 @@
1
+ # Plugin Chaskiwasi - REMAJU
2
+
3
+ Este plugin permite la detección y extracción estructurada de datos relevantes en resoluciones judiciales de remate electrónico (`REM@JU`):
4
+ - Nombres de Demandante(s)
5
+ - Nombres de Demandado(s)
6
+ - Dirección del Inmueble
7
+ - Indicador de requerimiento de fijación de Cartel
8
+
9
+ ## Instalación
10
+ ```bash
11
+ pip install -e .
12
+ ```
13
+ ---
14
+
15
+ ## 3. `src/chaskiwasi_remaju/__init__.py`
16
+ ```python
17
+
18
+ """
19
+ Módulo principal del plugin chaskiwasi-remaju.
20
+ Aplica Lazy Loading estricto para no importar enums globales a nivel de módulo.
21
+ """
22
+
23
+ def get_taxonomy_registry():
24
+ from chaskiwasi_remaju.taxonomy import get_taxonomy_registry as _get_taxonomy
25
+ return _get_taxonomy()
26
+
27
+ def get_query_rules():
28
+ from chaskiwasi_remaju.query_rules import get_query_rules as _get_query_rules
29
+ return _get_query_rules()
30
+
31
+ def create_cascade_factory():
32
+ from chaskiwasi_remaju.factory import create_cascade_factory as _create_factory
33
+ return _create_factory()
34
+
35
+ __all__ = [
36
+ "get_taxonomy_registry",
37
+ "get_query_rules",
38
+ "create_cascade_factory",
39
+ ]
40
+ ```
@@ -0,0 +1,22 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "chaskiwasi-plugin-remaju"
7
+ version = "0.1.0"
8
+ description = "Plugin para extracción de datos en resoluciones de remate judicial (REMAJU)"
9
+ readme = "README.md"
10
+ requires-python = ">=3.9"
11
+ dependencies = [
12
+ "chaskiwasi>=0.2.1"
13
+ ]
14
+
15
+ [project.entry-points."chaskiwasi.taxonomy"]
16
+ remaju = "chaskiwasi_remaju.taxonomy:get_taxonomy_registry"
17
+
18
+ [project.entry-points."chaskiwasi.query_rules"]
19
+ remaju = "chaskiwasi_remaju.query_rules:get_query_rules"
20
+
21
+ [project.entry-points."chaskiwasi.classifiers"]
22
+ remaju = "chaskiwasi_remaju.factory:create_cascade_factory"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,59 @@
1
+ """
2
+ Reglas de extracción determinista (Regex) específicas del dominio de resoluciones REMAJU.
3
+ """
4
+
5
+ import re
6
+ from typing import Dict, Any
7
+
8
+ def extract_remaju_data(text: str, section_texts: Dict[str, str]) -> Dict[str, Any]:
9
+ # Lazy Loading: importación dentro de la función de regla de dominio
10
+ from chaskiwasi.config.taxonomy_registry import SectionEnum
11
+
12
+ header_text = section_texts.get(SectionEnum.HEADER.value, text)
13
+ body_text = section_texts.get(SectionEnum.BODY.value, text)
14
+ footer_text = section_texts.get(SectionEnum.FOOTER.value, text)
15
+
16
+ extracted_data = {}
17
+
18
+ # 1. Extracción de Demandantes (HEADER)
19
+ demandantes = []
20
+ demandante_match = re.search(r"DEMANDANTE\s*[:|]\s*(.+)", header_text, re.IGNORECASE)
21
+ if demandante_match:
22
+ name = demandante_match.group(1).strip().rstrip(",")
23
+ if name:
24
+ demandantes.append(name)
25
+ extracted_data["demandantes"] = demandantes
26
+
27
+ # 2. Extracción de Demandados (HEADER)
28
+ demandados = []
29
+ demandado_block = re.search(
30
+ r"DEMANDADO\s*[:|]\s*(.+?)(?=\n\s*\n|\n[A-Z\s]+[:|]|\Z)",
31
+ header_text,
32
+ re.IGNORECASE | re.DOTALL,
33
+ )
34
+ if demandado_block:
35
+ block_text = demandado_block.group(1)
36
+ lines = [line.strip() for line in block_text.split("\n") if line.strip()]
37
+ for line in lines:
38
+ clean_line = re.sub(r"^[:|]\s*", "", line).strip()
39
+ if clean_line:
40
+ demandados.append(clean_line)
41
+ extracted_data["demandados"] = demandados
42
+
43
+ # 3. Extracción de Dirección del Inmueble (BODY)
44
+ direccion_match = re.search(r"Ubicación:\s*(.+)", body_text, re.IGNORECASE)
45
+ if direccion_match:
46
+ extracted_data["direccion_inmueble"] = direccion_match.group(1).strip()
47
+ else:
48
+ extracted_data["direccion_inmueble"] = None
49
+
50
+ # 4. Extracción de Indicador de Cartel (FOOTER)
51
+ has_cartel = bool(re.search(r"(?i)\bcartel(?:es)?\b", footer_text))
52
+ extracted_data["requiere_cartel"] = has_cartel
53
+
54
+ return extracted_data
55
+
56
+ def get_domain_rules():
57
+ return {
58
+ "extractor": extract_remaju_data
59
+ }
@@ -0,0 +1,21 @@
1
+ """
2
+ Fábrica principal para ensamblar la cascada de clasificación y extracción de REMAJU.
3
+ """
4
+
5
+ def create_cascade_factory():
6
+ # Lazy Loading: importación dentro de la función de fábrica
7
+ from chaskiwasi.config.taxonomy_registry import SourceEnum
8
+ from chaskiwasi_plugin_remaju.taxonomy import get_taxonomy_registry
9
+ from chaskiwasi_plugin_remaju.domain_rules import get_domain_rules
10
+ from chaskiwasi_plugin_remaju.gemini_rules import get_gemini_rules
11
+
12
+ taxonomy = get_taxonomy_registry()
13
+ domain_rules = get_domain_rules()
14
+ gemini_rules = get_gemini_rules()
15
+
16
+ return {
17
+ "source": SourceEnum.REMAJU_RESOLUTION,
18
+ "taxonomy": taxonomy,
19
+ "domain_rules": domain_rules,
20
+ "gemini_rules": gemini_rules,
21
+ }
@@ -0,0 +1,35 @@
1
+ """
2
+ Configuración de reglas y prompts de respaldo para Gemini (LLM).
3
+ """
4
+
5
+ def get_gemini_rules():
6
+ return {
7
+ "system_instruction": (
8
+ "Eres un experto extractor de información jurídica especializado en resoluciones de "
9
+ "Remate Judicial Electrónico (REMAJU). Extrae con precisión los campos solicitados."
10
+ ),
11
+ "prompt_template": (
12
+ "Analiza el siguiente texto de una resolución judicial y extrae:\n"
13
+ "- demandantes: lista de nombres de la parte demandante o ejecutante.\n"
14
+ "- demandados: lista de nombres de la parte demandada o ejecutada.\n"
15
+ "- direccion_inmueble: dirección exacta del inmueble materia de remate.\n"
16
+ "- requiere_cartel: valor booleano (true/false) si se indica fijar carteles.\n\n"
17
+ "Texto del documento:\n{document_text}"
18
+ ),
19
+ "response_schema": {
20
+ "type": "OBJECT",
21
+ "properties": {
22
+ "demandantes": {
23
+ "type": "ARRAY",
24
+ "items": {"type": "STRING"}
25
+ },
26
+ "demandados": {
27
+ "type": "ARRAY",
28
+ "items": {"type": "STRING"}
29
+ },
30
+ "direccion_inmueble": {"type": "STRING"},
31
+ "requiere_cartel": {"type": "BOOLEAN"}
32
+ },
33
+ "required": ["demandantes", "demandados", "direccion_inmueble", "requiere_cartel"]
34
+ }
35
+ }
@@ -0,0 +1,49 @@
1
+ """
2
+ Reglas de intención y detección de consultas para REMAJU.
3
+ """
4
+ from typing import List
5
+ from chaskiwasi.query_engine.cross_filter import IntentRule
6
+
7
+ def get_query_rules() -> List[IntentRule]:
8
+ """
9
+ Fábrica que expone las reglas de intención para el plugin REMAJU.
10
+ Retorna la lista pura de IntentRules aislando la evaluación de los Enums al momento de ejecución.
11
+ """
12
+ # Lazy Loading: importación dentro de la función de fábrica
13
+ from chaskiwasi.config.taxonomy_registry import SectionEnum, SourceEnum
14
+
15
+ return [
16
+ IntentRule(
17
+ keywords=["remate", "remaju", "resolucion", "ejecucion de garantias", "convocatoria"],
18
+ metadata_filter={
19
+ "$and": [{"fuente": SourceEnum.REMAJU_RESOLUTION.value}]
20
+ }
21
+ ),
22
+ IntentRule(
23
+ keywords=["demandante", "demandado", "ejecutante", "ejecutado", "partes"],
24
+ metadata_filter={
25
+ "$and": [
26
+ {"fuente": SourceEnum.REMAJU_RESOLUTION.value},
27
+ {"tipo_seccion": SectionEnum.HEADER.value}
28
+ ]
29
+ }
30
+ ),
31
+ IntentRule(
32
+ keywords=["ubicacion", "ubicación", "inmueble", "direccion", "dirección", "lote"],
33
+ metadata_filter={
34
+ "$and": [
35
+ {"fuente": SourceEnum.REMAJU_RESOLUTION.value},
36
+ {"tipo_seccion": SectionEnum.BODY.value}
37
+ ]
38
+ }
39
+ ),
40
+ IntentRule(
41
+ keywords=["cartel", "carteles", "aviso", "fijese", "juzgado"],
42
+ metadata_filter={
43
+ "$and": [
44
+ {"fuente": SourceEnum.REMAJU_RESOLUTION.value},
45
+ {"tipo_seccion": SectionEnum.FOOTER.value}
46
+ ]
47
+ }
48
+ )
49
+ ]
@@ -0,0 +1,61 @@
1
+ """
2
+ Registro de taxonomía para el plugin REMAJU.
3
+ """
4
+
5
+ def get_taxonomy_registry():
6
+ # Lazy Loading: importación dentro de la función de fábrica
7
+ from chaskiwasi.config.taxonomy_registry import (
8
+ TaxonomyRegistry,
9
+ SourceEnum,
10
+ SectionEnum,
11
+ FieldDefinition,
12
+ FieldType,
13
+ )
14
+
15
+ registry = TaxonomyRegistry()
16
+
17
+ # Registro de Fuente
18
+ source = SourceEnum.REMAJU_RESOLUTION
19
+
20
+ # Definición de Secciones
21
+ registry.register_section_bounds(
22
+ source=source,
23
+ bounds={
24
+ SectionEnum.HEADER: (0.0, 0.20),
25
+ SectionEnum.BODY: (0.20, 0.80),
26
+ SectionEnum.FOOTER: (0.80, 1.00),
27
+ }
28
+ )
29
+
30
+ # Definición de Campos Objetivo
31
+ fields = [
32
+ FieldDefinition(
33
+ name="demandantes",
34
+ field_type=FieldType.LIST_STRING,
35
+ section=SectionEnum.HEADER,
36
+ description="Nombres y apellidos de la parte demandante/ejecutante",
37
+ ),
38
+ FieldDefinition(
39
+ name="demandados",
40
+ field_type=FieldType.LIST_STRING,
41
+ section=SectionEnum.HEADER,
42
+ description="Nombres y apellidos de la parte demandada/ejecutada",
43
+ ),
44
+ FieldDefinition(
45
+ name="direccion_inmueble",
46
+ field_type=FieldType.STRING,
47
+ section=SectionEnum.BODY,
48
+ description="Ubicación o dirección completa del inmueble a rematar",
49
+ ),
50
+ FieldDefinition(
51
+ name="requiere_cartel",
52
+ field_type=FieldType.BOOLEAN,
53
+ section=SectionEnum.FOOTER,
54
+ description="Indica si se ordena fijar carteles en los inmuebles o local del juzgado",
55
+ ),
56
+ ]
57
+
58
+ for field in fields:
59
+ registry.register_field(source=source, field=field)
60
+
61
+ return registry
@@ -0,0 +1,48 @@
1
+ Metadata-Version: 2.4
2
+ Name: chaskiwasi-plugin-remaju
3
+ Version: 0.1.0
4
+ Summary: Plugin para extracción de datos en resoluciones de remate judicial (REMAJU)
5
+ Requires-Python: >=3.9
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: chaskiwasi>=0.2.1
8
+
9
+ # Plugin Chaskiwasi - REMAJU
10
+
11
+ Este plugin permite la detección y extracción estructurada de datos relevantes en resoluciones judiciales de remate electrónico (`REM@JU`):
12
+ - Nombres de Demandante(s)
13
+ - Nombres de Demandado(s)
14
+ - Dirección del Inmueble
15
+ - Indicador de requerimiento de fijación de Cartel
16
+
17
+ ## Instalación
18
+ ```bash
19
+ pip install -e .
20
+ ```
21
+ ---
22
+
23
+ ## 3. `src/chaskiwasi_remaju/__init__.py`
24
+ ```python
25
+
26
+ """
27
+ Módulo principal del plugin chaskiwasi-remaju.
28
+ Aplica Lazy Loading estricto para no importar enums globales a nivel de módulo.
29
+ """
30
+
31
+ def get_taxonomy_registry():
32
+ from chaskiwasi_remaju.taxonomy import get_taxonomy_registry as _get_taxonomy
33
+ return _get_taxonomy()
34
+
35
+ def get_query_rules():
36
+ from chaskiwasi_remaju.query_rules import get_query_rules as _get_query_rules
37
+ return _get_query_rules()
38
+
39
+ def create_cascade_factory():
40
+ from chaskiwasi_remaju.factory import create_cascade_factory as _create_factory
41
+ return _create_factory()
42
+
43
+ __all__ = [
44
+ "get_taxonomy_registry",
45
+ "get_query_rules",
46
+ "create_cascade_factory",
47
+ ]
48
+ ```
@@ -0,0 +1,14 @@
1
+ README.md
2
+ pyproject.toml
3
+ src/chaskiwasi_plugin_remaju/__init__.py
4
+ src/chaskiwasi_plugin_remaju/domain_rules.py
5
+ src/chaskiwasi_plugin_remaju/factory.py
6
+ src/chaskiwasi_plugin_remaju/gemini_rules.py
7
+ src/chaskiwasi_plugin_remaju/query_rules.py
8
+ src/chaskiwasi_plugin_remaju/taxonomy.py
9
+ src/chaskiwasi_plugin_remaju.egg-info/PKG-INFO
10
+ src/chaskiwasi_plugin_remaju.egg-info/SOURCES.txt
11
+ src/chaskiwasi_plugin_remaju.egg-info/dependency_links.txt
12
+ src/chaskiwasi_plugin_remaju.egg-info/entry_points.txt
13
+ src/chaskiwasi_plugin_remaju.egg-info/requires.txt
14
+ src/chaskiwasi_plugin_remaju.egg-info/top_level.txt
@@ -0,0 +1,8 @@
1
+ [chaskiwasi.classifiers]
2
+ remaju = chaskiwasi_remaju.factory:create_cascade_factory
3
+
4
+ [chaskiwasi.query_rules]
5
+ remaju = chaskiwasi_remaju.query_rules:get_query_rules
6
+
7
+ [chaskiwasi.taxonomy]
8
+ remaju = chaskiwasi_remaju.taxonomy:get_taxonomy_registry