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 java.io.Serializable;
021import java.util.List;
022
023import javax.xml.bind.annotation.XmlTransient;
024import javax.xml.bind.annotation.XmlType;
025
026/**
027 * = The Trade Settlement
028 * 
029 * Contains payment related information.
030 * 
031 * @param <T> Tax
032 * @param <M> MonetarySummation
033 */
034@XmlTransient
035@XmlType(name = "SupplyChainTradeSettlementType")
036public interface CommonSettlement<T extends Tax, M extends CommonMonetarySummation> extends Serializable {
037
038   /**
039    * Gets the billing specified period.
040    * 
041    * @return the billing specified period
042    */
043   Period getBillingPeriod();
044
045   /**
046    * Sets the billing specified period.
047    * 
048    *
049    * @param billingPeriod the new billing specified period
050    * @return the supply chain trade settlement
051    */
052   CommonSettlement<T, M> setBillingPeriod(Period billingPeriod);
053
054   /**
055    * Gets the applicable trade tax.
056    *
057    * @return the applicable trade tax
058    */
059   List<T> getTradeTax();
060
061   /**
062    * Adds a trade tax.
063    * 
064    * @param additionalTradeTax
065    * @return the trade settlement
066    */
067   CommonSettlement<T, M> addTradeTax(T additionalTradeTax);
068
069   /**
070    * Gets the trade settlement monetary summation.
071    * 
072    * @return the specified trade settlement monetary summation
073    */
074   M getMonetarySummation();
075
076   /**
077    * Sets the trade settlement monetary summation.
078    * 
079    * @param monetarySummation the new monetary summation
080    * @return the supply chain trade settlement
081    */
082   CommonSettlement<T, M> setMonetarySummation(M monetarySummation);
083
084}