1-Pre Autorizacao (Vc informa pro site do FP)
1.1 - Informa os dados da farmacia e do usuario que ta fazendo a solicitacao (que deverao estar cadastrados no site do DataSUS)
{ Usuário Farmacia / Vendedor }
Usuario := UsuarioFarmaciaDTO.Create;
Usuario.UsuarioFarmacia := Parametro(FPopularEmail).AsString;
Usuario.SenhaFarmacia := Parametro(FPopularSenha).AsString;
Usuario.UsuarioVendedor := fVendedorLogin;
Usuario.SenhaVendedor := fVendedorSenha;
1.2 - Informa os produtos a serem cotados
{ MEDICAMENTOS SOLICITADOS }
for Item := 0 to fVenda.Produtos.Count-1 do begin
fProduto := TVdaProduto(fVenda.Produtos.Items[item]);
if not fProduto.Deleted then begin
SetLength(Medicamentos, Length(Medicamentos) + 1);
Medicamentos[Length(Medicamentos) - 1] := MedicamentoDTO.Create;
Medicamentos[Length(Medicamentos) - 1].coCodigoBarra := fProduto.Produto.FPopular_EAN13;
Medicamentos[Length(Medicamentos) - 1].qtPrescrita := fProduto.FPopular.Posologia;
Medicamentos[Length(Medicamentos) - 1].qtSolicitada := fProduto.Qtde * fProduto.Produto.Apresentacao;
Medicamentos[Length(Medicamentos) - 1].vlPrecoVenda := fProduto.Produto.FPopular_Total;
end;
end;
1.3 Dados do estabelecimento e paciente
{ Dados do Estabelecimento e Paciente }
Solicitacao := SolicitacaoDTO.Create;
Solicitacao.arrMedicamentoDTO := Medicamentos;
Solicitacao.coSolicitacaoFarmacia := StrZero(fVenda.FPopular.IdSolicitacao, 6);
Solicitacao.dtEmissaoReceita := TXSDateTime.Create;
Solicitacao.dtEmissaoReceita.AsDateTime := fVenda.FPopular.ReceitaData + Time;
Solicitacao.nuCnpj := ApenasDigitos(fSistema.Empresa.CnpjCpf);
Solicitacao.nuCpf := ApenasDigitos(fVenda.FPopular.CompradorCPF);
Solicitacao.nuCrm := fVenda.FPopular.Profissional.NumeroRegistro;
Solicitacao.sgUfCrm := fVenda.FPopular.Profissional.UFConselho;
Solicitacao.dnaEstacao := Trim(ObterSolicitacao(Solicitacao));
1.4 Executa a pre-solicitacao e obtem o retorno do site
Autorizacao := AutorizacaoDTO.Create;
Autorizacao := WebService.ExecutarSolicitacao(Solicitacao, Usuario);
fVenda.FPopular.ReqRetorno := Autorizacao.inAutorizacaoSolicitacao;
fVenda.FPopular.ReqRetornoDescricao := Autorizacao.descMensagemErro;
fVenda.FPopular.ReqRetornoNomePaciente := Autorizacao.noPessoa;
fVenda.FPopular.ReqRetornoCodigoDataSus := Autorizacao.nuAutorizacao;
for Item := Integer(Low(Autorizacao.arrMedicamentoDTO)) to Integer(High(Autorizacao.arrMedicamentoDTO)) do begin
fProduto := fVenda.Produtos.GetProdutoEANFP(Autorizacao.arrMedicamentoDTO[item].coCodigoBarra);
if Assigned(fProduto) then begin
fProduto.FPopular.QtdeAutorizada := Trunc(Autorizacao.arrMedicamentoDTO[item].qtAutorizada);
fProduto.FPopular.ValorParcelaMS := Autorizacao.arrMedicamentoDTO[item].vlPrecoSubsidiadoMS;
fProduto.FPopular.ValorParcelaPaciente := Autorizacao.arrMedicamentoDTO[item].vlPrecoSubsidiadoPaciente;
fProduto.FPopular.ValorParcelaPaciente := (fProduto.TotalLiquido - fProduto.FPopular.ValorParcelaMS);
fProduto.FPopular.ReqRetorno := Copy(Autorizacao.arrMedicamentoDTO[item].inAutorizacaoMedicamento,1,4);
fProduto.FPopular.ReqRetornoDescricao := Copy(Autorizacao.arrMedicamentoDTO[item].inAutorizacaoMedicamento,8,200);
end;
end;
Observacao: Com isso vc tem o retorno do DAtaSus e os produtos autorizados e nao autorizados