@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.
- package/README.md +182 -0
- package/package.json +61 -0
- package/src/domains/financing/enums/banks.ts +22 -0
- package/src/domains/financing/enums/index.ts +2 -0
- package/src/domains/financing/enums/occupation.ts +2 -0
- package/src/domains/financing/formalization/extras.ts +21 -0
- package/src/domains/financing/formalization/index.ts +18 -0
- package/src/domains/financing/formalization/refinements.ts +70 -0
- package/src/domains/financing/formalization/registry.ts +153 -0
- package/src/domains/financing/formalization/schemas/AlfaPFSchema.ts +46 -0
- package/src/domains/financing/formalization/schemas/AlfaPJSchema.ts +65 -0
- package/src/domains/financing/formalization/schemas/BancoDoBrasilPFSchema.ts +46 -0
- package/src/domains/financing/formalization/schemas/BancoDoBrasilPJSchema.ts +65 -0
- package/src/domains/financing/formalization/schemas/BtgPFSchema.ts +46 -0
- package/src/domains/financing/formalization/schemas/BtgPJSchema.ts +77 -0
- package/src/domains/financing/formalization/schemas/BvPFSchema.ts +59 -0
- package/src/domains/financing/formalization/schemas/BvPJSchema.ts +84 -0
- package/src/domains/financing/formalization/schemas/CaixaEconomicaFederalPFSchema.ts +48 -0
- package/src/domains/financing/formalization/schemas/CaixaEconomicaFederalPJSchema.ts +67 -0
- package/src/domains/financing/formalization/schemas/CashMePFSchema.ts +46 -0
- package/src/domains/financing/formalization/schemas/CashMePJSchema.ts +65 -0
- package/src/domains/financing/formalization/schemas/Credito77PFSchema.ts +46 -0
- package/src/domains/financing/formalization/schemas/Credito77PJSchema.ts +65 -0
- package/src/domains/financing/formalization/schemas/EosPFSchema.ts +46 -0
- package/src/domains/financing/formalization/schemas/EosPJSchema.ts +65 -0
- package/src/domains/financing/formalization/schemas/HdtEnergyPFSchema.ts +46 -0
- package/src/domains/financing/formalization/schemas/HdtEnergyPJSchema.ts +65 -0
- package/src/domains/financing/formalization/schemas/LosangoPFSchema.ts +46 -0
- package/src/domains/financing/formalization/schemas/LosangoPJSchema.ts +65 -0
- package/src/domains/financing/formalization/schemas/SafraPFSchema.ts +46 -0
- package/src/domains/financing/formalization/schemas/SafraPJSchema.ts +65 -0
- package/src/domains/financing/formalization/schemas/SantanderPFSchema.ts +46 -0
- package/src/domains/financing/formalization/schemas/SantanderPJSchema.ts +65 -0
- package/src/domains/financing/formalization/schemas/SolAgoraPFSchema.ts +46 -0
- package/src/domains/financing/formalization/schemas/SolAgoraPJSchema.ts +75 -0
- package/src/domains/financing/formalization/schemas/SolfacilPFSchema.ts +46 -0
- package/src/domains/financing/formalization/schemas/SolfacilPJSchema.ts +70 -0
- package/src/domains/financing/formalization/uiMeta.ts +122 -0
- package/src/domains/financing/index.ts +1 -0
- package/src/index.ts +1 -0
- package/src/shared/enums/document-type.ts +4 -0
- package/src/shared/enums/index.ts +3 -0
- package/src/shared/enums/nationality.ts +2 -0
- package/src/shared/enums/sex.ts +4 -0
- package/src/shared/fields/index.ts +1 -0
- package/src/shared/fields/primitives.ts +32 -0
- package/src/shared/regex/index.ts +75 -0
- package/src/shared/regex/patterns.ts +15 -0
- package/src/shared/regex/validators.spec.ts +162 -0
- 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
|
+
}
|