Module: VerifactuRails::IdOtro
- Defined in:
- lib/verifactu_rails/registro.rb
Overview
Identificación de quien no tiene NIF español (sf:IDOtroType).
Las reglas NO son las mismas según quién se identifique. Un destinatario admite "no censado" (07) y desde España acepta 03 o 07; un tercero no admite 07 en absoluto y desde España solo acepta 03 (Validaciones v1.2.2, ap. 12 y 13). Por eso lo que varía entra por parámetro: duplicar el método era la vía segura a que las dos copias se desincronizaran.
Constant Summary collapse
- TIPOS =
Lista L7 del Excel de diseños.
%w[02 03 04 05 06 07].freeze
- PAISES =
sf:CountryType2. Se toman del XSD, que es el contrato.
%w[ AF AL DE AD AO AI AQ AG SA DZ AR AM AW AU AT AZ BS BH BD BB BE BZ BJ BM BY BO BA BW BV BR BN BG BF BI BT CV KY KH CM CA CF CC CO KM CG CD CK KP KR CI CR HR CU TD CZ CL CN CY CW DK DM DO EC EG AE ER SK SI ES US EE ET FO PH FI FJ FR GA GM GE GS GH GI GD GR GL GU GT GG GN GQ GW GY HT HM HN HK HU IN ID IR IQ IE IM IS IL IT JM JP JE JO KZ KE KG KI KW LA LS LV LB LR LY LI LT LU XG MO MK MG MY MW MV ML MT FK MP MA MH MU MR YT UM MX FM MD MC MN ME MS MZ MM NA NR CX NP NI NE NG NU NF NO NC NZ IO OM NL BQ PK PW PA PG PY PE PN PF PL PT PR QA GB RW RO RU RE SB SV WS AS KN SM SX PM VC SH LC ST SN RS SC SL SG SY SO LK SZ ZA SD SS SE CH SR TH TW TZ TJ PS TF TL TG TK TO TT TN TC TM TR TV UA UG UY UZ VU VA VE VN VG VI WF YE DJ ZM ZW QU XB XU XN ].freeze
Class Method Summary collapse
Class Method Details
.normalizar(datos, quien:, tipos_con_es:, prohibidos: []) ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/verifactu_rails/registro.rb', line 123 def normalizar(datos, quien:, tipos_con_es:, prohibidos: []) tipo = Formato.enumerado(datos.fetch(:id_type), 'IDType', TIPOS - prohibidos) pais = datos[:codigo_pais] && Formato.enumerado(datos[:codigo_pais], 'CodigoPais', PAISES) # "No censado" solo tiene sentido en España. if tipo == '07' && pais != 'ES' raise ValidacionError, "IDType=07 (no censado) exige CodigoPais='ES'" end if pais == 'ES' && !tipos_con_es.include?(tipo) raise ValidacionError, "Con CodigoPais='ES', el IDType de #{quien} solo puede ser " \ "#{tipos_con_es.join(' o ')}" end # Con NIF-IVA (02) el país va implícito en el propio identificador. raise ValidacionError, "IDType=#{tipo} exige CodigoPais" if tipo != '02' && pais.nil? { 'CodigoPais' => pais, 'IDType' => tipo, 'ID' => Formato.limitar(datos.fetch(:id), 'ID', 20) }.compact end |