001/* Copyright (C) 2014 konik.io
002 *
003 * This file is part of the Konik library.
004 *
005 * The Konik library is free software: you can redistribute it and/or modify
006 * it under the terms of the GNU Affero General Public License as
007 * published by the Free Software Foundation, either version 3 of the
008 * License, or (at your option) any later version.
009 *
010 * The Konik library is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
013 * GNU Affero General Public License for more details.
014 *
015 * You should have received a copy of the GNU Affero General Public License
016 * along with the Konik library. If not, see <http://www.gnu.org/licenses/>.
017 */
018package io.konik.zugferd.entity;
019
020import javax.xml.bind.annotation.XmlTransient;
021import javax.xml.bind.annotation.XmlType;
022import java.io.Serializable;
023import java.util.List;
024
025/**
026 * = The Trade Settlement
027 * 
028 * Contains payment related information.
029 * 
030 * @param <T> Tax
031 * @param <M> MonetarySummation
032 */
033@XmlTransient
034@XmlType(name = "SupplyChainTradeSettlementType")
035public interface CommonSettlement<T extends Tax, M extends CommonMonetarySummation> extends Serializable {
036
037   /**
038    * Gets the billing specified period.
039    * 
040    * @return the billing specified period
041    */
042   Period getBillingPeriod();
043
044   /**
045    * Sets the billing specified period.
046    * 
047    *
048    * @param billingPeriod the new billing specified period
049    * @return the supply chain trade settlement
050    */
051   CommonSettlement<T, M> setBillingPeriod(Period billingPeriod);
052
053   /**
054    * Gets the applicable trade tax.
055    *
056    * @return the applicable trade tax
057    */
058   List<T> getTradeTax();
059
060   /**
061    * Adds a trade tax.
062    * 
063    * @param additionalTradeTax
064    * @return the trade settlement
065    */
066   CommonSettlement<T, M> addTradeTax(T additionalTradeTax);
067
068   /**
069    * Gets the trade settlement monetary summation.
070    * 
071    * @return the specified trade settlement monetary summation
072    */
073   M getMonetarySummation();
074
075   /**
076    * Sets the trade settlement monetary summation.
077    * 
078    * @param monetarySummation the new monetary summation
079    * @return the supply chain trade settlement
080    */
081   CommonSettlement<T, M> setMonetarySummation(M monetarySummation);
082
083}