CREATE OR ALTER TRIGGER TTBNFE_B2I_01 FOR TBNFE
ACTIVE BEFORE INSERT POSITION 2
AS
DECLARE VARIABLE CHECK_EMPRESA VARCHAR(200);
DECLARE VARIABLE CIDADE_ID VARCHAR(300);
DECLARE VARIABLE CODIGO_IBGE VARCHAR(300);
DECLARE VARIABLE ESPECIE INTEGER;
BEGIN

  IF (NEW.SITUACAO < 3) THEN --SIT.3 = CANCELADA/INUTILIZADA
      BEGIN
        FOR
        SELECT
        COALESCE((
        SELECT FIRST 1 ID||'|'||COALESCE(IIF(NEW.EMPRESA_UF='EX',PAIS_CODIGO,CODIGOIBGE), '0')
          FROM TBCIDADE
         WHERE UF = NEW.EMPRESA_UF
           AND FN_REMOVE_ACENTOS(DESCRICAO) = FN_REMOVE_ACENTOS(NEW.EMPRESA_CIDADE)
        ), '0|0'),
        COALESCE((
        SELECT COUNT(*)
          FROM TBFISCAL_ESPECIE
         WHERE CODIGO_SPED = NEW.ESPECIE
           AND CODIGO_DIEF = NEW.MODELO
        ),0)
        FROM RDB$DATABASE
        INTO :CHECK_EMPRESA, :ESPECIE
        DO
        BEGIN

         :CIDADE_ID = FN_ARRAY(:CHECK_EMPRESA, 1, '|');
         :CODIGO_IBGE = FN_ARRAY(:CHECK_EMPRESA, 2, '|');

         IF (CHAR_LENGTH(:CIDADE_ID) = 0 OR TRIM(:CIDADE_ID) = '0') THEN
         BEGIN
            EXCEPTION "..." 'ATENCAO, CIDADE/UF DO DESTINATARIO NAO CADASTRADA, OPERACAO CANCELADA!';
         END

         IF ((CHAR_LENGTH(:CODIGO_IBGE) = 0 OR TRIM(:CODIGO_IBGE) = '0') AND NEW.NATUREZA = 1) THEN
         BEGIN
            EXCEPTION "..." 'ATENCAO, CODIGO IBGE DA CIDADE '||TRIM(NEW.EMPRESA_CIDADE)||' NAO INFORMADO, OPERACAO CANCELADA!';
         END
        
         IF (:ESPECIE = 0) THEN
             BEGIN
             EXCEPTION "..." 'ATENCAO, ESPECIE DO DOCUMENTO INVALIDO OU NAO CADASTRADO, OPERACAO CANCELADA!';
             END
        
        END
      END
END;
