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

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

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 da tabela wms_checkin_ium filtrando por empresa e cesv_docum. 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 

            id

               FROM

            FROM wms

            _checkin

            _ium_movimentacao ium,
            INNER JOIN wms_ium_movimentacao_detalhe ium_det

               ON

            ON ium.empresa =

            id

            ium_

            conf

            det.empresa

               AND

            AND ium.

            cesv

            transacao_ium_

            docum

            movimento =

            id

            ium_

            conf

            det.

            ctr

            transacao_

            ent_sai_veic_docum 
               INNER

            ium_movimento
            INNER JOIN nf_sup nf

               ON

            ON nf.cod_empresa = ium.empresa

               AND

            AND ium.aviso_recebto = nf.num_aviso_rec

               INNER

            INNER JOIN clientes transp

               ON

            ON transp.cod_cliente = nf.cod_transpor

               INNER

            INNER JOIN clientes depos

               ON

            ON depos.cod_cliente = nf.cod_fornecedor

               left

            left JOIN sup_par_ar par

               ON

            ON par.empresa = id_conf.empresa

               AND

            AND par.aviso_recebto = ium.aviso_

            recebto 

            recebto

               AND

            AND par.parametro = 'chav_aces_nf_eletr'

               WHERE

            WHERE ium.empresa = l_empresa

                     AND

            AND ium.cesv_docum = l_cesv_docum
            ORDER BY

            1, 2

            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 (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
Char(15)

wms_ium_checkoutmovimentacao_ium (Check-out de identificadores únicos de medicamentosdetalhe (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 IUMSequencial

Not null

Depositante

Depositante

Not Null

Ium_agregadora

Etiqueta Identificador único de medicamento ouIUM/agregadora

Char(5070)

Yes

trans_solicitacao_carga_mestre

Solicitação de carga

Integer

Not null

Not null

Dat_hora_checkoutmovimento

Data hora de check-outdo movimento

DateTime

Not Null

sitUsuario_integracaomovimentoUsuário movimentoSituação da integração (1 - Pendente; 2 - Arquivo enviado; 3 - Integrada; 4 - Erro integração)Char(0109)Not nullNull
dat_hora_integracaoData hora da integraçãoDateTime Year to secondNull
nullYes

wms_integracao_ium (Registro de integração de 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

Depositante

Depositante

Char(15)

Not Null

aviso_recebto

Aviso de recebimento

Integer

Yes

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

trans_solicitacao_carga_mestre

Solicitação de carga

Integer

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)yesNull



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 nullTransacao

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.                                                             

...