Class: VerifactuRails::RespuestaConsulta
- Inherits:
-
Object
- Object
- VerifactuRails::RespuestaConsulta
- Defined in:
- lib/verifactu_rails/consulta.rb
Overview
Respuesta a una consulta (RespuestaConsultaLR.xsd).
Igual que Respuesta: solo lee. Lo que llega de la AEAT es la verdad, y una respuesta que no encaje con lo que esperamos no debe impedir leer el resto.
LO QUE DEVUELVE ES UNA FOTO, NO UN LIBRO (comprobado contra preproducción): una fila por FACTURA con su estado ACTUAL, no un histórico de registros de facturación. Si una factura se subsanó, se devuelve la subsanación y el alta original desaparece; si se anuló, se devuelve la anulación con estado "Anulado". Consecuencia práctica: la cadena NO se puede reconstruir entera desde aquí, porque los eslabones sustituidos ya no salen y los registros que encadenaban tras ellos parecen huérfanos aunque la cadena esté intacta.
Defined Under Namespace
Classes: Anotado
Constant Summary collapse
- NS =
'https://www2.agenciatributaria.gob.es/static_files/common/internet/' \ 'dep/aplicaciones/es/aeat/tike/cont/ws/RespuestaConsultaLR.xsd'
- NS_SF_RESP =
'https://www2.agenciatributaria.gob.es/static_files/common/internet/' \ 'dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd'
- NS_SOAP =
'http://schemas.xmlsoap.org/soap/envelope/'- ESTADOS =
OJO: NO son los mismos estados que en RespuestaSuministro. Aquí no existe "Incorrecto" -un registro rechazado no se almacena, así que no se puede consultar- y sí existe "Anulado", que es el estado que da sentido a todo este servicio.
%w[Correcto AceptadoConErrores Anulado].freeze
Instance Attribute Summary collapse
-
#clave_paginacion ⇒ Object
readonly
Returns the value of attribute clave_paginacion.
-
#ejercicio ⇒ Object
readonly
Returns the value of attribute ejercicio.
-
#indicador_paginacion ⇒ Object
readonly
Returns the value of attribute indicador_paginacion.
-
#periodo ⇒ Object
readonly
Returns the value of attribute periodo.
-
#registros ⇒ Object
readonly
Returns the value of attribute registros.
-
#resultado ⇒ Object
readonly
Returns the value of attribute resultado.
-
#xml ⇒ Object
readonly
Returns the value of attribute xml.
Instance Method Summary collapse
- #a_subsanar ⇒ Object
- #anulados ⇒ Object
- #con_datos? ⇒ Boolean
-
#hay_mas_paginas? ⇒ Boolean
Quedan más páginas.
-
#initialize(xml) ⇒ RespuestaConsulta
constructor
A new instance of RespuestaConsulta.
- #sin_datos? ⇒ Boolean
- #subsanaciones ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(xml) ⇒ RespuestaConsulta
Returns a new instance of RespuestaConsulta.
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 |
# File 'lib/verifactu_rails/consulta.rb', line 191 def initialize(xml) @xml = xml doc = Nokogiri::XML(xml) raiz = doc.at_xpath('//c:RespuestaConsultaFactuSistemaFacturacion', 'c' => NS) if raiz.nil? raise RespuestaError, 'La respuesta no contiene RespuestaConsultaFactuSistemaFacturacion. ' \ "#{resumen_de_fallo(doc)}" end @ejercicio = texto(raiz, 'c:PeriodoImputacion/c:Ejercicio') @periodo = texto(raiz, 'c:PeriodoImputacion/c:Periodo') @indicador_paginacion = texto(raiz, 'c:IndicadorPaginacion') @resultado = texto(raiz, 'c:ResultadoConsulta') @registros = raiz.xpath('c:RegistroRespuestaConsultaFactuSistemaFacturacion', 'c' => NS) .map { |n| leer_registro(n) } @clave_paginacion = leer_clave(raiz.at_xpath('c:ClavePaginacion', 'c' => NS)) end |
Instance Attribute Details
#clave_paginacion ⇒ Object (readonly)
Returns the value of attribute clave_paginacion.
188 189 190 |
# File 'lib/verifactu_rails/consulta.rb', line 188 def clave_paginacion @clave_paginacion end |
#ejercicio ⇒ Object (readonly)
Returns the value of attribute ejercicio.
188 189 190 |
# File 'lib/verifactu_rails/consulta.rb', line 188 def ejercicio @ejercicio end |
#indicador_paginacion ⇒ Object (readonly)
Returns the value of attribute indicador_paginacion.
188 189 190 |
# File 'lib/verifactu_rails/consulta.rb', line 188 def indicador_paginacion @indicador_paginacion end |
#periodo ⇒ Object (readonly)
Returns the value of attribute periodo.
188 189 190 |
# File 'lib/verifactu_rails/consulta.rb', line 188 def periodo @periodo end |
#registros ⇒ Object (readonly)
Returns the value of attribute registros.
188 189 190 |
# File 'lib/verifactu_rails/consulta.rb', line 188 def registros @registros end |
#resultado ⇒ Object (readonly)
Returns the value of attribute resultado.
188 189 190 |
# File 'lib/verifactu_rails/consulta.rb', line 188 def resultado @resultado end |
#xml ⇒ Object (readonly)
Returns the value of attribute xml.
188 189 190 |
# File 'lib/verifactu_rails/consulta.rb', line 188 def xml @xml end |
Instance Method Details
#a_subsanar ⇒ Object
219 |
# File 'lib/verifactu_rails/consulta.rb', line 219 def a_subsanar = registros.select(&:aceptado_con_errores?) |
#anulados ⇒ Object
218 |
# File 'lib/verifactu_rails/consulta.rb', line 218 def anulados = registros.select(&:anulado?) |
#con_datos? ⇒ Boolean
211 |
# File 'lib/verifactu_rails/consulta.rb', line 211 def con_datos? = resultado == 'ConDatos' |
#hay_mas_paginas? ⇒ Boolean
Quedan más páginas. La siguiente consulta se hace repitiendo el mismo filtro con clave_paginacion:, no cambiando el periodo.
216 |
# File 'lib/verifactu_rails/consulta.rb', line 216 def hay_mas_paginas? = indicador_paginacion == 'S' |
#sin_datos? ⇒ Boolean
212 |
# File 'lib/verifactu_rails/consulta.rb', line 212 def sin_datos? = resultado == 'SinDatos' |
#subsanaciones ⇒ Object
220 |
# File 'lib/verifactu_rails/consulta.rb', line 220 def subsanaciones = registros.select(&:subsanacion?) |
#to_s ⇒ Object
222 223 224 225 |
# File 'lib/verifactu_rails/consulta.rb', line 222 def to_s "#{resultado} (#{registros.size} registros: #{anulados.size} anulados, " \ "#{a_subsanar.size} con errores)#{hay_mas_paginas? ? ', hay más páginas' : ''}" end |