Elementos de CFDI versión 4.0
El espacio de nombres de CfdiUtils\Elements\Cfdi40 permite trabajar en forma más fácil
con los nodos con nombres y acciones específicas y es la base de la creación de un CFDI 4.0.
Es la implementación de elementos, que son nodos con métodos de ayuda.
Comprobante
Representa el nodo raíz Comprobante.
Contiene los siguientes métodos de ayuda:
getInformacionGlobal(): InformacionGlobal: Crea (si no existe) y obtiene el nodo únicoInformacionGlobal.addInformacionGlobal(array $attributes = []): InformacionGlobal: Agrega y devuelve el único nodoInformacionGlobal.addCfdiRelacionados(array $attributes = []): CfdiRelacionados: Agrega y devuelve un nuevo nodoCfdiRelacionados.multiCfdiRelacionados(array ...$elementAttributes): Comprobante: Agrega nuevos nodosCfdiRelacionados, es una forma rápida de llamar al métodomultiTrasladomúltiples veces.getEmisor(): Emisor: Crea (si no existe) y obtiene el nodo únicoEmisor.addEmisor(array $attributes = []): Emisor: Agrega y devuelve el único nodoEmisor.getReceptor(): Receptor: Crea (si no existe) y obtiene el nodo únicoReceptor.addReceptor(array $attributes = []): Receptor: Agrega y devuelve el único nodoReceptor.getConceptos(): Conceptos: Crea (si no existe) y obtiene el nodo únicoConceptos.addConcepto(array $attributes = [], array $children = []): Concepto: Agrega y devuelve un nuevo nodoConcepto.getImpuestos(): Impuestos: Crea (si no existe) y obtiene el nodo únicoImpuestos.addImpuestos(array $attributes = []): Impuestos: Agrega y devuelve el único nodoImpuestos.addTraslado(array $attributes = []): Traslado: Agrega y devuelve un nuevo nodoTraslado(enImpuestos/Traslados).multiTraslado(array ...$elementAttributes): Comprobante: Agrega nuevos nodoTraslado, es una forma rápida de llamar al métodoaddTrasladomúltiples veces.addRetencion(array $attributes = []): Retencion: Agrega y devuelve un nuevo nodoRetencion(enImpuestos/Retenciones).multiRetencion(array ...$elementAttributes): Comprobante: Agrega nuevos nodos deRetencion, es una forma rápida de llamar al métodoaddRetencionmúltiples veces.getComplemento(): Complemento: Crea (si no existe) y obtiene el nodo únicoComplemento.addComplemento(NodeInterface $children): Comprobante: Agrega el nodo$childrendentro del único nodoComplemento.getAddenda(): Addenda: Crea (si no existe) y obtiene el nodo únicoAddenda.addAddenda(NodeInterface $children): Comprobante: Agrega el nodo$childrendentro del único nodoAddenda.
CfdiRelacionados
Representa el nodo Comprobante/CfdiRelacionados.
addCfdiRelacionado(array $attributes = []): CfdiRelacionado: Agrega y devuelve un nuevo nodoCfdiRelacionado.multiCfdiRelacionado(array ...$elementAttributes): CfdiRelacionados: Agrega nuevos nodos deCfdiRelacionado, es una forma rápida de llamar al métodoaddCfdiRelacionadomúltiples veces.
CfdiRelacionado
Representa el nodo Comprobante/CfdiRelacionados/CfdiRelacionado.
Emisor
Representa el nodo Comprobante/Emisor.
Receptor
Representa el nodo Comprobante/Receptor.
Conceptos
Representa el nodo Comprobante/Conceptos.
addConcepto(array $attributes = []): Concepto: Agrega y devuelve un nuevo nodoConceptos.multiConcepto(array ...$elementAttributes): Conceptos: Agrega nuevos nodos deConcepto, es una forma rápida de llamar al métodoaddConceptomúltiples veces.
Concepto
Representa el nodo Comprobante/Conceptos/Concepto.
getImpuestos(): ConceptoImpuestos: Crea (si no existe) y obtiene el nodo únicoConceptoImpuestos.addTraslado(array $attributes = []): Traslado: Agrega y devuelve un nuevo nodoTraslado(enImpuestos/Traslados).multiTraslado(array ...$elementAttributes): Concepto: Agrega nuevos nodosTraslado, es una forma rápida de llamar al métodoaddTrasladomúltiples veces.addRetencion(array $attributes = []): Retencion: Agrega y devuelve un nuevo nodoRetencion(enImpuestos/Retenciones).multiRetencion(array ...$elementAttributes): Concepto: Agrega nuevos nodosRetencion, es una forma rápida de llamar al métodoaddRetencionmúltiples veces.addInformacionAduanera(array $attributes = []): InformacionAduanera: Agrega y devuelve un nuevo nodoInformacionAduanera.multiInformacionAduanera(array ...$elementAttributes): Concepto: Agrega nuevos nodosInformacionAduanera, es una forma rápida de llamar al métodoaddInformacionAduaneramúltiples veces.addCuentaPredial(array $attributes = []): CuentaPredial: Agrega y devuelve el único nodoCuentaPredial.getComplementoConcepto(): ComplementoConcepto: Crea (si no existe) y obtiene el nodo únicoComplementoConcepto.addComplementoConcepto(array $attributes = [], array $children = []): ComplementoConcepto: Agrega y devuelve el único nodoComplementoconcepto.addParte(array $attributes = [], array $children = []): Parte: Agrega y devuelve un nuevo nodoParte.multiParte(array ...$elementAttributes): Agrega nuevos nodosParte, es una forma rápida de llamar al métodoaddPartemúltiples veces.
ConceptoImpuestos
La clase ConceptoImpuestos es igual a la clase Impuestos con la única diferencia de orden:
El primer nodo de Impuestos dentro de Concepto debe ser Traslados.
Mientras que el primer nodo de Impuestos dentro de Comprobante debe ser Retenciones.
ComprobanteConceptosImpuestosTrasladosRetenciones
ImpuestosRetencionesTraslados
También puedes notar que no existe el método Concepto::addImpuestos(array $attributes = [])
porque este nodo por definición no tiene atributos propios y, por lo tanto, no es necesario.
InformacionAduanera
Representa el nodo Comprobante/Conceptos/Concepto/InformacionAduanera
y Comprobante/Conceptos/Concepto/Parte/InformacionAduanera.
CuentaPredial
Representa el nodo Comprobante/Conceptos/Concepto/CuentaPredial.
ComplementoConcepto
Representa el nodo Comprobante/Conceptos/Concepto/ComplementoConcepto.
Parte
Representa el nodo Comprobante/Conceptos/Concepto/Parte.
addInformacionAduanera(array $attributes = []): InformacionAduanera: Agrega y devuelve un nuevo nodoInformacionAduanera.multiInformacionAduanera(array ...$elementAttributes): Parte: Agrega nuevos nodosInformacionAduanera, es una forma rápida de llamar al métodoaddInformacionAduaneramúltiples veces.
Impuestos
Representa el nodo Comprobante/Impuestos y también Comprobante/Conceptos/Concepto/Impuestos.
getTraslados(): Traslados: Crea (si no existe) y obtiene el nodo únicoTraslados.getRetenciones(): Retenciones: Crea (si no existe) y obtiene el nodo únicoRetenciones.
Aunque el nodo Impuestos (hijo de Comprobante) es diferente que el nodo Impuestos (hijo de Concepto)
se puede utilizar la misma estructura de datos, porque los cambios se dan en atributos y no en hijos.
Traslados
Representa el nodo Comprobante/Impuestos/Traslados y Comprobante/Conceptos/Concepto/Impuestos/Traslados.
addTraslado(array $attributes = []): Traslado: Agrega y devuelve un nuevo nodoTraslado.multiTraslado(array ...$elementAttributes): Traslados: Agrega nuevos nodosTraslado, es una forma rápida de llamar al métodoaddTrasladomúltiples veces.
Retenciones
Representa el nodo Comprobante/Impuestos/Retenciones y Comprobante/Conceptos/Concepto/Impuestos/Retenciones.
addRetencion(array $attributes = []): Retencion: Agrega y devuelve un nuevo nodoRetencion.multiRetencion(array ...$elementAttributes): Retenciones: Agrega nuevos nodosRetencion, es una forma rápida de llamar al métodoaddRetencionmúltiples veces.
Traslado
Representa el nodo Comprobante/Impuestos/Retenciones/Traslado
y Conceptos/Concepto/Impuestos/Retenciones/Traslado.
Retencion
Representa el nodo Comprobante/Impuestos/Retenciones/Retencion
y Conceptos/Concepto/Impuestos/Retenciones/Retencion.