diff --git a/package-lock.json b/package-lock.json
index 901bbba..24d39c6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -33,7 +33,7 @@
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
"cookies-next": "^6.1.0",
- "date-fns": "^4.1.0",
+ "date-fns": "^3.6.0",
"faker-js": "^1.0.0",
"framer-motion": "^12.23.24",
"input-otp": "^1.4.2",
@@ -4459,9 +4459,9 @@
}
},
"node_modules/date-fns": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
- "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
+ "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
"license": "MIT",
"funding": {
"type": "github",
diff --git a/package.json b/package.json
index b918299..fac3244 100644
--- a/package.json
+++ b/package.json
@@ -35,7 +35,7 @@
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
"cookies-next": "^6.1.0",
- "date-fns": "^4.1.0",
+ "date-fns": "^3.6.0",
"faker-js": "^1.0.0",
"framer-motion": "^12.23.24",
"input-otp": "^1.4.2",
diff --git a/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/[id]/detalhes/page.tsx b/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/[id]/detalhes/page.tsx
deleted file mode 100644
index c1353b7..0000000
--- a/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/[id]/detalhes/page.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-'use client';
-
-import { useEffect } from 'react';
-import { useParams } from 'next/navigation';
-
-import { Card, CardContent } from '@/components/ui/card';
-import { useGUsuarioReadHooks } from '@/packages/administrativo/hooks/GUsuario/useGUsuarioReadHooks';
-import Usuario from '@/packages/administrativo/interfaces/GUsuario/GUsuarioInterface';
-import Loading from '@/shared/components/loading/loading';
-
-export default function UsuarioDetalhes() {
- const params = useParams();
-
- const { usuario, fetchUsuario } = useGUsuarioReadHooks();
-
- useEffect(() => {
- if (params.id) {
- fetchUsuario({ usuario_id: Number(params.id) } as Usuario);
- }
- }, []);
-
- if (!usuario) return ;
-
- return (
-
-
-
-
-
-
Nome
-
{usuario?.nome_completo}
-
-
-
-
Função
-
{usuario?.funcao}
-
-
-
Email
-
{usuario?.email}
-
-
-
-
-
- );
-}
diff --git a/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/formulario/page.tsx b/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/formulario/page.tsx
deleted file mode 100644
index 2721d7a..0000000
--- a/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/formulario/page.tsx
+++ /dev/null
@@ -1,126 +0,0 @@
-'use client';
-
-import { zodResolver } from '@hookform/resolvers/zod';
-import { useForm } from 'react-hook-form';
-import { z } from 'zod';
-
-
-import { Button } from '@/components/ui/button';
-import { Card, CardContent } from '@/components/ui/card';
-import {
- Form,
- FormControl,
- FormField,
- FormItem,
- FormLabel,
- FormMessage,
-} from '@/components/ui/form';
-import { Input } from '@/components/ui/input';
-
-import { useGUsuarioSaveHook } from '../../../../../../packages/administrativo/hooks/GUsuario/useGUsuarioSaveHook';
-import { GUsuarioSchema } from '../../../../../../packages/administrativo/schemas/GUsuario/GUsuarioSchema';
-
-type FormValues = z.infer;
-
-export default function UsuarioFormularioPage() {
- const { usuario, saveUsuario } = useGUsuarioSaveHook();
-
- const form = useForm({
- resolver: zodResolver(GUsuarioSchema),
- defaultValues: {
- login: '',
- nome_completo: '',
- funcao: '',
- email: '',
- cpf: '',
- },
- });
-
- async function onSubmit(values: FormValues) {
- saveUsuario(values);
- }
-
- return (
-
-
-
-
-
-
-
-
- );
-}
diff --git a/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/page.tsx b/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/page.tsx
deleted file mode 100644
index 07463dd..0000000
--- a/src/app/(protected)/(administrativo)/(g_usuario)/usuarios/page.tsx
+++ /dev/null
@@ -1,85 +0,0 @@
-'use client';
-
-import Link from 'next/link';
-import { useEffect } from 'react';
-
-import { Button } from '@/components/ui/button';
-import { Card, CardContent } from '@/components/ui/card';
-import {
- Table,
- TableBody,
- TableCell,
- TableHead,
- TableHeader,
- TableRow,
-} from '@/components/ui/table';
-import Loading from '@/shared/components/loading/loading';
-
-import { useGUsuarioIndexHook } from '../../../../../packages/administrativo/hooks/GUsuario/useGUsuarioIndexHook';
-import Usuario from '../../../../../packages/administrativo/interfaces/GUsuario/GUsuarioInterface';
-
-
-
-
-export default function UsuarioPage() {
- const { usuarios, fetchUsuarios } = useGUsuarioIndexHook();
-
- useEffect(() => {
- fetchUsuarios();
- }, []);
-
- if (!usuarios) return ;
-
- return (
-
-
-
-
-
Usuarios
-
-
-
-
-
-
-
- #
- Situação
- CPF
- Login / Sigla / Nome
- Função
-
-
-
-
-
- {usuarios.map((usuario: Usuario) => (
-
- {usuario.usuario_id}
- {usuario.situacao}
- {usuario.cpf}
-
-
- {usuario.login} - {usuario.sigla}
-
- {usuario.nome_completo}
-
-
- {usuario.funcao}
-
-
-
-
-
- ))}
-
-
-
-
-
- );
-}
diff --git a/src/app/(protected)/(administrativo)/administrativo/tipos-servicos/page.tsx b/src/app/(protected)/(administrativo)/administrativo/tipos-servicos/page.tsx
new file mode 100644
index 0000000..6caf1cd
--- /dev/null
+++ b/src/app/(protected)/(administrativo)/administrativo/tipos-servicos/page.tsx
@@ -0,0 +1,9 @@
+import TServicoTipoIndex from "@/packages/administrativo/components/TServicoTipo/TServicoTipoIndex";
+
+export default function TServicoTipoPage() {
+
+ return (
+
+ );
+
+}
\ No newline at end of file
diff --git a/src/app/(protected)/(cadastros)/cadastros/_components/t_servico_tipo/TServicoTipoTable.tsx b/src/app/(protected)/(cadastros)/cadastros/_components/t_servico_tipo/TServicoTipoTable.tsx
deleted file mode 100644
index d0c6e0a..0000000
--- a/src/app/(protected)/(cadastros)/cadastros/_components/t_servico_tipo/TServicoTipoTable.tsx
+++ /dev/null
@@ -1,101 +0,0 @@
-'use client';
-
-import { Button } from '@/components/ui/button';
-import {
- DropdownMenu,
- DropdownMenuContent,
- DropdownMenuGroup,
- DropdownMenuItem,
- DropdownMenuSeparator,
- DropdownMenuTrigger,
-} from '@/components/ui/dropdown-menu';
-import {
- Table,
- TableBody,
- TableCell,
- TableHead,
- TableHeader,
- TableRow,
-} from '@/components/ui/table';
-
-import { EllipsisIcon, PencilIcon, Trash2Icon } from 'lucide-react';
-import TServicoTipoInterface from '../../_interfaces/TServicoTipoInterface'; // Import alterado
-
-// Tipagem das props do componente da tabela
-interface TServicoTipoTableProps {
- // Nome da interface alterado
- data: TServicoTipoInterface[]; // lista de tipos de serviço
- onEdit: (item: TServicoTipoInterface, isEditingFormStatus: boolean) => void; // callback para edição
- onDelete: (item: TServicoTipoInterface, isEditingFormStatus: boolean) => void; // callback para exclusão
-}
-
-/**
- * Componente principal da tabela de Tipos de Serviço
- */
-export default function TServicoTipoTable({ data, onEdit, onDelete }: TServicoTipoTableProps) {
- return (
-
- {/* Cabeçalho da tabela */}
-
-
- #
- {/* As colunas IBGE e UF foram removidas */}
- Descrição
-
-
-
-
- {/* Corpo da tabela */}
-
- {data.map((item) => (
- // Assumindo que o ID do Tipo de Serviço é 'servico_tipo_id'
-
- {/* ID do Tipo de Serviço */}
- {item.servico_tipo_id}
-
- {/* Nome/descrição do Tipo de Serviço (descricao) */}
- {item.descricao}
- {/* As células de IBGE e UF foram removidas */}
-
- {/* Ações (menu dropdown) */}
-
-
- {/* Botão de disparo do menu */}
-
-
-
-
- {/* Conteúdo do menu */}
-
-
- {/* Opção editar */}
- onEdit(item, true)}
- >
-
- Editar
-
-
-
-
- {/* Opção remover */}
- onDelete(item, true)}
- >
-
- Remover
-
-
-
-
-
-
- ))}
-
-
- );
-}
diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/GEmolumento/GEmolumentoIndexData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/GEmolumento/GEmolumentoIndexData.ts
deleted file mode 100644
index ceb79ab..0000000
--- a/src/app/(protected)/(cadastros)/cadastros/_data/GEmolumento/GEmolumentoIndexData.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-// Importa o utilitário responsável por tratar erros de forma padronizada no cliente
-import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler';
-
-// Importa a classe de serviço que gerencia requisições HTTP para a API
-import API from '@/shared/services/api/Api';
-
-// Importa o enum que define os métodos HTTP disponíveis (GET, POST, PUT, DELETE, etc.)
-import { Methods } from '@/shared/services/api/enums/ApiMethodEnum';
-
-import { GEmolumentoReadInterface } from '../../_interfaces/GEmolumentoReadInterface';
-
-// Função assíncrona responsável por executar a requisição para listar os tipos de marcação
-async function executeGEmolumentoIndexData(data: GEmolumentoReadInterface) {
-
- // Cria uma nova instância da classe API para enviar a requisição
- const api = new API();
-
- // Envia uma requisição GET para o endpoint 'administrativo/g_marcacao_tipo/'
- return await api.send({
- method: Methods.GET,
- endpoint: `administrativo/g_emolumento/sistema/${data.sistema_id}?${new URLSearchParams(data.urlParams).toString()}`,
- });
-}
-
-// Exporta a função encapsulada pelo handler de erro, garantindo tratamento uniforme em caso de falhas
-export const GEmolumentoIndexData = withClientErrorHandler(executeGEmolumentoIndexData);
diff --git a/src/app/(protected)/(cadastros)/cadastros/_data/TTBReconhecimentoTipo/TTBReconhecimentoTipoIndexData.ts b/src/app/(protected)/(cadastros)/cadastros/_data/TTBReconhecimentoTipo/TTBReconhecimentoTipoIndexData.ts
deleted file mode 100644
index 659c993..0000000
--- a/src/app/(protected)/(cadastros)/cadastros/_data/TTBReconhecimentoTipo/TTBReconhecimentoTipoIndexData.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-// Importa o utilitário responsável por tratar erros de forma padronizada no cliente
-import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler';
-
-// Importa a classe de serviço que gerencia requisições HTTP para a API
-import API from '@/shared/services/api/Api';
-
-// Importa o enum que define os métodos HTTP disponíveis (GET, POST, PUT, DELETE, etc.)
-import { Methods } from '@/shared/services/api/enums/ApiMethodEnum';
-import { TTBReconhecimentoTipoReadInterface } from '../../_interfaces/TTBReconhecimentoTipoReadInterface';
-
-// Função assíncrona responsável por executar a requisição para listar os tipos de marcação
-async function executeTTBReconhecimentoTipoIndexData(data: TTBReconhecimentoTipoReadInterface) {
- // Cria uma nova instância da classe API para enviar a requisição
- const api = new API();
-
- // Concatena o endpoint com a query string (caso existam parâmetros)
- const endpoint = `administrativo/t_tb_reconhecimentotipo/`;
-
- // Envia uma requisição GET para o endpoint 'administrativo/g_marcacao_tipo/'
- return await api.send({
- method: Methods.GET,
- endpoint: endpoint,
- });
-}
-
-// Exporta a função encapsulada pelo handler de erro, garantindo tratamento uniforme em caso de falhas
-export const TTBReconhecimentoTipoIndexData = withClientErrorHandler(
- executeTTBReconhecimentoTipoIndexData,
-);
diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_emolumento/useGEmolumentoReadHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/g_emolumento/useGEmolumentoReadHook.ts
deleted file mode 100644
index 924bf9c..0000000
--- a/src/app/(protected)/(cadastros)/cadastros/_hooks/g_emolumento/useGEmolumentoReadHook.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-// Importa o hook responsável por gerenciar e exibir respostas globais (sucesso, erro, etc.)
-import { useMemo, useState } from 'react';
-
-import { useResponse } from '@/shared/components/response/ResponseContext';
-
-// Importa hooks do React para gerenciamento de estado e memorização de valores
-
-// Importa a interface que define a estrutura dos dados de "GEmolumento"
-import { GEmolumentoInterface } from '../../_interfaces/GEmolumentoInterface';
-import { GEmolumentoReadInterface } from '../../_interfaces/GEmolumentoReadInterface';
-
-// Importa o serviço responsável por buscar os dados de "GEmolumento" na API
-import { GEmolumentoIndexService } from '../../_services/g_emolumento/GEmolumentoIndexService';
-
-// Hook personalizado para leitura (consulta) dos emolumentos
-export const useGEmolumentoReadHook = () => {
- // Obtém a função que atualiza a resposta global do sistema
- const { setResponse } = useResponse();
-
- // Define o estado local que armazenará a lista de emolumentos
- const [gEmolumento, setGEmolumento] = useState([]);
-
- // Função responsável por buscar os dados da API e atualizar o estado
- const fetchGEmolumento = async (data: GEmolumentoReadInterface) => {
- // Executa o serviço que faz a requisição à API
- const response = await GEmolumentoIndexService(data);
-
- // Atualiza o estado local com os dados retornados
- setGEmolumento(response.data);
-
- // Atualiza o contexto global de resposta (ex: para exibir alertas ou mensagens)
- setResponse(response);
- };
-
- // Retorna os dados e a função de busca, memorizando o valor para evitar recriações desnecessárias
- return useMemo(() => ({ gEmolumento, fetchGEmolumento }), [gEmolumento, fetchGEmolumento]);
-};
diff --git a/src/app/(protected)/(cadastros)/cadastros/_hooks/t_tb_reconhecimentotipo/useTTBReconhecimentoTipoReadHook.ts b/src/app/(protected)/(cadastros)/cadastros/_hooks/t_tb_reconhecimentotipo/useTTBReconhecimentoTipoReadHook.ts
deleted file mode 100644
index c0f2697..0000000
--- a/src/app/(protected)/(cadastros)/cadastros/_hooks/t_tb_reconhecimentotipo/useTTBReconhecimentoTipoReadHook.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-// Importa o hook responsável por gerenciar e exibir respostas globais (sucesso, erro, etc.)
-import { useResponse } from '@/shared/components/response/ResponseContext';
-
-// Importa hooks do React para gerenciamento de estado e memorização de valores
-import { useMemo, useState } from 'react';
-
-// Importa a interface que define a estrutura dos dados de "TTBReconhecimentoTipo"
-import { TTBReconhecimentoTipoReadInterface } from '../../_interfaces/TTBReconhecimentoTipoReadInterface';
-import { TTBReconhecimentoTipoInterface } from '../../_interfaces/TTBReconhecimentoTipoInterface';
-
-// Importa o serviço responsável por buscar os dados de "TTBReconhecimentoTipo" na API
-import { TTBReconhecimentoTipoIndexService } from '../../_services/t_tb_reconhecimentotipo/TTBReconhecimentoTipoIndexService';
-
-// Hook personalizado para leitura (consulta) dos tipos de marcação
-export const useTTBReconhecimentoTipoReadHook = () => {
- // Obtém a função que atualiza a resposta global do sistema
- const { setResponse } = useResponse();
-
- // Define o estado local que armazenará a lista de tipos de marcação
- const [tTBReconhecimentoTipo, setTTBReconhecimentoTipo] = useState<
- TTBReconhecimentoTipoInterface[]
- >([]);
-
- // Função responsável por buscar os dados da API e atualizar o estado
- const fetchTTBReconhecimentoTipo = async (data: TTBReconhecimentoTipoReadInterface) => {
- // Executa o serviço que faz a requisição à API
- const response = await TTBReconhecimentoTipoIndexService(data);
-
- // Atualiza o estado local com os dados retornados
- setTTBReconhecimentoTipo(response.data);
-
- // Atualiza o contexto global de resposta (ex: para exibir alertas ou mensagens)
- setResponse(response);
- };
-
- // Retorna os dados e a função de busca, memorizando o valor para evitar recriações desnecessárias
- return useMemo(
- () => ({ tTBReconhecimentoTipo, fetchTTBReconhecimentoTipo }),
- [tTBReconhecimentoTipo, fetchTTBReconhecimentoTipo],
- );
-};
diff --git a/src/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoInterface.ts b/src/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoInterface.ts
deleted file mode 100644
index 64c2518..0000000
--- a/src/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoInterface.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-// Interface que representa a tabela G_EMOLUMENTO
-export interface GEmolumentoInterface {
- emolumento_id?: number; // NUMERIC(10,2) - Chave primária
- descricao?: string; // VARCHAR(260)
- tipo?: string; // VARCHAR(1)
- sistema_id?: number; // NUMERIC(10,2)
- selo_grupo_id?: number; // NUMERIC(10,2)
- reg_averb?: string; // VARCHAR(1)
- pre_definido?: string; // VARCHAR(1)
- situacao?: string; // VARCHAR(1)
- situacao_ri?: string; // VARCHAR(1)
- com_reducao?: string; // VARCHAR(1)
- motivo_reducao?: string; // VARCHAR(120)
- valor_maximo_certidao?: number; // NUMERIC(14,3)
- tipo_objetivo?: string; // VARCHAR(3)
- modelo_tag?: string; // VARCHAR(3)
- codigo_nota_id?: number; // NUMERIC(10,2)
- convenio_codhab?: string; // VARCHAR(1)
- item_df?: string; // VARCHAR(10)
-}
diff --git a/src/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoItemInterface.ts b/src/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoItemInterface.ts
deleted file mode 100644
index 11b9857..0000000
--- a/src/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoItemInterface.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-// Interface que representa a tabela G_EMOLUMENTO_ITEM (inferido)
-export interface GEmolumentoItemInterface {
- valor_emolumento?: number; // NUMERIC(14,3)
- emolumento_item_id: number; // NUMERIC(10,2) NOT NULL - Chave primária (assumida)
- emolumento_id?: number; // NUMERIC(10,2)
- valor_inicio?: number; // NUMERIC(14,3)
- valor_fim?: number; // NUMERIC(14,3)
- valor_taxa_judiciaria?: number; // NUMERIC(14,3)
- emolumento_periodo_id?: number; // NUMERIC(10,2)
- codigo?: number; // NUMERIC(10,2)
- pagina_extra?: number; // NUMERIC(10,2)
- valor_pagina_extra?: number; // NUMERIC(14,3)
- valor_outra_taxa1?: number; // NUMERIC(14,3)
- codigo_selo?: string; // VARCHAR(30)
- valor_fundo_ri?: number; // NUMERIC(14,3)
- codigo_tabela?: string; // VARCHAR(30)
- selo_grupo_id?: number; // NUMERIC(10,2)
- codigo_km?: string; // VARCHAR(30)
- emolumento_acresce?: number; // NUMERIC(14,3)
- taxa_acresce?: number; // NUMERIC(14,3)
- funcivil_acresce?: number; // NUMERIC(14,3)
- valor_fracao?: number; // NUMERIC(14,3)
- valor_por_excedente_emol?: number; // NUMERIC(14,3)
- valor_por_excedente_tj?: number; // NUMERIC(14,3)
- valor_por_excedente_fundo?: number; // NUMERIC(14,3)
- valor_limite_excedente_emol?: number; // NUMERIC(14,3)
- valor_limite_excedente_tj?: number; // NUMERIC(14,3)
- valor_limite_excedente_fundo?: number; // NUMERIC(14,3)
- fundo_selo?: number; // NUMERIC(14,3)
- distribuicao?: number; // NUMERIC(14,3)
- vrc_ext?: number; // NUMERIC(10,2) - Renomeado de VRCEXT para vrc_ext (convenção)
-}
diff --git a/src/app/(protected)/(cadastros)/cadastros/_interfaces/TServicoTipoInterface.ts b/src/app/(protected)/(cadastros)/cadastros/_interfaces/TServicoTipoInterface.ts
deleted file mode 100644
index a7d793c..0000000
--- a/src/app/(protected)/(cadastros)/cadastros/_interfaces/TServicoTipoInterface.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-export default interface TServicoTipoInterface {
- servico_tipo_id?: number; // SERVICO_TIPO_ID NUMERIC(10,2) NOT NULL (PK)
- descricao: string; // DESCRICAO VARCHAR(60)
- valor?: number; // VALOR NUMERIC(14,3)
- tipo_item?: string;
- requer_autorizacao?: string; // REQUER_AUTORIZACAO VARCHAR(1)
- requer_biometria?: string; // REQUER_BIOMETRIA VARCHAR(1)
- tipo_pessoa?: string; // TIPO_PESSOA VARCHAR(1)
- tb_reconhecimentotipo_id?: number; // TB_RECONHECIMENTOTIPO_ID NUMERIC(10,2) (FK)
- requer_abonador?: string; // REQUER_ABONADOR VARCHAR(1)
- situacao?: string; // SITUACAO VARCHAR(1)
- requer_cpf?: string; // REQUER_CPF VARCHAR(1)
- servico_padrao?: string; // SERVICO_PADRAO VARCHAR(1)
- maximo_pessoa?: number; // MAXIMO_PESSOA NUMERIC(10,2)
- alterar_valor?: string; // ALTERAR_VALOR VARCHAR(1)
- servico_caixa_id?: number; // SERVICO_CAIXA_ID NUMERIC(10,2)
- caixa_servico_id?: number; // LIBERAR_DESCONTO VARCHAR(1)
- valor_fixo?: string; // VALOR_FIXO VARCHAR(1)
- emolumento_id?: number; // EMOLUMENTO_ID NUMERIC(10,2) (FK)
- emolumento_obrigatorio?: number; // EMOLUMENTO_OBRIGATORIO NUMERIC(10,2) (FK)
- ato_praticado?: string; // ATO_PRATICADO VARCHAR(1)
- selar?: string; // SELAR VARCHAR(1)
- frenteverso?: string; // FRENTEVERSO VARCHAR(1)
- etiqueta_unica?: string; // ETIQUETA_UNICA VARCHAR(1)
- transferencia_veiculo?: string; // TRANSFERENCIA_VEICULO VARCHAR(1)
- usar_a4?: string; // USAR_A4 VARCHAR(1)
- averbacao?: string; // AVERBACAO VARCHAR(1)
-}
diff --git a/src/app/(protected)/(cadastros)/cadastros/_interfaces/TTBReconhecimentoTipoInterface.ts b/src/app/(protected)/(cadastros)/cadastros/_interfaces/TTBReconhecimentoTipoInterface.ts
deleted file mode 100644
index bbf207c..0000000
--- a/src/app/(protected)/(cadastros)/cadastros/_interfaces/TTBReconhecimentoTipoInterface.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-// Interface que representa a tabela T_TB_RECONHECIMENTOTIPO
-export interface TTbReconhecimentoTipoInterface {
- tb_reconhecimentotipo_id: number; // NUMERIC(10,2) NOT NULL - Chave primária
- descricao?: string; // VARCHAR(30)
- situacao?: string; // VARCHAR(1)
-}
diff --git a/src/app/(protected)/(cadastros)/cadastros/_schemas/TServicoTipoSchema.ts b/src/app/(protected)/(cadastros)/cadastros/_schemas/TServicoTipoSchema.ts
deleted file mode 100644
index 8fb4cb2..0000000
--- a/src/app/(protected)/(cadastros)/cadastros/_schemas/TServicoTipoSchema.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-import z from 'zod';
-
-/**
- * Tipos utilitários para campos simples
- */
-const SN = z.enum(['S', 'N']).default('N'); // Campos do tipo Sim/Não
-const AI = z.enum(['A', 'I']).default('A'); // Situação Ativo/Inativo
-const OneCharString = z.string().max(1, 'Deve ter no máximo 1 caractere').optional();
-const RequiredString = z.string().min(1, 'O campo é obrigatório');
-const OptionalNumber = z.number().optional();
-const RequiredNumber = z.number();
-
-/**
- * Schema principal baseado na DDL e adaptado ao formulário React
- */
-export const TServicoTipoSchema = z.object({
- // Identificador
- servico_tipo_id: RequiredNumber.describe('ID do Tipo de Serviço').optional(),
-
- // Campos principais
- descricao: z.string().max(60, 'A descrição deve ter no máximo 60 caracteres').optional(),
- categoria: z.string().optional(),
-
- // Controle de flags (S/N)
- frenteverso: SN.optional(),
- averbacao: SN.optional(),
- transferencia_veiculo: SN.optional(),
- usar_a4: SN.optional(),
- etiqueta_unica: SN.optional(),
- selar: SN.optional(),
- servico_padrao: SN.optional(),
- // lancar_taxa: SN.optional(),
- // lancar_fundesp: SN.optional(),
- // liberar_desconto: SN.optional(),
- // fundesp_automatica: SN.optional(),
- // lancar_valor_documento: SN.optional(),
- valor_fixo: SN.optional(),
- ato_praticado: SN.optional(),
- // apresentante_selo: SN.optional(),
- // renovacao_cartao: SN.optional(),
-
- // Situação
- situacao: AI,
-
- // Campos numéricos
- valor: OptionalNumber,
- maximo_pessoa: OptionalNumber,
- servico_caixa_id: OptionalNumber,
- emolumento_id: z.number().nullable(),
- emolumento_obrigatorio: z.number().nullable(),
-
- // Relacionamentos e permissões
- tipo_item: OneCharString,
- requer_autorizacao: OneCharString,
- requer_biometria: OneCharString,
- tipo_pessoa: OneCharString,
- tb_reconhecimentotipo_id: OptionalNumber,
- // tipo_permissao_cpf: OneCharString,
- requer_abonador: OneCharString,
- // requer_representante: OneCharString,
- requer_cpf: OneCharString,
- // alterar_valor: OneCharString,
- // pagina_acrescida: OneCharString,
-
- // Campos auxiliares usados apenas no formulário (não persistidos)
- valor_emolumento: z.number().optional(),
- valor_taxa_judiciaria: z.number().optional(),
- fundesp_valor: z.number().optional(),
- valor_total: z.number().optional(),
- etiquetas_carimbos: z.any().optional(),
- emolumento: z.any().optional(),
- emolumento_auxiliar: z.any().optional(),
-});
-
-/**
- * Tipo inferido do schema — usado diretamente no useForm
- */
-export type TServicoTipoFormValues = z.infer;
diff --git a/src/app/(protected)/(cadastros)/cadastros/_services/g_emolumento/GEmolumentoIndexService.ts b/src/app/(protected)/(cadastros)/cadastros/_services/g_emolumento/GEmolumentoIndexService.ts
deleted file mode 100644
index 8d90167..0000000
--- a/src/app/(protected)/(cadastros)/cadastros/_services/g_emolumento/GEmolumentoIndexService.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-// Importa o utilitário responsável por lidar com erros de forma padronizada no cliente
-import { withClientErrorHandler } from '@/shared/actions/withClientErrorHandler/withClientErrorHandler';
-
-// Importa a função que realiza a requisição de listagem dos tipos de marcação
-import { GEmolumentoIndexData } from '../../_data/GEmolumento/GEmolumentoIndexData';
-import { GEmolumentoReadInterface } from '../../_interfaces/GEmolumentoReadInterface';
-
-// Função assíncrona responsável por executar o serviço de listagem de tipos de marcação
-async function executeGEmolumentoIndexService(data: GEmolumentoReadInterface) {
-
- // Chama a função que realiza a requisição à API e aguarda a resposta
- const response = await GEmolumentoIndexData(data);
-
- // Retorna a resposta obtida da requisição
- return response;
-}
-
-// Exporta o serviço encapsulado pelo handler de erro, garantindo tratamento uniforme em caso de falhas
-export const GEmolumentoIndexService = withClientErrorHandler(executeGEmolumentoIndexService);
diff --git a/src/components/app-sidebar.tsx b/src/components/app-sidebar.tsx
index ff3e156..da03eea 100644
--- a/src/components/app-sidebar.tsx
+++ b/src/components/app-sidebar.tsx
@@ -171,8 +171,8 @@ const data = {
url: '/administrativo/centrais/censec/naturezas-litigios',
},
{
- title: 'Serviços/Tipos',
- url: '/cadastros/servicos-tipo/',
+ title: 'Tipos/Serviços',
+ url: '/administrativo/tipos-servicos',
},
{
title: 'Atos/Partes Tipos',
diff --git a/src/packages/administrativo/components/CCaixaServico/CCaixaServicoSelect.tsx b/src/packages/administrativo/components/CCaixaServico/CCaixaServicoSelect.tsx
index 3b03b5e..2d31f91 100644
--- a/src/packages/administrativo/components/CCaixaServico/CCaixaServicoSelect.tsx
+++ b/src/packages/administrativo/components/CCaixaServico/CCaixaServicoSelect.tsx
@@ -1,6 +1,5 @@
'use client';
-import React from 'react';
import { Button } from '@/components/ui/button';
import {
Command,
@@ -13,10 +12,11 @@ import {
import { FormControl } from '@/components/ui/form';
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
import { cn } from '@/lib/utils';
-import { CheckIcon, ChevronsUpDownIcon } from 'lucide-react';
+import { CCaixaServicoReadInterface } from '@/packages/administrativo/hooks/CCaixaServico/CCaixaServicoReadInterface';
+import { useCCaixaServicoReadHook } from '@/packages/administrativo/interfaces/CCaixaServico/useCCaixaServicoReadHook';
import GetCapitalize from '@/shared/actions/text/GetCapitalize';
-import { useCCaixaServicoReadHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/c_caixa_servico/useCCaixaServicoReadHook';
-import { CCaixaServicoReadInterface } from '@/app/(protected)/(cadastros)/cadastros/_interfaces/CCaixaServicoReadInterface';
+import { CheckIcon, ChevronsUpDownIcon } from 'lucide-react';
+import React from 'react';
export default function CCaixaServicoSelect({ sistema_id, field }: any) {
const cCaixaServicoReadParams: CCaixaServicoReadInterface = { sistema_id };
diff --git a/src/packages/administrativo/components/GCalculo/GCalculoForm.tsx b/src/packages/administrativo/components/GCalculo/GCalculoForm.tsx
index 3ec75c0..83236cc 100644
--- a/src/packages/administrativo/components/GCalculo/GCalculoForm.tsx
+++ b/src/packages/administrativo/components/GCalculo/GCalculoForm.tsx
@@ -115,7 +115,10 @@ export default function GCalculoForm({
render={({ field }) => (
Emolumento
-
+
)}
diff --git a/src/packages/administrativo/components/GCalculo/GCalculoTable.tsx b/src/packages/administrativo/components/GCalculo/GCalculoTable.tsx
index 0319162..94dae29 100644
--- a/src/packages/administrativo/components/GCalculo/GCalculoTable.tsx
+++ b/src/packages/administrativo/components/GCalculo/GCalculoTable.tsx
@@ -5,12 +5,12 @@ import { DataTable } from '@/shared/components/dataTable/DataTable';
import GCalculoColumns from './GCalculoColumns';
-/**
- * Componente principal da tabela de Naturezas
- */
export default function GCalculoTable({ data, onEdit, onDelete }: GCalculoTableInterface) {
+
const columns = GCalculoColumns(onEdit, onDelete);
+
return (
+
+
);
}
diff --git a/src/packages/administrativo/components/GEmolumento/GEmolumentoSelect.tsx b/src/packages/administrativo/components/GEmolumento/GEmolumentoSelect.tsx
index a5ebcd4..d3c107a 100644
--- a/src/packages/administrativo/components/GEmolumento/GEmolumentoSelect.tsx
+++ b/src/packages/administrativo/components/GEmolumento/GEmolumentoSelect.tsx
@@ -3,22 +3,6 @@
import { CheckIcon, ChevronsUpDownIcon } from 'lucide-react';
import React from 'react';
-import { useGEmolumentoReadHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/g_emolumento/useGEmolumentoReadHook';
-import { GEmolumentoReadInterface } from '@/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoReadInterface';
-import { Button } from '@/components/ui/button';
-import {
- Command,
- CommandEmpty,
- CommandGroup,
- CommandInput,
- CommandItem,
- CommandList,
-
-import { CheckIcon, ChevronsUpDownIcon } from 'lucide-react';
-import React from 'react';
-
-import { useGEmolumentoReadHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/g_emolumento/useGEmolumentoReadHook';
-import { GEmolumentoReadInterface } from '@/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoReadInterface';
import { Button } from '@/components/ui/button';
import {
Command,
@@ -31,6 +15,8 @@ import {
import { FormControl } from '@/components/ui/form';
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
import { cn } from '@/lib/utils';
+import { useGEmolumentoReadHook } from '@/packages/administrativo/hooks/GEmolumento/useGEmolumentoReadHook';
+import { GEmolumentoReadInterface } from '@/packages/administrativo/interfaces/GEmolumento/GEmolumentoReadInterface';
import GetCapitalize from '@/shared/actions/text/GetCapitalize';
// Tipagem das props do componente
@@ -142,7 +128,7 @@ export default function GEmolumentoSelect({
if (onSelectChange)
onSelectChange({
key: Number(item.emolumento_id),
- value: item.descricao,
+ value: item.descricao ?? '',
});
// Fecha o popover
@@ -168,28 +154,4 @@ export default function GEmolumentoSelect({
);
- // Fecha o popover
- setOpen(false);
-}}
- >
- {/* Ícone de seleção (check) */ }
- < CheckIcon
-className = {
- cn(
- 'mr-2 h-4 w-4',
- String(field.value?.key ?? field.value) === String(item.emolumento_id)
- ? 'opacity-100'
- : 'opacity-0',
- )}
- />
-{/* Nome formatado do emolumento */ }
-{ GetCapitalize(item.descricao) }
-
- ))}
-
-
-
-
-
- );
}
diff --git a/src/packages/administrativo/components/GEmolumento/GEmolumentoServicoSelect.tsx b/src/packages/administrativo/components/GEmolumento/GEmolumentoServicoSelect.tsx
index bf7a479..11f3347 100644
--- a/src/packages/administrativo/components/GEmolumento/GEmolumentoServicoSelect.tsx
+++ b/src/packages/administrativo/components/GEmolumento/GEmolumentoServicoSelect.tsx
@@ -3,8 +3,6 @@
import { CheckIcon, ChevronsUpDownIcon } from 'lucide-react';
import { useCallback, useEffect, useMemo, useState } from 'react';
-import { useGEmolumentoReadHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/g_emolumento/useGEmolumentoReadHook';
-import { GEmolumentoReadInterface } from '@/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoReadInterface';
import { Button } from '@/components/ui/button';
import {
Command,
@@ -17,6 +15,8 @@ import {
import { FormControl } from '@/components/ui/form';
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
import { cn } from '@/lib/utils';
+import { useGEmolumentoReadHook } from '@/packages/administrativo/hooks/GEmolumento/useGEmolumentoReadHook';
+import { GEmolumentoReadInterface } from '@/packages/administrativo/interfaces/GEmolumento/GEmolumentoReadInterface';
import GetCapitalize from '@/shared/actions/text/GetCapitalize';
// Tipagem das props do componente
diff --git a/src/packages/administrativo/components/GEmolumentoItem/GEmolumentoItemForm.tsx b/src/packages/administrativo/components/GEmolumentoItem/GEmolumentoItemForm.tsx
index f6bcb83..e2c2846 100644
--- a/src/packages/administrativo/components/GEmolumentoItem/GEmolumentoItemForm.tsx
+++ b/src/packages/administrativo/components/GEmolumentoItem/GEmolumentoItemForm.tsx
@@ -30,10 +30,6 @@ import LoadingButton from '@/shared/components/loadingButton/LoadingButton';
import { useGEmolumentoItemFormHook } from '../../hooks/GEmolumentoItem/useGEmolumentoItemFormHook';
import { GEmolumentoItemFormInterface } from '../../interfaces/GEmolumentoItem/GEmolumentoItemFormInterface';
-/**
- * Formulário de cadastro/edição de Natureza
- * Baseado nos campos da tabela G_NATUREZA
- */
export default function GEmolumentoItemForm({
isOpen,
data,
diff --git a/src/packages/administrativo/components/GGramatica/GGramaticaForm.tsx b/src/packages/administrativo/components/GGramatica/GGramaticaForm.tsx
index b9710c3..0edda15 100644
--- a/src/packages/administrativo/components/GGramatica/GGramaticaForm.tsx
+++ b/src/packages/administrativo/components/GGramatica/GGramaticaForm.tsx
@@ -38,6 +38,7 @@ export default function GGramaticaForm({
onSave,
buttonIsLoading,
}: GGramaticaFormInterface) {
+
const form = useGGramaticaFormHook({});
// Atualiza o formulário quando recebe dados para edição
diff --git a/src/packages/administrativo/components/GMarcacaoTipo/GMarcacaoTipoSelect.tsx b/src/packages/administrativo/components/GMarcacaoTipo/GMarcacaoTipoSelect.tsx
index 4720476..0635bd6 100644
--- a/src/packages/administrativo/components/GMarcacaoTipo/GMarcacaoTipoSelect.tsx
+++ b/src/packages/administrativo/components/GMarcacaoTipo/GMarcacaoTipoSelect.tsx
@@ -1,6 +1,5 @@
'use client';
-import React from 'react';
import { Button } from '@/components/ui/button';
import {
Command,
@@ -13,10 +12,11 @@ import {
import { FormControl } from '@/components/ui/form';
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
import { cn } from '@/lib/utils';
-import { CheckIcon, ChevronsUpDownIcon } from 'lucide-react';
+import { useGMarcacaoTipoReadHook } from '@/packages/administrativo/hooks/GMarcacaoTipo/useGMarcacaoTipoReadHook';
+import { GMarcacaoTipoReadInterface } from '@/packages/administrativo/interfaces/GMarcacaoTipo/GMarcacaoTipoReadInterface';
import GetCapitalize from '@/shared/actions/text/GetCapitalize';
-import { useGMarcacaoTipoReadHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/g_marcacao_tipo/useGMarcacaoTipoReadHook';
-import { GMarcacaoTipoReadInterface } from '@/app/(protected)/(cadastros)/cadastros/_interfaces/GMarcacaoTipoReadInterface';
+import { CheckIcon, ChevronsUpDownIcon } from 'lucide-react';
+import React from 'react';
export default function GMarcacaoTipoSelect({ grupo, sistema_id, situacao, field }: any) {
const gMarcacaoTipoReadParams: GMarcacaoTipoReadInterface = { grupo, sistema_id, situacao };
diff --git a/src/packages/administrativo/components/GMedidaTipo/GMedidaTipoIndex.tsx b/src/packages/administrativo/components/GMedidaTipo/GMedidaTipoIndex.tsx
index ac1fce7..4597ef4 100644
--- a/src/packages/administrativo/components/GMedidaTipo/GMedidaTipoIndex.tsx
+++ b/src/packages/administrativo/components/GMedidaTipo/GMedidaTipoIndex.tsx
@@ -1,21 +1,20 @@
'use client';
-import { useEffect, useState, useCallback } from 'react';
+import { useCallback, useEffect, useState } from 'react';
import { Card, CardContent } from '@/components/ui/card';
+import { useGMedidaTipoReadHook } from '@/packages/administrativo/hooks/GMedidaTipo/useGMedidaTipoReadHook';
+import { useGMedidaTipoRemoveHook } from '@/packages/administrativo/hooks/GMedidaTipo/useGMedidaTipoRemoveHook';
+import { useGMedidaTipoSaveHook } from '@/packages/administrativo/hooks/GMedidaTipo/useGMedidaTipoSaveHook';
+import { GMedidaTipoInterface } from '@/packages/administrativo/interfaces/GMedidaTipo/GMedidaTipoInterface';
import ConfirmDialog from '@/shared/components/confirmDialog/ConfirmDialog';
import { useConfirmDialog } from '@/shared/components/confirmDialog/useConfirmDialog';
import Loading from '@/shared/components/loading/loading';
import { useResponse } from '@/shared/components/response/ResponseContext';
import Header from '@/shared/components/structure/Header';
-import { SituacoesEnum } from '@/shared/enums/SituacoesEnum';
import GMedidaTipoForm from './GMedidaTipoForm';
import GMedidaTipoTable from './GMedidaTipoTable';
-import { useGMedidaTipoReadHook } from '../../hooks/GMedidaTipo/useGMedidaTipoReadHook';
-import { useGMedidaTipoRemoveHook } from '../../hooks/GMedidaTipo/useGMedidaTipoRemoveHook';
-import { useGMedidaTipoSaveHook } from '../../hooks/GMedidaTipo/useGMedidaTipoSaveHook';
-import { GMedidaTipoInterface } from '../../interfaces/GMedidaTipo/GMedidaTipoInterface';
const initialMedidaTipo: GMedidaTipoInterface = {
medida_tipo_id: 0,
@@ -109,8 +108,8 @@ export default function GMedidaTipoIndex() {
title={'Tipos de Medida'}
description={'Gerenciamento de tipos de medida'}
buttonText={'Novo Tipo de Medida'}
- buttonAction={(data) => {
- handleOpenForm((data = initialMedidaTipo));
+ buttonAction={() => {
+ handleOpenForm(null);
}}
/>
diff --git a/src/packages/administrativo/components/GTBBairro/GTBBairroIndex.tsx b/src/packages/administrativo/components/GTBBairro/GTBBairroIndex.tsx
index 5fb9e13..b0592c6 100644
--- a/src/packages/administrativo/components/GTBBairro/GTBBairroIndex.tsx
+++ b/src/packages/administrativo/components/GTBBairro/GTBBairroIndex.tsx
@@ -1,6 +1,6 @@
'use client';
-import { useEffect, useState, useCallback } from 'react';
+import { useCallback, useEffect, useState } from 'react';
import { Card, CardContent } from '@/components/ui/card';
import { useGTBBairroReadHook } from '@/packages/administrativo/hooks/GTBBairro/useGTBBairroReadHook';
@@ -13,9 +13,9 @@ import { useResponse } from '@/shared/components/response/ResponseContext';
import Header from '@/shared/components/structure/Header';
import { SituacoesEnum } from '@/shared/enums/SituacoesEnum';
+import { GTBBairroInterface } from '../../interfaces/GTBBairro/GTBBairroInterface';
import GTBBairroForm from './GTBBairroForm';
import GTBBairroTable from './GTBBairroTable';
-import { GTBBairroInterface } from '../../interfaces/GTBBairro/GTBBairroInterface';
const initialBairro: GTBBairroInterface = {
sistema_id: null,
@@ -123,8 +123,8 @@ export default function GTBBairroIndex() {
title={'Bairros'}
description={'Gerenciamento de Bairros'}
buttonText={'Novo Bairro'}
- buttonAction={(data) => {
- handleOpenForm((data = initialBairro));
+ buttonAction={() => {
+ handleOpenForm(null);
}}
/>
diff --git a/src/packages/administrativo/components/GTBEstadoCivil/GTBEstadoCivilIndex.tsx b/src/packages/administrativo/components/GTBEstadoCivil/GTBEstadoCivilIndex.tsx
index 92d092a..862d54f 100644
--- a/src/packages/administrativo/components/GTBEstadoCivil/GTBEstadoCivilIndex.tsx
+++ b/src/packages/administrativo/components/GTBEstadoCivil/GTBEstadoCivilIndex.tsx
@@ -1,6 +1,6 @@
'use client';
-import { useEffect, useState, useCallback } from 'react';
+import { useCallback, useEffect, useState } from 'react';
import { Card, CardContent } from '@/components/ui/card';
import ConfirmDialog from '@/shared/components/confirmDialog/ConfirmDialog';
@@ -9,12 +9,12 @@ import Loading from '@/shared/components/loading/loading';
import { useResponse } from '@/shared/components/response/ResponseContext';
import Header from '@/shared/components/structure/Header';
-import GTBEstadoCivilForm from './GTBEstadoCivilForm';
-import GTBEstadoCivilTable from './GTBEstadoCivilTable';
import { useGTBEstadoCivilReadHook } from '../../hooks/GTBEstadoCivil/useGTBEstadoCivilReadHook';
import { useGTBEstadoCivilRemoveHook } from '../../hooks/GTBEstadoCivil/useGTBEstadoCivilRemoveHook';
import { useGTBEstadoCivilSaveHook } from '../../hooks/GTBEstadoCivil/useGTBEstadoCivilSaveHook';
import { GTBEstadoCivilInterface } from '../../interfaces/GTBEstadoCivil/GTBEstadoCivilInterface';
+import GTBEstadoCivilForm from './GTBEstadoCivilForm';
+import GTBEstadoCivilTable from './GTBEstadoCivilTable';
const initalEstadoCivil: GTBEstadoCivilInterface = {
tb_estadocivil_id: 0,
@@ -109,8 +109,8 @@ export default function GTBEstadoCivilIndex() {
title={'Estados Civis'}
description={'Gerenciamento de Estados Civis'}
buttonText={'Novo Estado Civil'}
- buttonAction={(data) => {
- handleOpenForm((data = initalEstadoCivil));
+ buttonAction={() => {
+ handleOpenForm(null);
}}
/>
diff --git a/src/packages/administrativo/components/GUsuario/GUsuarioSelect.tsx b/src/packages/administrativo/components/GUsuario/GUsuarioSelect.tsx
index ee5d466..39fd95b 100644
--- a/src/packages/administrativo/components/GUsuario/GUsuarioSelect.tsx
+++ b/src/packages/administrativo/components/GUsuario/GUsuarioSelect.tsx
@@ -16,10 +16,10 @@ import { FormControl } from '@/components/ui/form';
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
import { cn } from '@/lib/utils';
import { useGUsuarioIndexHook } from '@/packages/administrativo/hooks/GUsuario/useGUsuarioIndexHook';
+import GUsuarioIndexInterface from '@/packages/administrativo/interfaces/GUsuario/GUsuarioIndexInterface';
import GUsuarioSelectInterface from '@/packages/administrativo/interfaces/GUsuario/GUsuarioSelectInterface';
import GetCapitalize from '@/shared/actions/text/GetCapitalize';
-import GUsuarioIndexInterface from '../../interfaces/GUsuario/GusuarioIndexInterface';
export default function GUsuarioSelect({ field }: GUsuarioSelectInterface) {
const [open, setOpen] = useState(false);
diff --git a/src/packages/administrativo/components/TCensecNaturezaLitigio/TCensecNaturezaLitigioIndex.tsx b/src/packages/administrativo/components/TCensecNaturezaLitigio/TCensecNaturezaLitigioIndex.tsx
index 6c46a87..00b5df9 100644
--- a/src/packages/administrativo/components/TCensecNaturezaLitigio/TCensecNaturezaLitigioIndex.tsx
+++ b/src/packages/administrativo/components/TCensecNaturezaLitigio/TCensecNaturezaLitigioIndex.tsx
@@ -1,6 +1,6 @@
'use client';
-import { useEffect, useState, useCallback } from 'react';
+import { useCallback, useEffect, useState } from 'react';
import { Card, CardContent } from '@/components/ui/card';
import { useTCensecNaturezaLitigioReadHook } from '@/packages/administrativo/hooks/TCensecNaturezaLitigio/useTCensecNaturezaLitigioReadHook';
@@ -13,9 +13,9 @@ import { useResponse } from '@/shared/components/response/ResponseContext';
import Header from '@/shared/components/structure/Header';
import { SituacoesEnum } from '@/shared/enums/SituacoesEnum';
+import { TCensecNaturezaLitigioInterface } from '../../interfaces/TCensecNaturezaLitigio/TCensecNaturezaLitigioInterface';
import TCensecNaturezaLitigioForm from './TCensecNaturezaLitigioForm';
import TCensecNaturezaLitigioTable from './TCensecNaturezaLitigioTable';
-import { TCensecNaturezaLitigioInterface } from '../../interfaces/TCensecNaturezaLitigio/TCensecNaturezaLitigioInterface';
const initialCensecNaturezaLitigio: TCensecNaturezaLitigioInterface = {
censec_naturezalitigio_id: 0,
@@ -112,7 +112,9 @@ export default function TCensecNaturezaLitigioIndex() {
title={'Natureza do Litígio'}
description={'Gerenciamento de Naturezas do Litígio'}
buttonText={'Nova Natureza'}
- buttonAction={(data) => handleOpenForm((data = initialCensecNaturezaLitigio))}
+ buttonAction={() => {
+ handleOpenForm(null);
+ }}
/>
{/* Tabela */}
diff --git a/src/packages/administrativo/components/TCensecTipoAto/TCensecTipoAtoIndex.tsx b/src/packages/administrativo/components/TCensecTipoAto/TCensecTipoAtoIndex.tsx
index 9fdaa6a..cf2d98c 100644
--- a/src/packages/administrativo/components/TCensecTipoAto/TCensecTipoAtoIndex.tsx
+++ b/src/packages/administrativo/components/TCensecTipoAto/TCensecTipoAtoIndex.tsx
@@ -1,6 +1,6 @@
'use client';
-import { useEffect, useState, useCallback } from 'react';
+import { useCallback, useEffect, useState } from 'react';
import { Card, CardContent } from '@/components/ui/card';
import ConfirmDialog from '@/shared/components/confirmDialog/ConfirmDialog';
@@ -9,13 +9,13 @@ import Loading from '@/shared/components/loading/loading';
import Header from '@/shared/components/structure/Header';
import { SituacoesEnum } from '@/shared/enums/SituacoesEnum';
-import TCensecTipoAtoForm from './TCensecTipoAtoForm';
-import TCensecTipoAtoTable from './TCensecTipoAtoTable';
import { useTCensecReadHook } from '../../hooks/TCensec/useTCensecReadHook';
import { useTCensecTipoAtoReadHook } from '../../hooks/TCensecTipoAto/useTCensecTipoAtoReadHook';
import { useTCensecTipoAtoRemoveHook } from '../../hooks/TCensecTipoAto/useTCensecTipoAtoRemoveHook';
import { useTCensecTipoAtoSaveHook } from '../../hooks/TCensecTipoAto/useTCensecTipoAtoSaveHook';
import { TCensecTipoAtoInterface } from '../../interfaces/TCensecTipoAto/TCensecTipoAtoInterface';
+import TCensecTipoAtoForm from './TCensecTipoAtoForm';
+import TCensecTipoAtoTable from './TCensecTipoAtoTable';
// Estado inicial para criação
const initialTCensecTipoAto: TCensecTipoAtoInterface = {
@@ -106,8 +106,8 @@ export default function TCensecTipoAtoIndex() {
title="Tipos de Ato CENSEC"
description="Gerenciamento de Tipos de Ato vinculados ao CENSEC"
buttonText="Novo Tipo de Ato"
- buttonAction={(data) => {
- handleOpenForm((data = initialTCensecTipoAto));
+ buttonAction={() => {
+ handleOpenForm(null);
}}
/>
diff --git a/src/packages/administrativo/components/TPessoa/TPessoaTableFormColumnsDialog.tsx b/src/packages/administrativo/components/TPessoa/TPessoaTableFormColumnsDialog.tsx
index 0c13af2..df9842b 100644
--- a/src/packages/administrativo/components/TPessoa/TPessoaTableFormColumnsDialog.tsx
+++ b/src/packages/administrativo/components/TPessoa/TPessoaTableFormColumnsDialog.tsx
@@ -85,7 +85,7 @@ export function TPessoaTableFormColumnsDialog(setSelectedTPessoa: React.Dispatch
{pessoa.nome || '-'}
- {empty(pessoa.email) ? 'Email não informado' : pessoa.email}
+ {empty(pessoa?.email) ? 'Email não informado' : pessoa?.email}
diff --git a/src/packages/administrativo/components/TPessoa/TPessoaTableFormSubview.tsx b/src/packages/administrativo/components/TPessoa/TPessoaTableFormSubview.tsx
index 367b213..817999a 100644
--- a/src/packages/administrativo/components/TPessoa/TPessoaTableFormSubview.tsx
+++ b/src/packages/administrativo/components/TPessoa/TPessoaTableFormSubview.tsx
@@ -40,17 +40,15 @@ function TPessoaTableFormSubview({
}, [])
- // Define a classe do botão de biometria com base no status, sem estado extra
const biometriaButtonClass = useMemo(() => {
- switch (1) {
+ const status = 1 as number; // força tipo number
+
+ switch (status) {
case 0:
- // Amarelo (aviso)
return 'bg-amber-100 text-amber-700 border border-amber-300 hover:bg-amber-200 hover:text-amber-800';
case 1:
- // Verde discreto
return 'bg-green-100 text-green-700 border border-green-300 hover:bg-green-200 hover:text-green-800';
case 2:
- // Vermelho (erro)
return 'bg-red-100 text-red-700 border border-red-300 hover:bg-red-200 hover:text-red-800';
default:
return '';
diff --git a/src/packages/administrativo/components/TServicoTipo/TServicoTipoColumns.tsx b/src/packages/administrativo/components/TServicoTipo/TServicoTipoColumns.tsx
new file mode 100644
index 0000000..093b994
--- /dev/null
+++ b/src/packages/administrativo/components/TServicoTipo/TServicoTipoColumns.tsx
@@ -0,0 +1,73 @@
+import { ColumnDef } from '@tanstack/react-table';
+import { EllipsisIcon, PencilIcon, Trash2Icon } from 'lucide-react';
+
+import { Button } from '@/components/ui/button';
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuGroup,
+ DropdownMenuItem,
+ DropdownMenuSeparator,
+ DropdownMenuTrigger,
+} from '@/components/ui/dropdown-menu';
+import TServicoTipoInterface from '@/packages/administrativo/interfaces/TServicoTipo/TServicoTipoInterface';
+import GetCapitalize from '@/shared/actions/text/GetCapitalize';
+import { SortableHeader } from '@/shared/components/dataTable/SortableHeader';
+
+
+export default function TServicoTipoColumns(
+ onEdit: (item: TServicoTipoInterface, isEditingFormStatus: boolean) => void,
+ onDelete: (item: TServicoTipoInterface, isEditingFormStatus: boolean) => void,
+): ColumnDef[] {
+ return [
+ // ID
+ {
+ accessorKey: 'servico_tipo_id',
+ header: ({ column }) => SortableHeader('ID', column),
+ cell: ({ row }) => Number(row.getValue('servico_tipo_id')),
+ enableSorting: true,
+ },
+
+ // Descrição
+ {
+ accessorKey: 'descricao',
+ header: ({ column }) => SortableHeader('Descrição', column),
+ cell: ({ row }) => GetCapitalize(String(row.getValue('descricao') || '')),
+ },
+
+ // Ações
+ {
+ id: 'actions',
+ header: 'Ações',
+ cell: ({ row }) => {
+ const data = row.original;
+ return (
+
+
+
+
+
+
+ onEdit(data, true)}>
+
+ Editar
+
+
+ onDelete(data, true)}
+ >
+
+ Remover
+
+
+
+
+ );
+ },
+ enableSorting: false,
+ enableHiding: false,
+ },
+ ];
+}
diff --git a/src/app/(protected)/(cadastros)/cadastros/_components/t_servico_tipo/TServicoTipoForm.tsx b/src/packages/administrativo/components/TServicoTipo/TServicoTipoForm.tsx
similarity index 75%
rename from src/app/(protected)/(cadastros)/cadastros/_components/t_servico_tipo/TServicoTipoForm.tsx
rename to src/packages/administrativo/components/TServicoTipo/TServicoTipoForm.tsx
index e9da655..e1632dc 100644
--- a/src/app/(protected)/(cadastros)/cadastros/_components/t_servico_tipo/TServicoTipoForm.tsx
+++ b/src/packages/administrativo/components/TServicoTipo/TServicoTipoForm.tsx
@@ -1,5 +1,8 @@
'use client';
+import { CirclePlus, DollarSign, Settings, SquarePen, Trash } from 'lucide-react';
+import { useEffect, useState } from 'react';
+
import { Button } from '@/components/ui/button';
import { Checkbox } from '@/components/ui/checkbox';
import {
@@ -20,11 +23,6 @@ import {
FormMessage,
} from '@/components/ui/form';
import { Input } from '@/components/ui/input';
-import {
- Select,
- SelectContent,
- SelectItem
-} from '@/components/ui/select';
import {
Table,
TableBody,
@@ -34,151 +32,94 @@ import {
TableRow,
} from '@/components/ui/table';
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
-import { zodResolver } from '@hookform/resolvers/zod';
-import { CirclePlus, DollarSign, Settings, SquarePen, Trash } from 'lucide-react';
-import React, { useState } from 'react';
-import { useForm } from 'react-hook-form';
-
-import { useGEmolumentoItemReadHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/g_emolumento_item/useGEmolumentoItemReadHook';
-import { useTServicoEtiquetaReadHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/t_servico_etiqueta/useTServicoEtiquetaReadHook';
-import { useTServicoEtiquetaRemoveHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/t_servico_etiqueta/useTServicoEtiquetaRemoveHook';
-import { useTServicoEtiquetaSaveHook } from '@/app/(protected)/(cadastros)/cadastros/_hooks/t_servico_etiqueta/useTServicoEtiquetaSaveHook';
-import { GEmolumentoItemReadInterface } from '@/app/(protected)/(cadastros)/cadastros/_interfaces/GEmolumentoItemReadInterface';
import CCaixaServicoSelect from '@/packages/administrativo/components/CCaixaServico/CCaixaServicoSelect';
import GEmolumentoSelect from '@/packages/administrativo/components/GEmolumento/GEmolumentoSelect';
import GMarcacaoTipoSelect from '@/packages/administrativo/components/GMarcacaoTipo/GMarcacaoTipoSelect';
import TTBReconhecimentoTipoSelect from '@/packages/administrativo/components/TTBReconhecimentoTipo/TTBReconhecimentoTipoSelect';
+import { TServicoTipoSaveData } from '@/packages/administrativo/data/TServicoTipo/TServicoTipoSaveData';
+import { useGEmolumentoItemReadHook } from '@/packages/administrativo/hooks/GEmolumentoItem/useGEmolumentoItemReadHook';
+import { useTServicoEtiquetaReadHook } from '@/packages/administrativo/hooks/TServicoEtiqueta/useTServicoEtiquetaReadHook';
+import { useTServicoEtiquetaRemoveHook } from '@/packages/administrativo/hooks/TServicoEtiqueta/useTServicoEtiquetaRemoveHook';
+import { useTServicoEtiquetaSaveHook } from '@/packages/administrativo/hooks/TServicoEtiqueta/useTServicoEtiquetaSaveHook';
+import { useTServicoTipoFormHook } from '@/packages/administrativo/hooks/TServicoTipo/useTServicoTipoFormHook';
+import { GEmolumentoItemReadInterface } from '@/packages/administrativo/interfaces/GEmolumentoItem/GEmolumentoItemReadInterface';
+import TServicoTipoFormInterface from '@/packages/administrativo/interfaces/TServicoTipo/TServicoTipoFormInterface';
+import { TServicoTipoFormValues } from '@/packages/administrativo/schemas/TServicoTipo/TServicoTipoSchema';
import CategoriaServicoSelect from '@/shared/components/categoriaServicoSelect/CategoriaServicoSelect';
import { ConfirmacaoCheckBox } from '@/shared/components/confirmacao/ConfirmacaoCheckBox';
import ConfirmacaoSelect from '@/shared/components/confirmacao/ConfirmacaoSelect';
import { TipoPessoaSelect } from '@/shared/components/tipoPessoa/tipoPessoaSelect';
-import { useEffect } from 'react';
-import { TServicoTipoSaveData } from '../../../../../../packages/administrativo/data/TServicoTipo/TServicoTipoSaveData';
-import { TServicoTipoFormValues, TServicoTipoSchema } from '../../_schemas/TServicoTipoSchema';
-
-// Propriedades esperadas pelo componente
-interface Props {
- isOpen: boolean;
- data: TServicoTipoFormValues | null;
- onClose: (item: null, isFormStatus: boolean) => void;
- onSave: (data: TServicoTipoFormValues) => void;
-}
+import { ConfirmacaoEnum } from '@/shared/enums/ConfirmacaoEnum';
+import { SituacoesEnum } from '@/shared/enums/SituacoesEnum';
// Componente principal do formulário
-export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Props) {
- // Inicializa o react-hook-form com validação via Zod
- const form = useForm({
- resolver: zodResolver(TServicoTipoSchema),
- defaultValues: {
- servico_tipo_id: 0,
- emolumento_id: 0,
- emolumento_obrigatorio: 0,
- descricao: '',
- maximo_pessoa: 0,
- tipo_item: '',
- frenteverso: 'N',
- averbacao: 'N',
- transferencia_veiculo: 'N',
- usar_a4: 'N',
- etiqueta_unica: 'N',
- situacao: 'A',
- selar: 'N',
- valor_emolumento: 0,
- valor_taxa_judiciaria: 0,
- fundesp_valor: 0,
- valor_total: 0,
- tipo_pessoa: 'F', // ou "J"
- } as unknown as TServicoTipoFormValues,
- });
+export default function TServicoTipoForm({
+ isOpen,
+ data,
+ onClose,
+ onSave,
+}: TServicoTipoFormInterface) {
+ const form = useTServicoTipoFormHook({});
- // Carrega o ID caso esteja informado no form
const servico_tipo_id = form.getValues('servico_tipo_id') || 0;
- // Hook responsável por buscar emolumentos no backend
const { tServicoEtiqueta, fetchTServicoEtiqueta } = useTServicoEtiquetaReadHook();
-
- // Hook responsável em salvar o a etiqueta selecionada
- const { tServicoEtiquetaSave, fetchTServicoEtiquetaSave } = useTServicoEtiquetaSaveHook();
-
- // Hook responsável em excluir a etiqueta selecionada
+ const { fetchTServicoEtiquetaSave } = useTServicoEtiquetaSaveHook();
const { fetchTServicoEtiquetaRemove } = useTServicoEtiquetaRemoveHook();
- // Estado para gerenciar os itens da tabela de etiquetas/carimbos
const [itensTabela, setItensTabela] = useState<
{ servico_etiqueta_id: string | number; descricao: string }[]
>([]);
- // Carrega os dados de emolumentos apenas uma vez ao montar o componente
- React.useEffect(() => {
- // Função para consumir o endpoint da api
+ // Carrega etiquetas quando o form tem ID
+ useEffect(() => {
const loadData = async () => {
- // Verifica se o ID do serviço tipo foi informado
if (servico_tipo_id > 0) {
- // Consumo o endpoint da api
await fetchTServicoEtiqueta({ servico_tipo_id });
}
};
-
- // Chama a função para consumir o endpoint da api
loadData();
}, [servico_tipo_id]);
- // Atualiza itensTabela sempre que tServicoEtiqueta for carregado
- React.useEffect(() => {
- // Verifica se a consulta retornou os dados como objeto
+ // Atualiza a tabela quando muda o hook
+ useEffect(() => {
if (Array.isArray(tServicoEtiqueta) && tServicoEtiqueta.length > 0) {
- // Lista os itens
const mapped = tServicoEtiqueta.map((item) => ({
servico_etiqueta_id: Number(item.servico_etiqueta_id ?? 0),
descricao: String(item.descricao ?? 'Sem descrição'),
}));
-
setItensTabela(mapped);
} else {
setItensTabela([]);
}
}, [tServicoEtiqueta]);
- // Função para adicionar um novo item à tabela Etiquetas/Carimbos
const handleAddEtiquetaCarimbo = async () => {
- // Captura o valor selecionado do formulário
const valorSelecionado = form.getValues('etiquetas_carimbos');
- // Se não houver valor selecionado, não faz nada
if (!valorSelecionado) return;
- // Verifica se o item já se encontra na tabela
const alreadyExists = itensTabela.some(
- (p) => String(p.descricao).trim() === String(valorSelecionado.value).trim(),
+ (p) => String(p.descricao).trim() === String(valorSelecionado).trim(),
);
- // Caso o item já esteja na tabela, para o procedimento
- if (alreadyExists) {
- return;
- }
+ if (alreadyExists) return;
- // --- Envio opcional para API ---
try {
- // Verifica se o ID do serviço tipo foi informado
if (servico_tipo_id > 0) {
- // Monta o objeto do item selecionado
- const data = {
- etiqueta_modelo_id: valorSelecionado.key,
+ const dataToSave = {
+ etiqueta_modelo_id: 0, // não há ID, pois o valor é string
servico_tipo_id: servico_tipo_id,
};
- // Consumo o endpoint da api
- const response = await fetchTServicoEtiquetaSave(data);
+ const response = await fetchTServicoEtiquetaSave(dataToSave);
- // Verifica se tServicoEtiquetaSave é um objeto válido (não null e não array)
if (response && typeof response === 'object' && !Array.isArray(response)) {
- // Monta o objeto com um único item para a tabela
const item = {
servico_etiqueta_id: Number(response.servico_etiqueta_id) ?? 0,
- descricao: String(valorSelecionado.value) ?? 'Sem descrição',
+ descricao: String(valorSelecionado) ?? 'Sem descrição',
};
- // Adiciona o item na tabela
setItensTabela((prev) => {
const idAtual = String(response.servico_etiqueta_id ?? '');
const exists = prev.some((p) => String(p.servico_etiqueta_id ?? '') === idAtual);
@@ -186,110 +127,80 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop
});
}
}
-
- // Se ocorrer erros, informo
} catch (error) {
console.log('Erro ao enviar o serviço para a API: ' + error);
}
};
- // Função para remover um item da tabela
+ // Remove item da tabela
const handleRemoveItem = async (servico_etiqueta_id: number) => {
try {
- // Verifica se o ID da etiqueta tipo foi informado
if (servico_etiqueta_id > 0) {
- // Monta o objeto do item selecionado
- const data = {
- servico_etiqueta_id: servico_etiqueta_id,
- };
-
- // Consumo o endpoint da api
+ const data = { servico_etiqueta_id };
await fetchTServicoEtiquetaRemove(data);
}
- // Atualiza a tabela no form
setItensTabela((prev) =>
prev.filter((p) => Number(p.servico_etiqueta_id) !== servico_etiqueta_id),
);
-
- // Se ocorrer erros, informo
} catch (error) {
console.log('Erro ao enviar o serviço para a API: ' + error);
}
};
- // Parâmetros para o hook de leitura de emolumento_item
- // Inicializa com valores padrão (0) para evitar uso de propriedades não declaradas.
const gEmolumentoItemReadParams: GEmolumentoItemReadInterface = { emolumento_id: 0, valor: 0 };
- // Estados locais
- const [open, setOpen] = React.useState(false);
- const [isLoading, setIsLoading] = React.useState(false);
+ const [open, setOpen] = useState(false);
+ const [isLoading, setIsLoading] = useState(false);
- // Hook que realiza a leitura do emolumento_item
const { gGEmolumentoItem, fetchGEmolumentoItem } = useGEmolumentoItemReadHook();
- // Busca os dados ao montar o componente (somente se houver ID válido)
- React.useEffect(() => {
+ // Busca emolumento item
+ useEffect(() => {
const loadData = async () => {
- // Validação: só executa se houver emolumento_id informado e válido
if (
- !gEmolumentoItemReadParams?.emolumento_id || // se não existir o campo
- isNaN(Number(gEmolumentoItemReadParams.emolumento_id)) || // se não for número
- Number(gEmolumentoItemReadParams.emolumento_id) <= 0 // se for zero ou negativo
+ !gEmolumentoItemReadParams?.emolumento_id ||
+ isNaN(Number(gEmolumentoItemReadParams.emolumento_id)) ||
+ Number(gEmolumentoItemReadParams.emolumento_id) <= 0
) {
- return; // encerra sem executar a busca
+ return;
}
- // Executa a busca apenas se ainda não houver dados carregados
if (!gGEmolumentoItem.length) {
setIsLoading(true);
await fetchGEmolumentoItem(gEmolumentoItemReadParams);
setIsLoading(false);
}
};
-
loadData();
}, [gEmolumentoItemReadParams.emolumento_id]);
- // Captura o ID do serviço para uso local
const servicoTipoId = Number(form.watch('servico_tipo_id') || data?.servico_tipo_id || 0);
- // Função chamada ao clicar em "Salvar"
const handleSave = async (formData: TServicoTipoFormValues) => {
try {
- // Se o form não trouxe o ID, tenta puxar de `data`
const servico_tipo_id =
formData.servico_tipo_id || data?.servico_tipo_id || form.getValues('servico_tipo_id') || 0;
- // Atualiza o valor dentro do formData
formData.servico_tipo_id = Number(servico_tipo_id);
- // Intercepta e trata o valor de emolumento_id
const emolumentoId = Number(formData.emolumento_id ?? 0);
formData.emolumento_id = emolumentoId === 0 ? null : emolumentoId;
- // Intercepta e trata o valor de emolumento_obrigatorio
const emolumentoObrigatorio = Number(formData.emolumento_obrigatorio ?? 0);
formData.emolumento_obrigatorio = emolumentoObrigatorio === 0 ? null : emolumentoObrigatorio;
- // Detecta automaticamente se é edição
const isEditing = !!formData.servico_tipo_id && Number(formData.servico_tipo_id) > 0;
- // Envia os dados para o módulo com o método correto
const response = await TServicoTipoSaveData({
...formData,
- metodo: isEditing ? 'PUT' : 'POST', // 💡 Definição explícita do método
+ metodo: isEditing ? 'PUT' : 'POST',
});
- // Atualiza o formulário apenas se o retorno for válido
if (response?.data?.servico_tipo_id) {
const novoId = response.data.servico_tipo_id;
- form.setValue('servico_tipo_id', novoId); // mantém o ID atualizado
-
- // Merge dos dados para preservar valores locais
+ form.setValue('servico_tipo_id', novoId);
form.reset({ ...form.getValues(), ...response.data });
-
console.log(`Serviço ${isEditing ? 'atualizado' : 'criado'} com sucesso (ID: ${novoId})`);
} else {
console.log('Erro ao salvar o tipo de serviço.');
@@ -299,17 +210,12 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop
}
};
- // Carrega os dados apenas quando o modal
- // abrir e houver um registro para editar
+ // Carrega dados ao abrir o modal
useEffect(() => {
- // Remove as etiquetas selecionadas
setItensTabela([]);
-
if (isOpen && data && Number(data.servico_tipo_id ?? 0) > 0) {
- /** Carrega os dados no formulário */
- form.reset(data); // edição
+ form.reset(data);
} else if (isOpen && !data) {
- /** Reseta os campos do formulário */
form.reset({
servico_tipo_id: 0,
emolumento_id: 0,
@@ -317,13 +223,13 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop
descricao: '',
maximo_pessoa: 0,
tipo_item: '',
- frenteverso: 'N',
- averbacao: 'N',
- transferencia_veiculo: 'N',
- usar_a4: 'N',
- etiqueta_unica: 'N',
- situacao: 'A',
- selar: 'N',
+ frenteverso: ConfirmacaoEnum.N,
+ averbacao: ConfirmacaoEnum.N,
+ transferencia_veiculo: ConfirmacaoEnum.N,
+ usar_a4: ConfirmacaoEnum.N,
+ etiqueta_unica: ConfirmacaoEnum.N,
+ situacao: SituacoesEnum.A,
+ selar: ConfirmacaoEnum.N,
valor_emolumento: 0,
valor_taxa_judiciaria: 0,
fundesp_valor: 0,
@@ -496,8 +402,10 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop
field.onChange(checked ? 'S' : 'N')} // grava "S" ou "N"
+ checked={field.value === ConfirmacaoEnum.S}
+ onCheckedChange={(checked) =>
+ field.onChange(checked ? ConfirmacaoEnum.S : ConfirmacaoEnum.N)
+ }
disabled={!isEnabled}
/>
@@ -516,9 +424,7 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop
control={form.control}
name="situacao"
render={({ field }) => {
- // Considera "A" ou vazio como marcado
- const isChecked = field.value === 'A' || !field.value;
-
+ const isChecked = field.value === SituacoesEnum.A || !field.value;
return (
@@ -526,11 +432,15 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop
className="cursor-pointer"
checked={isChecked}
onCheckedChange={(checked) => {
- field.onChange(checked ? 'A' : 'I'); // grava "A" ou "I" no form
+ field.onChange(
+ checked ? SituacoesEnum.A : SituacoesEnum.I
+ );
}}
/>
- Ativo
+
+ Ativo
+
);
}}
@@ -602,19 +512,9 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop
render={({ field }) => (
Biometria
-
+
+
+
)}
@@ -629,19 +529,9 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop
render={({ field }) => (
CPF/CNPJ
-
+
+
+
)}
@@ -656,19 +546,9 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop
render={({ field }) => (
Autorização
-
+
+
+
)}
@@ -683,19 +563,9 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop
render={({ field }) => (
Abonador
-
+
+
+
)}
@@ -759,7 +629,7 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop
variant="outline"
className="w-full cursor-pointer"
type="button"
- onClick={() => handleRemoveItem(item.servico_etiqueta_id)}
+ onClick={() => handleRemoveItem(Number(item.servico_etiqueta_id))}
>
Remover
@@ -789,19 +659,9 @@ export default function TServicoTipoForm({ isOpen, data, onClose, onSave }: Prop
render={({ field }) => (
Selar
-
+
+
+
)}
diff --git a/src/app/(protected)/(cadastros)/cadastros/(t_servico_tipo)/servicos-tipo/page.tsx b/src/packages/administrativo/components/TServicoTipo/TServicoTipoIndex.tsx
similarity index 82%
rename from src/app/(protected)/(cadastros)/cadastros/(t_servico_tipo)/servicos-tipo/page.tsx
rename to src/packages/administrativo/components/TServicoTipo/TServicoTipoIndex.tsx
index c976323..ac15cf2 100644
--- a/src/app/(protected)/(cadastros)/cadastros/(t_servico_tipo)/servicos-tipo/page.tsx
+++ b/src/packages/administrativo/components/TServicoTipo/TServicoTipoIndex.tsx
@@ -1,29 +1,24 @@
'use client';
-import { Card, CardContent } from '@/components/ui/card';
import { useCallback, useEffect, useState } from 'react';
-import Loading from '@/shared/components/loading/loading';
-
-// Componentes específicos para TServicoTipo
-import TServicoTipoForm from '../../_components/t_servico_tipo/TServicoTipoForm';
-import TServicoTipoTable from '../../_components/t_servico_tipo/TServicoTipoTable';
-
-// Hooks específicos para TServicoTipo
-import { useTServicoTipoEditHook } from '../../../../../../packages/administrativo/hooks/TServicoTipo/useTServicoTipoEditHook';
-import { useTServicoTipoReadHook } from '../../../../../../packages/administrativo/hooks/TServicoTipo/useTServicoTipoReadHook';
-import { useTServicoTipoRemoveHook } from '../../../../../../packages/administrativo/hooks/TServicoTipo/useTServicoTipoRemoveHook';
-import { useTServicoTipoSaveHook } from '../../../../../../packages/administrativo/hooks/TServicoTipo/useTServicoTipoSaveHook';
-
+import { Card, CardContent } from '@/components/ui/card';
+import { useTServicoTipoEditHook } from '@/packages/administrativo/hooks/TServicoTipo/useTServicoTipoEditHook';
+import { useTServicoTipoReadHook } from '@/packages/administrativo/hooks/TServicoTipo/useTServicoTipoReadHook';
+import { useTServicoTipoRemoveHook } from '@/packages/administrativo/hooks/TServicoTipo/useTServicoTipoRemoveHook';
+import { useTServicoTipoSaveHook } from '@/packages/administrativo/hooks/TServicoTipo/useTServicoTipoSaveHook';
+import TServicoTipoInterface from '@/packages/administrativo/interfaces/TServicoTipo/TServicoTipoInterface';
import ConfirmDialog from '@/shared/components/confirmDialog/ConfirmDialog';
import { useConfirmDialog } from '@/shared/components/confirmDialog/useConfirmDialog';
-
-// Interface específica para TServicoTipo
+import Loading from '@/shared/components/loading/loading';
import Header from '@/shared/components/structure/Header';
-import TServicoTipoInterface from '../../_interfaces/TServicoTipoInterface';
-export default function TServicoTipoPage() {
- // Hooks para leitura, salvamento e remoção
+import TServicoTipoForm from './TServicoTipoForm';
+import TServicoTipoTable from './TServicoTipoTable';
+
+
+export default function TServicoTipoIndex() {
+
const { tServicoTipo, fetchTServicoTipo } = useTServicoTipoReadHook();
const { saveTServicoTipo } = useTServicoTipoSaveHook();
const { removeTServicoTipo } = useTServicoTipoRemoveHook();
@@ -33,9 +28,8 @@ export default function TServicoTipoPage() {
const [selectedServicoTipo, setSelectedServicoTipo] = useState(
null,
);
- const [isFormOpen, setIsFormOpen] = useState(false);
- // Estado para saber qual item será deletado
+ const [isFormOpen, setIsFormOpen] = useState(false);
const [itemToDelete, setItemToDelete] = useState(null);
/**
@@ -95,6 +89,7 @@ export default function TServicoTipoPage() {
// Atualiza a lista de dados
fetchTServicoTipo();
+
},
[saveTServicoTipo, fetchTServicoTipo],
);
@@ -144,7 +139,9 @@ export default function TServicoTipoPage() {
* Tela de loading enquanto carrega os dados
*/
if (!tServicoTipo) {
+
return ;
+
}
return (
diff --git a/src/packages/administrativo/components/TServicoTipo/TServicoTipoSelect.tsx b/src/packages/administrativo/components/TServicoTipo/TServicoTipoSelect.tsx
index 232b308..a742ccc 100644
--- a/src/packages/administrativo/components/TServicoTipo/TServicoTipoSelect.tsx
+++ b/src/packages/administrativo/components/TServicoTipo/TServicoTipoSelect.tsx
@@ -1,7 +1,7 @@
'use client';
import { CheckIcon, ChevronsUpDownIcon } from 'lucide-react';
-import { useCallback, useEffect, useMemo, useState } from 'react';
+import { useCallback, useEffect, useState } from 'react';
import { Button } from '@/components/ui/button';
import {
@@ -16,30 +16,46 @@ import { FormControl } from '@/components/ui/form';
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
import { cn } from '@/lib/utils';
import { useTServicoTipoReadHook } from '@/packages/administrativo/hooks/TServicoTipo/useTServicoTipoReadHook';
+import TServicoTipoIndexInteface from '@/packages/administrativo/interfaces/TServicoTipo/TServicoTipoIndexInteface';
import TServicoTipoSelectInterface from '@/packages/administrativo/interfaces/TServicoTipo/TServicoTipoSelectInterface';
import GetCapitalize from '@/shared/actions/text/GetCapitalize';
+import { ConfirmacaoEnum } from '@/shared/enums/ConfirmacaoEnum';
-import TServicoTipoIndexInteface from '../../interfaces/TServicoTipo/TServicoTipoIndexInteface';
+/**
+ * Estrutura mínima esperada de um tipo de serviço
+ */
+interface TServicoTipoItem {
+ servico_tipo_id?: number;
+ descricao?: string;
+ tipo_item?: string;
+ tipo_pessoa?: string;
+ requer_biometria?: ConfirmacaoEnum;
+ requer_cpf?: ConfirmacaoEnum;
+ servico_caixa_id?: number;
+ selar?: ConfirmacaoEnum;
+}
+/**
+ * Componente de seleção de Tipos de Serviço.
+ * Compatível com react-hook-form e schemas com objetos completos.
+ */
export default function TServicoTipoSelect({ field }: TServicoTipoSelectInterface) {
const [open, setOpen] = useState(false);
const [isLoading, setIsLoading] = useState(false);
const { tServicoTipo = [], fetchTServicoTipo } = useTServicoTipoReadHook();
/**
- * Efeito para buscar os dados apenas uma vez.
+ * Busca inicial de dados
*/
const loadData = useCallback(async () => {
-
- const TServicoTipoIndex: TServicoTipoIndexInteface = {
- urlParams: {
- situacao: 'A'
- }
- }
-
if (tServicoTipo.length) return;
+
+ const params: TServicoTipoIndexInteface = {
+ urlParams: { situacao: 'A' },
+ };
+
setIsLoading(true);
- await fetchTServicoTipo(TServicoTipoIndex);
+ await fetchTServicoTipo(params);
setIsLoading(false);
}, [tServicoTipo.length, fetchTServicoTipo]);
@@ -48,40 +64,44 @@ export default function TServicoTipoSelect({ field }: TServicoTipoSelectInterfac
}, [loadData]);
/**
- * Item selecionado (comparando por ID)
- */
- const selected = useMemo(
- () =>
- tServicoTipo.find(
- (item) => String(item.servico_tipo_id) === String(field?.value?.servico_tipo_id ?? ''),
- ),
- [tServicoTipo, field?.value],
- );
-
- /**
- * Manipulador de seleção
+ * Manipula a seleção de um item
*/
const handleSelect = useCallback(
- (item: any) => {
+ (item: TServicoTipoItem) => {
if (!field?.onChange) return;
- const selectedValue = {
- servico_tipo_id: Number(item.servico_tipo_id),
- descricao: item.descricao,
- tipo_item: item.tipo_item,
- tipo_pessoa: item.tipo_pessoa,
- requer_biometria: item.requer_biometria,
- requer_cpf: item.requer_cpf,
- servico_caixa_id: item.servico_caixa_id,
- selar: item.selar,
+ const selected: TServicoTipoItem = {
+ servico_tipo_id: Number(item.servico_tipo_id ?? 0),
+ descricao: String(item.descricao ?? ''),
+ tipo_item: String(item.tipo_item ?? ''),
+ tipo_pessoa: String(item.tipo_pessoa ?? ''),
+ requer_biometria: (item.requer_biometria as ConfirmacaoEnum) ?? ConfirmacaoEnum.N,
+ requer_cpf: (item.requer_cpf as ConfirmacaoEnum) ?? ConfirmacaoEnum.N,
+ servico_caixa_id: Number(item.servico_caixa_id ?? 0),
+ selar: (item.selar as ConfirmacaoEnum) ?? ConfirmacaoEnum.N,
};
- field.onChange(selectedValue);
+ field.onChange(selected);
setOpen(false);
},
[field],
);
+ /**
+ * Determina o valor exibido no botão principal
+ */
+ const value = field?.value as TServicoTipoItem | undefined;
+
+ const selectedLabel =
+ value?.descricao && typeof value.descricao === 'string'
+ ? GetCapitalize(value.descricao)
+ : 'Selecione...';
+
+ const selectedId =
+ typeof value?.servico_tipo_id === 'number'
+ ? String(value.servico_tipo_id)
+ : '';
+
return (
@@ -93,11 +113,7 @@ export default function TServicoTipoSelect({ field }: TServicoTipoSelectInterfac
disabled={isLoading}
className="justify-between"
>
- {isLoading
- ? 'Carregando...'
- : field.value?.descricao
- ? GetCapitalize(field.value.descricao)
- : 'Selecione...'}
+ {isLoading ? 'Carregando...' : selectedLabel}
@@ -111,24 +127,26 @@ export default function TServicoTipoSelect({ field }: TServicoTipoSelectInterfac
{isLoading ? 'Carregando...' : 'Nenhum resultado encontrado.'}
- {tServicoTipo.map((item) => (
- handleSelect(item)}
- >
-
- {GetCapitalize(item.descricao ?? '')}
-
- ))}
+ {tServicoTipo.map((item) => {
+ const itemId = String(item.servico_tipo_id ?? '');
+ const isSelected = selectedId === itemId;
+
+ return (
+ handleSelect(item)}
+ >
+
+ {GetCapitalize(item.descricao ?? '')}
+
+ );
+ })}
diff --git a/src/packages/administrativo/components/TServicoTipo/TServicoTipoTable.tsx b/src/packages/administrativo/components/TServicoTipo/TServicoTipoTable.tsx
new file mode 100644
index 0000000..00928ca
--- /dev/null
+++ b/src/packages/administrativo/components/TServicoTipo/TServicoTipoTable.tsx
@@ -0,0 +1,24 @@
+'use client';
+
+import TServicoTipoTableInterface from '@/packages/administrativo/interfaces/TServicoTipo/TServicoTipoTableInterface';
+import { DataTable } from '@/shared/components/dataTable/DataTable';
+
+import TServicoTipoColumns from './TServicoTipoColumns';
+
+
+/**
+ * Componente principal da tabela de Naturezas
+ */
+export default function TServicoTipoTable({ data, onEdit, onDelete }: TServicoTipoTableInterface) {
+ const columns = TServicoTipoColumns(onEdit, onDelete);
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/packages/administrativo/components/TTBReconhecimentoTipo/TTBReconhecimentoTipoForm.tsx b/src/packages/administrativo/components/TTBReconhecimentoTipo/TTBReconhecimentoTipoForm.tsx
index cd047c1..88d65eb 100644
--- a/src/packages/administrativo/components/TTBReconhecimentoTipo/TTBReconhecimentoTipoForm.tsx
+++ b/src/packages/administrativo/components/TTBReconhecimentoTipo/TTBReconhecimentoTipoForm.tsx
@@ -2,7 +2,7 @@
import { zodResolver } from '@hookform/resolvers/zod';
import { useEffect } from 'react';
-import { useForm, Controller } from 'react-hook-form';
+import { Controller, useForm } from 'react-hook-form';
import z from 'zod';
import { Button } from '@/components/ui/button';
@@ -26,9 +26,8 @@ import {
} from '@/components/ui/form';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
-
-import { situacaoEnum } from '../../interfaces/TTBREconhecimentoTipo/TTBReconhecimentoTipoInterface';
-import { TTBReconhecimentoTipoSchema } from '../../schemas/TTBReconhecimentoTipo/TTBReconhecimentoTipoSchema';
+import { TTBReconhecimentoTipoSchema } from '@/packages/administrativo/schemas/TTBReconhecimentoTipo/TTBReconhecimentoTipoSchema';
+import { SituacoesEnum } from '@/shared/enums/SituacoesEnum';
type FormValues = z.infer;
@@ -45,17 +44,15 @@ export default function TTBReconhecimentoTipoForm({
onClose,
onSave,
}: TTBReconhecimentoTipoFormProps) {
- // Inicializa o react-hook-form com schema zod
const form = useForm({
resolver: zodResolver(TTBReconhecimentoTipoSchema),
defaultValues: {
tb_reconhecimentotipo_id: 0,
descricao: '',
- situacao: situacaoEnum.ATIVO,
+ situacao: SituacoesEnum.A,
},
});
- // Atualiza o formulário quando recebe dados para edição
useEffect(() => {
if (data) form.reset(data);
}, [data, form]);
@@ -75,7 +72,7 @@ export default function TTBReconhecimentoTipoForm({