@hed-hog/finance 0.0.318 → 0.0.319

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 (66) hide show
  1. package/dist/dto/create-bank-account.dto.d.ts +1 -0
  2. package/dist/dto/create-bank-account.dto.d.ts.map +1 -1
  3. package/dist/dto/create-bank-account.dto.js +7 -0
  4. package/dist/dto/create-bank-account.dto.js.map +1 -1
  5. package/dist/dto/create-bank-statement-entry.dto.d.ts +8 -0
  6. package/dist/dto/create-bank-statement-entry.dto.d.ts.map +1 -0
  7. package/dist/dto/create-bank-statement-entry.dto.js +54 -0
  8. package/dist/dto/create-bank-statement-entry.dto.js.map +1 -0
  9. package/dist/dto/update-bank-account.dto.d.ts +1 -0
  10. package/dist/dto/update-bank-account.dto.d.ts.map +1 -1
  11. package/dist/dto/update-bank-account.dto.js +7 -0
  12. package/dist/dto/update-bank-account.dto.js.map +1 -1
  13. package/dist/dto/update-bank-statement-entry.dto.d.ts +6 -0
  14. package/dist/dto/update-bank-statement-entry.dto.d.ts.map +1 -0
  15. package/dist/dto/update-bank-statement-entry.dto.js +42 -0
  16. package/dist/dto/update-bank-statement-entry.dto.js.map +1 -0
  17. package/dist/finance-bank-accounts.controller.d.ts +25 -13
  18. package/dist/finance-bank-accounts.controller.d.ts.map +1 -1
  19. package/dist/finance-bank-accounts.controller.js +5 -3
  20. package/dist/finance-bank-accounts.controller.js.map +1 -1
  21. package/dist/finance-data.controller.d.ts +4 -0
  22. package/dist/finance-data.controller.d.ts.map +1 -1
  23. package/dist/finance-installments.controller.d.ts +3 -2
  24. package/dist/finance-installments.controller.d.ts.map +1 -1
  25. package/dist/finance-installments.controller.js +10 -6
  26. package/dist/finance-installments.controller.js.map +1 -1
  27. package/dist/finance-statements.controller.d.ts +61 -12
  28. package/dist/finance-statements.controller.d.ts.map +1 -1
  29. package/dist/finance-statements.controller.js +50 -8
  30. package/dist/finance-statements.controller.js.map +1 -1
  31. package/dist/finance-transfers.controller.d.ts +13 -8
  32. package/dist/finance-transfers.controller.d.ts.map +1 -1
  33. package/dist/finance-transfers.controller.js +11 -5
  34. package/dist/finance-transfers.controller.js.map +1 -1
  35. package/dist/finance.service.d.ts +124 -35
  36. package/dist/finance.service.d.ts.map +1 -1
  37. package/dist/finance.service.js +389 -55
  38. package/dist/finance.service.js.map +1 -1
  39. package/hedhog/data/role.yaml +9 -1
  40. package/hedhog/data/route.yaml +42 -0
  41. package/hedhog/frontend/app/accounts-payable/approvals/page.tsx.ejs +87 -72
  42. package/hedhog/frontend/app/accounts-payable/installments/page.tsx.ejs +53 -25
  43. package/hedhog/frontend/app/accounts-receivable/installments/[id]/page.tsx.ejs +8 -0
  44. package/hedhog/frontend/app/accounts-receivable/installments/page.tsx.ejs +60 -24
  45. package/hedhog/frontend/app/cash-and-banks/bank-accounts/page.tsx.ejs +114 -31
  46. package/hedhog/frontend/app/cash-and-banks/bank-reconciliation/page.tsx.ejs +25 -3
  47. package/hedhog/frontend/app/cash-and-banks/statements/page.tsx.ejs +732 -61
  48. package/hedhog/frontend/app/cash-and-banks/transfers/page.tsx.ejs +101 -15
  49. package/hedhog/table/bank_statement_line.yaml +1 -1
  50. package/hedhog/table/cashflow_projection.yaml +1 -1
  51. package/hedhog/table/financial_installment.yaml +2 -2
  52. package/hedhog/table/financial_title.yaml +1 -1
  53. package/hedhog/table/installment_allocation.yaml +1 -1
  54. package/hedhog/table/receivable_schedule.yaml +1 -1
  55. package/hedhog/table/settlement.yaml +1 -1
  56. package/hedhog/table/settlement_allocation.yaml +5 -5
  57. package/package.json +7 -7
  58. package/src/dto/create-bank-account.dto.ts +18 -1
  59. package/src/dto/create-bank-statement-entry.dto.ts +50 -0
  60. package/src/dto/update-bank-account.dto.ts +11 -1
  61. package/src/dto/update-bank-statement-entry.dto.ts +31 -0
  62. package/src/finance-bank-accounts.controller.ts +3 -2
  63. package/src/finance-installments.controller.ts +9 -3
  64. package/src/finance-statements.controller.ts +40 -0
  65. package/src/finance-transfers.controller.ts +7 -1
  66. package/src/finance.service.ts +543 -61
@@ -1,6 +1,11 @@
1
1
  'use client';
2
2
 
3
- import { EmptyState, Page, PageHeader } from '@/components/entity-list';
3
+ import {
4
+ EmptyState,
5
+ Page,
6
+ PageHeader,
7
+ PaginationFooter,
8
+ } from '@/components/entity-list';
4
9
  import {
5
10
  AlertDialog,
6
11
  AlertDialogAction,
@@ -84,6 +89,7 @@ const bankAccountFormSchema = z.object({
84
89
  tipo: z.string().min(1, 'Tipo é obrigatório'),
85
90
  descricao: z.string().optional(),
86
91
  logoFileId: z.number().int().nullable().optional(),
92
+ dataInicial: z.string().optional(),
87
93
  saldoInicial: z.number().min(0, 'Saldo inicial inválido'),
88
94
  });
89
95
 
@@ -101,6 +107,17 @@ type BankAccount = {
101
107
  saldoAtual: number;
102
108
  saldoConciliado: number;
103
109
  ativo: boolean;
110
+ dataInicial: string | null;
111
+ };
112
+
113
+ type PaginatedBankAccountsResponse = {
114
+ data: BankAccount[];
115
+ total: number;
116
+ page: number;
117
+ pageSize: number;
118
+ prev: number | null;
119
+ next: number | null;
120
+ lastPage: number;
104
121
  };
105
122
 
106
123
  type UploadedFilePayload = {
@@ -204,6 +221,7 @@ function NovaContaSheet({
204
221
  tipo: '',
205
222
  descricao: '',
206
223
  logoFileId: null,
224
+ dataInicial: new Date().toISOString().slice(0, 10),
207
225
  saldoInicial: 0,
208
226
  },
209
227
  });
@@ -228,6 +246,8 @@ function NovaContaSheet({
228
246
  (watchedFormValues.conta ?? '').trim() ||
229
247
  (watchedFormValues.tipo ?? '').trim() ||
230
248
  (watchedFormValues.descricao ?? '').trim() ||
249
+ (watchedFormValues.dataInicial ?? '').trim() !==
250
+ new Date().toISOString().slice(0, 10) ||
231
251
  (watchedFormValues.saldoInicial ?? 0) > 0 ||
232
252
  logoFileId != null
233
253
  ),
@@ -245,6 +265,9 @@ function NovaContaSheet({
245
265
  tipo: watchedFormValues.tipo ?? '',
246
266
  descricao: watchedFormValues.descricao ?? '',
247
267
  logoFileId: logoFileId ?? null,
268
+ dataInicial:
269
+ watchedFormValues.dataInicial ||
270
+ new Date().toISOString().slice(0, 10),
248
271
  saldoInicial: watchedFormValues.saldoInicial ?? 0,
249
272
  },
250
273
  logoFileId: logoFileId ?? null,
@@ -463,6 +486,9 @@ function NovaContaSheet({
463
486
  tipo: editingAccount.tipo,
464
487
  descricao: editingAccount.descricao,
465
488
  logoFileId: currentLogoFileId,
489
+ dataInicial:
490
+ editingAccount.dataInicial ??
491
+ new Date().toISOString().slice(0, 10),
466
492
  saldoInicial: editingAccount.saldoAtual,
467
493
  }
468
494
  );
@@ -488,6 +514,7 @@ function NovaContaSheet({
488
514
  tipo: '',
489
515
  descricao: '',
490
516
  logoFileId: null,
517
+ dataInicial: new Date().toISOString().slice(0, 10),
491
518
  saldoInicial: 0,
492
519
  }
493
520
  );
@@ -509,6 +536,7 @@ function NovaContaSheet({
509
536
  type: values.tipo,
510
537
  description: values.descricao?.trim() || undefined,
511
538
  logo_file_id: nextLogoFileId,
539
+ start_date: values.dataInicial || undefined,
512
540
  },
513
541
  });
514
542
  } else {
@@ -522,6 +550,7 @@ function NovaContaSheet({
522
550
  type: values.tipo,
523
551
  description: values.descricao?.trim() || undefined,
524
552
  logo_file_id: nextLogoFileId,
553
+ start_date: values.dataInicial || undefined,
525
554
  initial_balance: values.saldoInicial,
526
555
  },
527
556
  });
@@ -550,6 +579,7 @@ function NovaContaSheet({
550
579
  tipo: '',
551
580
  descricao: '',
552
581
  logoFileId: null,
582
+ dataInicial: new Date().toISOString().slice(0, 10),
553
583
  saldoInicial: 0,
554
584
  });
555
585
  onOpenChange(false);
@@ -697,6 +727,32 @@ function NovaContaSheet({
697
727
  )}
698
728
  />
699
729
 
730
+ <FormField
731
+ control={form.control}
732
+ name="dataInicial"
733
+ render={({ field }) => (
734
+ <FormItem>
735
+ <FormLabel>Data inicial</FormLabel>
736
+ <FormControl>
737
+ <Input
738
+ type="date"
739
+ {...field}
740
+ onChange={(e) =>
741
+ field.onChange(
742
+ e.target.value ||
743
+ new Date().toISOString().slice(0, 10)
744
+ )
745
+ }
746
+ disabled={!!editingAccount}
747
+ />
748
+ </FormControl>
749
+ <FormMessage />
750
+ </FormItem>
751
+ )}
752
+ />
753
+ </div>
754
+
755
+ <div className="grid gap-4 md:grid-cols-2">
700
756
  <FormField
701
757
  control={form.control}
702
758
  name="saldoInicial"
@@ -720,25 +776,25 @@ function NovaContaSheet({
720
776
  </FormItem>
721
777
  )}
722
778
  />
723
- </div>
724
779
 
725
- <FormField
726
- control={form.control}
727
- name="descricao"
728
- render={({ field }) => (
729
- <FormItem>
730
- <FormLabel>{t('fields.description')}</FormLabel>
731
- <FormControl>
732
- <Input
733
- placeholder={t('fields.descriptionPlaceholder')}
734
- {...field}
735
- value={field.value || ''}
736
- />
737
- </FormControl>
738
- <FormMessage />
739
- </FormItem>
740
- )}
741
- />
780
+ <FormField
781
+ control={form.control}
782
+ name="descricao"
783
+ render={({ field }) => (
784
+ <FormItem>
785
+ <FormLabel>{t('fields.description')}</FormLabel>
786
+ <FormControl>
787
+ <Input
788
+ placeholder={t('fields.descriptionPlaceholder')}
789
+ {...field}
790
+ value={field.value || ''}
791
+ />
792
+ </FormControl>
793
+ <FormMessage />
794
+ </FormItem>
795
+ )}
796
+ />
797
+ </div>
742
798
  </FinanceSheetSection>
743
799
 
744
800
  <FinanceSheetSection
@@ -862,19 +918,34 @@ export default function ContasBancariasPage() {
862
918
  const [accountIdToDelete, setAccountIdToDelete] = useState<string | null>(
863
919
  null
864
920
  );
865
- const { data: contasBancarias, refetch } = useQuery<BankAccount[]>({
866
- queryKey: ['finance-bank-accounts', currentLocaleCode],
867
- queryFn: async () => {
868
- const response = await request({
869
- url: '/finance/bank-accounts',
870
- method: 'GET',
871
- });
921
+ const [page, setPage] = useState(1);
922
+ const pageSize = 9;
923
+ const { data: contasBancarias, refetch } =
924
+ useQuery<PaginatedBankAccountsResponse>({
925
+ queryKey: ['finance-bank-accounts', currentLocaleCode, page, pageSize],
926
+ queryFn: async () => {
927
+ const response = await request({
928
+ url: '/finance/bank-accounts',
929
+ method: 'GET',
930
+ params: {
931
+ page,
932
+ pageSize,
933
+ },
934
+ });
872
935
 
873
- return (response.data || []) as BankAccount[];
874
- },
875
- placeholderData: [],
876
- });
877
- const accounts = contasBancarias ?? [];
936
+ return (response.data || {
937
+ data: [],
938
+ total: 0,
939
+ page,
940
+ pageSize,
941
+ prev: null,
942
+ next: null,
943
+ lastPage: 1,
944
+ }) as PaginatedBankAccountsResponse;
945
+ },
946
+ placeholderData: (old) => old,
947
+ });
948
+ const accounts = contasBancarias?.data ?? [];
878
949
 
879
950
  const tipoConfig = {
880
951
  corrente: { label: t('types.corrente'), icon: Building2 },
@@ -1159,6 +1230,18 @@ export default function ContasBancariasPage() {
1159
1230
  onAction={handleCreate}
1160
1231
  />
1161
1232
  )}
1233
+ {accounts.length > 0 ? (
1234
+ <div className="border-t border-border/50 px-4 py-4 sm:px-6">
1235
+ <PaginationFooter
1236
+ currentPage={page}
1237
+ pageSize={pageSize}
1238
+ totalItems={contasBancarias?.total || 0}
1239
+ onPageChange={setPage}
1240
+ onPageSizeChange={() => undefined}
1241
+ pageSizeOptions={[9]}
1242
+ />
1243
+ </div>
1244
+ ) : null}
1162
1245
  </FinancePageSection>
1163
1246
  </Page>
1164
1247
  );
@@ -388,9 +388,20 @@ export default function ConciliacaoPage() {
388
388
  const response = await request({
389
389
  url: '/finance/bank-accounts',
390
390
  method: 'GET',
391
+ params: {
392
+ page: 1,
393
+ pageSize: 100,
394
+ },
391
395
  });
392
396
 
393
- return (response?.data || []) as BankAccount[];
397
+ const payload = response?.data as
398
+ | { data?: BankAccount[] }
399
+ | BankAccount[]
400
+ | undefined;
401
+
402
+ return (
403
+ Array.isArray(payload) ? payload : payload?.data || []
404
+ ) as BankAccount[];
394
405
  },
395
406
  });
396
407
 
@@ -437,11 +448,22 @@ export default function ConciliacaoPage() {
437
448
  }
438
449
 
439
450
  const response = await request({
440
- url: `/finance/statements?bank_account_id=${activeContaFilter}`,
451
+ url: '/finance/statements',
441
452
  method: 'GET',
453
+ params: {
454
+ bank_account_id: activeContaFilter,
455
+ page: 1,
456
+ pageSize: 500,
457
+ },
442
458
  });
443
459
 
444
- return (response?.data || []) as Statement[];
460
+ const payload = response?.data as
461
+ | { data?: Statement[] }
462
+ | Statement[]
463
+ | undefined;
464
+ return (
465
+ Array.isArray(payload) ? payload : payload?.data || []
466
+ ) as Statement[];
445
467
  },
446
468
  });
447
469