<?php

//Modelos para timbrado de CFDI
	class Peticion {
		public $Comprobante;
		public $CamposPDF;
		public $EnviarCFDI;
		public $logo;
	}
	
	class CFDI_JSON {
        public $Serie;
        public $Folio;
        public $Fecha;
        public $FormaPago;
        public $NoCertificado;
        public $CondicionesDePago;
        public $SubTotal;
        public $Descuento;
        public $Moneda;
        public $TipoCambio;
        public $Total;
        public $TipoDeComprobante;
        public $MetodoPago;
        public $LugarExpedicion;
        public $Confirmacion;
        public $CfdiRelacionados;		//Objeto CfdiRelacionados
        public $Emisor;
        public $Receptor;
        public $Conceptos; //arreglo de objetos de tipo Concepto
        public $Impuestos;	//Objeto Impuestos
        public $Addenda;	//Arreglo con un solo objeto AddendaContenedor
    }
	
	class CfdiRelacionados {
        public $TipoRelacion;
        public $CfdiRelacionado;		//Arreglo de strings 
    }

    class Emisor {
        public $Rfc;
        public $Nombre;
        public $RegimenFiscal;
    }

    class Receptor {
        public $Rfc;
        public $Nombre;
        public $ResidenciaFiscal;
        public $NumRegIdTrib;
        public $UsoCFDI;
    }
    
    class EnviarCFDI {
        public $Correos;
    }

	class Correos {
        public $Correos;
    }

    class Concepto {
        public $ClaveProdServ;
        public $Cantidad;
        public $ClaveUnidad;
        public $Unidad;
        public $Descripcion;
        public $ValorUnitario;
        public $Importe;
        public $Descuento;
        public $Impuestos; //Objeto Impuestos
        public $ComplementoConcepto; //Objeto ComplementoConcepto
        public $InformacionAduanera; //No se va a usar
        public $CuentaPredial;
    }
	
    class ComplementoConcepto {
		//TODO: Recordar que este objeto es anonimo, al convertir a JSON no debe llevar nombre "{}"
        public $ObjetoComplementoConcepto; //Objeto ObjetoComplementoConcepto unico
    }

    class ObjetoComplementoConcepto {
        public $PorCuentadeTerceros; //Objeto PorCuentadeTerceros unico
    }

    class PorCuentadeTerceros {
        public $version;
        public $rfc;
        public $nombre;
        public $Version;
        public $InformacionFiscalTercero;	//Objeto InformacionFiscalTercero
        public $Impuestos;					//Objeto ImpuestosTerceros
    }

    class InformacionFiscalTercero {
        public $calle;
        public $municipio;
        public $estado;
        public $pais;
        public $codigoPostal;
    }

    class ImpuestosTerceros {
        public $Retenciones; //arreglo de objetos RetencionTerceros
        public $Traslados; //arreglo de objetos TrasladoTerceros

    }

    class TrasladoTerceros {
        public $impuesto;
        public $tasa;
        public $importe;

    }

    class RetencionTerceros {
        public $impuesto;
        public $importe;
    }
	
    class ImpuestosConcepto {
        public $Retenciones; //arreglo de objetos RetencionConcepto
        public $Traslados; //arreglo de objetos TrasladoConcepto
    }

    class RetencionConcepto {
        public $Base;
        public $Impuesto;
        public $TipoFactor;
        public $TasaOCuota;
        public $Importe;
    }

    class TrasladoConcepto {
        public $Base;
        public $Impuesto;
        public $TipoFactor;
        public $TasaOCuota;
        public $Importe;
    }
	
    class Impuestos {
        public $TotalImpuestosRetenidos;
        public $TotalImpuestosTrasladados;
        public $Retenciones; //Arreglo de objetos Retencion
        public $Traslados;	//Arreglo de objetos Traslado
    }

    class Retencion {
        public $Impuesto;
        public $Importe;
    }

    class Traslado {
        public $Impuesto;
        public $TipoFactor;
        public $TasaOCuota;
        public $Importe;
    }

    class CamposPDF {
        public $tipoComprobante;
        public $Comentarios;
        public $CartaPorte_Origen;
        public $CartaPorte_Destino;
        public $CartaPorte_Conductor;
        public $CartaPorte_Placas;
        public $CartaPorte_Vehiculo;
        public $CartaPorte_Kilometros;
        public $calleEmisor;
        public $noExteriorEmisor;
        public $noInteriorEmisor;
        public $coloniaEmisor;
        public $codigoPostalEmisor;
        public $localidadEmisor;
        public $municipioEmisor;
        public $estadoEmisor;
        public $paisEmisor;
        public $telefonoEmisor;
        public $emailEmisor;
        public $calleReceptor;
        public $noExteriorReceptor;
        public $noInteriorReceptor;
        public $coloniaReceptor;
        public $codigoPostalReceptor;
        public $localidadReceptor;
        public $municipioReceptor;
        public $estadoReceptor;
        public $paisReceptor;
		public $etiquetas; //Arreglo de objetos etiqueta
    }
	
	class EtiquetaAddenda {
		public $nombre;
		public $valor;
	}

    class AddendaContenedor {
        public $Addenda;
    }

	//TODO: Eliminar campos no usados en nuevo layout
    class Addenda {
        public $agAduanal;
        public $agenteAduanal;
        public $almacen;
        public $autorizo;
        public $buque;
        public $cantidad;
        public $clase;
        public $claveNaviera;
        public $conLetra;
        public $conocimiento;
        public $contrato;
        public $cveNaviera;
        public $descMcia;
        public $desglose;
        public $elaboro;
        public $embalaje;
        public $eslora;
        public $estadia;
        public $estadiaMalTpo;
        public $estadiaMcia;
        public $fArribo;
        public $fAtraque;
        public $fDesatraque;
        public $fEntrega;
        public $fmIva;
        public $folioSip;
        public $fZarpe;
        public $hAtraque;
        public $hDesatraque;
        public $ID;
        public $intereses;
        public $marca;
        public $naviera;
        public $noCopias;
        public $nombreNaviera;
        public $observaciones;
        public $pagado;
        public $partidaMcia;
        public $patente;
        public $peligrosidad;
        public $peso;
        public $reviso;
        public $tipoCarga;
        public $tipoContrato;
        public $tipoFactura;
        public $trafico;
        public $TRB;
        public $ubicacion;
        public $voluminoso;
        public $zona;
    }
	
	class RespuestaTimbrado {
		public $estado;
		public $mensaje;
		public $datos;
	}
	
?>