Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SGK'ye E-Reçete gönderimi..
#1
Kendi programımdan örnek kod. Security Header için daha önce paylaşmış olduğum WSSE_SGK.pas dosyasını kullanmanız gerekli. (https://groups.google.com/forum/#!msg/sa...Lto-iHXG4J bağlantısında var.)


[Ars=delphi]
procedure TFormReceteler.ActionMedulayaGonderExecute(Sender: TObject);
var
  Servis  : SaglikTesisiReceteIslemleri;
  Giris   : EreceteGirisIstekDVO;
  Sonuc   : EreceteGirisCevapDVO;
const
 WS_URL = 'https://medeczane.sgk.gov.tr/medula/eczane/saglikTesisiReceteIslemleriWS';

  function GetIlacAckList: Array_Of_ereceteIlacAciklamaDVO;
  var
    Sayac: Integer;
  begin
    try
      QIlacAciklama.Filter := 'SATIR_REF = ' + IntToSTr(QIlaclar.FieldByName('REF').AsInteger);
      QIlacAciklama.Filtered := True;
      Sayac := 0;
      SetLength(Result, Sayac);
      QIlacAciklama.First;
      while not QIlacAciklama.Eof do
      begin
        Inc(Sayac);
        SetLength(Result, Sayac);
        Result[Sayac - 1] := EreceteIlacAciklamaDVO.Create;
        Result[Sayac - 1].aciklamaTuru := QIlacAciklama.FieldByName('ACIKLAMA_TURU').AsInteger;
        Result[Sayac - 1].aciklama := QIlacAciklama.FieldByName('ACIKLAMA').AsString;
        QIlacAciklama.Next;
      end;
    finally
      QIlacAciklama.Filtered := False;
    end;
  end;

  function GetIlacList: Array_Of_ereceteIlacDVO;
  var
    Sayac: Integer;
  begin
    Sayac := 0;
    SetLength(Result, Sayac);
    QIlaclar.First;
    while not QIlaclar.Eof do
    begin
      Inc(Sayac);
      SetLength(Result, Sayac);
      Result[Sayac - 1] := EreceteIlacDVO.Create;
      Result[Sayac - 1].adet := QIlaclar.FieldByName('ADET').AsInteger;
      Result[Sayac - 1].barkod := StrToInt64(QIlaclar.FieldByName('KOD').AsString);
      Result[Sayac - 1].ilacAdi := QIlaclar.FieldByName('ACIKLAMA').AsString;
      Result[Sayac - 1].kullanimDoz1 := QIlaclar.FieldByName('KULLANIM_DOZ1').AsInteger;
      Result[Sayac - 1].kullanimPeriyotBirimi := QIlaclar.FieldByName('KULLANIM_PERIYOT_BIRIMI').AsInteger;
      Result[Sayac - 1].kullanimSekli := QIlaclar.FieldByName('KULLANIM_SEKLI').AsInteger;
      Result[Sayac - 1].ereceteIlacAciklamaListesi := GetIlacAckList;
      Result[Sayac - 1].kullanimDoz2 := QIlaclar.FieldByName('KULLANIM_DOZ2').AsFloat;
      Result[Sayac - 1].kullanimPeriyot := QIlaclar.FieldByName('KULLANIM_PERIYOT').AsInteger;
      Result[Sayac - 1].geriOdemeKapsaminda := QIlaclar.FieldByName('GERI_ODEME_KAPSAMINDA').AsString;
      QIlaclar.Next;
    end;
  end;

  function GetTaniList: SaglikTesisiReceteIslemleriWS.Array_Of_ereceteTaniDVO;
  var
    Sayac: Integer;
  begin
    Sayac := 0;
    SetLength(Result, Sayac);
    QTanilar.First;
    while not QTanilar.Eof do
    begin
      Inc(Sayac);
      SetLength(Result, Sayac);
      Result[Sayac - 1] := SaglikTesisiReceteIslemleriWS.EreceteTaniDVO.Create;
      Result[Sayac - 1].taniKodu := QTanilar.FieldByName('KOD').AsString;
      Result[Sayac - 1].taniAdi := QTanilar.FieldByName('ACIKLAMA').AsString;
      QTanilar.Next;
    end;
  end;

  function GetReceteAck: Array_Of_ereceteAciklamaDVO;
  var
    Sayac: Integer;
  begin
    Sayac := 0;
    SetLength(Result, Sayac);
    QReceteAciklama.First;
    while not QReceteAciklama.Eof do
    begin
      Inc(Sayac);
      SetLength(Result, Sayac);
      Result[Sayac - 1] := EreceteAciklamaDVO.Create;
      Result[Sayac - 1].aciklamaTuru := QReceteAciklama.FieldByName('ACIKLAMA_TURU').AsInteger;
      Result[Sayac - 1].aciklama := QReceteAciklama.FieldByName('ACIKLAMA').AsString;
      QReceteAciklama.Next;
    end;
  end;

begin
  Screen.Cursor := crSQLWait;
  try
    if QRecete.FieldByName('ERECETE_NO').AsString > '' then raise Exception.Create('Bu reçete zaten medulaya gönderilmiş!');
    if QRecete.FieldByName('DR_TCKIMLIK').AsString = '' then raise Exception.Create('Doktorun TC kimlik numarası girilmemiş!');
    if QRecete.FieldByName('DR_ERECETE_SIFRE').AsString = '' then raise Exception.Create('Doktorun e-reçete şifresi girilmemiş!');
    if QRecete.FieldByName('DR_BRANS').AsString = '' then raise Exception.Create('Doktorun branşı girilmemiş!');
    DetayYukle; // Burada reçeteye ait satır kayıtları (İlaç, tanı vs.) okunuyor
    HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := QRecete.FieldByName('DR_TCKIMLIK').AsString;
    HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password := QRecete.FieldByName('DR_ERECETE_SIFRE').AsString;
    HTTPRIO1.HTTPWebNode.UseUTF8InHeader := True;

    Giris := nil;
    Sonuc := nil;

    Servis := GetSaglikTesisiReceteIslemleri(False, WS_URL, HTTPRIO1);
    Giris  := EreceteGirisIstekDVO.Create;

    Giris.tesisKodu  := CurrentParam.M3_Tesis_Kodu;

    Giris.doktorTcKimlikNo  := StrToInt64Def(QRecete.FieldByName('DR_TCKIMLIK').AsString, -1);
    Giris.ereceteDVO  := EreceteDVO.Create;
    Giris.ereceteDVO.protokolNo := QRecete.FieldByName('DEFTER_KAYIT_NO').AsString;
    Giris.ereceteDVO.provizyonTipi := QRecete.FieldByName('PROVIZYON_TIPI').AsInteger;
    Giris.ereceteDVO.receteAltTuru := QRecete.FieldByName('RECETE_ALT_TURU').AsInteger;
    Giris.ereceteDVO.receteTarihi := FormatDateTime('dd.mm.yyyy', QRecete.FieldByName('RECETE_TARIHI').AsDateTime);
    Giris.ereceteDVO.receteTuru := QRecete.FieldByName('RECETE_TURU').AsInteger;
    Giris.ereceteDVO.takipNo := QRecete.FieldByName('MEDULA_TAKIP_NO').AsString;
    Giris.ereceteDVO.tcKimlikNo := StrToInt64Def(QRecete.FieldByName('TCKIMLIK').AsString, -1);
    Giris.ereceteDVO.tesisKodu := CurrentParam.M3_Tesis_Kodu;
    Giris.ereceteDVO.seriNo := QRecete.FieldByName('SERI_NO').AsString;
    Giris.ereceteDVO.doktorBransKodu := QRecete.FieldByName('DR_BRANS').AsInteger;
    Giris.ereceteDVO.doktorSertifikaKodu := QRecete.FieldByName('SERTIFIKA_KODU').AsInteger;
    Giris.ereceteDVO.kisiDVO := KisiDVO.Create;
    Giris.ereceteDVO.kisiDVO.adi := QRecete.FieldByName('HASTA_ADI').AsString;
    Giris.ereceteDVO.kisiDVO.cinsiyeti := QRecete.FieldByName('CINSIYET').AsString;
    Giris.ereceteDVO.kisiDVO.dogumTarihi := FormatDateTime('dd.mm.yyyy', QRecete.FieldByName('DOGTRH').AsDateTime);
    Giris.ereceteDVO.kisiDVO.soyadi := QRecete.FieldByName('HASTA_SOYADI').AsString;
    Giris.ereceteDVO.kisiDVO.tcKimlikNo := StrToInt64Def(QRecete.FieldByName('TCKIMLIK').AsString, -1);
    //Giris.ereceteDVO.ereceteNo := '';
    Giris.ereceteDVO.ereceteIlacListesi := GetIlacList;
    Giris.ereceteDVO.ereceteTaniListesi := GetTaniList;
    Giris.ereceteDVO.ereceteAciklamaListesi := GetReceteAck;
    Giris.ereceteDVO.doktorAdi := QRecete.FieldByName('DR_ADI').AsString;
    Giris.ereceteDVO.doktorSoyadi := QRecete.FieldByName('DR_SOYADI').AsString;
    Giris.ereceteDVO.doktorTcKimlikNo := StrToInt64Def(QRecete.FieldByName('DR_TCKIMLIK').AsString, -1);
    // Giris.ereceteDVO.yatanHastaOnayiBekliyor := '';
    // Giris.ereceteDVO.ehuOnayiBekliyor := '';

    SetSecurityHeader2(Servis, QRecete.FieldByName('DR_TCKIMLIK').AsString, QRecete.FieldByName('DR_ERECETE_SIFRE').AsString);
    try
      Sonuc := Servis.ereceteGiris(Giris);
    except
      on E: Exception do
      begin
        ShowMessage('HATA OLUŞTU: '+ E.Message); // Exception'ın ürettiği mesajı görüntüle
        raise;
      end;
    end;
    if StrToIntDef(Sonuc.sonucKodu, -1) <> 0 then
    begin
      raise Exception.Create('MEDULA: (' + Sonuc.sonucKodu + ') ' + Sonuc.sonucMesaji);
    end;

    KayitGuncelle; // Burada veritabanı güncellenecek
    ShowMessage('Reçete medulaya gönderildi!');
  finally
    Screen.Cursor := crDefault;
    if Giris <> nil then Giris.Free;
    if Sonuc <> nil then Sonuc.Free;
  end;
end;

[/Ars]
WWW
Cevapla
#2
Teşekkürler.
Cevapla
#3
Paylaşım için teşekkürler.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi