SET TERM ^ ;

CREATE OR ALTER procedure SPUI_MANIFESTO_NF (
    NSU varchar(15),
    TIPO_DOCUMENTO varchar(100),
    ESTABELECIMENTO_ID integer,
    EMPRESA_RAZAOSOCIAL varchar(100),
    EMPRESA_CNPJ varchar(14),
    CHAVE_ACESSO varchar(44),
    DATA_EMISSAO date,
    TIPO_NF integer,
    FIN_NFE integer,
    DIGEST_VALUE varchar(100),
    SITUACAO integer,
    DATAHORA_RCBTO timestamp,
    VALOR_TOTAL_NF numeric(15,2),
    DATA_EMISSAO_EVENTO timestamp,
    TIPO_EVENTO integer,
    SEQUENCIA_EVENTO integer,
    DESC_EVENTO varchar(200),
    X_EVENTO varchar(100),
    DATAHORA_RCBTO_EVENTO timestamp,
    NUMERO_NOTAFISCAL integer,
    SERIE varchar(3))
returns (
    ID integer)
as
BEGIN

    UPDATE OR INSERT INTO TBMANIFESTO_NF (NSU, TIPO_DOCUMENTO, ESTABELECIMENTO_ID, EMPRESA_RAZAOSOCIAL,
        EMPRESA_CNPJ, CHAVE_ACESSO, DATA_EMISSAO, TIPO_NF, FIN_NFE, DIGEST_VALUE, SITUACAO,
        DATAHORA_RCBTO, VALOR_TOTAL_NF, DATA_EMISSAO_EVENTO, TIPO_EVENTO, SEQUENCIA_EVENTO, DESC_EVENTO,
        X_EVENTO, DATAHORA_RCBTO_EVENTO, NUMERO_NOTAFISCAL, SERIE)
    VALUES (:NSU, :TIPO_DOCUMENTO, :ESTABELECIMENTO_ID, :EMPRESA_RAZAOSOCIAL,
        :EMPRESA_CNPJ,:CHAVE_ACESSO, :DATA_EMISSAO, :TIPO_NF, :FIN_NFE, :DIGEST_VALUE,
            :SITUACAO, :DATAHORA_RCBTO, :VALOR_TOTAL_NF, :DATA_EMISSAO_EVENTO, :TIPO_EVENTO,
            :SEQUENCIA_EVENTO, :DESC_EVENTO, :X_EVENTO, :DATAHORA_RCBTO_EVENTO, :NUMERO_NOTAFISCAL, :SERIE)
    MATCHING (NSU, TIPO_DOCUMENTO, ESTABELECIMENTO_ID)
    RETURNING ID INTO :ID;

  SUSPEND;

END
^

SET TERM ; ^

