/*******************************************************************************
 * Copyright (c) 2006-2009, G. Weirich and Elexis
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    G. Weirich - initial implementation
 *    
 *******************************************************************************/
package ch.elexis.core.data.interfaces;

import ch.elexis.core.jdt.Nullable;
import ch.elexis.data.Konsultation;
import ch.elexis.data.Verrechnet;
import ch.rgw.tools.Result;

/**
 * Ein Optifier ist ein Optimizer und Verifier für Code-Systeme
 * 
 * @author gerry
 * 
 */
public interface IOptifier {
	/**
	 * Eine Konsultation optifizieren
	 */
	public Result<Object> optify(Konsultation kons);
	
	/**
	 * Eine Leistung einer Konsultation hinzufügen; die anderen Leistungen der Kons ggf. anpassen
	 * 
	 * @param code
	 *            der hinzuzufügende code
	 * @param kons
	 *            die Konsultation
	 * @return Result mit der möglicherweise veränderten Liste
	 */
	public ch.rgw.tools.Result<IVerrechenbar> add(IVerrechenbar code, Konsultation kons);
	
	/**
	 * Eine Leistung aus einer Konsultation entfernen; die Liste ggf. anpassen
	 * 
	 * @param code
	 *            der zu enfternende code
	 * @param kons
	 *            die KOnsultation
	 * @return Result mit der möglicherweise veränderten Liste
	 */
	public Result<Verrechnet> remove(Verrechnet code, Konsultation kons);
	
	/**
	 * @return the {@link Verrechnet} that may have been created during
	 *         {@link IOptifier#add(IVerrechenbar, Konsultation)}
	 * @since 3.1.0
	 */
	public @Nullable Verrechnet getCreatedVerrechnet();
	
}
@@ -1823,9 +1823,525 @@
 et();%0A%09%0A
+%09/**%0A%09 * Add an object to the context of the %7B@link IOptifier%7D implementation. If a object for the%0A%09 * provided key already exists, the value is replaced.%0A%09 * %0A%09 * @param key%0A%09 * @param value%0A%09 */%0A%09default void putContext(String key, Object value)%7B%0A%09%09// default do nothing implement in subclass%0A%09%7D%0A%09%0A%09/**%0A%09 * Add an implementation specific context object. If a object for the provided key already%0A%09 * exists, the value is replaced.%0A%09 */%0A%09default void clearContext()%7B%0A%09%09// default do nothing implement in subclass%0A%09%7D%0A
 %7D

add context methods to IOptifier interface