@hed-hog/contact 0.0.266 → 0.0.274

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 (83) hide show
  1. package/README.md +470 -0
  2. package/dist/address-type.enum.d.ts +10 -0
  3. package/dist/address-type.enum.d.ts.map +1 -0
  4. package/dist/address-type.enum.js +14 -0
  5. package/dist/address-type.enum.js.map +1 -0
  6. package/dist/contact.module.d.ts.map +1 -1
  7. package/dist/contact.module.js +0 -2
  8. package/dist/contact.module.js.map +1 -1
  9. package/dist/contact.service.d.ts +19 -22
  10. package/dist/contact.service.d.ts.map +1 -1
  11. package/dist/contact.service.js +22 -2
  12. package/dist/contact.service.js.map +1 -1
  13. package/dist/index.d.ts +5 -8
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +1 -4
  16. package/dist/index.js.map +1 -1
  17. package/dist/person/dto/create.dto.d.ts +14 -0
  18. package/dist/person/dto/create.dto.d.ts.map +1 -1
  19. package/dist/person/dto/create.dto.js +52 -1
  20. package/dist/person/dto/create.dto.js.map +1 -1
  21. package/dist/person/dto/interaction-create.dto.d.ts +16 -0
  22. package/dist/person/dto/interaction-create.dto.d.ts.map +1 -0
  23. package/dist/person/dto/interaction-create.dto.js +57 -0
  24. package/dist/person/dto/interaction-create.dto.js.map +1 -0
  25. package/dist/person/dto/update.dto.d.ts +17 -1
  26. package/dist/person/dto/update.dto.d.ts.map +1 -1
  27. package/dist/person/dto/update.dto.js +79 -3
  28. package/dist/person/dto/update.dto.js.map +1 -1
  29. package/dist/person/person.controller.d.ts +37 -8
  30. package/dist/person/person.controller.d.ts.map +1 -1
  31. package/dist/person/person.controller.js +29 -3
  32. package/dist/person/person.controller.js.map +1 -1
  33. package/dist/person/person.service.d.ts +71 -13
  34. package/dist/person/person.service.d.ts.map +1 -1
  35. package/dist/person/person.service.js +762 -108
  36. package/dist/person/person.service.js.map +1 -1
  37. package/dist/person-relation-type/person-relation-type.controller.d.ts +13 -9
  38. package/dist/person-relation-type/person-relation-type.controller.d.ts.map +1 -1
  39. package/dist/person-relation-type/person-relation-type.service.d.ts +16 -20
  40. package/dist/person-relation-type/person-relation-type.service.d.ts.map +1 -1
  41. package/dist/person-relation-type/person-relation-type.service.js +48 -41
  42. package/dist/person-relation-type/person-relation-type.service.js.map +1 -1
  43. package/hedhog/data/menu.yaml +2 -16
  44. package/hedhog/data/role.yaml +9 -1
  45. package/hedhog/data/route.yaml +10 -21
  46. package/hedhog/data/setting_group.yaml +21 -0
  47. package/hedhog/frontend/app/person/_components/delete-person-dialog.tsx.ejs +59 -0
  48. package/hedhog/frontend/app/person/_components/person-field-with-create.tsx.ejs +831 -0
  49. package/hedhog/frontend/app/person/_components/person-form-sheet.tsx.ejs +2277 -0
  50. package/hedhog/frontend/app/person/_components/person-types.ts.ejs +157 -0
  51. package/hedhog/frontend/app/person/page.tsx.ejs +1158 -1335
  52. package/hedhog/frontend/messages/en.json +114 -4
  53. package/hedhog/frontend/messages/pt.json +155 -4
  54. package/hedhog/table/person.yaml +7 -0
  55. package/hedhog/table/person_address.yaml +18 -0
  56. package/hedhog/table/person_company.yaml +26 -11
  57. package/hedhog/table/person_individual.yaml +4 -0
  58. package/hedhog/table/person_individual_relation.yaml +39 -0
  59. package/package.json +6 -5
  60. package/src/address-type.enum.ts +9 -0
  61. package/src/contact.module.ts +46 -48
  62. package/src/contact.service.ts +28 -13
  63. package/src/index.ts +6 -13
  64. package/src/language/en.json +8 -1
  65. package/src/language/pt.json +9 -1
  66. package/src/person/dto/create.dto.ts +49 -1
  67. package/src/person/dto/update.dto.ts +75 -3
  68. package/src/person/person.controller.ts +31 -14
  69. package/src/person/person.service.ts +1019 -121
  70. package/src/person-relation-type/person-relation-type.service.ts +84 -76
  71. package/hedhog/data/address_type.yaml +0 -28
  72. package/hedhog/frontend/app/address-type/page.tsx.ejs +0 -480
  73. package/hedhog/query/add-unique-address-type-locale.sql +0 -3
  74. package/hedhog/table/address.yaml +0 -28
  75. package/hedhog/table/address_type.yaml +0 -11
  76. package/hedhog/table/person_relation.yaml +0 -20
  77. package/hedhog/table/person_relation_type.yaml +0 -6
  78. package/src/address-type/address-type.controller.ts +0 -55
  79. package/src/address-type/address-type.enum.ts +0 -9
  80. package/src/address-type/address-type.module.ts +0 -18
  81. package/src/address-type/address-type.service.ts +0 -121
  82. package/src/address-type/dto/create.dto.ts +0 -19
  83. package/src/address-type/dto/update.dto.ts +0 -9
@@ -1,8 +1,12 @@
1
1
  {
2
2
  "ContactPage": {
3
3
  "title": "People and Companies",
4
+ "titleIndividualOnly": "People",
4
5
  "description": "Contact Management",
6
+ "heroDescription": "Manage your contacts and companies",
7
+ "heroDescriptionIndividualOnly": "Manage your contacts",
5
8
  "addNew": "New Contact",
9
+ "newPerson": "New Person",
6
10
  "edit": "Edit Contact",
7
11
  "delete": "Delete",
8
12
  "view": "View Details",
@@ -14,8 +18,12 @@
14
18
  "actions": "Actions",
15
19
  "search": "Search contacts...",
16
20
  "searchPlaceholder": "Search",
21
+ "searchByNamePlaceholder": "Search by name...",
17
22
  "filterByType": "Filter by type",
18
23
  "filterByStatus": "Filter by status",
24
+ "viewMode": "View",
25
+ "viewModeTable": "Table",
26
+ "viewModeCards": "Cards",
19
27
  "allStatuses": "All statuses",
20
28
  "allTypes": "All types",
21
29
  "all": "All",
@@ -31,6 +39,7 @@
31
39
  "deleteError": "Failed to delete contact",
32
40
  "deleteConfirmTitle": "Delete Contact",
33
41
  "deleteConfirmDescription": "Are you sure you want to delete this contact? This action cannot be undone.",
42
+ "deleteConfirmDescriptionWithName": "Are you sure you want to delete {name}? This action cannot be undone.",
34
43
  "cancel": "Cancel",
35
44
  "confirm": "Confirm",
36
45
  "save": "Save",
@@ -52,9 +61,11 @@
52
61
  "documentType": "Document Type",
53
62
  "documentValuePlaceholder": "Value",
54
63
  "documentValue": "Value",
55
- "addContact": "Add Contact",
56
- "addAddress": "Add Address",
57
- "addDocument": "Add Document",
64
+ "addContact": "Contact",
65
+ "addEmail": "Email",
66
+ "addPhone": "Phone",
67
+ "addAddress": "Address",
68
+ "addDocument": "Document",
58
69
  "noContacts": "No contacts added yet",
59
70
  "noAddresses": "No addresses added yet",
60
71
  "noDocuments": "No documents added yet",
@@ -76,10 +87,40 @@
76
87
  "columnActions": "Actions",
77
88
  "loading": "Loading contacts...",
78
89
  "emptyState": "No people found. Adjust the filters to see more results.",
90
+ "emptyStateTitle": "No people found",
91
+ "emptyStateDescription": "Start by adding your first person or adjust the filters to see more results.",
79
92
  "dialogCreateTitle": "Add New Contact",
80
93
  "dialogCreateDescription": "Create a new individual or company record",
94
+ "sheetCreateTitle": "New Person",
95
+ "sheetCreateDescription": "Register basic data, contacts, addresses and documents in a single flow.",
96
+ "sheetCreateDescriptionIndividualOnly": "Register basic individual data, contacts, addresses and documents in a single flow.",
97
+ "sheetEditTitle": "Edit Person",
98
+ "sheetEditDescription": "Update the basic data, contacts, addresses and documents for this person.",
99
+ "sheetBasicDescription": "Set the record type, the main name and the current status.",
100
+ "sheetContactsDescription": "Add contact channels and mark the primary ones.",
101
+ "sheetAddressesDescription": "Manage addresses and use the postal code to fill data automatically.",
102
+ "sheetDocumentsDescription": "Attach relevant documents to the record.",
81
103
  "typeOfPerson": "Type of Person",
82
104
  "selectType": "Select type",
105
+ "birthDate": "Birth Date",
106
+ "selectDate": "Select date",
107
+ "gender": "Gender",
108
+ "selectGender": "Select gender",
109
+ "genderMale": "Male",
110
+ "genderFemale": "Female",
111
+ "genderOther": "Other",
112
+ "jobTitle": "Job Title",
113
+ "jobTitlePlaceholder": "E.g. Financial Analyst",
114
+ "employerCompany": "Employer",
115
+ "employerCompanyPlaceholder": "Select the employer company",
116
+ "noEmployerCompany": "No employer linked",
117
+ "tradeName": "Trade Name",
118
+ "tradeNamePlaceholder": "Company trade name",
119
+ "foundationDate": "Foundation Date",
120
+ "legalNature": "Legal Nature",
121
+ "legalNaturePlaceholder": "E.g. LLC, Inc.",
122
+ "notes": "Notes",
123
+ "notesPlaceholder": "Additional notes...",
83
124
  "createPerson": "Create Person",
84
125
  "editPerson": "Edit Person",
85
126
  "editPersonDescription": "Update person information, contacts, addresses and documents",
@@ -90,8 +131,16 @@
90
131
  "editTabAddresses": "Addresses",
91
132
  "editTabDocuments": "Documents",
92
133
  "selectContactType": "Select type",
134
+ "selectDocumentType": "Select type",
93
135
  "main": "Main",
94
136
  "selectAddressType": "Select address type",
137
+ "addressTypeResidential": "Residential",
138
+ "addressTypeCommercial": "Commercial",
139
+ "addressTypeCorrespondence": "Correspondence",
140
+ "addressTypeAlternative": "Alternative",
141
+ "addressTypeWork": "Work",
142
+ "addressTypeBilling": "Billing",
143
+ "addressTypeShipping": "Shipping",
95
144
  "address": "Address",
96
145
  "addressPlaceholder": "Address",
97
146
  "addressComplement": "Complement",
@@ -105,10 +154,71 @@
105
154
  "personDetails": "Person Details",
106
155
  "viewAllRegisteredData": "View all registered data",
107
156
  "dialogBasicInformationTitle": "Basic Information",
157
+ "avatarUpload": "Upload Avatar",
158
+ "avatarReplace": "Replace Avatar",
159
+ "avatarRemove": "Remove Avatar",
160
+ "avatarGuidelines": "JPG, PNG or GIF. Max 5MB.",
161
+ "avatarUploadingProgress": "Uploading avatar... {progress}%",
162
+ "avatarUploadSuccess": "Avatar uploaded successfully.",
163
+ "avatarUploadError": "Failed to upload avatar.",
164
+ "avatarRemoveSuccess": "Avatar removed.",
165
+ "avatarInvalidType": "Select a valid image file.",
166
+ "avatarTooLarge": "Image must be at most 5MB.",
108
167
  "createdAt": "Created at",
109
168
  "close": "Close",
110
169
  "copiedToClipboard": "Copied to clipboard!",
111
- "buttonEditUser": "Edit"
170
+ "buttonEditUser": "Edit",
171
+ "saving": "Saving...",
172
+ "resultsCount": "{count} result(s)",
173
+ "rowsPerPage": "Rows per page",
174
+ "paginationLabel": "Page {current} of {total}"
175
+ },
176
+ "PersonFieldWithCreate": {
177
+ "sheet": {
178
+ "title": "New {entityLabel}",
179
+ "description": "Only name and type are required. You can complete the remaining data now or later.",
180
+ "descriptionIndividualOnly": "Only name is required. You can complete the remaining data now or later."
181
+ },
182
+ "common": {
183
+ "select": "Select"
184
+ },
185
+ "types": {
186
+ "individual": "Individual",
187
+ "company": "Company"
188
+ },
189
+ "fields": {
190
+ "name": "Name",
191
+ "type": "Type",
192
+ "documentIndividualOptional": "CPF (optional)",
193
+ "documentCompanyOptional": "CNPJ (optional)",
194
+ "emailOptional": "Email (optional)",
195
+ "phoneOptional": "Phone (optional)",
196
+ "addressOptional": "Address (optional)"
197
+ },
198
+ "placeholders": {
199
+ "name": "Name of {entityLabel}",
200
+ "email": "{entityLabel}@company.com",
201
+ "phone": "(11) 99999-9999",
202
+ "addressLine1": "Street, number, complement",
203
+ "city": "City",
204
+ "state": "State"
205
+ },
206
+ "search": {
207
+ "placeholder": "Type to search person...",
208
+ "loading": "Searching people...",
209
+ "noResults": "No person found"
210
+ },
211
+ "actions": {
212
+ "cancel": "Cancel",
213
+ "saveEntity": "Save {entityLabel}",
214
+ "createNew": "Create new record",
215
+ "clearSelection": "Clear selection",
216
+ "createEntityAria": "Create new {entityLabel}"
217
+ },
218
+ "messages": {
219
+ "createdSuccess": "{entityLabel} created successfully",
220
+ "createdError": "Could not create {entityLabel}"
221
+ }
112
222
  },
113
223
  "AddressType": {
114
224
  "breadcrumbContact": "Contact",
@@ -1,8 +1,12 @@
1
1
  {
2
2
  "ContactPage": {
3
3
  "title": "Pessoas e Empresas",
4
+ "titleIndividualOnly": "Pessoas",
4
5
  "description": "Gerenciamento de Contatos",
6
+ "heroDescription": "Gerencie seus contatos e empresas",
7
+ "heroDescriptionIndividualOnly": "Gerencie seus contatos",
5
8
  "addNew": "Novo Contato",
9
+ "newPerson": "Nova Pessoa",
6
10
  "edit": "Editar Contato",
7
11
  "delete": "Excluir",
8
12
  "view": "Ver Detalhes",
@@ -14,8 +18,12 @@
14
18
  "actions": "Ações",
15
19
  "search": "Pesquisar contatos...",
16
20
  "searchPlaceholder": "Buscar",
21
+ "searchByNamePlaceholder": "Buscar por nome...",
17
22
  "filterByType": "Filtrar por tipo",
18
23
  "filterByStatus": "Filtrar por status",
24
+ "viewMode": "Visualização",
25
+ "viewModeTable": "Tabela",
26
+ "viewModeCards": "Cards",
19
27
  "allStatuses": "Todos os status",
20
28
  "allTypes": "Todos os tipos",
21
29
  "all": "Todos",
@@ -31,6 +39,7 @@
31
39
  "deleteError": "Falha ao excluir contato",
32
40
  "deleteConfirmTitle": "Excluir Contato",
33
41
  "deleteConfirmDescription": "Tem certeza de que deseja excluir este contato? Esta ação não pode ser desfeita.",
42
+ "deleteConfirmDescriptionWithName": "Tem certeza que deseja excluir {name}? Esta ação não pode ser desfeita.",
34
43
  "cancel": "Cancelar",
35
44
  "confirm": "Confirmar",
36
45
  "save": "Salvar",
@@ -51,9 +60,11 @@
51
60
  "documentType": "Tipo de Documento",
52
61
  "documentValuePlaceholder": "Valor",
53
62
  "documentValue": "Valor",
54
- "addContact": "Adicionar Contato",
55
- "addAddress": "Adicionar Endereço",
56
- "addDocument": "Adicionar Documento",
63
+ "addContact": "Contato",
64
+ "addEmail": "Email",
65
+ "addPhone": "Telefone",
66
+ "addAddress": "Endereço",
67
+ "addDocument": "Documento",
57
68
  "noContacts": "Nenhum contato adicionado ainda",
58
69
  "noAddresses": "Nenhum endereço adicionado ainda",
59
70
  "noDocuments": "Nenhum documento adicionado ainda",
@@ -75,10 +86,40 @@
75
86
  "columnActions": "Ações",
76
87
  "loading": "Carregando contatos...",
77
88
  "emptyState": "Nenhuma pessoa encontrada. Ajuste os filtros para ver mais resultados.",
89
+ "emptyStateTitle": "Nenhuma pessoa encontrada",
90
+ "emptyStateDescription": "Comece adicionando sua primeira pessoa ou ajuste os filtros para ver mais resultados.",
78
91
  "dialogCreateTitle": "Adicionar Novo Contato",
79
92
  "dialogCreateDescription": "Crie um novo cadastro de pessoa física ou jurídica",
93
+ "sheetCreateTitle": "Nova Pessoa",
94
+ "sheetCreateDescription": "Cadastre dados básicos, contatos, endereços e documentos em um único fluxo.",
95
+ "sheetCreateDescriptionIndividualOnly": "Cadastre dados básicos, contatos, endereços e documentos de pessoa física em um único fluxo.",
96
+ "sheetEditTitle": "Editar Pessoa",
97
+ "sheetEditDescription": "Atualize os dados básicos, contatos, endereços e documentos desta pessoa.",
98
+ "sheetBasicDescription": "Defina o tipo de cadastro, o nome principal e o status atual.",
99
+ "sheetContactsDescription": "Adicione canais de contato e marque os principais.",
100
+ "sheetAddressesDescription": "Gerencie endereços e use o CEP para preencher dados automaticamente.",
101
+ "sheetDocumentsDescription": "Associe documentos relevantes ao cadastro.",
80
102
  "typeOfPerson": "Tipo de Pessoa",
81
103
  "selectType": "Selecione o tipo",
104
+ "birthDate": "Data de Nascimento",
105
+ "selectDate": "Selecionar data",
106
+ "gender": "Genero",
107
+ "selectGender": "Selecione o genero",
108
+ "genderMale": "Masculino",
109
+ "genderFemale": "Feminino",
110
+ "genderOther": "Outro",
111
+ "jobTitle": "Cargo",
112
+ "jobTitlePlaceholder": "Ex: Analista Financeiro",
113
+ "employerCompany": "Empresa",
114
+ "employerCompanyPlaceholder": "Selecione a empresa empregadora",
115
+ "noEmployerCompany": "Sem empresa vinculada",
116
+ "tradeName": "Nome Fantasia",
117
+ "tradeNamePlaceholder": "Nome fantasia da empresa",
118
+ "foundationDate": "Data de Fundacao",
119
+ "legalNature": "Natureza Juridica",
120
+ "legalNaturePlaceholder": "Ex: LTDA, S.A.",
121
+ "notes": "Observacoes",
122
+ "notesPlaceholder": "Observacoes adicionais...",
82
123
  "createPerson": "Criar Pessoa",
83
124
  "editPerson": "Editar Pessoa",
84
125
  "editPersonDescription": "Atualize as informações da pessoa, contatos, endereços e documentos",
@@ -88,8 +129,16 @@
88
129
  "editTabAddresses": "Endereços",
89
130
  "editTabDocuments": "Documentos",
90
131
  "selectContactType": "Selecione o tipo",
132
+ "selectDocumentType": "Selecione o tipo",
91
133
  "main": "Principal",
92
134
  "selectAddressType": "Selecione o tipo de endereço",
135
+ "addressTypeResidential": "Residencial",
136
+ "addressTypeCommercial": "Comercial",
137
+ "addressTypeCorrespondence": "Correspondência",
138
+ "addressTypeAlternative": "Alternativo",
139
+ "addressTypeWork": "Trabalho",
140
+ "addressTypeBilling": "Cobrança",
141
+ "addressTypeShipping": "Entrega",
93
142
  "address": "Endereço",
94
143
  "addressPlaceholder": "Endereço",
95
144
  "addressComplement": "Complemmento",
@@ -103,11 +152,113 @@
103
152
  "personDetails": "Detalhes da Pessoa",
104
153
  "viewAllRegisteredData": "Visualize todos os dados cadastrados",
105
154
  "dialogBasicInformationTitle": "Informações Básicas",
155
+ "avatarUpload": "Enviar Avatar",
156
+ "avatarReplace": "Substituir Avatar",
157
+ "avatarRemove": "Remover Avatar",
158
+ "avatarGuidelines": "JPG, PNG ou GIF. Máximo de 5MB.",
159
+ "avatarUploadingProgress": "Enviando avatar... {progress}%",
160
+ "avatarUploadSuccess": "Avatar enviado com sucesso.",
161
+ "avatarUploadError": "Falha ao enviar avatar.",
162
+ "avatarRemoveSuccess": "Avatar removido.",
163
+ "avatarInvalidType": "Selecione um arquivo de imagem válido.",
164
+ "avatarTooLarge": "A imagem deve ter no máximo 5MB.",
165
+ "owner": "Responsável",
166
+ "unassigned": "Não atribuído",
167
+ "source": "Origem",
168
+ "sourceReferral": "Indicação",
169
+ "sourceWebsite": "Site",
170
+ "sourceSocial": "Social",
171
+ "sourceInbound": "Inbound",
172
+ "sourceOutbound": "Outbound",
173
+ "sourceOther": "Outro",
174
+ "lifecycleStage": "Estágio",
175
+ "lifecycleNew": "Novo",
176
+ "lifecycleContacted": "Contatado",
177
+ "lifecycleQualified": "Qualificado",
178
+ "lifecycleProposal": "Proposta",
179
+ "lifecycleNegotiation": "Negociação",
180
+ "lifecycleCustomer": "Cliente",
181
+ "lifecycleLost": "Perdido",
182
+ "nextActionAt": "Próxima ação",
183
+ "nextActionEmpty": "Sem follow-up",
184
+ "registerInteraction": "Registrar interação",
185
+ "registerInteractionDescription": "Registre o último contato com esta pessoa.",
186
+ "scheduleFollowup": "Agendar follow-up",
187
+ "scheduleFollowupDescription": "Defina data e responsável para a próxima ação.",
188
+ "interactionType": "Tipo de interação",
189
+ "interactionTypeCall": "Ligação",
190
+ "interactionTypeEmail": "E-mail",
191
+ "interactionTypeWhatsapp": "WhatsApp",
192
+ "interactionTypeMeeting": "Reunião",
193
+ "interactionTypeNote": "Nota",
194
+ "interactionDate": "Data da interação",
195
+ "interactionOutcome": "Resultado",
196
+ "interactionOutcomePlaceholder": "Ex: Interessado, pediu proposta...",
197
+ "interactionNotesPlaceholder": "Escreva um resumo rápido...",
198
+ "interactionCreateSuccess": "Interação registrada com sucesso.",
199
+ "interactionCreateError": "Falha ao registrar interação.",
200
+ "nextActionRequired": "A data da próxima ação é obrigatória.",
201
+ "schedule": "Agendar",
202
+ "register": "Registrar",
203
+ "saveAndNew": "Salvar e novo",
204
+ "formShortcutsHint": "Atalhos: Ctrl/Cmd+S para salvar, Esc para fechar.",
205
+ "duplicateWarning": "Possível duplicidade encontrada: {names}.",
106
206
  "createdAt": "Criado em",
107
207
  "close": "Fechar",
108
208
  "copiedToClipboard": "Copiado para a área de transferência!",
109
209
  "buttonEditUser": "Editar",
110
- "saveChanges": "Salvar Alterações"
210
+ "saveChanges": "Salvar Alterações",
211
+ "saving": "Salvando...",
212
+ "resultsCount": "{count} resultado(s)",
213
+ "rowsPerPage": "Linhas por página",
214
+ "paginationLabel": "Página {current} de {total}"
215
+ },
216
+ "PersonFieldWithCreate": {
217
+ "sheet": {
218
+ "title": "Novo {entityLabel}",
219
+ "description": "Apenas nome e tipo são obrigatórios. Você pode completar os demais dados agora ou depois.",
220
+ "descriptionIndividualOnly": "Apenas nome é obrigatório. Você pode completar os demais dados agora ou depois."
221
+ },
222
+ "common": {
223
+ "select": "Selecione"
224
+ },
225
+ "types": {
226
+ "individual": "Pessoa Física",
227
+ "company": "Pessoa Jurídica"
228
+ },
229
+ "fields": {
230
+ "name": "Nome",
231
+ "type": "Tipo",
232
+ "documentIndividualOptional": "CPF (opcional)",
233
+ "documentCompanyOptional": "CNPJ (opcional)",
234
+ "emailOptional": "E-mail (opcional)",
235
+ "phoneOptional": "Telefone (opcional)",
236
+ "addressOptional": "Endereço (opcional)"
237
+ },
238
+ "placeholders": {
239
+ "name": "Nome do {entityLabel}",
240
+ "email": "{entityLabel}@empresa.com",
241
+ "phone": "(11) 99999-9999",
242
+ "addressLine1": "Rua, número, complemento",
243
+ "city": "Cidade",
244
+ "state": "UF"
245
+ },
246
+ "search": {
247
+ "placeholder": "Digite para buscar pessoa...",
248
+ "loading": "Buscando pessoas...",
249
+ "noResults": "Nenhuma pessoa encontrada"
250
+ },
251
+ "actions": {
252
+ "cancel": "Cancelar",
253
+ "saveEntity": "Salvar {entityLabel}",
254
+ "createNew": "Criar novo cadastro",
255
+ "clearSelection": "Limpar seleção",
256
+ "createEntityAria": "Criar novo {entityLabel}"
257
+ },
258
+ "messages": {
259
+ "createdSuccess": "{entityLabel} criado com sucesso",
260
+ "createdError": "Não foi possível criar {entityLabel}"
261
+ }
111
262
  },
112
263
  "AddressType": {
113
264
  "breadcrumbContact": "Contato",
@@ -8,5 +8,12 @@ columns:
8
8
  - name: status
9
9
  type: enum
10
10
  values: [active, inactive]
11
+ - type: fk
12
+ name: avatar_id
13
+ isNullable: true
14
+ references:
15
+ table: file
16
+ column: id
17
+ onDelete: SET NULL
11
18
  - type: created_at
12
19
  - type: updated_at
@@ -0,0 +1,18 @@
1
+ table: person_address
2
+ columns:
3
+ - type: pk
4
+ - name: person_id
5
+ type: fk
6
+ references:
7
+ table: person
8
+ column: id
9
+ - name: address_id
10
+ type: fk
11
+ references:
12
+ table: address
13
+ column: id
14
+ - type: created_at
15
+ - type: updated_at
16
+ indexes:
17
+ - columns: [address_id]
18
+ unique: true
@@ -1,11 +1,26 @@
1
- table: person_company
2
- columns:
3
- - type: pk
4
- references:
5
- table: person
6
- column: id
7
- - name: foundation_date
8
- type: date
9
- - name: legal_nature
10
- - type: created_at
11
- - type: updated_at
1
+ table: person_company
2
+ columns:
3
+ - type: pk
4
+ references:
5
+ table: person
6
+ column: id
7
+ - name: trade_name
8
+ isNullable: true
9
+ - name: foundation_date
10
+ type: date
11
+ isNullable: true
12
+ - name: legal_nature
13
+ isNullable: true
14
+ - name: headquarter_id
15
+ type: fk
16
+ isNullable: true
17
+ references:
18
+ table: person_company
19
+ column: id
20
+ onDelete: SET NULL
21
+ onUpdate: CASCADE
22
+ - type: created_at
23
+ - type: updated_at
24
+
25
+ indices:
26
+ - columns: [headquarter_id]
@@ -6,8 +6,12 @@ columns:
6
6
  column: id
7
7
  - name: birth_date
8
8
  type: date
9
+ isNullable: true
9
10
  - name: gender
10
11
  type: enum
12
+ isNullable: true
11
13
  values: [male, female, other]
14
+ - name: job_title
15
+ isNullable: true
12
16
  - type: created_at
13
17
  - type: updated_at
@@ -0,0 +1,39 @@
1
+ table: person_individual_relation
2
+ columns:
3
+ - type: pk
4
+ - name: person_individual_id
5
+ type: fk
6
+ references:
7
+ table: person_individual
8
+ column: id
9
+ onDelete: CASCADE
10
+ onUpdate: CASCADE
11
+ - name: related_person_individual_id
12
+ type: fk
13
+ references:
14
+ table: person_individual
15
+ column: id
16
+ onDelete: CASCADE
17
+ onUpdate: CASCADE
18
+ - name: relation_type
19
+ type: enum
20
+ values:
21
+ - parent
22
+ - child
23
+ - spouse
24
+ - sibling
25
+ - guardian
26
+ - dependent
27
+ - partner
28
+ - responsible
29
+ - emergency_contact
30
+ - other
31
+ - type: created_at
32
+ - type: updated_at
33
+
34
+ indices:
35
+ - columns: [person_individual_id]
36
+ - columns: [related_person_individual_id]
37
+ - columns: [relation_type]
38
+ - columns: [person_individual_id, related_person_individual_id, relation_type]
39
+ isUnique: true
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hed-hog/contact",
3
- "version": "0.0.266",
3
+ "version": "0.0.274",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "dependencies": {
@@ -10,11 +10,12 @@
10
10
  "@nestjs/jwt": "^11",
11
11
  "@nestjs/mapped-types": "*",
12
12
  "@hed-hog/api-prisma": "0.0.5",
13
- "@hed-hog/core": "0.0.266",
14
- "@hed-hog/api": "0.0.4",
15
- "@hed-hog/api-pagination": "0.0.6",
13
+ "@hed-hog/address": "0.0.274",
16
14
  "@hed-hog/api-locale": "0.0.13",
17
- "@hed-hog/api-mail": "0.0.8"
15
+ "@hed-hog/core": "0.0.274",
16
+ "@hed-hog/api-pagination": "0.0.6",
17
+ "@hed-hog/api-mail": "0.0.8",
18
+ "@hed-hog/api": "0.0.4"
18
19
  },
19
20
  "exports": {
20
21
  ".": {
@@ -0,0 +1,9 @@
1
+ export enum AddressTypeEnum {
2
+ RESIDENTIAL = 'residential',
3
+ COMMERCIAL = 'commercial',
4
+ CORRESPONDENCE = 'correspondence',
5
+ ALTERNATIVE = 'alternative',
6
+ WORK = 'work',
7
+ BILLING = 'billing',
8
+ SHIPPING = 'shipping',
9
+ }
@@ -1,48 +1,46 @@
1
- import { LocaleModule } from '@hed-hog/api-locale';
2
- import { MailModule } from '@hed-hog/api-mail';
3
- import { PaginationModule } from '@hed-hog/api-pagination';
4
- import { PrismaModule } from '@hed-hog/api-prisma';
5
- import { CoreModule } from '@hed-hog/core';
6
- import { forwardRef, Module } from '@nestjs/common';
7
- import { ConfigModule } from '@nestjs/config';
8
- import { JwtModule } from '@nestjs/jwt';
9
- import { PersonAddressTypeModule } from './address-type/address-type.module';
10
- import { PersonContactTypeModule } from './contact-type/contact-type.module';
11
- import { ContactService } from './contact.service';
12
- import { PersonDocumentTypeModule } from './document-type/document-type.module';
13
- import { PersonRelationTypeModule } from './person-relation-type/person-relation-type.module';
14
- import { PersonModule } from './person/person.module';
15
-
16
- @Module({
17
- imports: [
18
- forwardRef(() =>
19
- JwtModule.registerAsync({
20
- global: true,
21
- useFactory: () => {
22
- return {
23
- secret: String(process.env.JWT_SECRET),
24
- global: true,
25
- signOptions: {
26
- expiresIn: String(process.env.JWT_EXPIRES_IN) || '30d' as any,
27
- },
28
- };
29
- },
30
- }),
31
- ),
32
- forwardRef(() => CoreModule),
33
- forwardRef(() => LocaleModule),
34
- forwardRef(() => PrismaModule),
35
- forwardRef(() => PaginationModule),
36
- forwardRef(() => PersonModule),
37
- forwardRef(() => PersonAddressTypeModule),
38
- forwardRef(() => PersonContactTypeModule),
39
- forwardRef(() => PersonDocumentTypeModule),
40
- forwardRef(() => PersonRelationTypeModule),
41
- forwardRef(() => MailModule),
42
- ConfigModule.forRoot(),
43
- ],
44
- controllers: [],
45
- providers: [ContactService],
46
- exports: [ContactService],
47
- })
48
- export class ContactModule { }
1
+ import { LocaleModule } from '@hed-hog/api-locale';
2
+ import { MailModule } from '@hed-hog/api-mail';
3
+ import { PaginationModule } from '@hed-hog/api-pagination';
4
+ import { PrismaModule } from '@hed-hog/api-prisma';
5
+ import { CoreModule } from '@hed-hog/core';
6
+ import { forwardRef, Module } from '@nestjs/common';
7
+ import { ConfigModule } from '@nestjs/config';
8
+ import { JwtModule } from '@nestjs/jwt';
9
+ import { PersonContactTypeModule } from './contact-type/contact-type.module';
10
+ import { ContactService } from './contact.service';
11
+ import { PersonDocumentTypeModule } from './document-type/document-type.module';
12
+ import { PersonRelationTypeModule } from './person-relation-type/person-relation-type.module';
13
+ import { PersonModule } from './person/person.module';
14
+
15
+ @Module({
16
+ imports: [
17
+ forwardRef(() =>
18
+ JwtModule.registerAsync({
19
+ global: true,
20
+ useFactory: () => {
21
+ return {
22
+ secret: String(process.env.JWT_SECRET),
23
+ global: true,
24
+ signOptions: {
25
+ expiresIn: String(process.env.JWT_EXPIRES_IN) || ('30d' as any),
26
+ },
27
+ };
28
+ },
29
+ }),
30
+ ),
31
+ forwardRef(() => CoreModule),
32
+ forwardRef(() => LocaleModule),
33
+ forwardRef(() => PrismaModule),
34
+ forwardRef(() => PaginationModule),
35
+ forwardRef(() => PersonModule),
36
+ forwardRef(() => PersonContactTypeModule),
37
+ forwardRef(() => PersonDocumentTypeModule),
38
+ forwardRef(() => PersonRelationTypeModule),
39
+ forwardRef(() => MailModule),
40
+ ConfigModule.forRoot(),
41
+ ],
42
+ controllers: [],
43
+ providers: [ContactService],
44
+ exports: [ContactService],
45
+ })
46
+ export class ContactModule {}