CafManager
in package
implements
CafManagerInterface
Implementación de un gestor de archivos CAF.
Agrupa múltiples CAFs por tipo de documento y entrega folios en orden, cruzando de un CAF al siguiente cuando se agota el anterior.
Soporta marcar folios como ya consumidos (emitidos previamente), lo que permite especificar un folio de inicio distinto al primero del CAF o incluso rangos con gaps: "1-6,10,14,16-20".
Table of Contents
Interfaces
- CafManagerInterface
- Interfaz para el gestor de archivos CAF.
Properties
- $consumed : array<int, array<int, true>>
- Conjunto de folios ya consumidos por tipo de documento.
- $pool : array<int, array<string|int, CafInterface>>
- Pool de CAFs agrupados por tipo de documento.
Methods
- add() : static
- Agrega un archivo CAF al pool.
- consume() : CafFolioInterface
- Consumir el próximo folio.
- getAvailableRange() : string
- Obtiene los folios disponibles para un tipo de documento como string de rangos compactos.
- getCafForFolio() : CafInterface
- Obtiene el CAF que cubre un folio ya asignado.
- getCafs() : array<string|int, CafInterface>
- Devuelve todos los CAFs cargados como lista plana.
- hasEnoughFolios() : bool
- ¿Hay suficientes folios disponibles para este tipo?
- markConsumed() : static
- Marca folios como ya consumidos (estado previo al uso de este manager).
- remove() : static
- Elimina un CAF específico del pool.
- setAvailableRange() : static
- Define explícitamente qué folios están disponibles para consumo.
- parseFolios() : array<string|int, int>
- Parsea folios desde un string de rangos o un array de enteros.
Properties
$consumed
Conjunto de folios ya consumidos por tipo de documento.
private
array<int, array<int, true>>
$consumed
= []
Usa el folio como clave para búsqueda O(1).
$pool
Pool de CAFs agrupados por tipo de documento.
private
array<int, array<string|int, CafInterface>>
$pool
= []
Cada entrada es un array de CafInterface ordenado por folio desde.
Methods
add()
Agrega un archivo CAF al pool.
public
add(string $xml) : static
Parameters
- $xml : string
Return values
staticconsume()
Consumir el próximo folio.
public
consume(int $dte) : CafFolioInterface
Parameters
- $dte : int
Return values
CafFolioInterfacegetAvailableRange()
Obtiene los folios disponibles para un tipo de documento como string de rangos compactos.
public
getAvailableRange(int $dte) : string
Parameters
- $dte : int
-
Tipo de documento.
Return values
string —Rangos de folios disponibles. Vacío si no hay disponibles.
getCafForFolio()
Obtiene el CAF que cubre un folio ya asignado.
public
getCafForFolio(int $dte, int $folio) : CafInterface
Parameters
- $dte : int
-
Tipo de documento.
- $folio : int
-
Folio a buscar.
Return values
CafInterfacegetCafs()
Devuelve todos los CAFs cargados como lista plana.
public
getCafs() : array<string|int, CafInterface>
Return values
array<string|int, CafInterface>hasEnoughFolios()
¿Hay suficientes folios disponibles para este tipo?
public
hasEnoughFolios(int $dte[, int $cantidad = 1 ]) : bool
Parameters
- $dte : int
- $cantidad : int = 1
Return values
boolmarkConsumed()
Marca folios como ya consumidos (estado previo al uso de este manager).
public
markConsumed(int $dte, string|array<string|int, mixed> $folios) : static
Parameters
- $dte : int
-
Tipo de documento.
- $folios : string|array<string|int, mixed>
-
Folios a marcar como consumidos.
Return values
staticremove()
Elimina un CAF específico del pool.
public
remove(int $dte, int $folioDesde) : static
Parameters
- $dte : int
-
Tipo de documento.
- $folioDesde : int
-
Folio de inicio del CAF a eliminar.
Return values
staticsetAvailableRange()
Define explícitamente qué folios están disponibles para consumo.
public
setAvailableRange(int $dte, string|array<string|int, mixed> $folios) : static
Parameters
- $dte : int
-
Tipo de documento.
- $folios : string|array<string|int, mixed>
-
Folios que están disponibles para consumo.
Return values
staticparseFolios()
Parsea folios desde un string de rangos o un array de enteros.
private
parseFolios(string|array<string|int, int> $folios) : array<string|int, int>
El string acepta rangos separados por coma: "1-6,10,14,16-20". El array debe contener enteros: [1, 2, 3, 4, 5, 6, 10].
Parameters
- $folios : string|array<string|int, int>