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]

 

-

WMSRxxx 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 controlacontrole_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,

    campo controla_ium

    1. 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 wmsrxxxwmsr128.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

      Evento corresponde ao código do evento de rastreabilidade de acordo com o manual de integração NeoGrid.
        1. , 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
      Quando for processo de recebimento
        1. 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
      1. =
          1. , o evento será '3002' (recebimento em transferência)
      2. , ou
          1. ;
          2. Se estiver marcado como devolução
      3. = 3004
          1. o eventro será igual a '3004' (recebimento em devolução);
          2. Se for indústria e a nota não estiver marcada como devolução
      4. =
          1. será o evento '3001' (compra), ou
      5. ;Se estiver
          1. , se estiver marcado como devolução
      6. =
          1. evento igual a  '3004' (recebimento em devolução);
          2. Criar cursor
      7. da tabela wms_checkin_ium filtrando por empresa e cesv_docum. 
        SELECT ium.identif_agregadora,
                        ium.ium,
                        id_conf
          1. do select abaixo:

            SELECT ium_det.ium_agregadora AS trackableItemId,
            ium.ctr_ent_sai_veic_docum,

      8.  

      9.                 id_conf.palete AS trackableItemId, 
                       
          1. transp.num_cgc_cpf AS byUniversalCompanyId,

      10.                
          1. depos.num_cgc_cpf AS fromUniversalCompanyId,

      11.                
          1. nf.num_nf AS invoice_id_nf,

      12.  

      13.                
          1. par.parametro_texto AS invoice_

      14. id 
          1. id

      15.    FROM
          1. FROM wms_

      16. iden_estoque_conferencia id_conf
           INNER JOIN wms_checkin_ium ium
           ON
          1. ium_movimentacao ium,
            INNER JOIN wms_ium_movimentacao_detalhe ium_det
            ON ium.empresa =

      17. id
          1. ium_

      18. conf
          1. det.empresa

      19.    AND
          1. AND ium.

      20. cesv
          1. transacao_ium_

      21. docum
          1. movimento =

      22. id
          1. ium_

      23. conf
          1. det.

      24. ctr
          1. transacao_

      25. ent_sai_veic_docum 
           INNER
          1. ium_movimento
            INNER JOIN nf_sup nf

      26.    ON
          1. ON nf.cod_empresa =

      27. id_conf
          1. ium.empresa

      28.    AND id_conf
          1. AND ium.aviso_recebto = nf.num_aviso_rec

      29.    INNER
          1. INNER JOIN clientes transp

      30.    ON
          1. ON transp.cod_cliente = nf.cod_transpor

      31.    INNER
          1. INNER JOIN clientes depos

      32.    ON
          1. ON depos.cod_cliente = nf.cod_fornecedor

      33.    left
          1. left JOIN sup_par_ar par

      34.    ON
          1. ON par.empresa = id_conf.empresa

      35.    AND
          1. AND par.aviso_recebto =

      36. id_conf
          1. ium.aviso_

      37. recebto 
          1. recebto

      38.    AND
          1. AND par.parametro = 'chav_aces_nf_eletr'

      39.    WHERE id_conf
          1. WHERE ium.empresa = l_empresa

      40.          AND id_conf.ctr_ent_sai_veic_
          1. AND ium.cesv_docum = l_cesv_docum
            ORDER BY

      41. 1, 2Para cada IUM ou agregadora informada na conferência do recebimento, deverá ser criado um arquivo seguindo o layout da NeoGrid.
        O arquivo a ser criado deverá
          1. 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”
      42. no
          1. . 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”
        1. Quando for expedição:
          1. Se for operador logístico
      43. enviar 4002
          1. o código do evento será '4002' (entrega em transferência);
      44. Se
          1. ou, se for indústria
      45. enviar
          1. será '4001' (venda).
          2. Criar cursor a partir do select abaixo:

            SELECT ium.

identif
          1. ium_agregadora

,
ium.ium
          1. ,
            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
          1. id 
            FROM wms_checkout_ium ium 
            INNER JOIN wms_solicitacao_carga_mestre sc


INNER JOIN wms_checkout_ium ium

          1. ON ium.empresa =

id_conf
          1. sc.empresa
            AND ium.trans_solicitacao_carga_mestre = sc.trans_solicitacao_carga_

mestre
          1. 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
          1. mestre 
            AND par.nom_parametro = 'chave_acesso_nfe'
            -- Busca

cliente
          1. 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
          1. empresa 
            AND emb.trans_solicitacao_carga_mestre = sc.trans_solicitacao_carga_

mestre
          1. 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
          1. cliente 
            WHERE sc.empresa =

'TG'
--AND id_conf.ctr_ent_sai_veic_docum = '2015000202'
          1. p_cod_empresa
            AND ium.trans_solicitacao_carga_mestre = l_solic_carga
            ORDER BY 1, 2

Criar função wmsrxxx_envia_evento_agregacao()

          1. Deverá ser criado um controle de quebra de notas fiscais, pois para cada nota deverá ser gerada um arquivo listando todas IUMs relacionadas.
          2. 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"

    1. 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.

    2. 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

    3. 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
Tabelas Utilizadas
  • wms_checkin_ium
  • wms_checkout_ium
  • wms_agregacao_ium
  • wms_integracaoagrega_ium

Protótipo de Tela

Protótipo 01


Protótipo 02


Protótipo 03

Image Modified

 

Dicionário de Dados

 

wms_checkinium_ium agregadora (Check-in Cadastro de identificadores únicos de medicamentos)

Campo

Descrição

Tipo

Null

Empresa

Empresa

Char(02)

Not nullNull

Depositante

Depositante

Char(15)

Not null

Transacao

Transação

Sequencial

Not Null

IdentifIUM_agregadora

Etiqueta de Identificação Agregadora

Char(50)

Yes

ium

Identificador único de medicamento

Char(50)

Yes

cesv_docum

Controle de entrada e saída de veículos/documentalou/ agregadora

Char(1070)

Not nullNull

Item

Códito item Logix

Identif_estoque

Identificação de estoque

Char(3015)

Not null

Sit_ium_agregadora

Situação do IUM/agregadora (Ativo – dentro do armazém; Inativo – fora do armazém).“A” – Ativa na empresa; “I” – Inativa, fora da empresa)

Char(01)

Not Null

Usuario

Usuário inclusão

Char(09)

Not null

Dat_hora_checkininclusao

Data hora de check-ininclusão

Date timeDateTime

Not Nullnull

SequencialChar(50Char(50) de cargaSituação do IUM (Ativo – dentro do armazém; Inativo – fora do armazém).

wmsWms_checkoutIUM_ium (Check-out de 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

Transacao

Transação

Tipo_movimentacaoTipo de movimentação (E - entrada ou S - saída)Char(01)Not Null

Identif_agregadora

Etiqueta de Identificação Agregadora

ctr_ent_sai_veic_documCESV documentalchar(10)Yes

ium

Identificador único de medicamento

aviso_recebtoAviso de recebimento (quando a operação for entrada)IntegerYes
trans_solicitacao_carga_mestreSolicitação

Integer

Not null

Sit_ium

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_checkoutmovimento

Data hora de check-out

DateTime

Not Null

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 wms_agrega_ium (Check-out 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 Agregadoraidentificação agregadora

Char(50)

Yes

ium

Identificador único de medicamento

Char(50)

Yes

Identif_estoque

Identificação do Volume de expedição

Integer

Not null

Sit_iumagregadora

Situação do IUM 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.                                                             

...