facturama-ipz 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/facturama/facturama_api_multi.rb +29 -0
- data/lib/facturama/facturama_api_web.rb +47 -0
- data/lib/facturama/models/address.rb +17 -0
- data/lib/facturama/models/branch_office.rb +16 -0
- data/lib/facturama/models/cfdi.rb +77 -0
- data/lib/facturama/models/cfdi_relation.rb +11 -0
- data/lib/facturama/models/cfdi_relations.rb +13 -0
- data/lib/facturama/models/client.rb +19 -0
- data/lib/facturama/models/complement.rb +9 -0
- data/lib/facturama/models/connection_info.rb +21 -0
- data/lib/facturama/models/csd.rb +14 -0
- data/lib/facturama/models/exception/facturama_exception.rb +13 -0
- data/lib/facturama/models/exception/model_exception.rb +8 -0
- data/lib/facturama/models/globalInformation.rb +15 -0
- data/lib/facturama/models/image.rb +12 -0
- data/lib/facturama/models/item.rb +29 -0
- data/lib/facturama/models/model.rb +68 -0
- data/lib/facturama/models/product.rb +25 -0
- data/lib/facturama/models/product_tax.rb +14 -0
- data/lib/facturama/models/receiver.rb +18 -0
- data/lib/facturama/models/serie.rb +15 -0
- data/lib/facturama/models/tax.rb +15 -0
- data/lib/facturama/models/tax_entity.rb +22 -0
- data/lib/facturama/models/tax_stamp.rb +13 -0
- data/lib/facturama/models/thirdPartyAccount.rb +14 -0
- data/lib/facturama/services/branch_office_service.rb +13 -0
- data/lib/facturama/services/catalog_service.rb +39 -0
- data/lib/facturama/services/cfdi_multi_service.rb +130 -0
- data/lib/facturama/services/cfdi_service.rb +137 -0
- data/lib/facturama/services/client_service.rb +13 -0
- data/lib/facturama/services/crud_service.rb +33 -0
- data/lib/facturama/services/csd_service.rb +13 -0
- data/lib/facturama/services/http_service.rb +115 -0
- data/lib/facturama/services/product_service.rb +13 -0
- data/lib/facturama/version.rb +5 -0
- data/lib/facturama-ipz.rb +42 -0
- data/lib/samples/sample_api.rb +11 -0
- data/lib/samples/sample_api_multi.rb +367 -0
- data/lib/samples/sample_api_web.rb +458 -0
- metadata +95 -0
@@ -0,0 +1,367 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../facturama'
|
4
|
+
require_relative 'sample_api'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
module Facturama
|
8
|
+
module Samples
|
9
|
+
class SampleApiMulti < SampleApi
|
10
|
+
def run
|
11
|
+
puts '====================================================================='
|
12
|
+
puts " FACTURAMA MULTIEMISOR SDK #{Facturama::VERSION}"
|
13
|
+
puts '====================================================================='
|
14
|
+
|
15
|
+
# Creación de una instacia de la API Multiemisor de Facturama, configurado con los datos del usuario de pruebas
|
16
|
+
facturama = create_api_instance
|
17
|
+
|
18
|
+
# Invocaciones a los ejemplos de uso de los servicios de Facturama API
|
19
|
+
begin
|
20
|
+
# sample_csds(facturama) # Servicio de CSD (certificados)
|
21
|
+
|
22
|
+
sample_cfdis(facturama) # Servicio de CFDI
|
23
|
+
rescue FacturamaException => e
|
24
|
+
puts '----------- EXCEPCIONES -----------'
|
25
|
+
puts " * #{e.message}"
|
26
|
+
|
27
|
+
e.details&.each do |item|
|
28
|
+
puts "#{item[0]}: " + item[1].join(',')
|
29
|
+
end
|
30
|
+
rescue Exception => e
|
31
|
+
puts '----------- EXCEPCIONES -----------'
|
32
|
+
puts " * #{e}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# ---------------------------------------------------------------------------------------------------------------------
|
37
|
+
# CONFIGURACION DEL ENTORNO DE LA API
|
38
|
+
def create_api_instance
|
39
|
+
facturama_user = 'prueba'
|
40
|
+
facturama_password = 'pruebas2011'
|
41
|
+
is_development = true # true = Modo de pruebas / sandbox, false = Modo de Producción (Timbrado real)
|
42
|
+
|
43
|
+
# Creacion de una instancia de FacturamaApiMultiemisor
|
44
|
+
Facturama::FacturamaApiMulti.new(facturama_user, facturama_password, is_development)
|
45
|
+
end
|
46
|
+
|
47
|
+
# ---------------------------------------------------------------------------------------------------------------------
|
48
|
+
# EJEMPLO DEL SERVICIO DE CSDS
|
49
|
+
def sample_csds(facturama)
|
50
|
+
puts '===== Ejemplo de CSD - Inicio ====='
|
51
|
+
|
52
|
+
sample_csds_list(facturama) # Listar todos los csd de la cuenta
|
53
|
+
|
54
|
+
sample_csds_load(facturama) # Cargar un nuevo CSD
|
55
|
+
|
56
|
+
sample_csds_update(facturama) # Obtiene un CSD mediante el RFC y lo actualiza
|
57
|
+
|
58
|
+
# sample_csds_remove(facturama) # Elmina el CSD asociado con el RFC
|
59
|
+
|
60
|
+
puts '===== Ejemplo de CSD - Fin ====='
|
61
|
+
end
|
62
|
+
|
63
|
+
# Ejemplo de obtener el listado de todos los certifiados cargados
|
64
|
+
def sample_csds_list(facturama)
|
65
|
+
puts '===== Obtener los CSD cargados - Inicio ====='
|
66
|
+
|
67
|
+
lst_csds = facturama.csds.list # Se obtiene una lista con todos los csds
|
68
|
+
lst_csds_count = lst_csds.count # Cantidad de csds
|
69
|
+
|
70
|
+
puts "Cantidad de CSDs: #{lst_csds_count}"
|
71
|
+
|
72
|
+
puts '===== Obtener los CSD cargados - Fin ====='
|
73
|
+
end
|
74
|
+
|
75
|
+
# Carga de un nuevo certificado, para un RFC
|
76
|
+
# * La API espera que el certificado y la llave sean enviados en base64. Por lo que las cadenas aqui expuestas,
|
77
|
+
# representan el contenido de los archivos corresponidientes, en dicho formato
|
78
|
+
def sample_csds_load(facturama)
|
79
|
+
puts '===== Cargar nuevo CSD - Inicio ====='
|
80
|
+
|
81
|
+
csd_model = Facturama::Models::Csd.new({
|
82
|
+
Rfc: 'EKU9003173C9',
|
83
|
+
Certificate: 'MIIFuzCCA6OgAwIBAgIUMzAwMDEwMDAwMDA0MDAwMDI0MzQwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWRpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMTkwNjE3MTk0NDE0WhcNMjMwNjE3MTk0NDE0WjCB4jEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gWElRQjg5MTExNlFFNDEeMBwGA1UEBRMVIC8gWElRQjg5MTExNk1HUk1aUjA1MR4wHAYDVQQLExVFc2N1ZWxhIEtlbXBlciBVcmdhdGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCN0peKpgfOL75iYRv1fqq+oVYsLPVUR/GibYmGKc9InHFy5lYF6OTYjnIIvmkOdRobbGlCUxORX/tLsl8Ya9gm6Yo7hHnODRBIDup3GISFzB/96R9K/MzYQOcscMIoBDARaycnLvy7FlMvO7/rlVnsSARxZRO8Kz8Zkksj2zpeYpjZIya/369+oGqQk1cTRkHo59JvJ4Tfbk/3iIyf4H/Ini9nBe9cYWo0MnKob7DDt/vsdi5tA8mMtA953LapNyCZIDCRQQlUGNgDqY9/8F5mUvVgkcczsIgGdvf9vMQPSf3jjCiKj7j6ucxl1+FwJWmbvgNmiaUR/0q4m2rm78lFAgMBAAGjHTAbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgbAMA0GCSqGSIb3DQEBCwUAA4ICAQBcpj1TjT4jiinIujIdAlFzE6kRwYJCnDG08zSp4kSnShjxADGEXH2chehKMV0FY7c4njA5eDGdA/G2OCTPvF5rpeCZP5Dw504RZkYDl2suRz+wa1sNBVpbnBJEK0fQcN3IftBwsgNFdFhUtCyw3lus1SSJbPxjLHS6FcZZ51YSeIfcNXOAuTqdimusaXq15GrSrCOkM6n2jfj2sMJYM2HXaXJ6rGTEgYmhYdwxWtil6RfZB+fGQ/H9I9WLnl4KTZUS6C9+NLHh4FPDhSk19fpS2S/56aqgFoGAkXAYt9Fy5ECaPcULIfJ1DEbsXKyRdCv3JY89+0MNkOdaDnsemS2o5Gl08zI4iYtt3L40gAZ60NPh31kVLnYNsmvfNxYyKp+AeJtDHyW9w7ftM0Hoi+BuRmcAQSKFV3pk8j51la+jrRBrAUv8blbRcQ5BiZUwJzHFEKIwTsRGoRyEx96sNnB03n6GTwjIGz92SmLdNl95r9rkvp+2m4S6q1lPuXaFg7DGBrXWC8iyqeWE2iobdwIIuXPTMVqQb12m1dAkJVRO5NdHnP/MpqOvOgLqoZBNHGyBg4Gqm4sCJHCxA1c8Elfa2RQTCk0tAzllL4vOnI1GHkGJn65xokGsaU4B4D36xh7eWrfj4/pgWHmtoDAYa8wzSwo2GVCZOs+mtEgOQB91/g==',
|
84
|
+
PrivateKey: 'MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS8AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucRFLOMmsAaFNkyWR0dXIAh0CMjE6NpQIMZhQ0HH/4tHgmwh4kCawGjIwERoG6/IH3mCt7u19J5+m6gUEGOJdEMXj976E5lKCd/EG6t6lCq66GE3rgux/nFmeQZvsjLlzPyhe2j+X81LrGudITTjDdgLI0EdbdV9CUJwWbibzrVxjuAVShRh07XPL/DiEw3Wk2+kdy4cfWmMvh0U55p0RKZopNkWuVVSvr3ai7ZNCwHZWDVqkUDpwDDGdyt0kYQ7qoKanIxv/A9wv6ekq0LQ/yLlOcelkxQeb8Glu4RXe+krRvrASw1eBAQ3mvNKpngwF8vtlyoil41PjHUOKALMJtNpywckRRYOk4703ylWIzTfdBlrZ6VmDBjdC5723G1HAx3R/x+o+08++RNiFaN06Ly5QbZZvjnealDfSKz1VKRHWeXggaW87rl4n0SOOWnvabKs4ZWRXTS0dhWK+KD/yYYQypTslDSXQrmyMkpc1Zcb4p9RTjodXxGCWdsR5i5+Ro/RiJvxWwwaO3YW6eaSavV0ROqANQ+A+GizMlxsVjl6G5Ooh6ORdA7jTNWmK44Icgyz6QFNh+J3NibxVK2GZxsQRi+N3HXeKYtq5SDXARA0BsaJQzYfDotA9LFgmFKg9jVhtcc1V3rtpaJ5sab8tdBTPPyN/XT8fA0GxlIX+hjLd3E9wB7qzNR6PZ84UKDxhCGWrLuIoSzuCbr+TD9UCJprsfTu8kr8Pur4rrxm7Zu1MsJRR9U5Ut+O9FZfw4SqGykyTGGh0v1gDG8esKpTW5MKNk9dRwDNHEmIF6tE6NeXDlzovf8VW6z9JA6AVUkgiFjDvLUY5MgyTqPB9RJNMSAZBzrkZgXyHlmFz2rvPqQGFbAtukjeRNS+nkVayLqfQnqpgthBvsgDUgFn03z0U2Svb094Q5XHMeQ4KM/nMWTEUC+8cybYhwVklJU7FBl9nzs66wkMZpViIrVWwSB2k9R1r/ZQcmeL+LR+WwgCtRs4It1rNVkxXwYHjsFM2Ce46TWhbVMF/h7Ap4lOTS15EHC8RvIBBcR2w1iJ+3pXiMeihArTELVnQsS31X3kxbBp3dGvLvW7PxDlwwdUQOXnMoimUCI/h0uPdSRULPAQHgSp9+TwqI0Uswb7cEiXnN8PySN5Tk109CYJjKqCxtuXu+oOeQV2I/0knQLd2zol+yIzNLj5a/HvyN+kOhIGi6TrFThuiVbbtnTtRM1CzKtFGuw5lYrwskkkvenoSLNY0N85QCU8ugjc3Bw4JZ9jNrDUaJ1Vb5/+1GQx/q/Dbxnl+FK6wMLjXy5JdFDeQyjBEBqndQxrs9cM5xBnl6AYs2Xymydafm2qK0cEDzwOPMpVcKU8sXS/AHvtgsn+rjMzW0wrQblWE0Ht/74GgfCj4diCDtzxQ0ggi6yJD+yhLZtVVqmKS3Gwnj9RxPLNfpgzPP01eYyBBi/W0RWTzcTb8iMxWX52MTU0oX9//4I7CAPXn0ZhpWAAIvUmkfjwfEModH7iwwaNtZFlT2rlzeshbP++UCEtqbwvveDRhmr5sMYkl+duEOca5156fcRy4tQ8Y3moNcKFKzHGMenShEIHz+W5KE=',
|
85
|
+
PrivateKeyPassword: '12345678a'
|
86
|
+
})
|
87
|
+
|
88
|
+
facturama.csds.create(csd_model)
|
89
|
+
puts "Se ha cargado un nuevo CSD para el Rfc: #{csd_model.Rfc}"
|
90
|
+
|
91
|
+
puts '===== Cargar nuevo CSD - Fin ====='
|
92
|
+
end
|
93
|
+
|
94
|
+
# Ejemplo de eliminacion del un CSD asociado como RFC
|
95
|
+
def sample_csds_remove(facturama)
|
96
|
+
puts '===== Eliminar CSD asociado con un RFC- Inicio ====='
|
97
|
+
|
98
|
+
facturama.csds.remove('EKU9003173C9')
|
99
|
+
puts 'Se ha eliminado el CSD asociado al Rfc'
|
100
|
+
|
101
|
+
puts '===== Eliminar CSD asociado con un RFC- Inicio ====='
|
102
|
+
end
|
103
|
+
|
104
|
+
# Ejemplo de actualización de CSD asociado con un RFC
|
105
|
+
def sample_csds_update(facturama)
|
106
|
+
puts '===== Actualiza el CSD asociado con un RFC- Inicio ====='
|
107
|
+
|
108
|
+
csd = facturama.csds.retrieve('EKU9003173C9')
|
109
|
+
|
110
|
+
csd['Certificate'] =
|
111
|
+
'MIIFuzCCA6OgAwIBAgIUMzAwMDEwMDAwMDA0MDAwMDI0MzQwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWRpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMTkwNjE3MTk0NDE0WhcNMjMwNjE3MTk0NDE0WjCB4jEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gWElRQjg5MTExNlFFNDEeMBwGA1UEBRMVIC8gWElRQjg5MTExNk1HUk1aUjA1MR4wHAYDVQQLExVFc2N1ZWxhIEtlbXBlciBVcmdhdGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCN0peKpgfOL75iYRv1fqq+oVYsLPVUR/GibYmGKc9InHFy5lYF6OTYjnIIvmkOdRobbGlCUxORX/tLsl8Ya9gm6Yo7hHnODRBIDup3GISFzB/96R9K/MzYQOcscMIoBDARaycnLvy7FlMvO7/rlVnsSARxZRO8Kz8Zkksj2zpeYpjZIya/369+oGqQk1cTRkHo59JvJ4Tfbk/3iIyf4H/Ini9nBe9cYWo0MnKob7DDt/vsdi5tA8mMtA953LapNyCZIDCRQQlUGNgDqY9/8F5mUvVgkcczsIgGdvf9vMQPSf3jjCiKj7j6ucxl1+FwJWmbvgNmiaUR/0q4m2rm78lFAgMBAAGjHTAbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgbAMA0GCSqGSIb3DQEBCwUAA4ICAQBcpj1TjT4jiinIujIdAlFzE6kRwYJCnDG08zSp4kSnShjxADGEXH2chehKMV0FY7c4njA5eDGdA/G2OCTPvF5rpeCZP5Dw504RZkYDl2suRz+wa1sNBVpbnBJEK0fQcN3IftBwsgNFdFhUtCyw3lus1SSJbPxjLHS6FcZZ51YSeIfcNXOAuTqdimusaXq15GrSrCOkM6n2jfj2sMJYM2HXaXJ6rGTEgYmhYdwxWtil6RfZB+fGQ/H9I9WLnl4KTZUS6C9+NLHh4FPDhSk19fpS2S/56aqgFoGAkXAYt9Fy5ECaPcULIfJ1DEbsXKyRdCv3JY89+0MNkOdaDnsemS2o5Gl08zI4iYtt3L40gAZ60NPh31kVLnYNsmvfNxYyKp+AeJtDHyW9w7ftM0Hoi+BuRmcAQSKFV3pk8j51la+jrRBrAUv8blbRcQ5BiZUwJzHFEKIwTsRGoRyEx96sNnB03n6GTwjIGz92SmLdNl95r9rkvp+2m4S6q1lPuXaFg7DGBrXWC8iyqeWE2iobdwIIuXPTMVqQb12m1dAkJVRO5NdHnP/MpqOvOgLqoZBNHGyBg4Gqm4sCJHCxA1c8Elfa2RQTCk0tAzllL4vOnI1GHkGJn65xokGsaU4B4D36xh7eWrfj4/pgWHmtoDAYa8wzSwo2GVCZOs+mtEgOQB91/g=='
|
112
|
+
csd['PrivateKey'] =
|
113
|
+
'MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS8AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucRFLOMmsAaFNkyWR0dXIAh0CMjE6NpQIMZhQ0HH/4tHgmwh4kCawGjIwERoG6/IH3mCt7u19J5+m6gUEGOJdEMXj976E5lKCd/EG6t6lCq66GE3rgux/nFmeQZvsjLlzPyhe2j+X81LrGudITTjDdgLI0EdbdV9CUJwWbibzrVxjuAVShRh07XPL/DiEw3Wk2+kdy4cfWmMvh0U55p0RKZopNkWuVVSvr3ai7ZNCwHZWDVqkUDpwDDGdyt0kYQ7qoKanIxv/A9wv6ekq0LQ/yLlOcelkxQeb8Glu4RXe+krRvrASw1eBAQ3mvNKpngwF8vtlyoil41PjHUOKALMJtNpywckRRYOk4703ylWIzTfdBlrZ6VmDBjdC5723G1HAx3R/x+o+08++RNiFaN06Ly5QbZZvjnealDfSKz1VKRHWeXggaW87rl4n0SOOWnvabKs4ZWRXTS0dhWK+KD/yYYQypTslDSXQrmyMkpc1Zcb4p9RTjodXxGCWdsR5i5+Ro/RiJvxWwwaO3YW6eaSavV0ROqANQ+A+GizMlxsVjl6G5Ooh6ORdA7jTNWmK44Icgyz6QFNh+J3NibxVK2GZxsQRi+N3HXeKYtq5SDXARA0BsaJQzYfDotA9LFgmFKg9jVhtcc1V3rtpaJ5sab8tdBTPPyN/XT8fA0GxlIX+hjLd3E9wB7qzNR6PZ84UKDxhCGWrLuIoSzuCbr+TD9UCJprsfTu8kr8Pur4rrxm7Zu1MsJRR9U5Ut+O9FZfw4SqGykyTGGh0v1gDG8esKpTW5MKNk9dRwDNHEmIF6tE6NeXDlzovf8VW6z9JA6AVUkgiFjDvLUY5MgyTqPB9RJNMSAZBzrkZgXyHlmFz2rvPqQGFbAtukjeRNS+nkVayLqfQnqpgthBvsgDUgFn03z0U2Svb094Q5XHMeQ4KM/nMWTEUC+8cybYhwVklJU7FBl9nzs66wkMZpViIrVWwSB2k9R1r/ZQcmeL+LR+WwgCtRs4It1rNVkxXwYHjsFM2Ce46TWhbVMF/h7Ap4lOTS15EHC8RvIBBcR2w1iJ+3pXiMeihArTELVnQsS31X3kxbBp3dGvLvW7PxDlwwdUQOXnMoimUCI/h0uPdSRULPAQHgSp9+TwqI0Uswb7cEiXnN8PySN5Tk109CYJjKqCxtuXu+oOeQV2I/0knQLd2zol+yIzNLj5a/HvyN+kOhIGi6TrFThuiVbbtnTtRM1CzKtFGuw5lYrwskkkvenoSLNY0N85QCU8ugjc3Bw4JZ9jNrDUaJ1Vb5/+1GQx/q/Dbxnl+FK6wMLjXy5JdFDeQyjBEBqndQxrs9cM5xBnl6AYs2Xymydafm2qK0cEDzwOPMpVcKU8sXS/AHvtgsn+rjMzW0wrQblWE0Ht/74GgfCj4diCDtzxQ0ggi6yJD+yhLZtVVqmKS3Gwnj9RxPLNfpgzPP01eYyBBi/W0RWTzcTb8iMxWX52MTU0oX9//4I7CAPXn0ZhpWAAIvUmkfjwfEModH7iwwaNtZFlT2rlzeshbP++UCEtqbwvveDRhmr5sMYkl+duEOca5156fcRy4tQ8Y3moNcKFKzHGMenShEIHz+W5KE='
|
114
|
+
csd['PrivateKeyPassword'] = '12345678a'
|
115
|
+
|
116
|
+
facturama.csds.update(csd, 'EKU9003173C9')
|
117
|
+
|
118
|
+
puts '===== Actualiza CSD asociado con un RFC - Inicio ====='
|
119
|
+
end
|
120
|
+
|
121
|
+
# ---------------------------------------------------------------------------------------------------------------------
|
122
|
+
# EJEMPLO DEL SERVICIO DE CFDI
|
123
|
+
def sample_cfdis(facturama)
|
124
|
+
puts '===== Ejemplo de CFDI - Inicio ====='
|
125
|
+
|
126
|
+
# Creacion del cfdi en su forma general (sin items / productos) asociados
|
127
|
+
# cfdi = sample_cfdis_create(facturama)
|
128
|
+
# cfdi = sample_cfdis_create40(facturama)
|
129
|
+
cfdi = sample_cfdis_factura_global(facturama)
|
130
|
+
|
131
|
+
cfdi_uuid = cfdi['Complement']['TaxStamp']['Uuid']
|
132
|
+
puts "Se creó exitosamente el cfdi con el folio fiscal: #{cfdi_uuid}"
|
133
|
+
|
134
|
+
# Descarga de los arvhivos PDF y XML del cfdi recien creado
|
135
|
+
# file_path = "factura" + cfdi_uuid
|
136
|
+
# facturama.cfdis.save_pdf( file_path + ".pdf", cfdi['Id'])
|
137
|
+
# facturama.cfdis.save_xml( file_path + ".xml", cfdi['Id'])
|
138
|
+
|
139
|
+
# Envio del cfdi por correo
|
140
|
+
# if facturama.cfdis.send_by_mail(cfdi['Id'], "chucho@facturama.mx", "Factura del servicio" )
|
141
|
+
# puts "Se envió por correo exitosamente el cfdi con el folio fiscal: " + cfdi_uuid
|
142
|
+
# end
|
143
|
+
|
144
|
+
# Se elimina el cfdi recien creado
|
145
|
+
facturama.cfdis.remove(cfdi['Id'], '02', 'fb296674-52b3-4824-8d77-669dbc82846e')
|
146
|
+
puts "Se elminó exitosamente el cfdi con el folio fiscal: #{cfdi_uuid}"
|
147
|
+
|
148
|
+
# Consulta de cfdi por palabra clave o Rfc
|
149
|
+
# lst_by_rfc = facturama.cfdis.list_by_rfc("ESO1202108R2")
|
150
|
+
# lst_by_keyword = facturama.cfdis.list_by_keyword("Software")
|
151
|
+
|
152
|
+
# puts "Se obtiene la lista de facturas por RFC: #{lst_by_rfc.length}"
|
153
|
+
# puts "Se obtiene la lista de facturas por KEYWORD: #{lst_by_keyword.length}"
|
154
|
+
|
155
|
+
puts '===== Ejemplo de CFDI - Fin ====='
|
156
|
+
end
|
157
|
+
|
158
|
+
# Ejemplo de creación de un CFDI
|
159
|
+
# En la API MULTIMEMISOR Se puede cambiar el campo de "Issuer" y emitir una factura,
|
160
|
+
# siempre y cuando previamente cargáramos los Certificados CSD
|
161
|
+
# * Nota:
|
162
|
+
# La creación de una factura muy similar a la forma de crearla en API WEB.
|
163
|
+
# Y se diferencía en que aquí se tiene la sección de:
|
164
|
+
# "Issuer": {
|
165
|
+
# "FiscalRegime": "601",
|
166
|
+
# "Rfc": "AAA010101AAA",
|
167
|
+
# "Name": "EXPRESION EN SOFTWARE"
|
168
|
+
# },
|
169
|
+
def sample_cfdis_create(facturama)
|
170
|
+
cfdi = {
|
171
|
+
"Serie": 'R',
|
172
|
+
"Currency": 'MXN',
|
173
|
+
"ExpeditionPlace": '78116',
|
174
|
+
"PaymentConditions": 'CREDITO A SIETE DIAS',
|
175
|
+
"Folio": '100',
|
176
|
+
"CfdiType": 'I',
|
177
|
+
"PaymentForm": '03',
|
178
|
+
"PaymentMethod": 'PUE',
|
179
|
+
|
180
|
+
"Issuer": {
|
181
|
+
"FiscalRegime": '601',
|
182
|
+
"Rfc": 'AAA010101AAA',
|
183
|
+
"Name": 'EXPRESION EN SOFTWARE'
|
184
|
+
},
|
185
|
+
|
186
|
+
"Receiver": {
|
187
|
+
"Rfc": 'XAXX010101000',
|
188
|
+
"Name": 'RADIAL SOFTWARE SOLUTIONS',
|
189
|
+
"CfdiUse": 'P01'
|
190
|
+
},
|
191
|
+
"Items": [
|
192
|
+
{
|
193
|
+
"ProductCode": '10101504',
|
194
|
+
"IdentificationNumber": 'EDL',
|
195
|
+
"Description": 'Estudios de viabilidad',
|
196
|
+
"Unit": 'NO APLICA',
|
197
|
+
"UnitCode": 'MTS',
|
198
|
+
"UnitPrice": 50.0,
|
199
|
+
"Quantity": 2.0,
|
200
|
+
"Subtotal": 100.0,
|
201
|
+
"Taxes": [{
|
202
|
+
"Total": 16.0,
|
203
|
+
"Name": 'IVA',
|
204
|
+
"Base": 100.0,
|
205
|
+
"Rate": 0.16,
|
206
|
+
"IsRetention": false
|
207
|
+
}],
|
208
|
+
"Total": 116.0
|
209
|
+
},
|
210
|
+
{
|
211
|
+
"ProductCode": '10101504',
|
212
|
+
"IdentificationNumber": '001',
|
213
|
+
"Description": 'SERVICIO DE COLOCACION',
|
214
|
+
"Unit": 'NO APLICA',
|
215
|
+
"UnitCode": 'E49',
|
216
|
+
"UnitPrice": 100.0,
|
217
|
+
"Quantity": 15.0,
|
218
|
+
"Subtotal": 1500.0,
|
219
|
+
"Discount": 0.0,
|
220
|
+
"Taxes": [{
|
221
|
+
"Total": 240.0,
|
222
|
+
"Name": 'IVA',
|
223
|
+
"Base": 1500.0,
|
224
|
+
"Rate": 0.16,
|
225
|
+
"IsRetention": false
|
226
|
+
}],
|
227
|
+
"Total": 1740.0
|
228
|
+
}
|
229
|
+
]
|
230
|
+
}
|
231
|
+
|
232
|
+
# Creación del CFDI mediante la API, para su creación
|
233
|
+
facturama.cfdis.create(cfdi)
|
234
|
+
end
|
235
|
+
|
236
|
+
# Ejemplo de CFDI 40
|
237
|
+
def sample_cfdis_create40(facturama)
|
238
|
+
cfdi = {
|
239
|
+
"Serie": 'R',
|
240
|
+
"Currency": 'MXN',
|
241
|
+
"ExpeditionPlace": '78140',
|
242
|
+
"PaymentConditions": 'CREDITO A SIETE DIAS',
|
243
|
+
"Folio": '100',
|
244
|
+
"CfdiType": 'I',
|
245
|
+
"PaymentForm": '03',
|
246
|
+
"PaymentMethod": 'PUE',
|
247
|
+
|
248
|
+
"Issuer": {
|
249
|
+
"FiscalRegime": '601',
|
250
|
+
"Rfc": 'EKU9003173C9',
|
251
|
+
"Name": 'ESCUELA KEMPER URGATE'
|
252
|
+
},
|
253
|
+
|
254
|
+
"Receiver": {
|
255
|
+
"Rfc": 'URE180429TM6',
|
256
|
+
"Name": 'UNIVERSIDAD ROBOTICA ESPAÑOLA',
|
257
|
+
"CfdiUse": 'G03',
|
258
|
+
"FiscalRegime": '601',
|
259
|
+
"TaxZipCode": '65000'
|
260
|
+
},
|
261
|
+
"Items": [
|
262
|
+
{
|
263
|
+
"ProductCode": '10101504',
|
264
|
+
"IdentificationNumber": 'EDL',
|
265
|
+
"Description": 'Estudios de viabilidad',
|
266
|
+
"Unit": 'NO APLICA',
|
267
|
+
"UnitCode": 'MTS',
|
268
|
+
"UnitPrice": 50.0,
|
269
|
+
"Quantity": 2.0,
|
270
|
+
"Subtotal": 100.0,
|
271
|
+
"TaxObject": '02',
|
272
|
+
"Taxes": [{
|
273
|
+
"Total": 16.0,
|
274
|
+
"Name": 'IVA',
|
275
|
+
"Base": 100.0,
|
276
|
+
"Rate": 0.16,
|
277
|
+
"IsRetention": false
|
278
|
+
}],
|
279
|
+
"Total": 116.0
|
280
|
+
},
|
281
|
+
{
|
282
|
+
"ProductCode": '10101504',
|
283
|
+
"IdentificationNumber": '001',
|
284
|
+
"Description": 'SERVICIO DE COLOCACION',
|
285
|
+
"Unit": 'NO APLICA',
|
286
|
+
"UnitCode": 'E49',
|
287
|
+
"UnitPrice": 100.0,
|
288
|
+
"Quantity": 15.0,
|
289
|
+
"Subtotal": 1500.0,
|
290
|
+
"Discount": 0.0,
|
291
|
+
"TaxObject": '02',
|
292
|
+
"Taxes": [{
|
293
|
+
"Total": 240.0,
|
294
|
+
"Name": 'IVA',
|
295
|
+
"Base": 1500.0,
|
296
|
+
"Rate": 0.16,
|
297
|
+
"IsRetention": false
|
298
|
+
}],
|
299
|
+
"Total": 1740.0
|
300
|
+
}
|
301
|
+
]
|
302
|
+
}
|
303
|
+
|
304
|
+
# Creación del CFDI mediante la API, para su creación
|
305
|
+
facturama.cfdis.create3(cfdi)
|
306
|
+
end
|
307
|
+
|
308
|
+
# Ejemplo de CFDI 40 Factura Global
|
309
|
+
def sample_cfdis_factura_global(facturama)
|
310
|
+
cfdi = {
|
311
|
+
"Serie": 'R',
|
312
|
+
"Currency": 'MXN',
|
313
|
+
"ExpeditionPlace": '78140',
|
314
|
+
"PaymentConditions": 'CREDITO A SIETE DIAS',
|
315
|
+
"Folio": '100',
|
316
|
+
"CfdiType": 'I',
|
317
|
+
"PaymentForm": '03',
|
318
|
+
"PaymentMethod": 'PUE',
|
319
|
+
"Exportation": '01',
|
320
|
+
"GlobalInformation":
|
321
|
+
{
|
322
|
+
"Periodicity": '02',
|
323
|
+
"Months": '04',
|
324
|
+
"Year": '2022'
|
325
|
+
},
|
326
|
+
"Issuer": {
|
327
|
+
"FiscalRegime": '601',
|
328
|
+
"Rfc": 'EKU9003173C9',
|
329
|
+
"Name": 'ESCUELA KEMPER URGATE'
|
330
|
+
},
|
331
|
+
|
332
|
+
"Receiver": {
|
333
|
+
"Rfc": 'XAXX010101000',
|
334
|
+
"Name": 'PUBLICO EN GENERAL',
|
335
|
+
"CfdiUse": 'S01',
|
336
|
+
"FiscalRegime": '616',
|
337
|
+
"TaxZipCode": '78140'
|
338
|
+
},
|
339
|
+
"Items": [
|
340
|
+
{
|
341
|
+
"ProductCode": '10101504',
|
342
|
+
"IdentificationNumber": 'EDL',
|
343
|
+
"Description": 'Estudios de viabilidad',
|
344
|
+
"Unit": 'NO APLICA',
|
345
|
+
"UnitCode": 'MTS',
|
346
|
+
"UnitPrice": 50.0,
|
347
|
+
"Quantity": 2.0,
|
348
|
+
"Subtotal": 100.0,
|
349
|
+
"TaxObject": '02',
|
350
|
+
"Taxes": [{
|
351
|
+
"Total": 16.0,
|
352
|
+
"Name": 'IVA',
|
353
|
+
"Base": 100.0,
|
354
|
+
"Rate": 0.16,
|
355
|
+
"IsRetention": false
|
356
|
+
}],
|
357
|
+
"Total": 116.0
|
358
|
+
}
|
359
|
+
]
|
360
|
+
}
|
361
|
+
|
362
|
+
# Creación del CFDI mediante la API, para su creación
|
363
|
+
facturama.cfdis.create3(cfdi)
|
364
|
+
end
|
365
|
+
end
|
366
|
+
end
|
367
|
+
end
|