br-utils 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +120 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +21 -0
- data/README.md +348 -0
- data/Rakefile +6 -0
- data/examples/boleto_usage_example.rb +79 -0
- data/examples/cep_usage_example.rb +148 -0
- data/examples/cnh_usage_example.rb +120 -0
- data/examples/cnpj_usage_example.rb +227 -0
- data/examples/cpf_usage_example.rb +237 -0
- data/examples/currency_usage_example.rb +266 -0
- data/examples/date_usage_example.rb +259 -0
- data/examples/email_usage_example.rb +321 -0
- data/examples/legal_nature_usage_example.rb +437 -0
- data/examples/legal_process_usage_example.rb +444 -0
- data/examples/license_plate_usage_example.rb +440 -0
- data/examples/phone_usage_example.rb +595 -0
- data/examples/pis_usage_example.rb +588 -0
- data/examples/renavam_usage_example.rb +499 -0
- data/examples/voter_id_usage_example.rb +573 -0
- data/lib/brazilian-utils/boleto-utils.rb +176 -0
- data/lib/brazilian-utils/cep-utils.rb +330 -0
- data/lib/brazilian-utils/cnh-utils.rb +88 -0
- data/lib/brazilian-utils/cnpj-utils.rb +202 -0
- data/lib/brazilian-utils/cpf-utils.rb +192 -0
- data/lib/brazilian-utils/currency-utils.rb +226 -0
- data/lib/brazilian-utils/data/legal_process_ids.json +38 -0
- data/lib/brazilian-utils/date-utils.rb +244 -0
- data/lib/brazilian-utils/email-utils.rb +54 -0
- data/lib/brazilian-utils/legal-nature-utils.rb +235 -0
- data/lib/brazilian-utils/legal-process-utils.rb +240 -0
- data/lib/brazilian-utils/license-plate-utils.rb +279 -0
- data/lib/brazilian-utils/phone-utils.rb +272 -0
- data/lib/brazilian-utils/pis-utils.rb +151 -0
- data/lib/brazilian-utils/renavam-utils.rb +113 -0
- data/lib/brazilian-utils/voter-id-utils.rb +165 -0
- metadata +123 -0
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
require_relative '../lib/brazilian-utils/legal-process-utils'
|
|
2
|
+
|
|
3
|
+
puts "=" * 80
|
|
4
|
+
puts "Brazilian Legal Process Utils - Usage Examples"
|
|
5
|
+
puts "=" * 80
|
|
6
|
+
puts
|
|
7
|
+
|
|
8
|
+
# ============================================================================
|
|
9
|
+
# Format Information
|
|
10
|
+
# ============================================================================
|
|
11
|
+
puts "LEGAL PROCESS ID FORMAT"
|
|
12
|
+
puts "-" * 80
|
|
13
|
+
puts "Format: NNNNNNN-DD.AAAA.J.TR.OOOO"
|
|
14
|
+
puts
|
|
15
|
+
puts "Where:"
|
|
16
|
+
puts " NNNNNNN = Sequential number (7 digits)"
|
|
17
|
+
puts " DD = Verification digits (2 digits) - checksum"
|
|
18
|
+
puts " AAAA = Year the process was filed (4 digits)"
|
|
19
|
+
puts " J = Judicial segment (1 digit) - Órgão (1-9)"
|
|
20
|
+
puts " TR = Court (2 digits) - Tribunal"
|
|
21
|
+
puts " OOOO = Court of origin (4 digits) - Foro"
|
|
22
|
+
puts
|
|
23
|
+
puts "Órgãos (Judicial Segments):"
|
|
24
|
+
puts " 1 = Supremo Tribunal Federal (STF)"
|
|
25
|
+
puts " 2 = Conselho Nacional de Justiça (CNJ)"
|
|
26
|
+
puts " 3 = Justiça Militar"
|
|
27
|
+
puts " 4 = Justiça Eleitoral"
|
|
28
|
+
puts " 5 = Justiça do Trabalho"
|
|
29
|
+
puts " 6 = Justiça Federal"
|
|
30
|
+
puts " 7 = Justiça Estadual"
|
|
31
|
+
puts " 8 = Justiça dos Estados e do Distrito Federal"
|
|
32
|
+
puts " 9 = Justiça Militar Estadual"
|
|
33
|
+
puts
|
|
34
|
+
|
|
35
|
+
# ============================================================================
|
|
36
|
+
# Removing Symbols
|
|
37
|
+
# ============================================================================
|
|
38
|
+
puts "1. REMOVING SYMBOLS"
|
|
39
|
+
puts "-" * 80
|
|
40
|
+
|
|
41
|
+
formatted_ids = [
|
|
42
|
+
'1234567-89.0123.4.56.7890',
|
|
43
|
+
'9876543-21.0987.6.54.3210',
|
|
44
|
+
'6847650-60.2023.3.03.0000',
|
|
45
|
+
'5180823-36.2023.3.03.0000'
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
puts "Removing dots and hyphens from formatted IDs:"
|
|
49
|
+
formatted_ids.each do |formatted|
|
|
50
|
+
clean = BrazilianUtils::LegalProcessUtils.remove_symbols(formatted)
|
|
51
|
+
puts " #{formatted} => #{clean}"
|
|
52
|
+
end
|
|
53
|
+
puts
|
|
54
|
+
|
|
55
|
+
# ============================================================================
|
|
56
|
+
# Formatting Legal Process IDs
|
|
57
|
+
# ============================================================================
|
|
58
|
+
puts "2. FORMATTING LEGAL PROCESS IDs"
|
|
59
|
+
puts "-" * 80
|
|
60
|
+
|
|
61
|
+
unformatted_ids = [
|
|
62
|
+
'12345678901234567890',
|
|
63
|
+
'98765432109876543210',
|
|
64
|
+
'68476506020233030000',
|
|
65
|
+
'51808233620233030000'
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
puts "Formatting 20-digit IDs:"
|
|
69
|
+
unformatted_ids.each do |id|
|
|
70
|
+
formatted = BrazilianUtils::LegalProcessUtils.format_legal_process(id)
|
|
71
|
+
status = formatted ? "✓" : "✗"
|
|
72
|
+
puts " #{status} #{id} => #{formatted}"
|
|
73
|
+
end
|
|
74
|
+
puts
|
|
75
|
+
|
|
76
|
+
# Invalid formatting examples
|
|
77
|
+
puts "Invalid formatting attempts:"
|
|
78
|
+
invalid_ids = ['123', '12345678901234567890123', 'abcd567890123456789', '']
|
|
79
|
+
|
|
80
|
+
invalid_ids.each do |id|
|
|
81
|
+
formatted = BrazilianUtils::LegalProcessUtils.format_legal_process(id)
|
|
82
|
+
display = id.empty? ? '(empty)' : id
|
|
83
|
+
puts " ✗ #{display} => #{formatted.inspect}"
|
|
84
|
+
end
|
|
85
|
+
puts
|
|
86
|
+
|
|
87
|
+
# ============================================================================
|
|
88
|
+
# Validating Legal Process IDs
|
|
89
|
+
# ============================================================================
|
|
90
|
+
puts "3. VALIDATING LEGAL PROCESS IDs"
|
|
91
|
+
puts "-" * 80
|
|
92
|
+
|
|
93
|
+
# Valid IDs (known from Python implementation)
|
|
94
|
+
valid_ids = [
|
|
95
|
+
'68476506020233030000',
|
|
96
|
+
'51808233620233030000',
|
|
97
|
+
'6847650-60.2023.3.03.0000',
|
|
98
|
+
'5180823-36.2023.3.03.0000'
|
|
99
|
+
]
|
|
100
|
+
|
|
101
|
+
puts "Validating known valid IDs:"
|
|
102
|
+
valid_ids.each do |id|
|
|
103
|
+
result = BrazilianUtils::LegalProcessUtils.valid?(id)
|
|
104
|
+
status = result ? "✓ VALID" : "✗ INVALID"
|
|
105
|
+
puts " #{status}: #{id}"
|
|
106
|
+
end
|
|
107
|
+
puts
|
|
108
|
+
|
|
109
|
+
# Invalid IDs
|
|
110
|
+
puts "Validating invalid IDs:"
|
|
111
|
+
invalid_ids = [
|
|
112
|
+
['123', 'wrong length'],
|
|
113
|
+
['12345678901234567890', 'invalid checksum'],
|
|
114
|
+
['1234567-89.2023.0.01.0000', 'invalid órgão (0)'],
|
|
115
|
+
['', 'empty string']
|
|
116
|
+
]
|
|
117
|
+
|
|
118
|
+
invalid_ids.each do |id, reason|
|
|
119
|
+
result = BrazilianUtils::LegalProcessUtils.valid?(id)
|
|
120
|
+
status = result ? "✓ VALID" : "✗ INVALID"
|
|
121
|
+
display = id.empty? ? '(empty)' : id
|
|
122
|
+
puts " #{status}: #{display.ljust(30)} (#{reason})"
|
|
123
|
+
end
|
|
124
|
+
puts
|
|
125
|
+
|
|
126
|
+
# ============================================================================
|
|
127
|
+
# Generating Legal Process IDs
|
|
128
|
+
# ============================================================================
|
|
129
|
+
puts "4. GENERATING LEGAL PROCESS IDs"
|
|
130
|
+
puts "-" * 80
|
|
131
|
+
|
|
132
|
+
# Generate with current year and random órgão
|
|
133
|
+
puts "Generate with defaults (current year, random órgão):"
|
|
134
|
+
3.times do |i|
|
|
135
|
+
id = BrazilianUtils::LegalProcessUtils.generate
|
|
136
|
+
formatted = BrazilianUtils::LegalProcessUtils.format_legal_process(id)
|
|
137
|
+
puts " #{i + 1}. #{formatted}"
|
|
138
|
+
end
|
|
139
|
+
puts
|
|
140
|
+
|
|
141
|
+
# Generate with specific year
|
|
142
|
+
puts "Generate with year 2026:"
|
|
143
|
+
3.times do |i|
|
|
144
|
+
id = BrazilianUtils::LegalProcessUtils.generate(2026)
|
|
145
|
+
formatted = BrazilianUtils::LegalProcessUtils.format_legal_process(id)
|
|
146
|
+
puts " #{i + 1}. #{formatted}"
|
|
147
|
+
end
|
|
148
|
+
puts
|
|
149
|
+
|
|
150
|
+
# Generate for specific órgãos
|
|
151
|
+
puts "Generate for specific órgãos:"
|
|
152
|
+
orgaos = {
|
|
153
|
+
1 => 'STF',
|
|
154
|
+
3 => 'Justiça Militar',
|
|
155
|
+
5 => 'Justiça do Trabalho',
|
|
156
|
+
6 => 'Justiça Federal',
|
|
157
|
+
8 => 'Justiça Estadual'
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
orgaos.each do |orgao, name|
|
|
161
|
+
id = BrazilianUtils::LegalProcessUtils.generate(2026, orgao)
|
|
162
|
+
formatted = BrazilianUtils::LegalProcessUtils.format_legal_process(id)
|
|
163
|
+
puts " Órgão #{orgao} (#{name}): #{formatted}"
|
|
164
|
+
end
|
|
165
|
+
puts
|
|
166
|
+
|
|
167
|
+
# Invalid generation attempts
|
|
168
|
+
puts "Invalid generation attempts:"
|
|
169
|
+
invalid_generations = [
|
|
170
|
+
[2022, 5, 'year in the past'],
|
|
171
|
+
[2026, 0, 'órgão 0 (invalid)'],
|
|
172
|
+
[2026, 10, 'órgão 10 (out of range)']
|
|
173
|
+
]
|
|
174
|
+
|
|
175
|
+
invalid_generations.each do |year, orgao, reason|
|
|
176
|
+
result = BrazilianUtils::LegalProcessUtils.generate(year, orgao)
|
|
177
|
+
puts " ✗ generate(#{year}, #{orgao}) => #{result.inspect} (#{reason})"
|
|
178
|
+
end
|
|
179
|
+
puts
|
|
180
|
+
|
|
181
|
+
# ============================================================================
|
|
182
|
+
# Validation After Generation
|
|
183
|
+
# ============================================================================
|
|
184
|
+
puts "5. VALIDATING GENERATED IDs"
|
|
185
|
+
puts "-" * 80
|
|
186
|
+
|
|
187
|
+
puts "Generating and validating 10 random IDs:"
|
|
188
|
+
10.times do |i|
|
|
189
|
+
id = BrazilianUtils::LegalProcessUtils.generate(2026, rand(1..9))
|
|
190
|
+
is_valid = BrazilianUtils::LegalProcessUtils.valid?(id)
|
|
191
|
+
status = is_valid ? "✓" : "✗"
|
|
192
|
+
formatted = BrazilianUtils::LegalProcessUtils.format_legal_process(id)
|
|
193
|
+
puts " #{status} #{i + 1}. #{formatted}"
|
|
194
|
+
end
|
|
195
|
+
puts
|
|
196
|
+
|
|
197
|
+
# ============================================================================
|
|
198
|
+
# Complete Workflow Example
|
|
199
|
+
# ============================================================================
|
|
200
|
+
puts "6. COMPLETE WORKFLOW: GENERATE → FORMAT → VALIDATE"
|
|
201
|
+
puts "-" * 80
|
|
202
|
+
|
|
203
|
+
process_id = BrazilianUtils::LegalProcessUtils.generate(2026, 5)
|
|
204
|
+
puts "Step 1 - Generate ID: #{process_id}"
|
|
205
|
+
|
|
206
|
+
formatted = BrazilianUtils::LegalProcessUtils.format_legal_process(process_id)
|
|
207
|
+
puts "Step 2 - Format ID: #{formatted}"
|
|
208
|
+
|
|
209
|
+
is_valid = BrazilianUtils::LegalProcessUtils.valid?(process_id)
|
|
210
|
+
puts "Step 3 - Validate: #{is_valid ? '✓ Valid' : '✗ Invalid'}"
|
|
211
|
+
|
|
212
|
+
# Extract information
|
|
213
|
+
parts = formatted.split(/[-.]/)
|
|
214
|
+
puts
|
|
215
|
+
puts "Extracted Information:"
|
|
216
|
+
puts " Sequential Number: #{parts[0]}"
|
|
217
|
+
puts " Checksum: #{parts[1]}"
|
|
218
|
+
puts " Year: #{parts[2]}"
|
|
219
|
+
puts " Órgão: #{parts[3]}"
|
|
220
|
+
puts " Tribunal: #{parts[4]}"
|
|
221
|
+
puts " Foro: #{parts[5]}"
|
|
222
|
+
puts
|
|
223
|
+
|
|
224
|
+
# ============================================================================
|
|
225
|
+
# Real-World Use Case: Form Validation
|
|
226
|
+
# ============================================================================
|
|
227
|
+
puts "7. REAL-WORLD USE CASE: FORM VALIDATION"
|
|
228
|
+
puts "-" * 80
|
|
229
|
+
|
|
230
|
+
def validate_legal_process_form(process_id, description)
|
|
231
|
+
errors = []
|
|
232
|
+
|
|
233
|
+
errors << "Process ID is required" if process_id.nil? || process_id.empty?
|
|
234
|
+
errors << "Description is required" if description.nil? || description.empty?
|
|
235
|
+
|
|
236
|
+
if process_id && !process_id.empty?
|
|
237
|
+
unless BrazilianUtils::LegalProcessUtils.valid?(process_id)
|
|
238
|
+
errors << "Invalid legal process ID format"
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
if errors.empty?
|
|
243
|
+
clean_id = BrazilianUtils::LegalProcessUtils.remove_symbols(process_id)
|
|
244
|
+
formatted_id = BrazilianUtils::LegalProcessUtils.format_legal_process(clean_id)
|
|
245
|
+
{
|
|
246
|
+
valid: true,
|
|
247
|
+
message: "Form is valid",
|
|
248
|
+
clean_id: clean_id,
|
|
249
|
+
formatted_id: formatted_id
|
|
250
|
+
}
|
|
251
|
+
else
|
|
252
|
+
{ valid: false, errors: errors }
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
test_forms = [
|
|
257
|
+
{ id: '6847650-60.2023.3.03.0000', desc: 'Military Court Case' },
|
|
258
|
+
{ id: '51808233620233030000', desc: 'Another Case' },
|
|
259
|
+
{ id: '12345678901234567890', desc: 'Invalid ID' },
|
|
260
|
+
{ id: '', desc: 'Empty ID Case' }
|
|
261
|
+
]
|
|
262
|
+
|
|
263
|
+
test_forms.each_with_index do |form, index|
|
|
264
|
+
puts "\nTest Form #{index + 1}:"
|
|
265
|
+
puts " Process ID: #{form[:id].inspect}"
|
|
266
|
+
puts " Description: #{form[:desc]}"
|
|
267
|
+
|
|
268
|
+
result = validate_legal_process_form(form[:id], form[:desc])
|
|
269
|
+
|
|
270
|
+
if result[:valid]
|
|
271
|
+
puts " Status: ✓ #{result[:message]}"
|
|
272
|
+
puts " Clean ID: #{result[:clean_id]}"
|
|
273
|
+
puts " Formatted: #{result[:formatted_id]}"
|
|
274
|
+
else
|
|
275
|
+
puts " Status: ✗ Validation failed"
|
|
276
|
+
result[:errors].each do |error|
|
|
277
|
+
puts " - #{error}"
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
puts
|
|
282
|
+
|
|
283
|
+
# ============================================================================
|
|
284
|
+
# Batch Processing
|
|
285
|
+
# ============================================================================
|
|
286
|
+
puts "8. BATCH PROCESSING"
|
|
287
|
+
puts "-" * 80
|
|
288
|
+
|
|
289
|
+
legal_processes = [
|
|
290
|
+
'68476506020233030000',
|
|
291
|
+
'51808233620233030000',
|
|
292
|
+
'12345678901234567890',
|
|
293
|
+
'6847650-60.2023.3.03.0000',
|
|
294
|
+
'123',
|
|
295
|
+
'invalid'
|
|
296
|
+
]
|
|
297
|
+
|
|
298
|
+
valid_count = 0
|
|
299
|
+
invalid_count = 0
|
|
300
|
+
|
|
301
|
+
puts "Processing #{legal_processes.length} legal process IDs:"
|
|
302
|
+
legal_processes.each do |id|
|
|
303
|
+
is_valid = BrazilianUtils::LegalProcessUtils.valid?(id)
|
|
304
|
+
|
|
305
|
+
if is_valid
|
|
306
|
+
valid_count += 1
|
|
307
|
+
formatted = BrazilianUtils::LegalProcessUtils.format_legal_process(
|
|
308
|
+
BrazilianUtils::LegalProcessUtils.remove_symbols(id)
|
|
309
|
+
)
|
|
310
|
+
puts " ✓ #{formatted}"
|
|
311
|
+
else
|
|
312
|
+
invalid_count += 1
|
|
313
|
+
puts " ✗ #{id.inspect} (invalid)"
|
|
314
|
+
end
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
puts
|
|
318
|
+
puts "Summary:"
|
|
319
|
+
puts " Total: #{legal_processes.length}"
|
|
320
|
+
puts " Valid: #{valid_count} (#{(valid_count * 100.0 / legal_processes.length).round(1)}%)"
|
|
321
|
+
puts " Invalid: #{invalid_count} (#{(invalid_count * 100.0 / legal_processes.length).round(1)}%)"
|
|
322
|
+
puts
|
|
323
|
+
|
|
324
|
+
# ============================================================================
|
|
325
|
+
# Format Conversion
|
|
326
|
+
# ============================================================================
|
|
327
|
+
puts "9. FORMAT CONVERSION: FORMATTED ↔ CLEAN"
|
|
328
|
+
puts "-" * 80
|
|
329
|
+
|
|
330
|
+
conversion_examples = [
|
|
331
|
+
'6847650-60.2023.3.03.0000',
|
|
332
|
+
'5180823-36.2023.3.03.0000'
|
|
333
|
+
]
|
|
334
|
+
|
|
335
|
+
puts "Converting between formatted and clean formats:"
|
|
336
|
+
conversion_examples.each do |formatted|
|
|
337
|
+
puts "\nOriginal (formatted): #{formatted}"
|
|
338
|
+
|
|
339
|
+
# Convert to clean
|
|
340
|
+
clean = BrazilianUtils::LegalProcessUtils.remove_symbols(formatted)
|
|
341
|
+
puts " → Clean: #{clean}"
|
|
342
|
+
|
|
343
|
+
# Convert back to formatted
|
|
344
|
+
reformatted = BrazilianUtils::LegalProcessUtils.format_legal_process(clean)
|
|
345
|
+
puts " → Format: #{reformatted}"
|
|
346
|
+
|
|
347
|
+
# Verify both formats are valid
|
|
348
|
+
valid_formatted = BrazilianUtils::LegalProcessUtils.valid?(formatted)
|
|
349
|
+
valid_clean = BrazilianUtils::LegalProcessUtils.valid?(clean)
|
|
350
|
+
puts " → Both formats valid: #{valid_formatted && valid_clean}"
|
|
351
|
+
end
|
|
352
|
+
puts
|
|
353
|
+
|
|
354
|
+
# ============================================================================
|
|
355
|
+
# Generate IDs for All Órgãos
|
|
356
|
+
# ============================================================================
|
|
357
|
+
puts "10. GENERATE IDs FOR ALL ÓRGÃOS"
|
|
358
|
+
puts "-" * 80
|
|
359
|
+
|
|
360
|
+
all_orgaos = {
|
|
361
|
+
1 => 'Supremo Tribunal Federal (STF)',
|
|
362
|
+
2 => 'Conselho Nacional de Justiça (CNJ)',
|
|
363
|
+
3 => 'Justiça Militar',
|
|
364
|
+
4 => 'Justiça Eleitoral',
|
|
365
|
+
5 => 'Justiça do Trabalho',
|
|
366
|
+
6 => 'Justiça Federal',
|
|
367
|
+
7 => 'Justiça Estadual',
|
|
368
|
+
8 => 'Justiça dos Estados e DF',
|
|
369
|
+
9 => 'Justiça Militar Estadual'
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
puts "Generating one ID for each órgão:"
|
|
373
|
+
all_orgaos.each do |orgao, name|
|
|
374
|
+
id = BrazilianUtils::LegalProcessUtils.generate(2026, orgao)
|
|
375
|
+
formatted = BrazilianUtils::LegalProcessUtils.format_legal_process(id)
|
|
376
|
+
is_valid = BrazilianUtils::LegalProcessUtils.valid?(id)
|
|
377
|
+
status = is_valid ? "✓" : "✗"
|
|
378
|
+
puts " #{status} Órgão #{orgao}: #{formatted}"
|
|
379
|
+
puts " #{name}"
|
|
380
|
+
end
|
|
381
|
+
puts
|
|
382
|
+
|
|
383
|
+
# ============================================================================
|
|
384
|
+
# Database Storage Example
|
|
385
|
+
# ============================================================================
|
|
386
|
+
puts "11. DATABASE STORAGE EXAMPLE"
|
|
387
|
+
puts "-" * 80
|
|
388
|
+
|
|
389
|
+
puts "Simulating database operations:"
|
|
390
|
+
puts
|
|
391
|
+
|
|
392
|
+
# User submits a formatted ID
|
|
393
|
+
user_input = '6847650-60.2023.3.03.0000'
|
|
394
|
+
puts "User input: #{user_input}"
|
|
395
|
+
|
|
396
|
+
# Validate
|
|
397
|
+
if BrazilianUtils::LegalProcessUtils.valid?(user_input)
|
|
398
|
+
# Clean for storage (remove formatting)
|
|
399
|
+
db_format = BrazilianUtils::LegalProcessUtils.remove_symbols(user_input)
|
|
400
|
+
puts "✓ Valid! Storing in database: #{db_format}"
|
|
401
|
+
|
|
402
|
+
# Later, retrieve and format for display
|
|
403
|
+
puts "Retrieved from database: #{db_format}"
|
|
404
|
+
display_format = BrazilianUtils::LegalProcessUtils.format_legal_process(db_format)
|
|
405
|
+
puts "Formatted for display: #{display_format}"
|
|
406
|
+
else
|
|
407
|
+
puts "✗ Invalid legal process ID - rejecting input"
|
|
408
|
+
end
|
|
409
|
+
puts
|
|
410
|
+
|
|
411
|
+
# ============================================================================
|
|
412
|
+
# Statistics
|
|
413
|
+
# ============================================================================
|
|
414
|
+
puts "12. GENERATION STATISTICS"
|
|
415
|
+
puts "-" * 80
|
|
416
|
+
|
|
417
|
+
puts "Generating 100 random legal process IDs and analyzing..."
|
|
418
|
+
|
|
419
|
+
generated_ids = 100.times.map do
|
|
420
|
+
BrazilianUtils::LegalProcessUtils.generate(2026, rand(1..9))
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
# Count by órgão
|
|
424
|
+
orgao_counts = Hash.new(0)
|
|
425
|
+
generated_ids.each do |id|
|
|
426
|
+
orgao = id[13, 1].to_i
|
|
427
|
+
orgao_counts[orgao] += 1
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
puts "Distribution by Órgão:"
|
|
431
|
+
orgao_counts.sort.each do |orgao, count|
|
|
432
|
+
percentage = (count * 100.0 / generated_ids.length).round(1)
|
|
433
|
+
bar = '█' * (count / 2)
|
|
434
|
+
puts " Órgão #{orgao}: #{count.to_s.rjust(3)} (#{percentage.to_s.rjust(5)}%) #{bar}"
|
|
435
|
+
end
|
|
436
|
+
|
|
437
|
+
# Verify all are valid
|
|
438
|
+
all_valid = generated_ids.all? { |id| BrazilianUtils::LegalProcessUtils.valid?(id) }
|
|
439
|
+
puts "\nAll generated IDs are valid: #{all_valid ? '✓ Yes' : '✗ No'}"
|
|
440
|
+
puts
|
|
441
|
+
|
|
442
|
+
puts "=" * 80
|
|
443
|
+
puts "Examples completed!"
|
|
444
|
+
puts "=" * 80
|