Skip to content

Commit 59d523b

Browse files
committed
Merge branch 'cce20-doc'
2 parents cb1cf52 + df51a96 commit 59d523b

File tree

5 files changed

+134
-1
lines changed

5 files changed

+134
-1
lines changed

docs/CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,18 @@
3232
- Merge methods from `\CfdiUtils\Nodes\NodeHasValueInterface` into `\CfdiUtils\Nodes\NodeInterface`.
3333
- Remove deprecated constant `CfdiUtils\Retenciones\Retenciones::RET_NAMESPACE`.
3434

35+
## Version 2.27.1 2024-01-12
36+
37+
- Add *Complemento Comercio Exterior 2.0* documentation.
38+
- Fix `CHANGELOG` for `2.26.0`: it was saying that CCE had version 3.0 when it was 2.0.
39+
3540
## Version 2.27.0 2024-01-12
3641

3742
Add `CfdiUtils\Utils\Crp20277Fixer` to work with new rule `CRP20277` (apply since 2024-01-15).
3843

3944
## Version 2.26.0 2024-01-10
4045

41-
Add `CfdiUtils\Elements\Cce30` *Elements* to work with "Complemento de Comercio Exterior 3.0".
46+
Add `CfdiUtils\Elements\Cce20` *Elements* to work with "Complemento de Comercio Exterior 2.0".
4247

4348
Extract logic to move SAT definitions to root element to a helper in order to use it on other creators:
4449

10.2 KB
Loading
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
# Complemento de Comercio Exterior 2.0
2+
3+
El espacio de nombres de `CfdiUtils\Elements\Cce20` permite trabajar en forma más fácil con los nodos
4+
con nombres y acciones específicas para implementar el Complemento de Comercio Exterior versión 2.0,
5+
vigente a partir del 15 de enero del 2024.
6+
7+
La documentación del complemento la puedes encontrar en el sitio oficial del SAT:
8+
9+
- Documentación Comercio Exterior 2.0: <http://omawww.sat.gob.mx/tramitesyservicios/Paginas/complemento_comercio_exterior.htm>.
10+
- Catálogos: <http://omawww.sat.gob.mx/tramitesyservicios/Paginas/catalogos_emision_cfdi_complemento_ce.htm>.
11+
- Ruta del estándar: <http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/EstandarComercioExterior_v20.pdf>.
12+
13+
Según la documentación técnica el XML debe cumplir con la siguiente especificación:
14+
15+
- Prefijo de namespace: `cce20`.
16+
- Namespace: `http://www.sat.gob.mx/ComercioExterior20`.
17+
- Archivo XSD: `http://www.sat.gob.mx/sitio_internet/cfd/ComercioExterior20/ComercioExterior20.xsd`.
18+
19+
## Cambios con respecto a Comercio Exterior 1.1
20+
21+
Si ya se había implementado el Complemento de Comercio Exterior 1.0 notarás que los cambios de estructura son mínimos:
22+
23+
- `ComercioExterior/Emisor/Domicilio` ahora es obligatorio.
24+
- `ComercioExterior/Mercancias` ahora es obligatorio.
25+
- `ComercioExterior/Mercancias/Mercancia@ValorUnitarioAduana` ahora admite 6 decimales.
26+
- `ComercioExterior/Mercancias/Mercancia@ValorDolares` ahora admite 4 decimales.
27+
- `ComercioExterior@Version` cambia de 1.1 a 2.0
28+
- `ComercioExterior@TipoOperacion` fue eliminado.
29+
- `ComercioExterior@Subdivision` fue eliminado.
30+
- `ComercioExterior@ClaveDePedimento` ahora es obligatorio.
31+
- `ComercioExterior@CertificadoOrigen` ahora es obligatorio
32+
- `ComercioExterior@TipoCambioUSD` ahora es obligatorio
33+
- `ComercioExterior@TotalUSD` ahora es obligatorio
34+
35+
## Jerarquía de nodos
36+
37+
En la siguiente imagen se puede ver la jerarquía, el orden y el número de apariciones mínimas y máximas de los nodos en el Complemento de Comercio Exterior 2.0.
38+
39+
![Diagrama del Complemento de Comercio Exterior 2.0](../_assets/diagrama-comercio-exterior-20.png)
40+
41+
## Métodos para agregar nodos
42+
43+
Los métodos de ayuda para nodos de máximo una sola aparición tienen la forma `getElemento(): Elemento`
44+
y `addElemento(array $attributes): Elemento`. En donde `Elemento` se sustituye por el nombre del nodo.
45+
En este caso, `addElemento` siempre trabaja con el elemento que previamente exista.
46+
47+
Los métodos de ayuda para nodos de múltiples apariciones tienen la forma `addElemento(array $attributes): Elemento`
48+
y `multiElemento(array $attributes): self`. En donde `Elemento` se sustituye por el nombre del nodo y `self` es el
49+
elemento que contiene el componente.
50+
En este caso, `addElemento` siempre agrega un nuevo elemento.
51+
52+
```php
53+
<?php
54+
$cce = new \CfdiUtils\Elements\Cce20\ComercioExterior();
55+
56+
// acceso por prefijo get (Mercancias es de 1 aparición)
57+
$mercancias = $cce->getMercancias();
58+
59+
// agregar con prefijo add (Mercancia es de 1 aparición)
60+
$mercancia = $mercancias->addMercancia(['NoIdentificacion'=> 'PN001122', ...]);
61+
62+
// agregar con prefijo multi (DescripcionesEspecificas es de múltiples)
63+
$mercancia->multiDescripcionesEspecificas(
64+
['Marca' => 'Hitachi', 'Modelo' => 'XB-112244', ...],
65+
['Marca' => 'Samsung', 'Modelo' => 'ECL-1-PXE', ...]
66+
);
67+
```
68+
69+
### Métodos de ayuda de los elementos
70+
71+
#### Elemento `ComercioExterior`
72+
73+
- `ComercioExterior::getEmisor(): Emisor`.
74+
- `ComercioExterior::addEmisor(array $attributes): Emisor`.
75+
- `ComercioExterior::addPropietario(array $attributes): Propietario`.
76+
- `ComercioExterior::multiPropietario(array ...$elementAttributes): self`.
77+
- `ComercioExterior::getReceptor(): Receptor`.
78+
- `ComercioExterior::addReceptor(array $attributes): Receptor`.
79+
- `ComercioExterior::addDestinatario(array $attributes): Destinatario`.
80+
- `ComercioExterior::multiDestinatario(array ...$elementAttributes): self`.
81+
- `ComercioExterior::getMercancias(): Mercancias`.
82+
- `ComercioExterior::addMercancias(array $attributes): Mercancias`.
83+
84+
#### Elemento `Emisor`
85+
86+
- `Emisor::getDomicilio(): Domicilio`.
87+
- `Emisor::addDomicilio(array $attributes): Domicilio`.
88+
89+
#### Elemento `Receptor`
90+
91+
- `Emisor::getDomicilio(): Domicilio`.
92+
- `Emisor::addDomicilio(array $attributes): Domicilio`.
93+
94+
#### Elemento `Destinatario`
95+
96+
- `Emisor::addDomicilio(array $attributes): Domicilio`.
97+
- `Emisor::multiDomicilio(array ...$elementAttributes): self`.
98+
99+
#### Elemento `Mercancias`
100+
101+
- `Emisor::addMercancias(array $attributes): Mercancias`.
102+
- `Emisor::multiMercancias(array ...$elementAttributes): self`.
103+
104+
#### Elemento `Mercancia`
105+
106+
- `Emisor::addDescripcionesEspecificas(array $attributes): DescripcionesEspecificas`.
107+
- `Emisor::multiDescripcionesEspecificas(array ...$elementAttributes): self`.
108+
109+
### Agregar el Complemento de Comercio Exterior al comprobante
110+
111+
Cuando se tiene un comprobante, se puede utilizar el método `Comprobante::addComplemento()` para insertar
112+
el elemento `ComercioExterior` al comprobante.
113+
114+
```php
115+
<?php
116+
// clase de ayuda de creación del CFDI 4.0
117+
$creator = new \CfdiUtils\CfdiCreator40();
118+
// acceso al elemento Comprobante (el nodo principal del CFDI)
119+
$comprobante = $creator->comprobante();
120+
121+
$cce20 = new \CfdiUtils\Elements\Cce20\ComercioExterior();
122+
// llenar la información de $cce20
123+
124+
// agregar $cce20 como complemento del $comprobante
125+
$comprobante->addComplemento($cce20);
126+
```

docs/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ Solo hay métodos específicos para CFDI 3.3 y CFDI 4.0.
6363
- [Elementos de CFDI 3.3](crear/elements-cfdi-40.md)
6464
- [Elementos de Nómina 1.2 revisión B](crear/complemento-nomina12b.md)
6565
- [Elementos de Carta Porte 3.0](crear/complemento-carta-porte-30.md)
66+
- [Elementos de Comercio Exterior 2.0](crear/complemento-comercio-exterior-20.md)
6667
- [Agregar complementos](crear/complementos-aun-no-implementados.md)
6768
- [CFDI Retenciones](crear/cfdi-de-retenciones-e-informacion-de-pagos.md)
6869

mkdocs.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ nav:
3030
- crear/elements-cfdi-40.md
3131
- crear/complemento-nomina12b.md
3232
- crear/complemento-carta-porte-30.md
33+
- crear/complemento-comercio-exterior-20.md
3334
- crear/complementos-aun-no-implementados.md
3435
- crear/cfdi-de-retenciones-e-informacion-de-pagos.md
3536
- "Componentes":

0 commit comments

Comments
 (0)