brcobranca 6.9.1 → 7.0.0

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 (110) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/CHANGELOG.md +4 -0
  4. data/Gemfile.lock +7 -7
  5. data/README.md +14 -12
  6. data/Rakefile +1 -0
  7. data/brcobranca.gemspec +1 -0
  8. data/lib/brcobranca/arquivos/logos/banrisul.eps +121 -0
  9. data/lib/brcobranca/arquivos/logos/banrisul_carne.eps +121 -0
  10. data/lib/brcobranca/boleto/banco_brasil.rb +8 -8
  11. data/lib/brcobranca/boleto/banco_nordeste.rb +1 -0
  12. data/lib/brcobranca/boleto/banestes.rb +10 -10
  13. data/lib/brcobranca/boleto/banrisul.rb +84 -0
  14. data/lib/brcobranca/boleto/base.rb +6 -5
  15. data/lib/brcobranca/boleto/bradesco.rb +2 -1
  16. data/lib/brcobranca/boleto/caixa.rb +6 -5
  17. data/lib/brcobranca/boleto/hsbc.rb +7 -6
  18. data/lib/brcobranca/boleto/itau.rb +1 -0
  19. data/lib/brcobranca/boleto/santander.rb +1 -0
  20. data/lib/brcobranca/boleto/sicoob.rb +12 -11
  21. data/lib/brcobranca/boleto/sicredi.rb +1 -0
  22. data/lib/brcobranca/boleto/template/base.rb +5 -4
  23. data/lib/brcobranca/boleto/template/rghost.rb +7 -6
  24. data/lib/brcobranca/boleto/template/rghost_carne.rb +9 -9
  25. data/lib/brcobranca/boleto/unicred.rb +1 -1
  26. data/lib/brcobranca/calculo.rb +14 -15
  27. data/lib/brcobranca/calculo_data.rb +2 -0
  28. data/lib/brcobranca/currency.rb +4 -3
  29. data/lib/brcobranca/formatacao.rb +2 -1
  30. data/lib/brcobranca/formatacao_string.rb +1 -0
  31. data/lib/brcobranca/limpeza.rb +1 -0
  32. data/lib/brcobranca/remessa/base.rb +2 -1
  33. data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +7 -6
  34. data/lib/brcobranca/remessa/cnab240/base.rb +16 -15
  35. data/lib/brcobranca/remessa/cnab240/caixa.rb +1 -0
  36. data/lib/brcobranca/remessa/cnab240/sicoob.rb +9 -9
  37. data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +2 -3
  38. data/lib/brcobranca/remessa/cnab400/base.rb +8 -7
  39. data/lib/brcobranca/remessa/cnab400/bradesco.rb +2 -1
  40. data/lib/brcobranca/remessa/cnab400/citibank.rb +3 -2
  41. data/lib/brcobranca/remessa/cnab400/itau.rb +2 -1
  42. data/lib/brcobranca/remessa/cnab400/santander.rb +7 -5
  43. data/lib/brcobranca/remessa/cnab400/sicoob.rb +6 -5
  44. data/lib/brcobranca/remessa/pagamento.rb +4 -4
  45. data/lib/brcobranca/retorno/base.rb +1 -0
  46. data/lib/brcobranca/retorno/cnab240/base.rb +6 -7
  47. data/lib/brcobranca/retorno/cnab240/caixa.rb +1 -0
  48. data/lib/brcobranca/retorno/cnab240/santander.rb +3 -3
  49. data/lib/brcobranca/retorno/cnab240/sicoob.rb +7 -6
  50. data/lib/brcobranca/retorno/cnab400/base.rb +5 -6
  51. data/lib/brcobranca/retorno/cnab400/bradesco.rb +1 -0
  52. data/lib/brcobranca/retorno/cnab400/itau.rb +1 -0
  53. data/lib/brcobranca/retorno/retorno_cbr643.rb +1 -0
  54. data/lib/brcobranca/retorno/retorno_cnab240.rb +3 -2
  55. data/lib/brcobranca/retorno/retorno_cnab400.rb +1 -0
  56. data/lib/brcobranca/util/empresa.rb +2 -3
  57. data/lib/brcobranca/version.rb +2 -1
  58. data/lib/brcobranca.rb +3 -1
  59. data/spec/brcobranca/base_spec.rb +51 -50
  60. data/spec/brcobranca/boleto/banco_brasil_spec.rb +46 -45
  61. data/spec/brcobranca/boleto/banco_nordeste_spec.rb +13 -12
  62. data/spec/brcobranca/boleto/banestes_spec.rb +108 -105
  63. data/spec/brcobranca/boleto/banrisul_spec.rb +165 -0
  64. data/spec/brcobranca/boleto/bradesco_spec.rb +56 -52
  65. data/spec/brcobranca/boleto/caixa_spec.rb +9 -7
  66. data/spec/brcobranca/boleto/hsbc_spec.rb +17 -15
  67. data/spec/brcobranca/boleto/itau_spec.rb +22 -20
  68. data/spec/brcobranca/boleto/santander_spec.rb +16 -14
  69. data/spec/brcobranca/boleto/sicoob_spec.rb +94 -94
  70. data/spec/brcobranca/boleto/sicredi_spec.rb +32 -28
  71. data/spec/brcobranca/boleto/unicred_spec.rb +16 -14
  72. data/spec/brcobranca/boletos_em_lote_spec.rb +4 -3
  73. data/spec/brcobranca/calculo_data_spec.rb +2 -1
  74. data/spec/brcobranca/calculo_spec.rb +97 -97
  75. data/spec/brcobranca/currency_spec.rb +6 -5
  76. data/spec/brcobranca/formatacao_spec.rb +1 -0
  77. data/spec/brcobranca/formatacao_string_spec.rb +1 -2
  78. data/spec/brcobranca/limpeza_spec.rb +1 -0
  79. data/spec/brcobranca/remessa/base_spec.rb +11 -9
  80. data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +11 -9
  81. data/spec/brcobranca/remessa/cnab240/base_spec.rb +11 -9
  82. data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +12 -10
  83. data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +13 -11
  84. data/spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb +2 -1
  85. data/spec/brcobranca/remessa/cnab400/base_spec.rb +20 -18
  86. data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +11 -9
  87. data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +11 -9
  88. data/spec/brcobranca/remessa/cnab400/itau_spec.rb +11 -9
  89. data/spec/brcobranca/remessa/cnab400/santander_spec.rb +12 -10
  90. data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +11 -9
  91. data/spec/brcobranca/remessa/pagamento_spec.rb +12 -10
  92. data/spec/brcobranca/retorno/cnab240/base_spec.rb +10 -9
  93. data/spec/brcobranca/retorno/cnab240/santander_spec.rb +23 -22
  94. data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +21 -20
  95. data/spec/brcobranca/retorno/cnab400/base_spec.rb +13 -12
  96. data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +3 -1
  97. data/spec/brcobranca/retorno/cnab400/itau_spec.rb +4 -1
  98. data/spec/brcobranca/retorno/retorno_cbr643_spec.rb +1 -0
  99. data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +1 -0
  100. data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +1 -0
  101. data/spec/brcobranca/rghost_spec.rb +1 -0
  102. data/spec/brcobranca/util/empresa_spec.rb +13 -12
  103. data/spec/brcobranca_spec.rb +6 -5
  104. data/spec/spec_helper.rb +3 -3
  105. data/spec/support/remessa_helpers.rb +3 -1
  106. data/spec/support/shared_examples/busca_logotipo.rb +2 -0
  107. data/spec/support/shared_examples/cnab240.rb +22 -20
  108. data/spec/support/shared_examples/cnab400.rb +12 -12
  109. data/spec/support/shared_examples/formatos_validos.rb +6 -4
  110. metadata +7 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aa009d1ed732b7e2e49bdaa34c146b3bcab5829d
4
- data.tar.gz: fa2d311d3db3f47ff6038d690deef867a7433c7b
3
+ metadata.gz: e64c1b8d888e877461dc9ee4e50d1b5935ae53ae
4
+ data.tar.gz: 66c20f5799e0bce3a611f3e6866d15c5948924be
5
5
  SHA512:
6
- metadata.gz: 5714a2e5a99d322e66240911351294fab062f76e6dc0b8cb0adaa83d3478a308053a1b2260424b517b07cab4cace32b06b624cf01edd3e5ccb2409ade4b36604
7
- data.tar.gz: 60011bb6fd6422923d5d58ee8cf4b95050807fdcc9b0df187651197afa9c92f076d477a94e338366236486c918159813d32047897655c0d67f5b1ee0fe3c2431
6
+ metadata.gz: 91097810fce52fa27dcd38d13aa4ea17daaf86f86c5c54af36fe8ec8c4628e8e9b39000291c96e6e408134d74383c3714eca8b42f5db64cf3844c5b9d342bfaa
7
+ data.tar.gz: effd571492c5b72524996ac2d3afdb1b308ab7e2d46b37672fbc5cc0d25a121450199be9d02a2fadcc589459f1c11ca0f89bfe9f3aa78d8d82c5e2262c9373e0
data/.rubocop.yml CHANGED
@@ -11,3 +11,6 @@ Style/Documentation:
11
11
 
12
12
  Metrics/LineLength:
13
13
  Enabled: false
14
+
15
+ Style/FrozenStringLiteralComment:
16
+ EnforcedStyle: when_needed
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 7.0.0
4
+ - Adicionado Banrisul
5
+ - Rubocop styles
6
+
3
7
  ## 6.1.0
4
8
  - Adicionado Banestes
5
9
  - Limpeza e formatação de strings de acordo com o tamanho permitido por cada banco
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- brcobranca (6.9.1)
4
+ brcobranca (7.0.0)
5
5
  activemodel (>= 3)
6
6
  activesupport (>= 3)
7
7
  parseline (~> 1.0.3)
@@ -24,12 +24,12 @@ GEM
24
24
  simplecov
25
25
  coderay (1.1.1)
26
26
  concurrent-ruby (1.0.2)
27
- coveralls (0.8.16)
27
+ coveralls (0.8.17)
28
28
  json (>= 1.8, < 3)
29
29
  simplecov (~> 0.12.0)
30
- term-ansicolor (~> 1.3.0)
30
+ term-ansicolor (~> 1.3)
31
31
  thor (~> 0.19.1)
32
- tins (>= 1.6.0, < 2)
32
+ tins (~> 1.6)
33
33
  diff-lcs (1.2.5)
34
34
  docile (1.1.5)
35
35
  i18n (0.7.0)
@@ -45,7 +45,7 @@ GEM
45
45
  method_source (~> 0.8.1)
46
46
  slop (~> 3.4)
47
47
  rainbow (2.1.0)
48
- rake (11.3.0)
48
+ rake (12.0.0)
49
49
  rghost (0.9.6)
50
50
  rghost_barcode (0.9)
51
51
  rspec (3.5.0)
@@ -76,7 +76,7 @@ GEM
76
76
  simplecov-html (~> 0.10.0)
77
77
  simplecov-html (0.10.0)
78
78
  slop (3.6.0)
79
- term-ansicolor (1.3.2)
79
+ term-ansicolor (1.4.0)
80
80
  tins (~> 1.0)
81
81
  thor (0.19.4)
82
82
  thread_safe (0.3.5)
@@ -84,7 +84,7 @@ GEM
84
84
  tins (1.13.0)
85
85
  tzinfo (1.2.2)
86
86
  thread_safe (~> 0.1)
87
- unicode-display_width (1.1.1)
87
+ unicode-display_width (1.1.2)
88
88
  unidecoder (1.1.2)
89
89
 
90
90
  PLATFORMS
data/README.md CHANGED
@@ -21,18 +21,20 @@ Gem para emissão de bloquetos de cobrança para bancos brasileiros.
21
21
 
22
22
  ### Bancos Disponíveis
23
23
 
24
- | Bancos | Carteiras | Documentações |
25
- |-----------------------|-------------------|----------------|
26
- | 001 - Banco do Brasil | Todas as carteiras presentes na documentação | [pdf](http://www.bb.com.br/docs/pub/emp/empl/dwn/Doc5175Bloqueto.pdf) |
27
- | 021 - Banestes | Todas as carteiras presentes na documentação | |
28
- | 033 - Santander | Todas as carteiras presentes na documentação - [Ronaldo Araujo](https://github.com/ronaldoaraujo) | [pdf](http://177.69.143.161:81/Treinamento/SisMoura/Documentação%20Boleto%20Remessa/Documentacao_SANTANDER/Layout%20de%20Cobrança%20-%20Código%20de%20Barras%20Santander%20Setembro%202012%20v%202%203.pdf) |
29
- | 104 - Caixa | Todas as carteiras presentes na documentação - [Túlio Ornelas](https://github.com/tulios) | [pdf](http://downloads.caixa.gov.br/_arquivos/cobranca_caixa_sigcb/manuais/CODIGO_BARRAS_SIGCB.PDF) |
30
- | 237 - Bradesco | Todas as carteiras presentes na documentação | [pdf](http://www.bradesco.com.br/portal/PDF/pessoajuridica/solucoes-integradas/outros/layout-de-arquivo/cobranca/4008-524-0121-08-layout-cobranca-versao-portugues.pdf) |
31
- | 341 - Itaú | Todas as carteiras presentes na documentação | [CNAB240](http://download.itau.com.br/bankline/cobranca_cnab240.pdf), [CNAB400](http://download.itau.com.br/bankline/layout_cobranca_400bytes_cnab_itau_mensagem.pdf) |
32
- | 399 - HSBC | CNR, CSB - [Rafael DL](https://github.com/rafaeldl) | |
33
- | 748 - Sicredi | C (03) | |
34
- | 756 - Sicoob | Todas as carteiras presentes na documentação | |
35
- | 756 - Unicred | 03 | |
24
+ | Bancos | Carteiras | Documentações |
25
+ |------------------------|-------------------|----------------|
26
+ | 001 - Banco do Brasil | Todas as carteiras presentes na documentação | [pdf](http://www.bb.com.br/docs/pub/emp/empl/dwn/Doc5175Bloqueto.pdf) |
27
+ | 004 - Banco do Nordeste| Todas as carteiras presentes na documentação - [Marcelo J. Both](https://github.com/marceloboth)| |
28
+ | 021 - Banestes | Todas as carteiras presentes na documentação | |
29
+ | 033 - Santander | Todas as carteiras presentes na documentação - [Ronaldo Araujo](https://github.com/ronaldoaraujo) | [pdf](http://177.69.143.161:81/Treinamento/SisMoura/Documentação%20Boleto%20Remessa/Documentacao_SANTANDER/Layout%20de%20Cobrança%20-%20Código%20de%20Barras%20Santander%20Setembro%202012%20v%202%203.pdf) |
30
+ | 041 - Banrisul | Todas as carteiras presentes na documentação | |
31
+ | 104 - Caixa | Todas as carteiras presentes na documentação - [Túlio Ornelas](https://github.com/tulios) | [pdf](http://downloads.caixa.gov.br/_arquivos/cobranca_caixa_sigcb/manuais/CODIGO_BARRAS_SIGCB.PDF) |
32
+ | 237 - Bradesco | Todas as carteiras presentes na documentação | [pdf](http://www.bradesco.com.br/portal/PDF/pessoajuridica/solucoes-integradas/outros/layout-de-arquivo/cobranca/4008-524-0121-08-layout-cobranca-versao-portugues.pdf) |
33
+ | 341 - Itaú | Todas as carteiras presentes na documentação | [CNAB240](http://download.itau.com.br/bankline/cobranca_cnab240.pdf), [CNAB400](http://download.itau.com.br/bankline/layout_cobranca_400bytes_cnab_itau_mensagem.pdf) |
34
+ | 399 - HSBC | CNR, CSB - [Rafael DL](https://github.com/rafaeldl) | |
35
+ | 748 - Sicredi | C (03) | |
36
+ | 756 - Sicoob | Todas as carteiras presentes na documentação | |
37
+ | 756 - Unicred | 03 - [Marcelo J. Both](https://github.com/marceloboth) | |
36
38
 
37
39
  ### Retornos Disponíveis
38
40
 
data/Rakefile CHANGED
@@ -1,4 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ #
2
3
  require 'bundler/gem_tasks'
3
4
  require 'rspec/core/rake_task'
4
5
 
data/brcobranca.gemspec CHANGED
@@ -1,4 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ #
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'brcobranca/version'
@@ -0,0 +1,121 @@
1
+ %!PS-Adobe-3.0 EPSF-3.0
2
+ %%Pages: 1
3
+ %%BoundingBox: 0 0 148 35
4
+ %%DocumentData: Clean7Bit
5
+ %%LanguageLevel: 2
6
+ %%EndComments
7
+ %%Page: 1 1
8
+ save 9 dict begin
9
+ {/T currentfile/ASCII85Decode filter def/DeviceRGB setcolorspace
10
+ /F T<</BitsPerComponent 8/Columns 148/Colors 3/Predictor 10>>/LZWDecode filter def
11
+ <</ImageType 1/Width 148/Height 35/BitsPerComponent
12
+ 8/ImageMatrix[1 0 0 -1 0 35]/Decode
13
+ [0 1 0 1 0 1]/DataSource F>> image
14
+ F closefile T closefile}
15
+ %%BeginData:;
16
+ exec
17
+ J,isG0E`.##D>EP:q1$o*=mro@So+\<\5,H7Uo<*jE<[.O?u31)'kMB-^757;Rp>H>nrLFk#4:9enm
18
+ @9:1P"UeFn;TTMT<"fDHBj'`q4r<4ZX!SO*=mW\fPA(6)@MeDT7'eIi*oK%FI3)\mD4:UEXXoQq%1\
19
+ S77.!#I-@Se2%47P#*#mEuYH^d0RCRf/[Qrdih,f*l1G$X0mpZ$=o]49E9/[aY[SQu")WHG1JPJ<2&
20
+ ;?693`^eD-_23IsB>#(AfOn'%5^M[%4Zg%Da0FgG.?uRVJ<Q*K0%d/aqbjY[amhQaY8-0)"!C:+d0L
21
+ -N`#6M^A//SI#rpjGPT"MD3iq$MhE?m9;O=T2JqVkX##;,4<&4Z^#.=rZCe9qQ&BH0!iX7?\N,:Y/A
22
+ Z33G6(aKlPL]@GUW+Z=.SnHCM!1a4rN";SS)WKh.-Af*NM#k_9!!qLj!.5m04<0!(knkHBL7lU'+p@
23
+ t.KGoL%csdQ;5TgEP+7CHH\1unBjEmK98KM0&V)cd0J0Js0Dj4bYP2_$Gbbg+WTE#JcJ-#-P)?QQlQ
24
+ id=RlZ!N1Y_"S$T?KPm$A!n-NX(H\l09,e^_tpVc\n7S#6CJgmUmU#0Mluu!:V=aYlGc>O/l3*Os:"
25
+ $J3F+--ebd.3_kqd=eAF9e:!t/=jVL5B$'%"P:"A`/VF7?dNAUABGi[%C)^PqRtj:5>ob)MJdER=Oa
26
+ M9iJuR$9"lU-jB!KK.h^AI0ao$K-MCigQ7qb$_NA/F%Q59ThH)u=X-XliX3[\sP!.sL?$j7/3$/A8`
27
+ !+_N#Wm$nhF<:bPhcCdT_@CZ0+9D.V2h1lD!J8+;$jfLu8/;7._$ClT'IO_S#FP]Cc6:>4NQAI,0iQ
28
+ /B7jpHq.,nC`re3L+^#k:/lp)6dJA^;k#o4gYfEOAaHP1q$.O\$p!$sYB!",T[fI2K)h8YO-Wsg8PO
29
+ 5cNp#Wn:Prknd@iQQQ\7R>B$!?`ne!1]sdp(IYgBb4;a_Z5o;"Q8JqAn]<2l2Uur+=o%!i42`e*:j0
30
+ /-A)>,8e!7R/pEj1Q\Y[=UL4bVYD.T.*^KtmR/CY?T\p^h*0JC@E%%A-+p3]l1$iq6Vm^3t7>WpC_#
31
+ OR>W#Gf2GT)7P6G]10#Xgt8Oaq(t7gYidRJLlma+#9@<ddt[\Z6+5!B.6ab4#7WMe56>?]e_>DHqcO
32
+ p\"SbJ.;S[,YEglNYOk,h.Rr7)M0(Q!Z6R;+_@b2PnNXlgq2?jWNlFc_@6F"lOkS!<3:m?Fp.jG"s1
33
+ [XHOi@U5"D7ILBHaf%mW*<a/AtZ"6</akD0*PJOUlE\>_lipcaJl##HQR`"kUi%"TgJ#CpK40lS\ji
34
+ b832,OGBJ7^e,r0jHjhV?0)?8K))i>$VE>29*NB\d1[sN\SC"78fm$UJ+C8i(WTn0STs%XG6k4L&aO
35
+ aeleQ*!Ko3'njtUHPTt8mO)bAY3ls<#8@u$J&`e]b2XZC:)"J^Ma8cXBP`n?\pFceCJq,-9!!^O;"C
36
+ U"'Pn40$LthKbOH#'Wfo,q3)^GIB,o`G4I/Uig%06j%oLHna0o'`=*eVCW&!?WNa5aH*?p4`47t2eI
37
+ Ja"=-J:A(AlokfFL,VKlmJpW/C64P@*M^PqNq)Eoa5Y5B!-AX#+:nP_@P!/\G^^/hmQSf<I#<G+2h6
38
+ De!Jebp+(I-CN_uZ37o9F3c>XPM"rofS"V)VJL3SdTQ>2S);BT_6&WXuC3$2u5*b42J!0@`m5g%1O!
39
+ ,)Z>,JOQ4@A+c"U2\4!,X7=f#67;p,t0!@4pTSIRF9AP!!!l@%ZOF3/4rd)\*"$TC6Ea*#gj0Ung=W
40
+ 6<Zg7"JrUTrn:8:W!$cT+O'os?JA>:nTWkJr-:'>^%(/gO]Rq[XGY#UekETMdB-m6OGeaU<*cXR[J=
41
+ odG5f9RNY$>n8Z&1A.!508FN)0tmbWAdWhGPIi!s_)3#"(p[#&$sC*ci"q7u6g[+Zr#J6,#I:i#PCa
42
+ +Dq]5NZs'',QkhY8.'?s+[uau5H'E?<T!on6+@X@JV5%qB-f9foZ7)#J9-b/:`i-I/cggeW/Ui/4pK
43
+ r*$$AWsM/e+qKo"b3i%+j2OEq540FP(:\/#>.EXT[)[f?LmG`QjG+TanX"5m^=9R2d_a0>7P!o.Go@
44
+ ;IkmT\LU(!q)m25b!9(-Nuap49WGp'>`l\!\5[O$ZV%^!iV>$JD^rg_8Nr>5R/$tp`tD5(]rV0BE1A
45
+ p?4A$u-Usag"99uj=g2uP^dt10i?SYYUsg9=V.GNofR;-K7_+EO$NR?OfA#O8.`L>q(#n_(!ann.7a
46
+ UI[J4'M?aaVT%!X0$a?lPpR#WtVuqE'39UnRS17@dmK@OCSRN?Q.BJ;=TNVjm_sZ.qK1fXVqG-R42h
47
+ +p!H!mR0FDI1*k8&D8PV/VTR,%H5S^"k_?:U?M[g[32#*!Zbf:#S$kH&d,J-jAr!/<Xo-I0aB\g&Rc
48
+ ds!RNP_%^YdIN*LCa!V#&ElAuh"5]MSl7P_ru_B!#T&HK$iQIu(Y.&*eO%`)1)"i012iAf-a#Yr`:8
49
+ GO/sW:LR!F>67Xj:jrMDH`ah%KVq.c&)W*ZdiV$P^qp=,=S7G7;dC.`5hp^S9kH;(bS6rX)oJs"bM7
50
+ s!pnS>E22n2UsL`=`dmJ!@>$:m;3EWKYVlXjfRh'FE]8c`j>RP7I=Ts5'0't.;?MEIJFEn-#C-(d8i
51
+ DKeY-:8D/<TuW=CR;q=?":I,68nmBFdE*+T\eT$=LXVf!2A;LJV:i_`/,-:`MBV\>g%sr'ZMfr\J3^
52
+ oTDIik_P@]5"E]4*(+S#LEKn)6O5SX\n&(5lI&5=#Ytuk&-*5MMk(+s\c;_P"74AC36.-X$D><DLg\
53
+ @8JKPg3WW_rU/>M,.J;"Pe=:ta%-8to;+s*NC&HP-2#f(Zi)'cY=%RJ,F5c=tm5aV`b@E^l%5a*#De
54
+ 3J^&.l>E$%S*/l"9:,'a$:1P!9*9ENNO0""R7#E"<G>,*p,ko9]cMo7KHqn)F<9s6%0a1dL(MFZpt)
55
+ r?nq`?"s.4X!COp9i@l/1gaXnK)$-ZWAiqKEXAC;<!!Qa4O>JM>`rj:).q)Hp@A`01c3?OY!Wg5KTs
56
+ 2m/=9F'b$:%ht@?MT2j;C7j*eVZYTlq3eP3G4o+2pLFBdNf[)utV1GRs'?TFBl?Z:[s&$_bZ@Wd]Y6
57
+ O<Xsq5CfO5TH7"ic5C'O.3aWVJT`)C[KE0>"@+:6lJ<ARgirk0*hb%n5[8m@8cXAW*MB2E!SR[;j;W
58
+ oL]nIR_!!E]rGTL7'"(2rLi&1V7VNN/R3eA?.+B/J?^ijGOI,YJRV/UiQKE*,#,[n\Qi%b@D_>qY46
59
+ >8&ii04HH;A[/[!5O6t!HJ[#WWYSg#[gWL?m#I-%KM(P<hXmY6+dR+14/!`"^j.f@>5TWg_jM"*/'=
60
+ TM:Q>cE^p00!90lD!-\^"$k*,N"TU^fTsbqlfF,MB(r<kq":e<01'%Dr)?J+kTUHrf(nUl20`ueFiU
61
+ /+jg)o5W!?_RgUO3S[NWYq^"J@G+5Qi,om*\_IOA8V2aNu?2E\ATu*oZT(JX!c3:]W:Y+2QU\5hH>b
62
+ 1_8Ne#N-YtJ`\#ine<6V)8Ip-KSB](9R_sRSRMM'W^Irkm-O#;2c?=1#4Rh\fIu6Ypk.o6JPZV;*X`
63
+ !j*T1PVJXRV\rY$H8*[">\_:BAWdf9@^$K.!H5e%+c@N`IT"lLR6J\3%t-l[a2bQ%hgn_>U%(aN_5!
64
+ $L8;J^P:kZ2ip(!63SaO%KBQX;m1"];".)Kk+3j('&k;d(rHpU"U4>/f+N%%DY4@^t&cbSB:qsc/JX
65
+ -+CYI^VA(/I"J@eNXXG>aQjVc/"lZg.J_UdP:`Fod"6;KD+:&n%]H'kp+n.So+k@^nq?(+L!22jm!/
66
+ Lb#/coJjA=shO@%&+/`XuXJ!FSI6O>IdtclSnC1bok&_A>8lk3G8477!"H5_K@.1n'LW,)F5\TunEE
67
+ 7*]@U?(`&&C.t;]2?H7S%Nr+`KcitnOuh$iXMm^RVBhBshC-10"lLX5M/j>^c6'hed(pRjL-,J:8-o
68
+ 9@)j2BH!(8\3<f1m3!$L>.!$i2.aG,9N`F&b+J,gUdg'"[X(ZELY5tDk:edZ#5"%)^YNm/9fZ>JP'$
69
+ D9um%-3t2a<'Q<)\`o!+dO.(?3!Ge!2)F\^a9a=3ZK8C"/2(lTX4sg"J$a2"b8i?,]Y!Ce<OP#+$o9
70
+ fO"_Y`&t\GN+KG)YA2XDqKY+4`WhKt)9(X-CIM/=e#.)5LCc[D#?C;p/4-_"UKK^FXmN9Qc<)kJ!^a
71
+ M60jr>Q8'qkU41^!pCmjg6&5b]AP;LSWhJct!S)<"U9!#c"@*!2ca!9"J)J]8\ghA2d*#s_Sq?oS3q
72
+ +9B7jE$RLqW6QTo3u"km1ChckkbfW?#S2H7!b#1FU!uR4#l```U>QM#KQ73g(]Y^7)WCAq@A4dGFoo
73
+ MT_k9?G+^bQU)@?LY*T00`TFMqF!qcT&MBG7_+P7O)k0$'M#%0Im`1Vc?4<[-_BI#bN!2rYC*9i%h?
74
+ (q0+9mdBn,T))l!3t/X5]-Vh9H2p"#p<[Z+<tD4-?`")o-'VC_/^D:]G7-C*T>)RhuQhfb_*b>![%a
75
+ L.qg!MA3E]2,fYoG.ZBdPC9+'?!3-VqUC.dQ"<k^Z>saDL5QV*S5^j!'P#SZ]<Hp'(\o;':$QsC*iP
76
+ N.APTA[D!FSY)+;,A3O<$VR(1D"Z&/GTQ49<6@"[FUG5_K:d.T>F1g`h9R!^n3r,)Tc7"$dh=J8bNY
77
+ 3,f1c*=1.U7`Jt=0FGXV*hg>K8eGfgPQd^,%R=%q+i%ak/34sRR2&2H,,2!Nj;7&[<hn*f'/Ek7`[K
78
+ /hMKO*BO;%e*!"2&"5f*'nj2gQ'UIjFk*H4i@Vdp^^`#R^0&)gt(5hm17+rA)@*/E$5iX-c^6Bpc\K
79
+ YfF6JgMSk5_EOS_mRLh+qC!VrW@[!![2.di0Y*AbQU;P*J*c#/5Q?9[K[jZ!['+q@:1#4i!uG3)Lt9
80
+ d_."<mS?]rkCVj3`8P1,`V?P6R*hge!J^POR$lt*i*F[58=F?$XdJsr@'d85Ll"Xl4r^3=_%)?TY^]
81
+ 5@j`W4uK*5Db!6-G/EarP_I"aFu'6'<1<@Mj[+K_PA&_C.OFdhIRK"bI-b5V@D&4M.a[>s[d)64=g,
82
+ bT247%\[\TTr];#?K3NJ.3aoeJ@5U>A.QJ!(;TbOJTMHRJ.4b["!R+tCGCeM;h/=(>gR43K$="H#Q\
83
+ >u$\3UD+Y3r9+q4NS"[d5HlSKV='E`6c"[H+8@IbMulRdunW<2-5:Ltu2nh#l$M$MF5;RVO_d-/<K!
84
+ !.B`i"uR8=M(AN*m'R0V(rKfQlsc*(dX6&$!J7FH3">eJ5mR=+j@!dg]l\'"Lq\hi[SW9VS,;*C$Ac
85
+ #DEF69*$=GsX?f#c@A?C;rtQXh)CU=DE;gS;n-D9Y"3X"S@E]a#j:]:@*$>dof#0;R3Kn+N]YH+oep
86
+ 7ND]H!Wt'ObktTd1I@ar^_)"/$n>_/^HFg`-@;*C*^0J2ggI\h7_/!(!D\Z:5q"aGC!1j[dH7_4Va@
87
+ g&N$u*LP8NiZAkIA/hn1$@s<;TG:qpe,Wka*O@:S;'Z/carH!-'0tCYW3?BS6ONpd)hH-?_'U(.0E`
88
+ L<*?)GmES:EN7Q]Sc*'s95!9!*,63FY_KVS5lP+QQYNE(`$<h];d@IP.#YT,q-'S2qX!"9n.&N`=;V
89
+ ;Nn-+n&g4J/]Ze!!">GP-,c*ndWBl"F;!@loNX0W$'gL6Uk-T"EZDO(Sc,k7>'A:@<`ZN31L$YW5')
90
+ OJ5??`mL0)>5G/5bQ!FP;YWFQ*jT#8^q=@o9Nmkof<'fK'i>NCrKG%^2*'cC`^^Wk<4=)K"/*uN*_$
91
+ Ul"NDt,;+5tNqqb0%:\CNp&#9Y,s+HQc]])uf6%cKGcm1UCoWE4U*Y<fJQ+M7uq-4/U^"mLRg=[+A]
92
+ 7a:!P&"tlu2BW!dX@-LbS&)$D7<f`+bQ:$>!>"Gsd;%:LmL2@,!rt0)/D;1r.QhTF*j9)VH=.WLa9_
93
+ im"RDrC_@*^op(kK#)PIEQJ]%U$s(bbdYg1FBi`Pi>rO7Re+Uce$!W!B/6l<`[&-8pB_!2&1U^-rm"
94
+ L7Bdi!L:ZQ&MQnc<p^%6AlB:98WcX1l7WhiX-[2T`79['4I7I6,Xf9^];2;(kKOAJZ9c!5Qee;*!L'
95
+ Y"[mLDP3g@%(4guS+[-]ng'.ON!C>.7TJmX\NB<d9*MM+-!=06EKcsh6e8A5#6#mkeFr=`C!C.PDC,
96
+ =Bb#&F@8+(=dP@)*">IK95@ULdq\0$4k/O\J`H/4F)3?qeY;7"un[)b!tG+oDebXp/Y5dZD<O!+H$r
97
+ ?l7kT!A;#H^^:h1$l=Hb(4-)b<m1PPN#P(4(?(d2c!DI."9IbfA4J+$6KG8B*YdDN(#d"75dCIRqAj
98
+ !$(+Z`o5RrMo<7X;QkO:5,6)+SA":ROl",F0)^eR4h!!Ifb)mraMTEH9IJ<g33'X.FEi#eCQ/-A-K*
99
+ !,(C7TUmFe5*%`Os.+N!RM0]nua)`!26&*."X)tH5rWM*l/U(!*f`USs[@jR/dF/Z]5HEnelWo!?n6
100
+ Y8:i!<jqo9,'VS,(4gG/qS%#,L*l7dK+o`g""p'5\j#?ib(_doa_bs%#a1skB^`4(4":/SU"']6&!!
101
+ ipu1(F=s)k6OCJ50JP-r-le+2J'q=HH-$dRPVa#2h096*GmZ@%$I[J:@<1%QXX(<:4JM.j><_GJjUD
102
+ d(imAU*T40O_Ri\!Z^OjYg5p;($I3"d_\<]:uV0h6.tNHqA@&WLbJ0"?s!H9q2%?C#`tJsTqWJ,kQq
103
+ 6F!hdiJ8GXFD/-4ZG(')8W5bJM$Hldf[!MD^s@LN9R[m+=#+:]1Ie7:B@Op+-/'1LJ$"p&%+a7pVY!
104
+ <@Wp&V(Qt!!r[Y!0M4K#RqLK7H6.j^_0WpQUVk;LCrU[+pS1"YLiCF=oa&uahRub1h@O*!.]".oC\R
105
+ $Dk;pI&4doLrgh&<^_cA$'N"pqa?nV!U3gI:!5O+=!.YP+#m#Zu.l=[e!<rRT+jbHJ<#l5R"[S9\\3
106
+ :H-!b^uf9icEV$%s3&!Z=!4^hgBL?iXjG!?hG-UCYE'gf=nX)MbX83L'0VGmo8>#@$<[U6a*^m$C)p
107
+ !9nmCJhOn@q<Id)5A[[J47A10>J1pX\@^@Ss/f;n2.-MllIZMr^_17[hiGjhguhiFS(4Ybn4FY'HFG
108
+ :&&dEqcLE]TKOQ'Q6#5N4PSOOdDH@Q7$K]N5B&;1UGK%RRJMF%kT#Q\=*XFDYbi\2a8Tik]!+2Z]!B
109
+ H-+JGbm3sa?TqAj'Yn?$"8Zq?CGF:nnacSE#o!"#LS),-]atfI32htJ9dPJE!cRbkL$:7-'+dH!2oC
110
+ f0e=h.4M%.4lH=.+XHN1=0I)c3Pa!7B@IAOcMlb'd,2a@t!s"u<9+IdORZB3K'+uj>SnG$[B,g!<]Q
111
+ PAL0J!N]6"!@p"p$tK#(YVdfQa!#K8K]TY=KO)!s",qPCPGtp1t]2<;MTqkNG/?!W]/C#>5FA!d5Ui
112
+ TtGFe^b?#p-g=/s%t_Sn&-Gk/WOd'ie#LKc+5n>'a+8b?[koBh+urDieoBGXUF4cs&qcjM+`'t2p],
113
+ V7a(aU\*j]eeSUhnS%LReqBGWb*20-fU/;J6/HQ7f4i-e=M4d6D-TR6#/,:;s+G+H[!lT>/dciUS.+
114
+ TO+sXX>:AGF\tAiWA4\ei"4q+N6Q.WtiOuRa+Ju\MHl/1/To5H,bK1-aL_&]''MS"//(YjQ/743]4H
115
+ (h5`F=V^Ip&GF_C\[/cbmRbYLMll+#%qJ5<M]:u3ep9*^t\dYcOBR?WB]4VYOkI]>-gpNm+qNc0'UA
116
+ OkiN,1QKH!KbVp2;I#Er<\kE;YHE[B=luW0ZqPo]DM1)ojtTCco;R[dgu]4Yc-4G5Km6rJ+n9G($9(
117
+ gNNP9F5(;Tf6cD!rWe)7G^_#u3?TF~>
118
+ %%EndData
119
+ end restore showpage
120
+ %%Trailer
121
+ %%EOF
@@ -0,0 +1,121 @@
1
+ %!PS-Adobe-3.0 EPSF-3.0
2
+ %%Pages: 1
3
+ %%BoundingBox: 0 0 148 35
4
+ %%DocumentData: Clean7Bit
5
+ %%LanguageLevel: 2
6
+ %%EndComments
7
+ %%Page: 1 1
8
+ save 9 dict begin
9
+ {/T currentfile/ASCII85Decode filter def/DeviceRGB setcolorspace
10
+ /F T<</BitsPerComponent 8/Columns 148/Colors 3/Predictor 10>>/LZWDecode filter def
11
+ <</ImageType 1/Width 148/Height 35/BitsPerComponent
12
+ 8/ImageMatrix[1 0 0 -1 0 35]/Decode
13
+ [0 1 0 1 0 1]/DataSource F>> image
14
+ F closefile T closefile}
15
+ %%BeginData:;
16
+ exec
17
+ J,isG0E`.##D>EP:q1$o*=mro@So+\<\5,H7Uo<*jE<[.O?u31)'kMB-^757;Rp>H>nrLFk#4:9enm
18
+ @9:1P"UeFn;TTMT<"fDHBj'`q4r<4ZX!SO*=mW\fPA(6)@MeDT7'eIi*oK%FI3)\mD4:UEXXoQq%1\
19
+ S77.!#I-@Se2%47P#*#mEuYH^d0RCRf/[Qrdih,f*l1G$X0mpZ$=o]49E9/[aY[SQu")WHG1JPJ<2&
20
+ ;?693`^eD-_23IsB>#(AfOn'%5^M[%4Zg%Da0FgG.?uRVJ<Q*K0%d/aqbjY[amhQaY8-0)"!C:+d0L
21
+ -N`#6M^A//SI#rpjGPT"MD3iq$MhE?m9;O=T2JqVkX##;,4<&4Z^#.=rZCe9qQ&BH0!iX7?\N,:Y/A
22
+ Z33G6(aKlPL]@GUW+Z=.SnHCM!1a4rN";SS)WKh.-Af*NM#k_9!!qLj!.5m04<0!(knkHBL7lU'+p@
23
+ t.KGoL%csdQ;5TgEP+7CHH\1unBjEmK98KM0&V)cd0J0Js0Dj4bYP2_$Gbbg+WTE#JcJ-#-P)?QQlQ
24
+ id=RlZ!N1Y_"S$T?KPm$A!n-NX(H\l09,e^_tpVc\n7S#6CJgmUmU#0Mluu!:V=aYlGc>O/l3*Os:"
25
+ $J3F+--ebd.3_kqd=eAF9e:!t/=jVL5B$'%"P:"A`/VF7?dNAUABGi[%C)^PqRtj:5>ob)MJdER=Oa
26
+ M9iJuR$9"lU-jB!KK.h^AI0ao$K-MCigQ7qb$_NA/F%Q59ThH)u=X-XliX3[\sP!.sL?$j7/3$/A8`
27
+ !+_N#Wm$nhF<:bPhcCdT_@CZ0+9D.V2h1lD!J8+;$jfLu8/;7._$ClT'IO_S#FP]Cc6:>4NQAI,0iQ
28
+ /B7jpHq.,nC`re3L+^#k:/lp)6dJA^;k#o4gYfEOAaHP1q$.O\$p!$sYB!",T[fI2K)h8YO-Wsg8PO
29
+ 5cNp#Wn:Prknd@iQQQ\7R>B$!?`ne!1]sdp(IYgBb4;a_Z5o;"Q8JqAn]<2l2Uur+=o%!i42`e*:j0
30
+ /-A)>,8e!7R/pEj1Q\Y[=UL4bVYD.T.*^KtmR/CY?T\p^h*0JC@E%%A-+p3]l1$iq6Vm^3t7>WpC_#
31
+ OR>W#Gf2GT)7P6G]10#Xgt8Oaq(t7gYidRJLlma+#9@<ddt[\Z6+5!B.6ab4#7WMe56>?]e_>DHqcO
32
+ p\"SbJ.;S[,YEglNYOk,h.Rr7)M0(Q!Z6R;+_@b2PnNXlgq2?jWNlFc_@6F"lOkS!<3:m?Fp.jG"s1
33
+ [XHOi@U5"D7ILBHaf%mW*<a/AtZ"6</akD0*PJOUlE\>_lipcaJl##HQR`"kUi%"TgJ#CpK40lS\ji
34
+ b832,OGBJ7^e,r0jHjhV?0)?8K))i>$VE>29*NB\d1[sN\SC"78fm$UJ+C8i(WTn0STs%XG6k4L&aO
35
+ aeleQ*!Ko3'njtUHPTt8mO)bAY3ls<#8@u$J&`e]b2XZC:)"J^Ma8cXBP`n?\pFceCJq,-9!!^O;"C
36
+ U"'Pn40$LthKbOH#'Wfo,q3)^GIB,o`G4I/Uig%06j%oLHna0o'`=*eVCW&!?WNa5aH*?p4`47t2eI
37
+ Ja"=-J:A(AlokfFL,VKlmJpW/C64P@*M^PqNq)Eoa5Y5B!-AX#+:nP_@P!/\G^^/hmQSf<I#<G+2h6
38
+ De!Jebp+(I-CN_uZ37o9F3c>XPM"rofS"V)VJL3SdTQ>2S);BT_6&WXuC3$2u5*b42J!0@`m5g%1O!
39
+ ,)Z>,JOQ4@A+c"U2\4!,X7=f#67;p,t0!@4pTSIRF9AP!!!l@%ZOF3/4rd)\*"$TC6Ea*#gj0Ung=W
40
+ 6<Zg7"JrUTrn:8:W!$cT+O'os?JA>:nTWkJr-:'>^%(/gO]Rq[XGY#UekETMdB-m6OGeaU<*cXR[J=
41
+ odG5f9RNY$>n8Z&1A.!508FN)0tmbWAdWhGPIi!s_)3#"(p[#&$sC*ci"q7u6g[+Zr#J6,#I:i#PCa
42
+ +Dq]5NZs'',QkhY8.'?s+[uau5H'E?<T!on6+@X@JV5%qB-f9foZ7)#J9-b/:`i-I/cggeW/Ui/4pK
43
+ r*$$AWsM/e+qKo"b3i%+j2OEq540FP(:\/#>.EXT[)[f?LmG`QjG+TanX"5m^=9R2d_a0>7P!o.Go@
44
+ ;IkmT\LU(!q)m25b!9(-Nuap49WGp'>`l\!\5[O$ZV%^!iV>$JD^rg_8Nr>5R/$tp`tD5(]rV0BE1A
45
+ p?4A$u-Usag"99uj=g2uP^dt10i?SYYUsg9=V.GNofR;-K7_+EO$NR?OfA#O8.`L>q(#n_(!ann.7a
46
+ UI[J4'M?aaVT%!X0$a?lPpR#WtVuqE'39UnRS17@dmK@OCSRN?Q.BJ;=TNVjm_sZ.qK1fXVqG-R42h
47
+ +p!H!mR0FDI1*k8&D8PV/VTR,%H5S^"k_?:U?M[g[32#*!Zbf:#S$kH&d,J-jAr!/<Xo-I0aB\g&Rc
48
+ ds!RNP_%^YdIN*LCa!V#&ElAuh"5]MSl7P_ru_B!#T&HK$iQIu(Y.&*eO%`)1)"i012iAf-a#Yr`:8
49
+ GO/sW:LR!F>67Xj:jrMDH`ah%KVq.c&)W*ZdiV$P^qp=,=S7G7;dC.`5hp^S9kH;(bS6rX)oJs"bM7
50
+ s!pnS>E22n2UsL`=`dmJ!@>$:m;3EWKYVlXjfRh'FE]8c`j>RP7I=Ts5'0't.;?MEIJFEn-#C-(d8i
51
+ DKeY-:8D/<TuW=CR;q=?":I,68nmBFdE*+T\eT$=LXVf!2A;LJV:i_`/,-:`MBV\>g%sr'ZMfr\J3^
52
+ oTDIik_P@]5"E]4*(+S#LEKn)6O5SX\n&(5lI&5=#Ytuk&-*5MMk(+s\c;_P"74AC36.-X$D><DLg\
53
+ @8JKPg3WW_rU/>M,.J;"Pe=:ta%-8to;+s*NC&HP-2#f(Zi)'cY=%RJ,F5c=tm5aV`b@E^l%5a*#De
54
+ 3J^&.l>E$%S*/l"9:,'a$:1P!9*9ENNO0""R7#E"<G>,*p,ko9]cMo7KHqn)F<9s6%0a1dL(MFZpt)
55
+ r?nq`?"s.4X!COp9i@l/1gaXnK)$-ZWAiqKEXAC;<!!Qa4O>JM>`rj:).q)Hp@A`01c3?OY!Wg5KTs
56
+ 2m/=9F'b$:%ht@?MT2j;C7j*eVZYTlq3eP3G4o+2pLFBdNf[)utV1GRs'?TFBl?Z:[s&$_bZ@Wd]Y6
57
+ O<Xsq5CfO5TH7"ic5C'O.3aWVJT`)C[KE0>"@+:6lJ<ARgirk0*hb%n5[8m@8cXAW*MB2E!SR[;j;W
58
+ oL]nIR_!!E]rGTL7'"(2rLi&1V7VNN/R3eA?.+B/J?^ijGOI,YJRV/UiQKE*,#,[n\Qi%b@D_>qY46
59
+ >8&ii04HH;A[/[!5O6t!HJ[#WWYSg#[gWL?m#I-%KM(P<hXmY6+dR+14/!`"^j.f@>5TWg_jM"*/'=
60
+ TM:Q>cE^p00!90lD!-\^"$k*,N"TU^fTsbqlfF,MB(r<kq":e<01'%Dr)?J+kTUHrf(nUl20`ueFiU
61
+ /+jg)o5W!?_RgUO3S[NWYq^"J@G+5Qi,om*\_IOA8V2aNu?2E\ATu*oZT(JX!c3:]W:Y+2QU\5hH>b
62
+ 1_8Ne#N-YtJ`\#ine<6V)8Ip-KSB](9R_sRSRMM'W^Irkm-O#;2c?=1#4Rh\fIu6Ypk.o6JPZV;*X`
63
+ !j*T1PVJXRV\rY$H8*[">\_:BAWdf9@^$K.!H5e%+c@N`IT"lLR6J\3%t-l[a2bQ%hgn_>U%(aN_5!
64
+ $L8;J^P:kZ2ip(!63SaO%KBQX;m1"];".)Kk+3j('&k;d(rHpU"U4>/f+N%%DY4@^t&cbSB:qsc/JX
65
+ -+CYI^VA(/I"J@eNXXG>aQjVc/"lZg.J_UdP:`Fod"6;KD+:&n%]H'kp+n.So+k@^nq?(+L!22jm!/
66
+ Lb#/coJjA=shO@%&+/`XuXJ!FSI6O>IdtclSnC1bok&_A>8lk3G8477!"H5_K@.1n'LW,)F5\TunEE
67
+ 7*]@U?(`&&C.t;]2?H7S%Nr+`KcitnOuh$iXMm^RVBhBshC-10"lLX5M/j>^c6'hed(pRjL-,J:8-o
68
+ 9@)j2BH!(8\3<f1m3!$L>.!$i2.aG,9N`F&b+J,gUdg'"[X(ZELY5tDk:edZ#5"%)^YNm/9fZ>JP'$
69
+ D9um%-3t2a<'Q<)\`o!+dO.(?3!Ge!2)F\^a9a=3ZK8C"/2(lTX4sg"J$a2"b8i?,]Y!Ce<OP#+$o9
70
+ fO"_Y`&t\GN+KG)YA2XDqKY+4`WhKt)9(X-CIM/=e#.)5LCc[D#?C;p/4-_"UKK^FXmN9Qc<)kJ!^a
71
+ M60jr>Q8'qkU41^!pCmjg6&5b]AP;LSWhJct!S)<"U9!#c"@*!2ca!9"J)J]8\ghA2d*#s_Sq?oS3q
72
+ +9B7jE$RLqW6QTo3u"km1ChckkbfW?#S2H7!b#1FU!uR4#l```U>QM#KQ73g(]Y^7)WCAq@A4dGFoo
73
+ MT_k9?G+^bQU)@?LY*T00`TFMqF!qcT&MBG7_+P7O)k0$'M#%0Im`1Vc?4<[-_BI#bN!2rYC*9i%h?
74
+ (q0+9mdBn,T))l!3t/X5]-Vh9H2p"#p<[Z+<tD4-?`")o-'VC_/^D:]G7-C*T>)RhuQhfb_*b>![%a
75
+ L.qg!MA3E]2,fYoG.ZBdPC9+'?!3-VqUC.dQ"<k^Z>saDL5QV*S5^j!'P#SZ]<Hp'(\o;':$QsC*iP
76
+ N.APTA[D!FSY)+;,A3O<$VR(1D"Z&/GTQ49<6@"[FUG5_K:d.T>F1g`h9R!^n3r,)Tc7"$dh=J8bNY
77
+ 3,f1c*=1.U7`Jt=0FGXV*hg>K8eGfgPQd^,%R=%q+i%ak/34sRR2&2H,,2!Nj;7&[<hn*f'/Ek7`[K
78
+ /hMKO*BO;%e*!"2&"5f*'nj2gQ'UIjFk*H4i@Vdp^^`#R^0&)gt(5hm17+rA)@*/E$5iX-c^6Bpc\K
79
+ YfF6JgMSk5_EOS_mRLh+qC!VrW@[!![2.di0Y*AbQU;P*J*c#/5Q?9[K[jZ!['+q@:1#4i!uG3)Lt9
80
+ d_."<mS?]rkCVj3`8P1,`V?P6R*hge!J^POR$lt*i*F[58=F?$XdJsr@'d85Ll"Xl4r^3=_%)?TY^]
81
+ 5@j`W4uK*5Db!6-G/EarP_I"aFu'6'<1<@Mj[+K_PA&_C.OFdhIRK"bI-b5V@D&4M.a[>s[d)64=g,
82
+ bT247%\[\TTr];#?K3NJ.3aoeJ@5U>A.QJ!(;TbOJTMHRJ.4b["!R+tCGCeM;h/=(>gR43K$="H#Q\
83
+ >u$\3UD+Y3r9+q4NS"[d5HlSKV='E`6c"[H+8@IbMulRdunW<2-5:Ltu2nh#l$M$MF5;RVO_d-/<K!
84
+ !.B`i"uR8=M(AN*m'R0V(rKfQlsc*(dX6&$!J7FH3">eJ5mR=+j@!dg]l\'"Lq\hi[SW9VS,;*C$Ac
85
+ #DEF69*$=GsX?f#c@A?C;rtQXh)CU=DE;gS;n-D9Y"3X"S@E]a#j:]:@*$>dof#0;R3Kn+N]YH+oep
86
+ 7ND]H!Wt'ObktTd1I@ar^_)"/$n>_/^HFg`-@;*C*^0J2ggI\h7_/!(!D\Z:5q"aGC!1j[dH7_4Va@
87
+ g&N$u*LP8NiZAkIA/hn1$@s<;TG:qpe,Wka*O@:S;'Z/carH!-'0tCYW3?BS6ONpd)hH-?_'U(.0E`
88
+ L<*?)GmES:EN7Q]Sc*'s95!9!*,63FY_KVS5lP+QQYNE(`$<h];d@IP.#YT,q-'S2qX!"9n.&N`=;V
89
+ ;Nn-+n&g4J/]Ze!!">GP-,c*ndWBl"F;!@loNX0W$'gL6Uk-T"EZDO(Sc,k7>'A:@<`ZN31L$YW5')
90
+ OJ5??`mL0)>5G/5bQ!FP;YWFQ*jT#8^q=@o9Nmkof<'fK'i>NCrKG%^2*'cC`^^Wk<4=)K"/*uN*_$
91
+ Ul"NDt,;+5tNqqb0%:\CNp&#9Y,s+HQc]])uf6%cKGcm1UCoWE4U*Y<fJQ+M7uq-4/U^"mLRg=[+A]
92
+ 7a:!P&"tlu2BW!dX@-LbS&)$D7<f`+bQ:$>!>"Gsd;%:LmL2@,!rt0)/D;1r.QhTF*j9)VH=.WLa9_
93
+ im"RDrC_@*^op(kK#)PIEQJ]%U$s(bbdYg1FBi`Pi>rO7Re+Uce$!W!B/6l<`[&-8pB_!2&1U^-rm"
94
+ L7Bdi!L:ZQ&MQnc<p^%6AlB:98WcX1l7WhiX-[2T`79['4I7I6,Xf9^];2;(kKOAJZ9c!5Qee;*!L'
95
+ Y"[mLDP3g@%(4guS+[-]ng'.ON!C>.7TJmX\NB<d9*MM+-!=06EKcsh6e8A5#6#mkeFr=`C!C.PDC,
96
+ =Bb#&F@8+(=dP@)*">IK95@ULdq\0$4k/O\J`H/4F)3?qeY;7"un[)b!tG+oDebXp/Y5dZD<O!+H$r
97
+ ?l7kT!A;#H^^:h1$l=Hb(4-)b<m1PPN#P(4(?(d2c!DI."9IbfA4J+$6KG8B*YdDN(#d"75dCIRqAj
98
+ !$(+Z`o5RrMo<7X;QkO:5,6)+SA":ROl",F0)^eR4h!!Ifb)mraMTEH9IJ<g33'X.FEi#eCQ/-A-K*
99
+ !,(C7TUmFe5*%`Os.+N!RM0]nua)`!26&*."X)tH5rWM*l/U(!*f`USs[@jR/dF/Z]5HEnelWo!?n6
100
+ Y8:i!<jqo9,'VS,(4gG/qS%#,L*l7dK+o`g""p'5\j#?ib(_doa_bs%#a1skB^`4(4":/SU"']6&!!
101
+ ipu1(F=s)k6OCJ50JP-r-le+2J'q=HH-$dRPVa#2h096*GmZ@%$I[J:@<1%QXX(<:4JM.j><_GJjUD
102
+ d(imAU*T40O_Ri\!Z^OjYg5p;($I3"d_\<]:uV0h6.tNHqA@&WLbJ0"?s!H9q2%?C#`tJsTqWJ,kQq
103
+ 6F!hdiJ8GXFD/-4ZG(')8W5bJM$Hldf[!MD^s@LN9R[m+=#+:]1Ie7:B@Op+-/'1LJ$"p&%+a7pVY!
104
+ <@Wp&V(Qt!!r[Y!0M4K#RqLK7H6.j^_0WpQUVk;LCrU[+pS1"YLiCF=oa&uahRub1h@O*!.]".oC\R
105
+ $Dk;pI&4doLrgh&<^_cA$'N"pqa?nV!U3gI:!5O+=!.YP+#m#Zu.l=[e!<rRT+jbHJ<#l5R"[S9\\3
106
+ :H-!b^uf9icEV$%s3&!Z=!4^hgBL?iXjG!?hG-UCYE'gf=nX)MbX83L'0VGmo8>#@$<[U6a*^m$C)p
107
+ !9nmCJhOn@q<Id)5A[[J47A10>J1pX\@^@Ss/f;n2.-MllIZMr^_17[hiGjhguhiFS(4Ybn4FY'HFG
108
+ :&&dEqcLE]TKOQ'Q6#5N4PSOOdDH@Q7$K]N5B&;1UGK%RRJMF%kT#Q\=*XFDYbi\2a8Tik]!+2Z]!B
109
+ H-+JGbm3sa?TqAj'Yn?$"8Zq?CGF:nnacSE#o!"#LS),-]atfI32htJ9dPJE!cRbkL$:7-'+dH!2oC
110
+ f0e=h.4M%.4lH=.+XHN1=0I)c3Pa!7B@IAOcMlb'd,2a@t!s"u<9+IdORZB3K'+uj>SnG$[B,g!<]Q
111
+ PAL0J!N]6"!@p"p$tK#(YVdfQa!#K8K]TY=KO)!s",qPCPGtp1t]2<;MTqkNG/?!W]/C#>5FA!d5Ui
112
+ TtGFe^b?#p-g=/s%t_Sn&-Gk/WOd'ie#LKc+5n>'a+8b?[koBh+urDieoBGXUF4cs&qcjM+`'t2p],
113
+ V7a(aU\*j]eeSUhnS%LReqBGWb*20-fU/;J6/HQ7f4i-e=M4d6D-TR6#/,:;s+G+H[!lT>/dciUS.+
114
+ TO+sXX>:AGF\tAiWA4\ei"4q+N6Q.WtiOuRa+Ju\MHl/1/To5H,bK1-aL_&]''MS"//(YjQ/743]4H
115
+ (h5`F=V^Ip&GF_C\[/cbmRbYLMll+#%qJ5<M]:u3ep9*^t\dYcOBR?WB]4VYOkI]>-gpNm+qNc0'UA
116
+ OkiN,1QKH!KbVp2;I#Er<\kE;YHE[B=luW0ZqPo]DM1)ojtTCco;R[dgu]4Yc-4G5Km6rJ+n9G($9(
117
+ gNNP9F5(;Tf6cD!rWe)7G^_#u3?TF~>
118
+ %%EndData
119
+ end restore showpage
120
+ %%Trailer
121
+ %%EOF
@@ -1,4 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ #
2
3
  module Brcobranca
3
4
  module Boleto
4
5
  class BancoBrasil < Base # Banco do Brasil
@@ -10,16 +11,15 @@ module Brcobranca
10
11
  validates_each :numero_documento do |record, attr, value|
11
12
  valor_tamanho = value.to_s.size
12
13
  registro_tamanho = record.convenio.to_s.size
13
- quantidade = case
14
- when (valor_tamanho > 9) && (registro_tamanho == 8)
14
+ quantidade = if (valor_tamanho > 9) && (registro_tamanho == 8)
15
15
  '9'
16
- when (valor_tamanho > 10) && (registro_tamanho == 7)
16
+ elsif (valor_tamanho > 10) && (registro_tamanho == 7)
17
17
  '10'
18
- when (valor_tamanho > 7) && (registro_tamanho == 4)
18
+ elsif (valor_tamanho > 7) && (registro_tamanho == 4)
19
19
  '7'
20
- when (valor_tamanho > 5) && (registro_tamanho == 6) && (!record.codigo_servico)
20
+ elsif (valor_tamanho > 5) && (registro_tamanho == 6) && !record.codigo_servico
21
21
  '5'
22
- when (valor_tamanho > 17) && (registro_tamanho == 6) && (record.codigo_servico)
22
+ elsif (valor_tamanho > 17) && (registro_tamanho == 6) && record.codigo_servico
23
23
  '17'
24
24
  end
25
25
  record.errors.add attr, "deve ser menor ou igual a #{quantidade} dígitos." if quantidade
@@ -102,7 +102,7 @@ module Brcobranca
102
102
  when 6
103
103
  codigo_servico ? 17 : 5
104
104
  else
105
- fail Brcobranca::NaoImplementado.new('Tipo de convênio não implementado.')
105
+ raise Brcobranca::NaoImplementado, 'Tipo de convênio não implementado.'
106
106
  end
107
107
  quantidade ? @numero_documento.to_s.rjust(quantidade, '0') : @numero_documento
108
108
  end
@@ -145,7 +145,7 @@ module Brcobranca
145
145
  "#{convenio}#{numero_documento}#{agencia}#{conta_corrente}#{carteira}"
146
146
  else
147
147
  # Nosso Número de 17 dígitos com Convenio de 6 dígitos e sem numero_documento, carteira 16 e 18
148
- fail "Só é permitido emitir boletos com nosso número de 17 dígitos com carteiras 16 ou 18. Sua carteira atual é #{carteira}" unless %w(16 18).include?(carteira)
148
+ raise "Só é permitido emitir boletos com nosso número de 17 dígitos com carteiras 16 ou 18. Sua carteira atual é #{carteira}" unless %w(16 18).include?(carteira)
149
149
  "#{convenio}#{numero_documento}21"
150
150
  end
151
151
  when 4 # Nosso Número de 7 dígitos com Convenio de 4 dígitos e sem numero_documento
@@ -1,4 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ #
2
3
  module Brcobranca
3
4
  module Boleto
4
5
  class BancoNordeste < Base # Banco do Nordeste
@@ -1,20 +1,20 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ #
2
3
  module Brcobranca
3
4
  module Boleto
4
5
  class Banestes < Base # Banestes
5
-
6
6
  # <b>REQUERIDO</b>: digito verificador da conta corrente
7
7
  attr_accessor :digito_conta_corrente
8
8
 
9
- validates_length_of :agencia, maximum: 4, message: "deve ser menor ou igual a 4 dígitos."
10
- validates_length_of :conta_corrente, maximum: 10, message: "deve ser menor ou igual a 10 dígitos."
11
- validates_length_of :numero_documento, maximum: 8, message: "deve ser menor ou igual a 8 dígitos."
9
+ validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
10
+ validates_length_of :conta_corrente, maximum: 10, message: 'deve ser menor ou igual a 10 dígitos.'
11
+ validates_length_of :numero_documento, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
12
12
  validates_length_of :variacao, maximum: 1, message: 'deve ser menor ou igual a 1 dígitos.'
13
13
  validates_length_of :carteira, maximum: 2, message: 'deve ser menor ou igual a 2 dígitos.'
14
14
  validates_length_of :digito_conta_corrente, is: 1, message: 'deve ser igual a 1 dígitos.'
15
15
 
16
16
  def initialize(campos = {})
17
- campos = { carteira: "11", variacao: '2' }.merge!(campos)
17
+ campos = { carteira: '11', variacao: '2' }.merge!(campos)
18
18
  super(campos)
19
19
  end
20
20
 
@@ -22,35 +22,35 @@ module Brcobranca
22
22
  #
23
23
  # @return [String] 3 caracteres numéricos.
24
24
  def banco
25
- "021"
25
+ '021'
26
26
  end
27
27
 
28
28
  # Dígito verificador do banco
29
29
  #
30
30
  # @return [String] 1 caractere.
31
31
  def banco_dv
32
- "3"
32
+ '3'
33
33
  end
34
34
 
35
35
  # Agência
36
36
  #
37
37
  # @return [String] 4 caracteres numéricos.
38
38
  def agencia=(valor)
39
- @agencia = valor.to_s.rjust(4, "0") if valor
39
+ @agencia = valor.to_s.rjust(4, '0') if valor
40
40
  end
41
41
 
42
42
  # Conta
43
43
  #
44
44
  # @return [String] 7 caracteres numéricos.
45
45
  def conta_corrente=(valor)
46
- @conta_corrente = valor.to_s.rjust(10, "0") if valor
46
+ @conta_corrente = valor.to_s.rjust(10, '0') if valor
47
47
  end
48
48
 
49
49
  # Número documento
50
50
  #
51
51
  # @return [String] 8 caracteres numéricos.
52
52
  def numero_documento=(valor)
53
- @numero_documento = valor.to_s.rjust(8, "0") if valor
53
+ @numero_documento = valor.to_s.rjust(8, '0') if valor
54
54
  end
55
55
 
56
56
  # Nosso número para exibição no boleto.
@@ -0,0 +1,84 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ module Brcobranca
4
+ module Boleto
5
+ class Banrisul < Base # Banrisul
6
+ validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
7
+ validates_length_of :conta_corrente, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
8
+ validates_length_of :numero_documento, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
9
+ validates_length_of :carteira, maximum: 1, message: 'deve ser menor ou igual a 1 dígitos.'
10
+ validates_length_of :convenio, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
11
+
12
+ def initialize(campos = {})
13
+ campos = { carteira: '2' }.merge!(campos)
14
+ super(campos)
15
+ end
16
+
17
+ # Codigo do banco emissor (3 dígitos sempre)
18
+ #
19
+ # @return [String] 3 caracteres numéricos.
20
+ def banco
21
+ '041'
22
+ end
23
+
24
+ # Dígito verificador do banco
25
+ #
26
+ # @return [String] 1 caractere.
27
+ def banco_dv
28
+ '8'
29
+ end
30
+
31
+ # Agência
32
+ #
33
+ # @return [String] 4 caracteres numéricos.
34
+ def agencia=(valor)
35
+ @agencia = valor.to_s.rjust(4, '0') if valor
36
+ end
37
+
38
+ # Conta
39
+ #
40
+ # @return [String] 8 caracteres numéricos.
41
+ def conta_corrente=(valor)
42
+ @conta_corrente = valor.to_s.rjust(8, '0') if valor
43
+ end
44
+
45
+ # Número documento
46
+ #
47
+ # @return [String] 8 caracteres numéricos.
48
+ def numero_documento=(valor)
49
+ @numero_documento = valor.to_s.rjust(8, '0') if valor
50
+ end
51
+
52
+ # Número do convênio/contrato do cliente junto ao banco.
53
+ # @return [String] 7 caracteres numéricos.
54
+ def convenio=(valor)
55
+ @convenio = valor.to_s.rjust(7, '0') if valor
56
+ end
57
+
58
+ # Nosso número para exibição no boleto.
59
+ #
60
+ # @return [String] caracteres numéricos.
61
+ def nosso_numero_boleto
62
+ "#{numero_documento}-#{numero_documento.duplo_digito}"
63
+ end
64
+
65
+ def agencia_conta_boleto
66
+ "#{agencia} / #{convenio}"
67
+ end
68
+
69
+ # Posições 20 a 20 - Produto:
70
+ # 1 Cobrança Normal, Fichário emitido pelo BANRISUL.
71
+ # 2 Cobrança Direta, Fichário emitido pelo CLIENTE.
72
+ # Posição 21 a 21 - Constante 1
73
+ # Posição 22 a 25 - Código da Agência, com quatro dígitos, sem o Número de Controle.
74
+ # Posição 26 a 32 - Código de Cedente do Beneficiário sem Número de Controle.
75
+ # Posição 33 a 40 - Nosso Número sem Número de Controle.
76
+ # Posição 41 a 42 - Constante 40.
77
+ # Posição 43 a 44 - Duplo Dígito referente às posições 20 a 42 (módulos 10 e 11).
78
+ def codigo_barras_segunda_parte
79
+ campo_livre = "#{carteira}1#{agencia}#{convenio}#{numero_documento}40"
80
+ campo_livre + campo_livre.duplo_digito
81
+ end
82
+ end
83
+ end
84
+ end
@@ -1,4 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ #
2
3
  # @author Kivanio Barbosa
3
4
  module Brcobranca
4
5
  module Boleto
@@ -149,12 +150,12 @@ module Brcobranca
149
150
 
150
151
  # @abstract Deverá ser sobreescrito para cada banco.
151
152
  def nosso_numero_boleto
152
- fail Brcobranca::NaoImplementado.new('Sobreescreva este método na classe referente ao banco que você esta criando')
153
+ raise Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando'
153
154
  end
154
155
 
155
156
  # @abstract Deverá ser sobreescrito para cada banco.
156
157
  def agencia_conta_boleto
157
- fail Brcobranca::NaoImplementado.new('Sobreescreva este método na classe referente ao banco que você esta criando')
158
+ raise Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando'
158
159
  end
159
160
 
160
161
  # Valor total do documento: <b>quantidate * valor</b>
@@ -189,7 +190,7 @@ module Brcobranca
189
190
  # @raise [Brcobranca::BoletoInvalido] Caso as informações fornecidas não sejam suficientes ou sejam inválidas.
190
191
  # @return [String] código de barras formado por 44 caracteres numéricos.
191
192
  def codigo_barras
192
- fail Brcobranca::BoletoInvalido.new(self) unless self.valid?
193
+ raise Brcobranca::BoletoInvalido, self unless valid?
193
194
  codigo = codigo_barras_primeira_parte # 18 digitos
194
195
  codigo << codigo_barras_segunda_parte # 25 digitos
195
196
  if codigo =~ /^(\d{4})(\d{39})$/
@@ -202,7 +203,7 @@ module Brcobranca
202
203
  codigo = "#{Regexp.last_match[1]}#{codigo_dv}#{Regexp.last_match[2]}"
203
204
  codigo
204
205
  else
205
- fail Brcobranca::BoletoInvalido.new(self)
206
+ raise Brcobranca::BoletoInvalido, self
206
207
  end
207
208
  end
208
209
 
@@ -210,7 +211,7 @@ module Brcobranca
210
211
  #
211
212
  # @abstract Deverá ser sobreescrito para cada banco.
212
213
  def codigo_barras_segunda_parte
213
- fail Brcobranca::NaoImplementado.new('Sobreescreva este método na classe referente ao banco que você esta criando')
214
+ raise Brcobranca::NaoImplementado, 'Sobreescreva este método na classe referente ao banco que você esta criando'
214
215
  end
215
216
 
216
217
  private