FacturaCompraBuilder
extends AbstractDocumentoBuilder
in package
uses
DetalleNormalizationTrait, DescuentosRecargosNormalizationTrait, ImpuestoAdicionalRetencionNormalizationTrait, IvaMntTotalNormalizationTrait
Constructor ("builder") del documento factura de compra.
Table of Contents
Properties
- $dataProvider : DataProviderInterface
- Proveedor de datos.
- $documentoClass : string
- Clase del documento que este "builder" construirá.
- $documentoBaseForNewBuilds : AbstractDocumento
- Instancia vacía del documento.
- $impuestosAdicionalesRepository : ImpuestosAdicionalesRepository
- Repositorio de impuestos adicionales.
- $normalizer : DocumentoNormalizer
- Normalizador de datos del documento a construir.
- $sanitizer : DocumentoSanitizer
- Sanitizador de datos del documento a construir.
- $tipoDocumento : DocumentoTipo
- Tipo de documento que normalizará esta instancia del normalizador.
Methods
- __construct() : mixed
- Constructor de la clase.
- applyDocumentoNormalization() : array<string|int, mixed>
- Normaliza los datos con reglas específicas para el tipo de documento.
- build() : AbstractDocumento
- Construye el documentro tributario electrónico a partir de un arreglo con los datos del documento.
- loadFromXml() : AbstractDocumento
- Construye el documento tributario electrónico a partir de los datos de un string XML.
- applyDescuentosRecargosNormalization() : array<string|int, mixed>
- Aplica los descuentos y recargos generales respectivos a los montos que correspondan según el indicador del descuento o recargo.
- applyDetalleNormalization() : array<string|int, mixed>
- Normaliza los detalles del documento.
- applyImpuestoRetenidoNormalization() : array<string|int, mixed>
- Calcula los montos de impuestos adicionales o retenciones.
- applyIvaMntTotalNormalization() : array<string|int, mixed>
- Calcula el monto del IVA y el monto total del documento a partir del monto neto y la tasa de IVA si es que existe.
- calcularNetoIVA() : array<string|int, mixed>
- Obtiene el monto neto y el IVA de ese neto a partir de un monto total.
- getImpuestosAdicionalesRepository() : ImpuestosAdicionalesRepository
- Entrega el repositorio de impuestos adicionales que se pueden usar en un documento tributario.
- getTipoDocumento() : DocumentoTipo
- Entrega el tipo de documento que este "builder" puede construir.
- round() : int|float
- Redondea valores asociados a un tipo de moneda.
Properties
$dataProvider
Proveedor de datos.
protected
DataProviderInterface
$dataProvider
$documentoClass
Clase del documento que este "builder" construirá.
protected
string
$documentoClass
= \libredte\lib\Core\Sii\Dte\Documento\FacturaCompra::class
$documentoBaseForNewBuilds
Instancia vacía del documento.
private
AbstractDocumento
$documentoBaseForNewBuilds
Se crea en el constructor y se deja vacía en el "builder". Luego, en cada llamada a build() esta instancia se clona para construir un nuevo documento.
$impuestosAdicionalesRepository
Repositorio de impuestos adicionales.
private
ImpuestosAdicionalesRepository
$impuestosAdicionalesRepository
$normalizer
Normalizador de datos del documento a construir.
private
DocumentoNormalizer
$normalizer
$sanitizer
Sanitizador de datos del documento a construir.
private
DocumentoSanitizer
$sanitizer
$tipoDocumento
Tipo de documento que normalizará esta instancia del normalizador.
private
DocumentoTipo
$tipoDocumento
Methods
__construct()
Constructor de la clase.
public
__construct([DataProviderInterface|null $dataProvider = null ]) : mixed
Parameters
- $dataProvider : DataProviderInterface|null = null
-
Proveedor de datos.
applyDocumentoNormalization()
Normaliza los datos con reglas específicas para el tipo de documento.
public
applyDocumentoNormalization(array<string|int, mixed> $data) : array<string|int, mixed>
Parameters
- $data : array<string|int, mixed>
-
Arreglo con los datos del documento a normalizar.
Return values
array<string|int, mixed> —Arreglo con los datos normalizados.
build()
Construye el documentro tributario electrónico a partir de un arreglo con los datos del documento.
public
build(array<string|int, mixed> $data[, bool $normalize = true ]) : AbstractDocumento
Parameters
- $data : array<string|int, mixed>
-
Arreglo con los datos del documento a crear.
- $normalize : bool = true
-
Si se deben normalizar los datos del arreglo.
Return values
AbstractDocumento —Documento tributario construído.
loadFromXml()
Construye el documento tributario electrónico a partir de los datos de un string XML.
public
loadFromXml(string $xml) : AbstractDocumento
Este método es para cargar XML de documentos completos. O sea, con todos sus datos (normalizados), el documento timbrado (con su CAF asociado) y con su firma electrónica.
Parameters
- $xml : string
-
String del XML del documento con todos sus datos.
Return values
AbstractDocumento —Instancia del documento construído con el XML.
applyDescuentosRecargosNormalization()
Aplica los descuentos y recargos generales respectivos a los montos que correspondan según el indicador del descuento o recargo.
protected
applyDescuentosRecargosNormalization(array<string|int, mixed> $data) : array<string|int, mixed>
Parameters
- $data : array<string|int, mixed>
-
Arreglo con los datos del documento a normalizar.
Tags
Return values
array<string|int, mixed> —Arreglo con los datos normalizados.
applyDetalleNormalization()
Normaliza los detalles del documento.
protected
applyDetalleNormalization(array<string|int, mixed> $data) : array<string|int, mixed>
Parameters
- $data : array<string|int, mixed>
-
Arreglo con los datos del documento a normalizar.
Tags
Return values
array<string|int, mixed> —Arreglo con los datos normalizados.
applyImpuestoRetenidoNormalization()
Calcula los montos de impuestos adicionales o retenciones.
protected
applyImpuestoRetenidoNormalization(array<string|int, mixed> $data) : array<string|int, mixed>
Parameters
- $data : array<string|int, mixed>
-
Arreglo con los datos del documento a normalizar.
Return values
array<string|int, mixed> —Arreglo con los datos normalizados.
applyIvaMntTotalNormalization()
Calcula el monto del IVA y el monto total del documento a partir del monto neto y la tasa de IVA si es que existe.
protected
applyIvaMntTotalNormalization(array<string|int, mixed> $data) : array<string|int, mixed>
WARNING: Si es una boleta y tiene impuestos adicionales, no se consideran los casos de esos impuestos adicionales. Se deberán indicar los campos de MntNeto e IVA y no usar esta parte de la normalización.
WARNING: Si el valor IndMntNeto es 2 indica que los montos de las líneas son netos en cuyo caso no aplica el cálculo de neto e IVA a partir del total y deberá venir informado de otra forma (aun no definido).
Parameters
- $data : array<string|int, mixed>
-
Arreglo con los datos del documento a normalizar.
Tags
Return values
array<string|int, mixed> —Arreglo con los datos normalizados.
calcularNetoIVA()
Obtiene el monto neto y el IVA de ese neto a partir de un monto total.
protected
calcularNetoIVA(int $total[, int|false|null $tasa = null ]) : array<string|int, mixed>
NOTE: El IVA obtenido puede no ser el NETO * (TASA / 100). Se calcula el monto neto y luego se obtiene el IVA haciendo la resta entre el total y el neto. Hay casos de borde que generan problemas como:
- BRUTO: 680 => NETO: 571 e IVA: 108 => TOTAL: 679
- BRUTO: 86710 => NETO: 72866 e IVA: 13845 => TOTAL: 86711
Estos casos son "normales", pues por aproximaciones "no da".
Parameters
- $total : int
-
Total que representa el monto neto más el IVA.
- $tasa : int|false|null = null
-
Tasa del IVA.
Return values
array<string|int, mixed> —Arreglo con el neto y el IVA en índices 0 y 1.
getImpuestosAdicionalesRepository()
Entrega el repositorio de impuestos adicionales que se pueden usar en un documento tributario.
protected
abstract getImpuestosAdicionalesRepository() : ImpuestosAdicionalesRepository
Return values
ImpuestosAdicionalesRepositorygetTipoDocumento()
Entrega el tipo de documento que este "builder" puede construir.
protected
abstract getTipoDocumento() : DocumentoTipo
Return values
DocumentoTiporound()
Redondea valores asociados a un tipo de moneda.
protected
round(int|float $amount[, string|null|false $currency = null ][, int $decimals = 4 ]) : int|float
Si los valores son en pesos chilenos se redondea sin decimales. Si los valores están en otro tipo de moneda se mantienen los decimales, por defecto se mantienen 4 decimales.
Parameters
- $amount : int|float
-
Valor que se desea redondear.
- $currency : string|null|false = null
-
La moneda en la que está el valor.
- $decimals : int = 4
-
Cantidad de decimales a mantener cuando la moneda no es peso chileno.
Return values
int|float —Valor redondeado según la moneda y decimales a usar.