Atualização da dos Arquivos PDF Holerite e relatório

This commit is contained in:
2026-06-17 15:10:56 -03:00
parent 0a12b10acc
commit 69448ddabd
5 changed files with 4297 additions and 6 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,799 @@
%PDF-1.3
%ÿÿÿÿ
1 0 obj
<< /Creator <feff0050007200610077006e>
/Producer <feff0050007200610077006e>
>>
endobj
2 0 obj
<< /Pages 3 0 R
/Type /Catalog
>>
endobj
3 0 obj
<< /Count 1
/Kids [5 0 R]
/Type /Pages
>>
endobj
4 0 obj
<< /Length 8085
>>
stream
q
/DeviceRGB cs
0.03922 0.03922 0.03922 scn
0.0 771.89 595.28 70.0 re
f
0.97647 0.45098 0.08627 scn
0.0 771.89 8.0 70.0 re
f
1.0 1.0 1.0 scn
BT
50.0 807.53 Td
/F2.0 20 Tf
[<5245454d205452414e53504f52> 20 <5445>] TJ
ET
0.97647 0.45098 0.08627 scn
BT
50.0 790.71 Td
/F1.0 10 Tf
[<53697374656d6120646520436f6e74726f6c6520646520437573746f73204c6f67ed737469636f73>] TJ
ET
0.0 0.0 0.0 scn
0.97647 0.45098 0.08627 scn
BT
40.0 723.556 Td
/F2.0 13 Tf
[<484f4c45524954452044452050> 100 <41> 50 <47414d454e54> 40 <4f209720454e545245474153>] TJ
ET
/DeviceRGB CS
0.97647 0.45098 0.08627 SCN
40.0 717.42 m
555.28 717.42 l
S
0.0 0.0 0.0 scn
0.95294 0.95686 0.96471 scn
40.0 687.52 120.0 21.9 re
f
0.0 0.0 0.0 scn
0.95294 0.95686 0.96471 scn
40.0 665.62 120.0 21.9 re
f
0.0 0.0 0.0 scn
0.95294 0.95686 0.96471 scn
40.0 643.72 120.0 21.9 re
f
0.0 0.0 0.0 scn
0.95294 0.95686 0.96471 scn
40.0 621.82 120.0 21.9 re
f
0.0 0.0 0.0 scn
1 w
0.0 0.0 0.0 SCN
40.0 709.42 m
160.0 709.42 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
40.0 687.52 m
160.0 687.52 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
40.0 709.92 m
40.0 687.02 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
160.0 709.92 m
160.0 687.02 l
S
[] 0 d
1 w
0.97647 0.45098 0.08627 SCN
BT
48.0 694.408 Td
/F2.0 10 Tf
[<4d6f746f7269737461>] TJ
ET
1 w
0.0 0.0 0.0 SCN
160.0 709.42 m
555.28 709.42 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
160.0 687.52 m
555.28 687.52 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
160.0 709.92 m
160.0 687.02 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
555.28 709.92 m
555.28 687.02 l
S
[] 0 d
1 w
0.97647 0.45098 0.08627 SCN
BT
168.0 694.612 Td
/F1.0 10 Tf
[<4272> -15 <756e6f20436f72676f7a696e686f>] TJ
ET
1 w
0.0 0.0 0.0 SCN
40.0 687.52 m
160.0 687.52 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
40.0 665.62 m
160.0 665.62 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
40.0 688.02 m
40.0 665.12 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
160.0 688.02 m
160.0 665.12 l
S
[] 0 d
1 w
0.97647 0.45098 0.08627 SCN
BT
48.0 672.508 Td
/F2.0 10 Tf
[<436f6e736f6c696461e7e36f>] TJ
ET
1 w
0.0 0.0 0.0 SCN
160.0 687.52 m
555.28 687.52 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
160.0 665.62 m
555.28 665.62 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
160.0 688.02 m
160.0 665.12 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
555.28 688.02 m
555.28 665.12 l
S
[] 0 d
1 w
0.97647 0.45098 0.08627 SCN
BT
168.0 672.712 Td
/F1.0 10 Tf
[<7465737465>] TJ
ET
1 w
0.0 0.0 0.0 SCN
40.0 665.62 m
160.0 665.62 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
40.0 643.72 m
160.0 643.72 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
40.0 666.12 m
40.0 643.22 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
160.0 666.12 m
160.0 643.22 l
S
[] 0 d
1 w
0.97647 0.45098 0.08627 SCN
BT
48.0 650.608 Td
/F2.0 10 Tf
[<50> 30 <6572ed6f646f>] TJ
ET
1 w
0.0 0.0 0.0 SCN
160.0 665.62 m
555.28 665.62 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
160.0 643.72 m
555.28 643.72 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
160.0 666.12 m
160.0 643.22 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
555.28 666.12 m
555.28 643.22 l
S
[] 0 d
1 w
0.97647 0.45098 0.08627 SCN
BT
168.0 650.812 Td
/F1.0 10 Tf
[<30312f30322f3230323620612031362f30362f32303236>] TJ
ET
1 w
0.0 0.0 0.0 SCN
40.0 643.72 m
160.0 643.72 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
40.0 621.82 m
160.0 621.82 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
40.0 644.22 m
40.0 621.32 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
160.0 644.22 m
160.0 621.32 l
S
[] 0 d
1 w
0.97647 0.45098 0.08627 SCN
BT
48.0 628.708 Td
/F2.0 10 Tf
[<456d697373e36f>] TJ
ET
1 w
0.0 0.0 0.0 SCN
160.0 643.72 m
555.28 643.72 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
160.0 621.82 m
555.28 621.82 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
160.0 644.22 m
160.0 621.32 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
555.28 644.22 m
555.28 621.32 l
S
[] 0 d
1 w
0.97647 0.45098 0.08627 SCN
BT
168.0 628.912 Td
/F1.0 10 Tf
[<31362f30362f32303236>] TJ
ET
0.97647 0.45098 0.08627 scn
BT
40.0 598.486 Td
/F2.0 13 Tf
[<5052> 20 <4f> 50 <56454e54> 40 <4f53204520444553434f4e54> 40 <4f53>] TJ
ET
0.97647 0.45098 0.08627 SCN
40.0 592.35 m
555.28 592.35 l
S
0.0 0.0 0.0 scn
0.03922 0.03922 0.03922 scn
40.0 560.45 189.0039 23.9 re
f
0.0 0.0 0.0 scn
0.03922 0.03922 0.03922 scn
229.0039 560.45 148.87117 23.9 re
f
0.0 0.0 0.0 scn
0.03922 0.03922 0.03922 scn
377.87507 560.45 177.40493 23.9 re
f
0.0 0.0 0.0 scn
1 w
0.0 0.0 0.0 SCN
40.0 584.35 m
229.0039 584.35 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
40.0 560.45 m
229.0039 560.45 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
40.0 584.85 m
40.0 559.95 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
229.0039 584.85 m
229.0039 559.95 l
S
[] 0 d
1 w
0.97647 0.45098 0.08627 SCN
1.0 1.0 1.0 scn
BT
48.0 568.338 Td
/F2.0 10 Tf
[<446573637269e7e36f>] TJ
ET
0.0 0.0 0.0 scn
1 w
0.0 0.0 0.0 SCN
229.0039 584.35 m
377.87507 584.35 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
229.0039 560.45 m
377.87507 560.45 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
229.0039 584.85 m
229.0039 559.95 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
377.87507 584.85 m
377.87507 559.95 l
S
[] 0 d
1 w
0.97647 0.45098 0.08627 SCN
1.0 1.0 1.0 scn
BT
353.65507 568.338 Td
/F2.0 10 Tf
[<517464>] TJ
ET
0.0 0.0 0.0 scn
1 w
0.0 0.0 0.0 SCN
377.87507 584.35 m
555.28 584.35 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
377.87507 560.45 m
555.28 560.45 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
377.87507 584.85 m
377.87507 559.95 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
555.28 584.85 m
555.28 559.95 l
S
[] 0 d
1 w
0.97647 0.45098 0.08627 SCN
1.0 1.0 1.0 scn
BT
523.87 568.338 Td
/F2.0 10 Tf
[<56> 60 <616c6f72>] TJ
ET
0.0 0.0 0.0 scn
1 w
0.0 0.0 0.0 SCN
40.0 560.45 m
229.0039 560.45 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
40.0 536.89 m
229.0039 536.89 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
40.0 560.95 m
40.0 536.39 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
229.0039 560.95 m
229.0039 536.39 l
S
[] 0 d
1 w
0.97647 0.45098 0.08627 SCN
BT
48.0 544.642 Td
/F1.0 10 Tf
[<456e7472656761204e6f72> -25 <6d616c>] TJ
ET
1 w
0.0 0.0 0.0 SCN
229.0039 560.45 m
377.87507 560.45 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
229.0039 536.89 m
377.87507 536.89 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
229.0039 560.95 m
229.0039 536.39 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
377.87507 560.95 m
377.87507 536.39 l
S
[] 0 d
1 w
0.97647 0.45098 0.08627 SCN
BT
359.75507 544.642 Td
/F1.0 10 Tf
[<3239>] TJ
ET
1 w
0.0 0.0 0.0 SCN
377.87507 560.45 m
555.28 560.45 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
377.87507 536.89 m
555.28 536.89 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
377.87507 560.95 m
377.87507 536.39 l
S
[] 0 d
1 w
0.0 0.0 0.0 SCN
555.28 560.95 m
555.28 536.39 l
S
[] 0 d
1 w
0.97647 0.45098 0.08627 SCN
BT
493.52 544.642 Td
/F1.0 10 Tf
[<2b205224203433352c3030>] TJ
ET
0.97647 0.45098 0.08627 scn
48.0 520.89 m
547.28 520.89 l
551.69828 520.89 555.28 517.30828 555.28 512.89 c
555.28 478.89 l
555.28 474.47172 551.69828 470.89 547.28 470.89 c
48.0 470.89 l
43.58172 470.89 40.0 474.47172 40.0 478.89 c
40.0 512.89 l
40.0 517.30828 43.58172 520.89 48.0 520.89 c
h
f
0.0 0.0 0.0 scn
BT
56.0 503.71 Td
/F2.0 10 Tf
[<56> 80 <414c4f52204ccd51> 10 <5549444f20412052454345424552>] TJ
ET
BT
56.0 481.094 Td
/F2.0 22 Tf
[<5224203433352c3030>] TJ
ET
0.97647 0.45098 0.08627 scn
BT
40.0 433.556 Td
/F2.0 13 Tf
[<41> 40 <434553534f2052c15049444f2041> 40 <4f205345552050> 100 <41494e454c>] TJ
ET
0.97647 0.45098 0.08627 SCN
40.0 427.42 m
555.28 427.42 l
S
0.0 0.0 0.0 scn
q
110.0 0.0 0.0 110.0 40.0 309.42 cm
/I1 Do
Q
BT
170.0 397.958 Td
/F1.0 9 Tf
[<457363616e656965206573746520515220436f646520636f6d20612063e26d6572> 10 <6120646f2063656c756c617220706172> 10 <6120656e7472> 10 <6172>] TJ
ET
BT
170.0 387.554 Td
/F1.0 9 Tf
[<6e6f20736575207061696e656c20652061636f6d70616e686172207365757320706167616d656e746f73> 15 <2e>] TJ
ET
BT
170.0 366.746 Td
/F1.0 9 Tf
[<4f75206163657373653a206c6f63616c686f73743a333030302f6d6f746f72> -15 <69737461>] TJ
ET
BT
170.0 356.342 Td
/F1.0 9 Tf
[<6520757365207365752050494e20646520342064ed6769746f73> 15 <2e>] TJ
ET
0.0 0.0 0.0 SCN
0.7 w
40.0 244.42 m
277.64 244.42 l
S
317.64 244.42 m
555.28 244.42 l
S
0.0 0.0 0.0 scn
BT
119.391 229.958 Td
/F2.0 9 Tf
[<4272756e6f20436f72> 15 <676f7a696e686f>] TJ
ET
BT
399.722 229.958 Td
/F2.0 9 Tf
[<5265656d2054> 80 <72616e73706f72> -20 <7465>] TJ
ET
0.41961 0.44706 0.50196 scn
BT
116.784 216.676 Td
/F1.0 8 Tf
[<417373696e61747572> 10 <6120646f204d6f746f72> -15 <69737461>] TJ
ET
BT
386.3 216.676 Td
/F1.0 8 Tf
[<417373696e61747572> 10 <6120646f2041646d696e69737472> 10 <61646f72>] TJ
ET
0.0 0.0 0.0 scn
/Stamp1 Do
Q
endstream
endobj
5 0 obj
<< /ArtBox [0 0 595.28 841.89]
/BleedBox [0 0 595.28 841.89]
/Contents 4 0 R
/CropBox [0 0 595.28 841.89]
/MediaBox [0 0 595.28 841.89]
/Parent 3 0 R
/Resources << /Font << /F1.0 7 0 R
/F2.0 6 0 R
>>
/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
/XObject << /I1 8 0 R
/Stamp1 9 0 R
>>
>>
/TrimBox [0 0 595.28 841.89]
/Type /Page
>>
endobj
6 0 obj
<< /BaseFont /Helvetica-Bold
/Encoding /WinAnsiEncoding
/Subtype /Type1
/Type /Font
>>
endobj
7 0 obj
<< /BaseFont /Helvetica
/Encoding /WinAnsiEncoding
/Subtype /Type1
/Type /Font
>>
endobj
8 0 obj
<< /BitsPerComponent 1
/ColorSpace /DeviceGray
/DecodeParms [<< /BitsPerComponent 1
/Colors 1
/Columns 220
/Predictor 15
>>]
/Filter [/FlateDecode]
/Height 220
/Length 788
/Subtype /Image
/Type /XObject
/Width 220
>>
stream
xœí˜ÁåHDq<(ÿͰ€}Y½×ýsøÃiVêhéWEIè×ü÷Q¿Î‡ãÿÍßo¶™qÓq,Â8ODÿ,;}¼Ï)<29>i‰}-.Úl¹i§¸dôu?þïânà/†jâ8îeÈèyì§Í΃‡ÝÑaí
ñ²MŸã÷ä=d±ºâ¥ÅMfÑ™'³ª¢n®,.ÚtçÈ ²z=.8Òâ&nÉ¢ܱ¹ÄKeõëÇ~Úloh¢ñ³G‡ßÞ½ê'•§ÆKÖ©Kóéw¦ãB}â#,ÞénÖ'ùJÕå¹ùóÛæìÆ0ZGˆüÈg¹ÇŒÝU¾=i…d°_Fäã…»‰[H‡Lä'Ï…•®÷ÍØB™ám2¯†bÞU_>öã&étœ<74>zf(^€¾ýíc·)À@±=FQ¦'%[±iÆì\ÙíùxïYÅ­ £W\·_üõtâ¼Ê V×®3ç
Ì«}¥È$^9¯£.žVþ4=Ü>yvk8Éj¤VΦ֤=¥‰ªå¦›–¦•Õú<âj#ŸÈ¬˜3¼Ã“~õù´ûy<C3BB>¦ÿüÅfÿT…”@Ѝ!<1A> ÛM©ÉÁ¤{<7B>ÛV9!rnž:
lsÛ¿~ì§M¢i'$ÐÔ
”Pn\j·VÀ-íú¡X˜o<>!ë71Ôˆ Dñ™j&ľ¸Œ^øò±Ÿ7ƒ\­
leuT(—޶ÙWÌ;IR,I¦dàjÿœI؇y
Æj/ƒˆ E³Ðí0úf}R+Þ¥`Úo™‰ ÐF½Z+·Z0Õ¸BK+ÙI7[åÛt´Õ¦5f3çËþnlK¬—wÔ¯íÉÊ»s¶x¶5Ÿ„>
=96eõù>y<>]ü-}—"<22>ÒØ«~ê“—3âÂ@êÓ’~ïÑ.†¨
ZIyÍÛàIÊa•ûަÜcËR*!Ò›³;#½Cô£|jMìÆVÀ
éweuºoB¸¾ª©>y‰
BL¡—I[<5B>l•û¤»†TVÍàs¹€\¾:¯ü›ÿãsê<73>
endstream
endobj
9 0 obj
<< /BBox [0 0 595.28 841.89]
/Length 363
/Resources << /Font << /F1.0 7 0 R
>>
>>
/Subtype /Form
/Type /XObject
>>
stream
q
/DeviceRGB cs
0.0 0.0 0.0 scn
/DeviceRGB CS
0.0 0.0 0.0 SCN
0.7 w
0 J
0 j
[] 0 d
/DeviceRGB cs
0.41961 0.44706 0.50196 scn
BT
171.876 74.256 Td
/F1.0 8 Tf
[<476572> 10 <61646f20656d2031362f30362f323032362031373a323720b7205265656d2054> 120 <72> 10 <616e73706f72> -40 <7465209720646f63756d656e746f20696e746572> -25 <6e6f>] TJ
ET
/DeviceRGB cs
0.0 0.0 0.0 scn
Q
endstream
endobj
xref
0 10
0000000000 65535 f
0000000015 00000 n
0000000109 00000 n
0000000158 00000 n
0000000215 00000 n
0000008352 00000 n
0000008699 00000 n
0000008801 00000 n
0000008898 00000 n
0000009936 00000 n
trailer
<< /Info 1 0 R
/Root 2 0 R
/Size 10

View File

@@ -10,7 +10,9 @@ module Pdf
CINZA = '6B7280' CINZA = '6B7280'
def initialize def initialize
@pdf = Prawn::Document.new(page_size: 'A4', margin: [40, 40, 60, 40]) # Margem inferior folgada (72) para o rodapé repetido (desenhado em y=20)
# não sobrepor o conteúdo.
@pdf = Prawn::Document.new(page_size: 'A4', margin: [40, 40, 72, 40])
end end
def render def render

View File

@@ -41,17 +41,18 @@ module Pdf
qtd = resumo[tipo] || 0 qtd = resumo[tipo] || 0
next if qtd.zero? next if qtd.zero?
valor = @entregas.where(tipo: tipo).sum(:valor_aplicado) valor = @entregas.where(tipo: tipo).sum(:valor_aplicado)
unit = qtd.zero? ? 0 : (valor / qtd)
sinal = tipo == 'desconto' ? '-' : '+' sinal = tipo == 'desconto' ? '-' : '+'
[cfg[:label], qtd.to_s, "#{sinal} #{moeda(valor)}"] [cfg[:label], qtd.to_s, moeda(unit), "#{sinal} #{moeda(valor)}"]
end.compact end.compact
linhas = [['Descrição', 'Qtd', 'Valor']] + por_tipo linhas = [['Descrição', 'Qtd', 'Unit.', 'Valor']] + por_tipo
@pdf.table(linhas, header: true, width: @pdf.bounds.width, @pdf.table(linhas, header: true, width: @pdf.bounds.width,
cell_style: { size: 10, padding: [6, 8] }) do |t| cell_style: { size: 10, padding: [6, 8] }) do |t|
t.row(0).background_color = PRETO t.row(0).background_color = PRETO
t.row(0).text_color = 'FFFFFF' t.row(0).text_color = 'FFFFFF'
t.row(0).font_style = :bold t.row(0).font_style = :bold
t.columns(1..2).align = :right t.columns(1..3).align = :right
end end
total = @entregas.sum { |e| e.desconto? ? -e.valor_aplicado : e.valor_aplicado } total = @entregas.sum { |e| e.desconto? ? -e.valor_aplicado : e.valor_aplicado }
@@ -67,6 +68,15 @@ module Pdf
at: [16, @pdf.cursor - 24], size: 22, style: :bold at: [16, @pdf.cursor - 24], size: 22, style: :bold
@pdf.move_down 64 @pdf.move_down 64
# Detalhamento: total de entregas e veículos atendidos no período
total_entregas = @entregas.count
veiculos = @entregas.map { |e| e.entrega_original&.vehicle }.compact.uniq
@pdf.fill_color CINZA
@pdf.text "Total de entregas: #{total_entregas}", size: 9
@pdf.text "Veículos atendidos: #{veiculos.any? ? veiculos.join(', ') : '—'}", size: 9
@pdf.fill_color '000000'
@pdf.move_down 8
# QR Code de login rápido # QR Code de login rápido
desenhar_qrcode if @user_motorista&.login_token.present? desenhar_qrcode if @user_motorista&.login_token.present?

View File

@@ -36,13 +36,17 @@ module Pdf
(i + 1).to_s, (i + 1).to_s,
original&.vehicle.presence || '—', original&.vehicle.presence || '—',
original ? "NF #{original.numero_nf}" : '—', original ? "NF #{original.numero_nf}" : '—',
original ? original.address.to_s.first(45) : '—', original ? original.address.to_s : '—',
e.tipo_cor[:label], e.tipo_cor[:label],
(e.desconto? ? '-' : '') + moeda(e.valor_aplicado) (e.desconto? ? '-' : '') + moeda(e.valor_aplicado)
] ]
end end
# Larguras fixas para as colunas estreitas; a coluna 3 (Endereço) fica
# automática e recebe o espaço restante, quebrando em várias linhas em
# vez de truncar no meio da palavra.
@pdf.table(linhas, header: true, width: @pdf.bounds.width, @pdf.table(linhas, header: true, width: @pdf.bounds.width,
column_widths: { 0 => 22, 1 => 70, 2 => 60, 4 => 95, 5 => 60 },
cell_style: { size: 8, padding: [4, 6] }) do |t| cell_style: { size: 8, padding: [4, 6] }) do |t|
t.row(0).background_color = PRETO t.row(0).background_color = PRETO
t.row(0).text_color = 'FFFFFF' t.row(0).text_color = 'FFFFFF'
@@ -57,7 +61,9 @@ module Pdf
@pdf.fill_color '000000' @pdf.fill_color '000000'
end end
# Totais por tipo # Totais por tipo — mantém RESUMO + Total + Assinaturas juntos, evitando
# título órfão no pé da página e sobreposição com o rodapé.
@pdf.start_new_page if @pdf.cursor < 200
secao "RESUMO" secao "RESUMO"
# reorder(nil): remove o .order(:created_at) da relação — senão o Postgres # reorder(nil): remove o .order(:created_at) da relação — senão o Postgres
# recusa "GROUP BY tipo ORDER BY created_at" (PG::GroupingError → 500). # recusa "GROUP BY tipo ORDER BY created_at" (PG::GroupingError → 500).