@hed-hog/contact 0.0.279 → 0.0.286

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 (73) hide show
  1. package/README.md +2 -0
  2. package/dist/contact.service.d.ts +2 -148
  3. package/dist/contact.service.d.ts.map +1 -1
  4. package/dist/person/dto/create-followup.dto.d.ts +5 -0
  5. package/dist/person/dto/create-followup.dto.d.ts.map +1 -0
  6. package/dist/person/dto/create-followup.dto.js +31 -0
  7. package/dist/person/dto/create-followup.dto.js.map +1 -0
  8. package/dist/person/dto/create-interaction.dto.d.ts +12 -0
  9. package/dist/person/dto/create-interaction.dto.d.ts.map +1 -0
  10. package/dist/person/dto/create-interaction.dto.js +39 -0
  11. package/dist/person/dto/create-interaction.dto.js.map +1 -0
  12. package/dist/person/dto/create.dto.d.ts +24 -0
  13. package/dist/person/dto/create.dto.d.ts.map +1 -1
  14. package/dist/person/dto/create.dto.js +56 -1
  15. package/dist/person/dto/create.dto.js.map +1 -1
  16. package/dist/person/dto/duplicates-query.dto.d.ts +8 -0
  17. package/dist/person/dto/duplicates-query.dto.d.ts.map +1 -0
  18. package/dist/person/dto/duplicates-query.dto.js +45 -0
  19. package/dist/person/dto/duplicates-query.dto.js.map +1 -0
  20. package/dist/person/dto/merge.dto.d.ts +6 -0
  21. package/dist/person/dto/merge.dto.d.ts.map +1 -0
  22. package/dist/person/dto/merge.dto.js +35 -0
  23. package/dist/person/dto/merge.dto.js.map +1 -0
  24. package/dist/person/dto/update-lifecycle-stage.dto.d.ts +13 -0
  25. package/dist/person/dto/update-lifecycle-stage.dto.d.ts.map +1 -0
  26. package/dist/person/dto/update-lifecycle-stage.dto.js +34 -0
  27. package/dist/person/dto/update-lifecycle-stage.dto.js.map +1 -0
  28. package/dist/person/dto/update.dto.d.ts +8 -1
  29. package/dist/person/dto/update.dto.d.ts.map +1 -1
  30. package/dist/person/dto/update.dto.js +36 -0
  31. package/dist/person/dto/update.dto.js.map +1 -1
  32. package/dist/person/person.controller.d.ts +57 -1
  33. package/dist/person/person.controller.d.ts.map +1 -1
  34. package/dist/person/person.controller.js +85 -3
  35. package/dist/person/person.controller.js.map +1 -1
  36. package/dist/person/person.service.d.ts +79 -0
  37. package/dist/person/person.service.d.ts.map +1 -1
  38. package/dist/person/person.service.js +730 -9
  39. package/dist/person/person.service.js.map +1 -1
  40. package/hedhog/data/route.yaml +18 -0
  41. package/hedhog/frontend/app/_components/crm-coming-soon.tsx.ejs +110 -110
  42. package/hedhog/frontend/app/_components/crm-nav.tsx.ejs +73 -73
  43. package/hedhog/frontend/app/_lib/crm-mocks.ts.ejs +498 -256
  44. package/hedhog/frontend/app/_lib/crm-sections.tsx.ejs +81 -81
  45. package/hedhog/frontend/app/accounts/_components/account-form-sheet.tsx.ejs +477 -0
  46. package/hedhog/frontend/app/accounts/_components/account-types.ts.ejs +62 -0
  47. package/hedhog/frontend/app/accounts/page.tsx.ejs +892 -15
  48. package/hedhog/frontend/app/activities/page.tsx.ejs +812 -15
  49. package/hedhog/frontend/app/contact-type/page.tsx.ejs +105 -91
  50. package/hedhog/frontend/app/dashboard/page.tsx.ejs +491 -573
  51. package/hedhog/frontend/app/document-type/page.tsx.ejs +105 -91
  52. package/hedhog/frontend/app/follow-ups/page.tsx.ejs +696 -15
  53. package/hedhog/frontend/app/page.tsx.ejs +5 -5
  54. package/hedhog/frontend/app/person/_components/person-form-sheet.tsx.ejs +1440 -1103
  55. package/hedhog/frontend/app/person/_components/person-interaction-dialog.tsx.ejs +4 -3
  56. package/hedhog/frontend/app/person/_components/person-types.ts.ejs +14 -0
  57. package/hedhog/frontend/app/person/page.tsx.ejs +112 -190
  58. package/hedhog/frontend/app/pipeline/_components/lead-detail-sheet.tsx.ejs +599 -0
  59. package/hedhog/frontend/app/pipeline/page.tsx.ejs +1048 -299
  60. package/hedhog/frontend/app/reports/page.tsx.ejs +15 -15
  61. package/hedhog/frontend/messages/en.json +268 -0
  62. package/hedhog/frontend/messages/pt.json +233 -0
  63. package/package.json +6 -6
  64. package/src/contact.service.ts +2 -2
  65. package/src/person/dto/create-followup.dto.ts +15 -0
  66. package/src/person/dto/create-interaction.dto.ts +23 -0
  67. package/src/person/dto/create.dto.ts +50 -0
  68. package/src/person/dto/duplicates-query.dto.ts +34 -0
  69. package/src/person/dto/merge.dto.ts +15 -0
  70. package/src/person/dto/update-lifecycle-stage.dto.ts +19 -0
  71. package/src/person/dto/update.dto.ts +31 -1
  72. package/src/person/person.controller.ts +63 -2
  73. package/src/person/person.service.ts +1096 -7
@@ -1,15 +1,15 @@
1
- 'use client';
2
-
3
- import { CrmComingSoon } from '../_components/crm-coming-soon';
4
- import { BarChart3 } from 'lucide-react';
5
-
6
- export default function CrmReportsPage() {
7
- return (
8
- <CrmComingSoon
9
- currentHref="/contact/reports"
10
- titleKey="reports"
11
- descriptionKey="reports"
12
- icon={BarChart3}
13
- />
14
- );
15
- }
1
+ 'use client';
2
+
3
+ import { CrmComingSoon } from '../_components/crm-coming-soon';
4
+ import { BarChart3 } from 'lucide-react';
5
+
6
+ export default function CrmReportsPage() {
7
+ return (
8
+ <CrmComingSoon
9
+ currentHref="/contact/reports"
10
+ titleKey="reports"
11
+ descriptionKey="reports"
12
+ icon={BarChart3}
13
+ />
14
+ );
15
+ }
@@ -173,11 +173,54 @@
173
173
  "rowsPerPage": "Rows per page",
174
174
  "paginationLabel": "Page {current} of {total}",
175
175
  "register": "Register",
176
+ "duplicateWarning": "Possible duplicate found: {names}.",
177
+ "duplicateDialogTitle": "Possible duplicate record",
178
+ "duplicateDialogDescription": "We found records with matching key data. Choose a primary record to merge into, or continue anyway.",
179
+ "duplicateTargetLabel": "Primary record",
180
+ "duplicateSelectTarget": "Select a record to merge into",
181
+ "duplicateContinueAction": "Continue anyway",
182
+ "duplicateMergeAction": "Merge into selected record",
183
+ "duplicateMergeSuccess": "Merge completed successfully into {name}.",
184
+ "duplicateMergeError": "Failed to merge records.",
176
185
  "owner": "Owner",
177
186
  "unassigned": "Unassigned",
187
+ "source": "Source",
188
+ "sourceReferral": "Referral",
189
+ "sourceWebsite": "Website",
190
+ "sourceSocial": "Social",
191
+ "sourceInbound": "Inbound",
192
+ "sourceOutbound": "Outbound",
193
+ "sourceOther": "Other",
194
+ "lifecycleStage": "Stage",
195
+ "lifecycleNew": "New",
196
+ "lifecycleContacted": "Contacted",
197
+ "lifecycleQualified": "Qualified",
198
+ "lifecycleProposal": "Proposal",
199
+ "lifecycleNegotiation": "Negotiation",
200
+ "lifecycleCustomer": "Customer",
201
+ "lifecycleLost": "Lost",
202
+ "nextActionAt": "Next action",
203
+ "nextActionEmpty": "No follow-up",
178
204
  "registerInteraction": "Register Interaction",
205
+ "registerInteractionDescription": "Register the latest contact made with this person.",
179
206
  "scheduleFollowup": "Schedule Follow-up",
207
+ "scheduleFollowupDescription": "Set the date and owner for the next action.",
180
208
  "interactionType": "Interaction Type",
209
+ "interactionTypeCall": "Call",
210
+ "interactionTypeEmail": "Email",
211
+ "interactionTypeWhatsapp": "WhatsApp",
212
+ "interactionTypeMeeting": "Meeting",
213
+ "interactionTypeNote": "Note",
214
+ "interactionDate": "Interaction date",
215
+ "interactionOutcome": "Outcome",
216
+ "interactionOutcomePlaceholder": "E.g. Interested, asked for a proposal...",
217
+ "interactionNotesPlaceholder": "Write a quick summary...",
218
+ "interactionCreateSuccess": "Interaction recorded successfully.",
219
+ "interactionCreateError": "Failed to record interaction.",
220
+ "nextActionRequired": "The next action date is required.",
221
+ "schedule": "Schedule",
222
+ "saveAndNew": "Save and new",
223
+ "formShortcutsHint": "Shortcuts: Ctrl/Cmd+S to save, Esc to close.",
181
224
  "interactionType_call": "Call",
182
225
  "interactionType_email": "Email",
183
226
  "interactionType_whatsapp": "WhatsApp",
@@ -292,6 +335,8 @@
292
335
  "tableCreatedAt": "Created At",
293
336
  "loading": "Loading...",
294
337
  "noResults": "No contact types found",
338
+ "emptyStateDescription": "Create the first contact type or adjust the search to find existing records.",
339
+ "emptyStateAction": "Create Contact Type",
295
340
  "menuOpen": "Open menu",
296
341
  "menuActions": "Actions",
297
342
  "menuEdit": "Edit",
@@ -334,6 +379,8 @@
334
379
  "tableCreatedAt": "Created At",
335
380
  "loading": "Loading...",
336
381
  "noResults": "No document types found",
382
+ "emptyStateDescription": "Create the first document type or adjust the search to find existing records.",
383
+ "emptyStateAction": "Create Document Type",
337
384
  "menuOpen": "Open menu",
338
385
  "menuActions": "Actions",
339
386
  "menuEdit": "Edit",
@@ -521,8 +568,10 @@
521
568
  "filterBadge": "Owner-based reading",
522
569
  "heroTitle": "Visualize the funnel by stage and distribute operations clearly.",
523
570
  "heroDescription": "Track each owner's workload, see lead aging, and identify where the next opportunities to advance are.",
571
+ "newPerson": "New lead",
524
572
  "ownerFilterLabel": "Filter by owner",
525
573
  "ownerFilterAll": "All owners",
574
+ "searchPlaceholder": "Search by lead, company, or trade name...",
526
575
  "summary": {
527
576
  "total": {
528
577
  "title": "Leads in filter",
@@ -552,6 +601,174 @@
552
601
  "days": "{count} days",
553
602
  "nextAction": "Next action",
554
603
  "noFollowup": "No follow-up"
604
+ },
605
+ "controls": {
606
+ "expandAll": "Expand all",
607
+ "collapseAll": "Collapse all",
608
+ "showDetails": "Show details",
609
+ "hideDetails": "Hide details"
610
+ },
611
+ "detail": {
612
+ "title": "Lead overview",
613
+ "lost": "Lost opportunity",
614
+ "owner": "Owner",
615
+ "source": "Source",
616
+ "advanceStage": "Advance stage",
617
+ "moveTo": "Move to {stage}",
618
+ "timeline": "Timeline",
619
+ "noInteractions": "No interactions recorded for this lead yet.",
620
+ "loadingTimeline": "Loading interaction history...",
621
+ "createdAt": "Created at",
622
+ "lastInteraction": "Last interaction",
623
+ "editCadastro": "Edit full record",
624
+ "stageMoveSuccess": "Lead moved to {stage} successfully",
625
+ "stageMoveError": "Failed to move lead to a new stage",
626
+ "interactionType": {
627
+ "call": "Call",
628
+ "email": "Email",
629
+ "whatsapp": "WhatsApp",
630
+ "meeting": "Meeting",
631
+ "note": "Note"
632
+ }
633
+ },
634
+ "tooltips": {
635
+ "statusActive": "Active lead — being followed up by the owner.",
636
+ "statusInactive": "Inactive lead — not currently in the operational flow.",
637
+ "owner": "Person responsible for this lead.",
638
+ "dealValue": "Estimated value of this opportunity.",
639
+ "nextActionOverdue": "Action overdue — date has already passed.",
640
+ "nextActionSoon": "Next action within 3 days — attention needed.",
641
+ "nextActionOk": "Next action scheduled — no immediate urgency.",
642
+ "nextActionNone": "No follow-up scheduled for this lead.",
643
+ "score": "Conversion probability score (0–100).",
644
+ "age": "Days since first contact with this lead."
645
+ }
646
+ },
647
+ "CrmFollowups": {
648
+ "title": "Follow-ups",
649
+ "description": "Track upcoming actions, overdue items, and owner commitments in one operational list.",
650
+ "newFollowup": "New Follow-up",
651
+ "reschedule": "Reschedule",
652
+ "unassigned": "Unassigned",
653
+ "stats": {
654
+ "total": "Total follow-ups",
655
+ "today": "Due today",
656
+ "overdue": "Overdue",
657
+ "upcoming": "Upcoming"
658
+ },
659
+ "filters": {
660
+ "searchPlaceholder": "Search by lead, contact, or account name...",
661
+ "statusPlaceholder": "Status",
662
+ "statusAll": "All statuses"
663
+ },
664
+ "status": {
665
+ "today": "Today",
666
+ "upcoming": "Upcoming",
667
+ "overdue": "Overdue"
668
+ },
669
+ "table": {
670
+ "person": "Person",
671
+ "owner": "Owner",
672
+ "nextAction": "Next action",
673
+ "lastInteraction": "Last interaction",
674
+ "status": "Status",
675
+ "actions": "Actions"
676
+ },
677
+ "empty": {
678
+ "title": "No follow-ups found",
679
+ "description": "Adjust your filters or create a new follow-up to start managing next actions."
680
+ },
681
+ "sheet": {
682
+ "title": "Schedule follow-up",
683
+ "description": "Define person, date, and notes for the next action.",
684
+ "submit": "Save follow-up"
685
+ },
686
+ "form": {
687
+ "person": "Person",
688
+ "personPlaceholder": "Select a person",
689
+ "date": "Follow-up date",
690
+ "notes": "Notes",
691
+ "notesPlaceholder": "Add context for the next interaction...",
692
+ "personRequired": "Select a person.",
693
+ "dateRequired": "Set a date and time."
694
+ },
695
+ "toasts": {
696
+ "scheduleSuccess": "Follow-up scheduled successfully",
697
+ "scheduleError": "Failed to schedule follow-up"
698
+ },
699
+ "errors": {
700
+ "invalidPerson": "Invalid person.",
701
+ "invalidDate": "Invalid date."
702
+ }
703
+ },
704
+ "CrmActivities": {
705
+ "title": "Activities",
706
+ "description": "Operational activity queue with calls, meetings, messages, and tasks tracked by owner and due date.",
707
+ "viewMode": "View",
708
+ "viewModeTable": "Table",
709
+ "viewModeTimeline": "Timeline",
710
+ "unassignedPerson": "Unassigned lead",
711
+ "unassignedOwner": "Unassigned",
712
+ "stats": {
713
+ "total": "Total activities",
714
+ "pending": "Pending",
715
+ "overdue": "Overdue",
716
+ "completed": "Completed"
717
+ },
718
+ "filters": {
719
+ "searchPlaceholder": "Search by subject, lead, owner, or notes...",
720
+ "statusPlaceholder": "Status",
721
+ "typePlaceholder": "Type",
722
+ "priorityPlaceholder": "Priority",
723
+ "allStatuses": "All statuses",
724
+ "allTypes": "All types",
725
+ "allPriorities": "All priorities"
726
+ },
727
+ "status": {
728
+ "pending": "Pending",
729
+ "overdue": "Overdue",
730
+ "completed": "Completed"
731
+ },
732
+ "type": {
733
+ "call": "Call",
734
+ "email": "Email",
735
+ "meeting": "Meeting",
736
+ "whatsapp": "WhatsApp",
737
+ "task": "Task",
738
+ "note": "Note"
739
+ },
740
+ "priority": {
741
+ "high": "High",
742
+ "medium": "Medium",
743
+ "low": "Low"
744
+ },
745
+ "table": {
746
+ "activity": "Activity",
747
+ "person": "Lead / Contact",
748
+ "owner": "Owner",
749
+ "dueAt": "Due at",
750
+ "createdAt": "Created",
751
+ "status": "Status",
752
+ "priority": "Priority",
753
+ "actions": "Actions"
754
+ },
755
+ "actions": {
756
+ "view": "View",
757
+ "complete": "Mark done"
758
+ },
759
+ "timeline": {
760
+ "description": "Chronological timeline view of activities in the current filter.",
761
+ "dueLabel": "Due",
762
+ "createdLabel": "Created"
763
+ },
764
+ "empty": {
765
+ "title": "No activities found",
766
+ "description": "Adjust filters to find activities or clear filters to return to the full queue.",
767
+ "resetFilters": "Clear filters"
768
+ },
769
+ "toasts": {
770
+ "markedAsCompleted": "Activity marked as completed.",
771
+ "openDetails": "Opening activity: {subject}"
555
772
  }
556
773
  },
557
774
  "CrmFuturePage": {
@@ -568,5 +785,56 @@
568
785
  "stepOne": "Define indicators, filters, and operational rules for this area with the commercial team.",
569
786
  "stepTwo": "Connect the page to the real data already available in the people and interactions modules.",
570
787
  "stepThree": "Add automations, reports, and quick actions based on daily usage."
788
+ },
789
+ "AccountsPage": {
790
+ "title": "Accounts",
791
+ "description": "Manage strategic accounts, prospects, and customer relationships",
792
+ "newAccount": "New Account",
793
+ "edit": "Edit",
794
+ "delete": "Delete",
795
+ "cancel": "Cancel",
796
+ "deleting": "Deleting...",
797
+ "searchPlaceholder": "Search accounts by name, trade name, email, or city...",
798
+ "viewMode": "View",
799
+ "viewModeTable": "Table",
800
+ "viewModeCards": "Cards",
801
+ "filterByStatus": "Filter by status",
802
+ "filterByStage": "Filter by stage",
803
+ "allStatuses": "All statuses",
804
+ "allStages": "All stages",
805
+ "columnName": "Company",
806
+ "columnIndustry": "Industry",
807
+ "columnStage": "Stage",
808
+ "columnStatus": "Status",
809
+ "columnOwner": "Owner",
810
+ "columnCity": "City",
811
+ "columnCreatedAt": "Created",
812
+ "status_active": "Active",
813
+ "status_inactive": "Inactive",
814
+ "stage_prospect": "Prospect",
815
+ "stage_customer": "Customer",
816
+ "stage_churned": "Churned",
817
+ "stage_inactive": "Inactive",
818
+ "statsTotal": "Total Accounts",
819
+ "statsActive": "Active",
820
+ "statsCustomers": "Customers",
821
+ "statsProspects": "Prospects",
822
+ "emptyStateTitle": "No accounts found",
823
+ "emptyStateDescription": "Start by adding your first account or adjust the filters to see more results.",
824
+ "deleteTitle": "Delete Account",
825
+ "deleteDescription": "Are you sure you want to delete {name}? This action cannot be undone.",
826
+ "createSuccess": "Account created successfully",
827
+ "editSuccess": "Account updated successfully",
828
+ "deleteSuccess": "Account deleted successfully",
829
+ "owner": "Owner",
830
+ "unassigned": "Unassigned",
831
+ "tileEmail": "Email",
832
+ "tilePhone": "Phone",
833
+ "tileWebsite": "Website",
834
+ "tileIndustry": "Industry",
835
+ "email": "Email",
836
+ "phone": "Phone",
837
+ "website": "Website",
838
+ "industry": "Industry"
571
839
  }
572
840
  }
@@ -203,6 +203,14 @@
203
203
  "saveAndNew": "Salvar e novo",
204
204
  "formShortcutsHint": "Atalhos: Ctrl/Cmd+S para salvar, Esc para fechar.",
205
205
  "duplicateWarning": "Possível duplicidade encontrada: {names}.",
206
+ "duplicateDialogTitle": "Possível cadastro duplicado",
207
+ "duplicateDialogDescription": "Encontramos registros com os mesmos dados principais. Escolha um cadastro principal para mesclar ou continue mesmo assim.",
208
+ "duplicateTargetLabel": "Cadastro principal",
209
+ "duplicateSelectTarget": "Selecione um cadastro para mesclar",
210
+ "duplicateContinueAction": "Continuar mesmo assim",
211
+ "duplicateMergeAction": "Mesclar com cadastro selecionado",
212
+ "duplicateMergeSuccess": "Mesclagem concluída com sucesso em {name}.",
213
+ "duplicateMergeError": "Falha ao mesclar cadastros.",
206
214
  "createdAt": "Criado em",
207
215
  "close": "Fechar",
208
216
  "copiedToClipboard": "Copiado para a área de transferência!",
@@ -326,6 +334,8 @@
326
334
  "tableCreatedAt": "Data de Criação",
327
335
  "loading": "Carregando...",
328
336
  "noResults": "Nenhum tipo de contato encontrado",
337
+ "emptyStateDescription": "Crie o primeiro tipo de contato ou ajuste a busca para encontrar registros existentes.",
338
+ "emptyStateAction": "Criar Tipo de Contato",
329
339
  "menuOpen": "Abrir menu",
330
340
  "menuActions": "Ações",
331
341
  "menuEdit": "Editar",
@@ -368,6 +378,8 @@
368
378
  "tableCreatedAt": "Data de Criação",
369
379
  "loading": "Carregando...",
370
380
  "noResults": "Nenhum tipo de documento encontrado",
381
+ "emptyStateDescription": "Crie o primeiro tipo de documento ou ajuste a busca para encontrar registros existentes.",
382
+ "emptyStateAction": "Criar Tipo de Documento",
371
383
  "menuOpen": "Abrir menu",
372
384
  "menuActions": "Ações",
373
385
  "menuEdit": "Editar",
@@ -555,8 +567,10 @@
555
567
  "filterBadge": "Leitura por responsável",
556
568
  "heroTitle": "Visualize o funil por estágio e distribua a operação com clareza.",
557
569
  "heroDescription": "Acompanhe a carga de cada owner, veja o tempo de maturação dos leads e identifique onde estão as próximas oportunidades de avanço.",
570
+ "newPerson": "Novo lead",
558
571
  "ownerFilterLabel": "Filtrar por owner",
559
572
  "ownerFilterAll": "Todos os owners",
573
+ "searchPlaceholder": "Buscar por lead, empresa ou nome fantasia...",
560
574
  "summary": {
561
575
  "total": {
562
576
  "title": "Leads no filtro",
@@ -586,6 +600,174 @@
586
600
  "days": "{count} dias",
587
601
  "nextAction": "Próxima ação",
588
602
  "noFollowup": "Sem follow-up"
603
+ },
604
+ "controls": {
605
+ "expandAll": "Abrir todos",
606
+ "collapseAll": "Fechar todos",
607
+ "showDetails": "Ver detalhes",
608
+ "hideDetails": "Ocultar detalhes"
609
+ },
610
+ "detail": {
611
+ "title": "Visão do lead",
612
+ "lost": "Oportunidade perdida",
613
+ "owner": "Owner",
614
+ "source": "Origem",
615
+ "advanceStage": "Avançar etapa",
616
+ "moveTo": "Mover para {stage}",
617
+ "timeline": "Linha do tempo",
618
+ "noInteractions": "Nenhuma interação registrada para este lead ainda.",
619
+ "loadingTimeline": "Carregando histórico de interações...",
620
+ "createdAt": "Criado em",
621
+ "lastInteraction": "Última interação",
622
+ "editCadastro": "Editar cadastro completo",
623
+ "stageMoveSuccess": "Lead movido para {stage} com sucesso",
624
+ "stageMoveError": "Falha ao mover lead de etapa",
625
+ "interactionType": {
626
+ "call": "Ligação",
627
+ "email": "E-mail",
628
+ "whatsapp": "WhatsApp",
629
+ "meeting": "Reunião",
630
+ "note": "Anotação"
631
+ }
632
+ },
633
+ "tooltips": {
634
+ "statusActive": "Lead ativo — em acompanhamento pelo responsável.",
635
+ "statusInactive": "Lead inativo — fora do fluxo operacional do momento.",
636
+ "owner": "Responsável por este lead.",
637
+ "dealValue": "Valor estimado desta oportunidade.",
638
+ "nextActionOverdue": "Ação atrasada — data já passou.",
639
+ "nextActionSoon": "Próxima ação em até 3 dias — atenção.",
640
+ "nextActionOk": "Próxima ação agendada — sem urgência.",
641
+ "nextActionNone": "Nenhum follow-up agendado para este lead.",
642
+ "score": "Pontuação de probabilidade de conversão (0–100).",
643
+ "age": "Dias desde o primeiro contato com este lead."
644
+ }
645
+ },
646
+ "CrmFollowups": {
647
+ "title": "Follow-ups",
648
+ "description": "Acompanhe próximas ações, vencidos e compromissos por responsável em uma lista operacional.",
649
+ "newFollowup": "Novo Follow-up",
650
+ "reschedule": "Reagendar",
651
+ "unassigned": "Não atribuído",
652
+ "stats": {
653
+ "total": "Total de follow-ups",
654
+ "today": "Vencem hoje",
655
+ "overdue": "Vencidos",
656
+ "upcoming": "Próximos"
657
+ },
658
+ "filters": {
659
+ "searchPlaceholder": "Buscar por lead, contato ou conta...",
660
+ "statusPlaceholder": "Status",
661
+ "statusAll": "Todos os status"
662
+ },
663
+ "status": {
664
+ "today": "Hoje",
665
+ "upcoming": "Próximos",
666
+ "overdue": "Vencidos"
667
+ },
668
+ "table": {
669
+ "person": "Pessoa",
670
+ "owner": "Responsável",
671
+ "nextAction": "Próxima ação",
672
+ "lastInteraction": "Última interação",
673
+ "status": "Status",
674
+ "actions": "Ações"
675
+ },
676
+ "empty": {
677
+ "title": "Nenhum follow-up encontrado",
678
+ "description": "Ajuste os filtros ou crie um novo follow-up para começar a gerir as próximas ações."
679
+ },
680
+ "sheet": {
681
+ "title": "Agendar follow-up",
682
+ "description": "Defina pessoa, data e notas para a próxima ação.",
683
+ "submit": "Salvar follow-up"
684
+ },
685
+ "form": {
686
+ "person": "Pessoa",
687
+ "personPlaceholder": "Selecione uma pessoa",
688
+ "date": "Data do follow-up",
689
+ "notes": "Notas",
690
+ "notesPlaceholder": "Adicione contexto para a próxima interação...",
691
+ "personRequired": "Selecione uma pessoa.",
692
+ "dateRequired": "Defina data e hora."
693
+ },
694
+ "toasts": {
695
+ "scheduleSuccess": "Follow-up agendado com sucesso",
696
+ "scheduleError": "Falha ao agendar follow-up"
697
+ },
698
+ "errors": {
699
+ "invalidPerson": "Pessoa inválida.",
700
+ "invalidDate": "Data inválida."
701
+ }
702
+ },
703
+ "CrmActivities": {
704
+ "title": "Atividades",
705
+ "description": "Fila operacional de atividades com ligações, reuniões, mensagens e tarefas por responsável e prazo.",
706
+ "viewMode": "Visualização",
707
+ "viewModeTable": "Tabela",
708
+ "viewModeTimeline": "Timeline",
709
+ "unassignedPerson": "Lead não atribuído",
710
+ "unassignedOwner": "Não atribuído",
711
+ "stats": {
712
+ "total": "Total de atividades",
713
+ "pending": "Pendentes",
714
+ "overdue": "Atrasadas",
715
+ "completed": "Concluídas"
716
+ },
717
+ "filters": {
718
+ "searchPlaceholder": "Buscar por assunto, lead, responsável ou notas...",
719
+ "statusPlaceholder": "Status",
720
+ "typePlaceholder": "Tipo",
721
+ "priorityPlaceholder": "Prioridade",
722
+ "allStatuses": "Todos os status",
723
+ "allTypes": "Todos os tipos",
724
+ "allPriorities": "Todas as prioridades"
725
+ },
726
+ "status": {
727
+ "pending": "Pendente",
728
+ "overdue": "Atrasada",
729
+ "completed": "Concluída"
730
+ },
731
+ "type": {
732
+ "call": "Ligação",
733
+ "email": "E-mail",
734
+ "meeting": "Reunião",
735
+ "whatsapp": "WhatsApp",
736
+ "task": "Tarefa",
737
+ "note": "Anotação"
738
+ },
739
+ "priority": {
740
+ "high": "Alta",
741
+ "medium": "Média",
742
+ "low": "Baixa"
743
+ },
744
+ "table": {
745
+ "activity": "Atividade",
746
+ "person": "Lead / Contato",
747
+ "owner": "Responsável",
748
+ "dueAt": "Prazo",
749
+ "createdAt": "Criada em",
750
+ "status": "Status",
751
+ "priority": "Prioridade",
752
+ "actions": "Ações"
753
+ },
754
+ "actions": {
755
+ "view": "Ver",
756
+ "complete": "Concluir"
757
+ },
758
+ "timeline": {
759
+ "description": "Visão cronológica das atividades considerando os filtros atuais.",
760
+ "dueLabel": "Prazo",
761
+ "createdLabel": "Criada"
762
+ },
763
+ "empty": {
764
+ "title": "Nenhuma atividade encontrada",
765
+ "description": "Ajuste os filtros para encontrar atividades ou limpe os filtros para voltar à fila completa.",
766
+ "resetFilters": "Limpar filtros"
767
+ },
768
+ "toasts": {
769
+ "markedAsCompleted": "Atividade marcada como concluída.",
770
+ "openDetails": "Abrindo atividade: {subject}"
589
771
  }
590
772
  },
591
773
  "CrmFuturePage": {
@@ -602,5 +784,56 @@
602
784
  "stepOne": "Definir indicadores, filtros e regras operacionais desta área com o time comercial.",
603
785
  "stepTwo": "Conectar a página aos dados reais já existentes no módulo de pessoas e interações.",
604
786
  "stepThree": "Adicionar automações, relatórios e ações rápidas com base no uso diário."
787
+ },
788
+ "AccountsPage": {
789
+ "title": "Contas",
790
+ "description": "Gerencie contas estratégicas, prospects e relacionamentos com clientes",
791
+ "newAccount": "Nova Conta",
792
+ "edit": "Editar",
793
+ "delete": "Excluir",
794
+ "cancel": "Cancelar",
795
+ "deleting": "Excluindo...",
796
+ "searchPlaceholder": "Pesquisar contas por nome, razão social, email ou cidade...",
797
+ "viewMode": "Visualização",
798
+ "viewModeTable": "Tabela",
799
+ "viewModeCards": "Cards",
800
+ "filterByStatus": "Filtrar por status",
801
+ "filterByStage": "Filtrar por estágio",
802
+ "allStatuses": "Todos os status",
803
+ "allStages": "Todos os estágios",
804
+ "columnName": "Empresa",
805
+ "columnIndustry": "Setor",
806
+ "columnStage": "Estágio",
807
+ "columnStatus": "Status",
808
+ "columnOwner": "Responsável",
809
+ "columnCity": "Cidade",
810
+ "columnCreatedAt": "Criado em",
811
+ "status_active": "Ativo",
812
+ "status_inactive": "Inativo",
813
+ "stage_prospect": "Prospect",
814
+ "stage_customer": "Cliente",
815
+ "stage_churned": "Desativado",
816
+ "stage_inactive": "Inativo",
817
+ "statsTotal": "Total de Contas",
818
+ "statsActive": "Ativas",
819
+ "statsCustomers": "Clientes",
820
+ "statsProspects": "Prospects",
821
+ "emptyStateTitle": "Nenhuma conta encontrada",
822
+ "emptyStateDescription": "Comece adicionando sua primeira conta ou ajuste os filtros para ver mais resultados.",
823
+ "deleteTitle": "Excluir Conta",
824
+ "deleteDescription": "Tem certeza de que deseja excluir {name}? Esta ação não pode ser desfeita.",
825
+ "createSuccess": "Conta criada com sucesso",
826
+ "editSuccess": "Conta atualizada com sucesso",
827
+ "deleteSuccess": "Conta excluída com sucesso",
828
+ "owner": "Responsável",
829
+ "unassigned": "Não atribuído",
830
+ "tileEmail": "Email",
831
+ "tilePhone": "Telefone",
832
+ "tileWebsite": "Site",
833
+ "tileIndustry": "Setor",
834
+ "email": "Email",
835
+ "phone": "Telefone",
836
+ "website": "Site",
837
+ "industry": "Setor"
605
838
  }
606
839
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hed-hog/contact",
3
- "version": "0.0.279",
3
+ "version": "0.0.286",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "dependencies": {
@@ -9,12 +9,12 @@
9
9
  "@nestjs/core": "^11",
10
10
  "@nestjs/jwt": "^11",
11
11
  "@nestjs/mapped-types": "*",
12
- "@hed-hog/core": "0.0.279",
13
- "@hed-hog/address": "0.0.279",
14
- "@hed-hog/api-pagination": "0.0.6",
15
- "@hed-hog/api-locale": "0.0.13",
16
- "@hed-hog/api-prisma": "0.0.5",
17
12
  "@hed-hog/api-mail": "0.0.8",
13
+ "@hed-hog/core": "0.0.286",
14
+ "@hed-hog/api-prisma": "0.0.5",
15
+ "@hed-hog/address": "0.0.286",
16
+ "@hed-hog/api-locale": "0.0.13",
17
+ "@hed-hog/api-pagination": "0.0.6",
18
18
  "@hed-hog/api": "0.0.4"
19
19
  },
20
20
  "exports": {
@@ -16,7 +16,7 @@ export class ContactService {
16
16
  private readonly jwtService: JwtService,
17
17
  ) {}
18
18
 
19
- async getPerson(personId: number) {
19
+ async getPerson(personId: number): Promise<any> {
20
20
  const person = await this.prismaService.person.findUnique({
21
21
  where: {
22
22
  id: personId,
@@ -52,7 +52,7 @@ export class ContactService {
52
52
  phone: string,
53
53
  cpf: string,
54
54
  cnpj: string,
55
- ) {
55
+ ): Promise<any> {
56
56
  const findPersonByEmail = await this.prismaService.person.findFirst({
57
57
  where: {
58
58
  contact: {