Try Sidebar

2026-02-25 20:56:14 -03:00
parent 5043a44398
commit e04d81e37b
8 changed files with 118 additions and 102 deletions

@@ -1,34 +1,34 @@
# 🏦 Flujo de Caja, Arqueo Ciego y Auditoría # 🏦 Flujo de Caja, Arqueo Ciego y Auditoría
La tesorería del sistema está diseñada bajo el principio de "Zero Trust" (Cero Confianza) en el punto de venta, requiriendo validación centralizada. La tesorería del sistema está diseñada bajo el principio de "Zero Trust" (Cero Confianza) en el punto de venta, requiriendo validación centralizada.
## 🙈 El Arqueo Ciego ## 🙈 El Arqueo Ciego
![Arquitectura Cierre Caja](images/Flujo-de-Cierre-de-Caja.drawio.svg) ![Arquitectura Cierre Caja](images/Flujo-de-Cierre-de-Caja.drawio.svg)
--- ---
Cuando un cajero termina su turno, no puede ver un reporte de "Cuánto debería tener en la caja". El flujo es el siguiente: Cuando un cajero termina su turno, no puede ver un reporte de "Cuánto debería tener en la caja". El flujo es el siguiente:
1. El cajero abre la sesión declarando el **Fondo Inicial**. 1. El cajero abre la sesión declarando el **Fondo Inicial**.
2. Al cerrar, debe contar sus billetes físicos y tickets de tarjeta, e ingresarlos manualmente al sistema (`DeclaredCash`, `DeclaredCards`). 2. Al cerrar, debe contar sus billetes físicos y tickets de tarjeta, e ingresarlos manualmente al sistema (`DeclaredCash`, `DeclaredCards`).
3. El Backend toma estos valores y los contrasta contra los cobros reales (Payments). 3. El Backend toma estos valores y los contrasta contra los cobros reales (Payments).
4. El sistema calcula el `TotalDifference`. 4. El sistema calcula el `TotalDifference`.
5. La sesión queda bloqueada en estado `PendingValidation`. 5. La sesión queda bloqueada en estado `PendingValidation`.
## ⚖️ Liquidación y Validación ## ⚖️ Liquidación y Validación
La caja no se considera legalmente cerrada hasta que un **Administrador o Tesorero** revisa el "Acta de Cierre" impresa, la compara con el dinero recibido en mano, ingresa sus notas y liquida la sesión (`Closed`). La caja no se considera legalmente cerrada hasta que un **Administrador o Tesorero** revisa el "Acta de Cierre" impresa, la compara con el dinero recibido en mano, ingresa sus notas y liquida la sesión (`Closed`).
--- ---
## 🕵️ Sistema de Reclamos y Ajuste Técnico ## 🕵️ Sistema de Reclamos y Ajuste Técnico
Si un cliente presenta una queja (ej: un error de tipeo en el diario impreso), el cajero abre una incidencia (`Claim`). Si un cliente presenta una queja (ej: un error de tipeo en el diario impreso), el cajero abre una incidencia (`Claim`).
**Resolución Transaccional:** **Resolución Transaccional:**
Cuando un moderador resuelve el problema (ej: otorgando 2 días gratis extra), el sistema protege los datos así: Cuando un moderador resuelve el problema (ej: otorgando 2 días gratis extra), el sistema protege los datos así:
1. Toma una "Fotografía" (`Snapshot`) de los valores originales del aviso (texto original, fechas originales). 1. Toma una "Fotografía" (`Snapshot`) de los valores originales del aviso (texto original, fechas originales).
2. Guarda la fotografía en la columna `OriginalValues` del reclamo. 2. Guarda la fotografía en la columna `OriginalValues` del reclamo.
3. Aplica los nuevos valores técnicos al aviso principal. 3. Aplica los nuevos valores técnicos al aviso principal.
4. Genera un log inmutable en la tabla `AuditLogs`. 4. Genera un log inmutable en la tabla `AuditLogs`.
Esto garantiza que siempre se sepa qué modificó el moderador y cómo estaba el aviso originalmente. Esto garantiza que siempre se sepa qué modificó el moderador y cómo estaba el aviso originalmente.

@@ -1,27 +1,27 @@
# 📦 Gestión de Catálogo, Rubros y Combos # 📦 Gestión de Catálogo, Rubros y Combos
El catálogo en SIG-CM soporta una arquitectura polimórfica. Un "Producto" puede ser un aviso, un espacio en radio, un bien físico o un "Combo" (Bundle). El catálogo en SIG-CM soporta una arquitectura polimórfica. Un "Producto" puede ser un aviso, un espacio en radio, un bien físico o un "Combo" (Bundle).
## 🌳 Árbol de Categorías (Taxonomía) ## 🌳 Árbol de Categorías (Taxonomía)
Las categorías funcionan bajo una estructura de árbol (Padre > Hijo). Existen reglas estrictas para mantener la integridad en la base de datos: Las categorías funcionan bajo una estructura de árbol (Padre > Hijo). Existen reglas estrictas para mantener la integridad en la base de datos:
1. **Regla de Inserción:** No se pueden crear sub-categorías dentro de un Rubro si este ya contiene avisos directos. 1. **Regla de Inserción:** No se pueden crear sub-categorías dentro de un Rubro si este ya contiene avisos directos.
2. **Regla de Movimiento (Drag & Drop):** No se puede mover una categoría padre dentro de uno de sus propios hijos (prevención de referencias circulares). 2. **Regla de Movimiento (Drag & Drop):** No se puede mover una categoría padre dentro de uno de sus propios hijos (prevención de referencias circulares).
3. **Fusión (Merge):** Al fusionar la Categoría A hacia la B, se trasladan sus avisos, atributos dinámicos y operaciones permitidas; luego, la Categoría A se elimina. 3. **Fusión (Merge):** Al fusionar la Categoría A hacia la B, se trasladan sus avisos, atributos dinámicos y operaciones permitidas; luego, la Categoría A se elimina.
--- ---
## 🍔 Combos (Bundles) y Prorrateo de Precios ## 🍔 Combos (Bundles) y Prorrateo de Precios
Un "Combo" (`TypeCode: BUNDLE`) es un producto padre que agrupa múltiples productos hijos (que pueden pertenecer a empresas distintas). Un "Combo" (`TypeCode: BUNDLE`) es un producto padre que agrupa múltiples productos hijos (que pueden pertenecer a empresas distintas).
**Regla de Negocio Crítica:** **Regla de Negocio Crítica:**
Al vender un Combo por un precio cerrado (Ej: $10,000), el sistema debe desglosar ese dinero entre los componentes hijos para la futura [Liquidación Cruzada](Settlement). Al vender un Combo por un precio cerrado (Ej: $10,000), el sistema debe desglosar ese dinero entre los componentes hijos para la futura [Liquidación Cruzada](Settlement).
**¿Cómo se calcula el prorrateo?** **¿Cómo se calcula el prorrateo?**
* Si el componente tiene un `FixedAllocationAmount` configurado por el administrador, se asigna ese valor directo. * Si el componente tiene un `FixedAllocationAmount` configurado por el administrador, se asigna ese valor directo.
* Si no, se usa una **Regla de Tres Simple** basada en el precio de lista actual de los hijos: * Si no, se usa una **Regla de Tres Simple** basada en el precio de lista actual de los hijos:
* *Ejemplo:* Combo a $1,000. * *Ejemplo:* Combo a $1,000.
* Hijo A (Vale $800 en lista). Hijo B (Vale $400 en lista). Total suma teórica: $1,200. * Hijo A (Vale $800 en lista). Hijo B (Vale $400 en lista). Total suma teórica: $1,200.
* Asignación A = `$1,000 * (800 / 1200) = $666.66` * Asignación A = `$1,000 * (800 / 1200) = $666.66`
* Asignación B = `$1,000 * (400 / 1200) = $333.33` * Asignación B = `$1,000 * (400 / 1200) = $333.33`

12
Home.md

@@ -25,14 +25,14 @@ SIG-CM es una plataforma distribuida diseñada para gestionar el ciclo de vida c
Navega por las siguientes secciones para entender el comportamiento interno del sistema: Navega por las siguientes secciones para entender el comportamiento interno del sistema:
### ⚙️ Reglas de Negocio (Core) ### ⚙️ Reglas de Negocio (Core)
* [🧠 Motor de Cotización y Tarifas](Pricing-Engine.-) * [🧠 Motor de Cotización y Tarifas](Pricing-Engine)
* [📦 Gestión de Catálogo y Combos (Bundles)](Catalog-and-Bundles.-) * [📦 Gestión de Catálogo y Combos (Bundles)](Catalog-and-Bundles)
* [💳 Cuentas Corrientes y Riesgo Crediticio](Credit-Risk.-) * [💳 Cuentas Corrientes y Riesgo Crediticio](Credit-Risk)
### 🏦 Operaciones y Tesorería ### 🏦 Operaciones y Tesorería
* [🛒 Flujo de Caja y Arqueo Ciego](Cash-Register.-) * [🛒 Flujo de Caja y Arqueo Ciego](Cash-Register)
* [📊 Liquidación Cruzada (Settlement)](Settlement.-) * [📊 Liquidación Cruzada (Settlement)](Settlement)
* [🛠️ Sistema de Reclamos y Auditoría](Claims-and-Audit.-) * [🛠️ Sistema de Reclamos y Auditoría](Claims-and-Audit)
--- ---

@@ -1,38 +1,38 @@
# 🧠 Motor de Cotización y Tarifas (`PricingService`) # 🧠 Motor de Cotización y Tarifas (`PricingService`)
![Arquitectura Venta](images/Venta-Multi-Producto.drawio.svg) ![Arquitectura Venta](images/Venta-Multi-Producto.drawio.svg)
--- ---
El cálculo del precio de un aviso clasificado no es lineal. El sistema utiliza un algoritmo progresivo que evalúa el texto y aplica reglas jerárquicas configuradas en el `Admin Panel`. El cálculo del precio de un aviso clasificado no es lineal. El sistema utiliza un algoritmo progresivo que evalúa el texto y aplica reglas jerárquicas configuradas en el `Admin Panel`.
## 🧮 Fórmula Base ## 🧮 Fórmula Base
El costo total de un aviso se calcula en el siguiente orden: El costo total de un aviso se calcula en el siguiente orden:
1. **Precio Base del Producto:** Define el valor mínimo (Ej: $5,000). Si el producto incluye duración (Ej: cubre 30 días), se calcula el *Costo Diario* (`BasePrice / DurationDays`). 1. **Precio Base del Producto:** Define el valor mínimo (Ej: $5,000). Si el producto incluye duración (Ej: cubre 30 días), se calcula el *Costo Diario* (`BasePrice / DurationDays`).
2. **Costo por Palabras Extra:** Se cuentan las palabras y se restan las "Palabras Base" gratuitas. Las palabras excedentes se tasan según escalones (`WordPricingRanges`) o un precio *fallback*. 2. **Costo por Palabras Extra:** Se cuentan las palabras y se restan las "Palabras Base" gratuitas. Las palabras excedentes se tasan según escalones (`WordPricingRanges`) o un precio *fallback*.
3. **Costo por Caracteres Especiales:** Símbolos como `!`, `$`, `%` se cobran por unidad. 3. **Costo por Caracteres Especiales:** Símbolos como `!`, `$`, `%` se cobran por unidad.
4. **Recargos de Estilo (Surcharges):** Negrita, Recuadro o Posición Destacada. 4. **Recargos de Estilo (Surcharges):** Negrita, Recuadro o Posición Destacada.
5. **Descuentos y Promociones:** Cupones promocionales (Monto fijo o Porcentaje). 5. **Descuentos y Promociones:** Cupones promocionales (Monto fijo o Porcentaje).
--- ---
## 🔍 Reglas Ocultas de Normalización de Texto ## 🔍 Reglas Ocultas de Normalización de Texto
Para evitar que los clientes "engañen" al sistema uniendo palabras con símbolos (ej: `VENDO!AUTO!BARATO`), el motor realiza los siguientes pasos antes de cotizar: Para evitar que los clientes "engañen" al sistema uniendo palabras con símbolos (ej: `VENDO!AUTO!BARATO`), el motor realiza los siguientes pasos antes de cotizar:
1. **Extracción de Símbolos:** Primero cuenta cuántos caracteres especiales hay según la configuración del rubro. 1. **Extracción de Símbolos:** Primero cuenta cuántos caracteres especiales hay según la configuración del rubro.
2. **Limpieza:** Reemplaza los caracteres especiales por **espacios en blanco** (`VENDO AUTO BARATO`). 2. **Limpieza:** Reemplaza los caracteres especiales por **espacios en blanco** (`VENDO AUTO BARATO`).
3. **Conteo Real:** Separa el texto limpio por espacios y saltos de línea para obtener la cantidad real y honesta de palabras. 3. **Conteo Real:** Separa el texto limpio por espacios y saltos de línea para obtener la cantidad real y honesta de palabras.
--- ---
## 🎫 Lógica de Cupones y Promociones ## 🎫 Lógica de Cupones y Promociones
* **Promociones Automáticas:** Se aplican solas si cumplen la condición (`MinDays` o `DaysOfWeek`). * **Promociones Automáticas:** Se aplican solas si cumplen la condición (`MinDays` o `DaysOfWeek`).
* **Cupones Manuales:** El cajero o el usuario web ingresa el código. El sistema verifica: * **Cupones Manuales:** El cajero o el usuario web ingresa el código. El sistema verifica:
* Que no esté vencido (`ExpiryDate`). * Que no esté vencido (`ExpiryDate`).
* Que el cupón global no haya superado su límite (`MaxUsages`). * Que el cupón global no haya superado su límite (`MaxUsages`).
* Que el **usuario específico** no haya superado su límite personal de usos (`MaxUsagesPerUser`). * Que el **usuario específico** no haya superado su límite personal de usos (`MaxUsagesPerUser`).
> ⚠️ **Atención:** Los descuentos se aplican sobre el subtotal de *Días contratados*, pero **después** de sumar los recargos visuales. > ⚠️ **Atención:** Los descuentos se aplican sobre el subtotal de *Días contratados*, pero **después** de sumar los recargos visuales.

16
_Sidebar Normal file

@@ -0,0 +1,16 @@
### 🏠 General
* [Volver al Inicio](Home)
---
### ⚙️ Reglas de Negocio
* [Motor de Cotización](Pricing-Engine)
* [Catálogo y Combos](Catalog-and-Bundles)
* [Cuentas Corrientes](Credit-Risk)
---
### 🏦 Operaciones
* [Caja y Arqueo](Cash-Register)
* [Liquidación Cruzada](Settlement)
* [Reclamos y Auditoría](Claims-and-Audit)