@77sol-lab/form-schemas 1.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.
Files changed (50) hide show
  1. package/README.md +182 -0
  2. package/package.json +61 -0
  3. package/src/domains/financing/enums/banks.ts +22 -0
  4. package/src/domains/financing/enums/index.ts +2 -0
  5. package/src/domains/financing/enums/occupation.ts +2 -0
  6. package/src/domains/financing/formalization/extras.ts +21 -0
  7. package/src/domains/financing/formalization/index.ts +18 -0
  8. package/src/domains/financing/formalization/refinements.ts +70 -0
  9. package/src/domains/financing/formalization/registry.ts +153 -0
  10. package/src/domains/financing/formalization/schemas/AlfaPFSchema.ts +46 -0
  11. package/src/domains/financing/formalization/schemas/AlfaPJSchema.ts +65 -0
  12. package/src/domains/financing/formalization/schemas/BancoDoBrasilPFSchema.ts +46 -0
  13. package/src/domains/financing/formalization/schemas/BancoDoBrasilPJSchema.ts +65 -0
  14. package/src/domains/financing/formalization/schemas/BtgPFSchema.ts +46 -0
  15. package/src/domains/financing/formalization/schemas/BtgPJSchema.ts +77 -0
  16. package/src/domains/financing/formalization/schemas/BvPFSchema.ts +59 -0
  17. package/src/domains/financing/formalization/schemas/BvPJSchema.ts +84 -0
  18. package/src/domains/financing/formalization/schemas/CaixaEconomicaFederalPFSchema.ts +48 -0
  19. package/src/domains/financing/formalization/schemas/CaixaEconomicaFederalPJSchema.ts +67 -0
  20. package/src/domains/financing/formalization/schemas/CashMePFSchema.ts +46 -0
  21. package/src/domains/financing/formalization/schemas/CashMePJSchema.ts +65 -0
  22. package/src/domains/financing/formalization/schemas/Credito77PFSchema.ts +46 -0
  23. package/src/domains/financing/formalization/schemas/Credito77PJSchema.ts +65 -0
  24. package/src/domains/financing/formalization/schemas/EosPFSchema.ts +46 -0
  25. package/src/domains/financing/formalization/schemas/EosPJSchema.ts +65 -0
  26. package/src/domains/financing/formalization/schemas/HdtEnergyPFSchema.ts +46 -0
  27. package/src/domains/financing/formalization/schemas/HdtEnergyPJSchema.ts +65 -0
  28. package/src/domains/financing/formalization/schemas/LosangoPFSchema.ts +46 -0
  29. package/src/domains/financing/formalization/schemas/LosangoPJSchema.ts +65 -0
  30. package/src/domains/financing/formalization/schemas/SafraPFSchema.ts +46 -0
  31. package/src/domains/financing/formalization/schemas/SafraPJSchema.ts +65 -0
  32. package/src/domains/financing/formalization/schemas/SantanderPFSchema.ts +46 -0
  33. package/src/domains/financing/formalization/schemas/SantanderPJSchema.ts +65 -0
  34. package/src/domains/financing/formalization/schemas/SolAgoraPFSchema.ts +46 -0
  35. package/src/domains/financing/formalization/schemas/SolAgoraPJSchema.ts +75 -0
  36. package/src/domains/financing/formalization/schemas/SolfacilPFSchema.ts +46 -0
  37. package/src/domains/financing/formalization/schemas/SolfacilPJSchema.ts +70 -0
  38. package/src/domains/financing/formalization/uiMeta.ts +122 -0
  39. package/src/domains/financing/index.ts +1 -0
  40. package/src/index.ts +1 -0
  41. package/src/shared/enums/document-type.ts +4 -0
  42. package/src/shared/enums/index.ts +3 -0
  43. package/src/shared/enums/nationality.ts +2 -0
  44. package/src/shared/enums/sex.ts +4 -0
  45. package/src/shared/fields/index.ts +1 -0
  46. package/src/shared/fields/primitives.ts +32 -0
  47. package/src/shared/regex/index.ts +75 -0
  48. package/src/shared/regex/patterns.ts +15 -0
  49. package/src/shared/regex/validators.spec.ts +162 -0
  50. package/src/shared/regex/validators.ts +96 -0
@@ -0,0 +1,96 @@
1
+ export function onlyDigits(value: string): string {
2
+ return value.replace(/\D/g, '')
3
+ }
4
+
5
+ export function isValidCPF(value: string): boolean {
6
+ const cpf = onlyDigits(value)
7
+ if (cpf.length !== 11) {
8
+ return false
9
+ }
10
+ if (/^(\d)\1{10}$/.test(cpf)) {
11
+ return false
12
+ }
13
+
14
+ const calcCheck = (slice: number): number => {
15
+ let sum = 0
16
+ for (let i = 0; i < slice; i++) {
17
+ sum += Number(cpf[i]) * (slice + 1 - i)
18
+ }
19
+ const rest = (sum * 10) % 11
20
+ return rest === 10 ? 0 : rest
21
+ }
22
+
23
+ return calcCheck(9) === Number(cpf[9]) && calcCheck(10) === Number(cpf[10])
24
+ }
25
+
26
+ export function isValidCNPJ(value: string): boolean {
27
+ const cnpj = onlyDigits(value)
28
+ if (cnpj.length !== 14) {
29
+ return false
30
+ }
31
+ if (/^(\d)\1{13}$/.test(cnpj)) {
32
+ return false
33
+ }
34
+
35
+ const calcCheck = (length: number): number => {
36
+ const weights =
37
+ length === 12 ? [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] : [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
38
+ let sum = 0
39
+ for (const [i, weight] of weights.entries()) {
40
+ sum += Number(cnpj[i]) * weight
41
+ }
42
+ const rest = sum % 11
43
+ return rest < 2 ? 0 : 11 - rest
44
+ }
45
+
46
+ return calcCheck(12) === Number(cnpj[12]) && calcCheck(13) === Number(cnpj[13])
47
+ }
48
+
49
+ export function parseDMY(value: string): Date | null {
50
+ const match = /^(\d{2})\/(\d{2})\/(\d{4})$/.exec(value)
51
+ if (!match) {
52
+ return null
53
+ }
54
+ const [, dd, mm, yyyy] = match
55
+ const day = Number(dd)
56
+ const month = Number(mm)
57
+ const year = Number(yyyy)
58
+ const date = new Date(year, month - 1, day)
59
+ if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
60
+ return null
61
+ }
62
+ return date
63
+ }
64
+
65
+ export function ageInYears(birth: Date, reference: Date = new Date()): number {
66
+ let age = reference.getFullYear() - birth.getFullYear()
67
+ const monthDiff = reference.getMonth() - birth.getMonth()
68
+ if (monthDiff < 0 || (monthDiff === 0 && reference.getDate() < birth.getDate())) {
69
+ age--
70
+ }
71
+ return age
72
+ }
73
+
74
+ export function isAdultDMY(value: string, reference?: Date): boolean {
75
+ const date = parseDMY(value)
76
+ if (!date) {
77
+ return false
78
+ }
79
+ return ageInYears(date, reference) >= 18
80
+ }
81
+
82
+ export function isNotFutureDMY(value: string, reference: Date = new Date()): boolean {
83
+ const date = parseDMY(value)
84
+ if (!date) {
85
+ return false
86
+ }
87
+ return date.getTime() <= reference.getTime()
88
+ }
89
+
90
+ export function yearsSinceDMY(value: string, reference: Date = new Date()): number | null {
91
+ const date = parseDMY(value)
92
+ if (!date) {
93
+ return null
94
+ }
95
+ return ageInYears(date, reference)
96
+ }