Skip to content

feature-entrega1-CMCMP - #272

Open
cmcmp85 wants to merge 1 commit into
LIDR-academy:mainfrom
cmcmp85:main
Open

feature-entrega1-CMCMP#272
cmcmp85 wants to merge 1 commit into
LIDR-academy:mainfrom
cmcmp85:main

Conversation

@cmcmp85

@cmcmp85 cmcmp85 commented Jul 22, 2026

Copy link
Copy Markdown

Summary by CodeRabbit

  • Documentation
    • Expanded project documentation with detailed prompts covering brainstorming, architecture, data modeling, APIs, user stories, ticket processing, validation, and duplicate detection.
    • Added comprehensive GastOS technical documentation, including project objectives, setup instructions, architecture, data model, API endpoints, MVP user stories, implementation tickets, and traceability.
    • Clarified the distinction between documented functionality and features included in the MVP.

@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The PR replaces placeholder content in prompts.md and readme.md with concrete GastOS documentation, including lifecycle prompts, MVP scope, architecture, data model, APIs, user stories, implementation tickets, and traceability details.

Changes

GastOS documentation

Layer / File(s) Summary
Prompt catalog
prompts.md
Adds documented prompts for scope definition, architecture, data modeling, APIs, user stories, ticket extraction, validation, duplicate detection, and deferred pull-request generation.
Product and architecture documentation
readme.md
Replaces the generic template with GastOS project details, MVP functionality, setup instructions, architecture diagrams, component descriptions, and monorepo structure.
Delivery specification
readme.md
Adds the data model, API endpoint catalog, three user stories with acceptance criteria, MVP tickets, and a traceability matrix.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title is too generic and does not describe the actual documentation updates to prompts.md and readme.md. Rename it to summarize the main change, e.g. "Document GastOS prompts and README for delivery 1".
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🧹 Nitpick comments (1)
prompts.md (1)

21-21: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Añade identificadores de lenguaje a todos los bloques cercados.

Todos estos bloques presentan la misma omisión de Markdown: prompts.md debe etiquetar sus cinco bloques y readme.md debe etiquetar el árbol de directorios, por ejemplo con text, json o gherkin según el contenido.

  • prompts.md#L21-L21: etiqueta el bloque del brainstorming.
  • prompts.md#L67-L67: etiqueta la especificación técnica.
  • prompts.md#L147-L147: etiqueta el prompt de extracción.
  • prompts.md#L179-L179: etiqueta el prompt de validación.
  • prompts.md#L201-L201: etiqueta el prompt de duplicados.
  • readme.md#L208-L208: etiqueta el árbol del monorepo.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@prompts.md` at line 21, Añade identificadores de lenguaje a los seis bloques
Markdown cercados: prompts.md, líneas 21-21, 67-67, 147-147, 179-179 y 201-201,
usando text, json o gherkin según el contenido; etiqueta también el árbol del
monorepo en readme.md, líneas 208-208, con text.

Source: Linters/SAST tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@prompts.md`:
- Around line 148-166: Actualiza el prompt alrededor de la declaración del
módulo para que defina un esquema de salida específico para COMBUSTIBLE,
incluyendo los campos requeridos como kilómetros, vehículo y tarjeta, o
restrinja explícitamente la entrada permitida a GASTOS GENERALES. Asegura que el
contrato JSON corresponda al módulo recibido y que los campos ausentes sigan
devolviendo null.
- Around line 183-196: Actualiza las reglas de validación y el esquema de
respuesta para definir explícitamente el tratamiento de valores nulos o de baja
confianza en base_imponible, iva_importe, fecha e importe_total: indica cuándo
generan un error bloqueante, una advertencia o un campo en campos_pendientes.
Asegura que la comprobación matemática solo se ejecute cuando ambos importes
necesarios estén presentes y sean confiables; en caso contrario, aplica la
política definida sin producir resultados inconsistentes.

In `@readme.md`:
- Line 47: Actualiza la descripción de GastOS para no presentar la retención de
justificantes como una capacidad garantizada del alcance actual; reformula
“retención garantizada para auditoría” como objetivo del producto completo o
alinea explícitamente la frase con la capacidad MVP documentada en la tabla.
- Around line 250-251: Haz opcional PERIODO_LIQUIDACION en el alcance MVP:
actualiza la relación Mermaid y la definición de periodo_id/FK en las secciones
relacionadas para permitir gastos sin período asignado. Mantén la creación o
asignación de períodos fuera del flujo obligatorio de alta MVP, salvo que las
historias y tickets correspondientes se incorporen explícitamente.
- Around line 267-281: Unifica el contrato de extracción definiendo un esquema
canónico entre REGISTRO_GASTO en readme.md (líneas 267-281) y el JSON de salida
de prompts.md (líneas 151-171). En readme.md añade los campos fiscales,
proveedor, NIF y confianza por campo que el prompt requiere, o documenta
explícitamente su no persistencia; después ajusta el JSON para coincidir
exactamente con el modelo persistente y conservar todos los datos necesarios
para captura, revisión y auditoría.
- Around line 5-7: Actualiza la leyenda del documento para definir
explícitamente el estado “[MVP parcial]” usado en otras secciones, indicando qué
significa respecto a la implementación; alternativamente, reemplaza todas sus
apariciones por uno de los estados ya definidos “[MVP]” o “[DOCUMENTADO]”.
Mantén consistencia entre la leyenda y las etiquetas existentes.
- Around line 316-324: Amplía la documentación de EVENTO_AUDITORIA para
especificar el mecanismo que garantiza su inmutabilidad en el MVP: operaciones
append-only, permisos de base de datos restringiendo UPDATE/DELETE y triggers o
mecanismo equivalente. Describe también cómo se aplican estos controles a los
eventos de auditoría.

---

Nitpick comments:
In `@prompts.md`:
- Line 21: Añade identificadores de lenguaje a los seis bloques Markdown
cercados: prompts.md, líneas 21-21, 67-67, 147-147, 179-179 y 201-201, usando
text, json o gherkin según el contenido; etiqueta también el árbol del monorepo
en readme.md, líneas 208-208, con text.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: a4e90084-c3ed-4a07-9e28-3d638ee74e97

📥 Commits

Reviewing files that changed from the base of the PR and between bcde5c4 and 0830b4d.

📒 Files selected for processing (2)
  • prompts.md
  • readme.md

Comment thread prompts.md
Comment on lines +148 to +166
Eres un sistema de extracción de datos de documentos financieros.
El usuario ha indicado que este documento pertenece al módulo: [COMBUSTIBLE / GASTOS GENERALES].

Analiza la imagen adjunta y extrae los siguientes campos en formato JSON estricto.
Si un campo no está presente en el documento, devuelve null para ese campo.
Indica el nivel de confianza de cada campo extraído: alto / medio / bajo.

Para el módulo GASTOS GENERALES, extrae:
{
"fecha": "",
"concepto": "",
"importe_total": "",
"base_imponible": "",
"iva_porcentaje": "",
"iva_importe": "",
"forma_pago": "", // "visa" | "efectivo" | null
"proveedor": "",
"nif_proveedor": "",
"area_sugerida": "", // "comida" | "estancia" | "vuelo" | "parking" | "otros" | null

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Define un esquema específico para COMBUSTIBLE o limita explícitamente el prompt a GASTOS GENERALES.

El prompt acepta ambos módulos en la entrada, pero solo define campos de gastos generales. Si recibe un ticket de combustible, el modelo no tiene un contrato de salida para kilómetros, vehículo o tarjeta y puede devolver datos incorrectos o incompletos.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@prompts.md` around lines 148 - 166, Actualiza el prompt alrededor de la
declaración del módulo para que defina un esquema de salida específico para
COMBUSTIBLE, incluyendo los campos requeridos como kilómetros, vehículo y
tarjeta, o restrinja explícitamente la entrada permitida a GASTOS GENERALES.
Asegura que el contrato JSON corresponda al módulo recibido y que los campos
ausentes sigan devolviendo null.

Comment thread prompts.md
Comment on lines +183 to +196
Reglas de validación:
1. base_imponible + iva_importe debe ser igual a importe_total (tolerancia: ±0.02 €).
2. La fecha no puede ser futura ni anterior a 5 años desde hoy.
3. El importe_total debe ser un número positivo mayor que 0.
4. Si forma_pago es null, marca el campo como pendiente de revisión humana.
5. Si area_sugerida es null, marca el campo como pendiente de selección por el usuario.

Devuelve:
{
"valido": true | false,
"errores": [], // lista de errores bloqueantes
"advertencias": [], // lista de avisos no bloqueantes
"campos_pendientes": [] // campos que requieren revisión o completado por el usuario
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Especifica cómo se validan los campos nulos o de baja confianza.

La regla matemática usa base_imponible e iva_importe, pero ambos pueden ser null; además, no se define si una fecha, importe o impuesto ausente debe bloquear el registro, generar una advertencia o entrar en campos_pendientes. El validador necesita una política explícita para evitar resultados inconsistentes.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@prompts.md` around lines 183 - 196, Actualiza las reglas de validación y el
esquema de respuesta para definir explícitamente el tratamiento de valores nulos
o de baja confianza en base_imponible, iva_importe, fecha e importe_total:
indica cuándo generan un error bloqueante, una advertencia o un campo en
campos_pendientes. Asegura que la comprobación matemática solo se ejecute cuando
ambos importes necesarios estén presentes y sean confiables; en caso contrario,
aplica la política definida sin producir resultados inconsistentes.

Comment thread readme.md
Comment on lines +5 to +7
**Leyenda usada en este documento:**
- **[MVP]** → se documenta y **se implementa** en este proyecto.
- **[DOCUMENTADO]** → forma parte de la especificación completa del RFP y se documenta aquí para dar contexto de producto completo, pero **no se implementa** en el alcance de este proyecto (queda fuera, como referencia de lo que existiría en una versión completa).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Define [MVP parcial] en la leyenda o sustitúyelo por estados ya definidos.

La documentación usa [MVP parcial], pero la leyenda solo define [MVP] y [DOCUMENTADO]. Esto impide interpretar de forma consistente qué capacidades están realmente implementadas.

Also applies to: 67-71

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@readme.md` around lines 5 - 7, Actualiza la leyenda del documento para
definir explícitamente el estado “[MVP parcial]” usado en otras secciones,
indicando qué significa respecto a la implementación; alternativamente,
reemplaza todas sus apariciones por uno de los estados ya definidos “[MVP]” o
“[DOCUMENTADO]”. Mantén consistencia entre la leyenda y las etiquetas
existentes.

Comment thread readme.md
> Propósito del producto. Qué valor aporta, qué soluciona, y para quién.
La Empresa gestiona hoy el gasto interno (dietas, estancias, desplazamientos, combustible de flota) mediante plantillas Excel cumplimentadas manualmente por cada empleado. Esto genera falta de trazabilidad, riesgo de pérdida de justificantes, control solo reactivo y ninguna visibilidad agregada sin consolidar ficheros a mano.

GastOS automatiza la captura, clasificación, revisión y aprobación del gasto, y centraliza el archivo de justificantes con retención garantizada para auditoría, aportando valor a tres perfiles:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

No presentes la retención como garantizada en el alcance actual.

La descripción afirma “retención garantizada para auditoría”, pero la tabla marca Retención documental ≥5 años como [DOCUMENTADO]. Cambia la frase para indicar que es un objetivo del producto completo o marca explícitamente la capacidad MVP real.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@readme.md` at line 47, Actualiza la descripción de GastOS para no presentar
la retención de justificantes como una capacidad garantizada del alcance actual;
reformula “retención garantizada para auditoría” como objetivo del producto
completo o alinea explícitamente la frase con la capacidad MVP documentada en la
tabla.

Comment thread readme.md
Comment on lines +250 to +251
REGISTRO_GASTO |o--o| APROBACION : requiere
REGISTRO_GASTO }o--|| PERIODO_LIQUIDACION : pertenece_a

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Haz opcional PERIODO_LIQUIDACION para el MVP.

La relación Mermaid y periodo_id modelan que todo gasto pertenece obligatoriamente a un período, pero el propio README declara PERIODO_LIQUIDACION fuera de las tres historias MVP. Un alta MVP podría quedar imposibilitada por una FK obligatoria sin período.

Marca la relación y la FK como opcionales para el MVP, o incorpora explícitamente la creación/asignación de períodos en las historias y tickets implementados.

Also applies to: 276-280, 327-328

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@readme.md` around lines 250 - 251, Haz opcional PERIODO_LIQUIDACION en el
alcance MVP: actualiza la relación Mermaid y la definición de periodo_id/FK en
las secciones relacionadas para permitir gastos sin período asignado. Mantén la
creación o asignación de períodos fuera del flujo obligatorio de alta MVP, salvo
que las historias y tickets correspondientes se incorporen explícitamente.

Comment thread readme.md
Comment on lines +267 to +281
REGISTRO_GASTO {
uuid id PK
enum tipo "combustible|general"
date fecha
decimal importe
string forma_pago
string concepto
string anotacion_textual
enum estado "borrador|pendiente_aprobacion|aprobado|rechazado|conciliado|fuera_de_periodo"
uuid autor_id FK
uuid periodo_id FK
uuid area_id FK
uuid vehiculo_id FK
uuid tarjeta_id FK
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Unifica el contrato de extracción entre prompts.md y readme.md.

El prompt declara campos fiscales, proveedor, NIF y confianza por campo, pero REGISTRO_GASTO no los incluye. Define un esquema canónico y persiste todos los datos necesarios para completar las historias de captura, revisión y auditoría.

  • readme.md#L267-L281: añade los campos extraídos/validados faltantes o documenta que no se almacenan.
  • prompts.md#L151-L171: ajusta el JSON de salida para coincidir exactamente con el modelo persistente.
📍 Affects 2 files
  • readme.md#L267-L281 (this comment)
  • prompts.md#L151-L171
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@readme.md` around lines 267 - 281, Unifica el contrato de extracción
definiendo un esquema canónico entre REGISTRO_GASTO en readme.md (líneas
267-281) y el JSON de salida de prompts.md (líneas 151-171). En readme.md añade
los campos fiscales, proveedor, NIF y confianza por campo que el prompt
requiere, o documenta explícitamente su no persistencia; después ajusta el JSON
para coincidir exactamente con el modelo persistente y conservar todos los datos
necesarios para captura, revisión y auditoría.

Comment thread readme.md
Comment on lines +316 to +324
EVENTO_AUDITORIA {
uuid id PK
uuid registro_id FK
uuid usuario_id FK
string tipo_evento "ingesta|ocr|clasificacion_llm|edicion|aprobacion|rechazo|conciliacion"
json valor_anterior
json valor_nuevo
timestamp timestamp
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Documenta el mecanismo que hace inmutable la auditoría.

EVENTO_AUDITORIA se describe como auditoría inmutable, pero el modelo solo muestra una tabla normal con operaciones de actualización/borrado no restringidas. Para respaldar esa garantía deben especificarse controles append-only, permisos de base de datos, triggers o un mecanismo equivalente, al menos para los eventos del MVP.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@readme.md` around lines 316 - 324, Amplía la documentación de
EVENTO_AUDITORIA para especificar el mecanismo que garantiza su inmutabilidad en
el MVP: operaciones append-only, permisos de base de datos restringiendo
UPDATE/DELETE y triggers o mecanismo equivalente. Describe también cómo se
aplican estos controles a los eventos de auditoría.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant