Class: VerifactuRails::Libro::Reconciliacion
- Inherits:
-
Object
- Object
- VerifactuRails::Libro::Reconciliacion
- Defined in:
- lib/verifactu_rails/libro/reconciliacion.rb
Overview
Contraste entre lo que dice el libro registro y lo que la AEAT tiene realmente anotado.
SOLO LEE. No corrige nada, ni siquiera lo que parece obvio, y es una decisión, no una versión reducida: lo que esto detecta es divergencia entre el sistema de registro y la AEAT, y un job que reescribiera el estado local para "cuadrar" taparía justo lo que se le ha pedido revelar. Además no hace falta: Remesa ya reintenta sola lo que quedó en 'enviando', porque un duplicado cuenta como éxito.
QUÉ PUEDE Y QUÉ NO PUEDE COMPROBAR. La consulta devuelve una FOTO POR FACTURA, no el histórico de registros (comprobado contra preproducción: 6 registros sobre 4 facturas devolvieron 4 filas). Una subsanación sustituye al alta original y la anulación sustituye a lo anulado, así que los eslabones intermedios ya no se devuelven. Consecuencias directas:
- Se reconcilia el ESTADO ACTUAL de cada factura. Es lo que esto hace.
- NO se puede auditar el encadenamiento contra la AEAT. Los registros
sustituidos faltan, y los que encadenaban tras ellos parecen huérfanos
aunque la cadena esté intacta. Detectar una bifurcación sigue siendo
cosa del índice único local, no de aquí.
Por eso se compara contra el registro VIGENTE de cada factura -el último anotado con ese IDFactura-, que es el que la AEAT debería estar devolviendo.
Defined Under Namespace
Classes: Divergencia, Informe
Constant Summary collapse
- MAXIMO_PAGINAS =
La AEAT avisa de que preproducción es para pruebas puntuales, no para carga. Un tope explícito evita que un fallo de paginación se convierta en una tromba de peticiones; que se ha alcanzado se DICE (Informe#truncado?) en vez de devolver medio informe con cara de completo.
100
Instance Method Summary collapse
-
#initialize(cadena, transporte:) ⇒ Reconciliacion
constructor
A new instance of Reconciliacion.
- #revisar(ejercicio:, periodo:) ⇒ Informe
Constructor Details
#initialize(cadena, transporte:) ⇒ Reconciliacion
Returns a new instance of Reconciliacion.
60 61 62 63 |
# File 'lib/verifactu_rails/libro/reconciliacion.rb', line 60 def initialize(cadena, transporte:) @cadena = cadena @transporte = transporte end |
Instance Method Details
#revisar(ejercicio:, periodo:) ⇒ Informe
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/verifactu_rails/libro/reconciliacion.rb', line 67 def revisar(ejercicio:, periodo:) periodo = format('%<mes>02d', mes: periodo.to_i) remotas, truncado = descargar(ejercicio: ejercicio, periodo: periodo) nuestras, ajenas = remotas.partition { |fila| de_esta_instalacion?(fila) } pendientes = nuestras.index_by { |fila| clave(fila) } divergencias = vigentes(ejercicio: ejercicio, periodo: periodo).flat_map do |id, local| comparar(local, pendientes.delete(id)) end # Lo que sobra está en la AEAT y no en el libro. Es el caso grave: o # factura otro sistema para este obligado, o se reutilizó un número de # instalación que ya tenía historia. divergencias += pendientes.each_value.map { |fila| solo_en_aeat(fila) } Informe.new(ejercicio: ejercicio.to_s, periodo: periodo, facturas_locales: vigentes(ejercicio: ejercicio, periodo: periodo).size, filas_aeat: nuestras.size, ajenas: ajenas.size, divergencias: divergencias, truncado: truncado) end |