interfactura-ruby 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.DS_Store +0 -0
- data/.gitignore +54 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +73 -0
- data/LICENSE.txt +21 -0
- data/README.md +78 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/interfactura-ruby.gemspec +32 -0
- data/lib/.DS_Store +0 -0
- data/lib/interfactura/.DS_Store +0 -0
- data/lib/interfactura/parser/addenda.rb +13 -0
- data/lib/interfactura/parser/complemento.rb +12 -0
- data/lib/interfactura/parser/comprobante.rb +32 -0
- data/lib/interfactura/parser/concepto.rb +14 -0
- data/lib/interfactura/parser/conceptos.rb +12 -0
- data/lib/interfactura/parser/domicilio.rb +17 -0
- data/lib/interfactura/parser/domicilio_fiscal.rb +19 -0
- data/lib/interfactura/parser/emisor.rb +17 -0
- data/lib/interfactura/parser/factura_interfactura.rb +77 -0
- data/lib/interfactura/parser/impuestos.rb +14 -0
- data/lib/interfactura/parser/receptor.rb +15 -0
- data/lib/interfactura/parser/regimen_fiscal.rb +10 -0
- data/lib/interfactura/parser/resultado.rb +22 -0
- data/lib/interfactura/parser/timbre_fiscal_digital.rb +15 -0
- data/lib/interfactura/parser/traslado.rb +12 -0
- data/lib/interfactura/parser/traslados.rb +12 -0
- data/lib/interfactura/ruby.rb +6 -0
- data/lib/interfactura/ruby/.DS_Store +0 -0
- data/lib/interfactura/ruby/client.rb +25 -0
- data/lib/interfactura/ruby/invoice.rb +44 -0
- data/lib/interfactura/ruby/response.rb +14 -0
- data/lib/interfactura/ruby/templates/message_template.xml.erb +10 -0
- data/lib/interfactura/ruby/templates/output_sample.xml +32 -0
- data/lib/interfactura/ruby/templates/sample.xml +1 -0
- data/lib/interfactura/ruby/version.rb +5 -0
- metadata +168 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b17a71f2abaf7f29373e099e2f617f8d3c76b0fd
|
4
|
+
data.tar.gz: d6c9853a54f3b280850da08d33b770a75490048c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e1e61d571910f8fd512915d841806ced6e51aacc7ad86c44f2ae72c6bfcbb5d277340d3de0d9ef5aa01bbf217ac65573f12e7ad3ed66c1bba63c26b55880d965
|
7
|
+
data.tar.gz: 10e2b2cb4348ab8557e08046f373957611188302d9518deb1e2c0249807f32631ce4b149393f3f534a71d824bf7c5d760939bedd2138586be4a653f0fafc1f22
|
data/.DS_Store
ADDED
Binary file
|
data/.gitignore
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
/.config
|
4
|
+
/coverage/
|
5
|
+
/InstalledFiles
|
6
|
+
/pkg/
|
7
|
+
/spec/reports/
|
8
|
+
/spec/examples.txt
|
9
|
+
/test/tmp/
|
10
|
+
/test/version_tmp/
|
11
|
+
/tmp/
|
12
|
+
|
13
|
+
# Used by dotenv library to load environment variables.
|
14
|
+
# .env
|
15
|
+
|
16
|
+
## Specific to RubyMotion:
|
17
|
+
.dat*
|
18
|
+
.repl_history
|
19
|
+
build/
|
20
|
+
*.bridgesupport
|
21
|
+
build-iPhoneOS/
|
22
|
+
build-iPhoneSimulator/
|
23
|
+
|
24
|
+
## Specific to RubyMotion (use of CocoaPods):
|
25
|
+
#
|
26
|
+
# We recommend against adding the Pods directory to your .gitignore. However
|
27
|
+
# you should judge for yourself, the pros and cons are mentioned at:
|
28
|
+
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
|
29
|
+
#
|
30
|
+
# vendor/Pods/
|
31
|
+
|
32
|
+
## Documentation cache and generated files:
|
33
|
+
/.yardoc/
|
34
|
+
/_yardoc/
|
35
|
+
/doc/
|
36
|
+
/rdoc/
|
37
|
+
|
38
|
+
## Environment normalization:
|
39
|
+
/.bundle/
|
40
|
+
/vendor/bundle
|
41
|
+
/lib/bundler/man/
|
42
|
+
|
43
|
+
# for a library or gem, you might want to ignore these files since the code is
|
44
|
+
# intended to run in multiple environments; otherwise, check them in:
|
45
|
+
# Gemfile.lock
|
46
|
+
# .ruby-version
|
47
|
+
# .ruby-gemset
|
48
|
+
|
49
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
50
|
+
.rvmrc
|
51
|
+
|
52
|
+
# Emacs backups
|
53
|
+
.#*
|
54
|
+
.\#*
|
data/CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
2
|
+
|
3
|
+
## Our Pledge
|
4
|
+
|
5
|
+
In the interest of fostering an open and welcoming environment, we as
|
6
|
+
contributors and maintainers pledge to making participation in our project and
|
7
|
+
our community a harassment-free experience for everyone, regardless of age, body
|
8
|
+
size, disability, ethnicity, gender identity and expression, level of experience,
|
9
|
+
nationality, personal appearance, race, religion, or sexual identity and
|
10
|
+
orientation.
|
11
|
+
|
12
|
+
## Our Standards
|
13
|
+
|
14
|
+
Examples of behavior that contributes to creating a positive environment
|
15
|
+
include:
|
16
|
+
|
17
|
+
* Using welcoming and inclusive language
|
18
|
+
* Being respectful of differing viewpoints and experiences
|
19
|
+
* Gracefully accepting constructive criticism
|
20
|
+
* Focusing on what is best for the community
|
21
|
+
* Showing empathy towards other community members
|
22
|
+
|
23
|
+
Examples of unacceptable behavior by participants include:
|
24
|
+
|
25
|
+
* The use of sexualized language or imagery and unwelcome sexual attention or
|
26
|
+
advances
|
27
|
+
* Trolling, insulting/derogatory comments, and personal or political attacks
|
28
|
+
* Public or private harassment
|
29
|
+
* Publishing others' private information, such as a physical or electronic
|
30
|
+
address, without explicit permission
|
31
|
+
* Other conduct which could reasonably be considered inappropriate in a
|
32
|
+
professional setting
|
33
|
+
|
34
|
+
## Our Responsibilities
|
35
|
+
|
36
|
+
Project maintainers are responsible for clarifying the standards of acceptable
|
37
|
+
behavior and are expected to take appropriate and fair corrective action in
|
38
|
+
response to any instances of unacceptable behavior.
|
39
|
+
|
40
|
+
Project maintainers have the right and responsibility to remove, edit, or
|
41
|
+
reject comments, commits, code, wiki edits, issues, and other contributions
|
42
|
+
that are not aligned to this Code of Conduct, or to ban temporarily or
|
43
|
+
permanently any contributor for other behaviors that they deem inappropriate,
|
44
|
+
threatening, offensive, or harmful.
|
45
|
+
|
46
|
+
## Scope
|
47
|
+
|
48
|
+
This Code of Conduct applies both within project spaces and in public spaces
|
49
|
+
when an individual is representing the project or its community. Examples of
|
50
|
+
representing a project or community include using an official project e-mail
|
51
|
+
address, posting via an official social media account, or acting as an appointed
|
52
|
+
representative at an online or offline event. Representation of a project may be
|
53
|
+
further defined and clarified by project maintainers.
|
54
|
+
|
55
|
+
## Enforcement
|
56
|
+
|
57
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
58
|
+
reported by contacting the project team at TODO: Write your email address. All
|
59
|
+
complaints will be reviewed and investigated and will result in a response that
|
60
|
+
is deemed necessary and appropriate to the circumstances. The project team is
|
61
|
+
obligated to maintain confidentiality with regard to the reporter of an incident.
|
62
|
+
Further details of specific enforcement policies may be posted separately.
|
63
|
+
|
64
|
+
Project maintainers who do not follow or enforce the Code of Conduct in good
|
65
|
+
faith may face temporary or permanent repercussions as determined by other
|
66
|
+
members of the project's leadership.
|
67
|
+
|
68
|
+
## Attribution
|
69
|
+
|
70
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
71
|
+
available at [http://contributor-covenant.org/version/1/4][version]
|
72
|
+
|
73
|
+
[homepage]: http://contributor-covenant.org
|
74
|
+
[version]: http://contributor-covenant.org/version/1/4/
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
interfactura-ruby (0.1.0)
|
5
|
+
nokogiri-happymapper (~> 0.5)
|
6
|
+
pry (~> 0.10)
|
7
|
+
savon (~> 2.11.0)
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
akami (1.3.1)
|
13
|
+
gyoku (>= 0.4.0)
|
14
|
+
nokogiri
|
15
|
+
builder (3.2.2)
|
16
|
+
coderay (1.1.1)
|
17
|
+
diff-lcs (1.2.5)
|
18
|
+
gyoku (1.3.1)
|
19
|
+
builder (>= 2.1.2)
|
20
|
+
httpi (2.4.2)
|
21
|
+
rack
|
22
|
+
socksify
|
23
|
+
method_source (0.8.2)
|
24
|
+
mini_portile2 (2.1.0)
|
25
|
+
nokogiri (1.7.0.1)
|
26
|
+
mini_portile2 (~> 2.1.0)
|
27
|
+
nokogiri-happymapper (0.5.9)
|
28
|
+
nokogiri (~> 1.5)
|
29
|
+
nori (2.6.0)
|
30
|
+
pry (0.10.4)
|
31
|
+
coderay (~> 1.1.0)
|
32
|
+
method_source (~> 0.8.1)
|
33
|
+
slop (~> 3.4)
|
34
|
+
rack (2.0.1)
|
35
|
+
rake (10.5.0)
|
36
|
+
rspec (3.5.0)
|
37
|
+
rspec-core (~> 3.5.0)
|
38
|
+
rspec-expectations (~> 3.5.0)
|
39
|
+
rspec-mocks (~> 3.5.0)
|
40
|
+
rspec-core (3.5.4)
|
41
|
+
rspec-support (~> 3.5.0)
|
42
|
+
rspec-expectations (3.5.0)
|
43
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
44
|
+
rspec-support (~> 3.5.0)
|
45
|
+
rspec-mocks (3.5.0)
|
46
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
47
|
+
rspec-support (~> 3.5.0)
|
48
|
+
rspec-support (3.5.0)
|
49
|
+
savon (2.11.1)
|
50
|
+
akami (~> 1.2)
|
51
|
+
builder (>= 2.1.2)
|
52
|
+
gyoku (~> 1.2)
|
53
|
+
httpi (~> 2.3)
|
54
|
+
nokogiri (>= 1.4.0)
|
55
|
+
nori (~> 2.4)
|
56
|
+
wasabi (~> 3.4)
|
57
|
+
slop (3.6.0)
|
58
|
+
socksify (1.7.0)
|
59
|
+
wasabi (3.5.0)
|
60
|
+
httpi (~> 2.0)
|
61
|
+
nokogiri (>= 1.4.2)
|
62
|
+
|
63
|
+
PLATFORMS
|
64
|
+
ruby
|
65
|
+
|
66
|
+
DEPENDENCIES
|
67
|
+
bundler (~> 1.13)
|
68
|
+
interfactura-ruby!
|
69
|
+
rake (~> 10.0)
|
70
|
+
rspec (~> 3.0)
|
71
|
+
|
72
|
+
BUNDLED WITH
|
73
|
+
1.13.7
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2017 TODO: Write your name
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
# Interfactura::Ruby
|
2
|
+
|
3
|
+
Interfactura Ruby is a small SDK written in Ruby to interact with the [Interfactura](https://www.interfactura.com) web services.
|
4
|
+
|
5
|
+
## Table of contents
|
6
|
+
|
7
|
+
- [Installation instructions](#installation-instructions)
|
8
|
+
- [Usage](#usage)
|
9
|
+
- [Development](#development)
|
10
|
+
- [Contributing](#contributing)
|
11
|
+
- [License](#license)
|
12
|
+
|
13
|
+
## Installation instructions
|
14
|
+
|
15
|
+
Add this line to your application's Gemfile:
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
gem 'interfactura-ruby'
|
19
|
+
```
|
20
|
+
|
21
|
+
And then execute:
|
22
|
+
|
23
|
+
```console
|
24
|
+
$ bundle
|
25
|
+
```
|
26
|
+
|
27
|
+
Or install it yourself as:
|
28
|
+
|
29
|
+
```console
|
30
|
+
$ gem install interfactura-ruby
|
31
|
+
```
|
32
|
+
|
33
|
+
## Usage
|
34
|
+
|
35
|
+
We currently only support one operation from the web services, which is the invoice generation, an example on how to run this would be:
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
|
39
|
+
# We first create the client
|
40
|
+
client = Interfactura::Ruby::Client.new(wsdl: "https://pruebas2.interfactura.com/OnLiveIFWebService/OnLiveIFWebService.asmx?WSDL", ssl_cert_file: "/certs/certificate.pem", ssl_cert_key_file: "/certs/key.pem")
|
41
|
+
|
42
|
+
# Then we create an invoice object
|
43
|
+
invoice = Interfactura::Ruby::Invoice.new({
|
44
|
+
id: "fake_id_1234",
|
45
|
+
total: 123.50,
|
46
|
+
rfc: "AAAA881217TT1",
|
47
|
+
name: "Nachito",
|
48
|
+
phone: "1111111111",
|
49
|
+
email: "example@example.com",
|
50
|
+
city: "Mexico City",
|
51
|
+
municipality: "Monterrey",
|
52
|
+
street: "Foo",
|
53
|
+
number: "1234",
|
54
|
+
zipcode: "64770",
|
55
|
+
state: "NL",
|
56
|
+
colony: "foo bar"
|
57
|
+
})
|
58
|
+
|
59
|
+
# And then we sign it through Interfactura
|
60
|
+
|
61
|
+
client.generate_document(invoice)
|
62
|
+
```
|
63
|
+
|
64
|
+
## Development
|
65
|
+
|
66
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
67
|
+
|
68
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
69
|
+
|
70
|
+
## Contributing
|
71
|
+
|
72
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/interfactura-ruby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
73
|
+
|
74
|
+
|
75
|
+
## License
|
76
|
+
|
77
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
78
|
+
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "interfactura/ruby"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
#require "pry"
|
11
|
+
#Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'interfactura/ruby/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "interfactura-ruby"
|
8
|
+
spec.version = Interfactura::Ruby::VERSION
|
9
|
+
spec.authors = ["Icalia Labs"]
|
10
|
+
spec.email = ["weare@icalialabs.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{ A Ruby SDK to connect to Interfactura Web Services }
|
13
|
+
spec.description = %q{ A Ruby SDK to interact with the Interfactura Web Services }
|
14
|
+
spec.homepage = "https://github.com/IcaliaLabs/interfactura-ruby"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
|
+
f.match(%r{^(test|spec|features)/})
|
19
|
+
end
|
20
|
+
|
21
|
+
spec.bindir = "bin"
|
22
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
23
|
+
spec.require_paths = ["lib"]
|
24
|
+
|
25
|
+
spec.add_dependency "nokogiri-happymapper", "~> 0.5"
|
26
|
+
spec.add_dependency "savon", "~> 2.11"
|
27
|
+
spec.add_dependency "pry", "~> 0.10"
|
28
|
+
|
29
|
+
spec.add_development_dependency "bundler", "~> 1.13"
|
30
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
31
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
32
|
+
end
|
data/lib/.DS_Store
ADDED
Binary file
|
Binary file
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'interfactura/parser/factura_interfactura'
|
2
|
+
|
3
|
+
module Interfactura
|
4
|
+
module Parser
|
5
|
+
class Addenda
|
6
|
+
include HappyMapper
|
7
|
+
|
8
|
+
tag "cfdi:Addenda"
|
9
|
+
|
10
|
+
element "factura_interfactura", Interfactura::Parser::FacturaInterfactura, tag: "if:FacturaInterfactura"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'interfactura/parser/timbre_fiscal_digital'
|
2
|
+
|
3
|
+
module Interfactura
|
4
|
+
module Parser
|
5
|
+
class Complemento
|
6
|
+
include HappyMapper
|
7
|
+
|
8
|
+
tag "cfdi:Complemento"
|
9
|
+
element "timbre_fiscal_digital", Interfactura::Parser::TimbreFiscalDigital, tag: "tfd:TimbreFiscalDigital"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'interfactura/parser/emisor'
|
2
|
+
require 'interfactura/parser/receptor'
|
3
|
+
require 'interfactura/parser/conceptos'
|
4
|
+
require 'interfactura/parser/impuestos'
|
5
|
+
require 'interfactura/parser/complemento'
|
6
|
+
require 'interfactura/parser/addenda'
|
7
|
+
|
8
|
+
module Interfactura
|
9
|
+
module Parser
|
10
|
+
class Comprobante
|
11
|
+
include HappyMapper
|
12
|
+
|
13
|
+
tag 'cfdi:Comprobante'
|
14
|
+
attribute "forma_de_pago", String, tag: "formaDePago"
|
15
|
+
attribute "condiciones_de_pago", String, tag: "condicionesDePago"
|
16
|
+
attribute "sub_total", String, tag: "subTotal"
|
17
|
+
attribute "tipo_cambio", String, tag: "TipoCambio"
|
18
|
+
attribute "moneda", String, tag: "Moneda"
|
19
|
+
attribute "total", String
|
20
|
+
attribute "tipo_de_comprobante", String, tag: "tipoDeComprobante"
|
21
|
+
attribute "metodo_de_pago", String, tag: "metodoDePago"
|
22
|
+
attribute "lugar_expedicion", String, tag: "LugarExpedicion"
|
23
|
+
|
24
|
+
element "emisor", Interfactura::Parser::Emisor, tag: "cfdi:Emisor"
|
25
|
+
element "receptor", Interfactura::Parser::Receptor, tag: "cfdi:Receptor"
|
26
|
+
element "conceptos", Interfactura::Parser::Conceptos, tag: "cfdi:Conceptos"
|
27
|
+
element "impuestos", Interfactura::Parser::Impuestos, tag: "cfdi:Impuestos"
|
28
|
+
element "complemento", Interfactura::Parser::Complemento, tag: "cfdi:Complemento"
|
29
|
+
element "addenda", Interfactura::Parser::Addenda, tag: "cfdi:Addenda"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Interfactura
|
2
|
+
module Parser
|
3
|
+
class Concepto
|
4
|
+
include HappyMapper
|
5
|
+
|
6
|
+
tag "cfdi:Concepto"
|
7
|
+
attribute "cantidad", String
|
8
|
+
attribute "unidad", String
|
9
|
+
attribute "descripcion", String
|
10
|
+
attribute "valor_unitario", String, tag: "valorUnitario"
|
11
|
+
attribute "importe", String
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Interfactura
|
2
|
+
module Parser
|
3
|
+
class Domicilio
|
4
|
+
include HappyMapper
|
5
|
+
|
6
|
+
tag "cfdi:Domicilio"
|
7
|
+
attribute "calle", String
|
8
|
+
attribute "no_exterior", String, tag: "noExterior"
|
9
|
+
attribute "colonia", String
|
10
|
+
attribute "localidad", String
|
11
|
+
attribute "municipio", String
|
12
|
+
attribute "estado", String
|
13
|
+
attribute "pais", String
|
14
|
+
attribute "codigo_postal", String, tag: "codigoPostal"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Interfactura
|
2
|
+
module Parser
|
3
|
+
class DomicilioFiscal
|
4
|
+
include HappyMapper
|
5
|
+
|
6
|
+
tag "cfdi:DomicilioFiscal"
|
7
|
+
attribute "calle", String
|
8
|
+
attribute "no_exterior", String, tag: "noExterior"
|
9
|
+
attribute "no_interior", String, tag: "noInterior"
|
10
|
+
attribute "colonia", String
|
11
|
+
attribute "localidad", String
|
12
|
+
attribute "referencia", String
|
13
|
+
attribute "municipio", String
|
14
|
+
attribute "estado", String
|
15
|
+
attribute "pais", String
|
16
|
+
attribute "codigo_postal", String, tag: "codigoPostal"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'interfactura/parser/domicilio_fiscal'
|
2
|
+
require 'interfactura/parser/regimen_fiscal'
|
3
|
+
|
4
|
+
module Interfactura
|
5
|
+
module Parser
|
6
|
+
class Emisor
|
7
|
+
include HappyMapper
|
8
|
+
|
9
|
+
tag "cfdi:Emisor"
|
10
|
+
attribute "rfc", String
|
11
|
+
attribute "nombre", String
|
12
|
+
|
13
|
+
element "domicilio_fiscal", Interfactura::Parser::DomicilioFiscal, tag: "cfdi:DomicilioFiscal"
|
14
|
+
element "regimen_fiscal", Interfactura::Parser::RegimenFiscal, tag: "cfdi:RegimenFiscal"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Interfactura
|
2
|
+
module Parser
|
3
|
+
class FacturaInterfacturaEmisor
|
4
|
+
include HappyMapper
|
5
|
+
|
6
|
+
tag "if:Emisor"
|
7
|
+
attribute "ri", String, tag: "RI"
|
8
|
+
end
|
9
|
+
|
10
|
+
class FacturaInterfacturaReceptor
|
11
|
+
include HappyMapper
|
12
|
+
|
13
|
+
tag "if:Receptor"
|
14
|
+
attribute "ri", String, tag: "RI"
|
15
|
+
attribute "activo", String, tag: "Activo"
|
16
|
+
end
|
17
|
+
|
18
|
+
class FacturaInterfacturaEncabezado
|
19
|
+
include HappyMapper
|
20
|
+
|
21
|
+
tag "if:Encabezado"
|
22
|
+
attribute "id_interno", String, tag: "IdInterno"
|
23
|
+
attribute "template_id", String, tag: "TemplateId"
|
24
|
+
attribute "folio", String, tag: "Folio"
|
25
|
+
attribute "folio_serie", String, tag: "FolioSerie"
|
26
|
+
attribute "serie_folio", String, tag: "SerieFolio"
|
27
|
+
attribute "serie", String, tag: "Serie"
|
28
|
+
attribute "uuid", String, tag: "UUID"
|
29
|
+
attribute "sub_total", String, tag: "SubTotal"
|
30
|
+
attribute "iva", String, tag: "Iva"
|
31
|
+
attribute "total", String, tag: "Total"
|
32
|
+
attribute "observaciones", String, tag: "Observaciones"
|
33
|
+
attribute "ivapct", String, tag: "IVAPCT"
|
34
|
+
attribute "moneda", String, tag: "Moneda"
|
35
|
+
attribute "lugar_expedicion", String, tag: "LugarExpedicion"
|
36
|
+
attribute "tipo_cambio", String, tag: "TipoCambio"
|
37
|
+
attribute "tipo_documento", String, tag: "tipo_documento"
|
38
|
+
attribute "metodo_de_pago", String, tag: "metodoDePago"
|
39
|
+
attribute "tipo_documento", String, tag: "totalImpuestosTrasladados"
|
40
|
+
attribute "forma_de_pago", String, tag: "formaDePago"
|
41
|
+
attribute "folio_referencia", String, tag: "FolioReferencia"
|
42
|
+
attribute "regimen_fiscal_emisor", String, tag: "RegimenFiscalEmisor"
|
43
|
+
attribute "email_tracking", String, tag: "EmailTracking"
|
44
|
+
attribute "fecha", String, tag: "Fecha"
|
45
|
+
attribute "cadena_original", String, tag: "cadenaOriginal"
|
46
|
+
attribute "cadena_original_timbre", String, tag: "cadenaOriginalTimbre"
|
47
|
+
attribute "cadena_original_emisor", String, tag: "cadenaOriginalEmisor"
|
48
|
+
attribute "import_con_letra", String, tag: "importeConLetra"
|
49
|
+
end
|
50
|
+
|
51
|
+
class FacturaInterfacturaCuerpo
|
52
|
+
include HappyMapper
|
53
|
+
|
54
|
+
tag "if:Cuerpo"
|
55
|
+
attribute "renglon", String, tag: "Renglon"
|
56
|
+
attribute "cantidad", String, tag: "Cantidad"
|
57
|
+
attribute "concepto", String, tag: "Concepto"
|
58
|
+
attribute "p_unitario", String, tag: "PUnitario"
|
59
|
+
attribute "importe", String, tag: "Importe"
|
60
|
+
attribute "um", String, tag: "UM"
|
61
|
+
end
|
62
|
+
|
63
|
+
class FacturaInterfactura
|
64
|
+
include HappyMapper
|
65
|
+
|
66
|
+
tag "if:FacturaInterfactura"
|
67
|
+
attribute "tido_documento_id", String, tag: "TipoDocumentoId"
|
68
|
+
attribute "tipo_documento", String, tag: "TipoDocumento"
|
69
|
+
attribute "id", String, tag: "Id"
|
70
|
+
|
71
|
+
element "emisor", FacturaInterfacturaEmisor, tag: "if:Emisor"
|
72
|
+
element "receptor", FacturaInterfacturaReceptor, tag: "if:Receptor"
|
73
|
+
element "encabezado", FacturaInterfacturaEncabezado, tag: "if:Encabezado"
|
74
|
+
element "cuerpo", FacturaInterfacturaCuerpo, tag: "if:Cuerpo"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'interfactura/parser/traslados'
|
2
|
+
|
3
|
+
module Interfactura
|
4
|
+
module Parser
|
5
|
+
class Impuestos
|
6
|
+
include HappyMapper
|
7
|
+
|
8
|
+
tag "cfdi:Impuestos"
|
9
|
+
attribute "total_impuestos_trasladados", String, tag: "totalImpuestosTrasladados"
|
10
|
+
|
11
|
+
element "traslados", Interfactura::Parser::Traslados, tag: "cfdi:Traslados"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'interfactura/parser/domicilio'
|
2
|
+
|
3
|
+
module Interfactura
|
4
|
+
module Parser
|
5
|
+
class Receptor
|
6
|
+
include HappyMapper
|
7
|
+
|
8
|
+
tag "cfdi:Receptor"
|
9
|
+
attribute "rfc", String
|
10
|
+
attribute "nombre", String
|
11
|
+
|
12
|
+
element "domicilio", Interfactura::Parser::Domicilio, tag: "cfdi:Domicilio"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'interfactura/parser/comprobante'
|
2
|
+
|
3
|
+
module Interfactura
|
4
|
+
module Parser
|
5
|
+
class Resultado
|
6
|
+
include HappyMapper
|
7
|
+
|
8
|
+
tag 'Resultado'
|
9
|
+
attribute "estado", String, tag: "Estado"
|
10
|
+
attribute "detalle", String, tag: "Detalle"
|
11
|
+
|
12
|
+
attribute "description", String, tag: "Descripcion"
|
13
|
+
|
14
|
+
element "comprobante", Interfactura::Parser::Comprobante, tag: "cfdi:Comprobante"
|
15
|
+
element "pdf", String, tag: "PDF"
|
16
|
+
|
17
|
+
def success?
|
18
|
+
estado == "OK" && detalle == "OK"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Interfactura
|
2
|
+
module Parser
|
3
|
+
class TimbreFiscalDigital
|
4
|
+
include HappyMapper
|
5
|
+
|
6
|
+
tag "tfd:TimbreFiscalDigital"
|
7
|
+
attribute "version", String
|
8
|
+
attribute "uuid", String, tag: "UUID"
|
9
|
+
attribute "fecha_timbrado", String, tag: "FechaTimbrado"
|
10
|
+
attribute "sello_cfd", String, tag: "selloCFD"
|
11
|
+
attribute "sello_sat", String, tag: "selloSAT"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
Binary file
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: UT-8
|
2
|
+
|
3
|
+
require "savon"
|
4
|
+
|
5
|
+
module Interfactura
|
6
|
+
module Ruby
|
7
|
+
class Client
|
8
|
+
attr_reader :soap
|
9
|
+
|
10
|
+
def initialize(options = {})
|
11
|
+
@soap = Savon.client(options[:wsdl]) do
|
12
|
+
wsse_signature Akami::WSSE::Signature.new(Akami::WSSE::Certs.new(cert_string: options[:ssl_cert_string], private_key_string: options[:ssl_cert_key_string]))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def generate_document(invoice)
|
17
|
+
response = @soap.call(:generar_documento, message: { sourceXmlDoc: invoice.to_xml, IsConsulta: true })
|
18
|
+
result = response.body[:generar_documento_response][:generar_documento_result]
|
19
|
+
puts "#{result}"
|
20
|
+
Interfactura::Parser::Resultado.parse(result)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Interfactura
|
2
|
+
module Ruby
|
3
|
+
class Invoice
|
4
|
+
attr_accessor :total, :rfc, :name, :phone, :email,
|
5
|
+
:city, :municipality, :street, :number,
|
6
|
+
:zipcode, :state, :id, :colony
|
7
|
+
|
8
|
+
IVA = 0.16
|
9
|
+
|
10
|
+
def initialize(attributes = {})
|
11
|
+
@id = attributes[:id]
|
12
|
+
@total = attributes[:total]
|
13
|
+
@zipcode = attributes[:zipcode]
|
14
|
+
@state = attributes[:state]
|
15
|
+
@colony = attributes[:colony]
|
16
|
+
@rfc = attributes[:rfc]
|
17
|
+
@name = attributes[:name]
|
18
|
+
@phone = attributes[:phone]
|
19
|
+
@email = attributes[:email]
|
20
|
+
@city = attributes[:city]
|
21
|
+
@municipality = attributes[:municipality]
|
22
|
+
@street = attributes[:street]
|
23
|
+
@number = attributes[:number]
|
24
|
+
end
|
25
|
+
|
26
|
+
def subtotal
|
27
|
+
(total / 1.16).ceil(2)
|
28
|
+
end
|
29
|
+
|
30
|
+
def iva
|
31
|
+
(total - subtotal).ceil(2)
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_xml
|
35
|
+
path = "#{File.dirname(__FILE__)}/templates/message_template.xml.erb"
|
36
|
+
ERB.new(File.read(path), nil, '-').result(self.get_binding)
|
37
|
+
end
|
38
|
+
|
39
|
+
def get_binding
|
40
|
+
binding()
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Interfactura
|
2
|
+
module Ruby
|
3
|
+
class Response
|
4
|
+
include HappyMapper
|
5
|
+
|
6
|
+
tag ''
|
7
|
+
element :street, String, :tag => 'street'
|
8
|
+
element :postcode, String, :tag => 'postcode'
|
9
|
+
element :housenumber, Integer, :tag => 'housenumber'
|
10
|
+
element :city, String, :tag => 'city'
|
11
|
+
element :country, String, :tag => 'country'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<?xml version='1.0' encoding='UTF-8'?>
|
2
|
+
<FacturaInterfactura>
|
3
|
+
<Encabezado Moneda='MXN' TipoCambio='1' Total='<%= total %>' Observaciones='ninguna' SubTotal='<%= subtotal %>' IVAPCT='16' Iva='<%= iva %>' TipoDocumento='Factura' CondicionPago='' formaDePago='PAGO EN UNA SOLA EXHIBICION' FolioReferencia='<%= id %>' metodoDePago='tarjeta de debito/credito' RegimenFiscalEmisor='persona moral'>
|
4
|
+
<Cuerpo Renglon='1' Cantidad='1' Concepto='Traduccion' PUnitario='<%= total %>' Importe='<%= total %>' UM='UN'/>
|
5
|
+
</Encabezado>
|
6
|
+
<Emisor RI='0113086'/>
|
7
|
+
<Receptor RFC='<%= rfc %>' nombre='<%= name %>' Telefono='<%= phone %>' Email='<%= email %>'>
|
8
|
+
<Domicilio calle='<%= street %>' noExterior='<%= number %>' colonia='<%= colony %>' localidad='<%= city %>' municipio='<%= municipality %>' estado='<%= state %>' pais='MX' codigoPostal='<%= zipcode %>'/>
|
9
|
+
</Receptor>
|
10
|
+
</FacturaInterfactura>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<Resultado Estado="OK" Detalle="OK">
|
2
|
+
<cfdi:Comprobante xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd" version="3.2" serie="CFDI " folio="4" fecha="2017-01-10T13:14:59" sello="pUOu3rnLRz1DGrl0Lg0BbHHLF3S9FLV2aqZHmRbZ/ecjTWqH/8m2eLLHAFq5vopp28GzAQzTO5M2yWQx64ZqvZWHMMKoFJq/i06DqFC+nabQ3EMmnhn3OnCStRDoF076TAnvcu+VEm33w1VXQSqtTI5NZ3p98cWFT6+a3u/5dqI=" formaDePago="PAGO EN UNA SOLA EXHIBICION" noCertificado="20001000000100005867" certificado="MIIEdDCCA1ygAwIBAgIUMjAwMDEwMDAwMDAxMDAwMDU4NjcwDQYJKoZIhvcNAQEFBQAwggFvMRgwFgYDVQQDDA9BLkMuIGRlIHBydWViYXMxLzAtBgNVBAoMJlNlcnZpY2lvIGRlIEFkbWluaXN0cmFjacOzbiBUcmlidXRhcmlhMTgwNgYDVQQLDC9BZG1pbmlzdHJhY2nDs24gZGUgU2VndXJpZGFkIGRlIGxhIEluZm9ybWFjacOzbjEpMCcGCSqGSIb3DQEJARYaYXNpc25ldEBwcnVlYmFzLnNhdC5nb2IubXgxJjAkBgNVBAkMHUF2LiBIaWRhbGdvIDc3LCBDb2wuIEd1ZXJyZXJvMQ4wDAYDVQQRDAUwNjMwMDELMAkGA1UEBhMCTVgxGTAXBgNVBAgMEERpc3RyaXRvIEZlZGVyYWwxEjAQBgNVBAcMCUNveW9hY8OhbjEVMBMGA1UELRMMU0FUOTcwNzAxTk4zMTIwMAYJKoZIhvcNAQkCDCNSZXNwb25zYWJsZTogSMOpY3RvciBPcm5lbGFzIEFyY2lnYTAeFw0xMjA3MjcxNzAyMDBaFw0xNjA3MjcxNzAyMDBaMIHbMSkwJwYDVQQDEyBBQ0NFTSBTRVJWSUNJT1MgRU1QUkVTQVJJQUxFUyBTQzEpMCcGA1UEKRMgQUNDRU0gU0VSVklDSU9TIEVNUFJFU0FSSUFMRVMgU0MxKTAnBgNVBAoTIEFDQ0VNIFNFUlZJQ0lPUyBFTVBSRVNBUklBTEVTIFNDMSUwIwYDVQQtExxBQUEwMTAxMDFBQUEgLyBIRUdUNzYxMDAzNFMyMR4wHAYDVQQFExUgLyBIRUdUNzYxMDAzTURGUk5OMDkxETAPBgNVBAsTCFVuaWRhZCAxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2TTQSPONBOVxpXv9wLYo8jezBrb34i/tLx8jGdtyy27BcesOav2c1NS/Gdv10u9SkWtwdy34uRAVe7H0a3VMRLHAkvp2qMCHaZc4T8k47Jtb9wrOEh/XFS8LgT4y5OQYo6civfXXdlvxWU/gdM/e6I2lg6FGorP8H4GPAJ/qCNwIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQUFAAOCAQEATxMecTpMbdhSHo6KVUg4QVF4Op2IBhiMaOrtrXBdJgzGotUFcJgdBCMjtTZXSlq1S4DG1jr8p4NzQlzxsdTxaB8nSKJ4KEMgIT7E62xRUj15jI49qFz7f2uMttZLNThipunsN/NF1XtvESMTDwQFvas/Ugig6qwEfSZc0MDxMpKLEkEePmQwtZD+zXFSMVa6hmOu4M+FzGiRXbj4YJXn9Myjd8xbL/c+9UIcrYoZskxDvMxc6/6M3rNNDY3OFhBK+V/sPMzWWGt8S1yjmtPfXgFs1t65AZ2hcTwTAuHrKwDatJ1ZPfa482ZBROAAX1waz7WwXp0gso7sDCm2/yUVww==" condicionesDePago="Vencimiento 90 días" subTotal="900.00" TipoCambio="1" Moneda="MXN" total="1028" tipoDeComprobante="ingreso" metodoDePago="efectivo" LugarExpedicion="SAN PEDRO GARZA GARCÍA, NUEVO LEÓN">
|
3
|
+
<cfdi:Emisor rfc="PPE0902134I7" nombre="PARTNER PROYECTOS ESTRATÉGICOS SA DE CV.">
|
4
|
+
<cfdi:DomicilioFiscal calle="RÍO DE LA PLATA" noExterior="309 Ote" noInterior="Piso 3" colonia="COLONIA DEL VALLE" localidad="SAN PEDRO GARZA GARCÍA" referencia="011308699" municipio="SAN PEDRO GARZA GARCÍA" estado="NUEVO LEÓN" pais="México" codigoPostal="66220"/>
|
5
|
+
<cfdi:RegimenFiscal Regimen="persona moral"/>
|
6
|
+
</cfdi:Emisor>
|
7
|
+
<cfdi:Receptor rfc="SAD560528573" nombre="SERVICIOS DE AGUA Y DRENAJE DE MONTERREY, I.P.D.">
|
8
|
+
<cfdi:Domicilio calle="MATAMOROS PONIENTE" noExterior="1719" colonia="OBISPADO" localidad="MONTERREY" municipio="MONTERREY" estado="NL" pais="MX" codigoPostal="64010"/>
|
9
|
+
</cfdi:Receptor>
|
10
|
+
<cfdi:Conceptos>
|
11
|
+
<cfdi:Concepto cantidad="3" unidad="UN" descripcion="COMPOSICION GRANULOMETRICA" valorUnitario="300.00" importe="900.00"/>
|
12
|
+
</cfdi:Conceptos>
|
13
|
+
<cfdi:Impuestos totalImpuestosTrasladados="128.00">
|
14
|
+
<cfdi:Traslados>
|
15
|
+
<cfdi:Traslado impuesto="IVA" tasa="16" importe="128.00"/>
|
16
|
+
</cfdi:Traslados>
|
17
|
+
</cfdi:Impuestos>
|
18
|
+
<cfdi:Complemento>
|
19
|
+
<tfd:TimbreFiscalDigital version="1.0" UUID="BDE349C3-632A-4F0A-9DE7-78FA25F5408B" FechaTimbrado="2017-01-10T13:17:44" selloCFD="pUOu3rnLRz1DGrl0Lg0BbHHLF3S9FLV2aqZHmRbZ/ecjTWqH/8m2eLLHAFq5vopp28GzAQzTO5M2yWQx64ZqvZWHMMKoFJq/i06DqFC+nabQ3EMmnhn3OnCStRDoF076TAnvcu+VEm33w1VXQSqtTI5NZ3p98cWFT6+a3u/5dqI=" noCertificadoSAT="20001000000300004850" selloSAT="RGSQoDrPkEr+JuvZCIjPLU8F9mKI3BTTeqMZWUtRw9lF8XJHQlE67jEsWlu+dYcBE0ZkxqGYXW2mP3Us/w/0Gl4nnxeSu9syO2zHC9RzYdNL0wyAsW3mG7035nMZqQ2i5jjNM0r3kSTzgNGaMATsGVBhuBkFi5Pl4NplCZHDTm3YTHtuEt6wpOKrIQGEgxjDBQI18tFr7+mUU09HQLx2oBqexmf15X/HLnyEgfsHLPBYwO1mFsez3LAe0XhP2CKq65lsQeXFgpfSrCqpfpSWuBl67NVJZUd4B0Mf98wvFSoK3LMSlPYZxFCoxNCHamUv8Vmj9T0exX6bmFRXSkfFCg==" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/TimbreFiscalDigital/TimbreFiscalDigital.xsd" xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital"/>
|
20
|
+
</cfdi:Complemento>
|
21
|
+
<cfdi:Addenda xmlns:if="https://www.interfactura.com/Schemas/Documentos" xsi:schemaLocation="https://www.interfactura.com/Schemas/Documentos https://www.interfactura.com/Schemas/Documentos/DocumentoInterfactura.xsd ">
|
22
|
+
<if:FacturaInterfactura TipoDocumentoId="0" TipoDocumento="Factura" Id="302944372">
|
23
|
+
<if:Emisor RI="0113086"/>
|
24
|
+
<if:Receptor RI="9900122831" Activo="False"/>
|
25
|
+
<if:Encabezado IdInterno="302944372" TemplateId="78000921" Folio="4" FolioSerie="4-CFDI " SerieFolio="CFDI -4" Serie="CFDI " UUID="BDE349C3-632A-4F0A-9DE7-78FA25F5408B" MonedaDoc="MXN" MonedaDesc="Pesos" Status="1" CFD="True" Estatus="Por Pagar" ProcesoId="0" CondicionPago="Vencimiento 90 días" SubTotal="900.00" Iva="128.00" Total="1028" Observaciones="ninguna" IVAPCT="16" Moneda="MXN" LugarExpedicion="SAN PEDRO GARZA GARCÍA, NUEVO LEÓN" TipoCambio="1" TipoDocumento="Factura" metodoDePago="efectivo" totalImpuestosTrasladados="128.00" formaDePago="PAGO EN UNA SOLA EXHIBICION" FolioReferencia="IF-Prueba04" RegimenFiscalEmisor="persona moral" EmailTracking="davhira@hotmail.com" Fecha="2017-01-10T13:14:59" cadenaOriginal="||1.0|BDE349C3-632A-4F0A-9DE7-78FA25F5408B|2017-01-10T13:17:44|pUOu3rnLRz1DGrl0Lg0BbHHLF3S9FLV2aqZHmRbZ/ecjTWqH/8m2eLLHAFq5vopp28GzAQzTO5M2yWQx64ZqvZWHMMKoFJq/i06DqFC+nabQ3EMmnhn3OnCStRDoF076TAnvcu+VEm33w1VXQSqtTI5NZ3p98cWFT6+a3u/5dqI=|20001000000300004850||" cadenaOriginalTimbre="||1.0|BDE349C3-632A-4F0A-9DE7-78FA25F5408B|2017-01-10T13:17:44|pUOu3rnLRz1DGrl0Lg0BbHHLF3S9FLV2aqZHmRbZ/ecjTWqH/8m2eLLHAFq5vopp28GzAQzTO5M2yWQx64ZqvZWHMMKoFJq/i06DqFC+nabQ3EMmnhn3OnCStRDoF076TAnvcu+VEm33w1VXQSqtTI5NZ3p98cWFT6+a3u/5dqI=|20001000000300004850||" cadenaOriginalEmisor="||3.2|2017-01-10T13:14:59|ingreso|PAGO EN UNA SOLA EXHIBICION|Vencimiento 90 días|900.00|1|MXN|1028|efectivo|SAN PEDRO GARZA GARCÍA, NUEVO LEÓN|PPE0902134I7|PARTNER PROYECTOS ESTRATÉGICOS SA DE CV.|RÍO DE LA PLATA|309 Ote|Piso 3|COLONIA DEL VALLE|SAN PEDRO GARZA GARCÍA|011308699|SAN PEDRO GARZA GARCÍA|NUEVO LEÓN|México|66220|persona moral|SAD560528573|SERVICIOS DE AGUA Y DRENAJE DE MONTERREY, I.P.D.|MATAMOROS PONIENTE|1719|OBISPADO|MONTERREY|MONTERREY|NL|MX|64010|3|UN|COMPOSICION GRANULOMETRICA|300.00|900.00|IVA|16|128.00|128.00||" importeConLetra="**********************UN MIL VEINTIOCHO PESOS 00/100 M.N.**********************">
|
26
|
+
<if:Cuerpo Renglon="1" Cantidad="3.000" Concepto="COMPOSICION GRANULOMETRICA" PUnitario="300.00" Importe="900.00" UM="UN"/>
|
27
|
+
</if:Encabezado>
|
28
|
+
</if:FacturaInterfactura>
|
29
|
+
</cfdi:Addenda>
|
30
|
+
</cfdi:Comprobante>
|
31
|
+
<PDF>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</PDF>
|
32
|
+
</Resultado>
|
@@ -0,0 +1 @@
|
|
1
|
+
<?xml version='1.0' encoding='UTF-8'?><FacturaInterfactura><Encabezado Moneda='MXN' TipoCambio='1' Total='1028' Observaciones='ninguna' SubTotal='900.00' IVAPCT='16' Iva='128.00' TipoDocumento='Factura' CondicionPago='Vencimiento 90 días' formaDePago='PAGO EN UNA SOLA EXHIBICION' FolioReferencia='IF-Prueba01' metodoDePago='efectivo' RegimenFiscalEmisor='persona moral'><Cuerpo Renglon='1' Cantidad='3.000' Concepto='COMPOSICION GRANULOMETRICA' PUnitario='300.00' Importe='900.00' UM='UN'/></Encabezado><Emisor RI='0113086'/><Receptor RFC='SAD560528573' nombre='SERVICIOS DE AGUA Y DRENAJE DE MONTERREY, I.P.D.' Telefono='018120346930' Email='prueba@gmail.com' NombreContacto='Enrique Beltran'><Domicilio calle='MATAMOROS PONIENTE' noExterior='1719' colonia='OBISPADO' localidad='MONTERREY' municipio='MONTERREY' estado='NL' pais='MX' codigoPostal='64010'/></Receptor></FacturaInterfactura>
|
metadata
ADDED
@@ -0,0 +1,168 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: interfactura-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Icalia Labs
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-01-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nokogiri-happymapper
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.5'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: savon
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.11'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.11'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.10'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.10'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.13'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.13'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '10.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '10.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.0'
|
97
|
+
description: " A Ruby SDK to interact with the Interfactura Web Services "
|
98
|
+
email:
|
99
|
+
- weare@icalialabs.com
|
100
|
+
executables:
|
101
|
+
- console
|
102
|
+
- setup
|
103
|
+
extensions: []
|
104
|
+
extra_rdoc_files: []
|
105
|
+
files:
|
106
|
+
- ".DS_Store"
|
107
|
+
- ".gitignore"
|
108
|
+
- CODE_OF_CONDUCT.md
|
109
|
+
- Gemfile
|
110
|
+
- Gemfile.lock
|
111
|
+
- LICENSE.txt
|
112
|
+
- README.md
|
113
|
+
- Rakefile
|
114
|
+
- bin/console
|
115
|
+
- bin/setup
|
116
|
+
- interfactura-ruby.gemspec
|
117
|
+
- lib/.DS_Store
|
118
|
+
- lib/interfactura/.DS_Store
|
119
|
+
- lib/interfactura/parser/addenda.rb
|
120
|
+
- lib/interfactura/parser/complemento.rb
|
121
|
+
- lib/interfactura/parser/comprobante.rb
|
122
|
+
- lib/interfactura/parser/concepto.rb
|
123
|
+
- lib/interfactura/parser/conceptos.rb
|
124
|
+
- lib/interfactura/parser/domicilio.rb
|
125
|
+
- lib/interfactura/parser/domicilio_fiscal.rb
|
126
|
+
- lib/interfactura/parser/emisor.rb
|
127
|
+
- lib/interfactura/parser/factura_interfactura.rb
|
128
|
+
- lib/interfactura/parser/impuestos.rb
|
129
|
+
- lib/interfactura/parser/receptor.rb
|
130
|
+
- lib/interfactura/parser/regimen_fiscal.rb
|
131
|
+
- lib/interfactura/parser/resultado.rb
|
132
|
+
- lib/interfactura/parser/timbre_fiscal_digital.rb
|
133
|
+
- lib/interfactura/parser/traslado.rb
|
134
|
+
- lib/interfactura/parser/traslados.rb
|
135
|
+
- lib/interfactura/ruby.rb
|
136
|
+
- lib/interfactura/ruby/.DS_Store
|
137
|
+
- lib/interfactura/ruby/client.rb
|
138
|
+
- lib/interfactura/ruby/invoice.rb
|
139
|
+
- lib/interfactura/ruby/response.rb
|
140
|
+
- lib/interfactura/ruby/templates/message_template.xml.erb
|
141
|
+
- lib/interfactura/ruby/templates/output_sample.xml
|
142
|
+
- lib/interfactura/ruby/templates/sample.xml
|
143
|
+
- lib/interfactura/ruby/version.rb
|
144
|
+
homepage: https://github.com/IcaliaLabs/interfactura-ruby
|
145
|
+
licenses:
|
146
|
+
- MIT
|
147
|
+
metadata: {}
|
148
|
+
post_install_message:
|
149
|
+
rdoc_options: []
|
150
|
+
require_paths:
|
151
|
+
- lib
|
152
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - ">="
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: '0'
|
157
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
|
+
requirements:
|
159
|
+
- - ">="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: '0'
|
162
|
+
requirements: []
|
163
|
+
rubyforge_project:
|
164
|
+
rubygems_version: 2.6.8
|
165
|
+
signing_key:
|
166
|
+
specification_version: 4
|
167
|
+
summary: A Ruby SDK to connect to Interfactura Web Services
|
168
|
+
test_files: []
|