IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_intToDate')
	DROP FUNCTION dbo.fn_intToDate
GO
CREATE function dbo.fn_intToDate( @intVal decimal(18,0))
returns datetime
as
begin
declare @intDate decimal(18,0)
declare @h decimal(18,0)
declare @rest int
declare @res datetime
declare @tage decimal(18,0)

if (@intVal is not null)
begin
	set @tage = (@intVal/86400)
	set @rest =  (cast (@intVal as bigint ) %86400  )
	if (@rest != 0) 
	begin 
		set @tage = @tage  - 1 
	end
	set @intDate = cast(@tage  as int)
	set @res = cast(@intDate as datetime)
end
return @res
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_dateToInt')
	DROP FUNCTION dbo.fn_dateToInt
GO
CREATE function dbo.fn_dateToInt( @aDateTime datetime)
returns decimal(18,0)
as
begin
declare @intDate decimal(18,0)
declare @h decimal(18,0)
declare @res decimal(18,0)
if (@aDateTime is not null)
begin
set @intDate = cast(@aDateTime as int)
if ((datepart (hh, @aDateTime) != 0) or (datepart (mi, @aDateTime) != 0) or
(datepart (s, @aDateTime) != 0) or (datepart (ms, @aDateTime) != 0)) set @intDate = @intDate -1
set @intDate = (@intDate * 86400)
set @h =  0
set @res= @intDate + @h
end
return @res
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_kasseGetOid')
	DROP FUNCTION dbo.fn_kasseGetOid
GO
CREATE function dbo.fn_kasseGetOid()
returns int
as
begin
declare @id varchar(10)
declare @oid int

if exists (select * from dbo.sysobjects where id = object_id('[dbo].[KASSE_ID]'))
	set @id = ( select max(ID) from KASSE_ID )

if @id IS NOT NULL
	set @oid = (
		select (max(oid)) 
		from KASSE A
		where A.ID = @id
	)

if(@oid IS NULL)
	set @oid = 1

return @oid
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_erstattungPositionNextOid')
	DROP FUNCTION dbo.fn_erstattungPositionNextOid
GO
create function dbo.fn_erstattungPositionNextOid()
returns int
as
begin
	declare @result int

	DECLARE pos_cursor CURSOR FOR 
	SELECT max(OID) FROM ERSTATTUNG_POSITION

	OPEN pos_cursor
	FETCH NEXT FROM pos_cursor INTO @result
	
	IF(@result IS NULL)
	BEGIN
		SET @result = 0
	END

	CLOSE pos_cursor
	DEALLOCATE pos_cursor

	RETURN(@result + 1)	
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_erstattungPositionVersionNextOid')
	DROP FUNCTION dbo.fn_erstattungPositionVersionNextOid
GO
create function dbo.fn_erstattungPositionVersionNextOid()
returns int
as
begin
	declare @result int

	DECLARE pos_cursor CURSOR FOR 
	SELECT max(OID) FROM ERSTATTUNG_POSITION_VERSION

	OPEN pos_cursor
	FETCH NEXT FROM pos_cursor INTO @result
	
	IF(@result IS NULL)
	BEGIN
		SET @result = 0
	END

	CLOSE pos_cursor
	DEALLOCATE pos_cursor

	RETURN(@result + 1)	
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_erstattungPositionVersionWertNextOid')
	DROP FUNCTION dbo.fn_erstattungPositionVersionWertNextOid
GO
create function dbo.fn_erstattungPositionVersionWertNextOid()
returns int
as
begin
	declare @result int

	DECLARE pos_cursor CURSOR FOR 
	SELECT max(OID) FROM LP_WERTE

	OPEN pos_cursor
	FETCH NEXT FROM pos_cursor INTO @result
	
	IF(@result IS NULL)
	BEGIN
		SET @result = 0
	END

	CLOSE pos_cursor
	DEALLOCATE pos_cursor

	RETURN(@result + 1)	
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_bereichKontoGetOid')
	DROP FUNCTION dbo.fn_bereichKontoGetOid
GO
CREATE function dbo.fn_bereichKontoGetOid(@rkasse int, @bereichNr smallint)
returns int
as
begin
declare @oid int
set @oid = (
	select (max(oid)) 
	from BEREICH_KONTO A
	where A.RKASSE = @rkasse 
	and A.BEREICHNR = @bereichNr
)

return @oid
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_erstattungPositionGetOid')
	DROP FUNCTION dbo.fn_erstattungPositionGetOid
GO
CREATE function dbo.fn_erstattungPositionGetOid(@rkasse int, @ebmPrefix varchar(1), @bemabmae varchar(5), @unterposition varchar(4))
returns int
as
begin
declare @oid int
set @oid = (
	select (max(oid)) 
	from ERSTATTUNG_POSITION A
	where A.RKASSE = @rkasse
	and A.EBM_PREFIX = @ebmPrefix
	and A.BEMABMAE = @bemabmae
	and A.UNTERPOSITION = @unterposition
)

return @oid
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_erstattungPositionVersionGetOid')
	DROP FUNCTION dbo.fn_erstattungPositionVersionGetOid
GO
CREATE function dbo.fn_erstattungPositionVersionGetOid(@rkasse int, @ebmPrefix varchar(1), @bemabmae varchar(5), @unterposition varchar(4), @nGueltigAb decimal(12,0))
returns int
as
begin
declare @oid int
set @oid = (
	select (max(b.oid)) 
	from ERSTATTUNG_POSITION A, ERSTATTUNG_POSITION_VERSION B
	where A.RKASSE = @rkasse
	and A.EBM_PREFIX = @ebmPrefix
	and A.BEMABMAE = @bemabmae
	and A.UNTERPOSITION = @unterposition
	and A.OID = B.R_ERSTATTUNG_POSITION
	and dbo.fn_intToDate(B.N_GUELTIG_AB) = dbo.fn_intToDate(@nGueltigAb)
)

return @oid
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_erstattungPositionVersionWertGetOid')
	DROP FUNCTION dbo.fn_erstattungPositionVersionWertGetOid
GO
CREATE function dbo.fn_erstattungPositionVersionWertGetOid(@rkasse int, @ebmPrefix varchar(1), @bemabmae varchar(5), @unterposition varchar(4), @nGueltigAb decimal(12,0), @arztgruppeNr varchar(2))
returns int
as
begin
declare @oid int
set @oid = (
	select (max(c.oid)) 
	from ERSTATTUNG_POSITION A, ERSTATTUNG_POSITION_VERSION B, LP_WERTE C
	where A.RKASSE = @rkasse
	and A.EBM_PREFIX = @ebmPrefix
	and A.BEMABMAE = @bemabmae
	and A.UNTERPOSITION = @unterposition
	and A.OID = B.R_ERSTATTUNG_POSITION
	and dbo.fn_intToDate(B.N_GUELTIG_AB) = dbo.fn_intToDate(@nGueltigAb)
	and B.OID = C.RLP
	and C.ARZTGRUPPE_NR = @arztgruppeNr
)

return @oid
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'pr_createKasseId')
	DROP PROCEDURE dbo.pr_createKasseId
GO
CREATE PROCEDURE dbo.pr_createKasseId @kasse_id varchar(10)
AS
begin

	if exists (select * from dbo.sysobjects where id = object_id('[dbo].[KASSE_ID]'))
		delete from [dbo].[KASSE_ID]
	else
		CREATE TABLE [dbo].[KASSE_ID] (
			[ID] [varchar] (10) NOT NULL 
		) ON [PRIMARY]

	insert into [dbo].[KASSE_ID] ( ID ) values (@kasse_id)
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'pr_insertOrUpdateErstattungPosition')
	DROP PROCEDURE dbo.pr_insertOrUpdateErstattungPosition
GO
CREATE PROCEDURE dbo.pr_insertOrUpdateErstattungPosition @rkasse int, @ebmPrefix varchar(1), @bemabmae varchar(5), @unterposition varchar(4), @bereichNr int
AS
begin
declare @oid int

set @rkasse = dbo.fn_kasseGetOid()

set @oid = (select dbo.fn_erstattungPositionGetOid(@rkasse, @ebmPrefix, @bemabmae, @unterposition))
if (@oid is null) 
	insert into ERSTATTUNG_POSITION
		(OID, VERSION, N_AEND_DATUM, AEND_USER, BEMABMAE, UNTERPOSITION, RKASSE, EBM_PREFIX, R_BEREICH_KONTO )
	values (
		dbo.fn_erstattungPositionNextOid(), 0, dbo.fn_datetimeToInt(CURRENT_TIMESTAMP), 'service', @bemabmae, @unterposition, @rkasse, @ebmPrefix, dbo.fn_bereichKontoGetOid(@rkasse,@bereichNr)
	)
else
	update ERSTATTUNG_POSITION set 
		N_AEND_DATUM = dbo.fn_datetimeToInt(CURRENT_TIMESTAMP),
		AEND_USER = 'service',
		R_BEREICH_KONTO = dbo.fn_bereichKontoGetOid(@rkasse, @bereichNr) 
	where OID = @oid
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'pr_insertOrUpdateErstattungPositionVersion')
	DROP PROCEDURE dbo.pr_insertOrUpdateErstattungPositionVersion
GO
CREATE PROCEDURE dbo.pr_insertOrUpdateErstattungPositionVersion @rkasse int, @ebmPrefix varchar(1), @bemabmae varchar(5), @unterposition varchar(4), @nGueltigAb decimal(12,0), @nGueltigBis decimal(12,0), 
@faktAmbBeh decimal(10,6), @wertetyp smallint, @bonus smallint, @isKfo int, @bezeichnung varchar(254), @alterVon int, @alterBis int, @mann int, @frau int, 
@ebmBeschreibung text, @hinweis varchar(254), @abfrage varchar(254), @ausschlussText text, @kommentar text,
@ausschluss01 smallint, @ausschluss01L text, @ausschluss02 smallint, @ausschluss03 smallint, @ausschluss04 smallint, @ausschluss04L varchar(254), @ausschluss04B decimal(7,2), @ausschluss04T int, @ausschluss04I int, @ausschluss06 smallint, @ausschluss06A smallint, @ausschluss07 smallint, @ausschluss07A smallint, @ausschluss08 smallint, @ausschluss08L varchar(254), 
@ausschluss09 smallint, @ausschluss09L varchar(254), @ausschluss10 int, @ausschluss10P decimal(6,2), @ausschluss14 smallint, @ausschluss14B decimal(7,2), @ausschluss15 smallint, @ausschluss15L varchar(254), @ausschluss15A smallint, @ausschluss16 smallint, @ausschluss16L varchar(254), @ausschluss16A smallint, @ausschluss17 smallint, @ausschluss17B decimal(7,2), 
@ausschluss18 smallint, @ausschluss18L varchar(254), @ausschluss18A smallint, @ausschluss19 smallint, @ausschluss19L varchar(254), @ausschluss19A smallint, @ausschluss20 int, @ausschluss20I int, @ausschluss21 smallint, @ausschluss21L text, @ausschluss22 smallint, @ausschluss22L text, @ausschluss23 smallint,@ausschluss23I int, @ausschluss23L text, @ausschluss23B decimal(7,2),  
@ausschluss24 smallint, @ausschluss28 smallint, @ausschluss28L varchar(254), @ausschluss29 smallint, @ausschluss29L varchar(254), @ausschluss30 int, @ausschluss30I int, @ausschluss30A int, @ausschluss31 int, @ausschluss31L varchar(254), @ausschluss32 int, @ausschluss32A int, @ausschluss33 int, @ausschluss33A int,
@ausschluss34 int, @ausschluss34L text, @ausschluss35 int, @ausschluss35L varchar(254), @ausschluss36 int, @ausschluss36A int, @ausschluss36L text, @ausschluss36L2 text, @ausschluss37 int, @ausschluss37L text,@alter_monat_jahr smallint, @ausschluss09_ausschliesslich smallint
AS
begin
declare @oid int

set @rkasse = dbo.fn_kasseGetOid()

set @oid = (select dbo.fn_erstattungPositionVersionGetOid(@rkasse, @ebmPrefix, @bemabmae, @unterposition, @nGueltigAb))
if (@oid is null) 
	insert into ERSTATTUNG_POSITION_VERSION (
		OID, R_ERSTATTUNG_POSITION, VERSION, N_AEND_DATUM, AEND_USER, N_GUELTIG_AB, N_GUELTIG_BIS, 
		FAKT_AMB_BEH, WERTETYP, BONUS, IS_KFO, BEZEICHNUNG, ALTER_VON, ALTER_BIS, MANN, FRAU, 
		EBM_BESCHREIBUNG, HINWEIS, abfrage, ausschluss_Text, kommentar,
		ausschluss01, ausschluss01L, ausschluss02, ausschluss03, ausschluss04, ausschluss04L, ausschluss04B, ausschluss04T, ausschluss04I, ausschluss06, ausschluss06A, ausschluss07, ausschluss07A, ausschluss08, ausschluss08L, 
		ausschluss09, ausschluss09L, ausschluss10, ausschluss10P, ausschluss14, ausschluss14B, ausschluss15, ausschluss15L, ausschluss15A, ausschluss16, ausschluss16L, ausschluss16A, ausschluss17, ausschluss17B, 
		ausschluss18, ausschluss18L, ausschluss18A, ausschluss19, ausschluss19L, ausschluss19A, ausschluss20, ausschluss20I, ausschluss21, ausschluss21L, ausschluss22, ausschluss22L, ausschluss23, ausschluss23I, ausschluss23L, ausschluss23B,  
		ausschluss24, ausschluss28, ausschluss28L, ausschluss29, ausschluss29L, ausschluss30, ausschluss30I, ausschluss30A, ausschluss31, ausschluss31L, ausschluss32, ausschluss32A, ausschluss33, ausschluss33A,
		ausschluss34, ausschluss34L, ausschluss35, ausschluss35L, ausschluss36, ausschluss36A, ausschluss36L, ausschluss36L2, ausschluss37, ausschluss37L, alter_monat_jahr, ausschluss09_ausschliesslich
	) values (
		dbo.fn_erstattungPositionVersionNextOid(), dbo.fn_erstattungPositionGetOid(@rkasse, @ebmPrefix, @bemabmae, @unterposition), 0, dbo.fn_datetimeToInt(CURRENT_TIMESTAMP), 'service', @nGueltigAb, @nGueltigBis, 
		@faktAmbBeh, @wertetyp, @bonus, @isKfo, @bezeichnung, @alterVon, @alterBis, @mann, @frau, 
		@ebmBeschreibung, @hinweis, @abfrage, @ausschlussText, @kommentar,
		@ausschluss01, @ausschluss01L, @ausschluss02, @ausschluss03, @ausschluss04, @ausschluss04L, @ausschluss04B, @ausschluss04T, @ausschluss04I, @ausschluss06, @ausschluss06A, @ausschluss07, @ausschluss07A, @ausschluss08, @ausschluss08L, 
		@ausschluss09, @ausschluss09L, @ausschluss10, @ausschluss10P, @ausschluss14, @ausschluss14B, @ausschluss15, @ausschluss15L, @ausschluss15A, @ausschluss16, @ausschluss16L, @ausschluss16A, @ausschluss17, @ausschluss17B, 
		@ausschluss18, @ausschluss18L, @ausschluss18A, @ausschluss19, @ausschluss19L, @ausschluss19A, @ausschluss20, @ausschluss20I, @ausschluss21, @ausschluss21L, @ausschluss22, @ausschluss22L, @ausschluss23, @ausschluss23I, @ausschluss23L, @ausschluss23B,  
		@ausschluss24, @ausschluss28, @ausschluss28L, @ausschluss29, @ausschluss29L, @ausschluss30, @ausschluss30I, @ausschluss30A, @ausschluss31, @ausschluss31L, @ausschluss32, @ausschluss32A, @ausschluss33, @ausschluss33A,
		@ausschluss34, @ausschluss34L, @ausschluss35, @ausschluss35L, @ausschluss36, @ausschluss36A, @ausschluss36L, @ausschluss36L2, @ausschluss37, @ausschluss37L, @alter_monat_jahr, @ausschluss09_ausschliesslich
	)
else
	update ERSTATTUNG_POSITION_VERSION set 
		N_AEND_DATUM = dbo.fn_datetimeToInt(CURRENT_TIMESTAMP),
		AEND_USER = 'service',
		N_GUELTIG_BIS = @nGueltigBis, 
		FAKT_AMB_BEH = @faktAmbBeh, 
		WERTETYP = @wertetyp, 
		BONUS = @bonus, 
		IS_KFO = @isKfo, 
		BEZEICHNUNG = @bezeichnung, 
		ALTER_VON = @alterVon, 
		ALTER_BIS = @alterBis, 
		MANN = @mann, 
		FRAU = @frau, 
		EBM_BESCHREIBUNG = @ebmBeschreibung, 
		HINWEIS = @hinweis, 
		abfrage = @abfrage, 
		ausschluss_Text = @ausschlussText, 
		kommentar = @kommentar,
		ausschluss01 = @ausschluss01, 
		ausschluss01L = @ausschluss01L, 
		ausschluss02 = @ausschluss02, 
		ausschluss03 = @ausschluss03, 
		ausschluss04 = @ausschluss04, 
		ausschluss04L = @ausschluss04L, 
		ausschluss04B = @ausschluss04B, 
		ausschluss04T = @ausschluss04T, 
		ausschluss04I = @ausschluss04I,
		ausschluss06 = @ausschluss06, 
		ausschluss06A = @ausschluss06A, 
		ausschluss07 = @ausschluss07, 
		ausschluss07A = @ausschluss07A, 
		ausschluss08 = @ausschluss08, 
		ausschluss08L = @ausschluss08L, 
		ausschluss09 = @ausschluss09,
		ausschluss09L = @ausschluss09L, 
		ausschluss10 = @ausschluss10, 
		ausschluss10P = @ausschluss10P, 
		ausschluss14 = @ausschluss14, 
		ausschluss14B = @ausschluss14B, 
		ausschluss15 = @ausschluss15, 
		ausschluss15L = @ausschluss15L, 
		ausschluss15A = @ausschluss15A, 
		ausschluss16 = @ausschluss16, 
		ausschluss16L = @ausschluss16L, 
		ausschluss16A = @ausschluss16A, 
		ausschluss17 = @ausschluss17, 
		ausschluss17B = @ausschluss17B, 
		ausschluss18 = @ausschluss18, 
		ausschluss18L = @ausschluss18L, 
		ausschluss18A = @ausschluss18A, 
		ausschluss19 = @ausschluss19, 
		ausschluss19L = @ausschluss19L, 
		ausschluss19A = @ausschluss19A,
		ausschluss20 = @ausschluss20,
		ausschluss20I = @ausschluss20I, 		 		 
		ausschluss21 = @ausschluss21, 
		ausschluss21L = @ausschluss21L, 
		ausschluss22 = @ausschluss22, 
		ausschluss22L = @ausschluss22L, 
		ausschluss23 = @ausschluss23,
		ausschluss23I = @ausschluss23I, 
		ausschluss23L = @ausschluss23L, 
		ausschluss23B = @ausschluss23B,  
		ausschluss24 = @ausschluss24, 
		ausschluss28 = @ausschluss28, 
		ausschluss28L = @ausschluss28L, 
		ausschluss29 = @ausschluss29, 
		ausschluss29L = @ausschluss29L, 
		ausschluss30 = @ausschluss30, 
		ausschluss30I = @ausschluss30I, 
		ausschluss30A = @ausschluss30A, 
		ausschluss31 = @ausschluss31, 
		ausschluss31L = @ausschluss31L, 
		ausschluss32 = @ausschluss32, 
		ausschluss32A = @ausschluss32A, 
		ausschluss33 = @ausschluss33, 
		ausschluss33A = @ausschluss33A,
		ausschluss34 = @ausschluss34, 
		ausschluss34L = @ausschluss34L, 
		ausschluss35 = @ausschluss35, 
		ausschluss35L = @ausschluss35L, 
		ausschluss36 = @ausschluss36, 
		ausschluss36A = @ausschluss36A, 
		ausschluss36L = @ausschluss36L, 
		ausschluss36L2 = @ausschluss36L2,
		ausschluss37 = @ausschluss37,
		ausschluss37L = @ausschluss37L,
		alter_monat_jahr = @alter_monat_jahr,
		ausschluss09_ausschliesslich = @ausschluss09_ausschliesslich
		 
	where OID = @oid
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'pr_insertOrUpdateErstattungPositionVersionWert')
	DROP PROCEDURE dbo.pr_insertOrUpdateErstattungPositionVersionWert
GO
CREATE PROCEDURE dbo.pr_insertOrUpdateErstattungPositionVersionWert @rkasse int, @ebmPrefix varchar(1), @bemabmae varchar(5), @unterposition varchar(4), @nGueltigAb decimal(12,0), @arztgruppeNr varchar(2),
	@aktiv int, @wert decimal(8,2)
AS
begin
declare @oid int

set @rkasse = dbo.fn_kasseGetOid()

set @oid = (select dbo.fn_erstattungPositionVersionWertGetOid(@rkasse, @ebmPrefix, @bemabmae, @unterposition, @nGueltigAb, @arztgruppeNr))
if (@oid is null) 
	insert into LP_WERTE (
		VERSION, N_AEND_DATUM, AEND_USER, 
		RLP, ARZTGRUPPE_NR, AKTIV, WERT 
	) values (
		0, dbo.fn_datetimeToInt(CURRENT_TIMESTAMP), 'service',
		dbo.fn_erstattungPositionVersionGetOid(@rkasse, @ebmPrefix, @bemabmae, @unterposition, @nGueltigAb), @arztgruppeNr, @aktiv, @wert
	)
else
	update LP_WERTE set 
		N_AEND_DATUM = dbo.fn_datetimeToInt(CURRENT_TIMESTAMP),
		AEND_USER = 'service',
		ARZTGRUPPE_NR = @arztgruppeNr,
		AKTIV = @aktiv,
		WERT = @wert
	where OID = @oid
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_goPositionGetOid')
	DROP FUNCTION dbo.fn_goPositionGetOid
GO
CREATE function dbo.fn_goPositionGetOid(@rkasse int, @goPrefix varchar(1), @gozGoae varchar(6))
returns int
as
begin
declare @oid int
set @oid = (
	select (max(oid)) 
	from GO_POSITION A
	where A.RKASSE = @rkasse
	and A.GO_PREFIX = @goPrefix
	and A.GOZGOAE = @gozGoae
)

return @oid
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_goPositionNextOid')
	DROP FUNCTION dbo.fn_goPositionNextOid
GO
create function fn_goPositionNextOid()
returns int
as
begin
	declare @result int

	DECLARE pos_cursor CURSOR FOR 
	SELECT max(OID) FROM GO_POSITION

	OPEN pos_cursor
	FETCH NEXT FROM pos_cursor INTO @result
	
	IF(@result IS NULL)
	BEGIN
		SET @result = 0
	END

	CLOSE pos_cursor
	DEALLOCATE pos_cursor

	RETURN(@result + 1)	
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'pr_insertOrUpdateGoPosition')
	DROP PROCEDURE dbo.pr_insertOrUpdateGoPosition
GO
CREATE PROCEDURE dbo.pr_insertOrUpdateGoPosition @rkasse int, @goPrefix varchar(1), @gozGoae varchar(6), 
@zuschlagspositionGoPrefix varchar(1), @zuschlagspositionGozGoae varchar(6), 
@nGueltigAb int, @bezeichnung varchar(254), @sprache varchar(20), @sprache1 varchar(20), @sprache2 varchar(20), @sprache3 varchar(20), @sprache4 varchar(20), @sprache5 varchar(20), @bezeichnung1 varchar(254), @bezeichnung2 varchar(254), @bezeichnung3 varchar(254), @bezeichnung4 varchar(254), @bezeichnung5 varchar(254), @beschreibung text
AS
begin
declare @oid int

set @rkasse = dbo.fn_kasseGetOid()

set @oid = (select dbo.fn_goPositionGetOid(@rkasse, @goPrefix, @gozGoae))
if (@oid is null) 
	insert into GO_POSITION
		(OID, VERSION, N_AEND_DATUM, AEND_USER, N_GUELTIG_AB, GOZGOAE, RZUSCHLAGSPOSITION, BEZEICHNUNG, RKASSE, SPRACHE, SPRACHE1, SPRACHE2, SPRACHE3, SPRACHE4, SPRACHE5, BEZEICHNUNG1, BEZEICHNUNG2, BEZEICHNUNG3, BEZEICHNUNG4, BEZEICHNUNG5, BESCHREIBUNG, GO_PREFIX 
	)
	values (
		dbo.fn_goPositionNextOid(), 0, dbo.fn_datetimeToInt(CURRENT_TIMESTAMP), 'service', @nGueltigAb, @gozGoae, dbo.fn_goPositionGetOid(@rkasse, @zuschlagspositionGoPrefix, @zuschlagspositionGozGoae), @bezeichnung, @rkasse, @sprache, @sprache1, @sprache2, @sprache3, @sprache4, @sprache5, @bezeichnung1, @bezeichnung2, @bezeichnung3, @bezeichnung4, @bezeichnung5, @beschreibung, @goPrefix
	)
else
	update GO_POSITION set 
		N_AEND_DATUM = dbo.fn_datetimeToInt(CURRENT_TIMESTAMP),
		AEND_USER = 'service',
		RZUSCHLAGSPOSITION = dbo.fn_goPositionGetOid(@rkasse, @zuschlagspositionGoPrefix, @zuschlagspositionGozGoae),
		BEZEICHNUNG = @bezeichnung, 
		SPRACHE = @sprache, 
		SPRACHE1 = @sprache1,
		SPRACHE2 = @sprache2,
		SPRACHE3 = @sprache3, 
		SPRACHE4 = @sprache4, 
		SPRACHE5 = @sprache5, 
		BEZEICHNUNG1 = @bezeichnung1, 
		BEZEICHNUNG2 = @bezeichnung2, 
		BEZEICHNUNG3 = @bezeichnung3, 
		BEZEICHNUNG4 = @bezeichnung4, 
		BEZEICHNUNG5 = @bezeichnung5, 
		BESCHREIBUNG = @beschreibung		
	where OID = @oid
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_fachgebietGetOid')
	DROP FUNCTION dbo.fn_FachgebietGetOid
GO
CREATE function dbo.fn_FachgebietGetOid(@fachgebietNr varchar(2))
returns int
as
begin
declare @oid int
set @oid = (
	select (max(OID)) 
	from FACHGEBIET A
	where A.FACHGEBIET_NR = @fachgebietNr
)
return @oid
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_fachgebietNextOid')
	DROP FUNCTION dbo.fn_fachgebietNextOid
GO
create function fn_fachgebietNextOid()
returns int
as
begin
declare @oid int
set @oid = ( select max(OID) from FACHGEBIET )
	
if(@oid IS NULL)
begin
	set @oid = 0
end
return(@oid + 1)	
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'pr_insertOrUpdateFachgebiet')
	DROP PROCEDURE dbo.pr_insertOrUpdateFachgebiet
GO
CREATE PROCEDURE dbo.pr_insertOrUpdateFachgebiet @fachgebietNr varchar(2), @bezeichnung varchar(254)

AS
begin
declare @oid int
set @oid = (select dbo.fn_fachgebietGetOid(@fachgebietNr))
if (@oid is null) 
	insert into FACHGEBIET
		(OID, VERSION, N_AEND_DATUM, AEND_USER, FACHGEBIET_NR, BEZEICHNUNG 
	)
	values (
		dbo.fn_fachgebietNextOid(), 0, dbo.fn_datetimeToInt(CURRENT_TIMESTAMP), 'service', @fachgebietNr, @bezeichnung
	)
else
	update FACHGEBIET set 
		N_AEND_DATUM = dbo.fn_datetimeToInt(CURRENT_TIMESTAMP),
		AEND_USER = 'service',
		BEZEICHNUNG = @bezeichnung
	where OID = @oid
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_goErstattungMapGetOid')
	DROP FUNCTION dbo.fn_goErstattungMapGetOid
GO
CREATE function dbo.fn_goErstattungMapGetOid(@fachgebietNr varchar(2), @rkasse int, @goPrefix varchar(1), @gozGoae varchar(6), @mapkatalog int)
returns int
as
begin
declare @oid int
set @oid = (
	select (max(OID)) 
	from GO_ERSTATTUNG_MAP A
	where A.R_FACHGEBIET = dbo.fn_fachgebietGetOid(@fachgebietNr)
	and A.R_GO_POSITION = dbo.fn_goPositionGetOid(@rkasse, @goPrefix, @gozGoae)
	and A.MAP_KATALOG = @mapKatalog
)
return @oid
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_goErstattungMapNextOid')
	DROP FUNCTION dbo.fn_goErstattungMapNextOid
GO
create function fn_goErstattungMapNextOid()
returns int
as
begin
declare @oid int
set @oid = ( select max(OID) from GO_ERSTATTUNG_MAP )
	
if(@oid IS NULL)
begin
	set @oid = 0
end
return(@oid + 1)	
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'pr_insertOrUpdateGoErstattungMap')
	DROP PROCEDURE dbo.pr_insertOrUpdateGoErstattungMap
GO
CREATE PROCEDURE dbo.pr_insertOrUpdateGoErstattungMap @fachgebietNr varchar(2), @rKasse int, @goPrefix varchar(1), @gozGoae varchar(6), @mapKatalog int

AS
begin
declare @oid int

set @rkasse = dbo.fn_kasseGetOid()

set @oid = (select dbo.fn_goErstattungMapGetOid(@fachgebietNr, @rKasse, @goPrefix, @gozGoae, @mapKatalog))
if (@oid is null) 
	insert into GO_ERSTATTUNG_MAP
		(OID, VERSION, N_AEND_DATUM, AEND_USER, R_FACHGEBIET, R_GO_POSITION, MAP_KATALOG 
	)
	values (
		dbo.fn_goErstattungMapNextOid(), 0, dbo.fn_datetimeToInt(CURRENT_TIMESTAMP), 'service', dbo.fn_fachgebietGetOid(@fachgebietNr), dbo.fn_goPositionGetOid(@rKasse, @goPrefix, @gozGoae),@mapKatalog
	)
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_mapVersionGetOid')
	DROP FUNCTION dbo.fn_mapVersionGetOid
GO
CREATE function dbo.fn_mapVersionGetOid(@fachgebietNr varchar(2), @rKasse int, @goPrefix varchar(1), @gozGoae varchar(6), @mapKatalog int, @nGueltigAb decimal(12,0))
returns int
as
begin
declare @oid int
set @oid = (
	select (max(OID)) 
	from MAP_VERSION A
	where A.R_GO_ERSTATTUNG_MAP = dbo.fn_goErstattungMapGetOid(@fachgebietNr, @rKasse, @goPrefix, @gozGoae, @mapKatalog)
	and dbo.fn_intToDate(A.N_GUELTIG_AB) = dbo.fn_intToDate(@nGueltigAb)
)
return @oid
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_mapVersionNextOid')
	DROP FUNCTION dbo.fn_mapVersionNextOid
GO
create function fn_mapVersionNextOid()
returns int
as
begin
declare @oid int
set @oid = ( select max(OID) from MAP_VERSION )
	
if(@oid IS NULL)
begin
	set @oid = 0
end
return(@oid + 1)	
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'pr_insertOrUpdateMapVersion')
	DROP PROCEDURE dbo.pr_insertOrUpdateMapVersion
GO
CREATE PROCEDURE dbo.pr_insertOrUpdateMapVersion @fachgebietNr varchar(2), @rKasse int, @goPrefix varchar(1), @gozGoae varchar(6), @mapKatalog int, @nGueltigAb decimal(12,0)

AS
begin
declare @oid int

set @rkasse = dbo.fn_kasseGetOid()

set @oid = (select dbo.fn_mapVersionGetOid(@fachgebietNr, @rKasse, @goPrefix, @gozGoae, @mapKatalog, @nGueltigAb))
if (@oid is null) 
	insert into MAP_VERSION
		(OID, VERSION, N_AEND_DATUM, AEND_USER, R_GO_ERSTATTUNG_MAP, N_GUELTIG_AB 
	)
	values (
		dbo.fn_MapVersionNextOid(), 0, dbo.fn_datetimeToInt(CURRENT_TIMESTAMP), 'service', dbo.fn_goErstattungMapGetOid(@fachgebietNr, @rKasse, @goPrefix, @gozGoae, @mapKatalog), @nGueltigAb
	)
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_mapErstattungMapGetOid')
	DROP FUNCTION dbo.fn_mapErstattungMapGetOid
GO
CREATE function dbo.fn_mapErstattungMapGetOid(@fachgebietNr varchar(2), @rKasse int, @goPrefix varchar(1), @gozGoae varchar(6), @mapKatalog int, @nGueltigAb decimal(12,0), @ebmPrefix varchar(1), @bemabmae varchar(5), @unterposition varchar(4))
returns int
as
begin
declare @oid int
set @oid = (
	select (max(OID)) 
	from MAP_ERSTATTUNG_MAP A
	where A.R_MAP_VERSION = dbo.fn_mapVersionGetOid(@fachgebietNr, @rKasse, @goPrefix, @gozGoae, @mapKatalog, @nGueltigAb)
	and A.R_ERSTATTUNG_POSITION = dbo.fn_erstattungPositionGetOid(@rkasse, @ebmPrefix, @bemabmae, @unterposition)
)
return @oid
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'fn_mapErstattungMapNextOid')
	DROP FUNCTION dbo.fn_mapErstattungMapNextOid
GO
create function fn_mapErstattungMapNextOid()
returns int
as
begin
declare @oid int
set @oid = ( select max(OID) from MAP_ERSTATTUNG_MAP )
	
if(@oid IS NULL)
begin
	set @oid = 0
end
return(@oid + 1)	
end
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'pr_insertOrUpdateMapErstattungMap')
	DROP PROCEDURE dbo.pr_insertOrUpdateMapErstattungMap
GO
CREATE PROCEDURE dbo.pr_insertOrUpdateMapErstattungMap @fachgebietNr varchar(2), @rKasse int, @goPrefix varchar(1), @gozGoae varchar(6), @mapKatalog int, @nGueltigAb decimal(12,0), @ebmPrefix varchar(1), @bemabmae varchar(5), @unterposition varchar(4)

AS
begin
declare @oid int

set @rkasse = dbo.fn_kasseGetOid()

set @oid = (select dbo.fn_mapErstattungMapGetOid(@fachgebietNr, @rKasse, @goPrefix, @gozGoae, @mapKatalog, @nGueltigAb, @ebmPrefix, @bemabmae, @unterposition))
if (@oid is null) 
	insert into MAP_ERSTATTUNG_MAP
		(OID, VERSION, N_AEND_DATUM, AEND_USER, R_MAP_VERSION, R_ERSTATTUNG_POSITION 
	)
	values (
		dbo.fn_MapErstattungMapNextOid(), 0, dbo.fn_datetimeToInt(CURRENT_TIMESTAMP), 'service', dbo.fn_mapVersionGetOid(@fachgebietNr, @rKasse, @goPrefix, @gozGoae, @mapKatalog, @nGueltigAb), dbo.fn_erstattungPositionGetOid(@rkasse, @ebmPrefix, @bemabmae, @unterposition)
	)
end
GO