Contabilidad.javaToXML.java Source code

Java tutorial

Introduction

Here is the source code for Contabilidad.javaToXML.java

Source

package Contabilidad;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import mysuite.TComprobanteEx;
import mysuite.TFactDocMX;
import mysuite.TFactDocMX.Cancelaciones;
import mysuite.TFactDocMX.Conceptos;
import mysuite.TFactDocMX.Emisor;
import mysuite.TFactDocMX.Identificacion;
import mysuite.TFactDocMX.Origen;
import mysuite.TFactDocMX.Receptor;
import mysuite.TFactDocMX.Totales;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.Namespace;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author salvador
 */
public class javaToXML {
    private Document xml = new Document();
    public String error = "";
    private Element root;
    private Element informacionaduanera;
    private Element compro;
    private String PREFIX = "fx", PREFIX_URI = "http://www.fact.com.mx/schema/fx";
    private String COMPROBANTE_SCHEMA_XSD = "http://www.fact.com.mx/schema/fx http://www.mysuitemex.com/fact/schema/fx_2010_d.xsd";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:Ss");

    public void generaRaiz(TFactDocMX datos) {
        root = new Element("FactDocMX", PREFIX, PREFIX_URI);
        Namespace namespace = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
        root.setAttribute("schemaLocation", COMPROBANTE_SCHEMA_XSD, namespace);
        root.addNamespaceDeclaration(namespace);
        root.addContent(new Element("Version", PREFIX, PREFIX_URI).setText(datos.getVersion().toString()));
        generaIdentificacion(datos.getIdentificacion());
        generarCancelaciones(datos.getCancelaciones());
        //Asignacion (Solo para algunas implementaciones in-house con cfdv2.)
        generarOrigen(datos.getOrigen());
        //generarProcesamiento(datos.getProcesamiento());
        generarEmisor(datos.getEmisor());
        generarReceptor(datos.getReceptor());
        generarConceptos(datos.getConceptos());
        generarTotales(datos.getTotales());
        //Complementos
        //Divisas
        //Donatarias
        //Leyendas LeyendasFiscales
        //Nomina
        //PagoEnEspecie
        //Aerolineas
        //ValesDeDespensa 
        //ConsumoDeCombustibles
        //EstadoDeCuentaCombustible
        //NotariosPublicos
        //VehiculoUsado
        generaComprobanteEx(datos.getComprobanteEx());
        getXml().setRootElement(root);
    }

    /**
     * Genera el Nodo de Notificacion del XML y lo agrega a el nodo root
     * @param identif Informacin de Itenfificacion contenida en la clase TFactDocMX
     */
    public void generaIdentificacion(Identificacion identif) {
        Element identificacion = new Element("Identificacion", PREFIX, PREFIX_URI);
        identificacion.addContent(
                new Element("CdgPaisEmisor", PREFIX, PREFIX_URI).setText(identif.getCdgPaisEmisor().value()));
        identificacion.addContent(new Element("TipoDeComprobante", PREFIX, PREFIX_URI)
                .setText(identif.getTipoDeComprobante().value()));
        identificacion.addContent(new Element("RFCEmisor", PREFIX, PREFIX_URI).setText(identif.getRFCEmisor()));
        identificacion.addContent(
                new Element("RazonSocialEmisor", PREFIX, PREFIX_URI).setText(identif.getRazonSocialEmisor()));
        identificacion.addContent(new Element("Usuario", PREFIX, PREFIX_URI).setText(identif.getUsuario()));
        if (identif.getNumeroInterno() != null)
            identificacion.addContent(
                    new Element("NumeroInterno", PREFIX, PREFIX_URI).setText(identif.getNumeroInterno()));
        if (identif.getAsignacionSolicitada() != null) {
            Element AsignacionSolicitada = new Element("AsignacionSolicitada", PREFIX, PREFIX_URI);
            if (identif.getAsignacionSolicitada().getSerie().compareTo("") != 0)
                AsignacionSolicitada.addContent(new Element("Serie", PREFIX, PREFIX_URI)
                        .setText(identif.getAsignacionSolicitada().getSerie()));
            if (identif.getAsignacionSolicitada().getFolio().compareTo("") != 0)
                AsignacionSolicitada.addContent(new Element("Folio", PREFIX, PREFIX_URI)
                        .setText(identif.getAsignacionSolicitada().getFolio()));
            if (identif.getAsignacionSolicitada().getTiempoDeEmision() != null)
                AsignacionSolicitada
                        .addContent(new Element("TiempoDeEmision", PREFIX, PREFIX_URI).setText(sdf.format(identif
                                .getAsignacionSolicitada().getTiempoDeEmision().toGregorianCalendar().getTime())));
            identificacion.addContent(AsignacionSolicitada);
        }
        identificacion.addContent(
                new Element("LugarExpedicion", PREFIX, PREFIX_URI).setText(identif.getLugarExpedicion()));
        if (identif.getNumCtaPago() != null)
            identificacion.addContent(
                    new Element("NumCtaPago", PREFIX, PREFIX_URI).setText(identif.getLugarExpedicion()));
        if (identif.getTotalDeParcialidades() != null) {
            if (identif.getTotalDeParcialidades().getFolioFiscalOrigUuid() != null)
                identificacion.addContent(new Element("FolioFiscalOrigUuid", PREFIX, PREFIX_URI)
                        .setText(identif.getTotalDeParcialidades().getFolioFiscalOrigUuid()));
            else
                identificacion.addContent(new Element("FolioFiscalOrigNum", PREFIX, PREFIX_URI)
                        .setText(identif.getTotalDeParcialidades().getFolioFiscalOrigNum().toString()));
            if (identif.getTotalDeParcialidades().getSerieFolioFiscalOrig() != null)
                identificacion.addContent(new Element("SerieFolioFiscalOrig", PREFIX, PREFIX_URI)
                        .setText(identif.getTotalDeParcialidades().getFolioFiscalOrigNum().toString()));
            identificacion.addContent(
                    new Element("FechaFolioFiscalOrig", PREFIX, PREFIX_URI).setText(this.sdf.format(identif
                            .getTotalDeParcialidades().getFechaFolioFiscalOrig().toGregorianCalendar().getTime())));
            identificacion.addContent(new Element("MontoFolioFiscalOrig", PREFIX, PREFIX_URI)
                    .setText(identif.getTotalDeParcialidades().getMontoFolioFiscalOrig().getValue().toString()));
        }
        //CadenaOriginal
        root.addContent(identificacion);
    }

    /**
     * Genera el Nodo de Cancelaciones del XML y lo agrega a el nodo root
     * @param cancel Informacin de Cancelacioens contenida en la clase TFactDocMX
     */
    public void generarCancelaciones(Cancelaciones cancel) {
        if (cancel != null) {
            Element cancelaciones = new Element("Cancelaciones", PREFIX, PREFIX_URI);
            for (int x = 0; x < cancel.getCancelaYSustituye().size(); x++) {
                Element CancelaHijos = new Element("CancelaYSustituye", PREFIX, PREFIX_URI);
                CancelaHijos.addContent(new Element("Numero", PREFIX, PREFIX_URI)
                        .setText(cancel.getCancelaYSustituye().get(x).getNumero()));
                if (cancel.getCancelaYSustituye().get(x).getFecha() != null)
                    CancelaHijos.addContent(new Element("Fecha", PREFIX, PREFIX_URI).setText(this.sdf.format(
                            cancel.getCancelaYSustituye().get(x).getFecha().toGregorianCalendar().getTime())));
                if (cancel.getCancelaYSustituye().get(x).getTipoCancelacion() != null)
                    CancelaHijos.addContent(new Element("TipoCancelacion", PREFIX, PREFIX_URI)
                            .setText(cancel.getCancelaYSustituye().get(x).getTipoCancelacion()));
                if (cancel.getCancelaYSustituye().get(x).getConceptoCancelacion() != null)
                    CancelaHijos.addContent(new Element("ConceptoCancelacion", PREFIX, PREFIX_URI)
                            .setText(cancel.getCancelaYSustituye().get(x).getConceptoCancelacion()));
                cancelaciones.addContent(CancelaHijos);
            }
            root.addContent(cancelaciones);
        }
    }

    /**
     * Genera el Nodo de Origen del XML y lo agrega a el nodo root
     * @param ori Informacin de Origen contenida en la clase TFactDocMX
     */
    public void generarOrigen(Origen ori) {
        if (ori != null) {
            Element origen = new Element("Origen", PREFIX, PREFIX_URI);
            if (ori.getArea() != null)
                origen.addContent(new Element("Area", PREFIX, PREFIX_URI).setText(ori.getArea()));
            if (ori.getModulo() != null)
                origen.addContent(new Element("Modulo", PREFIX, PREFIX_URI).setText(ori.getModulo()));
            root.addContent(origen);
        }
    }

    /**
     * Genera el Nodo de Procesamiento del XML y lo agrega a el nodo root
     * @param directorios Informacin de Directorios contenida en la clase TFactDocMX
     */
    public void generarProcesamiento(mysuite.TDictionaries directorios) {
        Element procesamiento = new Element("Procesamiento", PREFIX, PREFIX_URI);
        for (int a = 0; a < directorios.getDictionary().size(); a++) {
            Element dis = new Element("Dictionary", PREFIX, PREFIX_URI);
            dis.setAttribute("name", directorios.getDictionary().get(a).getName());
            for (int x = 0; x < directorios.getDictionary().size(); x++) {
                Element entrada = new Element("Entry", PREFIX, PREFIX_URI);
                entrada.setAttribute("k", directorios.getDictionary().get(x).getEntry().get(0).getK());
                entrada.setAttribute("v", directorios.getDictionary().get(x).getEntry().get(1).getK());
                dis.addContent(entrada);
            }
            procesamiento.addContent(dis);
        }
        root.addContent(procesamiento);
    }

    /**
     * Genera el Nodo de Emisor del XML y lo agrega a el nodo root
     * @param emisorFactura Informacin de Emisor contenida en la clase TFactDocMX
     */
    public void generarEmisor(Emisor emisorFactura) {
        Element emisor = new Element("Emisor", PREFIX, PREFIX_URI);
        if (emisorFactura.getDomicilioFiscal() != null) {
            Element emisor_domicilio_fiscal = new Element("DomicilioFiscal", PREFIX, PREFIX_URI);
            emisor_domicilio_fiscal.addContent(new Element("Calle", PREFIX, PREFIX_URI)
                    .setText(emisorFactura.getDomicilioFiscal().getCalle()));
            if (emisorFactura.getDomicilioFiscal().getNumeroExterior() != null)
                emisor_domicilio_fiscal.addContent(new Element("NumeroExterior", PREFIX, PREFIX_URI)
                        .setText(emisorFactura.getDomicilioFiscal().getNumeroExterior()));
            if (emisorFactura.getDomicilioFiscal().getNumeroInterior() != null)
                emisor_domicilio_fiscal.addContent(new Element("NumeroInterior", PREFIX, PREFIX_URI)
                        .setText(emisorFactura.getDomicilioFiscal().getNumeroInterior()));
            if (emisorFactura.getDomicilioFiscal().getLocalidad() != null)
                emisor_domicilio_fiscal.addContent(new Element("Localidad", PREFIX, PREFIX_URI)
                        .setText(emisorFactura.getDomicilioFiscal().getLocalidad()));
            if (emisorFactura.getDomicilioFiscal().getReferencia() != null)
                emisor_domicilio_fiscal.addContent(new Element("Referencia", PREFIX, PREFIX_URI)
                        .setText(emisorFactura.getDomicilioFiscal().getReferencia()));
            if (emisorFactura.getDomicilioFiscal().getColonia() != null)
                emisor_domicilio_fiscal.addContent(new Element("Colonia", PREFIX, PREFIX_URI)
                        .setText(emisorFactura.getDomicilioFiscal().getColonia()));
            emisor_domicilio_fiscal.addContent(new Element("Municipio", PREFIX, PREFIX_URI)
                    .setText(emisorFactura.getDomicilioFiscal().getMunicipio()));
            emisor_domicilio_fiscal.addContent(new Element("Estado", PREFIX, PREFIX_URI)
                    .setText(emisorFactura.getDomicilioFiscal().getEstado()));
            emisor_domicilio_fiscal.addContent(
                    new Element("Pais", PREFIX, PREFIX_URI).setText(emisorFactura.getDomicilioFiscal().getPais()));
            emisor_domicilio_fiscal.addContent(new Element("CodigoPostal", PREFIX, PREFIX_URI)
                    .setText(emisorFactura.getDomicilioFiscal().getCodigoPostal()));
            if (emisorFactura.getDomicilioFiscal().getNomContacto() != null)
                emisor_domicilio_fiscal.addContent(new Element("NomContacto", PREFIX, PREFIX_URI)
                        .setText(emisorFactura.getDomicilioFiscal().getNomContacto()));
            if (emisorFactura.getDomicilioFiscal().getTelContacto() != null)
                emisor_domicilio_fiscal.addContent(new Element("TelContacto", PREFIX, PREFIX_URI)
                        .setText(emisorFactura.getDomicilioFiscal().getTelContacto()));
            emisor.addContent(emisor_domicilio_fiscal);
        }
        if (emisorFactura.getDomicilioDeEmision() != null) {
            Element emisor_domicilio_Emision = new Element("DomicilioDeEmision", PREFIX, PREFIX_URI);
            emisor_domicilio_Emision.addContent(new Element("Calle", PREFIX, PREFIX_URI)
                    .setText(emisorFactura.getDomicilioDeEmision().getCalle()));
            if (emisorFactura.getDomicilioDeEmision().getNumeroExterior() != null)
                emisor_domicilio_Emision.addContent(new Element("NumeroExterior", PREFIX, PREFIX_URI)
                        .setText(emisorFactura.getDomicilioDeEmision().getNumeroExterior()));
            if (emisorFactura.getDomicilioDeEmision().getNumeroInterior() != null)
                emisor_domicilio_Emision.addContent(new Element("NumeroInterior", PREFIX, PREFIX_URI)
                        .setText(emisorFactura.getDomicilioDeEmision().getNumeroInterior()));
            if (emisorFactura.getDomicilioDeEmision().getLocalidad() != null)
                emisor_domicilio_Emision.addContent(new Element("Localidad", PREFIX, PREFIX_URI)
                        .setText(emisorFactura.getDomicilioDeEmision().getLocalidad()));
            if (emisorFactura.getDomicilioDeEmision().getReferencia() != null)
                emisor_domicilio_Emision.addContent(new Element("Referencia", PREFIX, PREFIX_URI)
                        .setText(emisorFactura.getDomicilioDeEmision().getReferencia()));
            if (emisorFactura.getDomicilioDeEmision().getColonia() != null)
                emisor_domicilio_Emision.addContent(new Element("Colonia", PREFIX, PREFIX_URI)
                        .setText(emisorFactura.getDomicilioDeEmision().getColonia()));
            emisor_domicilio_Emision.addContent(new Element("Municipio", PREFIX, PREFIX_URI)
                    .setText(emisorFactura.getDomicilioDeEmision().getMunicipio()));
            emisor_domicilio_Emision.addContent(new Element("Estado", PREFIX, PREFIX_URI)
                    .setText(emisorFactura.getDomicilioDeEmision().getEstado()));
            emisor_domicilio_Emision.addContent(new Element("Pais", PREFIX, PREFIX_URI)
                    .setText(emisorFactura.getDomicilioDeEmision().getPais()));
            emisor_domicilio_Emision.addContent(new Element("CodigoPostal", PREFIX, PREFIX_URI)
                    .setText(emisorFactura.getDomicilioDeEmision().getCodigoPostal()));
            if (emisorFactura.getDomicilioDeEmision().getNomContacto() != null)
                emisor_domicilio_Emision.addContent(new Element("NomContacto", PREFIX, PREFIX_URI)
                        .setText(emisorFactura.getDomicilioDeEmision().getNomContacto()));
            if (emisorFactura.getDomicilioDeEmision().getTelContacto() != null)
                emisor_domicilio_Emision.addContent(new Element("TelContacto", PREFIX, PREFIX_URI)
                        .setText(emisorFactura.getDomicilioDeEmision().getTelContacto()));
            emisor.addContent(emisor_domicilio_Emision);
        }
        Element regimenfiscal = new Element("RegimenFiscal", PREFIX, PREFIX_URI);
        for (int x = 0; x < emisorFactura.getRegimenFiscal().getRegimen().size(); x++)
            regimenfiscal.addContent(new Element("Regimen", PREFIX, PREFIX_URI)
                    .setText(emisorFactura.getRegimenFiscal().getRegimen().get(x)));
        emisor.addContent(regimenfiscal);
        root.addContent(emisor);
    }

    /**
     * Genera el Nodo de Receptor del XML y lo agrega a el nodo root
     * @param recep Informacin de Receptor contenida en la clase TFactDocMX
     */
    public void generarReceptor(Receptor recep) {
        Element receptor = new Element("Receptor", PREFIX, PREFIX_URI);
        receptor.addContent(
                new Element("CdgPaisReceptor", PREFIX, PREFIX_URI).setText(recep.getCdgPaisReceptor().value()));
        receptor.addContent(new Element("RFCReceptor", PREFIX, PREFIX_URI).setText(recep.getRFCReceptor()));
        if (recep.getTaxID() != null)
            receptor.addContent(new Element("TaxID", PREFIX, PREFIX_URI).setText(recep.getTaxID()));
        if (recep.getNombreReceptor() != null)
            receptor.addContent(
                    new Element("NombreReceptor", PREFIX, PREFIX_URI).setText(recep.getNombreReceptor()));
        if (recep.getDomicilio() != null) {
            Element domicilio = new Element("Domicilio", PREFIX, PREFIX_URI);
            if (recep.getDomicilio().getDomicilioFiscalMexicano() != null) {
                Element Domiciliofiscalmexicano = new Element("DomicilioFiscalMexicano", PREFIX, PREFIX_URI);
                Domiciliofiscalmexicano.addContent(new Element("Calle", PREFIX, PREFIX_URI)
                        .setText(recep.getDomicilio().getDomicilioFiscalMexicano().getCalle()));
                if (recep.getDomicilio().getDomicilioFiscalMexicano().getNumeroExterior() != null)
                    Domiciliofiscalmexicano.addContent(new Element("NumeroExterior", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getDomicilioFiscalMexicano().getNumeroExterior()));
                if (recep.getDomicilio().getDomicilioFiscalMexicano().getNumeroInterior() != null)
                    Domiciliofiscalmexicano.addContent(new Element("NumeroInterior", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getDomicilioFiscalMexicano().getNumeroInterior()));
                if (recep.getDomicilio().getDomicilioFiscalMexicano().getLocalidad() != null)
                    Domiciliofiscalmexicano.addContent(new Element("Localidad", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getDomicilioFiscalMexicano().getLocalidad()));
                if (recep.getDomicilio().getDomicilioFiscalMexicano().getReferencia() != null)
                    Domiciliofiscalmexicano.addContent(new Element("Referencia", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getDomicilioFiscalMexicano().getReferencia()));
                if (recep.getDomicilio().getDomicilioFiscalMexicano().getColonia() != null)
                    Domiciliofiscalmexicano.addContent(new Element("Colonia", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getDomicilioFiscalMexicano().getColonia()));
                Domiciliofiscalmexicano.addContent(new Element("Municipio", PREFIX, PREFIX_URI)
                        .setText(recep.getDomicilio().getDomicilioFiscalMexicano().getMunicipio()));
                Domiciliofiscalmexicano.addContent(new Element("Estado", PREFIX, PREFIX_URI)
                        .setText(recep.getDomicilio().getDomicilioFiscalMexicano().getEstado()));
                Domiciliofiscalmexicano.addContent(new Element("Pais", PREFIX, PREFIX_URI)
                        .setText(recep.getDomicilio().getDomicilioFiscalMexicano().getPais()));
                Domiciliofiscalmexicano.addContent(new Element("CodigoPostal", PREFIX, PREFIX_URI)
                        .setText(recep.getDomicilio().getDomicilioFiscalMexicano().getCodigoPostal()));
                if (recep.getDomicilio().getDomicilioFiscalMexicano().getNomContacto() != null)
                    Domiciliofiscalmexicano.addContent(new Element("NomContacto", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getDomicilioFiscalMexicano().getNomContacto()));
                if (recep.getDomicilio().getDomicilioFiscalMexicano().getTelContacto() != null)
                    Domiciliofiscalmexicano.addContent(new Element("TelContacto", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getDomicilioFiscalMexicano().getTelContacto()));
                domicilio.addContent(Domiciliofiscalmexicano);
            } else {
                Element otrodomicilio = new Element("OtroDomicilio", PREFIX, PREFIX_URI);
                if (recep.getDomicilio().getOtroDomicilio().getCalle() != null)
                    otrodomicilio.addContent(new Element("Calle", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getOtroDomicilio().getCalle()));
                if (recep.getDomicilio().getOtroDomicilio().getNumeroExterior() != null)
                    otrodomicilio.addContent(new Element("NumeroExterior", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getOtroDomicilio().getNumeroExterior()));
                if (recep.getDomicilio().getOtroDomicilio().getNumeroInterior() != null)
                    otrodomicilio.addContent(new Element("NumeroInterior", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getOtroDomicilio().getNumeroInterior()));
                if (recep.getDomicilio().getOtroDomicilio().getLocalidad() != null)
                    otrodomicilio.addContent(new Element("Localidad", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getOtroDomicilio().getLocalidad()));
                if (recep.getDomicilio().getOtroDomicilio().getReferencia() != null)
                    otrodomicilio.addContent(new Element("Referencia", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getOtroDomicilio().getReferencia()));
                if (recep.getDomicilio().getOtroDomicilio().getColonia() != null)
                    otrodomicilio.addContent(new Element("Colonia", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getOtroDomicilio().getColonia()));
                if (recep.getDomicilio().getOtroDomicilio().getMunicipio() != null)
                    otrodomicilio.addContent(new Element("Municipio", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getOtroDomicilio().getMunicipio()));
                if (recep.getDomicilio().getOtroDomicilio().getEstado() != null)
                    otrodomicilio.addContent(new Element("Estado", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getOtroDomicilio().getEstado()));
                otrodomicilio
                        .addContent(new Element("Pais").setText(recep.getDomicilio().getOtroDomicilio().getPais()));
                if (recep.getDomicilio().getOtroDomicilio().getCodigoPostal() != null)
                    otrodomicilio.addContent(new Element("CodigoPostal", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getOtroDomicilio().getCodigoPostal()));
                if (recep.getDomicilio().getOtroDomicilio().getNomContacto() != null)
                    otrodomicilio.addContent(new Element("NomContacto", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getOtroDomicilio().getNomContacto()));
                if (recep.getDomicilio().getOtroDomicilio().getTelContacto() != null)
                    otrodomicilio.addContent(new Element("TelContacto", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilio().getOtroDomicilio().getTelContacto()));
                domicilio.addContent(otrodomicilio);
            }
            receptor.addContent(domicilio);
        }

        if (recep.getDomicilioDeRecepcion() != null) {
            Element domiciliorecepcion = new Element("DomicilioDeRecepcion");
            if (recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano() != null) {
                Element Domiciliofiscalmexicano1 = new Element("DomicilioFiscalMexicano", PREFIX, PREFIX_URI);
                Domiciliofiscalmexicano1.addContent(new Element("Calle", PREFIX, PREFIX_URI)
                        .setText(recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getCalle()));
                if (recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getNumeroExterior() != null)
                    Domiciliofiscalmexicano1.addContent(new Element("NumeroExterior", PREFIX, PREFIX_URI).setText(
                            recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getNumeroExterior()));
                if (recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getNumeroInterior() != null)
                    Domiciliofiscalmexicano1.addContent(new Element("NumeroInterior", PREFIX, PREFIX_URI).setText(
                            recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getNumeroInterior()));
                if (recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getLocalidad() != null)
                    Domiciliofiscalmexicano1.addContent(new Element("Localidad", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getLocalidad()));
                if (recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getReferencia() != null)
                    Domiciliofiscalmexicano1.addContent(new Element("Referencia", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getReferencia()));
                if (recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getColonia() != null)
                    Domiciliofiscalmexicano1.addContent(new Element("Colonia", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getColonia()));
                Domiciliofiscalmexicano1.addContent(new Element("Municipio", PREFIX, PREFIX_URI)
                        .setText(recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getMunicipio()));
                Domiciliofiscalmexicano1.addContent(new Element("Estado", PREFIX, PREFIX_URI)
                        .setText(recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getEstado()));
                Domiciliofiscalmexicano1.addContent(new Element("Pais", PREFIX, PREFIX_URI)
                        .setText(recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getPais()));
                Domiciliofiscalmexicano1.addContent(new Element("CodigoPostal", PREFIX, PREFIX_URI)
                        .setText(recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getCodigoPostal()));
                if (recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getNomContacto() != null)
                    Domiciliofiscalmexicano1.addContent(new Element("NomContacto", PREFIX, PREFIX_URI).setText(
                            recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getNomContacto()));
                if (recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getTelContacto() != null)
                    Domiciliofiscalmexicano1.addContent(new Element("TelContacto", PREFIX, PREFIX_URI).setText(
                            recep.getDomicilioDeRecepcion().getDomicilioFiscalMexicano().getTelContacto()));
                domiciliorecepcion.addContent(Domiciliofiscalmexicano1);
            } else {
                Element otrodomicilio1 = new Element("OtroDomicilio", PREFIX, PREFIX_URI);
                if (recep.getDomicilioDeRecepcion().getOtroDomicilio().getCalle() != null)
                    otrodomicilio1.addContent(new Element("Calle", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilioDeRecepcion().getOtroDomicilio().getCalle()));
                if (recep.getDomicilioDeRecepcion().getOtroDomicilio().getNumeroExterior() != null)
                    otrodomicilio1.addContent(new Element("NumeroExterior", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilioDeRecepcion().getOtroDomicilio().getNumeroExterior()));
                if (recep.getDomicilioDeRecepcion().getOtroDomicilio().getNumeroInterior() != null)
                    otrodomicilio1.addContent(new Element("NumeroInterior", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilioDeRecepcion().getOtroDomicilio().getNumeroInterior()));
                if (recep.getDomicilioDeRecepcion().getOtroDomicilio().getLocalidad() != null)
                    otrodomicilio1.addContent(new Element("Localidad", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilioDeRecepcion().getOtroDomicilio().getLocalidad()));
                if (recep.getDomicilioDeRecepcion().getOtroDomicilio().getReferencia() != null)
                    otrodomicilio1.addContent(new Element("Referencia", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilioDeRecepcion().getOtroDomicilio().getReferencia()));
                if (recep.getDomicilioDeRecepcion().getOtroDomicilio().getColonia() != null)
                    otrodomicilio1.addContent(new Element("Colonia", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilioDeRecepcion().getOtroDomicilio().getColonia()));
                if (recep.getDomicilioDeRecepcion().getOtroDomicilio().getMunicipio() != null)
                    otrodomicilio1.addContent(new Element("Municipio", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilioDeRecepcion().getOtroDomicilio().getMunicipio()));
                if (recep.getDomicilioDeRecepcion().getOtroDomicilio().getEstado() != null)
                    otrodomicilio1.addContent(new Element("Estado", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilioDeRecepcion().getOtroDomicilio().getEstado()));
                otrodomicilio1.addContent(new Element("Pais", PREFIX, PREFIX_URI)
                        .setText(recep.getDomicilioDeRecepcion().getOtroDomicilio().getPais()));
                if (recep.getDomicilioDeRecepcion().getOtroDomicilio().getCodigoPostal() != null)
                    otrodomicilio1.addContent(new Element("CodigoPostal", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilioDeRecepcion().getOtroDomicilio().getCodigoPostal()));
                if (recep.getDomicilioDeRecepcion().getOtroDomicilio().getNomContacto() != null)
                    otrodomicilio1.addContent(new Element("NomContacto", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilioDeRecepcion().getOtroDomicilio().getNomContacto()));
                if (recep.getDomicilioDeRecepcion().getOtroDomicilio().getTelContacto() != null)
                    otrodomicilio1.addContent(new Element("TelContacto", PREFIX, PREFIX_URI)
                            .setText(recep.getDomicilioDeRecepcion().getOtroDomicilio().getTelContacto()));
                domiciliorecepcion.addContent(otrodomicilio1);
            }
            receptor.addContent(domiciliorecepcion);
        }
        root.addContent(receptor);
    }

    /**
     * Genera el Nodo de Conceptos del XML y lo agrega a el nodo root
     * @param concep Informacin de Conceptos contenida en la clase TFactDocMX
     */
    public void generarConceptos(Conceptos concep) {
        Element conceptos = new Element("Conceptos", PREFIX, PREFIX_URI);
        for (int x = 0; x < concep.getConcepto().size(); x++) {
            Element concepto = new Element("Concepto", PREFIX, PREFIX_URI);
            concepto.addContent(new Element("Cantidad", PREFIX, PREFIX_URI)
                    .setText(concep.getConcepto().get(x).getCantidad().toString()));
            concepto.addContent(new Element("UnidadDeMedida", PREFIX, PREFIX_URI)
                    .setText(concep.getConcepto().get(x).getUnidadDeMedida()));
            if (concep.getConcepto().get(x).getCodigo() != null)
                concepto.addContent(
                        new Element("Codigo", PREFIX, PREFIX_URI).setText(concep.getConcepto().get(x).getCodigo()));
            concepto.addContent(new Element("Descripcion", PREFIX, PREFIX_URI)
                    .setText(concep.getConcepto().get(x).getDescripcion()));
            concepto.addContent(new Element("ValorUnitario", PREFIX, PREFIX_URI)
                    .setText(concep.getConcepto().get(x).getValorUnitario().getValue().toString()));
            concepto.addContent(new Element("Importe", PREFIX, PREFIX_URI)
                    .setText(concep.getConcepto().get(x).getImporte().getValue().toString()));
            if (concep.getConcepto().get(x).getOpciones() != null) {
                Element opciones = new Element("Opciones", PREFIX, PREFIX_URI);
                if (concep.getConcepto().get(x).getOpciones().getDatosDeImportacion() != null) {
                    Element datosdeimportacion = new Element("DatosDeImportacion", PREFIX, PREFIX_URI);
                    for (int y = 0; y < concep.getConcepto().get(x).getOpciones().getDatosDeImportacion()
                            .getInformacionAduanera().size(); y++) {
                        informacionaduanera = new Element("InformacionAduanera", PREFIX, PREFIX_URI);
                        informacionaduanera.addContent(new Element("NumeroDePedimento", PREFIX, PREFIX_URI)
                                .setText(concep.getConcepto().get(x).getOpciones().getDatosDeImportacion()
                                        .getInformacionAduanera().get(y).getNumeroDePedimento()));
                        informacionaduanera.addContent(new Element("FechaDePedimento", PREFIX, PREFIX_URI)
                                .setText(sdf.format(concep.getConcepto().get(x).getOpciones()
                                        .getDatosDeImportacion().getInformacionAduanera().get(y)
                                        .getFechaDePedimento().toGregorianCalendar().getTime())));
                        informacionaduanera.addContent(new Element("NombreDeAduana", PREFIX, PREFIX_URI)
                                .setText(concep.getConcepto().get(x).getOpciones().getDatosDeImportacion()
                                        .getInformacionAduanera().get(y).getNombreDeAduana()));
                        datosdeimportacion.addContent(informacionaduanera);
                    }
                    opciones.addContent(datosdeimportacion);
                }
                if (concep.getConcepto().get(x).getOpciones().getCuentaPredial() != null) {
                    opciones.addContent(new Element("CuentaPredial", PREFIX, PREFIX_URI)
                            .setText(concep.getConcepto().get(x).getOpciones().getCuentaPredial()));
                }
                //ComplementoConcepto

                concepto.addContent(opciones);
            }
            if (concep.getConcepto().get(x).getConceptoEx() != null) {
                Element concepto_ext = new Element("ConceptoEx", PREFIX, PREFIX_URI);
                if (concep.getConcepto().get(x).getConceptoEx().getPrecioCombustibles() != null)
                    concepto_ext.addContent(new Element("PrecioCombustibles", PREFIX, PREFIX_URI).setText(concep
                            .getConcepto().get(x).getConceptoEx().getPrecioCombustibles().getValue().toString()));
                if (concep.getConcepto().get(x).getConceptoEx().getPrecioSugerido() != null)
                    concepto_ext.addContent(new Element("PrecioSugerido", PREFIX, PREFIX_URI).setText(
                            concep.getConcepto().get(x).getConceptoEx().getPrecioSugerido().getValue().toString()));
                if (concep.getConcepto().get(x).getConceptoEx().getPrecioLista() != null)
                    concepto_ext.addContent(new Element("PrecioLista", PREFIX, PREFIX_URI).setText(
                            concep.getConcepto().get(x).getConceptoEx().getPrecioLista().getValue().toString()));
                if (concep.getConcepto().get(x).getConceptoEx().getImporteLista() != null)
                    concepto_ext.addContent(new Element("ImporteLista", PREFIX, PREFIX_URI).setText(
                            concep.getConcepto().get(x).getConceptoEx().getImporteLista().getValue().toString()));

                if (concep.getConcepto().get(x).getConceptoEx().getDescuentosYRecargos() != null) {
                    Element descuentos_o_recargos = new Element("DescuentosYRecargos", PREFIX, PREFIX_URI);
                    for (int a = 0; a < concep.getConcepto().get(x).getConceptoEx().getDescuentosYRecargos()
                            .getDescuentoORecargo().size(); a++) {
                        Element hijoDescuento1 = new Element("DescuentoORecargo", PREFIX, PREFIX_URI);
                        hijoDescuento1.addContent(new Element("Operacion", PREFIX, PREFIX_URI)
                                .setText(concep.getConcepto().get(x).getConceptoEx().getDescuentosYRecargos()
                                        .getDescuentoORecargo().get(a).getOperacion().value()));
                        hijoDescuento1.addContent(new Element("Imputacion", PREFIX, PREFIX_URI)
                                .setText(concep.getConcepto().get(x).getConceptoEx().getDescuentosYRecargos()
                                        .getDescuentoORecargo().get(a).getImputacion().value()));
                        hijoDescuento1.addContent(new Element("Servicio", PREFIX, PREFIX_URI)
                                .setText(concep.getConcepto().get(x).getConceptoEx().getDescuentosYRecargos()
                                        .getDescuentoORecargo().get(a).getServicio().value()));
                        if (concep.getConcepto().get(x).getConceptoEx().getDescuentosYRecargos()
                                .getDescuentoORecargo().get(a).getDescripcion() != null) {
                            hijoDescuento1.addContent(new Element("Descripcion", PREFIX, PREFIX_URI)
                                    .setText(concep.getConcepto().get(x).getConceptoEx().getDescuentosYRecargos()
                                            .getDescuentoORecargo().get(a).getDescripcion()));
                        }
                        hijoDescuento1.addContent(new Element("Base", PREFIX, PREFIX_URI)
                                .setText(concep.getConcepto().get(x).getConceptoEx().getDescuentosYRecargos()
                                        .getDescuentoORecargo().get(a).getBase().getValue().toString()));
                        hijoDescuento1.addContent(new Element("Tasa", PREFIX, PREFIX_URI)
                                .setText(concep.getConcepto().get(x).getConceptoEx().getDescuentosYRecargos()
                                        .getDescuentoORecargo().get(a).getTasa().toString()));
                        hijoDescuento1.addContent(new Element("Monto", PREFIX, PREFIX_URI)
                                .setText(concep.getConcepto().get(x).getConceptoEx().getDescuentosYRecargos()
                                        .getDescuentoORecargo().get(a).getMonto().getValue().toString()));
                        descuentos_o_recargos.addContent(hijoDescuento1);
                    }
                    concepto_ext.addContent(descuentos_o_recargos);
                }
                if (concep.getConcepto().get(x).getConceptoEx().getImpuestos() != null) {
                    Element impuestos = new Element("Impuestos", PREFIX, PREFIX_URI);
                    for (int im = 0; im < concep.getConcepto().get(x).getConceptoEx().getImpuestos().getImpuesto()
                            .size(); im++) {
                        Element impuesto = new Element("Impuesto", PREFIX, PREFIX_URI);
                        impuesto.addContent(new Element("Contexto", PREFIX, PREFIX_URI)
                                .setText(concep.getConcepto().get(x).getConceptoEx().getImpuestos().getImpuesto()
                                        .get(im).getContexto().value()));
                        impuesto.addContent(new Element("Operacion", PREFIX, PREFIX_URI)
                                .setText(concep.getConcepto().get(x).getConceptoEx().getImpuestos().getImpuesto()
                                        .get(im).getOperacion().value()));
                        impuesto.addContent(new Element("Codigo", PREFIX, PREFIX_URI).setText(concep.getConcepto()
                                .get(x).getConceptoEx().getImpuestos().getImpuesto().get(im).getCodigo()));
                        impuesto.addContent(new Element("Base", PREFIX, PREFIX_URI)
                                .setText(concep.getConcepto().get(x).getConceptoEx().getImpuestos().getImpuesto()
                                        .get(im).getBase().getValue().toString()));
                        impuesto.addContent(new Element("Tasa", PREFIX, PREFIX_URI).setText(concep.getConcepto()
                                .get(x).getConceptoEx().getImpuestos().getImpuesto().get(im).getTasa().toString()));
                        impuesto.addContent(new Element("Monto", PREFIX, PREFIX_URI)
                                .setText(concep.getConcepto().get(x).getConceptoEx().getImpuestos().getImpuesto()
                                        .get(im).getMonto().getValue().toString()));
                        impuestos.addContent(impuesto);
                    }
                    concepto_ext.addContent(impuestos);
                }
                if (concep.getConcepto().get(x).getConceptoEx().getImporteTotal() != null) {
                    concepto_ext.addContent(new Element("ImporteTotal", PREFIX, PREFIX_URI).setText(
                            concep.getConcepto().get(x).getConceptoEx().getImporteTotal().getValue().toString()));
                }
                if (concep.getConcepto().get(x).getConceptoEx().getCategoria() != null) {
                    concepto_ext.addContent(new Element("Categoria", PREFIX, PREFIX_URI)
                            .setText(concep.getConcepto().get(x).getConceptoEx().getCategoria()));
                }
                if (concep.getConcepto().get(x).getConceptoEx().getMapfre() != null) {
                    Element map = new Element("Mapfre", PREFIX, PREFIX_URI);
                    map.addContent(new Element("TipoListaDePrecios", PREFIX, PREFIX_URI).setText(
                            concep.getConcepto().get(x).getConceptoEx().getMapfre().getTipoListaDePrecios()));
                    map.addContent(new Element("IndiceListaDePrecios", PREFIX, PREFIX_URI).setText(
                            concep.getConcepto().get(x).getConceptoEx().getMapfre().getIndiceListaDePrecios()));
                    concepto_ext.addContent(map);
                }
                concepto.addContent(concepto_ext);
            }
            conceptos.addContent(concepto);
        }
        root.addContent(conceptos);
    }

    /**
     * Genera el Nodo de Totales del XML y lo agrega a el nodo root
     * @param tot Informacin de Totales contenida en la clase TFactDocMX
     */
    public void generarTotales(Totales tot) {
        Element totales = new Element("Totales", PREFIX, PREFIX_URI);
        totales.addContent(new Element("Moneda", PREFIX, PREFIX_URI).setText(tot.getMoneda().value()));
        totales.addContent(new Element("TipoDeCambioVenta", PREFIX, PREFIX_URI)
                .setText(tot.getTipoDeCambioVenta().toString()));
        totales.addContent(new Element("SubTotalBruto", PREFIX, PREFIX_URI)
                .setText(tot.getSubTotalBruto().getValue().toString()));
        totales.addContent(
                new Element("SubTotal", PREFIX, PREFIX_URI).setText(tot.getSubTotal().getValue().toString()));
        if (tot.getDescuentosYRecargos() != null) {
            if (tot.getDescuentosYRecargos().getDescuentoORecargo().size() > 0) {
                Element descuentosrecargos = new Element("DescuentosYRecargos", PREFIX, PREFIX_URI);
                for (int a = 0; a < tot.getDescuentosYRecargos().getDescuentoORecargo().size(); a++) {
                    Element hijoDescuento = new Element("DescuentoORecargo", PREFIX, PREFIX_URI);
                    hijoDescuento.addContent(new Element("Operacion", PREFIX, PREFIX_URI).setText(
                            tot.getDescuentosYRecargos().getDescuentoORecargo().get(a).getOperacion().value()));
                    hijoDescuento.addContent(new Element("Imputacion", PREFIX, PREFIX_URI).setText(
                            tot.getDescuentosYRecargos().getDescuentoORecargo().get(a).getImputacion().value()));
                    hijoDescuento.addContent(new Element("Servicio", PREFIX, PREFIX_URI).setText(
                            tot.getDescuentosYRecargos().getDescuentoORecargo().get(a).getServicio().value()));
                    if (tot.getDescuentosYRecargos().getDescuentoORecargo().get(a).getDescripcion() != null) {
                        hijoDescuento.addContent(new Element("Descripcion", PREFIX, PREFIX_URI).setText(
                                tot.getDescuentosYRecargos().getDescuentoORecargo().get(a).getDescripcion()));
                    }
                    hijoDescuento
                            .addContent(new Element("Base", PREFIX, PREFIX_URI).setText(tot.getDescuentosYRecargos()
                                    .getDescuentoORecargo().get(a).getBase().getValue().toString()));
                    hijoDescuento.addContent(new Element("Tasa", PREFIX, PREFIX_URI).setText(
                            tot.getDescuentosYRecargos().getDescuentoORecargo().get(a).getTasa().toString()));
                    hijoDescuento.addContent(
                            new Element("Monto", PREFIX, PREFIX_URI).setText(tot.getDescuentosYRecargos()
                                    .getDescuentoORecargo().get(a).getMonto().getValue().toString()));
                    descuentosrecargos.addContent(hijoDescuento);
                }
                totales.addContent(descuentosrecargos);
            }
        }
        Element resumenDeDescuentosRecargos = new Element("ResumenDeDescuentosYRecargos", PREFIX, PREFIX_URI);
        resumenDeDescuentosRecargos.addContent(new Element("TotalDescuentos", PREFIX, PREFIX_URI)
                .setText(tot.getResumenDeDescuentosYRecargos().getTotalDescuentos().getValue().toString()));
        resumenDeDescuentosRecargos.addContent(new Element("TotalRecargos", PREFIX, PREFIX_URI)
                .setText(tot.getResumenDeDescuentosYRecargos().getTotalRecargos().getValue().toString()));
        totales.addContent(resumenDeDescuentosRecargos);
        if (tot.getImpuestos() != null) {
            Element impuestos = new Element("Impuestos", PREFIX, PREFIX_URI);
            for (int im = 0; im < tot.getImpuestos().getImpuesto().size(); im++) {
                Element impuesto = new Element("Impuesto", PREFIX, PREFIX_URI);
                impuesto.addContent(new Element("Contexto", PREFIX, PREFIX_URI)
                        .setText(tot.getImpuestos().getImpuesto().get(im).getContexto().value()));
                impuesto.addContent(new Element("Operacion", PREFIX, PREFIX_URI)
                        .setText(tot.getImpuestos().getImpuesto().get(im).getOperacion().value()));
                impuesto.addContent(new Element("Codigo", PREFIX, PREFIX_URI)
                        .setText(tot.getImpuestos().getImpuesto().get(im).getCodigo()));
                impuesto.addContent(new Element("Base", PREFIX, PREFIX_URI)
                        .setText(tot.getImpuestos().getImpuesto().get(im).getBase().getValue().toString()));
                impuesto.addContent(new Element("Tasa", PREFIX, PREFIX_URI)
                        .setText(tot.getImpuestos().getImpuesto().get(im).getTasa().toString()));
                impuesto.addContent(new Element("Monto", PREFIX, PREFIX_URI)
                        .setText(tot.getImpuestos().getImpuesto().get(im).getMonto().getValue().toString()));
                impuestos.addContent(impuesto);
            }
            totales.addContent(impuestos);
        }
        Element resumenImpuestos = new Element("ResumenDeImpuestos", PREFIX, PREFIX_URI);
        resumenImpuestos.addContent(new Element("TotalTrasladosFederales", PREFIX, PREFIX_URI)
                .setText(tot.getResumenDeImpuestos().getTotalTrasladosFederales().getValue().toString()));
        resumenImpuestos.addContent(new Element("TotalIVATrasladado", PREFIX, PREFIX_URI)
                .setText(tot.getResumenDeImpuestos().getTotalIVATrasladado().getValue().toString()));
        resumenImpuestos.addContent(new Element("TotalIEPSTrasladado", PREFIX, PREFIX_URI)
                .setText(tot.getResumenDeImpuestos().getTotalIEPSTrasladado().getValue().toString()));
        resumenImpuestos.addContent(new Element("TotalRetencionesFederales", PREFIX, PREFIX_URI)
                .setText(tot.getResumenDeImpuestos().getTotalRetencionesFederales().getValue().toString()));
        resumenImpuestos.addContent(new Element("TotalISRRetenido", PREFIX, PREFIX_URI)
                .setText(tot.getResumenDeImpuestos().getTotalISRRetenido().getValue().toString()));
        resumenImpuestos.addContent(new Element("TotalIVARetenido", PREFIX, PREFIX_URI)
                .setText(tot.getResumenDeImpuestos().getTotalIVARetenido().getValue().toString()));
        resumenImpuestos.addContent(new Element("TotalTrasladosLocales", PREFIX, PREFIX_URI)
                .setText(tot.getResumenDeImpuestos().getTotalTrasladosLocales().getValue().toString()));
        resumenImpuestos.addContent(new Element("TotalRetencionesLocales", PREFIX, PREFIX_URI)
                .setText(tot.getResumenDeImpuestos().getTotalRetencionesLocales().getValue().toString()));
        totales.addContent(resumenImpuestos);
        totales.addContent(new Element("Total", PREFIX, PREFIX_URI).setText(tot.getTotal().getValue().toString()));
        totales.addContent(new Element("TotalEnLetra", PREFIX, PREFIX_URI).setText(tot.getTotalEnLetra()));
        totales.addContent(new Element("FormaDePago", PREFIX, PREFIX_URI).setText(tot.getFormaDePago()));
        //resumen Aduanero
        root.addContent(totales);
    }

    public void generaComprobanteEx(TComprobanteEx comprobante) {
        compro = new Element("ComprobanteEx", PREFIX, PREFIX_URI);
        if (comprobante.getDatosDeNegocio() != null) {
            Element datos_negocio = new Element("DatosDeNegocio", PREFIX, PREFIX_URI);
            if (comprobante.getDatosDeNegocio().getDivision() != null)
                datos_negocio.addContent(new Element("Division", PREFIX, PREFIX_URI)
                        .setText(comprobante.getDatosDeNegocio().getDivision()));
            if (comprobante.getDatosDeNegocio().getLineaDeNegocio() != null)
                datos_negocio.addContent(new Element("LineaDeNegocio", PREFIX, PREFIX_URI)
                        .setText(comprobante.getDatosDeNegocio().getLineaDeNegocio()));
            if (comprobante.getDatosDeNegocio().getRegion() != null)
                datos_negocio.addContent(new Element("Region", PREFIX, PREFIX_URI)
                        .setText(comprobante.getDatosDeNegocio().getRegion()));
            if (comprobante.getDatosDeNegocio().getSucursal() != null)
                datos_negocio.addContent(new Element("Sucursal", PREFIX, PREFIX_URI)
                        .setText(comprobante.getDatosDeNegocio().getSucursal()));
            if (comprobante.getDatosDeNegocio().getEjecutivo() != null)
                datos_negocio.addContent(new Element("Ejecutivo", PREFIX, PREFIX_URI)
                        .setText(comprobante.getDatosDeNegocio().getEjecutivo()));
            if (comprobante.getDatosDeNegocio().getElaboradoPor() != null)
                datos_negocio.addContent(new Element("ElaboradoPor", PREFIX, PREFIX_URI)
                        .setText(comprobante.getDatosDeNegocio().getElaboradoPor()));
            if (comprobante.getDatosDeNegocio().getVendedor() != null)
                datos_negocio.addContent(new Element("Vendedor", PREFIX, PREFIX_URI)
                        .setText(comprobante.getDatosDeNegocio().getVendedor()));
            compro.addContent(datos_negocio);
        }
        if (comprobante.getDatosDeIntercambio() != null) {
            Element sucursal = new Element("DatosDeIntercambio", PREFIX, PREFIX_URI);
            sucursal.addContent(new Element("SenderId", PREFIX, PREFIX_URI)
                    .setText(comprobante.getDatosDeIntercambio().getSenderId()));
            sucursal.addContent(new Element("ReceiverId", PREFIX, PREFIX_URI)
                    .setText(comprobante.getDatosDeIntercambio().getReceiverId()));
            compro.addContent(sucursal);
        }
        if (comprobante.getDatosComerciales() != null) {
            Element datos_comerciales = new Element("DatosComerciales", PREFIX, PREFIX_URI);
            if (comprobante.getDatosComerciales().getRelacionComercial() != null)
                datos_comerciales.addContent(new Element("RelacionComercial", PREFIX, PREFIX_URI)
                        .setText(comprobante.getDatosComerciales().getRelacionComercial().value()));
            else {
                if (comprobante.getDatosComerciales().getRfcParaAddendaDeTercero() != null)
                    datos_comerciales.addContent(new Element("RfcParaAddendaDeTercero", PREFIX, PREFIX_URI)
                            .setText(comprobante.getDatosComerciales().getRfcParaAddendaDeTercero()));
            }
            if (comprobante.getDatosComerciales().getNumeroDeProveedor() != null)
                datos_comerciales.addContent(new Element("NumeroDeProveedor", PREFIX, PREFIX_URI)
                        .setText(comprobante.getDatosComerciales().getNumeroDeProveedor()));
            if (comprobante.getDatosComerciales().getSubAddenda1() != null)
                datos_comerciales.addContent(new Element("SubAddenda1", PREFIX, PREFIX_URI)
                        .setText(comprobante.getDatosComerciales().getSubAddenda1()));
            if (comprobante.getDatosComerciales().getSubAddenda2() != null)
                datos_comerciales.addContent(new Element("SubAddenda2", PREFIX, PREFIX_URI)
                        .setText(comprobante.getDatosComerciales().getSubAddenda2()));
            if (comprobante.getDatosComerciales().getOrdenDeCompra() != null) {
                Element orden_de_compra = new Element("OrdenDeCompra", PREFIX, PREFIX_URI);
                if (comprobante.getDatosComerciales().getOrdenDeCompra().getFecha() != null) {
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    orden_de_compra.addContent(new Element("Fecha", PREFIX, PREFIX_URI)
                            .setText(sdf.format(comprobante.getDatosComerciales().getOrdenDeCompra().getFecha()
                                    .toGregorianCalendar().getTime())));
                }
                for (int n = 0; n < comprobante.getDatosComerciales().getOrdenDeCompra().getNumero().size(); n++)
                    if (n < 32)
                        orden_de_compra.addContent(new Element("Numero", PREFIX, PREFIX_URI)
                                .setText(comprobante.getDatosComerciales().getOrdenDeCompra().getNumero().get(n)));
                if (comprobante.getDatosComerciales().getOrdenDeCompra().getTipo() != null)
                    orden_de_compra.addContent(new Element("Tipo", PREFIX, PREFIX_URI)
                            .setText(comprobante.getDatosComerciales().getOrdenDeCompra().getTipo()));
                datos_comerciales.addContent(orden_de_compra);
            }
            if (comprobante.getDatosComerciales().getContrarrecibo() != null) {
                Element comtratr_recibo = new Element("Contrarrecibo", PREFIX, PREFIX_URI);
                if (comprobante.getDatosComerciales().getContrarrecibo().getFecha() != null)
                    comtratr_recibo.addContent(new Element("Fecha", PREFIX, PREFIX_URI).setText(
                            comprobante.getDatosComerciales().getContrarrecibo().getFecha().toXMLFormat()));
                for (int n = 0; n < comprobante.getDatosComerciales().getContrarrecibo().getNumero().size(); n++)
                    if (n < 32)
                        comtratr_recibo.addContent(new Element("Numero", PREFIX, PREFIX_URI)
                                .setText(comprobante.getDatosComerciales().getContrarrecibo().getNumero().get(n)));
                if (comprobante.getDatosComerciales().getContrarrecibo().getTipo() != null)
                    comtratr_recibo.addContent(new Element("Tipo", PREFIX, PREFIX_URI)
                            .setText(comprobante.getDatosComerciales().getContrarrecibo().getTipo()));
                datos_comerciales.addContent(comtratr_recibo);
            }
            if (comprobante.getDatosComerciales().getNumeroDeDepartamento() != null)
                datos_comerciales.addContent(new Element("NumeroDeDepartamento", PREFIX, PREFIX_URI)
                        .setText(comprobante.getDatosComerciales().getNumeroDeDepartamento()));
            if (comprobante.getDatosComerciales().getNumeroDeCliente() != null)
                datos_comerciales.addContent(new Element("NumeroDeCliente", PREFIX, PREFIX_URI)
                        .setText(comprobante.getDatosComerciales().getNumeroDeCliente()));
            if (comprobante.getDatosComerciales().getOrdenDeVenta() != null) {
                Element orden_de_venta = new Element("OrdenDeVenta", PREFIX, PREFIX_URI);
                if (comprobante.getDatosComerciales().getOrdenDeVenta().getFecha() != null)
                    orden_de_venta.addContent(new Element("Fecha", PREFIX, PREFIX_URI)
                            .setText(comprobante.getDatosComerciales().getOrdenDeVenta().getFecha().toXMLFormat()));
                for (int n = 0; n < comprobante.getDatosComerciales().getOrdenDeVenta().getNumero().size(); n++)
                    if (n < 32)
                        orden_de_venta.addContent(new Element("Numero", PREFIX, PREFIX_URI)
                                .setText(comprobante.getDatosComerciales().getOrdenDeVenta().getNumero().get(n)));
                if (comprobante.getDatosComerciales().getOrdenDeVenta().getTipo() != null)
                    orden_de_venta.addContent(new Element("Tipo", PREFIX, PREFIX_URI)
                            .setText(comprobante.getDatosComerciales().getOrdenDeVenta().getTipo()));
                datos_comerciales.addContent(orden_de_venta);
            }
            if (comprobante.getDatosComerciales().getContrato() != null) {
                Element contrato = new Element("Contrato", PREFIX, PREFIX_URI);
                if (comprobante.getDatosComerciales().getContrato().getFecha() != null)
                    contrato.addContent(new Element("Fecha", PREFIX, PREFIX_URI)
                            .setText(comprobante.getDatosComerciales().getContrato().getFecha().toXMLFormat()));
                for (int n = 0; n < comprobante.getDatosComerciales().getContrato().getNumero().size(); n++)
                    if (n < 32)
                        contrato.addContent(new Element("Numero", PREFIX, PREFIX_URI)
                                .setText(comprobante.getDatosComerciales().getContrato().getNumero().get(n)));
                if (comprobante.getDatosComerciales().getContrato().getTipo() != null)
                    contrato.addContent(new Element("Tipo", PREFIX, PREFIX_URI)
                            .setText(comprobante.getDatosComerciales().getContrato().getTipo()));
                datos_comerciales.addContent(contrato);
            }
            compro.addContent(datos_comerciales);
        }
        if (comprobante.getTerminosDePago() != null) {
            Element terminos_de_pago = new Element("TerminosDePago", PREFIX, PREFIX_URI);//(QUALITAS)
            if (comprobante.getTerminosDePago().getDiasDePago() != null)
                terminos_de_pago.addContent(new Element("DiasDePago", PREFIX, PREFIX_URI)
                        .setText(comprobante.getTerminosDePago().getDiasDePago().toString()));
            if (comprobante.getTerminosDePago().getFechaDeVencimiento() != null)
                terminos_de_pago.addContent(
                        new Element("FechaDeVencimiento", PREFIX, PREFIX_URI).setText(this.sdf.format(comprobante
                                .getTerminosDePago().getFechaDeVencimiento().toGregorianCalendar().getTime())));
            if (comprobante.getTerminosDePago().getCodigoDeTerminoDePago() != null)
                terminos_de_pago.addContent(new Element("FechaDeVencimiento", PREFIX, PREFIX_URI)
                        .setText(comprobante.getTerminosDePago().getCodigoDeTerminoDePago()));
            if (comprobante.getTerminosDePago().getCodigoDeTerminoDePago() != null)
                terminos_de_pago.addContent(new Element("CodigoDeTerminoDePago", PREFIX, PREFIX_URI)
                        .setText(comprobante.getTerminosDePago().getCodigoDeTerminoDePago()));
            terminos_de_pago.addContent(new Element("MetodoDePago", PREFIX, PREFIX_URI)
                    .setText(comprobante.getTerminosDePago().getMetodoDePago()));
            if (comprobante.getTerminosDePago().getMedioDePago() != null)
                terminos_de_pago.addContent(new Element("MedioDePago", PREFIX, PREFIX_URI)
                        .setText(comprobante.getTerminosDePago().getMedioDePago()));
            if (comprobante.getTerminosDePago().getCondicionesDePago() != null)
                terminos_de_pago.addContent(new Element("CondicionesDePago", PREFIX, PREFIX_URI)
                        .setText(comprobante.getTerminosDePago().getCondicionesDePago()));
            if (comprobante.getTerminosDePago().getPeriodoFacturado() != null) {
                Element preriodo_facturado = new Element("PeriodoFacturado", PREFIX, PREFIX_URI);
                preriodo_facturado.addContent(new Element("Desde", PREFIX, PREFIX_URI)
                        .setText(comprobante.getTerminosDePago().getPeriodoFacturado().getDesde().toXMLFormat()));
                preriodo_facturado.addContent(new Element("Hasta", PREFIX, PREFIX_URI)
                        .setText(comprobante.getTerminosDePago().getPeriodoFacturado().getHasta().toXMLFormat()));
                terminos_de_pago.addContent(preriodo_facturado);
            }
            if (comprobante.getTerminosDePago().getPeriodoDeLiquidacion() != null) {
                Element preriodo_de_liquidacion = new Element("PeriodoDeLiquidacion", PREFIX, PREFIX_URI);
                preriodo_de_liquidacion.addContent(new Element("Desde", PREFIX, PREFIX_URI).setText(
                        comprobante.getTerminosDePago().getPeriodoDeLiquidacion().getDesde().toXMLFormat()));
                preriodo_de_liquidacion.addContent(new Element("Hasta", PREFIX, PREFIX_URI).setText(
                        comprobante.getTerminosDePago().getPeriodoDeLiquidacion().getHasta().toXMLFormat()));
                terminos_de_pago.addContent(preriodo_de_liquidacion);
            }
            if (comprobante.getTerminosDePago().getFechaDePago() != null)
                terminos_de_pago.addContent(new Element("FechaDePago", PREFIX, PREFIX_URI)
                        .setText(comprobante.getTerminosDePago().getFechaDePago().toXMLFormat()));
            compro.addContent(terminos_de_pago);
        }
        /*DescuentosPorProntoPago
        DatosDeEmbarque(QUALITAS)*/
        if (comprobante.getDatosDeEmbarque() != null) {
            //.getCodigo();
            Element datosEnbarque = new Element("DatosDeEmbarque", PREFIX, PREFIX_URI);
            if (comprobante.getDatosDeEmbarque().getLugarDeEntrega() != null) {
                Element entrega = new Element("LugarDeEntrega", PREFIX, PREFIX_URI);
                entrega.addContent(new Element("Codigo", PREFIX, PREFIX_URI)
                        .setText(comprobante.getDatosDeEmbarque().getLugarDeEntrega().getCodigo()));
                datosEnbarque.addContent(entrega);
            }
            compro.addContent(datosEnbarque);
        }
        /*DatosAdicionalesDeEmisor(QUALITAS)*/
        if (comprobante.getDatosAdicionalesDeEmisor() != null) {
            Element datosadicionalesEmisor = new Element("DatosAdicionalesDeEmisor", PREFIX, PREFIX_URI);
            if (comprobante.getDatosAdicionalesDeEmisor().getRegistroPublico() != null)
                datosadicionalesEmisor.addContent(new Element("RegistroPublico", PREFIX, PREFIX_URI)
                        .setText(comprobante.getDatosAdicionalesDeEmisor().getRegistroPublico()));
            compro.addContent(datosadicionalesEmisor);
        }
        /*DatosAdicionalesDeReceptor*/
        if (comprobante.getDatosAdicionalesDeEmisor() != null) {
            Element datosadicionalesReceptor = new Element("DatosAdicionalesDeReceptor", PREFIX, PREFIX_URI);
            if (comprobante.getDatosAdicionalesDeReceptor().getRegistroPublico() != null)
                datosadicionalesReceptor.addContent(new Element("RegistroPublico", PREFIX, PREFIX_URI)
                        .setText(comprobante.getDatosAdicionalesDeReceptor().getRegistroPublico()));
            compro.addContent(datosadicionalesReceptor);
        }
        /*ReferenciasBancarias(QUALITAS)*/
        if (comprobante.getReferenciasBancarias() != null) {
            Element refBanco = new Element("ReferenciasBancarias", PREFIX, PREFIX_URI);
            for (int pos = 0; pos < comprobante.getReferenciasBancarias().getReferenciaBancaria().size(); pos++) {
                Element ref = new Element("ReferenciaBancaria", PREFIX, PREFIX_URI);
                if (comprobante.getReferenciasBancarias().getReferenciaBancaria().get(pos).getMoneda() != null)
                    ref.addContent(new Element("Moneda", PREFIX, PREFIX_URI).setText(comprobante
                            .getReferenciasBancarias().getReferenciaBancaria().get(pos).getMoneda().value()));
                ref.addContent(new Element("Banco", PREFIX, PREFIX_URI).setText(
                        comprobante.getReferenciasBancarias().getReferenciaBancaria().get(pos).getBanco()));
                if (comprobante.getReferenciasBancarias().getReferenciaBancaria().get(pos).getSucursal() != null)
                    ref.addContent(new Element("Sucursal", PREFIX, PREFIX_URI).setText(
                            comprobante.getReferenciasBancarias().getReferenciaBancaria().get(pos).getSucursal()));
                if (comprobante.getReferenciasBancarias().getReferenciaBancaria().get(pos).getPlaza() != null)
                    ref.addContent(new Element("Plaza", PREFIX, PREFIX_URI).setText(
                            comprobante.getReferenciasBancarias().getReferenciaBancaria().get(pos).getPlaza()));
                if (comprobante.getReferenciasBancarias().getReferenciaBancaria().get(pos).getTitular() != null)
                    ref.addContent(new Element("Titular", PREFIX, PREFIX_URI).setText(
                            comprobante.getReferenciasBancarias().getReferenciaBancaria().get(pos).getTitular()));
                if (comprobante.getReferenciasBancarias().getReferenciaBancaria().get(pos).getCuenta() != null)
                    ref.addContent(new Element("Cuenta", PREFIX, PREFIX_URI).setText(
                            comprobante.getReferenciasBancarias().getReferenciaBancaria().get(pos).getCuenta()));
                if (comprobante.getReferenciasBancarias().getReferenciaBancaria().get(pos).getCLABE() != null)
                    ref.addContent(new Element("CLABE", PREFIX, PREFIX_URI).setText(
                            comprobante.getReferenciasBancarias().getReferenciaBancaria().get(pos).getCLABE()));
                if (comprobante.getReferenciasBancarias().getReferenciaBancaria().get(pos).getConvenio() != null)
                    ref.addContent(new Element("Convenio", PREFIX, PREFIX_URI).setText(
                            comprobante.getReferenciasBancarias().getReferenciaBancaria().get(pos).getConvenio()));
                if (comprobante.getReferenciasBancarias().getReferenciaBancaria().get(pos).getRefCliente() != null)
                    ref.addContent(new Element("RefCliente", PREFIX, PREFIX_URI).setText(comprobante
                            .getReferenciasBancarias().getReferenciaBancaria().get(pos).getRefCliente()));
                refBanco.addContent(ref);
            }
            compro.addContent(refBanco);
        }
        /*DocumentosReferenciados
        ImportesDesglosados
        Peso
        Volumen
        TotalCajas
        TotalPiezas
        Cotizaciones*/
        if (comprobante.getTextosDeCabecera() != null) {
            Element cabecera = new Element("TextosDeCabecera", PREFIX, PREFIX_URI);
            for (int g = 0; g < comprobante.getTextosDeCabecera().getTexto().size(); g++) {
                cabecera.addContent(new Element("Texto", PREFIX, PREFIX_URI)
                        .setText(comprobante.getTextosDeCabecera().getTexto().get(g)));
            }
            compro.addContent(cabecera);
        }
        if (comprobante.getTextosDePie() != null) {
            Element cabecera = new Element("TextosDePie", PREFIX, PREFIX_URI);
            for (int g = 0; g < comprobante.getTextosDePie().getTexto().size(); g++) {
                cabecera.addContent(new Element("Texto", PREFIX, PREFIX_URI)
                        .setText(comprobante.getTextosDePie().getTexto().get(g)));
            }
            compro.addContent(cabecera);
        }
        /*TextosDePie (QUALITAS)*/

        /*Mapfre(QUALITAS)*
            ContactoEmisor
            ContactoReceptor
            Poliza
            Vehiculo*/
        if (comprobante.getMapfre() != null) {
            Element mapfre = new Element("Mapfre", PREFIX, PREFIX_URI);
            if (comprobante.getMapfre().getIdAreaAnterior() != null)
                mapfre.addContent(new Element("IdAreaAnterior", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getIdAreaAnterior()));
            if (comprobante.getMapfre().getIdArea() != null)
                mapfre.addContent(
                        new Element("IdArea", PREFIX, PREFIX_URI).setText(comprobante.getMapfre().getIdArea()));
            if (comprobante.getMapfre().getIdRevision() != null)
                mapfre.addContent(new Element("IdRevision", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getIdRevision()));
            if (comprobante.getMapfre().getContactoEmisor() != null) {
                Element contactoEmisor = new Element("ContactoEmisor", PREFIX, PREFIX_URI);
                if (comprobante.getMapfre().getContactoEmisor().getTipoDeContacto() != null)
                    contactoEmisor.addContent(new Element("TipoDeContacto", PREFIX, PREFIX_URI).setText("MATRIZ"));
                contactoEmisor.addContent(new Element("NombreDePersona", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getContactoEmisor().getNombreDePersona()));
                contactoEmisor.addContent(new Element("EMail", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getContactoEmisor().getEMail()));
                contactoEmisor.addContent(new Element("Telefono", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getContactoEmisor().getTelefono()));
                if (comprobante.getMapfre().getContactoEmisor().getExtension() != null)
                    contactoEmisor.addContent(new Element("Extension", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getContactoEmisor().getExtension()));
                if (comprobante.getMapfre().getContactoEmisor().getFax() != null)
                    contactoEmisor.addContent(new Element("Fax", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getContactoEmisor().getFax()));
                mapfre.addContent(contactoEmisor);
            }
            if (comprobante.getMapfre().getContactoReceptor() != null) {
                Element contactoReceptor = new Element("ContactoReceptor", PREFIX, PREFIX_URI);
                if (comprobante.getMapfre().getContactoReceptor().getTipoDeContacto() != null)
                    contactoReceptor
                            .addContent(new Element("TipoDeContacto", PREFIX, PREFIX_URI).setText("COORDINADOR"));
                contactoReceptor.addContent(new Element("NombreDePersona", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getContactoReceptor().getNombreDePersona()));
                contactoReceptor.addContent(new Element("EMail", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getContactoReceptor().getEMail()));
                contactoReceptor.addContent(new Element("Telefono", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getContactoReceptor().getTelefono()));
                mapfre.addContent(contactoReceptor);
            }
            if (comprobante.getMapfre().getPoliza() != null) {
                Element poliza = new Element("Poliza", PREFIX, PREFIX_URI);
                poliza.addContent(new Element("Tipo", PREFIX, PREFIX_URI).setText("AUTOS"));
                poliza.addContent(new Element("Numero", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getPoliza().getNumero()));
                if (comprobante.getMapfre().getPoliza().getInciso() != null)
                    poliza.addContent(new Element("Inciso", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getPoliza().getInciso()));
                if (comprobante.getMapfre().getPoliza().getTipoCliente() != null)
                    poliza.addContent(new Element("TipoCliente", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getPoliza().getTipoCliente()));//0,1,2
                if (comprobante.getMapfre().getPoliza().getNroReporte() != null)
                    poliza.addContent(new Element("NroReporte", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getPoliza().getNroReporte()));
                if (comprobante.getMapfre().getPoliza().getSiniestro() != null)
                    poliza.addContent(new Element("Siniestro", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getPoliza().getSiniestro()));
                if (comprobante.getMapfre().getPoliza().getTramitador() != null)
                    poliza.addContent(new Element("Tramitador", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getPoliza().getTramitador()));
                if (comprobante.getMapfre().getPoliza().getAsegurado() != null)
                    poliza.addContent(new Element("Asegurado", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getPoliza().getAsegurado()));
                if (comprobante.getMapfre().getPoliza().getEndoso() != null)
                    poliza.addContent(new Element("Endoso", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getPoliza().getEndoso()));
                if (comprobante.getMapfre().getPoliza().getVigencia() != null) {
                    Element vigencia = new Element("Vigencia", PREFIX, PREFIX_URI);
                    vigencia.addContent(new Element("Desde", PREFIX, PREFIX_URI).setText(sdf.format(comprobante
                            .getMapfre().getPoliza().getVigencia().getDesde().toGregorianCalendar().getTime())));
                    vigencia.addContent(new Element("Hasta", PREFIX, PREFIX_URI).setText(sdf.format(comprobante
                            .getMapfre().getPoliza().getVigencia().getDesde().toGregorianCalendar().getTime())));
                    poliza.addContent(vigencia);
                }
                if (comprobante.getMapfre().getPoliza().getSerieRecibo() != null)
                    poliza.addContent(new Element("SerieRecibo", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getPoliza().getSerieRecibo()));
                mapfre.addContent(poliza);
            }
            if (comprobante.getMapfre().getServicio() != null) {
                Element servicio = new Element("Servicio", PREFIX, PREFIX_URI);
                servicio.addContent(new Element("Tipo", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getServicio().getTipo()));
                servicio.addContent(new Element("Numero", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getServicio().getNumero()));
                mapfre.addContent(servicio);
            }
            if (comprobante.getMapfre().getVehiculo() != null) {
                Element vehiculo = new Element("Vehiculo", PREFIX, PREFIX_URI);
                vehiculo.addContent(new Element("Uso", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getVehiculo().getUso()));
                vehiculo.addContent(new Element("Marca", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getVehiculo().getMarca()));

                vehiculo.addContent(new Element("SubMarca", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getVehiculo().getMarca()));
                vehiculo.addContent(new Element("AnoDeProduccion", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getVehiculo().getSubMarca()));
                vehiculo.addContent(new Element("Color", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getVehiculo().getColor()));
                if (comprobante.getMapfre().getVehiculo().getChasis() != null)
                    vehiculo.addContent(new Element("Chasis", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getVehiculo().getChasis()));
                vehiculo.addContent(new Element("Serie", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getVehiculo().getSerie()));
                if (comprobante.getMapfre().getVehiculo().getMotor() != null)
                    vehiculo.addContent(new Element("Motor", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getVehiculo().getMotor()));
                vehiculo.addContent(new Element("Placas", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getVehiculo().getPlacas()));
                mapfre.addContent(vehiculo);
            }
            //local uso para hospitalizacion
            if (comprobante.getMapfre().getImportesAdicionales() != null) {
                Element importes_adicionales = new Element("ImportesAdicionales", PREFIX, PREFIX_URI);
                if (comprobante.getMapfre().getImportesAdicionales().getDeducible() != null)
                    importes_adicionales.addContent(new Element("Deducible", PREFIX, PREFIX_URI).setText(
                            comprobante.getMapfre().getImportesAdicionales().getDeducible().getValue().toString()));
                if (comprobante.getMapfre().getImportesAdicionales().getReaseguro() != null)
                    importes_adicionales.addContent(new Element("Reaseguro", PREFIX, PREFIX_URI).setText(
                            comprobante.getMapfre().getImportesAdicionales().getReaseguro().getValue().toString()));
                if (comprobante.getMapfre().getImportesAdicionales().getCoaseguro() != null)
                    importes_adicionales.addContent(new Element("Coaseguro", PREFIX, PREFIX_URI).setText(
                            comprobante.getMapfre().getImportesAdicionales().getCoaseguro().getValue().toString()));
                if (comprobante.getMapfre().getImportesAdicionales().getCoaseguroDeHonorarios() != null)
                    importes_adicionales.addContent(
                            new Element("CoaseguroDeHonorarios", PREFIX, PREFIX_URI).setText(comprobante.getMapfre()
                                    .getImportesAdicionales().getCoaseguroDeHonorarios().getValue().toString()));
                mapfre.addContent(importes_adicionales);
            }
            if (comprobante.getMapfre().getAgente() != null) {
                Element agente = new Element("Agente", PREFIX, PREFIX_URI);
                agente.addContent(new Element("Clave", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getAgente().getClave()));
                agente.addContent(new Element("Nombre", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getAgente().getNombre()));
                mapfre.addContent(agente);
            }
            if (comprobante.getMapfre().getReciboDePrimas() != null) {
                Element reciboPrimas = new Element("ReciboDePrimas", PREFIX, PREFIX_URI);
                if (comprobante.getMapfre().getReciboDePrimas().getSerie() != null)
                    reciboPrimas.addContent(new Element("Serie", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getReciboDePrimas().getSerie()));
                reciboPrimas.addContent(new Element("Folio", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getReciboDePrimas().getFolio()));
                if (comprobante.getMapfre().getReciboDePrimas().getExpedidoEn() != null)
                    reciboPrimas.addContent(new Element("ExpedidoEn", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getReciboDePrimas().getExpedidoEn()));
                mapfre.addContent(reciboPrimas);
            }
            if (comprobante.getMapfre().getFianza() != null) {
                Element fianza = new Element("Fianza", PREFIX, PREFIX_URI);
                fianza.addContent(new Element("Numero", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getFianza().getNumero()));
                if (comprobante.getMapfre().getFianza().getMonto() != null)
                    fianza.addContent(new Element("Monto", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getFianza().getMonto().getValue().toString()));
                if (comprobante.getMapfre().getFianza().getVigencia() != null) {
                    Element vigencia = new Element("Vigencia", PREFIX, PREFIX_URI);
                    vigencia.addContent(new Element("Desde", PREFIX, PREFIX_URI).setText(sdf.format(comprobante
                            .getMapfre().getFianza().getVigencia().getDesde().toGregorianCalendar().getTime())));
                    vigencia.addContent(new Element("Hasta", PREFIX, PREFIX_URI).setText(sdf.format(comprobante
                            .getMapfre().getFianza().getVigencia().getHasta().toGregorianCalendar().getTime())));
                    fianza.addContent(vigencia);
                }
                if (comprobante.getMapfre().getFianza().getObligacion() != null)
                    fianza.addContent(new Element("Obligacion", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getFianza().getObligacion()));
                if (comprobante.getMapfre().getFianza().getBeneficiario() != null)
                    fianza.addContent(new Element("Beneficiario", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getFianza().getBeneficiario()));
                if (comprobante.getMapfre().getFianza().getMovimiento() != null)
                    fianza.addContent(new Element("Movimiento", PREFIX, PREFIX_URI)
                            .setText(comprobante.getMapfre().getFianza().getMovimiento()));
                mapfre.addContent(fianza);
            }
            if (comprobante.getMapfre().getReaseguradora() != null) {
                Element reaseguradora = new Element("Reaseguradora", PREFIX, PREFIX_URI);
                reaseguradora.addContent(new Element("Clave", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getReaseguradora().getClave()));
                mapfre.addContent(reaseguradora);
            }
            if (comprobante.getMapfre().getOficina() != null)
                mapfre.addContent(
                        new Element("Oficina", PREFIX, PREFIX_URI).setText(comprobante.getMapfre().getOficina()));
            if (comprobante.getMapfre().getRegistroComision() != null)
                mapfre.addContent(new Element("RegistroComision", PREFIX, PREFIX_URI)
                        .setText(comprobante.getMapfre().getRegistroComision()));
            /* no aplica para talleres
            Inversiones
            Inmuebles
            TotalesPoliza
            TextosVariables
            TotalesSunsys
            Finamadrid
            Credito
            Agropecuario*/
            compro.addContent(mapfre);
        }
        /*Hotel
        Soriana
        Coppel
        Transportistas
        Automotriz
        Chrysler
        Volkswagen
        ServiciosDeAviacion
        AltosHornos
        EdoCuentaBanco*/
        root.addContent(compro);
    }

    public Document getXml() {
        return xml;
    }

    public void setXml(Document xml) {
        this.xml = xml;
    }

    public boolean creaAndValidaXML(TFactDocMX comprobante, String nombre) {
        boolean response = false;
        generaRaiz(comprobante);

        XMLOutputter outputter = new XMLOutputter();
        File folder = new File("nativos");
        folder.mkdirs();
        Format formato = Format.getPrettyFormat();
        formato.setEncoding("UTF-8");
        outputter.setFormat(formato);
        File archivoXml = new File(nombre);
        try {
            //Writer write = new FileWriter(archivoXml);
            FileOutputStream fop = new FileOutputStream(archivoXml);
            outputter.output(getXml(), fop);
        } catch (IOException e) {
            System.err.println("e1:" + e);
            return response;
        }
        //se instancia la clase que validara el XSD
        SAXBuilder builder = new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);
        builder.setFeature("http://apache.org/xml/features/validation/schema", true);
        builder.setFeature("http://apache.org/xml/features/validation/schema-full-checking", true);
        builder.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation",
                COMPROBANTE_SCHEMA_XSD);
        builder.setValidation(true);
        //se imprime el documento si se logro cumplir con el XSD
        try {
            Document document = builder.build(archivoXml);
            //outputter.output(document, System.out);
            response = true;
        } catch (JDOMException e) {
            System.out.println("e2:");
            error = e.toString();
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("e3");
            error = e.toString();
            e.printStackTrace();
        }
        return response;
    }
}