---
name: reconciliation-auditing
description: "Checks row-level security boundaries, audits logs immutability, and reconciles PMS sales totals. Use this when running security tests, validating database queries, or auditing log security."
---

# Reconciliation & Auditing

Defines guidelines for validating row-level security (RLS), verifying system audit log immutability, and running compliance tests on calculations.

## Core Rationale
Financial systems must maintain zero-trust boundaries. Unauthorized data access or alteration of audit logs ruins regulatory compliance and system trustworthiness.

## Execution Rules

### 1. Row-Level Security (RLS) Boundary Verification
- **User-Context Checks**: Test database access filters by emulating collaborator queries. Validate that users can only fetch records belonging to their assigned hotel site (e.g., leaders in Cartagena cannot view Bogota records).
- **Test Assertion**: Execute automated queries using the collaborator's database role or session context and assert that 0 records are returned for other sites.

### 2. Audit Log Immutability
- **Append-Only Logs**: Ensure that all logs written to the system are strictly append-only.
- **Verification Rule**: Attempt to update or delete a log entry in a testing context. Assert that the operation is rejected (either by database triggers, Prisma hooks, or PostgreSQL permissions).

### 3. Bilingual JSON formatting Checks
- **Validation**: Inspect the `aiAuditNotes` and `flaggedReason` fields in calculation outputs.
- **Assertion**:
  - The content MUST be a valid JSON object.
  - The object MUST contain both `en` and `es` keys.
  - The keys must have non-empty string values.
  - **Example Assertion**: `expect(settlement.aiAuditNotes).toHaveProperty('en'); expect(settlement.aiAuditNotes).toHaveProperty('es');`
- **UI Rendering**: Verify that the Next.js UI component renders the correct translation matching the active context locale.
