-- =====================================================
-- Parâmetros fiscais / NFSe (schema FISCAL)
-- Uso: IR, PIS, COFINS, alíquotas, códigos de serviço, etc.
-- =====================================================

-- Sequence para fiscal.tb_param
CREATE SEQUENCE fiscal.seq_tb_param
    START WITH 1
    INCREMENT BY 1
    NOCACHE
    NOCYCLE;

-- Tabela de parâmetros fiscais
CREATE TABLE fiscal.tb_param (
    param_id           NUMBER(10)    NOT NULL,
    param_nome         VARCHAR2(100) NOT NULL,
    param_valor        VARCHAR2(500),
    param_descricao    VARCHAR2(400),
    param_ativo        CHAR(1)       DEFAULT 'S',
    param_data_atualizacao DATE      DEFAULT SYSDATE,
    CONSTRAINT pk_fiscal_tb_param PRIMARY KEY (param_id),
    CONSTRAINT uk_fiscal_tb_param_nome UNIQUE (param_nome),
    CONSTRAINT ck_fiscal_tb_param_ativo CHECK (param_ativo IN ('S', 'N'))
);

-- Comentários para documentação
COMMENT ON TABLE fiscal.tb_param IS 'Parâmetros para emissão de NFSe (alíquotas PIS/COFINS, IR, códigos, etc.)';
COMMENT ON COLUMN fiscal.tb_param.param_nome IS 'Nome único do parâmetro (ex: NFSE_ALIQUOTA_PIS, NFSE_ALIQUOTA_COFINS)';
COMMENT ON COLUMN fiscal.tb_param.param_valor IS 'Valor em texto (número decimal ou S/N)';
COMMENT ON COLUMN fiscal.tb_param.param_descricao IS 'Descrição para exibição na tela de manutenção';

-- Índice para busca por nome
CREATE INDEX ix_fiscal_tb_param_nome ON fiscal.tb_param (param_nome);
CREATE INDEX ix_fiscal_tb_param_ativo ON fiscal.tb_param (param_ativo);

-- =====================================================
-- Trigger: preenche param_id e param_data_atualizacao no INSERT.
-- Quem inserir direto no banco (sem informar param_id) não precisa
-- lembrar da sequence — a trigger preenche.
-- A aplicação não envia param_id no INSERT; recupera o registro
-- criado por param_nome (UNIQUE).
-- =====================================================
CREATE OR REPLACE TRIGGER fiscal.trg_tb_param_bi
BEFORE INSERT ON fiscal.tb_param
FOR EACH ROW
WHEN (new.param_id IS NULL)
BEGIN
    :new.param_id := fiscal.seq_tb_param.NEXTVAL;
    :new.param_data_atualizacao := SYSDATE;
END;
/

ALTER TRIGGER fiscal.trg_tb_param_bi ENABLE;

-- Inserir parâmetros iniciais (exemplos para NFSe Nacional)
-- param_id é preenchido pela trigger
INSERT INTO fiscal.tb_param (param_nome, param_valor, param_descricao, param_ativo)
VALUES ('NFSE_ALIQUOTA_PIS', '0.65', 'Alíquota PIS (%) para NFSe Nacional', 'S');
INSERT INTO fiscal.tb_param (param_nome, param_valor, param_descricao, param_ativo)
VALUES ('NFSE_ALIQUOTA_COFINS', '4.00', 'Alíquota COFINS (%) para NFSe Nacional', 'S');
INSERT INTO fiscal.tb_param (param_nome, param_valor, param_descricao, param_ativo)
VALUES ('NFSE_SITUACAO_TRIBUTARIA_PIS_COFINS', '02', 'Situação tributária PIS/COFINS (código)', 'S');
INSERT INTO fiscal.tb_param (param_nome, param_valor, param_descricao, param_ativo)
VALUES ('NFSE_PERCENTUAL_TRIBUTOS_FEDERAIS', '4.65', 'Percentual total tributos federais (%)', 'S');
INSERT INTO fiscal.tb_param (param_nome, param_valor, param_descricao, param_ativo)
VALUES ('NFSE_TIPO_RETENCAO_PIS_COFINS', '2', 'Tipo de retenção PIS/COFINS', 'S');
INSERT INTO fiscal.tb_param (param_nome, param_valor, param_descricao, param_ativo)
VALUES ('NFSE_REGIME_ESPECIAL_TRIBUTACAO', '9', 'Regime especial tributação NFSe Nacional (ex.: 9 Recife, 0 Arapiraca)', 'S');
INSERT INTO fiscal.tb_param (param_nome, param_valor, param_descricao, param_ativo)
VALUES ('NFSE_PERCENTUAL_TRIBUTOS_MUNICIPAIS', '4.00', 'Percentual total tributos municipais NFSe Nacional (ex.: 4 Recife, 2 Arapiraca)', 'S');

COMMIT;
