Páginas filhas
  • PCREQ-4062.1 - Configurações e cadastros

Informações Gerais

 

Especificação

Produto

Logix

Módulo

WMS

Segmento Executor

 

Projeto1

L_DL_WMS001

IRM1

PCREQ-4062

Requisito1

1

Subtarefa1

 

Chamado2

 

Release de Entrega Planejada

12.1.8

Réplica

 

País

(x) Brasil  (  ) Argentina  (  ) Mexico  (  ) Chile  (  ) Paraguai  (  ) Equador

(  ) USA  (  ) Colombia   (  ) Outro _____________.

Outros

<Caso necessário informe outras referências que sejam pertinentes a esta especificação. Exemplo: links de outros documentos ou subtarefas relacionadas>.

   Legenda: 1 – Inovação 2 – Manutenção (Os demais campos devem ser preenchidos para ambos os processos). 

Objetivo

 Criar as parametrizações básicas para que, nos processos de recebimento e expedição do WMS, seja possível controlar o IUM - Identificador Único de Medicamentos. Além de criar as funções de integração do WMS Logix com o sistema Neogrid Rastreabilidade, que serão utilizadas nas demais rotinas.

Definição da Regra de Negócio

 

Rotina

Tipo de Operação

Opção de Menu

Regras de Negócio

WMS6111 - Categoria Itens

[Alteração]

 

-

WMS6171 - Item WMS [Alteração]  

WMS60023 - Contrato - Outros

[Alteração]

 

-

WMSR128 - Funções de integração NeoGrid rastreabilidade

[Criação]

 

-

WMS0004[Alteração]  

 

  1. Alterar o WMS6111 - Categorias de Itens onde deverá ser incluído o novo campo conforme protótipo 01.
    Campo "Controla IUM (identificador único de medicamentos) - Tipo Char(01) onde os valores poderão ser "S" para Sim, "N" para Não e deverá ser apresentado como listbox.
    Este campo deverá ser gravado na tabela wms_item_categoria, campo controle_ium.

  2. Alterar o WMS6171 - Item WMS onde deverá ser incluído o novo atributo do item conforme protótipo 02.
    Campo "Controla IUM (identif. único de medicamentos) - Tipo Char(01) onde os valores poderão ser "S" para Sim, "N" para Não, "P" padrão  e deverá ser apresentado como listbox.
    Este campo deverá ser gravado na tabela man_inf_com_item a exemplo do Tipo carga, onde informacao_compl = "wms_controle_ium"; des_inf_com  = "Controla IUM (identif. único de medicamentos)"; val_flag = "P"; "S"; "N"
    Um item não poderá ser marcado como controle de IUM e tipo carga granel ao mesmo tempo. Deverá ser feita consistência para que o item tenha apenas um dos controles. Caso o campo de controle seja padrão, deverá ser verificado em conjunto a categoria do item para que não permita que um item de uma categoria com controle de IUM seja também marcado com tipo de carga Granel.

  3. Altarar a função WMS0004
    Criar uma função chamada wms0004_item_controle_ium(), está função verificará se o item tem controle de IUM.
    Receberá os parâmetros: empresa, depositante, item e modo de exibição;
    Retornará dois status, o primeiro indica se a execução foi realizada com sucesso e o segundo indica se o item controla IUM.
    Para efetuar a verificação, primeiramente deverá ser efetuado o select na tabela man_inf_com_item  buscando o VAL_FLAG por empresa, codigo do item e informação complementar igual a "wms_controle_ium".
    Se não encontrar registro significa que o item não tem controle de IUM e deve retornar True, False.
    Se ocorreu algum erro de SQL diferente de NOTFOUND, deve exibir mensagem de erro e retornar False, False.
    Se encontrou registro, deverá verificar o valor de VAL_FLAG
    1. Se "S" indica que controla IUM, então retorna True, True;
    2. Se "N" indica que não controla, então retorna True, False;
    3. Se for "P", é o padrão da categoria do item, então deverá verificar buscando o valor do campo controle_ium da categoria do item na tabela wms_item_categoria.

      SELECT a.controle_ium
      FROM wms_item_complemento a,
      wms_item_categoria b
      WHERE a.empresa = l_empresa
      AND a.empresa = b.empresa
      AND a.cat_item = b.cat_item
      AND a.item = '0004'
      AND (( b.abrang = 'D'
      AND b.empresa_deposit = '948632')
      OR ( b.abrang = 'E'
      AND b.empresa_deposit = 'AV'))


      1. Se o valor do campo acima for nulo ou "N", então retorna True, False;
      2. Se o valor for "S" retorna True, True;
      3. Se ocorrer erro de SQL deve exibir a mensagem de erro e retornar False, False.

  4. Alterar o WMS60023 - Contrato (Outros) onde deverão ser incluídos os novos parâmetros conforme protótipo 03.
    Campo "Sistema de integração rastreabilidade" tipo listBox com valor 1 = NeoGrid Rastreabilidade. Será gravado na tabela wms_parametro_complementar com os seguintes valores:
    1. empresa = p_cod_empresa;
    2. trans_parametro = sequencial da tabela;
    3. depositante = depositante do contrato;
    4. nom_parametro = "sist_rastreabilidade";
    5. val_texto = "Sistema de integração rastreabilidade";
    6. val_flag = "1"
    7. contrato = contrato ativo.

    Campo "Caminho de envio dos arquivos (OUT)" tipo text. Será gravado na tabela wms_parametro_complementar com os seguintes valores:
    1. empresa = p_cod_empresa;
    2. trans_parametro = sequencial da tabela;
    3. depositante = depositante do contrato;
    4. nom_parametro = "rastrea_dir_envio";
    5. val_texto = "Diretório de envio dos arquivos rastreabilidade (OUT)";
    6. val_flag = "1"
    7. contrato = contrato ativo.

    Campo "Caminho de recebimento dos arquivos (IN)" tipo text. Será gravado na tabela wms_parametro_complementar com os seguintes valores:
    1. empresa = p_cod_empresa;
    2. trans_parametro = sequencial da tabela;
    3. depositante = depositante do contrato;
    4. nom_parametro = "rastrea_dir_receb";
    5. val_texto = "Diretório de recebimento dos arquivos rastreabilidade (IN)";
    6. val_flag = "1"
    7. contrato = contrato ativo.

    Campo "E-mail responsável integração rastreabilidade" tipo text. Será gravado na tabela wms_parametro_complementar com os seguintes valores:
    1. empresa = p_cod_empresa;
    2. trans_parametro = sequencial da tabela;
    3. depositante = depositante do contrato;
    4. nom_parametro = "email_resp_rastreab";
    5. val_texto = "E-mail responsável integração rastreabilidade";
    6. val_flag = "1"
    7. contrato = contrato ativo.


  5. Criar função wmsr128.4gl - Funções rastreabilidade que conterá as funções  abaixo:
    1. wmsr128_envia_evento_movimentacao().

      Está função irá gerar arquivos do tipo Registro de Eventos (JSON padrão NeoGrid)

        1. Receberá os parâmetros: empresa, evento, cesv_docum, solicitacao_carga, modo de exibição. Onde o evento poderá ser: 1 - Check-in, ou 2 - Check-out.
        2. Buscar parâmetro que indica se empresa é operador logístico ou indústria.
        3. Quando o evento for check-in deverá seguir os passos a seguir:
          1. Buscar informação de nota de devolução conforme abaixo:
          2. SELECT DISTINCT(1) 
            FROM wms_cesv_docum_nota_fiscal cesv,
            nf_sup nf
            WHERE cesv.empresa= l_empresa
            AND cesv.ctr_ent_sai_veic_docum = l_cesv_docum
            AND cesv.devolucao = 'S'
            AND cesv.empresa = nf.cod_empresa
            AND cesv.nota_fiscal = nf.num_nf
            AND cesv.serie_nota_fiscal = nf.ser_nf
            AND cesv.subserie_nota_fiscal = nf.ssr_nf
            AND cesv.emitente_nota_fiscal= nf.cod_fornecedor


            Se ocorrer erro de SQL exibir mensagem de erro e retornar falso.

          3. Se for operador logístico e a nota não estiver marcada como devolução, o evento será '3002' (recebimento em transferência);
          4. Se estiver marcado como devolução o eventro será igual a '3004' (recebimento em devolução);
          5. Se for indústria e a nota não estiver marcada como devolução será o evento '3001' (compra), ou, se estiver marcado como devolução evento igual a  '3004' (recebimento em devolução);
          6. Criar cursor do select abaixo:

            SELECT ium_det.ium_agregadora AS trackableItemId,
            ium.ctr_ent_sai_veic_docum,
            transp.num_cgc_cpf AS byUniversalCompanyId,
            depos.num_cgc_cpf AS fromUniversalCompanyId,
            nf.num_nf AS invoice_id_nf,
            par.parametro_texto AS invoice_id
            FROM wms_ium_movimentacao ium,
            INNER JOIN wms_ium_movimentacao_detalhe ium_det
            ON ium.empresa = ium_det.empresa
            AND ium.transacao_ium_movimento = ium_det.transacao_ium_movimento
            INNER JOIN nf_sup nf
            ON nf.cod_empresa = ium.empresa
            AND ium.aviso_recebto = nf.num_aviso_rec
            INNER JOIN clientes transp
            ON transp.cod_cliente = nf.cod_transpor
            INNER JOIN clientes depos
            ON depos.cod_cliente = nf.cod_fornecedor
            left JOIN sup_par_ar par
            ON par.empresa = id_conf.empresa
            AND par.aviso_recebto = ium.aviso_recebto
            AND par.parametro = 'chav_aces_nf_eletr'
            WHERE ium.empresa = l_empresa
            AND ium.cesv_docum = l_cesv_docum
            ORDER BY invoice_id_nf, trackableItemId


            Não será necessário criar controle para quebra de documentos, pois uma CESV poderá ter apenas um documento relacionado. Deverá ser criado um documento por CESV/nota fiscal.
            O arquivo deverá seguir o layout Neogrid anexo e deverá ser criado na pasta out configurada no contrato e ter o nome composto por: “[Tipo do Documento]_[Timestamp]_[Número sequencial].json”. Além disso o arquivo deverá ser no formato UTF-8 (utilizar o LOG_encodeUTF8(l_texto)).
            1. [Tipo de Documento] é o código do tipo de documento, cada evento terá um tipo de documento. 
            2. [Timestamp] é a data e hora no formato “yyyyMMddHHmmssSSS” 
            3. [Número sequencial] é um número sequencial de quatro dígitos que deverá ser controlado na tabela wms_parametro_complementar
            4. Exemplo de nome de arquivo para um evento de Compra (check in): “901_20150703154700123_0001.json”
        4. Quando for expedição:
          1. Se for operador logístico o código do evento será '4002' (entrega em transferência); ou, se for indústria será '4001' (venda).
          2. Criar cursor a partir do select abaixo:

            SELECT ium.ium_agregadora,
            sc.transportador,
            pl.transportador,
            sc.nota_fiscal, 
            transp.num_cgc_cpf AS byUniversalCompanyId,
            depos.num_cgc_cpf AS fromUniversalCompanyId,
            sc.destinatario,
            cli.num_cgc_cpf AS toUniversalCompanyId, 
            par.val_texto AS invoice_id 
            FROM wms_checkout_ium ium 
            INNER JOIN wms_solicitacao_carga_mestre sc
            ON ium.empresa = sc.empresa
            AND ium.trans_solicitacao_carga_mestre = sc.trans_solicitacao_carga_mestre 
            -- Busca chave acesso
            INNER JOIN wms_parametro_complementar par
            ON par.empresa = sc.empresa
            AND par.trans_solicitacao_carga_mestre = sc.trans_solicitacao_carga_mestre 
            AND par.nom_parametro = 'chave_acesso_nfe'
            -- Busca cliente 
            INNER JOIN clientes cli
            ON cli.cod_cliente = sc.destinatario
            -- busca cnpj depositante
            INNER JOIN clientes depos
            ON depos.cod_cliente = sc.deposit
            -- relaciona com o planejto embarque solic carga
            INNER JOIN wms_plnjt_embq_solic_carga emb
            ON emb.empresa = sc.empresa 
            AND emb.trans_solicitacao_carga_mestre = sc.trans_solicitacao_carga_mestre 
            --relaciona com o plano embarque para buscar o transportador
            INNER JOIN wms_planejto_embarq pl
            ON pl.empresa = emb.empresa
            AND pl.planejto_embarq = emb.planejto_embarq

            INNER JOIN clientes transp
            ON pl.transportador = transp.cod_cliente 
            WHERE sc.empresa = p_cod_empresa
            AND ium.trans_solicitacao_carga_mestre = l_solic_carga
            ORDER BY 1, 2

          3. Deverá ser criado um controle de quebra de notas fiscais, pois para cada nota deverá ser gerada um arquivo listando todas IUMs relacionadas.
          4. Os arquivos deverão ser gerados seguindo as mesmas regras dos arquivos de recebimento descrita acima.

      Ao final da geração do arquivo e gravação no diretório de envio deverá ser gravado um registro na tabela wms_integracao_ium com situação "Arquivo enviado"

    2. Criar função wmsr128_envia_evento_agregacao()
      Está função irá gerar arquivos do tipo Agregação (JSON padrão NeoGrid) seguindo o layout que contas no manual.
      1. Carregar informações geradas na tabela wms_agregacao_ium utilizando como filtro:
       
      • Empresa;
      • Etiqueta agrupadora;
      • sit_integração igual 1 - pendente;
      Caso o arquivo tenha sido gerado com sucesso deverá atualizar o registro da tabela wms_agregacao_ium, atualizar o campo sit_integracao para 3 (arquivo enviado) e dat_hora_integracao para data/hora atual.

    3. Criar função wmsr128_get_unix_timestamp()

      Está função deverá pegar a data atual do sistema e convertê-la no formato UnixEpochTime.

      Para isso deverá executar o comando select conforme o banco utilizado:

      1. Oracle 

      SELECT (SYSDATE - TO_DATE('01/01/1970 00:00:00', 'MM-DD-YYYY HH24:MI:SS')) * 24 * 60 * 60 FROM DUAL

      2. IBM Informix

      SELECT dbinfo('data hora corrente') FROM sysmaster:sysdual;

      3. SQL Server

      SELECT DATEDIFF(s, '1970-01-01 00:00:00', 'data hora corrente')


      Fonte:  http://www.epochconverter.com

    4. Criar função wmsr128_ium_ativa()
      Está função deverá verificar se uma IUM está ativa no operador logístico.
      Deverá receber como parâmetros: empresa, depositante, ium/agregadora e modo de exibição.
      Deverá retornar status de execução, status da IUM (A - Ativa, I - Inativa, N - não cadastrada), nota fiscal e cesv caso esteja ativa.

      Select distinct sit_ium, nota_fiscal, cesv_docum 

      from wms_checkin_ium

      where empresa = empresa recebida

      and ium_agregadora = ium recebida

      and depositante = depositante recebido

Tabelas Utilizadas

  • wms_ium_agregadora
  • wms_checkin_ium
  • wms_checkout_ium
  • wms_agregacao_ium
  • wms_integracao_ium

Protótipo de Tela

Protótipo 01


Protótipo 02


Protótipo 03

 

Dicionário de Dados

 

wms_ium_agregadora (Cadastro de identificadores de medicamentos)

Campo

Descrição

Tipo

Null

Empresa

Empresa

Char(02)

Not Null

Depositante

Depositante

Char(15)

Not Null

IUM_agregadora

Etiqueta Identificador único de medicamento ou/ agregadora

Char(70)

Not Null

Item

Códito item Logix

Char(15)

Not null

Sit_ium_agregadora

Situação IUM/agregadora (“A” – Ativa na empresa; “I” – Inativa, fora da empresa)

Char(01)

Not Null

Usuario

Usuário inclusão

Char(09)

Not null

Dat_hora_inclusao

Data hora inclusão

Date time

Not null

Wms_IUM_movimentacao (Movimentações dos identificadores únicos de medicamentos/agregadora) - Criação

Campo

Descrição

Tipo

Null

Empresa

Empresa

Char(02)

Not null

Transacao_ium_movimentoTransação da movimentação do IUMSequencialNot Null

Depositante

Depositante

Char(15)

Not null

Tipo_movimentacaoTipo de movimentação (E - entrada ou S - saída)Char(01)Not Null
ctr_ent_sai_veic_documCESV documentalchar(10)Yes
aviso_recebtoAviso de recebimento (quando a operação for entrada)IntegerYes
trans_solicitacao_carga_mestreSolicitação carga mestre (quando a operação for saída)IntegerYes

Dat_hora_movimento

Data hora do movimento

DateTime

Not Null

Usuario_movimentoUsuário movimentoChar(09)Not Null
sit_integracaoSituação da integração (1 - Pendente; 2 - Arquivo enviado; 3 - Integrada; 4 - Erro integração)Char(01)Not null
dat_hora_integracaoData hora da integraçãoDateTime Year to secondYes
usuario_integracaoUsuário integraçãochar(09)Yes

wms_ium_movimentacao_detalhe (Detalhe da movimentação de IUM/agregadoras) - Criação

Campo

Descrição

Tipo

Null

Empresa

Empresa

Char(02)

Not null

Transacao_ium_movimentoTransação da movimentação do IUMSequencialNot Null

Ium_agregadora

IUM/agregadora

Char(70)

Not null

Dat_hora_movimento

Data hora do movimento

DateTime

Not Null

Usuario_movimentoUsuário movimentoChar(09)Not Null

Wms_IUM_moviment_integracao (Integração das Movimentações dos identificadores únicos de medicamentos/agregadora) - Criação

Campo

Descrição

Tipo

Null

Empresa

Empresa

Char(02)

Not null

Transacao_integracaoTransação da integraçãoSequencialNot Null
sequencial_integracaoSequencial da integraçãosmallintnot null
trans_moviment_agregacaoTransação do movimento ou atividade de agregaçãointegernot null
tipo_movimentoE - entrada, S - Saída, A - agregaçãoChar(01)not null
sit_integracaoSituação da integração (1 - Pendente; 2 - Arquivo enviado; 3 - Integrada; 4 - Erro integração)Char(01)Not null
dat_hora_integracaoData hora da integraçãoDateTime Year to secondYes
usuario_integracaoUsuário integraçãochar(09)Yes
mensagem_integracaoMensagem retornada pelo sistema de integração rastreabilidadechar(1000)yes



wms_agregacao_ium (Agregação de identificadores únicos de medicamentos) - Criação

Campo

Descrição

Tipo

Null

Empresa

Empresa

Char(02)

Not null

Depositante

Depositante

Char(15)

Not null

Trans_agregacao

Transação agregação

Sequencial

Not Null

Identif_agregadora

Etiqueta de identificação agregadora

Char(50)

Yes

ium

Identificador único de medicamento

Char(50)

Yes

Sit_agregadora

Situação da etiqueta agregadora (Ativo – dentro do armazém; Inativo – fora do armazém).

Char(01)

Not Null

Dat_hora_operacao

Data hora da operação

DateTime

Not Null

sit_integracaoSituação da integração (1 - Pendente; 2 - Arquivo enviado; 3 - Integrada; 4 - Erro integração)Char(01)Not null
dat_hora_integracaoData hora da integraçãoDateTime YearToSecondnull

wms_item_categoria (alteração)

Campo

Descrição

Tipo

Null

contole_ium

Controla Indicador Único de Medicamentos

Char(01)

null

 Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico.