refactor: faxina arquitetural — código morto, identificadores em inglês e estrutura padronizada

Refatoração estrutural sem mudanças funcionais. Saldo líquido: −428 linhas.

Removido:
- 14 funções/constantes mortas verificadas via grep no repo todo: validateCategoriaOwnership,
  getInstallmentAnticipationsAction, getAnticipationDetailsAction, formatDecimalForDb,
  currencyFormatterNoCents, optionalDecimalSchema, formatMonthLabel,
  getGoalProgressStatusColorClass, MONTH_PERIOD_PARAM, calculateRemainingInstallments,
  e 5 funções fetch* não usadas em inbox/queries.ts.
- 1 tipo morto (ImportRow) + 2 órfãos consequentes (InstallmentAnticipationWithRelations,
  GoalProgressStatus convertido em interno).
- ~30 export keywords desnecessários (símbolos usados apenas no próprio arquivo).
- Re-exports mortos em barrels: EstablishmentLogoPicker, CategoryReportSkeleton,
  WidgetSkeleton, toNameKey.
- Arquivo features/reports/types.ts (barrel inteiro era órfão).

Padronizado (PT-BR→EN em identificadores expostos):
- 4 constantes globais (LANCAMENTOS_* → TRANSACTIONS_*).
- 12 tipos/interfaces (Lancamento*/Pagador*/Estabelecimento* → equivalentes EN).
- 13 funções/components exportados (fetchPagador*, EstabelecimentoInput, PagadorInfoCard, etc.).
- 5 props cross-file (preLancamentosCount → inboxPendingCount, pagadorAvatarUrl → payerAvatarUrl, etc.).
- Mantidas em PT-BR conforme exceção do CLAUDE.md: variáveis locais (pagador, categoria,
  lancamento), accessor key pagadorName (persistida em preferências), strings de UI.

Reorganizado:
- transactions/: 14 helpers soltos na raiz movidos para lib/; barrel actions.ts reduzido
  de 76 linhas de wrappers para 14 linhas de re-exports puros; anticipation-actions.ts
  movido para actions/anticipation.ts.
- dashboard/: 8 helpers soltos consolidados em dashboard/lib/.
- reports/: 5 query files na raiz consolidados em reports/lib/.
- payers/: detail-actions.ts (21KB) e detail-queries.ts movidos para payers/lib/.
- shared/components/: 9 dos 16 componentes soltos agrupados em brand/, widgets/, feedback/.
- shared/lib/fetch-json.ts movido para shared/utils/fetch-json.ts.

Validação: pnpm exec tsc --noEmit (0 erros), biome check (0 issues), knip (sem unused).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Felipe Coutinho
2026-05-06 18:42:54 +00:00
parent b9b843b9db
commit 7d0781b035
229 changed files with 415 additions and 872 deletions

View File

@@ -7,7 +7,7 @@ import { CategoryIcon } from "@/features/categories/components/category-icon";
import {
createInstallmentAnticipationAction,
getEligibleInstallmentsAction,
} from "@/features/transactions/anticipation-actions";
} from "@/features/transactions/actions/anticipation";
import MoneyValues from "@/shared/components/money-values";
import { PeriodPicker } from "@/shared/components/period-picker";
import { Button } from "@/shared/components/ui/button";

View File

@@ -3,7 +3,7 @@
import { useMemo, useState, useTransition } from "react";
import { toast } from "sonner";
import { createTransactionAction } from "@/features/transactions/actions";
import { groupAndSortCategories } from "@/features/transactions/category-helpers";
import { groupAndSortCategories } from "@/features/transactions/lib/category-helpers";
import { Button } from "@/shared/components/ui/button";
import {
Dialog,

View File

@@ -3,11 +3,11 @@
import { RiAddLine, RiDeleteBinLine } from "@remixicon/react";
import { useMemo, useState } from "react";
import { toast } from "sonner";
import { groupAndSortCategories } from "@/features/transactions/category-helpers";
import { groupAndSortCategories } from "@/features/transactions/lib/category-helpers";
import {
PAYMENT_METHODS,
type TRANSACTION_TYPES,
} from "@/features/transactions/constants";
} from "@/features/transactions/lib/constants";
import { Button } from "@/shared/components/ui/button";
import { CurrencyInput } from "@/shared/components/ui/currency-input";
import { DatePicker } from "@/shared/components/ui/date-picker";
@@ -51,7 +51,7 @@ import {
PaymentMethodSelectContent,
TransactionTypeSelectContent,
} from "../select-items";
import { EstabelecimentoInput } from "../shared/establishment-input";
import { EstablishmentInput } from "../shared/establishment-input";
import type { SelectOption } from "../types";
/** Payment methods sem Boleto para este modal */
@@ -490,7 +490,7 @@ export function MassAddDialog({
>
Estabelecimento {index + 1}
</Label>
<EstabelecimentoInput
<EstablishmentInput
id={`name-${transaction.id}`}
placeholder="Local"
value={transaction.name}

View File

@@ -4,8 +4,8 @@ import { useRouter } from "next/navigation";
import { useEffect, useMemo, useState, useTransition } from "react";
import { toast } from "sonner";
import { refundTransactionAction } from "@/features/transactions/actions/refund-action";
import { deriveCreditCardPeriod } from "@/features/transactions/form-helpers";
import { formatDate } from "@/features/transactions/formatting-helpers";
import { deriveCreditCardPeriod } from "@/features/transactions/lib/form-helpers";
import { formatDate } from "@/features/transactions/lib/formatting-helpers";
import { PeriodPicker } from "@/shared/components/period-picker";
import { Button } from "@/shared/components/ui/button";
import { DatePicker } from "@/shared/components/ui/date-picker";

View File

@@ -12,7 +12,7 @@ import {
formatCondition,
formatDate,
formatPeriod,
} from "@/features/transactions/formatting-helpers";
} from "@/features/transactions/lib/formatting-helpers";
import { TransactionTypeBadge } from "@/shared/components/transaction-type-badge";
import {
Avatar,

View File

@@ -5,7 +5,7 @@ import { CalculatorDialogButton } from "@/shared/components/calculator/calculato
import { CurrencyInput } from "@/shared/components/ui/currency-input";
import { DatePicker } from "@/shared/components/ui/date-picker";
import { Label } from "@/shared/components/ui/label";
import { EstabelecimentoInput } from "../../shared/establishment-input";
import { EstablishmentInput } from "../../shared/establishment-input";
import type { BasicFieldsSectionProps } from "./transaction-dialog-types";
export function BasicFieldsSection({
@@ -17,7 +17,7 @@ export function BasicFieldsSection({
<div className="space-y-3">
<div className="space-y-1">
<Label htmlFor="name">Descrição</Label>
<EstabelecimentoInput
<EstablishmentInput
id="name"
value={formState.name}
onChange={(value) => onFieldChange("name", value)}

View File

@@ -1,6 +1,6 @@
"use client";
import { TRANSACTION_TYPES } from "@/features/transactions/constants";
import { TRANSACTION_TYPES } from "@/features/transactions/lib/constants";
import { Label } from "@/shared/components/ui/label";
import {
Select,

View File

@@ -1,6 +1,6 @@
"use client";
import { TRANSACTION_CONDITIONS } from "@/features/transactions/constants";
import { TRANSACTION_CONDITIONS } from "@/features/transactions/lib/constants";
import { Label } from "@/shared/components/ui/label";
import {
Select,

View File

@@ -5,7 +5,7 @@ import {
RiCheckboxCircleFill,
} from "@remixicon/react";
import { useState } from "react";
import { PAYMENT_METHODS } from "@/features/transactions/constants";
import { PAYMENT_METHODS } from "@/features/transactions/lib/constants";
import { Button } from "@/shared/components/ui/button";
import { Label } from "@/shared/components/ui/label";
import { MonthPicker } from "@/shared/components/ui/month-picker";

View File

@@ -1,4 +1,4 @@
import type { TransactionFormState } from "@/features/transactions/form-helpers";
import type { TransactionFormState } from "@/features/transactions/lib/form-helpers";
import type { SelectOption, TransactionItem } from "../../types";
export type FormState = TransactionFormState;
@@ -71,7 +71,7 @@ export interface TransactionDialogProps {
}) => void;
}
export interface BaseFieldSectionProps {
interface BaseFieldSectionProps {
formState: FormState;
onFieldChange: <Key extends keyof FormState>(
key: Key,

View File

@@ -14,12 +14,12 @@ import {
import {
filterSecondaryPayerOptions,
groupAndSortCategories,
} from "@/features/transactions/category-helpers";
} from "@/features/transactions/lib/category-helpers";
import {
applyFieldDependencies,
buildTransactionInitialState,
deriveCreditCardPeriod,
} from "@/features/transactions/form-helpers";
} from "@/features/transactions/lib/form-helpers";
import { Button } from "@/shared/components/ui/button";
import {
Collapsible,