-
Notifications
You must be signed in to change notification settings - Fork 47
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #122 from alejandrogova1/master
Add Complemento Carta Porte 3.1
- Loading branch information
Showing
38 changed files
with
1,381 additions
and
15 deletions.
There are no files selected for viewing
61 changes: 61 additions & 0 deletions
61
development/ElementsMaker/specifications/cartaporte31.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
{ | ||
"php-namespace": "CfdiUtils\\Elements\\CartaPorte31", | ||
"prefix": "cartaporte31", | ||
"xml-namespace": "http://www.sat.gob.mx/CartaPorte31", | ||
"xml-schemalocation": "http://www.sat.gob.mx/sitio_internet/cfd/CartaPorte/CartaPorte31.xsd", | ||
"version-attribute": "Version", | ||
"version-value": "3.1", | ||
"root-element": "CartaPorte", | ||
"structure": { | ||
"RegimenesAduaneros" : { | ||
"RegimenAduaneroCCP" : { | ||
"multiple": true | ||
} | ||
}, | ||
"Ubicaciones": { | ||
"Ubicacion": { | ||
"multiple": true, | ||
"Domicilio": {} | ||
} | ||
}, | ||
"Mercancias": { | ||
"Mercancia": { | ||
"multiple": true, | ||
"DocumentacionAduanera": {"multiple": true}, | ||
"GuiasIdentificacion": {"multiple": true}, | ||
"CantidadTransporta": {"multiple": true}, | ||
"DetalleMercancia": {} | ||
}, | ||
"Autotransporte": { | ||
"IdentificacionVehicular": {}, | ||
"Seguros": {}, | ||
"Remolques": { | ||
"Remolque": {"multiple": true} | ||
} | ||
}, | ||
"TransporteMaritimo": { | ||
"Contenedor": { | ||
"multiple": true, | ||
"RemolquesCCP": { | ||
"RemolqueCCP": {"multiple": true} | ||
} | ||
} | ||
}, | ||
"TransporteAereo": {}, | ||
"TransporteFerroviario": { | ||
"DerechosDePaso": {"multiple": true}, | ||
"Carro": { | ||
"multiple": true, | ||
"Contenedor": {"multiple": true} | ||
} | ||
} | ||
}, | ||
"FiguraTransporte": { | ||
"TiposFigura": { | ||
"multiple": true, | ||
"PartesTransporte": {"multiple": true}, | ||
"Domicilio": {} | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,183 @@ | ||
# Complemento de Carta Porte 3.1 | ||
|
||
El espacio de nombres de `CfdiUtils\Elements\CartaPorte31` permite trabajar en forma más fácil con los nodos | ||
con nombres y acciones específicas para implementar el Complemento de Carta Porte versión 3.1, vigente a | ||
partir del 17 de julio del 2024. | ||
|
||
La documentación del complemento la puedes encontrar en el sitio oficial del SAT: | ||
|
||
- Página del complemento: <http://omawww.sat.gob.mx/tramitesyservicios/Paginas/complemento_carta_porte.htm>. | ||
- La ruta del archivo de excel con los nuevos catálogos: <http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/CatalogosCartaPorte31.xls>. | ||
- Ruta del XSD del CCP 3.1: <http://www.sat.gob.mx/sitio_internet/cfd/CartaPorte/CartaPorte31.xsd>. | ||
- Ruta del XSLT para la secuencia de cadena original CCP 3.1: <http://www.sat.gob.mx/sitio_internet/cfd/CartaPorte/CartaPorte31.xslt>. | ||
- Ruta matriz de errores CCP 3.1: <http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/Matriz_Errores_CCP_V31.xls>. | ||
- Ruta XSD catálogos CCP: <http://www.sat.gob.mx/sitio_internet/cfd/catalogos/CartaPorte/catCartaPorte.xsd>. | ||
- Ruta del estándar: <http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/Carta_Porte_31.pdf>. | ||
|
||
Según la documentación técnica el XML debe cumplir con la siguiente especificación: | ||
|
||
- Prefijo de namespace: `cartaporte31`. | ||
- Namespace: <http://www.sat.gob.mx/CartaPorte31>. | ||
- Archivo XSD: <http://www.sat.gob.mx/sitio_internet/cfd/CartaPorte/CartaPorte31.xsd>. | ||
|
||
## Jerarquía de nodos | ||
|
||
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 Carta Porte 3.1. | ||
|
||
![Diagrama del Complemento Carta Porte 3.1](../_assets/diagrama-carta-porte-31.png) | ||
|
||
## Métodos para agregar nodos | ||
|
||
Los métodos de ayuda para nodos de máximo una sola aparición tienen la forma `getElemento(): Elemento` | ||
y `addElemento(array $attributes): Elemento`. En donde `Elemento` se sustituye por el nombre del nodo. | ||
En este caso, `addElemento` siempre trabaja con el elemento que previamente exista. | ||
|
||
Los métodos de ayuda para nodos de múltiples apariciones tienen la forma `addElemento(array $attributes): Elemento` | ||
y `multiElemento(array $attributes): self`. En donde `Elemento` se sustituye por el nombre del nodo y `self` es el | ||
elemento que contiene el componente. | ||
En este caso, `addElemento` siempre agrega un nuevo elemento. | ||
|
||
```php | ||
<?php | ||
$cartaPorte = new \CfdiUtils\Elements\CartaPorte31\CartaPorte(); | ||
|
||
// acceso por prefijo get (Ubicaciones es de 1 aparición) | ||
$ubicaciones = $cartaPorte->getUbicaciones(); | ||
|
||
// agregar con prefijo add (Ubicacion es de 1 aparición) | ||
$ubicacion = $ubicaciones->addUbicacion(['TipoUbicacion'=> 'Origen', ...]); | ||
|
||
// agregar con prefijo multi (Domicilio es de múltiples) | ||
$ubicacion->multiDomicilio( | ||
['Calle' => 'xxx', 'NumeroExterior' => 'xxx', ...], | ||
['Calle' => 'xxx', 'NumeroExterior' => 'xxx', ...] | ||
); | ||
``` | ||
|
||
### Métodos de ayuda de los elementos | ||
|
||
#### Elemento `CartaPorte` | ||
|
||
- `CartaPorte::getRegimenesAduaneros(): RegimenesAduaneros`. | ||
- `CartaPorte::getUbicaciones(): Ubicaciones`. | ||
- `CartaPorte::addUbicaciones(array $attributes): Ubicaciones`. | ||
- `CartaPorte::getMercancias(): Mercancias`. | ||
- `CartaPorte::addMercancias(array $attributes): Mercancias`. | ||
- `CartaPorte::getFiguraTransporte(): FiguraTransporte`. | ||
- `CartaPorte::addFiguraTransporte(array $attributes): FiguraTransporte`. | ||
|
||
#### Elemento `RegimenesAduaneros` | ||
|
||
- `RegimenesAduaneros::addRegimenAduaneroCCP(array $attributes): RegimenAduaneroCCP`. | ||
- `RegimenesAduaneros::multiRegimenAduaneroCCP(array ...$elementAttributes): self`. | ||
|
||
#### Elemento `Ubicaciones` | ||
|
||
- `Ubicaciones::addUbicacion(array $attributes): Ubicacion`. | ||
- `Ubicaciones::multiUbicacion(array ...$elementAttributes): self`. | ||
|
||
#### Elemento `Ubicacion` | ||
|
||
- `Ubicacion::getDomicilio(): Domicilio`. | ||
- `Ubicacion::addDomicilio(array $attributes): Domicilio`. | ||
|
||
#### Elemento `Mercancias` | ||
|
||
- `Mercancias::addMercancia(array $attributes): Mercancia`. | ||
- `Mercancias::multiMercancia(array ...$elementAttributes): self`. | ||
- `Mercancias::getAutotransporte(): Autotransporte`. | ||
- `Mercancias::addAutotransporte(array $attributes): Autotransporte`. | ||
- `Mercancias::getTransporteMaritimo(): TransporteMaritimo`. | ||
- `Mercancias::addTransporteMaritimo(array $attributes): TransporteMaritimo`. | ||
- `Mercancias::getTransporteAereo(): TransporteAereo`. | ||
- `Mercancias::addTransporteAereo(array $attributes): TransporteAereo`. | ||
- `Mercancias::getTransporteFerroviario(): TransporteFerroviario`. | ||
- `Mercancias::addTransporteFerroviario(array $attributes): TransporteFerroviario`. | ||
|
||
#### Elemento `Mercancia` | ||
|
||
- `Mercancia::addDocumentacionAduanera(array $attributes): DocumentacionAduanera`. | ||
- `Mercancia::multiDocumentacionAduanera(array ...$elementAttributes): self`. | ||
- `Mercancia::addGuiasIdentificacion(array $attributes): GuiasIdentificacion`. | ||
- `Mercancia::multiGuiasIdentificacion(array ...$elementAttributes): self`. | ||
- `Mercancia::addCantidadTransporta(array $attributes): CantidadTransporta`. | ||
- `Mercancia::multiCantidadTransporta(array ...$elementAttributes): self`. | ||
- `Mercancia::getDetalleMercancia(): DetalleMercancia`. | ||
- `Mercancia::addDetalleMercancia(array $attributes): DetalleMercancia`. | ||
|
||
#### Elemento `Autotransporte` | ||
|
||
- `Autotransporte::getIdentificacionVehicular(): IdentificacionVehicular`. | ||
- `Autotransporte::addIdentificacionVehicular(array $attributes): IdentificacionVehicular`. | ||
- `Autotransporte::getSeguros(): Seguros`. | ||
- `Autotransporte::addSeguros(array $attributes): Seguros`. | ||
- `Autotransporte::getRemolques(): Remolques`. | ||
- `Autotransporte::addRemolques(array $attributes): Remolques`. | ||
|
||
#### Elemento `Remolques` | ||
|
||
- `Remolques::addRemolque(array $attributes): Remolque`. | ||
- `Remolques::multiRemolque(array ...$elementAttributes): self`. | ||
|
||
#### Elemento `TransporteMaritimo` | ||
|
||
- `TransporteMaritimo::addContenedor(array $attributes): ContenedorMaritimo`. | ||
- `TransporteMaritimo::multiContenedor(array ...$elementAttributes): self`. | ||
|
||
#### Elemento `ContenedorMaritimo` | ||
|
||
- El nombre del elemento es `Contenedor`. | ||
- `ContenedorMaritimo::getRemolquesCCP(): RemolquesCCP`. | ||
- `ContenedorMaritimo::addRemolquesCCP(array $attributes): RemolquesCCP`. | ||
|
||
#### Elemento `RemolquesCCP` | ||
|
||
- `RemolquesCCP::addRemolque(array $attributes): Remolque`. | ||
- `RemolquesCCP::multiRemolque(array ...$elementAttributes): self`. | ||
|
||
#### Elemento `TransporteFerroviario` | ||
|
||
- `TransporteFerroviario::addDerechosDePaso(array $attributes): DerechosDePaso`. | ||
- `TransporteFerroviario::multiDerechosDePaso(array ...$elementAttributes): self`. | ||
- `TransporteFerroviario::addCarro(array $attributes): Carro`. | ||
- `TransporteFerroviario::multiCarro(array ...$elementAttributes): self`. | ||
|
||
#### Elemento `Carro` | ||
|
||
- `Carro::addContenedor(array $attributes): ContenedorFerroviario`. | ||
- `Carro::multiContenedor(array ...$elementAttributes): self`. | ||
|
||
#### Elemento `ContenedorFerroviario` | ||
|
||
- El nombre del elemento es `Contenedor`. | ||
|
||
#### Elemento `FiguraTransporte` | ||
|
||
- `FiguraTransporte::addTiposFigura(array $attributes): TiposFigura`. | ||
- `FiguraTransporte::multiTiposFigura(array ...$elementAttributes): self`. | ||
|
||
#### Elemento `TiposFigura` | ||
|
||
- `TiposFigura::addPartesTransporte(array $attributes): PartesTransporte`. | ||
- `TiposFigura::multiPartesTransporte(array ...$elementAttributes): self`. | ||
- `TiposFigura::getDomicilio(): Domicilio`. | ||
- `TiposFigura::addDomicilio(array $attributes): Domicilio`. | ||
|
||
### Agregar el complemento carta porte al comprobante | ||
|
||
Cuando se tiene un comprobante, se puede utilizar el método `Comprobante::addComplemento()` para insertar | ||
el elemento `CartaPorte` al comprobante. | ||
|
||
```php | ||
<?php | ||
// clase de ayuda de creación del CFDI 4.0 | ||
$creator = new \CfdiUtils\CfdiCreator40(); | ||
// acceso al elemento Comprobante (el nodo principal del CFDI) | ||
$comprobante = $creator->comprobante(); | ||
|
||
$cartaPorte = new \CfdiUtils\Elements\CartaPorte31\CartaPorte(); | ||
// ... llenar la información de $cartaPorte | ||
|
||
// agregar $cartaPorte como complemento del $comprobante | ||
$comprobante->addComplemento($cartaporte); | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
<?php | ||
|
||
namespace CfdiUtils\Elements\CartaPorte31; | ||
|
||
use CfdiUtils\Elements\Common\AbstractElement; | ||
|
||
class Autotransporte extends AbstractElement | ||
{ | ||
public function getElementName(): string | ||
{ | ||
return 'cartaporte31:Autotransporte'; | ||
} | ||
|
||
public function getChildrenOrder(): array | ||
{ | ||
return [ | ||
'cartaporte31:IdentificacionVehicular', | ||
'cartaporte31:Seguros', | ||
'cartaporte31:Remolques', | ||
]; | ||
} | ||
|
||
public function getIdentificacionVehicular(): IdentificacionVehicular | ||
{ | ||
return $this->helperGetOrAdd(new IdentificacionVehicular()); | ||
} | ||
|
||
public function addIdentificacionVehicular(array $attributes = []): IdentificacionVehicular | ||
{ | ||
$subject = $this->getIdentificacionVehicular(); | ||
$subject->addAttributes($attributes); | ||
return $subject; | ||
} | ||
|
||
public function getSeguros(): Seguros | ||
{ | ||
return $this->helperGetOrAdd(new Seguros()); | ||
} | ||
|
||
public function addSeguros(array $attributes = []): Seguros | ||
{ | ||
$subject = $this->getSeguros(); | ||
$subject->addAttributes($attributes); | ||
return $subject; | ||
} | ||
|
||
public function getRemolques(): Remolques | ||
{ | ||
return $this->helperGetOrAdd(new Remolques()); | ||
} | ||
|
||
public function addRemolques(array $attributes = []): Remolques | ||
{ | ||
$subject = $this->getRemolques(); | ||
$subject->addAttributes($attributes); | ||
return $subject; | ||
} | ||
} |
13 changes: 13 additions & 0 deletions
13
src/CfdiUtils/Elements/CartaPorte31/CantidadTransporta.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
<?php | ||
|
||
namespace CfdiUtils\Elements\CartaPorte31; | ||
|
||
use CfdiUtils\Elements\Common\AbstractElement; | ||
|
||
class CantidadTransporta extends AbstractElement | ||
{ | ||
public function getElementName(): string | ||
{ | ||
return 'cartaporte31:CantidadTransporta'; | ||
} | ||
} |
Oops, something went wrong.