/*
 * Copyright (C) 2025 ctecinf.com.br
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 *
 * @author Cássio Conceição
 * @since 04/05/2025
 * @version 2505
 * @see http://ctecinf.com.br/
 *
 */

package br.inf.portalfiscal.nfe;

/**
 * Tipo CBS IBS Completo
 */
public class TCIBS extends SimpleXML {

    @SimpleXML.Name("vBC")
    protected String vBC;

    @SimpleXML.Name("gIBSUF")
    protected GIBSUF gIBSUF;

    @SimpleXML.Name("gIBSMun")
    protected GIBSMun gIBSMun;

    @SimpleXML.Name("gCBS")
    protected GCBS gCBS;

    @SimpleXML.Name("gTribRegular")
    protected TTribRegular gTribRegular;

    @SimpleXML.Name("gIBSCredPres")
    protected TCredPres gIBSCredPres;

    @SimpleXML.Name("gCBSCredPres")
    protected TCredPres gCBSCredPres;

    public TCIBS() {
        super("cIBS", "xmlns=http://www.portalfiscal.inf.br/nfe");
    }

    /**
     * Valor do BC
     *
     * @return String
     */
    public final String getVBC() {
        return this.vBC;
    }

    /**
     * Valor do BC
     *
     * @param vBC
     */
    public final void setVBC(String vBC) {
        this.vBC = vBC;
    }

    /**
     * Grupo de informações do IBS na UF
     *
     * @return GIBSUF
     */
    public final GIBSUF getGIBSUF() {
        return this.gIBSUF;
    }

    /**
     * Grupo de informações do IBS na UF
     *
     * @param gIBSUF
     */
    public final void setGIBSUF(GIBSUF gIBSUF) {
        this.gIBSUF = gIBSUF;
    }

    /**
     * Grupo de Informações do IBS no Município
     *
     * @return GIBSMun
     */
    public final GIBSMun getGIBSMun() {
        return this.gIBSMun;
    }

    /**
     * Grupo de Informações do IBS no Município
     *
     * @param gIBSMun
     */
    public final void setGIBSMun(GIBSMun gIBSMun) {
        this.gIBSMun = gIBSMun;
    }

    /**
     * Grupo de Tributação da CBS
     *
     * @return GCBS
     */
    public final GCBS getGCBS() {
        return this.gCBS;
    }

    /**
     * Grupo de Tributação da CBS
     *
     * @param gCBS
     */
    public final void setGCBS(GCBS gCBS) {
        this.gCBS = gCBS;
    }

    /**
     * Grupo de informações da Tributação Regular. Informar como seria a tributação caso não cumprida a condição resolutória/suspensiva. Exemplo 1: Art. 442, §4. Operações com ZFM e ALC. Exemplo 2: Operações com suspensão do tributo.
     *
     * @return TTribRegular
     */
    public final TTribRegular getGTribRegular() {
        return this.gTribRegular;
    }

    /**
     * Grupo de informações da Tributação Regular. Informar como seria a tributação caso não cumprida a condição resolutória/suspensiva. Exemplo 1: Art. 442, §4. Operações com ZFM e ALC. Exemplo 2: Operações com suspensão do tributo.
     *
     * @param gTribRegular
     */
    public final void setGTribRegular(TTribRegular gTribRegular) {
        this.gTribRegular = gTribRegular;
    }

    /**
     * Grupo de Informações do Crédito Presumido referente ao IBS, quando aproveitado pelo emitente do documento.
     *
     * @return TCredPres
     */
    public final TCredPres getGIBSCredPres() {
        return this.gIBSCredPres;
    }

    /**
     * Grupo de Informações do Crédito Presumido referente ao IBS, quando aproveitado pelo emitente do documento.
     *
     * @param gIBSCredPres
     */
    public final void setGIBSCredPres(TCredPres gIBSCredPres) {
        this.gIBSCredPres = gIBSCredPres;
    }

    /**
     * Grupo de Informações do Crédito Presumido referente a CBS, quando aproveitado pelo emitente do documento.
     *
     * @return TCredPres
     */
    public final TCredPres getGCBSCredPres() {
        return this.gCBSCredPres;
    }

    /**
     * Grupo de Informações do Crédito Presumido referente a CBS, quando aproveitado pelo emitente do documento.
     *
     * @param gCBSCredPres
     */
    public final void setGCBSCredPres(TCredPres gCBSCredPres) {
        this.gCBSCredPres = gCBSCredPres;
    }

    /**
     * Grupo de informações do IBS na UF
     */
    public static class GIBSUF extends SimpleXML {

        @SimpleXML.Name("pIBSUF")
        protected String pIBSUF;

        @SimpleXML.Name("gDif")
        protected TDifIBS gDif;

        @SimpleXML.Name("gDevTrib")
        protected TDevTrib gDevTrib;

        @SimpleXML.Name("gRed")
        protected TRed gRed;

        @SimpleXML.Name("vIBSUF")
        protected String vIBSUF;

        public GIBSUF() {
            super("gIBSUF");
        }

        /**
         * Aliquota do IBS de competência das UF
         *
         * @return String
         */
        public final String getPIBSUF() {
            return this.pIBSUF;
        }

        /**
         * Aliquota do IBS de competência das UF
         *
         * @param pIBSUF
         */
        public final void setPIBSUF(String pIBSUF) {
            this.pIBSUF = pIBSUF;
        }

        /**
         * Grupo de campos do Diferimento
         *
         * @return TDifIBS
         */
        public final TDifIBS getGDif() {
            return this.gDif;
        }

        /**
         * Grupo de campos do Diferimento
         *
         * @param gDif
         */
        public final void setGDif(TDifIBS gDif) {
            this.gDif = gDif;
        }

        /**
         * Grupo de Informações da devolução de tributos
         *
         * @return TDevTrib
         */
        public final TDevTrib getGDevTrib() {
            return this.gDevTrib;
        }

        /**
         * Grupo de Informações da devolução de tributos
         *
         * @param gDevTrib
         */
        public final void setGDevTrib(TDevTrib gDevTrib) {
            this.gDevTrib = gDevTrib;
        }

        /**
         * Grupo de campos da redução de aliquota
         *
         * @return TRed
         */
        public final TRed getGRed() {
            return this.gRed;
        }

        /**
         * Grupo de campos da redução de aliquota
         *
         * @param gRed
         */
        public final void setGRed(TRed gRed) {
            this.gRed = gRed;
        }

        /**
         * Valor do IBS de competência das UF
         *
         * @return String
         */
        public final String getVIBSUF() {
            return this.vIBSUF;
        }

        /**
         * Valor do IBS de competência das UF
         *
         * @param vIBSUF
         */
        public final void setVIBSUF(String vIBSUF) {
            this.vIBSUF = vIBSUF;
        }

    }

    /**
     * Grupo de Informações do IBS no Município
     */
    public static class GIBSMun extends SimpleXML {

        @SimpleXML.Name("pIBSMun")
        protected String pIBSMun;

        @SimpleXML.Name("gDif")
        protected TDifCBS gDif;

        @SimpleXML.Name("gDevTrib")
        protected TDevTrib gDevTrib;

        @SimpleXML.Name("gRed")
        protected TRed gRed;

        @SimpleXML.Name("vIBSMun")
        protected String vIBSMun;

        public GIBSMun() {
            super("gIBSMun");
        }

        /**
         * Aliquota do IBS Municipal
         *
         * @return String
         */
        public final String getPIBSMun() {
            return this.pIBSMun;
        }

        /**
         * Aliquota do IBS Municipal
         *
         * @param pIBSMun
         */
        public final void setPIBSMun(String pIBSMun) {
            this.pIBSMun = pIBSMun;
        }

        /**
         * Grupo de campos do Diferimento
         *
         * @return TDifCBS
         */
        public final TDifCBS getGDif() {
            return this.gDif;
        }

        /**
         * Grupo de campos do Diferimento
         *
         * @param gDif
         */
        public final void setGDif(TDifCBS gDif) {
            this.gDif = gDif;
        }

        /**
         * Grupo de Informações da devolução de tributos
         *
         * @return TDevTrib
         */
        public final TDevTrib getGDevTrib() {
            return this.gDevTrib;
        }

        /**
         * Grupo de Informações da devolução de tributos
         *
         * @param gDevTrib
         */
        public final void setGDevTrib(TDevTrib gDevTrib) {
            this.gDevTrib = gDevTrib;
        }

        /**
         * Grupo de campos da redução de aliquota
         *
         * @return TRed
         */
        public final TRed getGRed() {
            return this.gRed;
        }

        /**
         * Grupo de campos da redução de aliquota
         *
         * @param gRed
         */
        public final void setGRed(TRed gRed) {
            this.gRed = gRed;
        }

        /**
         * Valor do IBS Municipal
         *
         * @return String
         */
        public final String getVIBSMun() {
            return this.vIBSMun;
        }

        /**
         * Valor do IBS Municipal
         *
         * @param vIBSMun
         */
        public final void setVIBSMun(String vIBSMun) {
            this.vIBSMun = vIBSMun;
        }

    }

    /**
     * Grupo de Tributação da CBS
     */
    public static class GCBS extends SimpleXML {

        @SimpleXML.Name("pCBS")
        protected String pCBS;

        @SimpleXML.Name("gDif")
        protected TDifCBS gDif;

        @SimpleXML.Name("gDevTrib")
        protected TDevTrib gDevTrib;

        @SimpleXML.Name("gRed")
        protected TRed gRed;

        @SimpleXML.Name("vCBS")
        protected String vCBS;

        public GCBS() {
            super("gCBS");
        }

        /**
         * Aliquota da CBS
         *
         * @return String
         */
        public final String getPCBS() {
            return this.pCBS;
        }

        /**
         * Aliquota da CBS
         *
         * @param pCBS
         */
        public final void setPCBS(String pCBS) {
            this.pCBS = pCBS;
        }

        /**
         * Grupo de campos do Diferimento
         *
         * @return TDifCBS
         */
        public final TDifCBS getGDif() {
            return this.gDif;
        }

        /**
         * Grupo de campos do Diferimento
         *
         * @param gDif
         */
        public final void setGDif(TDifCBS gDif) {
            this.gDif = gDif;
        }

        /**
         * Grupo de Informações da devolução de tributos
         *
         * @return TDevTrib
         */
        public final TDevTrib getGDevTrib() {
            return this.gDevTrib;
        }

        /**
         * Grupo de Informações da devolução de tributos
         *
         * @param gDevTrib
         */
        public final void setGDevTrib(TDevTrib gDevTrib) {
            this.gDevTrib = gDevTrib;
        }

        /**
         * Grupo de campos da redução de aliquota
         *
         * @return TRed
         */
        public final TRed getGRed() {
            return this.gRed;
        }

        /**
         * Grupo de campos da redução de aliquota
         *
         * @param gRed
         */
        public final void setGRed(TRed gRed) {
            this.gRed = gRed;
        }

        /**
         * Valor da CBS
         *
         * @return String
         */
        public final String getVCBS() {
            return this.vCBS;
        }

        /**
         * Valor da CBS
         *
         * @param vCBS
         */
        public final void setVCBS(String vCBS) {
            this.vCBS = vCBS;
        }

    }

}