Merge pull request #23 from JurunenseDevInterno/fix-incluir-grupo19

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

View File

@ -209,6 +209,10 @@ export default function Teste() {
const [opcoesSubgrupos, setOpcoesSubgrupos] = useState<string[]>([]); const [opcoesSubgrupos, setOpcoesSubgrupos] = useState<string[]>([]);
const [opcoesCentrosCusto, setOpcoesCentrosCusto] = useState<string[]>([]); const [opcoesCentrosCusto, setOpcoesCentrosCusto] = useState<string[]>([]);
const [opcoesContas, setOpcoesContas] = 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 // Estados para analítico
const [analiticoFiltros, setAnaliticoFiltros] = useState({ const [analiticoFiltros, setAnaliticoFiltros] = useState({
@ -771,63 +775,64 @@ export default function Teste() {
}); });
break; 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 => { mesesDisponiveis.forEach(mes => {
const valor14 = obterValorGrupo("14", mes); const valor14 = obterValorGrupo("14", mes);
const valor15 = obterValorGrupo("15", mes); const valor15 = obterValorGrupo("15", mes);
const valor16 = obterValorGrupo("16", mes); const valor16 = obterValorGrupo("16", mes);
const valor17 = obterValorGrupo("17", 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; break;
case "19": // LAIR = Grupo 10 + 13 + 18 case "20": // LAIR = Grupo 10 + 13 + 19
mesesDisponiveis.forEach(mes => { mesesDisponiveis.forEach(mes => {
const valor10 = obterValorGrupo("10", mes); const valor10 = obterValorGrupo("10", mes);
const valor13 = obterValorGrupo("13", mes); const valor13 = obterValorGrupo("13", mes);
const valor18 = obterValorGrupo("18", mes); const valor19 = obterValorGrupo("19", mes);
valoresPorMes[mes] = valor10 + valor13 + valor18; valoresPorMes[mes] = valor10 + valor13 + valor19;
}); });
break; 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 => { mesesDisponiveis.forEach(mes => {
const valor19 = obterValorGrupo("19", mes); const valor20 = obterValorGrupo("20", mes);
if (valor19 > 0) { if (valor20 > 0) {
valoresPorMes[mes] = (valor19 * 0.20) * -1; valoresPorMes[mes] = (valor20 * 0.20) * -1;
} else { } else {
valoresPorMes[mes] = 0; valoresPorMes[mes] = 0;
} }
}); });
break; 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 => { mesesDisponiveis.forEach(mes => {
const valor19 = obterValorGrupo("19", mes); const valor20 = obterValorGrupo("20", mes);
if (valor19 > 0) { if (valor20 > 0) {
valoresPorMes[mes] = (valor19 * 0.09) * -1; valoresPorMes[mes] = (valor20 * 0.09) * -1;
} else { } else {
valoresPorMes[mes] = 0; valoresPorMes[mes] = 0;
} }
}); });
break; break;
case "22": // Lucro Líquido = Grupo 19 + 20 + 21 case "23": // Lucro Líquido = Grupo 20 + 21 + 22
mesesDisponiveis.forEach(mes => { mesesDisponiveis.forEach(mes => {
const valor19 = obterValorGrupo("19", mes);
const valor20 = obterValorGrupo("20", mes); const valor20 = obterValorGrupo("20", mes);
const valor21 = obterValorGrupo("21", mes); const valor21 = obterValorGrupo("21", mes);
valoresPorMes[mes] = valor19 + valor20 + valor21; const valor22 = obterValorGrupo("22", mes);
valoresPorMes[mes] = valor20 + valor21 + valor22;
}); });
break; break;
case "24": // EBITDA = Grupo 19 - (13 + 18 + 23) case "25": // EBITDA = Grupo 20 - (13 + 19 + 24)
mesesDisponiveis.forEach(mes => { mesesDisponiveis.forEach(mes => {
const valor19 = obterValorGrupo("19", mes); const valor20 = obterValorGrupo("20", mes);
const valor13 = obterValorGrupo("13", mes); const valor13 = obterValorGrupo("13", mes);
const valor18 = obterValorGrupo("18", mes); const valor19 = obterValorGrupo("19", mes);
const valor23 = obterValorGrupo("23", mes); const valor24 = obterValorGrupo("24", mes);
valoresPorMes[mes] = valor19 - (valor13 + valor18 + valor23); valoresPorMes[mes] = valor20 - (valor13 + valor19 + valor24);
}); });
break; break;
} }
@ -843,7 +848,7 @@ export default function Teste() {
// Verificar se é um grupo calculado // Verificar se é um grupo calculado
const codigoGrupo = items[0]?.codgrupo || ""; 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; let valoresGrupoPorMes;
if (isCalculado) { if (isCalculado) {
@ -1080,6 +1085,10 @@ export default function Teste() {
setCentrosCustoSelecionados([]); setCentrosCustoSelecionados([]);
setContasSelecionadas([]); setContasSelecionadas([]);
// Limpar filtros de busca
setFiltroCentroCusto("");
setFiltroConta("");
// Limpar dados da tabela // Limpar dados da tabela
setData([]); setData([]);
setDadosFiltrados([]); setDadosFiltrados([]);
@ -1088,6 +1097,9 @@ export default function Teste() {
setIsAllExpanded(false); setIsAllExpanded(false);
setOrdemHierarquiaContasPrimeiro(false); setOrdemHierarquiaContasPrimeiro(false);
// Fechar o sheet de filtros
setIsFilterOpen(false);
// Recarregar opções e selecionar todos novamente // Recarregar opções e selecionar todos novamente
carregarPeriodosDisponiveis(); carregarPeriodosDisponiveis();
}; };
@ -1342,63 +1354,64 @@ export default function Teste() {
}); });
break; 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 => { mesesDisponiveis.forEach(mes => {
const valor14 = obterValorGrupo("14", mes); const valor14 = obterValorGrupo("14", mes);
const valor15 = obterValorGrupo("15", mes); const valor15 = obterValorGrupo("15", mes);
const valor16 = obterValorGrupo("16", mes); const valor16 = obterValorGrupo("16", mes);
const valor17 = obterValorGrupo("17", 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; break;
case "19": // LAIR = Grupo 10 + 13 + 18 case "20": // LAIR = Grupo 10 + 13 + 19
mesesDisponiveis.forEach(mes => { mesesDisponiveis.forEach(mes => {
const valor10 = obterValorGrupo("10", mes); const valor10 = obterValorGrupo("10", mes);
const valor13 = obterValorGrupo("13", mes); const valor13 = obterValorGrupo("13", mes);
const valor18 = obterValorGrupo("18", mes); const valor19 = obterValorGrupo("19", mes);
valoresPorMes[mes] = valor10 + valor13 + valor18; valoresPorMes[mes] = valor10 + valor13 + valor19;
}); });
break; 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 => { mesesDisponiveis.forEach(mes => {
const valor19 = obterValorGrupo("19", mes); const valor20 = obterValorGrupo("20", mes);
if (valor19 > 0) { if (valor20 > 0) {
valoresPorMes[mes] = (valor19 * 0.20) * -1; valoresPorMes[mes] = (valor20 * 0.20) * -1;
} else { } else {
valoresPorMes[mes] = 0; valoresPorMes[mes] = 0;
} }
}); });
break; 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 => { mesesDisponiveis.forEach(mes => {
const valor19 = obterValorGrupo("19", mes); const valor20 = obterValorGrupo("20", mes);
if (valor19 > 0) { if (valor20 > 0) {
valoresPorMes[mes] = (valor19 * 0.09) * -1; valoresPorMes[mes] = (valor20 * 0.09) * -1;
} else { } else {
valoresPorMes[mes] = 0; valoresPorMes[mes] = 0;
} }
}); });
break; break;
case "22": // Lucro Líquido = Grupo 19 + 20 + 21 case "23": // Lucro Líquido = Grupo 20 + 21 + 22
mesesDisponiveis.forEach(mes => { mesesDisponiveis.forEach(mes => {
const valor19 = obterValorGrupo("19", mes);
const valor20 = obterValorGrupo("20", mes); const valor20 = obterValorGrupo("20", mes);
const valor21 = obterValorGrupo("21", mes); const valor21 = obterValorGrupo("21", mes);
valoresPorMes[mes] = valor19 + valor20 + valor21; const valor22 = obterValorGrupo("22", mes);
valoresPorMes[mes] = valor20 + valor21 + valor22;
}); });
break; break;
case "24": // EBITDA = Grupo 19 - (13 + 18 + 23) case "25": // EBITDA = Grupo 20 - (13 + 19 + 24)
mesesDisponiveis.forEach(mes => { mesesDisponiveis.forEach(mes => {
const valor19 = obterValorGrupo("19", mes); const valor20 = obterValorGrupo("20", mes);
const valor13 = obterValorGrupo("13", mes); const valor13 = obterValorGrupo("13", mes);
const valor18 = obterValorGrupo("18", mes); const valor19 = obterValorGrupo("19", mes);
const valor23 = obterValorGrupo("23", mes); const valor24 = obterValorGrupo("24", mes);
valoresPorMes[mes] = valor19 - (valor13 + valor18 + valor23); valoresPorMes[mes] = valor20 - (valor13 + valor19 + valor24);
}); });
break; break;
} }
@ -1414,7 +1427,7 @@ export default function Teste() {
// Verificar se é um grupo calculado // Verificar se é um grupo calculado
const codigoGrupo = items[0]?.codgrupo || ""; 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; let valoresPorMes;
if (isCalculado) { if (isCalculado) {
@ -1968,8 +1981,22 @@ export default function Teste() {
</Button> </Button>
</div> </div>
</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"> <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"> <div key={centro} className="flex items-center space-x-1">
<Checkbox <Checkbox
id={`centro-${centro}`} id={`centro-${centro}`}
@ -2017,8 +2044,22 @@ export default function Teste() {
</Button> </Button>
</div> </div>
</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"> <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"> <div key={conta} className="flex items-center space-x-1">
<Checkbox <Checkbox
id={`conta-${conta}`} id={`conta-${conta}`}
@ -2108,9 +2149,9 @@ export default function Teste() {
</div> </div>
<SheetFooter className="flex gap-2"> <SheetFooter className="flex gap-2">
{/* <Button variant="outline" onClick={limparFiltros} className="flex-1"> <Button variant="outline" onClick={limparFiltros} className="flex-1">
Limpar filtros Limpar Filtros
</Button> */} </Button>
<Button variant="outline" onClick={() => setIsFilterOpen(false)} className="flex-1"> <Button variant="outline" onClick={() => setIsFilterOpen(false)} className="flex-1">
Cancelar Cancelar
</Button> </Button>

View File

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

View File

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