Reglas de Negocio — Referencia Rápida
Este artículo consolida en forma de referencia rápida las reglas de negocio que rigen el comportamiento de GM Fiscal. Para la explicación completa de cada tema, consultar los artículos de esta misma sección.
Ciclo de vida de la Solicitud
| Estado | Transiciones de salida permitidas |
|---|---|
Listo para conciliar | → Solicitud en proceso |
Solicitud en proceso | → Conciliada · → Error |
Error | → Listo para conciliar |
Conciliada | Ninguna — estado final e inmutable |
Cualquier intento de salir del estado Conciliada produce InvalidTransitionError. Los reportes R21 y RAMCI solo pueden generarse desde una solicitud en estado Conciliada.
RFC multi-empresa
| Método | RFC utilizado para |
|---|---|
empresa.GetProdigiaRFC() | Consultas al SAT vía Prodigia o Hades |
empresa.GetServicesRFC() | Consultas al ERP e Importa |
empresa.GetDatabaseRFC() | Identificador en base de datos |
El campo empresa.RFC no se usa directamente en consultas externas. En modo TST, empresa.RFC puede ser un RFC de prueba mientras ProdigiaRFC contiene el RFC real de la empresa.
Precisión fiscal
| Operación | Regla |
|---|---|
| Redondeo | Half-up SAT: R21MathUtils.RedondearMonto(x) |
| Comparación de montos | Tolerancia 0.005: R21MathUtils.CompararMontos(a, b) |
| Comparación de UUIDs | Insensible a mayúsculas: strings.EqualFold(u1, u2) |
| Parsing XML | RemoveNamespaces(xml) antes de xml.Unmarshal |
| Arrays de impuestos | ImpuestosERP y ImpuestosProdigia nunca se mezclan |
Clasificación CFDI para R21
| Tipo CFDI | Contribuyente como | Efecto en R21 |
|---|---|---|
I (Ingreso) | Emisor | IVA Causado |
I (Ingreso) | Receptor | IVA Acreditable |
E (Egreso) | Emisor | IVA Causado |
E (Egreso) | Receptor | IVA Acreditable |
N (Nómina) | Emisor | ISR Retenido Nómina |
P (Pago) | Receptor | IVA Acreditable |
P (Pago) | Emisor | No contribuye al R21 |
Los CFDIs cancelados (EstatusERP = "CANCELADO") se excluyen siempre del R21.
Clasificación CFDI para RAMCI
| Categoría | Condición |
|---|---|
R — Ingresos | Tipo I, contribuyente es emisor |
A — Egresos | Tipo E, contribuyente es emisor |
M — Nómina | Tipo N, contribuyente es emisor |
C — Notas de Crédito | Tipo E, contribuyente es receptor |
I — Ingresos recibidos | Tipo I, contribuyente es receptor |
Excluidos del RAMCI: categoría "General" y CFDIs tipo P (Pagos).
Tasas de IVA válidas (SAT 2024)
| Tasa | Código | Aplicación |
|---|---|---|
0.160000 | 002 | IVA general (16%) |
0.080000 | 002 | IVA zona fronteriza norte (8%) |
0.000000 | 002 | IVA tasa cero: exportaciones, alimentos, medicinas |
Invariantes verificables
Las siguientes condiciones deben cumplirse en todos los tests de conciliación y reporte:
fc.ImpuestosERP[i].Origen == "ERP"para todoi.fc.ImpuestosProdigia[i].Origen == "PRODIGIA"para todoi.- No existe transición válida desde el estado
Conciliada. - El UUID de cualquier CFDI se compara con
strings.EqualFold, nunca con==. - Todo monto se redondea con
R21MathUtils.RedondearMontoantes de cualquier acumulación.
Documentación relacionada
- Arquitectura Hexagonal DDD — estructura del código y reglas de capas.
- Bounded Contexts y Dominio — entidades, ciclo de vida y mapa de contextos.
- Conciliación Fiscal — algoritmo
MakeConciliacione invariantes. - Reportes R21 y RAMCI — procesadores, clasificación y workers asincrónicos.
- Reglas de Precisión SAT — anti-patrones prohibidos y detalles de implementación.