Gerar arquivo XML para ANVISA (SNGPC)

O SNGPC é constituído por um ambiente de recebimento de dados (XML) da ANVISA.
Estes dados deverão ser enviados com estrutura e extensão XML.
Estes conterão as movimentações diárias de medicamentos e substâncias sujeitas a controle especial que deverão ser enviadas eletronicamente pela internet para a ANVISA via SNGPC.

SNGPC :: Sistema Nacional de Gerenciamento de Produtos Controlados

Segue abaixo um exemplo de exportação de dados para XML, em Delphi7
Ainda não foi testado, serve apenas como ponto de partida para quem estiver com dificuldades.


implementation

{$R *.dfm}

uses XMLIntf, XMLDoc;

procedure TForm1.Button1Click(Sender: TObject);
var
i,x: Word;
NCorpo,NMedicamento,NData: IXMLNode;
XMLDoc: TXMLDocument;
begin
x:=1;
//x:=10;
// Cria o documento
XMLDoc:=TXMLDocument.Create(Application);
with XMLDoc do
begin
Active:=True;
Version:='1.0';
Encoding:='ISO-8859-1';
AddChild('mensagemSNGPC','urn:sngpc-schema');
with DocumentElement do
begin
AddChild('cabecalho');
ChildNodes.Last.AddChild('cnpjEmissor').NodeValue:='99999999000199';
ChildNodes.Last.AddChild ('cpfTransmissor').NodeValue:='00000000000';
ChildNodes.Last.AddChild('dataInicio').NodeValue:=FormatDateTime('yyyy-mm-dd',Date);
ChildNodes.Last.AddChild('dataFim').NodeValue:=FormatDateTime('yyyy-mm-dd',Date);
end;
NCorpo:=DocumentElement.AddChild('corpo');
// *************************** MEDICAMENTO *********************************
NMedicamento:=NCorpo.AddChild('medicamentos');
// Loop das [Entradas] :: MEDICAMENTO
for i:=1 to x do
begin
NData:=NMedicamento.AddChild('entradaMedicamentos');
with NData do
begin
ChildNodes['notaFiscalEntradaMedicamento'].ChildNodes['numeroNotaFiscal'].NodeValue:=IntToStr(i);
// [tipoOperacaoNotaFiscal]
// 1 Compra
// 2 Transferência
// 3 Venda
ChildNodes['notaFiscalEntradaMedicamento'].ChildNodes['tipoOperacaoNotaFiscal'].NodeValue:='1';
ChildNodes['notaFiscalEntradaMedicamento'].ChildNodes['dataNotaFiscal'].NodeValue:=FormatDateTime('yyyy-mm-dd',Date);
ChildNodes['notaFiscalEntradaMedicamento'].ChildNodes['cnpjOrigem'].NodeValue:='99999999000199';
ChildNodes['notaFiscalEntradaMedicamento'].ChildNodes['cnpjDestino'].NodeValue:='99999999000199';
ChildNodes['medicamentoEntrada'].ChildNodes['registroMSMedicamento'].NodeValue:='1010000750061';
ChildNodes['medicamentoEntrada'].ChildNodes['numeroLoteMedicamento'].NodeValue:='RV365';
ChildNodes['medicamentoEntrada'].ChildNodes['quantidadeMedicamento'].NodeValue:='12';
ChildNodes['dataRecebimentoMedicamento'].NodeValue:=FormatDateTime('yyyy-mm-dd',Date);
end;
end;
// Loop das [Saidas] :: MEDICAMENTO
for i:=1 to x do
begin
NData:=NMedicamento.AddChild('saidaMedicamentoVendaAoConsumidor');
with NData do
begin
// [tipoReceituarioMedicamento]
// 1 Receita de Controle Especial em 2 vias (Receita Branca)
// 2 Notificação de Receita B (Notificação Azul)
// 3 Notificação de Receita Especial (Notificação Branca)
// 4 Notificação de Receita A (Notificação Amarela)
ChildNodes['tipoReceituarioMedicamento'].NodeValue:='1';
ChildNodes['numeroNotificacaoMedicamento'].NodeValue:='213213';
ChildNodes['dataPrescricaoMedicamento'].NodeValue:=FormatDateTime('yyyy-mm-dd',Date);
ChildNodes['prescritorMedicamento'].ChildNodes['nomePrescritor'].NodeValue:='XFULANO';
ChildNodes['prescritorMedicamento'].ChildNodes['numeroRegistroProfissional'].NodeValue:='99999';
// [conselhoProfissional]
// CRM Conselho Regional de Medicina
// CRMV Conselho Regional de Medicina Veterinária
// CRO Conselho Regional de Odontologia
ChildNodes['prescritorMedicamento'].ChildNodes['conselhoProfissional'].NodeValue:='CRM';
ChildNodes['prescritorMedicamento'].ChildNodes['UFConselho'].NodeValue:='PR';
// [usoMedicamento]
// 1 Humano
// 2 Veterinario
ChildNodes['usoMedicamento'].NodeValue:='1';
ChildNodes['compradorMedicamento'].ChildNodes['nomeComprador'].NodeValue:='XCICLANO';
// [tipoDocumento]
// 1 CARTEIRA DE REGISTRO PROFISSIONAL
// 2 CARTEIRA DE IDENTIDADE . . . existem mais
ChildNodes['compradorMedicamento'].ChildNodes['tipoDocumento'].NodeValue:='1';
ChildNodes['compradorMedicamento'].ChildNodes['numeroDocumento'].NodeValue:='123';
ChildNodes['compradorMedicamento'].ChildNodes['orgaoExpedidor'].NodeValue:='SSP';
ChildNodes['compradorMedicamento'].ChildNodes['UFEmissaoDocumento'].NodeValue:='PR';
ChildNodes['medicamentoVenda'].ChildNodes['registroMSMedicamento'].NodeValue:='1010000430215';
ChildNodes['medicamentoVenda'].ChildNodes['numeroLoteMedicamento'].NodeValue:='RGJ0400';
ChildNodes['medicamentoVenda'].ChildNodes['quantidadeMedicamento'].NodeValue:='3';
ChildNodes['dataVendaMedicamento'].NodeValue := FormatDateTime('yyyy-mm-dd',Date);
end;
end;
// Loop das [Transferencias] :: MEDICAMENTO
for i:=1 to x do
begin
NData:=NMedicamento.AddChild('saidaMedicamentoTransferencia');
with NData do
begin
ChildNodes['notaFiscalTransferenciaMedicamento'].ChildNodes['numeroNotaFiscal'].NodeValue:=IntToStr(i);
// [tipoOperacaoNotaFiscal]
// 1 Compra
// 2 Transferência
// 3 Venda
ChildNodes['notaFiscalTransferenciaMedicamento'].ChildNodes['tipoOperacaoNotaFiscal'].NodeValue:='2';
ChildNodes['notaFiscalTransferenciaMedicamento'].ChildNodes['dataNotaFiscal'].NodeValue:=FormatDateTime('yyyy-mm-dd',Date);
ChildNodes['notaFiscalTransferenciaMedicamento'].ChildNodes['cnpjOrigem'].NodeValue:='99999999000199';
ChildNodes['notaFiscalTransferenciaMedicamento'].ChildNodes['cnpjDestino'].NodeValue:='99999999000199';
ChildNodes['medicamentoTransferencia'].ChildNodes['registroMSMedicamento'].NodeValue:='1058302590029';
ChildNodes['medicamentoTransferencia'].ChildNodes['numeroLoteMedicamento'].NodeValue:='153353';
ChildNodes['medicamentoTransferencia'].ChildNodes['quantidadeMedicamento'].NodeValue:='2';
ChildNodes['dataTransferenciaMedicamento'].NodeValue:=FormatDateTime('yyyy-mm-dd',Date);
end;
end;
// Loop das [Perdas] :: MEDICAMENTO
for i:=1 to x do
begin
NData:=NMedicamento.AddChild('saidaMedicamentoPerda');
with NData do
begin
// [motivoPerdaMedicamento]
// 1 Furto / Roubo
// 2 Avaria
// 3 Vencimento
// 4 Apreensão / Recolhimento pela Visa
ChildNodes['motivoPerdaMedicamento'].NodeValue:='3';
ChildNodes['medicamentoPerda'].ChildNodes['registroMSMedicamento'].NodeValue:='1010000750061';
ChildNodes['medicamentoPerda'].ChildNodes['numeroLoteMedicamento'].NodeValue:='RV365';
ChildNodes['medicamentoPerda'].ChildNodes['quantidadeMedicamento'].NodeValue:='2';
ChildNodes['dataPerdaMedicamento'].NodeValue := FormatDateTime('yyyy-mm-dd',Date);
end;
end;
// *************************************************************************
// ********************************* INSUMO ********************************
NMedicamento:=NCorpo.AddChild('insumos');
// Loop das [Entradas] :: INSUMO
for i:=1 to x do
begin
NData:=NMedicamento.AddChild('entradaInsumos');
with NData do
begin
ChildNodes['notaFiscalEntradaInsumo'].ChildNodes['numeroNotaFiscal'].NodeValue:=IntToStr(i);
// [tipoOperacaoNotaFiscal]
// 1 Compra
// 2 Transferência
// 3 Venda
ChildNodes['notaFiscalEntradaInsumo'].ChildNodes['tipoOperacaoNotaFiscal'].NodeValue:='1';
ChildNodes['notaFiscalEntradaInsumo'].ChildNodes['dataNotaFiscal'].NodeValue:=FormatDateTime('yyyy-mm-dd',Date);
ChildNodes['notaFiscalEntradaInsumo'].ChildNodes['cnpjOrigem'].NodeValue:='99999999000199';
ChildNodes['notaFiscalEntradaInsumo'].ChildNodes['cnpjDestino'].NodeValue:='99999999000199';
ChildNodes['substanciaInsumoEntrada'].ChildNodes['insumoEntrada'].ChildNodes['codigoInsumo'].NodeValue:='0075';
ChildNodes['substanciaInsumoEntrada'].ChildNodes['insumoEntrada'].ChildNodes['numeroLoteInsumo'].NodeValue:='788cpf';
ChildNodes['substanciaInsumoEntrada'].ChildNodes['insumoEntrada'].ChildNodes['insumoCNPJFornecedor'].NodeValue:='99999999000199';
ChildNodes['substanciaInsumoEntrada'].ChildNodes['quantidadeInsumoEntrada'].NodeValue:='40000.0';
ChildNodes['substanciaInsumoEntrada'].ChildNodes['tipoUnidadeEntrada'].NodeValue:='1';
ChildNodes['dataRecebimentoInsumo'].NodeValue:=FormatDateTime('yyyy-mm-dd',Date);
end;
end;
// Loop das [Saidas] :: INSUMO
for i:=1 to x do
begin
NData:=NMedicamento.AddChild('saidaInsumoVendaAoConsumidor');
with NData do
begin
// [tipoReceituarioInsumo]
// 1 Receita de Controle Especial em 2 vias (Receita Branca)
// 2 Notificação de Receita B (Notificação Azul)
// 3 Notificação de Receita Especial (Notificação Branca)
// 4 Notificação de Receita A (Notificação Amarela)
ChildNodes['tipoReceituarioInsumo'].NodeValue:='2';
ChildNodes['numeroNotificacaoInsumo'].NodeValue:='9897651';
ChildNodes['dataPrescricaoInsumo'].NodeValue:=FormatDateTime('yyyy-mm-dd',Date);
ChildNodes['prescritorInsumo'].ChildNodes['nomePrescritor'].NodeValue:='Dr. Antenor';
ChildNodes['prescritorInsumo'].ChildNodes['numeroRegistroProfissional'].NodeValue:='8888';
// [conselhoProfissional]
// CRM Conselho Regional de Medicina
// CRMV Conselho Regional de Medicina Veterinária
// CRO Conselho Regional de Odontologia
ChildNodes['prescritorInsumo'].ChildNodes['conselhoProfissional'].NodeValue:='CRM';
ChildNodes['prescritorInsumo'].ChildNodes['UFConselho'].NodeValue:='PR';
ChildNodes['usoInsumo'].NodeValue:='1';
ChildNodes['compradorInsumo'].ChildNodes['nomeComprador'].NodeValue:='Manuela Danta';
// [tipoDocumento]
// 1 CARTEIRA DE REGISTRO PROFISSIONAL
// 2 CARTEIRA DE IDENTIDADE . . . existem mais
ChildNodes['compradorInsumo'].ChildNodes['tipoDocumento'].NodeValue:='2';
ChildNodes['compradorInsumo'].ChildNodes['numeroDocumento'].NodeValue:='89786453';
ChildNodes['compradorInsumo'].ChildNodes['orgaoExpedidor'].NodeValue:='SSP';
ChildNodes['compradorInsumo'].ChildNodes['UFEmissaoDocumento'].NodeValue:='PR';
ChildNodes['substanciaInsumoVendaAoConsumidor'].ChildNodes['insumoVendaAoConsumidor'].NodeValue:='';
ChildNodes['substanciaInsumoVendaAoConsumidor'].ChildNodes['insumoVendaAoConsumidor'].ChildNodes['codigoInsumo'].NodeValue:='02904';
ChildNodes['substanciaInsumoVendaAoConsumidor'].ChildNodes['insumoVendaAoConsumidor'].ChildNodes['numeroLoteInsumo'].NodeValue:='123dzp';
ChildNodes['substanciaInsumoVendaAoConsumidor'].ChildNodes['insumoVendaAoConsumidor'].ChildNodes['insumoCNPJFornecedor'].NodeValue:='99999999000199';
ChildNodes['substanciaInsumoVendaAoConsumidor'].ChildNodes['quantidadeDeInsumoPorUnidadeFarmacotecnica'].NodeValue:='5.0';
// [unidadeDeMedidaDoInsumo]
// 1 Miligrama
// 2 Mililitro
// 3 Unidade (U)
ChildNodes['substanciaInsumoVendaAoConsumidor'].ChildNodes['unidadeDeMedidaDoInsumo'].NodeValue:='1';
// [unidadeFarmacotecnica]
// 1 Miligrama
// 2 Cápsula
// 3 Comprimido
// 4 Mililitro
ChildNodes['substanciaInsumoVendaAoConsumidor'].ChildNodes['unidadeFarmacotecnica'].NodeValue:='2';
ChildNodes['substanciaInsumoVendaAoConsumidor'].ChildNodes['quantidadeDeUnidadesFarmacotecnicas'].NodeValue:='60.0';
ChildNodes['dataVendaInsumo'].NodeValue:=FormatDateTime('yyyy-mm-dd',Date);
end;
end;
// Loop das [Transferencias] :: INSUMO
for i:=1 to x do
begin
NData:=NMedicamento.AddChild('saidaInsumoTransferencia');
with NData do
begin
ChildNodes['notaFiscalTransferenciaInsumo'].ChildNodes['numeroNotaFiscal'].NodeValue:=IntToStr(i);
// [tipoOperacaoNotaFiscal]
// 1 Compra
// 2 Transferência
// 3 Venda
ChildNodes['notaFiscalTransferenciaInsumo'].ChildNodes['tipoOperacaoNotaFiscal'].NodeValue:='2';
ChildNodes['notaFiscalTransferenciaInsumo'].ChildNodes['dataNotaFiscal'].NodeValue:=FormatDateTime('yyyy-mm-dd',Date);
ChildNodes['notaFiscalTransferenciaInsumo'].ChildNodes['cnpjOrigem'].NodeValue:='99999999000199';
ChildNodes['notaFiscalTransferenciaInsumo'].ChildNodes['cnpjDestino'].NodeValue:='99999999000199';
ChildNodes['substanciaInsumoTransferencia'].ChildNodes['insumoTransferencia'].ChildNodes['codigoInsumo'].NodeValue:='02904';
ChildNodes['substanciaInsumoTransferencia'].ChildNodes['insumoTransferencia'].ChildNodes['numeroLoteInsumo'].NodeValue:='15353';
ChildNodes['substanciaInsumoTransferencia'].ChildNodes['insumoTransferencia'].ChildNodes['insumoCNPJFornecedor'].NodeValue:='99999999000199';
ChildNodes['substanciaInsumoTransferencia'].ChildNodes['quantidadeInsumoTransferencia'].NodeValue:='20000.0';
ChildNodes['substanciaInsumoTransferencia'].ChildNodes['tipoUnidadeTransferencia'].NodeValue:='1';
ChildNodes['dataTransferenciaInsumo'].NodeValue :=FormatDateTime('yyyy-mm-dd',Date);
end;
end;
// Loop das [Perdas] :: INSUMO
for i:=1 to x do
begin
NData:=NMedicamento.AddChild('saidaInsumoPerda');
with NData do
begin
// [motivoPerdaInsumo]
// 1 Furto / Roubo
// 2 Avaria
// 3 Vencimento
// 4 Apreensão / Recolhimento pela Visa
ChildNodes['motivoPerdaInsumo'].NodeValue:='2';
ChildNodes['substanciaInsumoPerda'].ChildNodes['insumoPerda'].ChildNodes['codigoInsumo'].NodeValue:='02904';
ChildNodes['substanciaInsumoPerda'].ChildNodes['insumoPerda'].ChildNodes['numeroLoteInsumo'].NodeValue:='786dpz';
ChildNodes['substanciaInsumoPerda'].ChildNodes['insumoPerda'].ChildNodes['insumoCNPJFornecedor'].NodeValue:='99999999000199';
ChildNodes['substanciaInsumoPerda'].ChildNodes['quantidadeInsumoPerda'].NodeValue:='12345.0';
ChildNodes['substanciaInsumoPerda'].ChildNodes['tipoUnidadePerda'].NodeValue:='1';
ChildNodes['dataPerdaInsumo'].NodeValue:=FormatDateTime('yyyy-mm-dd',Date);
ChildNodes['cnpjFornecedorInsumo'].NodeValue:='99999999000199';
end;
end;
// *************************************************************************
SaveToFile(ExtractFileDir(Application.ExeName)+'\Sngpc_'+FormatDateTime('dd_mm_yyyy',Date)+'.xml');
end;
XMLDoc.Active:=False;
XMLDoc.Free;
end;

Procurar neste site . . .