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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/lib/facturama/facturama_api_multi.rb +29 -0
  3. data/lib/facturama/facturama_api_web.rb +47 -0
  4. data/lib/facturama/models/address.rb +17 -0
  5. data/lib/facturama/models/branch_office.rb +16 -0
  6. data/lib/facturama/models/cfdi.rb +77 -0
  7. data/lib/facturama/models/cfdi_relation.rb +11 -0
  8. data/lib/facturama/models/cfdi_relations.rb +13 -0
  9. data/lib/facturama/models/client.rb +19 -0
  10. data/lib/facturama/models/complement.rb +9 -0
  11. data/lib/facturama/models/connection_info.rb +21 -0
  12. data/lib/facturama/models/csd.rb +14 -0
  13. data/lib/facturama/models/exception/facturama_exception.rb +13 -0
  14. data/lib/facturama/models/exception/model_exception.rb +8 -0
  15. data/lib/facturama/models/globalInformation.rb +15 -0
  16. data/lib/facturama/models/image.rb +12 -0
  17. data/lib/facturama/models/item.rb +29 -0
  18. data/lib/facturama/models/model.rb +68 -0
  19. data/lib/facturama/models/product.rb +25 -0
  20. data/lib/facturama/models/product_tax.rb +14 -0
  21. data/lib/facturama/models/receiver.rb +18 -0
  22. data/lib/facturama/models/serie.rb +15 -0
  23. data/lib/facturama/models/tax.rb +15 -0
  24. data/lib/facturama/models/tax_entity.rb +22 -0
  25. data/lib/facturama/models/tax_stamp.rb +13 -0
  26. data/lib/facturama/models/thirdPartyAccount.rb +14 -0
  27. data/lib/facturama/services/branch_office_service.rb +13 -0
  28. data/lib/facturama/services/catalog_service.rb +39 -0
  29. data/lib/facturama/services/cfdi_multi_service.rb +130 -0
  30. data/lib/facturama/services/cfdi_service.rb +137 -0
  31. data/lib/facturama/services/client_service.rb +13 -0
  32. data/lib/facturama/services/crud_service.rb +33 -0
  33. data/lib/facturama/services/csd_service.rb +13 -0
  34. data/lib/facturama/services/http_service.rb +115 -0
  35. data/lib/facturama/services/product_service.rb +13 -0
  36. data/lib/facturama/version.rb +5 -0
  37. data/lib/facturama-ipz.rb +42 -0
  38. data/lib/samples/sample_api.rb +11 -0
  39. data/lib/samples/sample_api_multi.rb +367 -0
  40. data/lib/samples/sample_api_web.rb +458 -0
  41. 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