refactor(ui): renomear "Pagador/Pagadores" para "Pessoa/Pessoas" na interface

Todas as strings visíveis ao usuário (labels, títulos, toasts, mensagens
de erro, cabeçalhos de tabela, exportações) foram atualizadas. Acordos
de gênero em português corrigidos. Código, rotas (/payers) e schema do
banco (pagadores) permanecem inalterados — divergência intencional
documentada em CLAUDE.md e CHANGELOG.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Felipe Coutinho
2026-04-20 18:29:55 +00:00
parent 2f68bcf039
commit 0bc3f06b77
42 changed files with 101 additions and 99 deletions

View File

@@ -34,9 +34,9 @@ const statusEnum = z
const baseSchema = z.object({
name: z
.string({ message: "Informe o nome do pagador." })
.string({ message: "Informe o nome da pessoa." })
.trim()
.min(1, "Informe o nome do pagador."),
.min(1, "Informe o nome da pessoa."),
email: z
.string()
.trim()
@@ -110,7 +110,7 @@ export async function createPayerAction(
revalidate(user.id);
return { success: true, message: "Payer criado com sucesso." };
return { success: true, message: "Pessoa criada com sucesso." };
} catch (error) {
return handleActionError(error);
}
@@ -130,7 +130,7 @@ export async function updatePayerAction(
if (!existing) {
return {
success: false,
error: "Pagador não encontrado.",
error: "Pessoa não encontrada.",
};
}
@@ -160,7 +160,7 @@ export async function updatePayerAction(
revalidate(currentUser.id);
return { success: true, message: "Payer atualizado com sucesso." };
return { success: true, message: "Pessoa atualizada com sucesso." };
} catch (error) {
return handleActionError(error);
}
@@ -180,14 +180,14 @@ export async function deletePayerAction(
if (!existing) {
return {
success: false,
error: "Pagador não encontrado.",
error: "Pessoa não encontrada.",
};
}
if (existing.role === PAYER_ROLE_ADMIN) {
return {
success: false,
error: "Pagadores administradores não podem ser removidos.",
error: "Pessoas administradoras não podem ser removidas.",
};
}
@@ -197,7 +197,7 @@ export async function deletePayerAction(
revalidate(user.id);
return { success: true, message: "Payer removido com sucesso." };
return { success: true, message: "Pessoa removida com sucesso." };
} catch (error) {
return handleActionError(error);
}
@@ -221,7 +221,7 @@ export async function joinPayerByShareCodeAction(
if (pagadorRow.userId === user.id) {
return {
success: false,
error: "Você já é o proprietário deste pagador.",
error: "Você já é o proprietário desta entidade pagadora.",
};
}
@@ -235,7 +235,7 @@ export async function joinPayerByShareCodeAction(
if (existingShare) {
return {
success: false,
error: "Você já possui acesso a este pagador.",
error: "Você já possui acesso a esta pessoa.",
};
}
@@ -248,7 +248,7 @@ export async function joinPayerByShareCodeAction(
revalidate(user.id);
return { success: true, message: "Payer adicionado à sua lista." };
return { success: true, message: "Pessoa adicionada à sua lista." };
} catch (error) {
return handleActionError(error);
}
@@ -313,7 +313,7 @@ export async function regeneratePayerShareCodeAction(
});
if (!existing) {
return { success: false, error: "Payer não encontrado." };
return { success: false, error: "Pessoa não encontrada." };
}
let attempts = 0;

View File

@@ -66,7 +66,7 @@ export function PayerHeaderCard({
const openConfirmDialog = () => {
if (!payer.email) {
toast.error("Cadastre um e-mail para este pagador antes de enviar.");
toast.error("Cadastre um e-mail para esta pessoa antes de enviar.");
return;
}
setConfirmOpen(true);
@@ -74,7 +74,7 @@ export function PayerHeaderCard({
const handleSendSummary = () => {
if (!payer.email) {
toast.error("Cadastre um e-mail para este pagador antes de enviar.");
toast.error("Cadastre um e-mail para esta pessoa antes de enviar.");
return;
}

View File

@@ -67,7 +67,7 @@ export function PayerHistoryCard({ data }: PagadorHistoryCardProps) {
Evolução (últimos 6 meses)
</CardTitle>
<p className="text-xs text-muted-foreground">
Despesas registradas para este pagador ao longo do tempo.
Despesas registradas para esta pessoa ao longo do tempo.
</p>
</CardHeader>

View File

@@ -32,7 +32,7 @@ export function PagadorInfoCard({ payer }: PayerInfoCardProps) {
<Card className="border gap-4">
<CardHeader className="gap-1.5">
<CardTitle className="text-lg font-semibold">
Detalhes do pagador
Detalhes da pessoa
</CardTitle>
<CardDescription>
{showSensitiveDetails
@@ -106,7 +106,7 @@ export function PagadorInfoCard({ payer }: PayerInfoCardProps) {
const resolveRoleLabel = (role: string | null) => {
if (role === PAYER_ROLE_ADMIN) return "Administrador";
return "Pagador";
return "Pessoa";
};
type InfoItemProps = {

View File

@@ -89,7 +89,7 @@ export function PayerSharingCard({
</CardTitle>
<p className="text-sm text-muted-foreground">
Compartilhe o código abaixo com outra pessoa. Ela poderá adicioná-lo
na página de pagadores usando a opção Adicionar por código para ter
na página de pessoas usando a opção Adicionar por código para ter
acesso somente leitura.
</p>
</CardHeader>

View File

@@ -182,7 +182,7 @@ export function PayerDialog({
const payerId = payer?.id;
if (mode === "update" && !payerId) {
const message = "Pagador inválido.";
const message = "Pessoa inválida.";
setErrorMessage(message);
toast.error(message);
return;
@@ -216,13 +216,12 @@ export function PayerDialog({
});
};
const title = mode === "create" ? "Novo pagador" : "Editar pagador";
const title = mode === "create" ? "Nova pessoa" : "Editar pessoa";
const description =
mode === "create"
? "Selecione um avatar e informe os detalhes para criar um novo pagador."
: "Atualize os detalhes do pagador selecionado.";
const submitLabel =
mode === "create" ? "Salvar pagador" : "Atualizar pagador";
? "Selecione um avatar e informe os detalhes para criar uma nova pessoa."
: "Atualize os detalhes da pessoa selecionada.";
const submitLabel = mode === "create" ? "Salvar pessoa" : "Atualizar pessoa";
const isUploadSelected =
uploadedAvatar !== null && formState.avatarUrl === uploadedAvatar;
@@ -388,7 +387,7 @@ export function PayerDialog({
id="payer-note"
value={formState.note}
onChange={(event) => updateField("note", event.target.value)}
placeholder="Observações sobre este pagador"
placeholder="Observações sobre esta pessoa"
/>
</div>
</div>

View File

@@ -60,7 +60,7 @@ export function PayersPage({ payers, avatarOptions }: PayersPageProps) {
const handleRemoveRequest = (payer: Payer) => {
if (payer.role === PAYER_ROLE_ADMIN) {
toast.error("Pagadores administradores não podem ser removidos.");
toast.error("Pessoas administradoras não podem ser removidas.");
return;
}
setPayerToRemove(payer);
@@ -91,8 +91,8 @@ export function PayersPage({ payers, avatarOptions }: PayersPageProps) {
};
const removeTitle = payerToRemove
? `Remover pagador "${payerToRemove.name}"?`
: "Remover pagador?";
? `Remover pessoa "${payerToRemove.name}"?`
: "Remover pessoa?";
const handleJoinByCode = (event: React.FormEvent<HTMLFormElement>) => {
event.preventDefault();
@@ -127,7 +127,7 @@ export function PayersPage({ payers, avatarOptions }: PayersPageProps) {
trigger={
<Button className="w-full sm:w-auto">
<RiAddFill className="size-4" />
Novo pagador
Nova pessoa
</Button>
}
/>
@@ -151,7 +151,7 @@ export function PayersPage({ payers, avatarOptions }: PayersPageProps) {
{orderedPayers.length === 0 ? (
<div className="flex min-h-[320px] items-center justify-center rounded-lg border border-dashed bg-muted/30">
<div className="max-w-sm text-center text-sm text-muted-foreground">
Cadastre seu primeiro pagador para organizar cobranças e
Cadastre seu primeira pessoa para organizar cobranças e
pagamentos recorrentes.
</div>
</div>
@@ -185,8 +185,8 @@ export function PayersPage({ payers, avatarOptions }: PayersPageProps) {
open={removeOpen && !!payerToRemove}
onOpenChange={handleRemoveOpenChange}
title={removeTitle}
description="Ao remover este pagador, os registros relacionados a ele deixarão de ser associados automaticamente."
confirmLabel="Remover pagador"
description="Ao remover esta pessoa, os registros relacionados a ele deixarão de ser associados automaticamente."
confirmLabel="Remover pessoa"
pendingLabel="Removendo..."
confirmVariant="destructive"
onConfirm={handleRemoveConfirm}

View File

@@ -19,7 +19,7 @@ import { formatDateTime } from "@/shared/utils/date";
import { displayPeriod } from "@/shared/utils/period";
const inputSchema = z.object({
payerId: z.string().uuid("Payer inválido."),
payerId: z.string().uuid("Pessoa inválida."),
period: z
.string()
.regex(/^\d{4}-\d{2}$/, "Período inválido. Informe no formato AAAA-MM."),
@@ -404,7 +404,7 @@ export async function sendPayerSummaryAction(
});
if (!pagadorRow) {
return { success: false, error: "Pagador não encontrado." };
return { success: false, error: "Pessoa não encontrada." };
}
if (!pagadorRow.email) {