fiscalapi 4.0.462__tar.gz → 4.0.468__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fiscalapi-4.0.462/fiscalapi.egg-info → fiscalapi-4.0.468}/PKG-INFO +1 -1
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/models/fiscalapi_models.py +5 -4
- {fiscalapi-4.0.462 → fiscalapi-4.0.468/fiscalapi.egg-info}/PKG-INFO +1 -1
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/setup.py +1 -1
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/tests/test_cycle_contract.py +30 -1
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/LICENSE.txt +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/MANIFEST.in +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/README.md +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/__init__.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/models/__init__.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/models/carta_porte_models.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/models/comercio_exterior_models.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/models/common_models.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/models/manifest_models.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/models/sat_validation_models.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/models/ticket_models.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/models/webhook_models.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/py.typed +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/__init__.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/api_key_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/base_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/catalog_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/download_catalog_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/download_request_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/download_rule_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/employee_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/employer_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/fiscalapi_client.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/invoice_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/manifest_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/people_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/product_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/sat_validation_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/stamp_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/tax_file_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/services/ticket_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi/webhooks.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi.egg-info/SOURCES.txt +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi.egg-info/dependency_links.txt +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi.egg-info/requires.txt +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/fiscalapi.egg-info/top_level.txt +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/pyproject.toml +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/setup.cfg +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/tests/test_error_trace_identifier.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/tests/test_idempotency_key.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/tests/test_invoice_item_ticket_id.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/tests/test_response_tolerance.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/tests/test_ticket_service.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/tests/test_webhook_back_interop.py +0 -0
- {fiscalapi-4.0.462 → fiscalapi-4.0.468}/tests/test_webhook_verify.py +0 -0
|
@@ -363,10 +363,10 @@ class InvoicePayment(BaseDto):
|
|
|
363
363
|
currency_code: str = Field(default="MXN", alias="currencyCode", description="Código de la moneda utilizada en el pago: una clave del catálogo c_Moneda del SAT, en mayúsculas, distinta de XXX.")
|
|
364
364
|
exchange_rate: Optional[Decimal] = Field(default=Decimal("1"), alias="exchangeRate", description="Tipo de cambio FIX conforme a la moneda registrada en la factura. Si la moneda es MXN, el tipo de cambio debe ser 1..")
|
|
365
365
|
amount: Decimal = Field(default=..., description="Monto del pago.")
|
|
366
|
-
source_bank_tin: str = Field(default
|
|
367
|
-
source_bank_account: str = Field(default
|
|
368
|
-
target_bank_tin: str = Field(default
|
|
369
|
-
target_bank_account: str = Field(default
|
|
366
|
+
source_bank_tin: Optional[str] = Field(default=None, alias="sourceBankTin", description="RFC del banco origen. (Rfc del banco emisor del pago)")
|
|
367
|
+
source_bank_account: Optional[str] = Field(default=None, alias="sourceBankAccount", description="Cuenta bancaria origen. (Cuenta bancaria del banco emisor del pago)")
|
|
368
|
+
target_bank_tin: Optional[str] = Field(default=None, alias="targetBankTin", description="RFC del banco destino. (Rfc del banco receptor del pago)")
|
|
369
|
+
target_bank_account: Optional[str] = Field(default=None, alias="targetBankAccount", description="Cuenta bancaria destino (Cuenta bancaria del banco receptor del pago)")
|
|
370
370
|
paid_invoices: list[PaidInvoice] = Field(default=..., alias="paidInvoices", description="Facturas pagadas con el pago recibido.")
|
|
371
371
|
|
|
372
372
|
model_config = ConfigDict(populate_by_name=True)
|
|
@@ -404,6 +404,7 @@ class PaymentComplement(BaseDto):
|
|
|
404
404
|
source_bank_account: Optional[str] = Field(default=None, alias="sourceBankAccount", description="Cuenta bancaria origen.")
|
|
405
405
|
target_bank_tin: Optional[str] = Field(default=None, alias="targetBankTin", description="RFC del banco destino.")
|
|
406
406
|
target_bank_account: Optional[str] = Field(default=None, alias="targetBankAccount", description="Cuenta bancaria destino.")
|
|
407
|
+
foreign_bank_name: Optional[str] = Field(default=None, alias="foreignBankName", description="Nombre del banco ordenante extranjero. Obligatorio cuando source_bank_tin es XEXX010101000.")
|
|
407
408
|
paid_invoices: Optional[list["PaidInvoice"]] = Field(default=None, alias="paidInvoices", description="Facturas pagadas.")
|
|
408
409
|
|
|
409
410
|
model_config = ConfigDict(populate_by_name=True)
|
|
@@ -25,7 +25,7 @@ from fiscalapi import (
|
|
|
25
25
|
TaxCredential,
|
|
26
26
|
TaxFile,
|
|
27
27
|
)
|
|
28
|
-
from fiscalapi.models.fiscalapi_models import ItemTax, LocalTax, PaidInvoiceTax
|
|
28
|
+
from fiscalapi.models.fiscalapi_models import ItemTax, LocalTax, PaidInvoiceTax, PaymentComplement
|
|
29
29
|
|
|
30
30
|
BASE_URL = "https://sdk-tests.fiscalapi.invalid/api/v4"
|
|
31
31
|
PERSON_ID = "4b1c2d3e-0000-4000-8000-000000000002"
|
|
@@ -189,3 +189,32 @@ def test_invoice_payment_accepts_any_currency_code_and_defaults_to_mxn():
|
|
|
189
189
|
|
|
190
190
|
assert InvoicePayment(currency_code="CAD", **common).model_dump(by_alias=True)["currencyCode"] == "CAD"
|
|
191
191
|
assert InvoicePayment(**common).currency_code == "MXN"
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
BANK_KEYS = ("sourceBankTin", "sourceBankAccount", "targetBankTin", "targetBankAccount")
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def test_invoice_payment_bank_fields_are_optional_and_sent_as_given():
|
|
198
|
+
common = dict(payment_date="2026-10-08T10:00:00", amount=Decimal("100"), paid_invoices=[])
|
|
199
|
+
bank = dict(
|
|
200
|
+
source_bank_tin="BSM970519DU8",
|
|
201
|
+
source_bank_account="1234567891012131",
|
|
202
|
+
target_bank_tin="BBA830831LJ2",
|
|
203
|
+
target_bank_account="1234567890",
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
cash = InvoicePayment(payment_form_code="01", **common).model_dump(by_alias=True, exclude_none=True)
|
|
207
|
+
card = InvoicePayment(payment_form_code="28", **common, **bank).model_dump(by_alias=True, exclude_none=True)
|
|
208
|
+
|
|
209
|
+
assert not set(BANK_KEYS) & cash.keys()
|
|
210
|
+
assert [card[key] for key in BANK_KEYS] == list(bank.values())
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
def test_payment_complement_sends_foreign_bank_name_only_when_given():
|
|
214
|
+
common = dict(payment_date="2026-10-08T10:00:00", payment_form_code="03", amount=Decimal("100"))
|
|
215
|
+
|
|
216
|
+
foreign = PaymentComplement(source_bank_tin="XEXX010101000", foreign_bank_name="BANK OF TOKY", **common)
|
|
217
|
+
national = PaymentComplement(source_bank_tin="BSM970519DU8", **common)
|
|
218
|
+
|
|
219
|
+
assert foreign.model_dump(by_alias=True, exclude_none=True)["foreignBankName"] == "BANK OF TOKY"
|
|
220
|
+
assert "foreignBankName" not in national.model_dump(by_alias=True, exclude_none=True)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|