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.util.List;
021
022import javax.xml.bind.annotation.XmlTransient;
023import javax.xml.bind.annotation.XmlType;
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 CommonTax, M extends CommonMonetarySummation> {
036
037   /**
038    * Gets the billing specified period.
039    * 
040    * Profile:: COMFORT
041    *
042    * @return the billing specified period
043    */
044   Period getBillingPeriod();
045
046   /**
047    * Sets the billing specified period.
048    * 
049    * Profile:: COMFORT
050    * 
051    *
052    * @param billingPeriod the new billing specified period
053    * @return the supply chain trade settlement
054    */
055   CommonSettlement<T, M> setBillingPeriod(Period billingPeriod);
056
057   /**
058    * Gets the applicable trade tax.
059    *
060    * @return the applicable trade tax
061    */
062   List<T> getTradeTax();
063
064   /**
065    * Adds a trade tax.
066    * 
067    * @param additionalTradeTax
068    * @return the trade settlement
069    */
070   CommonSettlement<T, M> addTradeTax(T additionalTradeTax);
071
072   /**
073    * Gets the trade settlement monetary summation.
074    * 
075    * Profile:: BASIC
076    *
077    * @return the specified trade settlement monetary summation
078    */
079   M getMonetarySummation();
080
081   /**
082    * Sets the trade settlement monetary summation.
083    * 
084    * Profile:: BASIC
085    *
086    * @param monetarySummation the new monetary summation
087    * @return the supply chain trade settlement
088    */
089   CommonSettlement<T, M> setMonetarySummation(M monetarySummation);
090
091}