EstandarParserStrategy
extends AbstractStrategy
in package
implements
ParserStrategyInterface
Estrategia "billing.document.parser.strategy:form.estandar".
Transforma los datos recibidos a través de un formulario de la vista estándar de emisión de DTE a un arreglo PHP con la estructura oficial del SII.
Table of Contents
Interfaces
- ParserStrategyInterface
- Interfaz para las estrategias de los parsers de datos de entrada de los documentos tributarios.
Properties
- $entityComponent : EntityComponentInterface
Methods
- __construct() : mixed
- parse() : array<string|int, mixed>
- Realiza la transformación de los datos del documento.
- addAdditionalTaxes() : void
- Agrega información de impuestos adicionales al DTE.
- addConstructionCompany() : void
- Marca el DTE como perteneciente a una empresa constructora.
- addDetails() : array<string|int, mixed>
- Agrega detalles al DTE.
- addExportData() : void
- Agrega información de exportación al DTE.
- addGlobalDiscounts() : array<string|int, mixed>
- Agrega descuentos globales al DTE.
- addReferences() : void
- Agrega referencias al DTE.
- addScheduledPayment() : void
- Agrega información de pagos programados al DTE.
- addServiceIndicator() : void
- Agrega el indicador de servicio al DTE.
- addTransferData() : void
- Agrega datos de traslado al DTE.
- decodeData() : array<string|int, mixed>
- Decodifica datos JSON o los retorna directamente si ya son un arreglo.
- getTax() : float|null
- Obtiene la tasa de impuesto predeterminada para un tipo de documento.
- processDTEData() : void
- Procesa los datos de un DTE y los agrega a la estructura proporcionada.
- setInitialDTE() : void
- Crea la estructura inicial del DTE.
- validateMinimalData() : void
- Valida los datos mínimos requeridos para procesar el documento.
Properties
$entityComponent
private
EntityComponentInterface
$entityComponent
Methods
__construct()
public
__construct(EntityComponentInterface $entityComponent) : mixed
Parameters
- $entityComponent : EntityComponentInterface
parse()
Realiza la transformación de los datos del documento.
public
parse(string|array<string|int, mixed> $data) : array<string|int, mixed>
Parameters
- $data : string|array<string|int, mixed>
-
Datos de entrada del formulario.
Return values
array<string|int, mixed> —Arreglo transformado a la estructura oficial del SII.
addAdditionalTaxes()
Agrega información de impuestos adicionales al DTE.
private
addAdditionalTaxes(array<string|int, mixed> $data, array<string|int, mixed> &$dte) : void
Identifica impuestos adicionales en los detalles del documento (Detalle
)
y los agrega a los totales (Totales
) del DTE con su código y tasa.
Comportamiento:
- Busca impuestos únicos en los ítems (
CodImpAdic
). - Obtiene la tasa de cada impuesto de los datos de entrada.
- Si hay impuestos adicionales, los agrega en
ImptoReten
.
Parameters
- $data : array<string|int, mixed>
-
Datos con tasas de impuestos adicionales.
- $dte : array<string|int, mixed>
-
Estructura del DTE para agregar los impuestos.
addConstructionCompany()
Marca el DTE como perteneciente a una empresa constructora.
private
addConstructionCompany(array<string|int, mixed> $data, array<string|int, mixed> &$dte) : void
Verifica si el emisor es una empresa constructora. Si se cumplen las
condiciones, añade la clave CredEC
en los totales del DTE, indicando
derecho a un crédito del 65%.
Condiciones:
- La configuración
constructora
debe estar habilitada en los datos. - El tipo de documento (
TipoDTE
) debe ser factura, guía o nota. - El campo
CredEC
debe estar presente en los datos de entrada.
Parameters
- $data : array<string|int, mixed>
-
Datos que incluyen configuración del emisor.
- $dte : array<string|int, mixed>
-
Estructura del DTE donde se marcará
CredEC
.
addDetails()
Agrega detalles al DTE.
private
addDetails(array<string|int, mixed> $data, array<string|int, mixed> &$dte) : array<string|int, mixed>
Procesa y agrega los detalles del documento, como información de los ítems, precios, impuestos, descuentos, entre otros. Clasifica los ítems en afectos o exentos según sus características.
Comportamiento:
- Procesa cada ítem verificando códigos, impuestos y descuentos.
- Si el documento es una boleta (
TipoDTE == 39
), ajusta precios y descuentos incluyendo el IVA. - Valida que las boletas no contengan impuestos adicionales.
- Clasifica los ítems como afectos o exentos.
Parameters
- $data : array<string|int, mixed>
-
Datos que incluyen los detalles de los ítems.
- $dte : array<string|int, mixed>
-
Estructura del DTE donde se agregarán los detalles.
Tags
Return values
array<string|int, mixed> —Arreglo con:
- El número de ítems afectos.
- El número de ítems exentos.
addExportData()
Agrega información de exportación al DTE.
private
addExportData(array<string|int, mixed> $data, array<string|int, mixed> &$dte) : void
Verifica si el tipo de documento es de exportación
(TipoDTE
110, 111 o 112).
Si corresponde, añade datos como la identificación del receptor
extranjero, moneda y tipo de cambio.
Comportamiento:
- Añade el número de identificación (
NumId
) y nacionalidad del receptor. - Establece el tipo de moneda (
TpoMoneda
) y, si aplica, el tipo de cambio (TpoCambio
).
Parameters
- $data : array<string|int, mixed>
-
Datos que incluyen información de exportación.
- $dte : array<string|int, mixed>
-
Estructura del DTE donde se agregarán los datos.
addGlobalDiscounts()
Agrega descuentos globales al DTE.
private
addGlobalDiscounts(array<string|int, mixed> $data, array<string|int, mixed> &$dte, int $n_itemAfecto, int $n_itemExento) : array<string|int, mixed>
Procesa los descuentos globales definidos en los datos de entrada y
los aplica a ítems afectos, exentos o ambos. En boletas (TipoDTE == 39
),
ajusta valores en moneda para incluir el IVA.
Comportamiento:
- Valida el tipo (
TpoValor_global
) y el monto (ValorDR_global
) del descuento. - Aplica descuentos globales a ítems afectos, exentos o ambos.
Parameters
- $data : array<string|int, mixed>
-
Datos con información del descuento global.
- $dte : array<string|int, mixed>
-
Estructura del DTE para agregar los descuentos.
- $n_itemAfecto : int
-
Número de ítems afectos en el documento.
- $n_itemExento : int
-
Número de ítems exentos en el documento.
Return values
array<string|int, mixed> —Estructura del DTE actualizada con los descuentos globales.
addReferences()
Agrega referencias al DTE.
private
addReferences(array<string|int, mixed> $data, array<string|int, mixed> &$dte) : void
Procesa las referencias de los datos de entrada y las incluye en el DTE. Cada referencia contiene información como tipo de documento, folio, fecha, código de referencia y razón de referencia.
Comportamiento:
- Recorre las referencias en los datos de entrada.
- Si el folio es
0
, se marca como referencia global (IndGlobal == 1
). - Añade las referencias procesadas al arreglo
Referencia
del DTE.
Parameters
- $data : array<string|int, mixed>
-
Datos con información de las referencias.
- $dte : array<string|int, mixed>
-
Estructura del DTE donde se agregarán las referencias.
addScheduledPayment()
Agrega información de pagos programados al DTE.
private
addScheduledPayment(array<string|int, mixed> $data, array<string|int, mixed> &$dte) : void
Este método verifica si la forma de pago es una venta a crédito
(FmaPago == 2
) y, si no es una boleta, añade información de los
pagos programados al DTE.
Comportamiento:
- Si no hay pagos definidos, usa la fecha de vencimiento (
FchVenc
) y añade una glosa indicando que la fecha de pago es igual al vencimiento. - Si hay pagos definidos, procesa las fechas, montos y glosas de los pagos.
Parameters
- $data : array<string|int, mixed>
-
Datos de entrada que incluyen información de pagos.
- $dte : array<string|int, mixed>
-
Arreglo del DTE en el cual se agregarán los pagos.
addServiceIndicator()
Agrega el indicador de servicio al DTE.
private
addServiceIndicator(array<string|int, mixed> $data, array<string|int, mixed> &$dte) : void
Procesa IndServicio
para determinar si debe incluirse en el DTE,
ajustándolo según el tipo de documento (TipoDTE
) y validando su valor.
Comportamiento:
- Si el DTE es una boleta (39 o 41), invierte los valores 1 y 2 de
IndServicio
. - Valida el valor de
IndServicio
según el tipo de documento (TipoDTE
). - Asigna el indicador de servicio al DTE solo si el valor es válido.
Parameters
- $data : array<string|int, mixed>
-
Datos de entrada que incluyen el indicador de servicio.
- $dte : array<string|int, mixed>
-
Arreglo del DTE al cual se agregará el indicador.
addTransferData()
Agrega datos de traslado al DTE.
private
addTransferData(array<string|int, mixed> $data, array<string|int, mixed> &$dte) : void
Verifica si el documento es una guía de despacho (TipoDTE == 52
).
Si es así, añade detalles de traslado, como patente, transportista,
chofer y destino.
Comportamiento:
- Si se especifica
IndTraslado
, este se agrega al DTE. - Si hay información de transporte (patente, transportista, chofer o destino), esta se incluye en la sección de transporte del DTE.
Parameters
- $data : array<string|int, mixed>
-
Datos de entrada que incluyen información de traslado.
- $dte : array<string|int, mixed>
-
Arreglo del DTE al cual se agregará la información.
decodeData()
Decodifica datos JSON o los retorna directamente si ya son un arreglo.
private
decodeData(string|array<string|int, mixed> $data) : array<string|int, mixed>
Verifica si los datos son una cadena JSON y los decodifica a un arreglo asociativo. Si los datos ya son un arreglo, los retorna sin cambios.
Parameters
- $data : string|array<string|int, mixed>
-
Datos a procesar. Puede ser JSON o un arreglo.
Tags
Return values
array<string|int, mixed> —Datos decodificados como arreglo asociativo.
getTax()
Obtiene la tasa de impuesto predeterminada para un tipo de documento.
private
getTax(int $documentType) : float|null
Este método consulta el repositorio de tipos de documentos para obtener la tasa de IVA predeterminada asociada al tipo de documento especificado.
Comportamiento:
- Si no se encuentra el tipo de documento, retorna
null
. - Si se encuentra, retorna la tasa predeterminada de IVA.
Parameters
- $documentType : int
-
ID del tipo de documento a consultar.
Return values
float|null —La tasa de IVA predeterminada o null
si no se encuentra.
processDTEData()
Procesa los datos de un DTE y los agrega a la estructura proporcionada.
private
processDTEData(array<string|int, mixed> $data, array<string|int, mixed> &$dte) : void
Este método realiza diversas operaciones sobre los datos del DTE, como la adición de pagos programados, datos de traslado, detalles y referencias.
Parameters
- $data : array<string|int, mixed>
-
Datos del DTE a procesar.
- $dte : array<string|int, mixed>
-
Referencia al arreglo del DTE donde se agregarán los datos.
setInitialDTE()
Crea la estructura inicial del DTE.
private
setInitialDTE(array<string|int, mixed> $data, array<string|int, mixed> &$dte) : void
Este método genera un arreglo con la estructura inicial del DTE, incluyendo información del encabezado, emisor, receptor y otros datos generales que se requieren para procesar el documento.
Estructura del DTE:
- Encabezado:
- IdDoc: Información del documento, como tipo y folio.
- Emisor: Detalles del emisor, como RUT y dirección.
- Receptor: Detalles del receptor, como RUT y razón social.
- RUTSolicita: Información del solicitante, si aplica.
Parameters
- $data : array<string|int, mixed>
-
Datos de entrada para generar la estructura del DTE.
- $dte : array<string|int, mixed>
-
Referencia donde se almacenará la estructura generada.
validateMinimalData()
Valida los datos mínimos requeridos para procesar el documento.
private
validateMinimalData(array<string|int, mixed> $data) : void
Este método verifica que se proporcionen los datos mínimos necesarios para generar el documento. Si falta algún dato obligatorio, lanza una excepción.
Reglas de validación:
- Si los datos están vacíos, no se permite acceso directo.
- El tipo de documento (
TpoDoc
) es obligatorio. - Los campos mínimos varían según el tipo de documento.
Parameters
- $data : array<string|int, mixed>
-
Datos del formulario enviados para procesar el documento.