Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implementación CFDI versión 4.0 #7

Open
wants to merge 59 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
c68ba95
Remove importe_gravado and importe_excento in deduccion.
Dec 3, 2016
27ae3b0
Add field to complemento_nomina
lesm Dec 8, 2016
7044396
Changes for percepciones
lesm Dec 15, 2016
8c62ca5
Merge branch 'percepciones' into 2017
lesm Dec 15, 2016
fadbca8
Add test for accion_o_titulo
lesm Dec 23, 2016
5f41f1e
Small refactor in HoraExtras
lesm Dec 23, 2016
507335c
Add support and test for JubilacionPensionRetiro
lesm Dec 23, 2016
2f71d31
Add support for OtroPago
lesm Dec 28, 2016
2605f87
Add method tipo_nomina in ComplementoNomina
lesm Dec 28, 2016
ceb63bc
Add initial value in complemento_nomina
lesm Dec 28, 2016
6acb472
Updating field and method of Emisor for regimen
lesm Dec 30, 2016
e61274d
Add field curp for method in Emisor
lesm Dec 30, 2016
83b9545
Add fields to emisor for ComprobanteNomina 1.2
lesm Jan 2, 2017
2b2626a
Remove domicilio_fical and expedido of
lesm Jan 2, 2017
caac749
Updating structure of concepto to comprobante_nomina
lesm Jan 2, 2017
4a7697c
Updating structure of percepcion to comprobante_nomina
lesm Jan 2, 2017
b874385
Updating structure of deduccion to comprobante_nomina
lesm Jan 2, 2017
573b63c
Updating structure of Incapacidad to comprobante_nomina
lesm Jan 2, 2017
ac9ecd2
Remove gem 'pry'
lesm Jan 4, 2017
2755b0c
Updating fields of complemento_nomina and receptor for
lesm Jan 4, 2017
5faa1bf
Add initial values for concepto,
lesm Jan 5, 2017
ccd9b23
Add method registro_patronal to emisor
lesm Jan 5, 2017
7222911
Small refactor
lesm Jan 9, 2017
fa5f2df
Small refactor
lesm Jan 9, 2017
3419c1b
Small refactor
lesm Jan 9, 2017
d282122
Add support to separacion_indemnizacion
lesm Jan 11, 2017
1023147
Added support for ComplementoINE
lesm Feb 23, 2017
350abdd
Completed test for complementoINE
lesm Feb 23, 2017
016c981
Add support for EntidadSNCF
lesm Mar 6, 2017
d24652a
Fixing compensacion_saldo_a_favor
lesm May 15, 2017
189abfe
Enable support for cfdi 3.3
lesm Jun 27, 2017
7fc0ecf
Add support for cfdi_relacionado
lesm Jul 5, 2017
3f3a3f3
Enable version 3.3 in nomina
lesm Jul 19, 2017
c5eeeed
Updating ruby-version
lesm Jul 26, 2017
5101f10
Now asignarFecha and asignarFolio aren't avaliables for
lesm Aug 10, 2017
4dfcab8
Fix error
lesm Aug 10, 2017
e53be63
Enable support to ReciboPago Layout
lesm Oct 6, 2017
2ade52b
Remove default value of unidad in concepto
lesm Oct 12, 2017
7a84247
Add support to receive more than one pago in
lesm Nov 1, 2017
14a18e6
Update ruby-version to 2.5.0
lesm Jan 10, 2018
9f23965
Updating ruby-version in travis file
lesm Jan 10, 2018
e1f9878
Fix problem ruby-version in travis
lesm Jan 10, 2018
b3fea0c
Merge branch 'master' into cfdi_3_3
lesm Jan 10, 2018
ac6c613
Update gems
lesm Jan 10, 2018
a4be905
Update ruby to 2.5.5
May 15, 2019
1e6edf0
Add cfdi_relacionados to fm_layout_nomina
May 15, 2019
f287a35
Fix ruby version for travis
May 15, 2019
978095f
feat: Add Template General
kevdany17 Apr 22, 2022
b80dfd8
feat: Add InformacionGlobal
kevdany17 Apr 26, 2022
c2895af
feat: Change Test InformacionGlobal
kevdany17 Apr 26, 2022
052c4f4
feat: Deleted Template.txt
kevdany17 Apr 26, 2022
0f40adc
feat: Add Node Receptor y Emisor
kevdany17 Apr 26, 2022
2ca5096
feat: a cuenta de terceros
kevdany17 Apr 26, 2022
e0c7b19
feat: Add ACuentaTerceros en Concepto
kevdany17 Apr 26, 2022
62f9504
feat: Add CFDI Relacionados General y Nomina
kevdany17 Apr 27, 2022
1f886a0
feat: add txt gitignore
kevdany17 Apr 29, 2022
da718ae
fix: fix conflict
kevdany17 Apr 29, 2022
e353c76
feat: Add Data Nomina cfdi 4.0
kevdany17 Apr 30, 2022
3f7cf52
feat: Cambios en Nómina
Apr 30, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,5 @@ test/tmp
test/version_tmp
tmp
*swp
*template.txt
*nomina.txt
2 changes: 1 addition & 1 deletion .ruby-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.3.3
2.5.5
4 changes: 3 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
language: ruby
rvm:
- 2.0.0
- 2.3.3
- 2.5.5
before_install:
- 'gem update --system'
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
source 'https://rubygems.org'

gem 'coveralls', require: false
gem 'pry'

# Specify your gem's dependencies in fm_layout.gemspec
gemspec
54 changes: 30 additions & 24 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -6,38 +6,43 @@ PATH
GEM
remote: https://rubygems.org/
specs:
coveralls (0.8.16)
coderay (1.1.2)
coveralls (0.8.21)
json (>= 1.8, < 3)
simplecov (~> 0.12.0)
term-ansicolor (~> 1.3.0)
thor (~> 0.19.1)
tins (>= 1.6.0, < 2)
diff-lcs (1.2.5)
simplecov (~> 0.14.1)
term-ansicolor (~> 1.3)
thor (~> 0.19.4)
tins (~> 1.6)
diff-lcs (1.3)
docile (1.1.5)
json (2.0.2)
rake (11.3.0)
rspec (3.5.0)
rspec-core (~> 3.5.0)
rspec-expectations (~> 3.5.0)
rspec-mocks (~> 3.5.0)
rspec-core (3.5.4)
rspec-support (~> 3.5.0)
rspec-expectations (3.5.0)
json (2.1.0)
method_source (0.9.0)
pry (0.11.3)
coderay (~> 1.1.0)
method_source (~> 0.9.0)
rake (12.3.0)
rspec (3.7.0)
rspec-core (~> 3.7.0)
rspec-expectations (~> 3.7.0)
rspec-mocks (~> 3.7.0)
rspec-core (3.7.1)
rspec-support (~> 3.7.0)
rspec-expectations (3.7.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.5.0)
rspec-mocks (3.5.0)
rspec-support (~> 3.7.0)
rspec-mocks (3.7.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.5.0)
rspec-support (3.5.0)
simplecov (0.12.0)
rspec-support (~> 3.7.0)
rspec-support (3.7.0)
simplecov (0.14.1)
docile (~> 1.1.0)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.0)
term-ansicolor (1.3.2)
simplecov-html (0.10.2)
term-ansicolor (1.6.0)
tins (~> 1.0)
thor (0.19.4)
tins (1.13.0)
tins (1.16.3)

PLATFORMS
ruby
Expand All @@ -46,8 +51,9 @@ DEPENDENCIES
bundler (~> 1.3)
coveralls
fm_layout!
pry
rake
rspec

BUNDLED WITH
1.13.6
1.16.1
14 changes: 14 additions & 0 deletions lib/fm_layout.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,23 @@
require "fm_layout/version"
require "fm_layout/fm_layout"
require "fm_layout/fm_layout_nomina"
require "fm_layout/fm_layout_pago"

module FmLayout
def self.define_layout
layout = FmLayout.new
yield(layout) if block_given?
layout
end

def self.define_layout_nomina
layout = FmLayoutNomina.new
yield(layout) if block_given?
layout
end

def self.define_layout_recibo_pago
layout = FmLayoutPago.new
yield(layout) if block_given?
layout
end
Expand Down
34 changes: 34 additions & 0 deletions lib/fm_layout/a_cuenta_terceros.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
require 'fm_layout/fm_seccion'

module FmLayout
class ACuentaTerceros
include FmSeccion
attr_reader :datos
attr_accessor :rfc_cuenta_terceros, :nombre_cuenta_terceros, :regimen_fiscal_cuenta_terceros, :domicilio_fiscal_cuenta_terceros

def initialize
@titulo = 'ACuentaTerceros'
@rfc_cuenta_terceros = ''
@nombre_cuenta_terceros = ''
@regimen_fiscal_cuenta_terceros = ''
@domicilio_fiscal_cuenta_terceros = ''
@datos = {}
end

def self.campos_vs_metodos
{
'RfcACuentaTerceros' => 'rfc_cuenta_terceros',
'NombreACuentaTerceros' => 'nombre_cuenta_terceros',
'RegimenFiscalACuentaTerceros' => 'regimen_fiscal_cuenta_terceros',
'DomicilioFiscalACuentaTerceros' => 'domicilio_fiscal_cuenta_terceros'
}
end

# Creación de los métodos de acceso dinámicamente
campos_vs_metodos.each do |campo, metodo|
define_method(metodo) do |dato|
@datos[campo] = dato
end
end
end
end
25 changes: 25 additions & 0 deletions lib/fm_layout/cfdi_relacionados.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
require 'fm_layout/fm_seccion'

module FmLayout
class CfdiRelacionados
include FmSeccion
attr_reader :datos

def initialize num_relacionado
@titulo = "CfdiRelacionados##{num_relacionado}"
@datos = {}
end

def tipo_relacion value
@datos["TipoRelacion"] = value
end

def uuids value
@datos["UUID"] = "[#{value}]"
end

def con_relaciones?
@datos.any?
end
end
end
30 changes: 30 additions & 0 deletions lib/fm_layout/complemento_ine.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
require 'fm_layout/fm_seccion'

module FmLayout
class ComplementoIne
include FmSeccion

def initialize
@titulo = 'ComplementoINE'
@datos = {}
end

def self.campos_vs_metodos
{
'TipoProceso' => 'tipo_proceso',
'TipoComite' => 'tipo_comite',
'IdContabilidad' => 'id_contabilidad',
}
end

# Creación de los métodos de acceso dinámicamente
campos_vs_metodos.each do |campo, metodo|
define_method(metodo) do |dato|
@datos[campo] = dato
end
end

private

end
end
54 changes: 54 additions & 0 deletions lib/fm_layout/comprobante_fiscal_digital.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
require 'fm_layout/fm_seccion'
module FmLayout
class ComprobanteFiscalDigital
include FmSeccion

def initialize
@titulo= 'ComprobanteFiscalDigital'
@datos= {}
valores_iniciales
end

def self.campos_vs_metodos
{
'Serie' => 'serie',
'Folio' => 'folio',
'Fecha' => 'fecha',
'FormaPago' => 'forma_de_pago',
'NoCertificado' => 'numero_de_certificado',
'CondicionesDePago' => 'condiciones_de_pago',
'SubTotal' => 'subtotal',
'Descuento' => 'descuento',
'Moneda' => 'moneda',
'Total' => 'total',
'TipoDeComprobante' => 'tipo_de_comprobante',
'MetodoPago' => 'metodo_de_pago',
'LugarExpedicion' => 'lugar_de_expedicion',
'TipoCambio' => 'tipo_de_cambio',
'Exportacion' => 'exportacion'
}
end

# Creación de los métodos de acceso dinámicamente
campos_vs_metodos.each do |campo, metodo|
define_method(metodo) do |dato|
@datos[campo] = dato
end
end


private

def valores_iniciales
@datos['Version'] = '4.0'
@datos['Fecha'] = nil
@datos['Folio'] = nil
@datos['NoCertificado'] = nil
@datos['SubTotal'] = nil
@datos['Descuento'] = nil
@datos['Total'] = nil
@datos['Exportacion'] = '01'
end
end

end
83 changes: 73 additions & 10 deletions lib/fm_layout/concepto.rb
Original file line number Diff line number Diff line change
@@ -1,27 +1,89 @@
require 'fm_layout/fm_seccion'
require 'fm_layout/parte'
require 'fm_layout/a_cuenta_terceros'

module FmLayout
class Concepto
include FmSeccion

def initialize
@titulo = 'Concepto'
def initialize num_concepto
@titulo = "Concepto##{num_concepto}"
@datos = {}
valores_iniciales
@cuenta_terceros = ACuentaTerceros.new
@impuesto_t = ImpuestoTrasladado.new
@impuesto_r = ImpuestoRetenido.new
@parte = Parte.new

end

def self.campos_vs_metodos
{
'cantidad' => 'cantidad',
'unidad' => 'unidad',
'noIdentificacion' => 'numero_de_identificacion',
'descripcion' => 'descripcion',
'valorUnitario' => 'valor_unitario',
'importe' => 'importe',
'CuentaPredial' => 'cuenta_predial',
'ClaveProdServ' => 'clave_producto_servicio',
'NoIdentificacion' => 'numero_de_identificacion',
'Cantidad' => 'cantidad',
'ClaveUnidad' => 'clave_unidad',
'Unidad' => 'unidad',
'Descripcion' => 'descripcion',
'ValorUnitario' => 'valor_unitario',
'Importe' => 'importe',
'Descuento' => 'descuento',
'ObjetoImp' => 'objeto_imp',
'CuentaPredial' => 'cuenta_predial'
}
end

def partes
if block_given?
yield @parte
@datos["Parte.ClaveProdServ"] = @parte.datos["ClaveProdServ"]
@datos["Parte.NoIdentificacion"] = @parte.datos["NoIdentificacion"]
@datos["Parte.Cantidad"] = @parte.datos["Cantidad"]
@datos["Parte.Unidad"] = @parte.datos["Unidad"]
@datos["Parte.Descripcion"] = @parte.datos["Descripcion"]
else
@parte
end
end

def impuesto_trasladado
if block_given?
yield @impuesto_t
@datos["Impuestos.Traslados.Base"] = @impuesto_t.datos["Base"]
@datos["Impuestos.Traslados.Impuesto"] = @impuesto_t.datos["Impuesto"]
@datos["Impuestos.Traslados.TipoFactor"] = @impuesto_t.datos["TipoFactor"]
@datos["Impuestos.Traslados.TasaOCuota"] = @impuesto_t.datos["TasaOCuota"]
@datos["Impuestos.Traslados.Importe"] = @impuesto_t.datos["Importe"]
else
@impuesto_t
end
end

def impuesto_retenido
if block_given?
yield @impuesto_r
@datos["Impuestos.Retenciones.Base"] = @impuesto_r.datos["Base"]
@datos["Impuestos.Retenciones.Impuesto"] = @impuesto_r.datos["Impuesto"]
@datos["Impuestos.Retenciones.TipoFactor"] = @impuesto_r.datos["TipoFactor"]
@datos["Impuestos.Retenciones.TasaOCuota"] = @impuesto_r.datos["TasaOCuota"]
@datos["Impuestos.Retenciones.Importe"] = @impuesto_r.datos["Importe"]
else
@impuesto_r
end
end

def a_cuenta_terceros
if block_given?
yield @cuenta_terceros
@datos["ACuentaTerceros.RfcACuentaTerceros"] = @cuenta_terceros.datos["RfcACuentaTerceros"]
@datos["ACuentaTerceros.NombreACuentaTerceros"] = @cuenta_terceros.datos["NombreACuentaTerceros"]
@datos["ACuentaTerceros.RegimenFiscalACuentaTerceros"] = @cuenta_terceros.datos["RegimenFiscalACuentaTerceros"]
@datos["ACuentaTerceros.DomicilioFiscalACuentaTerceros"] = @cuenta_terceros.datos["DomicilioFiscalACuentaTerceros"]
else
@cuenta_terceros
end
end

# Creación de los métodos de acceso dinámicamente
campos_vs_metodos.each do |campo, metodo|
define_method(metodo) do |dato|
Expand All @@ -32,7 +94,8 @@ def self.campos_vs_metodos
private

def valores_iniciales
@datos['cantidad'] = 1
@datos['Cantidad'] = 1
@datos['ObjetoImp'] = '02'
end
end
end
2 changes: 1 addition & 1 deletion lib/fm_layout/datos_adicionales.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ class DatosAdicionales
include FmSeccion

def initialize
@titulo = "Datos Adicionales"
@titulo = "DatosAdicionales"
@datos= {}
valores_iniciales
end
Expand Down
Loading