Skip to content

Commit e6c53c5

Browse files
authored
Merge pull request #4 from FiscalAPI/agrega-soporte-facturas-cfdi-nomina
Agrega soporte facturas cfdi nomina
2 parents 5a23be8 + 8e8f285 commit e6c53c5

30 files changed

+5923
-479
lines changed

.github/workflows/CICD.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
- name: Set up Python
1515
uses: actions/setup-python@v4
1616
with:
17-
python-version: "3.9"
17+
python-version: "3.9.13"
1818

1919
- name: Install build dependencies
2020
run: |

CLAUDE.md

Lines changed: 86 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
44

55
## Project Overview
66

7-
FiscalAPI Python SDK - Official SDK for integrating with FiscalAPI, Mexico's electronic invoicing (CFDI 4.0) and fiscal services platform. Simplifies integration with SAT (Mexico's tax authority) for invoice creation, tax certificate management, and bulk downloads.
7+
FiscalAPI Python SDK - Official SDK for integrating with FiscalAPI, Mexico's electronic invoicing (CFDI 4.0) and fiscal services platform. Simplifies integration with SAT (Mexico's tax authority) for invoice creation, tax certificate management, payroll invoices (CFDI de Nomina), and bulk downloads.
88

99
## Build and Publish Commands
1010

@@ -21,9 +21,12 @@ twine check dist/*
2121

2222
# Publish to PyPI (requires PYPI_API_TOKEN)
2323
twine upload --username __token__ --password $PYPI_API_TOKEN dist/*
24+
25+
# Clean build artifacts
26+
rm -rf dist build fiscalapi.egg-info
2427
```
2528

26-
**Version management:** Version is defined in `setup.py`. CI/CD requires the version to match the git tag (vX.Y.Z format).
29+
**Version management:** Version is defined in `setup.py` (line 5: `VERSION = "X.Y.Z"`). CI/CD is manually triggered via `workflow_dispatch`.
2730

2831
## Architecture
2932

@@ -35,13 +38,16 @@ FiscalApiClient (Facade)
3538
├── FiscalApiSettings (Configuration)
3639
3740
└── Services (all inherit from BaseService)
38-
├── invoice_service.py → Invoice CRUD, PDF, XML, cancellation, SAT status
39-
├── people_service.py → Person/entity management
40-
├── product_service.py → Product/service catalog
41-
├── tax_file_servive.py → CSD/FIEL certificate uploads
42-
├── api_key_service.py → API key management
43-
├── catalog_service.py → SAT catalog searches
44-
└── download_*_service.py → Bulk download management
41+
├── invoice_service.py → Invoice CRUD, PDF, XML, cancellation, SAT status
42+
├── people_service.py → Person/entity management
43+
│ ├── employee_service.py → Employee data (sub-service for payroll)
44+
│ └── employer_service.py → Employer data (sub-service for payroll)
45+
├── product_service.py → Product/service catalog
46+
├── tax_file_service.py → CSD/FIEL certificate uploads
47+
├── api_key_service.py → API key management
48+
├── catalog_service.py → SAT catalog searches
49+
├── stamp_service.py → Stamp (timbres) transactions
50+
└── download_*_service.py → Bulk download management
4551
```
4652

4753
**Entry Point Pattern:**
@@ -54,23 +60,35 @@ client = FiscalApiClient(settings=settings)
5460
# Access services through client
5561
client.invoices.create(invoice)
5662
client.people.get_list(page_num, page_size)
63+
client.stamps.get_list(page_num, page_size)
5764
```
5865

5966
### Models (Pydantic v2)
6067

6168
Located in `fiscalapi/models/`:
6269
- **common_models.py** - Base DTOs: `ApiResponse[T]`, `PagedList[T]`, `ValidationFailure`, `FiscalApiSettings`
63-
- **fiscalapi_models.py** - Domain models: `Invoice`, `Person`, `Product`, `TaxFile`, and related entities
70+
- **fiscalapi_models.py** - Domain models: `Invoice`, `Person`, `Product`, `TaxFile`, payroll complements, stamp transactions
6471

6572
**Key Pattern - Field Aliasing:** Models use Pydantic `Field(alias="...")` for API JSON field mapping. When serializing, use `by_alias=True` and `exclude_none=True`.
6673

74+
### Public API Exports
75+
76+
All types are exported from the main package (`fiscalapi/__init__.py`):
77+
```python
78+
from fiscalapi import Invoice, Person, Product, FiscalApiClient, ApiResponse
79+
```
80+
81+
Also available via submodules:
82+
```python
83+
from fiscalapi.models import Invoice, Person
84+
from fiscalapi.services import InvoiceService, StampService
85+
```
86+
6787
### Two Operation Modes
6888

6989
1. **By References** - Use pre-created object IDs (faster, less data transfer)
7090
2. **By Values** - Send all field data directly (self-contained, no prior setup)
7191

72-
See `examples.py` and README.md for detailed examples of both modes.
73-
7492
### Request/Response Flow
7593

7694
1. Service method receives domain object
@@ -86,21 +104,73 @@ See `examples.py` and README.md for detailed examples of both modes.
86104

87105
## Key Files
88106

89-
- `fiscalapi/__init__.py` - Central exports for all models and services
107+
- `fiscalapi/__init__.py` - Central exports for all 85 public types (models + services)
90108
- `fiscalapi/services/base_service.py` - HTTP client, serialization, response handling
91109
- `fiscalapi/services/fiscalapi_client.py` - Main client facade
92-
- `examples.py` - 3600+ lines of usage examples (commented out)
93110
- `setup.py` - Package metadata, version, and dependencies
94111

112+
## Example Files
113+
114+
All example files are located in the `examples/` directory:
115+
116+
- `examples/examples.py` - General usage examples (all invoice types)
117+
- `examples/ejemplos-facturas-de-nomina.py` - Payroll invoice examples (13 types)
118+
- `examples/ejemplos-facturas-de-complemento-pago.py` - Payment complement examples
119+
- `examples/ejemplos-timbres.py` - Stamp service examples
120+
- `examples/ejemplos-factura-impuestos-locales-valores.py` - Local taxes examples (by values)
121+
- `examples/ejemplos-factura-impuestos-locales-referencias.py` - Local taxes examples (by references)
122+
123+
## Reference Documentation
124+
125+
- `payroll-requirements.md` - Detailed payroll implementation spec with all models, services, and SAT codes
126+
95127
## Dependencies
96128

97-
- Python >= 3.7
129+
- Python >= 3.9 (CI/CD uses Python 3.9.13)
98130
- pydantic >= 2.0.0 (validation & serialization)
99131
- requests >= 2.0.0 (HTTP client)
100132
- email_validator >= 2.2.0
101133

134+
## Development Setup
135+
136+
```bash
137+
# Create virtual environment with Python 3.9+
138+
python -m venv venv
139+
140+
# Activate (Windows)
141+
.\venv\Scripts\activate
142+
143+
# Activate (Linux/Mac)
144+
source venv/bin/activate
145+
146+
# Install dependencies
147+
pip install -r requirements.txt
148+
```
149+
150+
## Code Standards
151+
152+
### Pydantic v2 Compatibility
153+
154+
- Use `model_config = ConfigDict(...)` instead of `class Config:`
155+
- Use `list[T]` and `dict[K,V]` (Python 3.9+ built-in generics) instead of `List[T]` and `Dict[K,V]`
156+
- Use `default_factory=list` for mutable defaults, never `default=[]`
157+
- All Field() calls should have explicit `default=...` for required fields
158+
159+
### Type Annotations
160+
161+
- All service methods must have return type annotations
162+
- Use `Optional[T]` only for truly optional fields
163+
- `ApiResponse[T]` supports any type T (not just BaseModel subclasses)
164+
165+
### Adding New Services
166+
167+
1. Create service class inheriting from `BaseService` in `fiscalapi/services/`
168+
2. Export from `fiscalapi/services/__init__.py`
169+
3. Export from `fiscalapi/__init__.py`
170+
4. Add property to `FiscalApiClient` class
171+
102172
## External Resources
103173

104174
- API Documentation: https://docs.fiscalapi.com
105175
- Test Certificates: https://docs.fiscalapi.com/recursos/descargas
106-
- Postman Collection: Available in docs
176+
- Postman Collection: https://documenter.getpostman.com/view/4346593/2sB2j4eqXr

MANIFEST.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
include fiscalapi/py.typed
2+
include README.md
3+
include LICENSE.txt

README.md

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@
1010
- **Soporte completo para CFDI 4.0** con todas las especificaciones oficiales
1111
- **Timbrado de facturas de ingreso** con validación automática
1212
- **Timbrado de notas de crédito** (facturas de egreso)
13-
- **Timbrado de complementos de pago** en MXN, USD y EUR.
13+
- **Timbrado de complementos de pago** en MXN, USD y EUR
14+
- **Timbrado de facturas de nómina** - Soporte para los 13 tipos de CFDI de nómina
1415
- **Consulta del estatus de facturas** en el SAT en tiempo real
15-
- **Cancelación de facturas**
16+
- **Cancelación de facturas**
1617
- **Generación de archivos PDF** de las facturas con formato profesional
1718
- **Personalización de logos y colores** en los PDF generados
1819
- **Envío de facturas por correo electrónico** automatizado
1920
- **Descarga de archivos XML** con estructura completa
20-
- **Almacenamiento y recuperación** de facturas por 5 años.
21+
- **Almacenamiento y recuperación** de facturas por 5 años
2122
- Dos [modos de operación](https://docs.fiscalapi.com/modes-of-operation): **Por valores** o **Por referencias**
2223
- [Ejemplos en Python](https://github.com/FiscalAPI/fiscalapi-samples-python)
2324

@@ -33,6 +34,12 @@
3334
- **Administración de personas** (emisores, receptores, clientes, usuarios, etc.)
3435
- **Gestión de certificados CSD y FIEL** (subir archivos .cer y .key a FiscalAPI)
3536
- **Configuración de datos fiscales** (RFC, domicilio fiscal, régimen fiscal)
37+
- **Datos de empleado** (agrega/actualiza/elimina datos de empleado a una persona. CFDI Nómina)
38+
- **Datos de empleador** (agrega/actualiza/elimina datos de empleador a una persona. CFDI Nómina)
39+
40+
## 🎖️ Gestión de Timbres
41+
- **Gestión de folios fiscales** Compra timbres a fiscalapi y transfiere/retira a las personas de tu organizacion segun tus reglas de negocio.
42+
3643

3744
## 🛍️ Gestión de Productos/Servicios
3845
- **Gestión de productos y servicios** con catálogo personalizable
@@ -43,7 +50,13 @@
4350
- **Consulta en catálogos oficiales de Descarga masiva del SAT** actualizados
4451
- **Búsqueda de información** en catálogos del SAT con filtros avanzados
4552
- **Acceso y búsqueda** en catálogos completos
46-
53+
54+
## 🎫 Gestión de Timbres
55+
- **Listar transacciones de timbres** con paginación
56+
- **Consultar transacciones** por ID
57+
- **Transferir timbres** entre personas
58+
- **Retirar timbres** de una persona
59+
4760
## 📖 Recursos Adicionales
4861
- **Cientos de ejemplos de código** disponibles en múltiples lenguajes de programación
4962
- Documentación completa con guías paso a paso
@@ -306,12 +319,22 @@ else:
306319

307320
## 📋 Operaciones Principales
308321

309-
- **Facturas (CFDI)**
322+
- **Facturas (CFDI)**
310323
Crear facturas de ingreso, notas de crédito, complementos de pago, cancelaciones, generación de PDF/XML.
311-
- **Personas (Clientes/Emisores)**
324+
- **Personas (Clientes/Emisores)**
312325
Alta y administración de personas, gestión de certificados (CSD).
313-
- **Productos y Servicios**
326+
- **Productos y Servicios**
314327
Administración de catálogos de productos, búsqueda en catálogos SAT.
328+
- **Timbres**
329+
Listar transacciones, transferir y retirar timbres entre personas.
330+
331+
## 📂 Más Ejemplos
332+
333+
- [Gestión de Timbres](examples/ejemplos-timbres.py)
334+
- [Complementos de Pago](examples/ejemplos-facturas-de-complemento-pago.py)
335+
- [Facturas de Nómina](examples/ejemplos-facturas-de-nomina.py)
336+
- [Impuestos Locales (Por Valores)](examples/ejemplos-factura-impuestos-locales-valores.py)
337+
- [Impuestos Locales (Por Referencias)](examples/ejemplos-factura-impuestos-locales-referencias.py)
315338

316339
## 🤝 Contribuir
317340

@@ -337,11 +360,10 @@ Este proyecto está licenciado bajo la Licencia **MPL**. Consulta el archivo [LI
337360
- [Documentación Oficial](https://docs.fiscalapi.com)
338361
- [Como obtener mis credenciales](https://docs.fiscalapi.com/credentials-info)
339362
- [Portal de FiscalAPI](https://fiscalapi.com)
340-
- [Ejemplos en Python](https://github.com/FiscalAPI/fiscalapi-samples-python)
341363
- [Soporte técnico](https://fiscalapi.com/contact-us)
342-
- [Certificados prueba](https://docs.fiscalapi.com/tax-files-info)
364+
- [Certificados de prueba](https://docs.fiscalapi.com/tax-files-info)
343365
- [Postman Collection](https://documenter.getpostman.com/view/4346593/2sB2j4eqXr)
344-
- [SDKs](https://docs.fiscalapi.com/sdks)
366+
- [SDKs en otros lenguajes](https://docs.fiscalapi.com/sdks)
345367
---
346368

347369
Desarrollado con ❤️ por [Fiscalapi](https://www.fiscalapi.com)

0 commit comments

Comments
 (0)