Merge pull request #24 from JurunenseDevInterno/dev

Dev
This commit is contained in:
Alessandro Gonçalves 2025-11-03 10:01:30 -03:00 committed by GitHub
commit 36ff3128c1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 122 additions and 80 deletions

View File

@ -210,6 +210,10 @@ export default function Teste() {
const [opcoesCentrosCusto, setOpcoesCentrosCusto] = useState<string[]>([]);
const [opcoesContas, setOpcoesContas] = useState<string[]>([]);
// Estados para filtros de busca nos campos de seleção
const [filtroCentroCusto, setFiltroCentroCusto] = useState<string>("");
const [filtroConta, setFiltroConta] = useState<string>("");
// Estados para analítico
const [analiticoFiltros, setAnaliticoFiltros] = useState({
dataInicio: "",
@ -771,63 +775,64 @@ export default function Teste() {
});
break;
case "18": // Outras Receitas/Despesas = Grupo 14 + 15 + 16 + 17
case "19": // Resultado Não Operacional = Grupo 14 + 15 + 16 + 17 + 18
mesesDisponiveis.forEach(mes => {
const valor14 = obterValorGrupo("14", mes);
const valor15 = obterValorGrupo("15", mes);
const valor16 = obterValorGrupo("16", mes);
const valor17 = obterValorGrupo("17", mes);
valoresPorMes[mes] = valor14 + valor15 + valor16 + valor17;
const valor18 = obterValorGrupo("18", mes);
valoresPorMes[mes] = valor14 + valor15 + valor16 + valor17 + valor18;
});
break;
case "19": // LAIR = Grupo 10 + 13 + 18
case "20": // LAIR = Grupo 10 + 13 + 19
mesesDisponiveis.forEach(mes => {
const valor10 = obterValorGrupo("10", mes);
const valor13 = obterValorGrupo("13", mes);
const valor18 = obterValorGrupo("18", mes);
valoresPorMes[mes] = valor10 + valor13 + valor18;
const valor19 = obterValorGrupo("19", mes);
valoresPorMes[mes] = valor10 + valor13 + valor19;
});
break;
case "20": // IR = Se LAIR > 0 calcular 20% e resultado negativo (*-1), se não 0
case "21": // IR = Se LAIR > 0 calcular 20% e resultado negativo (*-1), se não 0
mesesDisponiveis.forEach(mes => {
const valor19 = obterValorGrupo("19", mes);
if (valor19 > 0) {
valoresPorMes[mes] = (valor19 * 0.20) * -1;
const valor20 = obterValorGrupo("20", mes);
if (valor20 > 0) {
valoresPorMes[mes] = (valor20 * 0.20) * -1;
} else {
valoresPorMes[mes] = 0;
}
});
break;
case "21": // CSLL = Se LAIR > 0 calcular 9% e resultado negativo (*-1), se não 0
case "22": // CSLL = Se LAIR > 0 calcular 9% e resultado negativo (*-1), se não 0
mesesDisponiveis.forEach(mes => {
const valor19 = obterValorGrupo("19", mes);
if (valor19 > 0) {
valoresPorMes[mes] = (valor19 * 0.09) * -1;
const valor20 = obterValorGrupo("20", mes);
if (valor20 > 0) {
valoresPorMes[mes] = (valor20 * 0.09) * -1;
} else {
valoresPorMes[mes] = 0;
}
});
break;
case "22": // Lucro Líquido = Grupo 19 + 20 + 21
case "23": // Lucro Líquido = Grupo 20 + 21 + 22
mesesDisponiveis.forEach(mes => {
const valor19 = obterValorGrupo("19", mes);
const valor20 = obterValorGrupo("20", mes);
const valor21 = obterValorGrupo("21", mes);
valoresPorMes[mes] = valor19 + valor20 + valor21;
const valor22 = obterValorGrupo("22", mes);
valoresPorMes[mes] = valor20 + valor21 + valor22;
});
break;
case "24": // EBITDA = Grupo 19 - (13 + 18 + 23)
case "25": // EBITDA = Grupo 20 - (13 + 19 + 24)
mesesDisponiveis.forEach(mes => {
const valor19 = obterValorGrupo("19", mes);
const valor20 = obterValorGrupo("20", mes);
const valor13 = obterValorGrupo("13", mes);
const valor18 = obterValorGrupo("18", mes);
const valor23 = obterValorGrupo("23", mes);
valoresPorMes[mes] = valor19 - (valor13 + valor18 + valor23);
const valor19 = obterValorGrupo("19", mes);
const valor24 = obterValorGrupo("24", mes);
valoresPorMes[mes] = valor20 - (valor13 + valor19 + valor24);
});
break;
}
@ -843,7 +848,7 @@ export default function Teste() {
// Verificar se é um grupo calculado
const codigoGrupo = items[0]?.codgrupo || "";
const isCalculado = ["03", "05", "07", "10", "13", "18", "19", "20", "21", "22", "24"].includes(codigoGrupo);
const isCalculado = ["03", "05", "07", "10", "13", "19", "20", "21", "22", "23", "25"].includes(codigoGrupo);
let valoresGrupoPorMes;
if (isCalculado) {
@ -1080,6 +1085,10 @@ export default function Teste() {
setCentrosCustoSelecionados([]);
setContasSelecionadas([]);
// Limpar filtros de busca
setFiltroCentroCusto("");
setFiltroConta("");
// Limpar dados da tabela
setData([]);
setDadosFiltrados([]);
@ -1088,6 +1097,9 @@ export default function Teste() {
setIsAllExpanded(false);
setOrdemHierarquiaContasPrimeiro(false);
// Fechar o sheet de filtros
setIsFilterOpen(false);
// Recarregar opções e selecionar todos novamente
carregarPeriodosDisponiveis();
};
@ -1342,63 +1354,64 @@ export default function Teste() {
});
break;
case "18": // Outras Receitas/Despesas = Grupo 14 + 15 + 16 + 17
case "19": // Resultado Não Operacional = Grupo 14 + 15 + 16 + 17 + 18
mesesDisponiveis.forEach(mes => {
const valor14 = obterValorGrupo("14", mes);
const valor15 = obterValorGrupo("15", mes);
const valor16 = obterValorGrupo("16", mes);
const valor17 = obterValorGrupo("17", mes);
valoresPorMes[mes] = valor14 + valor15 + valor16 + valor17;
const valor18 = obterValorGrupo("18", mes);
valoresPorMes[mes] = valor14 + valor15 + valor16 + valor17 + valor18;
});
break;
case "19": // LAIR = Grupo 10 + 13 + 18
case "20": // LAIR = Grupo 10 + 13 + 19
mesesDisponiveis.forEach(mes => {
const valor10 = obterValorGrupo("10", mes);
const valor13 = obterValorGrupo("13", mes);
const valor18 = obterValorGrupo("18", mes);
valoresPorMes[mes] = valor10 + valor13 + valor18;
const valor19 = obterValorGrupo("19", mes);
valoresPorMes[mes] = valor10 + valor13 + valor19;
});
break;
case "20": // IR = Se LAIR > 0 calcular 20% e resultado negativo (*-1), se não 0
case "21": // IR = Se LAIR > 0 calcular 20% e resultado negativo (*-1), se não 0
mesesDisponiveis.forEach(mes => {
const valor19 = obterValorGrupo("19", mes);
if (valor19 > 0) {
valoresPorMes[mes] = (valor19 * 0.20) * -1;
const valor20 = obterValorGrupo("20", mes);
if (valor20 > 0) {
valoresPorMes[mes] = (valor20 * 0.20) * -1;
} else {
valoresPorMes[mes] = 0;
}
});
break;
case "21": // CSLL = Se LAIR > 0 calcular 9% e resultado negativo (*-1), se não 0
case "22": // CSLL = Se LAIR > 0 calcular 9% e resultado negativo (*-1), se não 0
mesesDisponiveis.forEach(mes => {
const valor19 = obterValorGrupo("19", mes);
if (valor19 > 0) {
valoresPorMes[mes] = (valor19 * 0.09) * -1;
const valor20 = obterValorGrupo("20", mes);
if (valor20 > 0) {
valoresPorMes[mes] = (valor20 * 0.09) * -1;
} else {
valoresPorMes[mes] = 0;
}
});
break;
case "22": // Lucro Líquido = Grupo 19 + 20 + 21
case "23": // Lucro Líquido = Grupo 20 + 21 + 22
mesesDisponiveis.forEach(mes => {
const valor19 = obterValorGrupo("19", mes);
const valor20 = obterValorGrupo("20", mes);
const valor21 = obterValorGrupo("21", mes);
valoresPorMes[mes] = valor19 + valor20 + valor21;
const valor22 = obterValorGrupo("22", mes);
valoresPorMes[mes] = valor20 + valor21 + valor22;
});
break;
case "24": // EBITDA = Grupo 19 - (13 + 18 + 23)
case "25": // EBITDA = Grupo 20 - (13 + 19 + 24)
mesesDisponiveis.forEach(mes => {
const valor19 = obterValorGrupo("19", mes);
const valor20 = obterValorGrupo("20", mes);
const valor13 = obterValorGrupo("13", mes);
const valor18 = obterValorGrupo("18", mes);
const valor23 = obterValorGrupo("23", mes);
valoresPorMes[mes] = valor19 - (valor13 + valor18 + valor23);
const valor19 = obterValorGrupo("19", mes);
const valor24 = obterValorGrupo("24", mes);
valoresPorMes[mes] = valor20 - (valor13 + valor19 + valor24);
});
break;
}
@ -1414,7 +1427,7 @@ export default function Teste() {
// Verificar se é um grupo calculado
const codigoGrupo = items[0]?.codgrupo || "";
const isCalculado = ["03", "05", "07", "10", "13", "18", "19", "20", "21", "22", "24"].includes(codigoGrupo);
const isCalculado = ["03", "05", "07", "10", "13", "19", "20", "21", "22", "23", "25"].includes(codigoGrupo);
let valoresPorMes;
if (isCalculado) {
@ -1968,8 +1981,22 @@ export default function Teste() {
</Button>
</div>
</div>
{/* Input de filtro para Centro de Custo */}
<Input
placeholder="Filtrar centros de custo..."
value={filtroCentroCusto}
onChange={(e) => setFiltroCentroCusto(e.target.value)}
className="h-8 text-sm"
/>
<div className="max-h-32 overflow-y-auto border rounded-md p-1 space-y-1">
{opcoesCentrosCusto.map(centro => (
{opcoesCentrosCusto
.filter(centro => {
if (!filtroCentroCusto) return true;
const termo = filtroCentroCusto.toLowerCase();
const nomeCompleto = `${centro}${codigosCentrosCusto[centro] ? ` - ${codigosCentrosCusto[centro]}` : ''}`;
return nomeCompleto.toLowerCase().includes(termo);
})
.map(centro => (
<div key={centro} className="flex items-center space-x-1">
<Checkbox
id={`centro-${centro}`}
@ -2017,8 +2044,22 @@ export default function Teste() {
</Button>
</div>
</div>
{/* Input de filtro para Conta */}
<Input
placeholder="Filtrar contas..."
value={filtroConta}
onChange={(e) => setFiltroConta(e.target.value)}
className="h-8 text-sm"
/>
<div className="max-h-32 overflow-y-auto border rounded-md p-1 space-y-1">
{opcoesContas.map(conta => (
{opcoesContas
.filter(conta => {
if (!filtroConta) return true;
const termo = filtroConta.toLowerCase();
const nomeCompleto = `${conta}${codigosContas[conta] ? ` - ${codigosContas[conta]}` : ''}`;
return nomeCompleto.toLowerCase().includes(termo);
})
.map(conta => (
<div key={conta} className="flex items-center space-x-1">
<Checkbox
id={`conta-${conta}`}
@ -2108,9 +2149,9 @@ export default function Teste() {
</div>
<SheetFooter className="flex gap-2">
{/* <Button variant="outline" onClick={limparFiltros} className="flex-1">
Limpar filtros
</Button> */}
<Button variant="outline" onClick={limparFiltros} className="flex-1">
Limpar Filtros
</Button>
<Button variant="outline" onClick={() => setIsFilterOpen(false)} className="flex-1">
Cancelar
</Button>

View File

@ -120,13 +120,13 @@ export async function GET(request: NextRequest) {
// Transformar os dados do Oracle para o formato esperado pelo componente
const transformedData = data.map((item: any) => {
// Debug dos valores monetários
console.log('🔍 Item original:', {
VLREALIZADO: item.VLREALIZADO,
VLPREVISTO: item.VLPREVISTO,
VLCONFIRMADO: item.VLCONFIRMADO,
VLPAGO: item.VLPAGO,
tipo_VLREALIZADO: typeof item.VLREALIZADO
});
// console.log('🔍 Item original:', {
// VLREALIZADO: item.VLREALIZADO,
// VLPREVISTO: item.VLPREVISTO,
// VLCONFIRMADO: item.VLCONFIRMADO,
// VLPAGO: item.VLPAGO,
// tipo_VLREALIZADO: typeof item.VLREALIZADO
// });
return {
codigo_grupo: item.CODGRUPO || "",

View File

@ -170,110 +170,111 @@ function criarGruposCalculados(dados: any[]) {
isCalculado: true
});
// 18 - Outras Receitas / Despesas (14 + 15 + 16 + 17)
// 19 - Resultado Não Operacional (14 + 15 + 16 + 17 + 18)
const prejuizosPerdas = valoresPorGrupo['14'] || 0;
const inativas = valoresPorGrupo['15'] || 0;
const diretoria = valoresPorGrupo['16'] || 0;
const lancamentosSemCC = valoresPorGrupo['17'] || 0;
const outrasReceitasDespesas = prejuizosPerdas + inativas + diretoria + lancamentosSemCC;
const receitasDespesasNaoOperacional = valoresPorGrupo['18'] || 0;
const resultadoNaoOperacional = prejuizosPerdas + inativas + diretoria + lancamentosSemCC + receitasDespesasNaoOperacional;
gruposCalculados.push({
codfilial: "001",
data_competencia: mes,
data_cai: mes,
grupo: "18 - OUTRAS RECEITAS / DESPESAS",
grupo: "19 - RESULTADO NÃO OPERACIONAL",
subgrupo: "CALCULADO",
centro_custo: "CALCULADO",
codigo_conta: 0,
conta: "OUTRAS RECEITAS / DESPESAS",
valor: outrasReceitasDespesas.toString(),
codgrupo: "18",
conta: "RESULTADO NÃO OPERACIONAL",
valor: resultadoNaoOperacional.toString(),
codgrupo: "19",
isCalculado: true
});
// 19 - LAIR (10 + 13 + 18)
const lair = resultadoOperacional + resultadoFinanceiro + outrasReceitasDespesas;
// 20 - LAIR (10 + 13 + 19)
const lair = resultadoOperacional + resultadoFinanceiro + resultadoNaoOperacional;
gruposCalculados.push({
codfilial: "001",
data_competencia: mes,
data_cai: mes,
grupo: "19 - LAIR",
grupo: "20 - LAIR",
subgrupo: "CALCULADO",
centro_custo: "CALCULADO",
codigo_conta: 0,
conta: "LAIR",
valor: lair.toString(),
codgrupo: "19",
codgrupo: "20",
isCalculado: true
});
// 20 - IR (se LAIR > 0 calcular 20% e resultado negativo, se não 0)
// 21 - IR (se LAIR > 0 calcular 20% e resultado negativo, se não 0)
const ir = lair > 0 ? -(lair * 0.20) : 0;
gruposCalculados.push({
codfilial: "001",
data_competencia: mes,
data_cai: mes,
grupo: "20 - IR",
grupo: "21 - IR",
subgrupo: "CALCULADO",
centro_custo: "CALCULADO",
codigo_conta: 0,
conta: "IMPOSTO DE RENDA",
valor: ir.toString(),
codgrupo: "20",
codgrupo: "21",
isCalculado: true
});
// 21 - CSLL (se LAIR > 0 calcular 9% e resultado negativo, se não 0)
// 22 - CSLL (se LAIR > 0 calcular 9% e resultado negativo, se não 0)
const csll = lair > 0 ? -(lair * 0.09) : 0;
gruposCalculados.push({
codfilial: "001",
data_competencia: mes,
data_cai: mes,
grupo: "21 - CSLL",
grupo: "22 - CSLL",
subgrupo: "CALCULADO",
centro_custo: "CALCULADO",
codigo_conta: 0,
conta: "CONTRIBUIÇÃO SOCIAL SOBRE LUCRO LÍQUIDO",
valor: csll.toString(),
codgrupo: "21",
codgrupo: "22",
isCalculado: true
});
// 22 - Lucro Líquido (19 + 20 + 21)
// 23 - Lucro Líquido (20 + 21 + 22)
const lucroLiquido = lair + ir + csll;
gruposCalculados.push({
codfilial: "001",
data_competencia: mes,
data_cai: mes,
grupo: "22 - LUCRO LÍQUIDO",
grupo: "23 - LUCRO LÍQUIDO",
subgrupo: "CALCULADO",
centro_custo: "CALCULADO",
codigo_conta: 0,
conta: "LUCRO LÍQUIDO",
valor: lucroLiquido.toString(),
codgrupo: "22",
codgrupo: "23",
isCalculado: true
});
// 24 - EBITDA (19 - (13 + 18 + 23))
const despesaTributaria = valoresPorGrupo['23'] || 0;
const ebitda = lair - (resultadoFinanceiro + outrasReceitasDespesas + despesaTributaria);
// 25 - EBITDA (20 - (13 + 19 + 24))
const despesaTributaria = valoresPorGrupo['24'] || 0;
const ebitda = lair - (resultadoFinanceiro + resultadoNaoOperacional + despesaTributaria);
gruposCalculados.push({
codfilial: "001",
data_competencia: mes,
data_cai: mes,
grupo: "24 - EBITDA",
grupo: "25 - EBITDA",
subgrupo: "CALCULADO",
centro_custo: "CALCULADO",
codigo_conta: 0,
conta: "EBITDA",
valor: ebitda.toString(),
codgrupo: "24",
codgrupo: "25",
isCalculado: true
});
});