diff --git a/DAKOSY_Worker/DAKOSY/ATLAS/EZA/cDakosyEZA.vb b/DAKOSY_Worker/DAKOSY/ATLAS/EZA/cDakosyEZA.vb
index c05921b..20b4171 100644
--- a/DAKOSY_Worker/DAKOSY/ATLAS/EZA/cDakosyEZA.vb
+++ b/DAKOSY_Worker/DAKOSY/ATLAS/EZA/cDakosyEZA.vb
@@ -1829,6 +1829,7 @@ Public Class cDakosy_EZA_Warenposition
Property ezaWP_AbgabensteuerungKz As Object = Nothing ' VARCHAR (2) NULL,
Property ezaWP_EUCode As Object = Nothing ' VARCHAR (3) NULL,
Property ezaWP_UrsprungslandCode As Object = Nothing ' VARCHAR (2) NULL,
+ Property ezaWP_Praeferenzursprungsland As Object = Nothing ' VARCHAR (2) NULL,
Property ezaWP_Rohmasse As Object = Nothing ' DECIMAL (11, 1) NULL,
Property ezaWP_Eigenmasse As Object = Nothing ' DECIMAL (11, 1) NULL,
Property ezaWP_AHStatMenge As Object = Nothing ' DECIMAL (15, 3) NULL,
@@ -1976,6 +1977,7 @@ Public Class cDakosy_EZA_Warenposition
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ezaWP_AbgabensteuerungKz", ezaWP_AbgabensteuerungKz)) ' VARCHAR (2) NULL,
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ezaWP_EUCode", ezaWP_EUCode)) ' VARCHAR (3) NULL,
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ezaWP_UrsprungslandCode", ezaWP_UrsprungslandCode)) ' VARCHAR (2) NULL,
+ list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ezaWP_Praeferenzursprungsland", ezaWP_Praeferenzursprungsland)) ' VARCHAR (2) NULL,
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ezaWP_Rohmasse", ezaWP_Rohmasse)) ' DECIMAL (11, 1) NULL,
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ezaWP_Eigenmasse", ezaWP_Eigenmasse)) ' DECIMAL (11, 1) NULL,
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ezaWP_AHStatMenge", ezaWP_AHStatMenge)) ' DECIMAL (15, 3) NULL,
diff --git a/DAKOSY_Worker/DAKOSY_Worker_lib.vbproj b/DAKOSY_Worker/DAKOSY_Worker_lib.vbproj
index 660fe90..f8c5c54 100644
--- a/DAKOSY_Worker/DAKOSY_Worker_lib.vbproj
+++ b/DAKOSY_Worker/DAKOSY_Worker_lib.vbproj
@@ -72,6 +72,7 @@
+
diff --git a/DAKOSY_Worker/cImporter_DakosyToVERAG.vb b/DAKOSY_Worker/cImporter_DakosyToVERAG.vb
new file mode 100644
index 0000000..0a16b1e
--- /dev/null
+++ b/DAKOSY_Worker/cImporter_DakosyToVERAG.vb
@@ -0,0 +1,257 @@
+Imports System.Data.SqlClient
+Imports VERAG_PROG_ALLGEMEIN
+Public Class cImporter_DakosyToVERAG
+
+ Private SQL As New VERAG_PROG_ALLGEMEIN.SQL
+
+ ' ========================================================================
+ ' MAIN ENTRY
+ ' ========================================================================
+ Public Function ImportDakosyEZA(eza As cDakosyEZA) As Boolean
+ Try
+ ' 1) Duplikatscheck auf Kopfebene (MRN / LRN + System)
+ If ExistsInVERAG(eza) Then
+ Console.WriteLine($"Skip import (duplicate): MRN={If(eza.eza_MRN, "")} / LRN={If(eza.eza_ANR, "")}")
+ Return False
+ End If
+
+ ' 2) HEADER anlegen
+ Dim zaId = Save_Header(eza)
+ If zaId <= 0 Then
+ Console.WriteLine("Error: Header save failed")
+ Return False
+ End If
+
+ ' 3) ITEMS speichern (alle Positionen – kein eigener Duplikatscheck)
+ Save_Items(eza, zaId)
+
+ ' 4) DUTIES speichern (aus AUFSCHUB – kein eigener Duplikatscheck)
+ Save_Duties(eza, zaId)
+
+ ' 5) DOCS speichern (Unterlagen auf Kopfebene – kein eigener Duplikatscheck)
+ Save_Docs(eza, zaId)
+
+ Return True
+
+ Catch ex As Exception
+ VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(
+ ex.Message,
+ ex.StackTrace,
+ Reflection.MethodInfo.GetCurrentMethod().Name
+ )
+ Return False
+ End Try
+ End Function
+
+
+ ' ========================================================================
+ ' DUPLICATE CHECK : MRN / LRN + SYSTEM
+ ' ========================================================================
+ Private Function ExistsInVERAG(eza As cDakosyEZA) As Boolean
+
+ Dim sqlStr As String =
+ "SELECT TOP 1 1
+ FROM tblVERAG_Zollanmeldung
+ WHERE za_System = 'DAKOSY'
+ AND (
+ (za_MRN = @mrn AND @mrn IS NOT NULL)
+ OR (za_LRN = @lrn AND @lrn IS NOT NULL)
+ )"
+
+ Dim p As New List(Of SQLVariable) From {
+ New SQLVariable("@mrn", If(eza.eza_MRN, DBNull.Value)),
+ New SQLVariable("@lrn", If(eza.eza_ANR, DBNull.Value))
+ }
+
+ Dim dt = SQL.loadDgvBySql_Param(sqlStr, "FMZOLL",, p)
+ Return (dt IsNot Nothing AndAlso dt.Rows.Count > 0)
+
+ End Function
+
+
+ ' ========================================================================
+ ' HEADER SAVE
+ ' ========================================================================
+ Private Function Save_Header(eza As cDakosyEZA) As Integer
+
+ Dim list As New List(Of SQLVariable)
+
+ ' PK wird von SQL doSQLVarListID gesetzt
+ list.Add(New SQLVariable("za_Id", Nothing, , True, True))
+
+ list.Add(New SQLVariable("za_System", "DAKOSY"))
+ list.Add(New SQLVariable("za_MRN", eza.eza_MRN))
+ list.Add(New SQLVariable("za_LRN", eza.eza_ObjectName))
+
+ list.Add(New SQLVariable("za_Firma", eza.eza_firma))
+ list.Add(New SQLVariable("za_Zollstelle", eza.eza_AdressierteZollstelle))
+ list.Add(New SQLVariable("za_Sachbearbeiter", eza.eza_Bearbeiter))
+
+ ' interne Zuordnungen
+ list.Add(New SQLVariable("AvisoId", eza.eza_dyaAnmID))
+ list.Add(New SQLVariable("SendungsId", Nothing))
+
+ Dim cmd As String =
+ "INSERT INTO tblVERAG_Zollanmeldung
+ (za_System,
+ za_MRN,
+ za_LRN,
+ za_Firma,
+ za_Zollstelle,
+ za_Sachbearbeiter,
+ AvisoId,
+ SendungsId)
+ VALUES
+ (@za_System,
+ @za_MRN,
+ @za_LRN,
+ @za_Firma,
+ @za_Zollstelle,
+ @za_Sachbearbeiter,
+ @AvisoId,
+ @SendungsId);
+ SELECT SCOPE_IDENTITY()"
+
+ Dim newId = SQL.doSQLVarListID(0, cmd, "FMZOLL", , list)
+
+
+ Return CInt(newId)
+
+ End Function
+
+
+ ' ========================================================================
+ ' ITEMS SAVE (alle Positionen, kein Duplikatscheck)
+ ' ========================================================================
+ Private Sub Save_Items(eza As cDakosyEZA, zaId As Integer)
+
+ If eza.eza_WARENPOS Is Nothing Then Exit Sub
+
+ For Each pos As cDakosy_EZA_Warenposition In eza.eza_WARENPOS
+
+ Dim list As New List(Of SQLVariable)
+
+ list.Add(New SQLVariable("za_Id", zaId))
+
+ ' PosNr / Artikel / HS
+ list.Add(New SQLVariable("zaItem_PosNo", pos.ezaWP_PositionsNummer))
+ list.Add(New SQLVariable("zaItem_ArticleCode", pos.ezaWP_Artikelnummer))
+ list.Add(New SQLVariable("zaItem_HSCode", pos.ezaWP_WarennummerEZT))
+
+ ' Ursprung / Origin
+ list.Add(New SQLVariable("zaItem_OriginCountry", pos.ezaWP_UrsprungslandCode))
+
+ ' Zollwert / Statistikwert
+ list.Add(New SQLVariable("zaItem_CustomsValue", pos.ezaWP_Zollwert))
+ list.Add(New SQLVariable("zaItem_StatisticalValue", pos.ezaWP_AHStatWert))
+
+ ' Begünstigungscode (Dakosy: ezaWP_BeguenstigungBenatragtCode)
+ list.Add(New SQLVariable("zaItem_BeguenstigungCode", pos.ezaWP_BeguenstigungBenatragtCode))
+
+ Dim cmd As String =
+ "INSERT INTO tblVERAG_Zollanmeldung_Items
+ (za_Id,
+ zaItem_PosNo,
+ zaItem_ArticleCode,
+ zaItem_HSCode,
+ zaItem_OriginCountry,
+ zaItem_CustomsValue,
+ zaItem_StatisticalValue,
+ zaItem_BeguenstigungCode)
+ VALUES
+ (@za_Id,
+ @zaItem_PosNo,
+ @zaItem_ArticleCode,
+ @zaItem_HSCode,
+ @zaItem_OriginCountry,
+ @zaItem_CustomsValue,
+ @zaItem_StatisticalValue,
+ @zaItem_BeguenstigungCode)"
+
+ SQL.doSQLVarList(cmd, "FMZOLL", , list)
+
+ Next
+
+ End Sub
+
+
+ ' ========================================================================
+ ' DUTIES SAVE (alle AUFSCHUB-Einträge, kein Duplikatscheck)
+ ' ========================================================================
+ Private Sub Save_Duties(eza As cDakosyEZA, zaId As Integer)
+
+ If eza.eza_AUFSCHUB Is Nothing Then Exit Sub
+
+ For Each duty As cDakosy_EZA_Aufschub In eza.eza_AUFSCHUB
+
+ Dim list As New List(Of SQLVariable)
+
+ list.Add(New SQLVariable("za_Id", zaId))
+
+ ' Dakosy-Aufschub Felder:
+ ' ezaAfb_AbgabeArt -> DutyType
+ ' ezaAfb_Abgabenbetrag -> Amount / AmountEUR
+ list.Add(New SQLVariable("DutyType", duty.ezaAfb_AbgabeArt))
+ list.Add(New SQLVariable("Amount", duty.ezaAfb_Abgabenbetrag))
+
+ ' In der Aufschubtabelle gibt es keine Fremdwährungsspalte,
+ ' i.d.R. ist der Betrag EUR -> Currency/AmountEUR entsprechend setzen
+ list.Add(New SQLVariable("Currency", "EUR"))
+ list.Add(New SQLVariable("AmountEUR", duty.ezaAfb_Abgabenbetrag))
+
+ Dim cmd As String =
+"INSERT INTO tblVERAG_Zollanmeldung_Duties
+ (za_Id,
+ DutyType,
+ Amount,
+ Currency,
+ AmountEUR)
+ VALUES
+ (@za_Id,
+ @DutyType,
+ @Amount,
+ @Currency,
+ @AmountEUR)"
+
+ SQL.doSQLVarList(cmd, "FMZOLL", , list)
+
+ Next
+
+ End Sub
+
+
+ ' ========================================================================
+ ' DOCS SAVE (alle Unterlagen auf Kopfebene, kein Duplikatscheck)
+ ' ========================================================================
+ Private Sub Save_Docs(eza As cDakosyEZA, zaId As Integer)
+
+ If eza.eza_UNTERLAGEN Is Nothing Then Exit Sub
+
+ For Each d As cDakosy_EZA_Unterlagen In eza.eza_UNTERLAGEN
+
+ Dim list As New List(Of SQLVariable)
+
+ list.Add(New SQLVariable("za_Id", zaId))
+ list.Add(New SQLVariable("Level", "H")) ' H = Header
+ list.Add(New SQLVariable("DocType", d.ezaUl_Art))
+ list.Add(New SQLVariable("DocNumber", d.ezaUl_Nummer))
+
+ Dim cmd As String =
+"INSERT INTO tblVERAG_Zollanmeldung_Docs
+ (za_Id,
+ Level,
+ DocType,
+ DocNumber)
+ VALUES
+ (@za_Id,
+ @Level,
+ @DocType,
+ @DocNumber)"
+
+ SQL.doSQLVarList(cmd, "FMZOLL", , list)
+
+ Next
+
+ End Sub
+
+End Class
\ No newline at end of file