1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//! Validación de comprobantes SUNAT (CPE) con hojas XSL.
//!
//! El crate **no distribuye** las reglas SUNAT: [`CpeValidator`] las
//! busca en un directorio local con las diez rutas de [`XslPathResolver`]
//! (`2.X/ValidaExprRegFactura-2.0.1.xsl`, …). El resultado depende, por
//! tanto, de la versión de las hojas que provea el consumidor; este crate no
//! certifica reglas que no suministra.
//!
//! Flujo: [`XmlTypeResolver`] detecta el tipo por la raíz del XML,
//! [`XslPathResolver`] ubica la hoja, [`XslValidator`] la ejecuta con
//! libxslt (XSLT 1.0 + EXSLT, el motor de `ext-xsl` de la referencia) pasando
//! `nombreArchivoEnviado`, y [`ErrorResultParser`] convierte cada
//! `xsl:message` `nivel|código|mensaje[|ruta|valor]` en un [`CpeError`]. Las
//! hojas pueden llamar a
//! `php:function('CPEForge\Validator\Xml\XsltFunctions::matches', patrón, valor)`
//! con semántica PCRE de la referencia.
//!
//! ```no_run
//! use cpeforge_cpe_validator::CpeValidator;
//!
//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
//! let validator = CpeValidator::new("/ruta/a/reglas-sunat");
//! let xml = std::fs::read("20000000001-01-F001-1.xml")?;
//! for error in validator.validate_xml("20000000001-01-F001-1.xml", &xml)? {
//! println!("{:?} {:?}: {:?}", error.level, error.code, error.message);
//! }
//! # Ok(()) }
//! ```
//!
//! # Perfil seguro
//!
//! XML y XSL se tratan como entradas no confiables: se rechaza todo
//! `DOCTYPE`, no hay acceso de red ni escritura, `xsl:include`,
//! `xsl:import` y `document()` solo leen dentro del directorio autorizado
//! (con enlaces simbólicos resueltos), y hay [`Limits`] de tamaño, de
//! operaciones XPath y de PCRE. Los fallos de infraestructura son
//! [`CpeValidatorError`], nunca una lista vacía.
//!
//! # Requisitos
//!
//! libxml2, libxslt y libexslt del sistema (Linux: `libxslt1-dev`; macOS:
//! las del SDK). Windows no está soportado.
pub use ;
pub use ;
pub use Limits;
pub use ;
pub use ;
pub use Stylesheet;
pub use ;
pub use XmlDocument;
pub use MATCHES_HANDLER;
/// Versiones de las bibliotecas nativas en tiempo de ejecución.
/// Versiones de libxml2 y libxslt enlazadas.