mirror of
https://github.com/felipegcoutinho/openmonetis.git
synced 2026-05-09 02:51:46 +00:00
fix(finance): aceita anotacao nula e usa valor liquido na fatura
This commit is contained in:
@@ -7,6 +7,15 @@ e este projeto adere ao [Versionamento Semântico](https://semver.org/lang/pt-BR
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Corrigido
|
||||
|
||||
- Lançamentos: o schema compartilhado de observação voltou a aceitar `null`, corrigindo o erro `Invalid input: expected string, received null` ao salvar novos lançamentos sem anotação.
|
||||
- Cartões/Faturas: o pagamento da fatura passou a usar o valor líquido do período no cartão, evitando que o extrato da conta registre o total bruto das despesas quando houver receitas como estornos ou créditos na mesma fatura.
|
||||
|
||||
### Alterado
|
||||
|
||||
- Queries e organização de domínios: o dashboard passou a nomear queries de leitura com sufixo `-queries.ts` e `preferences-queries.ts`, relatórios adotaram nomes explícitos como `cards-report-queries.ts`, `category-report-queries.ts`, `category-chart-queries.ts` e `establishments/queries.ts`, `insights/queries.ts` foi renomeado para `constants.ts` e as leituras reutilizáveis de lançamentos foram concentradas em `transactions/queries.ts`, deixando `page-helpers.ts` focado em parsing, filtros e transformação.
|
||||
|
||||
## [2.0.0] - 2026-03-09
|
||||
|
||||
### Alterado
|
||||
|
||||
@@ -124,12 +124,7 @@ export async function updateInvoicePaymentStatusAction(
|
||||
.select({
|
||||
total: sql<number>`
|
||||
coalesce(
|
||||
sum(
|
||||
case
|
||||
when ${lancamentos.transactionType} = 'Despesa' then ${lancamentos.amount}
|
||||
else 0
|
||||
end
|
||||
),
|
||||
sum(${lancamentos.amount}),
|
||||
0
|
||||
)
|
||||
`,
|
||||
@@ -145,9 +140,10 @@ export async function updateInvoicePaymentStatusAction(
|
||||
),
|
||||
);
|
||||
|
||||
const adminShare = Math.abs(Number(adminShareRow?.total ?? 0));
|
||||
const adminShare = Number(adminShareRow?.total ?? 0);
|
||||
const adminPayableAmount = Math.abs(Math.min(adminShare, 0));
|
||||
|
||||
if (adminShare > 0 && card.contaId) {
|
||||
if (adminPayableAmount > 0 && card.contaId) {
|
||||
const adminPagador = await tx.query.pagadores.findFirst({
|
||||
columns: { id: true },
|
||||
where: and(
|
||||
@@ -170,7 +166,7 @@ export async function updateInvoicePaymentStatusAction(
|
||||
? parseLocalDateString(data.paymentDate)
|
||||
: getBusinessTodayDate();
|
||||
|
||||
const amount = `-${formatDecimal(adminShare)}`;
|
||||
const amount = `-${formatDecimal(adminPayableAmount)}`;
|
||||
const payload = {
|
||||
condition: "À vista",
|
||||
name: `Pagamento fatura - ${card.name}`,
|
||||
|
||||
@@ -55,5 +55,6 @@ export const noteSchema = z
|
||||
.string()
|
||||
.trim()
|
||||
.max(500, "A anotação deve ter no máximo 500 caracteres.")
|
||||
.nullable()
|
||||
.optional()
|
||||
.transform((value) => (value && value.length > 0 ? value : null));
|
||||
|
||||
Reference in New Issue
Block a user