brcobranca 6.9.1 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
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