LibreDTE

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

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
throws
ParserException

Si se detectan impuestos adicionales en una boleta.

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
throws
ParserException

Si la cadena JSON proporcionada no es válida.

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.

Tags
throws
ParserException

Si falta algún dato obligatorio o el acceso es directo.


        
On this page

Search results