diff --git a/.gitattributes b/.gitattributes
index 1ff0c42..dff5e68 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -61,3 +61,380 @@
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain
+
+# BEGIN generated SDK
+Models/Address.cs linguist-generated=true
+Models/ApiEvent.cs linguist-generated=true
+Models/ApiEventData.JsonConverter.cs linguist-generated=true
+Models/ApiEventData.cs linguist-generated=true
+Models/CartaPorteAutotransporte.cs linguist-generated=true
+Models/CartaPorteCantidadTransporta.cs linguist-generated=true
+Models/CartaPorteCarroFerroviario.cs linguist-generated=true
+Models/CartaPorteContenedorFerroviario.cs linguist-generated=true
+Models/CartaPorteContenedorMaritimo.cs linguist-generated=true
+Models/CartaPorteContenedorMaritimoRemolquesCCPItem.cs linguist-generated=true
+Models/CartaPorteDataProperties.cs linguist-generated=true
+Models/CartaPorteDataPropertiesFiguraTransporteItem.cs linguist-generated=true
+Models/CartaPorteDataPropertiesFiguraTransporteItemPartesTransporteItem.cs linguist-generated=true
+Models/CartaPorteDataPropertiesUbicacionesItem.cs linguist-generated=true
+Models/CartaPorteDerechosDePaso.cs linguist-generated=true
+Models/CartaPorteDetalleMercancia.cs linguist-generated=true
+Models/CartaPorteDocumentacionAduanera.cs linguist-generated=true
+Models/CartaPorteDomicilio.cs linguist-generated=true
+Models/CartaPorteGuiaIdentificacion.cs linguist-generated=true
+Models/CartaPorteIdentificacionVehicular.cs linguist-generated=true
+Models/CartaPorteMercancia.cs linguist-generated=true
+Models/CartaPorteMercancias.cs linguist-generated=true
+Models/CartaPorteRemolque.cs linguist-generated=true
+Models/CartaPorteSeguros.cs linguist-generated=true
+Models/CartaPorteTransporteAereo.cs linguist-generated=true
+Models/CartaPorteTransporteFerroviario.cs linguist-generated=true
+Models/CartaPorteTransporteMaritimo.cs linguist-generated=true
+Models/CatalogItem.cs linguist-generated=true
+Models/Certificate.cs linguist-generated=true
+Models/CheckApiHealthResponse.cs linguist-generated=true
+Models/ComercioExteriorDataProperties.cs linguist-generated=true
+Models/ComercioExteriorDataPropertiesDestinatarioItem.cs linguist-generated=true
+Models/ComercioExteriorDataPropertiesPropietarioItem.cs linguist-generated=true
+Models/ComercioExteriorDataPropertiesReceptor.cs linguist-generated=true
+Models/ComercioExteriorDescripcionesEspecificas.cs linguist-generated=true
+Models/ComercioExteriorDomicilio.cs linguist-generated=true
+Models/ComercioExteriorEmisor.cs linguist-generated=true
+Models/ComercioExteriorMercancia.cs linguist-generated=true
+Models/ComercioExteriorMercancias.cs linguist-generated=true
+Models/CompletionStep.cs linguist-generated=true
+Models/CreateInvoiceResponse.cs linguist-generated=true
+Models/CreateToInvoiceFromReceiptsResponse.cs linguist-generated=true
+Models/CreateToInvoiceFromReceiptsResponseTaxes.cs linguist-generated=true
+Models/Customer.cs linguist-generated=true
+Models/CustomerEditLinkEmailResult.cs linguist-generated=true
+Models/CustomerInfo.cs linguist-generated=true
+Models/Customization.cs linguist-generated=true
+Models/CustomizationDefaultSeries.cs linguist-generated=true
+Models/CustomizationPdfExtra.cs linguist-generated=true
+Models/CustomizationPdfExtraPayrollOptions.cs linguist-generated=true
+Models/DomainAvailability.cs linguist-generated=true
+Models/Efos.cs linguist-generated=true
+Models/EfosData.cs linguist-generated=true
+Models/EfosDetalle.cs linguist-generated=true
+Models/ErrorDetail.cs linguist-generated=true
+Models/FielCertificate.cs linguist-generated=true
+Models/GenericError.cs linguist-generated=true
+Models/Global.cs linguist-generated=true
+Models/HidroYPetroComplement.cs linguist-generated=true
+Models/IeduComplement.cs linguist-generated=true
+Models/Inputs/CancellationQueryInput.cs linguist-generated=true
+Models/Inputs/CancellationWithSubstitutionInput.cs linguist-generated=true
+Models/Inputs/CartaPorteAutotransporteInput.cs linguist-generated=true
+Models/Inputs/CartaPorteCantidadTransportaInput.cs linguist-generated=true
+Models/Inputs/CartaPorteCarroFerroviarioInput.cs linguist-generated=true
+Models/Inputs/CartaPorteContenedorFerroviarioInput.cs linguist-generated=true
+Models/Inputs/CartaPorteContenedorMaritimoInput.cs linguist-generated=true
+Models/Inputs/CartaPorteContenedorMaritimoInputRemolquesCCPItem.cs linguist-generated=true
+Models/Inputs/CartaPorteDataPropertiesInput.cs linguist-generated=true
+Models/Inputs/CartaPorteDataPropertiesInputFiguraTransporteItem.cs linguist-generated=true
+Models/Inputs/CartaPorteDataPropertiesInputFiguraTransporteItemPartesTransporteItem.cs linguist-generated=true
+Models/Inputs/CartaPorteDataPropertiesInputUbicacionesItem.cs linguist-generated=true
+Models/Inputs/CartaPorteDerechosDePasoInput.cs linguist-generated=true
+Models/Inputs/CartaPorteDetalleMercanciaInput.cs linguist-generated=true
+Models/Inputs/CartaPorteDocumentacionAduaneraInput.cs linguist-generated=true
+Models/Inputs/CartaPorteDomicilioInput.cs linguist-generated=true
+Models/Inputs/CartaPorteGuiaIdentificacionInput.cs linguist-generated=true
+Models/Inputs/CartaPorteIdentificacionVehicularInput.cs linguist-generated=true
+Models/Inputs/CartaPorteInput.cs linguist-generated=true
+Models/Inputs/CartaPorteMercanciaInput.cs linguist-generated=true
+Models/Inputs/CartaPorteMercanciasInput.cs linguist-generated=true
+Models/Inputs/CartaPorteRemolqueInput.cs linguist-generated=true
+Models/Inputs/CartaPorteSegurosInput.cs linguist-generated=true
+Models/Inputs/CartaPorteTransporteAereoInput.cs linguist-generated=true
+Models/Inputs/CartaPorteTransporteFerroviarioInput.cs linguist-generated=true
+Models/Inputs/CartaPorteTransporteMaritimoInput.cs linguist-generated=true
+Models/Inputs/CartaporteCatalogSearchAirTransportCodesParams.cs linguist-generated=true
+Models/Inputs/CartaporteCatalogSearchCustomsDocumentsParams.cs linguist-generated=true
+Models/Inputs/CartaporteCatalogSearchHazardousMaterialsParams.cs linguist-generated=true
+Models/Inputs/CartaporteCatalogSearchMarineContainersParams.cs linguist-generated=true
+Models/Inputs/CartaporteCatalogSearchNavalAuthorizationsParams.cs linguist-generated=true
+Models/Inputs/CartaporteCatalogSearchPackagingTypesParams.cs linguist-generated=true
+Models/Inputs/CartaporteCatalogSearchPortStationsParams.cs linguist-generated=true
+Models/Inputs/CartaporteCatalogSearchRightsOfPassageParams.cs linguist-generated=true
+Models/Inputs/CartaporteCatalogSearchTrailerTypesParams.cs linguist-generated=true
+Models/Inputs/CartaporteCatalogSearchTransportConfigsParams.cs linguist-generated=true
+Models/Inputs/CatalogGetProductCategoryParams.cs linguist-generated=true
+Models/Inputs/CatalogSearchCountriesParams.cs linguist-generated=true
+Models/Inputs/CatalogSearchInvoiceUsesParams.cs linguist-generated=true
+Models/Inputs/CatalogSearchProductsParams.cs linguist-generated=true
+Models/Inputs/CatalogSearchTaxSystemsParams.cs linguist-generated=true
+Models/Inputs/CatalogSearchUnitsParams.cs linguist-generated=true
+Models/Inputs/CatalogSearchZipCodesParams.cs linguist-generated=true
+Models/Inputs/ComercioExteriorCatalogSearchTariffFractionsParams.cs linguist-generated=true
+Models/Inputs/ComercioExteriorDataInput.cs linguist-generated=true
+Models/Inputs/ComercioExteriorDataInputDestinatarioItem.cs linguist-generated=true
+Models/Inputs/ComercioExteriorDataInputPropietarioItem.cs linguist-generated=true
+Models/Inputs/ComercioExteriorDescripcionesEspecificasInput.cs linguist-generated=true
+Models/Inputs/ComercioExteriorDomicilioInput.cs linguist-generated=true
+Models/Inputs/ComercioExteriorEmisorInput.cs linguist-generated=true
+Models/Inputs/ComercioExteriorInput.cs linguist-generated=true
+Models/Inputs/ComercioExteriorMercanciaInput.cs linguist-generated=true
+Models/Inputs/ComercioExteriorMercanciasInput.cs linguist-generated=true
+Models/Inputs/ComercioExteriorReceptorInput.cs linguist-generated=true
+Models/Inputs/CustomComplementInput.cs linguist-generated=true
+Models/Inputs/CustomerComercioExteriorInput.cs linguist-generated=true
+Models/Inputs/CustomerCreateCommonInput.cs linguist-generated=true
+Models/Inputs/CustomerCreateInput.cs linguist-generated=true
+Models/Inputs/CustomerCreateParams.cs linguist-generated=true
+Models/Inputs/CustomerCreateWithEditLinkInput.cs linguist-generated=true
+Models/Inputs/CustomerCreateWithEditLinkInputAddress.cs linguist-generated=true
+Models/Inputs/CustomerEditableInput.cs linguist-generated=true
+Models/Inputs/CustomerEditableInputAddress.cs linguist-generated=true
+Models/Inputs/CustomerForeignAddressInput.cs linguist-generated=true
+Models/Inputs/CustomerForeignCreateInput.cs linguist-generated=true
+Models/Inputs/CustomerGenericCreateInput.cs linguist-generated=true
+Models/Inputs/CustomerGenericCreateInputAddress.cs linguist-generated=true
+Models/Inputs/CustomerListParams.cs linguist-generated=true
+Models/Inputs/CustomerNationalAddressInput.cs linguist-generated=true
+Models/Inputs/CustomerNationalCreateInput.cs linguist-generated=true
+Models/Inputs/CustomerUpdateInput.cs linguist-generated=true
+Models/Inputs/CustomerUpdateInputAddress.cs linguist-generated=true
+Models/Inputs/CustomerUpdateParams.cs linguist-generated=true
+Models/Inputs/CustomerUpdateWithEditLinkInput.cs linguist-generated=true
+Models/Inputs/CustomerUpdateWithEditLinkInputAddress.cs linguist-generated=true
+Models/Inputs/DateRangeInput.cs linguist-generated=true
+Models/Inputs/GlobalInvoiceCommonInput.cs linguist-generated=true
+Models/Inputs/GlobalInvoiceInput.cs linguist-generated=true
+Models/Inputs/HidroYPetroComplementInput.cs linguist-generated=true
+Models/Inputs/IeduComplementInput.cs linguist-generated=true
+Models/Inputs/InvoiceCommonEditInput.cs linguist-generated=true
+Models/Inputs/InvoiceCommonEditInputAddress.cs linguist-generated=true
+Models/Inputs/InvoiceCommonInput.cs linguist-generated=true
+Models/Inputs/InvoiceCommonInputAddress.cs linguist-generated=true
+Models/Inputs/InvoiceComplementInput.cs linguist-generated=true
+Models/Inputs/InvoiceCreateInput.cs linguist-generated=true
+Models/Inputs/InvoiceCreateInputGlobal.cs linguist-generated=true
+Models/Inputs/InvoiceCreateParams.cs linguist-generated=true
+Models/Inputs/InvoiceDraftCommonInput.cs linguist-generated=true
+Models/Inputs/InvoiceEgresoDraftInput.cs linguist-generated=true
+Models/Inputs/InvoiceEgresoEditInput.cs linguist-generated=true
+Models/Inputs/InvoiceEgresoInput.cs linguist-generated=true
+Models/Inputs/InvoiceGetPaymentSummaryParams.cs linguist-generated=true
+Models/Inputs/InvoiceIngresoDraftInput.cs linguist-generated=true
+Models/Inputs/InvoiceIngresoEditInput.cs linguist-generated=true
+Models/Inputs/InvoiceIngresoInput.cs linguist-generated=true
+Models/Inputs/InvoiceItemEgresoInput.cs linguist-generated=true
+Models/Inputs/InvoiceItemInput.cs linguist-generated=true
+Models/Inputs/InvoiceItemInputThirdParty.cs linguist-generated=true
+Models/Inputs/InvoiceItemProductEgresoInput.cs linguist-generated=true
+Models/Inputs/InvoiceItemProductInput.cs linguist-generated=true
+Models/Inputs/InvoiceItemProductTrasladoInput.cs linguist-generated=true
+Models/Inputs/InvoiceItemThirdPartyInput.cs linguist-generated=true
+Models/Inputs/InvoiceItemTrasladoInput.cs linguist-generated=true
+Models/Inputs/InvoiceItemTrasladoInputThirdParty.cs linguist-generated=true
+Models/Inputs/InvoiceListParams.cs linguist-generated=true
+Models/Inputs/InvoiceListZipRequestsParams.cs linguist-generated=true
+Models/Inputs/InvoiceNominaDraftInput.cs linguist-generated=true
+Models/Inputs/InvoiceNominaEditInput.cs linguist-generated=true
+Models/Inputs/InvoiceNominaInput.cs linguist-generated=true
+Models/Inputs/InvoicePagoDraftInput.cs linguist-generated=true
+Models/Inputs/InvoicePagoEditInput.cs linguist-generated=true
+Models/Inputs/InvoicePagoInput.cs linguist-generated=true
+Models/Inputs/InvoiceReceiptInput.cs linguist-generated=true
+Models/Inputs/InvoiceStampDraftParams.cs linguist-generated=true
+Models/Inputs/InvoiceTrasladoDraftInput.cs linguist-generated=true
+Models/Inputs/InvoiceTrasladoEditInput.cs linguist-generated=true
+Models/Inputs/InvoiceTrasladoInput.cs linguist-generated=true
+Models/Inputs/InvoiceZipRequestCreateInput.cs linguist-generated=true
+Models/Inputs/InvoiceableCommonEditInput.cs linguist-generated=true
+Models/Inputs/InvoiceableCommonEditInputPdfOptions.cs linguist-generated=true
+Models/Inputs/InvoiceableCommonEditInputPdfOptionsPayrollOptions.cs linguist-generated=true
+Models/Inputs/InvoiceableCommonInput.cs linguist-generated=true
+Models/Inputs/InvoiceableCommonInputPdfOptions.cs linguist-generated=true
+Models/Inputs/InvoiceableCommonInputPdfOptionsPayrollOptions.cs linguist-generated=true
+Models/Inputs/LeyendasFiscalesDataInput.cs linguist-generated=true
+Models/Inputs/LeyendasFiscalesDataInputLeyendasItem.cs linguist-generated=true
+Models/Inputs/LeyendasFiscalesInput.cs linguist-generated=true
+Models/Inputs/LocalTaxInput.cs linguist-generated=true
+Models/Inputs/NamespaceInput.cs linguist-generated=true
+Models/Inputs/NominaAccionesInput.cs linguist-generated=true
+Models/Inputs/NominaCatalogSearchDeductionsParams.cs linguist-generated=true
+Models/Inputs/NominaCatalogSearchPerceptionsParams.cs linguist-generated=true
+Models/Inputs/NominaCompensacionInput.cs linguist-generated=true
+Models/Inputs/NominaComplementDataInput.cs linguist-generated=true
+Models/Inputs/NominaComplementDataInputOtrosPagosItem.cs linguist-generated=true
+Models/Inputs/NominaComplementDataNestedInput.cs linguist-generated=true
+Models/Inputs/NominaComplementInput.cs linguist-generated=true
+Models/Inputs/NominaDeduccionInput.cs linguist-generated=true
+Models/Inputs/NominaEmisorInput.cs linguist-generated=true
+Models/Inputs/NominaEmisorInputEntidadSncf.cs linguist-generated=true
+Models/Inputs/NominaEntidadSncfInput.cs linguist-generated=true
+Models/Inputs/NominaHorasExtraInput.cs linguist-generated=true
+Models/Inputs/NominaIncapacidadInput.cs linguist-generated=true
+Models/Inputs/NominaJubilacionInput.cs linguist-generated=true
+Models/Inputs/NominaOtroPagoInput.cs linguist-generated=true
+Models/Inputs/NominaPercepcionInput.cs linguist-generated=true
+Models/Inputs/NominaPercepcionNestedInput.cs linguist-generated=true
+Models/Inputs/NominaPercepcionesInput.cs linguist-generated=true
+Models/Inputs/NominaReceptorInput.cs linguist-generated=true
+Models/Inputs/NominaReceptorNestedInput.cs linguist-generated=true
+Models/Inputs/NominaSeparacionInput.cs linguist-generated=true
+Models/Inputs/NominaSubContratacionInput.cs linguist-generated=true
+Models/Inputs/OrganizationCertsInput.cs linguist-generated=true
+Models/Inputs/OrganizationCheckDomainIsAvailableParams.cs linguist-generated=true
+Models/Inputs/OrganizationCreateInput.cs linguist-generated=true
+Models/Inputs/OrganizationCustomizationInput.cs linguist-generated=true
+Models/Inputs/OrganizationCustomizationInputPdfExtra.cs linguist-generated=true
+Models/Inputs/OrganizationCustomizationInputPdfExtraPayrollOptions.cs linguist-generated=true
+Models/Inputs/OrganizationDomainInput.cs linguist-generated=true
+Models/Inputs/OrganizationFielInput.cs linguist-generated=true
+Models/Inputs/OrganizationInviteCreateInput.cs linguist-generated=true
+Models/Inputs/OrganizationInviteRespondInput.cs linguist-generated=true
+Models/Inputs/OrganizationLegalInput.cs linguist-generated=true
+Models/Inputs/OrganizationLegalInputAddress.cs linguist-generated=true
+Models/Inputs/OrganizationListParams.cs linguist-generated=true
+Models/Inputs/OrganizationLogoInput.cs linguist-generated=true
+Models/Inputs/OrganizationPermissionRoleCreateInput.cs linguist-generated=true
+Models/Inputs/OrganizationPermissionRoleUpdateInput.cs linguist-generated=true
+Models/Inputs/OrganizationReceiptsInput.cs linguist-generated=true
+Models/Inputs/OrganizationSelfInvoiceInput.cs linguist-generated=true
+Models/Inputs/OrganizationSeriesCreateInput.cs linguist-generated=true
+Models/Inputs/OrganizationSeriesDefaultInput.cs linguist-generated=true
+Models/Inputs/OrganizationSeriesUpdateInput.cs linguist-generated=true
+Models/Inputs/OrganizationUserAccessRoleUpdateInput.cs linguist-generated=true
+Models/Inputs/PagoComplementInput.cs linguist-generated=true
+Models/Inputs/PartInput.cs linguist-generated=true
+Models/Inputs/PaymentInput.cs linguist-generated=true
+Models/Inputs/PaymentInputRelatedDocumentsItem.cs linguist-generated=true
+Models/Inputs/PaymentInputRelatedDocumentsItemTaxesItem.cs linguist-generated=true
+Models/Inputs/ProductCreateInput.cs linguist-generated=true
+Models/Inputs/ProductListParams.cs linguist-generated=true
+Models/Inputs/ProductUpdateInput.cs linguist-generated=true
+Models/Inputs/ReceiptAssignCustomerInput.cs linguist-generated=true
+Models/Inputs/ReceiptInput.cs linguist-generated=true
+Models/Inputs/ReceiptInputAddress.cs linguist-generated=true
+Models/Inputs/ReceiptListParams.cs linguist-generated=true
+Models/Inputs/RelatedDocumentInput.cs linguist-generated=true
+Models/Inputs/RetentionInput.cs linguist-generated=true
+Models/Inputs/RetentionInputPeriodo.cs linguist-generated=true
+Models/Inputs/RetentionInputTotales.cs linguist-generated=true
+Models/Inputs/RetentionInputTotalesImpRetenidosItem.cs linguist-generated=true
+Models/Inputs/RetentionListParams.cs linguist-generated=true
+Models/Inputs/RetentionUpdateInput.cs linguist-generated=true
+Models/Inputs/SendEditLinkByEmailInput.cs linguist-generated=true
+Models/Inputs/SendInvoiceByEmailInput.cs linguist-generated=true
+Models/Inputs/SendReceiptByEmailInput.cs linguist-generated=true
+Models/Inputs/SendRetentionByEmailInput.cs linguist-generated=true
+Models/Inputs/TaxInput.cs linguist-generated=true
+Models/Inputs/ToInvoiceInput.cs linguist-generated=true
+Models/Inputs/ToInvoicePreviewInput.cs linguist-generated=true
+Models/Inputs/ToolValidateTaxIdParams.cs linguist-generated=true
+Models/Inputs/UpdateDraftInvoiceInput.cs linguist-generated=true
+Models/Inputs/ValidateWebhookSignatureInput.cs linguist-generated=true
+Models/Inputs/WebhookCreateInput.cs linguist-generated=true
+Models/Inputs/WebhookListParams.cs linguist-generated=true
+Models/Inputs/WebhookUpdateInput.cs linguist-generated=true
+Models/Invoice.cs linguist-generated=true
+Models/InvoiceCancellation.cs linguist-generated=true
+Models/InvoiceComplementProperties.cs linguist-generated=true
+Models/InvoiceDraft.cs linguist-generated=true
+Models/InvoiceFailed.cs linguist-generated=true
+Models/InvoiceItem.cs linguist-generated=true
+Models/InvoiceItemPart.cs linguist-generated=true
+Models/InvoiceItemThirdParty.cs linguist-generated=true
+Models/InvoicePending.cs linguist-generated=true
+Models/InvoiceStamped.cs linguist-generated=true
+Models/InvoiceZipRequest.cs linguist-generated=true
+Models/Legal.cs linguist-generated=true
+Models/LegalAddress.cs linguist-generated=true
+Models/LeyendasFiscalesData.cs linguist-generated=true
+Models/LeyendasFiscalesDataLeyendasItem.cs linguist-generated=true
+Models/LiveApiKey.cs linguist-generated=true
+Models/LocalTax.cs linguist-generated=true
+Models/Namespace.cs linguist-generated=true
+Models/NominaAccionesProperties.cs linguist-generated=true
+Models/NominaCompensacionProperties.cs linguist-generated=true
+Models/NominaComplementDataProperties.cs linguist-generated=true
+Models/NominaComplementDataPropertiesOtrosPagosItem.cs linguist-generated=true
+Models/NominaDeduccionProperties.cs linguist-generated=true
+Models/NominaEmisorProperties.cs linguist-generated=true
+Models/NominaEmisorPropertiesEntidadSncf.cs linguist-generated=true
+Models/NominaHorasExtraProperties.cs linguist-generated=true
+Models/NominaIncapacidadProperties.cs linguist-generated=true
+Models/NominaJubilacionProperties.cs linguist-generated=true
+Models/NominaPercepcionProperties.cs linguist-generated=true
+Models/NominaPercepcionesProperties.cs linguist-generated=true
+Models/NominaReceptorProperties.cs linguist-generated=true
+Models/NominaSeparacionProperties.cs linguist-generated=true
+Models/NominaSubContratacionProperties.cs linguist-generated=true
+Models/OkResponse.cs linguist-generated=true
+Models/OneOf2.cs linguist-generated=true
+Models/OneOf3.cs linguist-generated=true
+Models/OneOf4.cs linguist-generated=true
+Models/OneOf6.cs linguist-generated=true
+Models/OneOf7.cs linguist-generated=true
+Models/Organization.cs linguist-generated=true
+Models/OrganizationDeleteCerts.cs linguist-generated=true
+Models/OrganizationInvite.cs linguist-generated=true
+Models/OrganizationPendingAddOnsUpdate.cs linguist-generated=true
+Models/OrganizationPendingPlanUpdate.cs linguist-generated=true
+Models/OrganizationReceipts.cs linguist-generated=true
+Models/OrganizationSeriesDeletion.cs linguist-generated=true
+Models/OrganizationTeamRole.cs linguist-generated=true
+Models/OrganizationTeamRoleTemplate.cs linguist-generated=true
+Models/OrganizationUserAccess.cs linguist-generated=true
+Models/Payment.cs linguist-generated=true
+Models/PaymentRelated.cs linguist-generated=true
+Models/PaymentRelatedDocumentsItem.cs linguist-generated=true
+Models/PaymentRelatedDocumentsItemTaxesItem.cs linguist-generated=true
+Models/PaymentSummary.cs linguist-generated=true
+Models/PaymentSummaryTax.cs linguist-generated=true
+Models/Product.cs linguist-generated=true
+Models/ProductCategory.cs linguist-generated=true
+Models/ProductCategoryDetail.cs linguist-generated=true
+Models/ProductCategoryList.cs linguist-generated=true
+Models/ProductInfo.cs linguist-generated=true
+Models/Receipt.cs linguist-generated=true
+Models/ReceiptInvoiceSummaryTax.cs linguist-generated=true
+Models/RelatedResourceMessage.cs linguist-generated=true
+Models/Retention.cs linguist-generated=true
+Models/RetentionPeriod.cs linguist-generated=true
+Models/RetentionRetainedTax.cs linguist-generated=true
+Models/RetentionTotals.cs linguist-generated=true
+Models/SearchCartaPorteNavalAuthorizationsResponseDataItem.cs linguist-generated=true
+Models/SearchResult.cs linguist-generated=true
+Models/SelfInvoiceSettings.cs linguist-generated=true
+Models/SendInvoiceByEmailResponse.cs linguist-generated=true
+Models/SendReceiptByEmailResponse.cs linguist-generated=true
+Models/SendRetentionByEmailResponse.cs linguist-generated=true
+Models/SeriesGroup.cs linguist-generated=true
+Models/SignedDownloadUrl.cs linguist-generated=true
+Models/Stamp.cs linguist-generated=true
+Models/Tax.cs linguist-generated=true
+Models/TaxIdValidation.cs linguist-generated=true
+Models/TaxInfoError.cs linguist-generated=true
+Models/TaxInfoValidation.cs linguist-generated=true
+Models/ToInvoiceSummary.cs linguist-generated=true
+Models/Webhook.cs linguist-generated=true
+Models/ZipCode.cs linguist-generated=true
+Wrappers/CartaporteCatalogWrapper.cs linguist-generated=true
+Wrappers/CatalogWrapper.cs linguist-generated=true
+Wrappers/ComercioExteriorCatalogWrapper.cs linguist-generated=true
+Wrappers/CustomerWrapper.cs linguist-generated=true
+Wrappers/ICartaporteCatalogWrapper.cs linguist-generated=true
+Wrappers/ICatalogWrapper.cs linguist-generated=true
+Wrappers/IComercioExteriorCatalogWrapper.cs linguist-generated=true
+Wrappers/ICustomerWrapper.cs linguist-generated=true
+Wrappers/IInvoiceWrapper.cs linguist-generated=true
+Wrappers/INominaCatalogWrapper.cs linguist-generated=true
+Wrappers/IOrganizationWrapper.cs linguist-generated=true
+Wrappers/IProductWrapper.cs linguist-generated=true
+Wrappers/IReceiptWrapper.cs linguist-generated=true
+Wrappers/IRetentionWrapper.cs linguist-generated=true
+Wrappers/IToolWrapper.cs linguist-generated=true
+Wrappers/IWebhookWrapper.cs linguist-generated=true
+Wrappers/InvoiceWrapper.cs linguist-generated=true
+Wrappers/NominaCatalogWrapper.cs linguist-generated=true
+Wrappers/OrganizationWrapper.cs linguist-generated=true
+Wrappers/ProductWrapper.cs linguist-generated=true
+Wrappers/ReceiptWrapper.cs linguist-generated=true
+Wrappers/RetentionWrapper.cs linguist-generated=true
+Wrappers/ToolWrapper.cs linguist-generated=true
+Wrappers/WebhookWrapper.cs linguist-generated=true
+# END generated SDK
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 65fbf91..842b768 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -56,3 +56,16 @@ jobs:
- name: Test
run: dotnet test FacturapiTest/FacturapiTest.csproj --framework ${{ matrix.test_framework }} --configuration Release --no-build
+
+ codegen:
+ name: Verify generated SDK
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-node@v4
+ with:
+ node-version: '24'
+ - uses: pnpm/action-setup@v4
+ - run: pnpm install --frozen-lockfile
+ - run: pnpm test:codegen
+ - run: pnpm generate:sdk:check
diff --git a/.gitignore b/.gitignore
index 9491a2f..023fd57 100644
--- a/.gitignore
+++ b/.gitignore
@@ -360,4 +360,6 @@ MigrationBackup/
.ionide/
# Fody - auto-generated XML schema
-FodyWeavers.xsd
\ No newline at end of file
+FodyWeavers.xsd
+# SDK generation tooling
+node_modules/
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5d49595..3d51837 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,27 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [8.0.0] - 2026-11-13
+
+### Breaking
+
+- Align response models with the API contract, including nullable dates and optional fields, decimal numeric values, typed nested objects, and corrected property names. See the README migration guide.
+- Retention methods return retention models; ZIP requests expose typed models; organization key and series operations return the documented lists. Receipt invoicing and email methods expose their API results.
+- Webhook signature verification returns `ApiEvent` and runs locally. Explicit remote verification preserves string or object payload responses.
+
+### Added
+
+- Typed inputs, filters and XML documentation across all public API operations, including invoice and retention downloads, signed URLs, receipt assignment and summaries, FIEL uploads, product categories, geographic and fiscal catalogs, and foreign-trade catalogs.
+- Invoice creation variants for Ingreso, Egreso, Pago, Nómina and Traslado, partial draft inputs, and cancellation inputs that require a substitution document when applicable.
+- Typed complements for payments, payroll, Carta Porte, foreign trade and fiscal legends, preserving custom XML and open JSON values.
+- Typed API error details through `FacturapiException.ErrorDetails`, retaining the original `Errors` JSON.
+- `OneOf` alternatives with implicit conversions and response inspection, and input dates accepting ISO strings, `DateTime` or `DateTimeOffset`.
+
+### Fixed
+
+- Preserve omitted fields versus explicit nulls and serialize boolean, numeric and date query values using their wire formats.
+- Decode webhook event objects according to their declared resource type without making an HTTP request for local signature verification.
+
## [7.1.0] - 2026-10-07
### Added
diff --git a/FacturAPIException.cs b/FacturAPIException.cs
index a87a792..d9c174a 100644
--- a/FacturAPIException.cs
+++ b/FacturAPIException.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
@@ -11,6 +11,8 @@ public class FacturapiException : Exception
public string Path { get; private set; }
public string Location { get; private set; }
public JArray Errors { get; private set; }
+ /// Detalles de error tipados. Errors conserva el JSON original para accesos dinámicos.
+ public IReadOnlyList ErrorDetails => Errors?.ToObject() ?? Array.Empty();
public string LogId { get; private set; }
public IReadOnlyDictionary Headers { get; private set; }
diff --git a/FacturapiClient.cs b/FacturapiClient.cs
index 485b398..ae1eeaf 100644
--- a/FacturapiClient.cs
+++ b/FacturapiClient.cs
@@ -17,6 +17,8 @@ public sealed class FacturapiClient : IFacturapiClient
public ICatalogWrapper Catalog { get; private set; }
public ICartaporteCatalogWrapper CartaporteCatalog { get; private set; }
public INominaCatalogWrapper NominaCatalog { get; private set; }
+ /// Busca claves y descripciones de fracciones arancelarias de comercio exterior.
+ public IComercioExteriorCatalogWrapper ComercioExteriorCatalog { get; private set; }
public IToolWrapper Tool { get; private set; }
public IWebhookWrapper Webhook { get; private set; }
private readonly HttpClient httpClient;
@@ -43,6 +45,7 @@ private FacturapiClient(string apiKey, string apiVersion, HttpClient httpClient,
this.Catalog = new CatalogWrapper(apiKey, apiVersion, this.httpClient);
this.CartaporteCatalog = new CartaporteCatalogWrapper(apiKey, apiVersion, this.httpClient);
this.NominaCatalog = new NominaCatalogWrapper(apiKey, apiVersion, this.httpClient);
+ this.ComercioExteriorCatalog = new ComercioExteriorCatalogWrapper(apiKey, apiVersion, this.httpClient);
this.Tool = new ToolWrapper(apiKey, apiVersion, this.httpClient);
this.Webhook = new WebhookWrapper(apiKey, apiVersion, this.httpClient);
}
diff --git a/FacturapiTest/ClientCompatibilityTests.cs b/FacturapiTest/ClientCompatibilityTests.cs
index af69126..9eca8a8 100644
--- a/FacturapiTest/ClientCompatibilityTests.cs
+++ b/FacturapiTest/ClientCompatibilityTests.cs
@@ -22,7 +22,7 @@ public void Router_ListCustomers_SkipsNullQueryValues()
[""] = "ignored"
};
- var url = Router.ListCustomers(query);
+ var url = Router.UriWithQuery("customers", query);
Assert.Equal("customers", url);
}
@@ -32,12 +32,14 @@ public void Router_ListCustomers_SendsExplicitEmptyQueryValues()
{
var query = new Dictionary
{
- ["foo"] = ""
+ ["foo"] = "",
+ ["enabled"] = true,
+ ["disabled"] = false
};
- var url = Router.ListCustomers(query);
+ var url = Router.UriWithQuery("customers", query);
- Assert.Equal("customers?foo=", url);
+ Assert.Equal("customers?foo=&enabled=true&disabled=false", url);
}
[Fact]
@@ -63,6 +65,7 @@ public async Task RetentionCancelAsync_ThrowsFacturapiExceptionWithStatus()
Assert.Equal(400, exception.Status);
Assert.Equal("bad retention", exception.Message);
+ Assert.Empty(exception.ErrorDetails);
}
[Fact]
diff --git a/FacturapiTest/WrapperBehaviorTests.cs b/FacturapiTest/WrapperBehaviorTests.cs
index 6e38009..3de7c53 100644
--- a/FacturapiTest/WrapperBehaviorTests.cs
+++ b/FacturapiTest/WrapperBehaviorTests.cs
@@ -1,5 +1,6 @@
using Facturapi;
using Facturapi.Wrappers;
+using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
@@ -133,13 +134,13 @@ public async Task OrganizationDeleteSeriesAsync_UsesDeleteSeriesRoute()
Assert.Equal(HttpMethod.Delete, request.Method);
Assert.NotNull(request.RequestUri);
Assert.Equal("/v2/organizations/org_1/series-group/A", request.RequestUri.PathAndQuery);
- return Task.FromResult(JsonResponse("{\"name\":\"A\"}"));
+ return Task.FromResult(JsonResponse("[{\"series\":\"A\"}]"));
});
var wrapper = new OrganizationWrapper("test_key", "v2", CreateHttpClient(handler));
var result = await wrapper.DeleteSeriesAsync("org_1", "A");
- Assert.Equal("A", result.Name);
+ Assert.Equal("A", Assert.Single(result)?.Series);
}
[Fact]
@@ -513,7 +514,7 @@ public async Task ErrorMapping_ExposesApiErrorFieldsAndHeaders()
var response = new HttpResponseMessage((HttpStatusCode)429)
{
Content = new StringContent(
- "{\"message\":\"too many requests\",\"status\":429,\"code\":\"RATE_LIMIT_EXCEEDED\",\"path\":\"date\",\"location\":\"query\",\"errors\":[{\"code\":\"required\",\"message\":\"date is required\",\"path\":\"date\",\"location\":\"query\"}]}",
+ "{\"message\":\"too many requests\",\"status\":429,\"code\":\"RATE_LIMIT_EXCEEDED\",\"path\":\"date\",\"location\":\"query\",\"errors\":[{\"source\":\"facturapi\",\"code\":\"required\",\"message\":\"date is required\",\"path\":\"date\",\"location\":\"query\"}]}",
Encoding.UTF8,
"application/json")
};
@@ -532,6 +533,8 @@ public async Task ErrorMapping_ExposesApiErrorFieldsAndHeaders()
Assert.Equal("query", exception.Location);
Assert.Equal("log_123", exception.LogId);
Assert.Equal("required", exception.Errors[0]["code"]?.ToString());
+ Assert.Equal("required", Assert.Single(exception.ErrorDetails).Code);
+ Assert.Equal("facturapi", Assert.Single(exception.ErrorDetails).Source);
Assert.Equal("3", exception.Headers["retry-after"]);
Assert.Equal("log_123", exception.Headers["x-facturapi-log-id"]);
}
@@ -636,7 +639,7 @@ public async Task InvoiceCreateZipRequestAsync_UsesZipRequestsPostRoute()
["invoice_types"] = new[] { "I", "E" }
});
- Assert.Equal("zip_1", result["id"]?.ToString());
+ Assert.Equal("zip_1", result.Id);
}
[Fact]
@@ -665,7 +668,7 @@ public async Task InvoiceListZipRequestsAsync_UsesZipRequestsQueryRoute()
});
Assert.Single(result.Data);
- Assert.Equal("zip_1", result.Data[0]["id"]?.ToString());
+ Assert.Equal("zip_1", result.Data[0].Id);
}
[Fact]
@@ -682,7 +685,7 @@ public async Task InvoiceRetrieveZipRequestAsync_UsesZipRequestRoute()
var wrapper = new InvoiceWrapper("test_key", "v2", CreateHttpClient(handler));
var result = await wrapper.RetrieveZipRequestAsync("zip_1");
- Assert.Equal("finished", result["status"]?.ToString());
+ Assert.Equal("finished", result.Status);
}
[Fact]
@@ -733,6 +736,281 @@ public async Task RetentionDownloadZipAsync_ReturnsSeekableStreamAtPositionZero(
Assert.Equal("zip-content", text);
}
+ [Fact]
+ public async Task GeneratedCustomerInputs_PreserveOmissionExplicitNullAndTypedResponses()
+ {
+ var handler = new RecordingHandler(async (request, cancellationToken) =>
+ {
+ Assert.Equal(HttpMethod.Put, request.Method);
+ Assert.Equal("/v2/customers/cus_1", request.RequestUri!.PathAndQuery);
+ var body = Newtonsoft.Json.Linq.JObject.Parse(await request.Content!.ReadAsStringAsync());
+ Assert.Equal(Newtonsoft.Json.Linq.JTokenType.Null, body["email"]!.Type);
+ Assert.Null(body.Property("legal_name"));
+ Assert.Equal("Centro", body["address"]!["street"]!.Value());
+ Assert.Null(body["address"]!["country"]);
+ return JsonResponse("{\"id\":\"cus_1\",\"created_at\":\"2026-01-02T00:00:00Z\",\"sat_validated_at\":null,\"edit_link_expires_at\":null,\"organization\":\"org_1\",\"external_id\":\"external_1\",\"address\":{\"zip\":\"86500\"}}");
+ });
+ ICustomerWrapper wrapper = new CustomerWrapper("test_key", "v2", CreateHttpClient(handler));
+ var result = await wrapper.UpdateAsync("cus_1", new CustomerUpdateInput
+ {
+ Email = null,
+ Address = new CustomerUpdateInputAddress { Street = "Centro" }
+ });
+ Assert.Equal("cus_1", result.Id);
+ Assert.Equal(new DateTime(2026, 1, 2, 0, 0, 0, DateTimeKind.Utc), result.CreatedAt);
+ Assert.Null(result.SatValidatedAt);
+ Assert.Null(result.EditLinkExpiresAt);
+ Assert.Equal("org_1", result.Organization);
+ Assert.Equal("external_1", result.ExternalId);
+ Assert.Equal("86500", result.Address!.Zip);
+ }
+
+ [Fact]
+ public async Task GeneratedCustomerCreateNational_UsesRequiredFieldsAndExistingInterface()
+ {
+ var handler = new RecordingHandler(async (request, cancellationToken) =>
+ {
+ Assert.Equal(HttpMethod.Post, request.Method);
+ Assert.Equal("/v2/customers", request.RequestUri!.PathAndQuery);
+ var body = Newtonsoft.Json.Linq.JObject.Parse(await request.Content!.ReadAsStringAsync());
+ Assert.Equal("Dunder Mifflin", body["legal_name"]!.Value());
+ Assert.Equal("86500", body["address"]!["zip"]!.Value());
+ Assert.Null(body.Property("email"));
+ Assert.Null(body["address"]!["country"]);
+ return JsonResponse("{\"id\":\"cus_1\"}");
+ });
+ ICustomerWrapper wrapper = new CustomerWrapper("test_key", "v2", CreateHttpClient(handler));
+ Assert.Equal("cus_1", (await wrapper.CreateNationalAsync(new CustomerNationalCreateInput(
+ "Dunder Mifflin", "ABC101010111", "601", new CustomerNationalAddressInput("86500")))).Id);
+ }
+
+ [Fact]
+ public async Task GeneratedCustomerListParams_SerializeDateRangesAndReadCursorPages()
+ {
+ var handler = new RecordingHandler((request, cancellationToken) =>
+ {
+ Assert.Equal("/v2/customers?pagination=cursor&after=abc&date%5Bgte%5D=2026-01-01T00%3A00%3A00Z", request.RequestUri!.PathAndQuery);
+ return Task.FromResult(JsonResponse("{\"next_cursor\":null,\"data\":[{\"id\":\"cus_1\"}]}"));
+ });
+ var wrapper = new CustomerWrapper("test_key", "v2", CreateHttpClient(handler));
+ var result = await wrapper.ListAsync(new CustomerListParams
+ {
+ Pagination = "cursor", After = "abc", Date = new DateRangeInput { Gte = "2026-01-01T00:00:00Z" }
+ });
+ Assert.Null(result.TotalResults);
+ Assert.Null(result.NextCursor);
+ Assert.Equal("cus_1", Assert.Single(result.Data).Id);
+ }
+
+ [Fact]
+ public async Task TypedInvoiceCreation_PreservesAlternativesAndOpaqueXml()
+ {
+ const string xml = "&value]]>";
+ var handler = new RecordingHandler(async (request, cancellationToken) =>
+ {
+ Assert.Equal("/v2/invoices", request.RequestUri!.AbsolutePath);
+ var body = JObject.Parse(await request.Content!.ReadAsStringAsync());
+ Assert.Equal("I", (string?)body["type"]);
+ Assert.Equal("cus_1", (string?)body["customer"]);
+ Assert.Equal("prod_1", (string?)body["items"]![0]!["product"]);
+ Assert.Equal(100.25m, (decimal?)body["items"]![1]!["product"]!["price"]);
+ Assert.Equal("custom", (string?)body["complements"]![0]!["type"]);
+ Assert.Equal(xml, (string?)body["complements"]![0]!["data"]);
+ return JsonResponse("{\"id\":\"inv_1\",\"status\":\"draft\",\"date\":null,\"uuid\":null,\"stamp\":null,\"total\":300.25}");
+ });
+ IInvoiceWrapper wrapper = new InvoiceWrapper("test_key", "v2", CreateHttpClient(handler));
+ var custom = new CustomComplementInput(xml);
+ InvoiceComplementInput baseComplement = custom;
+ Assert.Equal(xml, baseComplement.Data!.Value.Value);
+ var result = await wrapper.CreateIngresoAsync(new InvoiceIngresoInput(new List
+ {
+ new InvoiceItemInput("prod_1") { Quantity = 2 },
+ new InvoiceItemInput(new InvoiceItemProductInput("Servicio", "84111506", 100.25m))
+ }, PaymentForm.TRANSFERENCIA_ELECTRONICA)
+ {
+ Customer = "cus_1", Complements = new List { custom }
+ });
+ Assert.Equal("inv_1", result.Id);
+ Assert.Equal(300.25m, result.Total);
+ Assert.Null(result.Date);
+ Assert.Null(result.Uuid);
+ Assert.Null(result.Stamp);
+ }
+
+ [Fact]
+ public async Task TypedEmailRecipients_SerializeStringsAndListsWithoutEnvelopes()
+ {
+ var handler = new RecordingHandler(async (request, cancellationToken) =>
+ {
+ Assert.Equal("/v2/invoices/inv_1/email", request.RequestUri!.AbsolutePath);
+ var body = JObject.Parse(await request.Content!.ReadAsStringAsync());
+ Assert.True(body["email"]!.Type == JTokenType.Array || body["email"]!.Type == JTokenType.String);
+ Assert.Null(body["email"] as JObject);
+ return JsonResponse("{\"ok\":true}");
+ });
+ var wrapper = new InvoiceWrapper("test_key", "v2", CreateHttpClient(handler));
+ Assert.True((await wrapper.SendByEmailAsync("inv_1", new SendInvoiceByEmailInput { Email = new List { "a@example.com", "b@example.com" } })).Ok);
+ Assert.True((await wrapper.SendByEmailAsync("inv_1", new SendInvoiceByEmailInput { Email = "a@example.com" })).Ok);
+
+ }
+
+ [Fact]
+ public async Task NativeDateAndNumericQueries_UseWireFormatsAcrossCultures()
+ {
+ var handler = new RecordingHandler((request, cancellationToken) =>
+ {
+ var query = Uri.UnescapeDataString(request.RequestUri!.Query);
+ if (request.RequestUri.AbsolutePath.EndsWith("payment-summary"))
+ {
+ Assert.Equal("?amount=58.5", query);
+ return Task.FromResult(JsonResponse("{\"uuid\":\"uuid_1\",\"amount\":58.5,\"installment\":2,\"taxes\":[]}"));
+ }
+ Assert.Contains("date[gte]=2026-01-01T00:00:00.0000000Z", query);
+ Assert.Contains("date[lte]=2026-01-02T00:00:00.0000000+02:00", query);
+ Assert.Contains("cancellation_status=none&cancellation_status=canceled", query);
+ return Task.FromResult(JsonResponse("{\"next_cursor\":null,\"data\":[]}"));
+ });
+ var wrapper = new InvoiceWrapper("test_key", "v2", CreateHttpClient(handler));
+ await wrapper.ListAsync(new InvoiceListParams
+ {
+ Date = new DateRangeInput { Gte = new DateTime(2026, 1, 1, 0, 0, 0, DateTimeKind.Utc), Lte = new DateTimeOffset(2026, 1, 2, 0, 0, 0, TimeSpan.FromHours(2)) },
+ CancellationStatus = new List { "none", "canceled" }
+ });
+ var previous = System.Globalization.CultureInfo.CurrentCulture;
+ try
+ {
+ System.Globalization.CultureInfo.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("sv-SE");
+ Assert.Equal(58.5m, (await wrapper.GetPaymentSummaryAsync("inv_1", 58.5)).Amount);
+ }
+ finally { System.Globalization.CultureInfo.CurrentCulture = previous; }
+ }
+
+ [Fact]
+ public async Task ExtendedCatalogs_AreWiredToTheClientAndReturnTypedResults()
+ {
+ var handler = new RecordingHandler((request, cancellationToken) =>
+ {
+ Assert.Equal("Basic", request.Headers.Authorization!.Scheme);
+ if (request.RequestUri!.AbsolutePath == "/v2/catalogs/zip-codes/01000")
+ return Task.FromResult(JsonResponse("{\"key\":\"01000\",\"state\":{\"key\":\"CMX\",\"description\":\"Ciudad de México\"}}"));
+ Assert.Equal("/v2/catalogs/comercioexterior/2.0/tariff-fractions", request.RequestUri.AbsolutePath);
+ return Task.FromResult(JsonResponse("{\"data\":[{\"key\":\"0101\",\"description\":\"Caballos\"}]}"));
+ });
+ using var http = CreateHttpClient(handler);
+ using var sdk = FacturapiClient.CreateWithCustomHttpClient("sk_test", http);
+ Assert.Equal("CMX", (await sdk.Catalog.GetZipCode("01000")).State!.Key);
+ Assert.Equal("0101", Assert.Single((await sdk.ComercioExteriorCatalog.SearchTariffFractions(new ComercioExteriorCatalogSearchTariffFractionsParams { Q = "0101" })).Data).Key);
+ }
+
+ [Fact]
+ public async Task FielUploadAndLiveKeys_PreserveMultipartAndReadArrayResponses()
+ {
+ var handler = new RecordingHandler(async (request, cancellationToken) =>
+ {
+ if (request.Method == HttpMethod.Put)
+ {
+ Assert.Equal("/v2/organizations/org_1/fiel", request.RequestUri!.AbsolutePath);
+ Assert.Equal("multipart/form-data", request.Content!.Headers.ContentType!.MediaType);
+ var content = await request.Content.ReadAsStringAsync();
+ Assert.Contains("name=cer", content);
+ Assert.Contains("name=key", content);
+ Assert.Contains("name=password", content);
+ Assert.Contains("certificate", content);
+ return JsonResponse("{\"id\":\"org_1\"}");
+ }
+ return JsonResponse("[{\"id\":\"key_1\",\"first_12\":\"prefix\",\"created_at\":\"2026-01-01T00:00:00Z\"}]");
+ });
+ var wrapper = new OrganizationWrapper("test_key", "v2", CreateHttpClient(handler));
+ using var cer = new MemoryStream(Encoding.UTF8.GetBytes("certificate"));
+ using var key = new MemoryStream(Encoding.UTF8.GetBytes("private-key-fixture"));
+ Assert.Equal("org_1", (await wrapper.UploadFielAsync("org_1", cer, key, "password-fixture")).Id);
+ var liveKey = Assert.Single(await wrapper.ListLiveApiKeysAsync("org_1"));
+ Assert.Equal("key_1", liveKey.Id);
+ Assert.Equal(new DateTime(2026, 1, 1, 0, 0, 0, DateTimeKind.Utc), liveKey.CreatedAt);
+ }
+
+ [Fact]
+ public async Task ReceiptSummary_SelectsDryRunWithoutMutatingTheInput()
+ {
+ var handler = new RecordingHandler(async (request, cancellationToken) =>
+ {
+ Assert.Equal("/v2/receipts/to-invoice", request.RequestUri!.AbsolutePath);
+ var body = JObject.Parse(await request.Content!.ReadAsStringAsync());
+ Assert.True((bool)body["dry_run"]!);
+ Assert.Equal("rec_1", (string?)body["keys"]![0]);
+ return JsonResponse("{\"subtotal\":100,\"discount\":0,\"total\":116,\"receipts\":[\"rec_1\"],\"payment_form\":\"03\",\"item_count\":1,\"taxes\":{\"totalAdded\":16,\"totalWithholding\":0,\"allAdded\":[],\"allWithholding\":[],\"localTotalAdded\":0,\"localTotalWithholding\":0,\"localAllAdded\":[],\"localAllWithholding\":[]}}");
+ });
+ var wrapper = new ReceiptWrapper("test_key", "v2", CreateHttpClient(handler));
+ var input = new ToInvoiceInput(new List { "rec_1" }) { DryRun = false };
+ var summary = await wrapper.SummarizeToInvoiceAsync(input);
+ Assert.Equal(116m, summary.Total);
+ Assert.Equal(1, summary.ItemCount);
+ Assert.False(input.DryRun);
+ }
+
+ [Fact]
+ public async Task WebhookSignatures_AreVerifiedLocallyAgainstOriginalPayloadBytes()
+ {
+ const string payload = "{\"id\":\"evt_1\",\"created_at\":\"2026-01-01T00:00:00Z\",\"livemode\":false,\"organization\":\"org_1\",\"type\":\"customer.edit_link_completed\",\"data\":{\"type\":\"customer\",\"object\":{\"id\":\"cus_1\"}}}";
+ const string signature = "b9522a72eaf13b9411ff1182ca4a611bd6fa42e42dffd25824b11b9429cc0ba7";
+ var handler = new RecordingHandler((request, cancellationToken) => throw new InvalidOperationException("Signature verification must not call HTTP."));
+ var wrapper = new WebhookWrapper("test_key", "v2", CreateHttpClient(handler));
+ var result = await wrapper.ValidateSignatureAsync("test_secret", signature.ToUpperInvariant(), payload);
+ Assert.Equal("evt_1", result.Id);
+ Assert.Equal(new DateTime(2026, 1, 1, 0, 0, 0, DateTimeKind.Utc), result.CreatedAt);
+ Assert.True(result.Data.Object.TryGet(out var customer));
+ Assert.Equal("cus_1", customer.Id);
+ await Assert.ThrowsAsync(() => wrapper.ValidateSignatureAsync(null!));
+ await Assert.ThrowsAsync(() => wrapper.ValidateSignatureAsync("test_secret", signature, payload + " "));
+ await Assert.ThrowsAsync(() => wrapper.ValidateSignatureAsync("test_secret", new string('z', 64), payload));
+ await Assert.ThrowsAsync(() => wrapper.ValidateSignatureAsync("test_secret", signature, payload, new CancellationToken(true)));
+ }
+
+ [Fact]
+ public async Task RemoteWebhookVerification_PreservesStringsAndOpenObjectValues()
+ {
+ var count = 0;
+ const string payload = "{\"id\":\"evt_1\"}";
+ var handler = new RecordingHandler(async (request, cancellationToken) =>
+ {
+ Assert.Equal("/v2/webhooks/validate-signature", request.RequestUri!.AbsolutePath);
+ var body = JObject.Parse(await request.Content!.ReadAsStringAsync());
+ Assert.Equal(payload, (string?)body["payload"]);
+ return ++count == 1 ? JsonResponse(Newtonsoft.Json.JsonConvert.SerializeObject(payload)) : JsonResponse("{\"metadata\":{\"at\":\"2026-01-01T00:00:00Z\",\"xml\":\"\"}}");
+ });
+ var wrapper = new WebhookWrapper("test_key", "v2", CreateHttpClient(handler));
+ var input = new ValidateWebhookSignatureInput("test_secret", payload, "signature-fixture");
+ Assert.True((await wrapper.ValidateSignatureRemotelyAsync(input)).TryGet(out var verified));
+ Assert.Equal(payload, verified);
+ Assert.True((await wrapper.ValidateSignatureRemotelyAsync(input)).TryGet>(out var response));
+ var metadata = Assert.IsType(response["metadata"]);
+ Assert.Equal(JTokenType.String, metadata["at"]!.Type);
+ Assert.Equal("", (string?)metadata["xml"]);
+ }
+
+ [Fact]
+ public async Task DraftAndCancellationVariants_SelectRequiredFieldsFromTheContract()
+ {
+ var handler = new RecordingHandler(async (request, cancellationToken) =>
+ {
+ if (request.Method == HttpMethod.Post)
+ {
+ var body = JObject.Parse(await request.Content!.ReadAsStringAsync());
+ Assert.Equal("I", (string?)body["type"]);
+ Assert.Equal("draft", (string?)body["status"]);
+ Assert.Null(body["items"]);
+ Assert.Null(body["payment_form"]);
+ return JsonResponse("{\"id\":\"draft_1\",\"status\":\"draft\",\"date\":null}");
+ }
+ Assert.Equal("?motive=01&substitution=replacement_1", request.RequestUri!.Query);
+ return JsonResponse("{\"id\":\"inv_1\",\"status\":\"canceled\"}");
+ });
+ IInvoiceWrapper wrapper = new InvoiceWrapper("test_key", "v2", CreateHttpClient(handler));
+ Assert.Equal("draft_1", (await wrapper.CreateDraftIngresoAsync(new InvoiceIngresoDraftInput())).Id);
+ Assert.Equal("inv_1", (await wrapper.CancelAsync("inv_1", new CancellationWithSubstitutionInput(
+ CancellationMotive.COMPROBANTE_EMITIDO_CON_ERRORES_CON_RELACION, "replacement_1"))).Id);
+ }
+
private static HttpClient CreateHttpClient(HttpMessageHandler handler)
{
return new HttpClient(handler)
diff --git a/IFacturapiClient.cs b/IFacturapiClient.cs
index dad3419..88e2aa7 100644
--- a/IFacturapiClient.cs
+++ b/IFacturapiClient.cs
@@ -1,4 +1,4 @@
-using Facturapi.Wrappers;
+using Facturapi.Wrappers;
using System;
namespace Facturapi
@@ -14,6 +14,8 @@ public interface IFacturapiClient : IDisposable
ICatalogWrapper Catalog { get; }
ICartaporteCatalogWrapper CartaporteCatalog { get; }
INominaCatalogWrapper NominaCatalog { get; }
+ /// Busca claves y descripciones de fracciones arancelarias de comercio exterior.
+ IComercioExteriorCatalogWrapper ComercioExteriorCatalog { get; }
IToolWrapper Tool { get; }
IWebhookWrapper Webhook { get; }
}
diff --git a/Models/Address.cs b/Models/Address.cs
index 230ccfd..f17acf6 100644
--- a/Models/Address.cs
+++ b/Models/Address.cs
@@ -1,15 +1,89 @@
-namespace Facturapi
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
{
+ ///
+ /// Address
+ ///
public class Address
{
- public string Street { get; set; }
- public string Exterior { get; set; }
- public string Interior { get; set; }
- public string Neighborhood { get; set; }
- public string City { get; set; }
- public string Municipality { get; set; }
- public string State { get; set; }
- public string Country { get; set; }
- public string Zip { get; set; }
+ ///
+ /// street
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("street")]
+ public string? Street { get; set; } = default!;
+
+ ///
+ /// exterior
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("exterior")]
+ public string? Exterior { get; set; } = default!;
+
+ ///
+ /// interior
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("interior")]
+ public string? Interior { get; set; } = default!;
+
+ ///
+ /// neighborhood
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("neighborhood")]
+ public string? Neighborhood { get; set; } = default!;
+
+ ///
+ /// city
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("city")]
+ public string? City { get; set; } = default!;
+
+ ///
+ /// municipality
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("municipality")]
+ public string? Municipality { get; set; } = default!;
+
+ ///
+ /// zip
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("zip")]
+ public string? Zip { get; set; } = default!;
+
+ ///
+ /// state
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("state")]
+ public string? State { get; set; } = default!;
+
+ ///
+ /// country
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("country")]
+ public string? Country { get; set; } = default!;
+
}
}
diff --git a/Models/ApiEvent.cs b/Models/ApiEvent.cs
new file mode 100644
index 0000000..e8e12a0
--- /dev/null
+++ b/Models/ApiEvent.cs
@@ -0,0 +1,68 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ApiEvent
+ ///
+ public class ApiEvent
+ {
+ ///
+ /// ID del evento
+ /// Requerido.
+ ///
+ [JsonProperty("id")]
+ public string Id { get; set; } = default!;
+
+ ///
+ /// Format: date-time
+ /// Fecha y hora de creación del evento
+ /// Requerido.
+ ///
+ [JsonProperty("created_at")]
+ public DateTime CreatedAt { get; set; } = default!;
+
+ ///
+ /// Indica si el evento se generó en modo test (false) o en modo producción (true).
+ /// Requerido.
+ ///
+ [JsonProperty("livemode")]
+ public bool Livemode { get; set; } = default!;
+
+ ///
+ /// ID de la organización a la que pertenece el evento
+ /// Requerido.
+ ///
+ [JsonProperty("organization")]
+ public string Organization { get; set; } = default!;
+
+ ///
+ /// Mensajes relacionados con el recurso asociado al evento.
+ /// Opcional.
+ ///
+ [JsonProperty("related_resource_messages")]
+ public List? RelatedResourceMessages { get; set; } = default!;
+
+ ///
+ /// Tipo de evento
+ /// Valores: "invoice.global_invoice_created", "invoice.status_updated", "invoice.created_from_dashboard", "invoice.cancellation_status_updated", "receipt.self_invoice_complete", "receipt.status_updated", "customer.edit_link_completed".
+ /// Requerido.
+ ///
+ [JsonProperty("type")]
+ public string Type { get; set; } = default!;
+
+ ///
+ /// data
+ /// Requerido.
+ ///
+ [JsonProperty("data")]
+ public ApiEventData Data { get; set; } = default!;
+
+ }
+}
diff --git a/Models/ApiEventData.JsonConverter.cs b/Models/ApiEventData.JsonConverter.cs
new file mode 100644
index 0000000..75c301b
--- /dev/null
+++ b/Models/ApiEventData.JsonConverter.cs
@@ -0,0 +1,34 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+namespace Facturapi
+{
+ internal sealed class ApiEventDataJsonConverter : JsonConverter
+ {
+ public override bool CanWrite => false;
+ public override bool CanConvert(Type type) => type == typeof(ApiEventData);
+ public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) => throw new NotSupportedException();
+ public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
+ {
+ if (reader.TokenType == JsonToken.Null) return null;
+ var data = JObject.Load(reader);
+ var result = new ApiEventData();
+ var @object = data["object"];
+ data.Remove("object");
+ using (var content = data.CreateReader()) serializer.Populate(content, result);
+ if (@object != null && @object.Type != JTokenType.Null)
+ {
+ switch ((string?)data["type"])
+ {
+ case "invoice": result.Object = @object.ToObject(serializer)!; break;
+ case "receipt": result.Object = @object.ToObject(serializer)!; break;
+ case "customer": result.Object = @object.ToObject(serializer)!; break;
+ default: throw new JsonSerializationException("Unknown discriminator value for a documented response alternative.");
+ }
+ }
+ return result;
+ }
+ }
+}
diff --git a/Models/ApiEventData.cs b/Models/ApiEventData.cs
new file mode 100644
index 0000000..0a15f8f
--- /dev/null
+++ b/Models/ApiEventData.cs
@@ -0,0 +1,33 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ApiEventData
+ ///
+ [JsonConverter(typeof(ApiEventDataJsonConverter))]
+ public class ApiEventData
+ {
+ ///
+ /// Tipo de objeto asociado al evento
+ /// Valores: "invoice", "receipt", "customer".
+ /// Requerido.
+ ///
+ [JsonProperty("type")]
+ public string Type { get; set; } = default!;
+
+ ///
+ /// object
+ /// Requerido.
+ ///
+ [JsonProperty("object")]
+ public OneOf Object { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteAutotransporte.cs b/Models/CartaPorteAutotransporte.cs
new file mode 100644
index 0000000..e2dba61
--- /dev/null
+++ b/Models/CartaPorteAutotransporte.cs
@@ -0,0 +1,52 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteAutotransporte
+ ///
+ public class CartaPorteAutotransporte
+ {
+ ///
+ /// Clave del permiso SCT del autotransporte.
+ /// Requerido.
+ ///
+ [JsonProperty("PermSCT")]
+ public string PermSCT { get; set; } = default!;
+
+ ///
+ /// Número del permiso SCT.
+ /// Requerido.
+ ///
+ [JsonProperty("NumPermisoSCT")]
+ public string NumPermisoSCT { get; set; } = default!;
+
+ ///
+ /// Datos de identificación del vehículo principal.
+ /// Requerido.
+ ///
+ [JsonProperty("IdentificacionVehicular")]
+ public CartaPorteIdentificacionVehicular IdentificacionVehicular { get; set; } = default!;
+
+ ///
+ /// Información de seguros aplicables.
+ /// Requerido.
+ ///
+ [JsonProperty("Seguros")]
+ public CartaPorteSeguros Seguros { get; set; } = default!;
+
+ ///
+ /// Lista de remolques acoplados.
+ /// Opcional.
+ ///
+ [JsonProperty("Remolques")]
+ public List? Remolques { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteCantidadTransporta.cs b/Models/CartaPorteCantidadTransporta.cs
new file mode 100644
index 0000000..d43ec4b
--- /dev/null
+++ b/Models/CartaPorteCantidadTransporta.cs
@@ -0,0 +1,45 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteCantidadTransporta
+ ///
+ public class CartaPorteCantidadTransporta
+ {
+ ///
+ /// Cantidad
+ /// Requerido.
+ ///
+ [JsonProperty("Cantidad")]
+ public decimal Cantidad { get; set; } = default!;
+
+ ///
+ /// IDOrigen
+ /// Requerido.
+ ///
+ [JsonProperty("IDOrigen")]
+ public string IDOrigen { get; set; } = default!;
+
+ ///
+ /// IDDestino
+ /// Requerido.
+ ///
+ [JsonProperty("IDDestino")]
+ public string IDDestino { get; set; } = default!;
+
+ ///
+ /// Clave del medio de transporte.
+ /// Opcional.
+ ///
+ [JsonProperty("CvesTransporte")]
+ public string? CvesTransporte { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteCarroFerroviario.cs b/Models/CartaPorteCarroFerroviario.cs
new file mode 100644
index 0000000..3063fb8
--- /dev/null
+++ b/Models/CartaPorteCarroFerroviario.cs
@@ -0,0 +1,52 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteCarroFerroviario
+ ///
+ public class CartaPorteCarroFerroviario
+ {
+ ///
+ /// Tipo de carro ferroviario.
+ /// Opcional.
+ ///
+ [JsonProperty("TipoCarro")]
+ public string? TipoCarro { get; set; } = default!;
+
+ ///
+ /// Matrícula o número identificador del carro.
+ /// Opcional.
+ ///
+ [JsonProperty("MatriculaCarro")]
+ public string? MatriculaCarro { get; set; } = default!;
+
+ ///
+ /// Número de guía asociado al carro.
+ /// Opcional.
+ ///
+ [JsonProperty("GuiaCarro")]
+ public string? GuiaCarro { get; set; } = default!;
+
+ ///
+ /// Toneladas netas transportadas en el carro.
+ /// Opcional.
+ ///
+ [JsonProperty("ToneladasNetasCarro")]
+ public decimal? ToneladasNetasCarro { get; set; } = default!;
+
+ ///
+ /// Contenedores asociados al carro.
+ /// Opcional.
+ ///
+ [JsonProperty("Contenedor")]
+ public List? Contenedor { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteContenedorFerroviario.cs b/Models/CartaPorteContenedorFerroviario.cs
new file mode 100644
index 0000000..916c2ff
--- /dev/null
+++ b/Models/CartaPorteContenedorFerroviario.cs
@@ -0,0 +1,38 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteContenedorFerroviario
+ ///
+ public class CartaPorteContenedorFerroviario
+ {
+ ///
+ /// Tipo de contenedor ferroviario.
+ /// Opcional.
+ ///
+ [JsonProperty("TipoContenedor")]
+ public string? TipoContenedor { get; set; } = default!;
+
+ ///
+ /// Peso del contenedor vacío.
+ /// Opcional.
+ ///
+ [JsonProperty("PesoContenedorVacio")]
+ public decimal? PesoContenedorVacio { get; set; } = default!;
+
+ ///
+ /// Peso neto de la mercancía contenida.
+ /// Opcional.
+ ///
+ [JsonProperty("PesoNetoMercancia")]
+ public decimal? PesoNetoMercancia { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteContenedorMaritimo.cs b/Models/CartaPorteContenedorMaritimo.cs
new file mode 100644
index 0000000..8f77809
--- /dev/null
+++ b/Models/CartaPorteContenedorMaritimo.cs
@@ -0,0 +1,66 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteContenedorMaritimo
+ ///
+ public class CartaPorteContenedorMaritimo
+ {
+ ///
+ /// Tipo de contenedor marítimo (ISO / catálogo SAT).
+ /// Opcional.
+ ///
+ [JsonProperty("TipoContenedor")]
+ public string? TipoContenedor { get; set; } = default!;
+
+ ///
+ /// Matrícula o número identificador del contenedor.
+ /// Opcional.
+ ///
+ [JsonProperty("MatriculaContenedor")]
+ public string? MatriculaContenedor { get; set; } = default!;
+
+ ///
+ /// Número de precinto o sello de seguridad.
+ /// Opcional.
+ ///
+ [JsonProperty("NumPrecinto")]
+ public string? NumPrecinto { get; set; } = default!;
+
+ ///
+ /// Identificador CCP relacionado cuando se reutiliza información.
+ /// Opcional.
+ ///
+ [JsonProperty("IdCCPRelacionado")]
+ public string? IdCCPRelacionado { get; set; } = default!;
+
+ ///
+ /// Placa del vehículo motor asociado (si aplica en transbordo).
+ /// Opcional.
+ ///
+ [JsonProperty("PlacaVMCCP")]
+ public string? PlacaVMCCP { get; set; } = default!;
+
+ ///
+ /// Fecha de certificación CCP del contenedor.
+ /// Opcional.
+ ///
+ [JsonProperty("FechaCertificacionCCP")]
+ public string? FechaCertificacionCCP { get; set; } = default!;
+
+ ///
+ /// RemolquesCCP
+ /// Opcional.
+ ///
+ [JsonProperty("RemolquesCCP")]
+ public List? RemolquesCCP { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteContenedorMaritimoRemolquesCCPItem.cs b/Models/CartaPorteContenedorMaritimoRemolquesCCPItem.cs
new file mode 100644
index 0000000..a3955cb
--- /dev/null
+++ b/Models/CartaPorteContenedorMaritimoRemolquesCCPItem.cs
@@ -0,0 +1,31 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteContenedorMaritimoRemolquesCCPItem
+ ///
+ public class CartaPorteContenedorMaritimoRemolquesCCPItem
+ {
+ ///
+ /// Subtipo de remolque relacionado (CCP).
+ /// Opcional.
+ ///
+ [JsonProperty("SubTipoRemCCP")]
+ public string? SubTipoRemCCP { get; set; } = default!;
+
+ ///
+ /// Placa del remolque relacionado (CCP).
+ /// Opcional.
+ ///
+ [JsonProperty("PlacaCCP")]
+ public string? PlacaCCP { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteDataProperties.cs b/Models/CartaPorteDataProperties.cs
new file mode 100644
index 0000000..19b13bc
--- /dev/null
+++ b/Models/CartaPorteDataProperties.cs
@@ -0,0 +1,108 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// Complemento Carta Porte versión 3.1. (Beta)
+ ///
+ public class CartaPorteDataProperties
+ {
+ ///
+ /// Identificador único de la Carta Porte.
+ /// Requerido.
+ ///
+ [JsonProperty("IdCCP")]
+ public string IdCCP { get; set; } = default!;
+
+ ///
+ /// Indica si el transporte es internacional.
+ /// Requerido.
+ ///
+ [JsonProperty("TranspInternac")]
+ public string TranspInternac { get; set; } = default!;
+
+ ///
+ /// Entrada o salida de mercancías.
+ /// Opcional.
+ ///
+ [JsonProperty("EntradaSalidaMerc")]
+ public string? EntradaSalidaMerc { get; set; } = default!;
+
+ ///
+ /// País de origen o destino.
+ /// Opcional.
+ ///
+ [JsonProperty("PaisOrigenDestino")]
+ public string? PaisOrigenDestino { get; set; } = default!;
+
+ ///
+ /// Vía de entrada o salida.
+ /// Opcional.
+ ///
+ [JsonProperty("ViaEntradaSalida")]
+ public string? ViaEntradaSalida { get; set; } = default!;
+
+ ///
+ /// Distancia total recorrida.
+ /// Opcional.
+ ///
+ [JsonProperty("TotalDistRec")]
+ public decimal? TotalDistRec { get; set; } = default!;
+
+ ///
+ /// Registro del programa ISTMO.
+ /// Opcional.
+ ///
+ [JsonProperty("RegistroISTMO")]
+ public string? RegistroISTMO { get; set; } = default!;
+
+ ///
+ /// Polo origen.
+ /// Opcional.
+ ///
+ [JsonProperty("UbicacionPoloOrigen")]
+ public string? UbicacionPoloOrigen { get; set; } = default!;
+
+ ///
+ /// Polo destino.
+ /// Opcional.
+ ///
+ [JsonProperty("UbicacionPoloDestino")]
+ public string? UbicacionPoloDestino { get; set; } = default!;
+
+ ///
+ /// Objeto con los regímenes aduaneros aplicables.
+ /// Opcional.
+ ///
+ [JsonProperty("RegimenesAduaneros")]
+ public Dictionary? RegimenesAduaneros { get; set; } = default!;
+
+ ///
+ /// Arreglo de ubicaciones.
+ /// Requerido.
+ ///
+ [JsonProperty("Ubicaciones")]
+ public List Ubicaciones { get; set; } = default!;
+
+ ///
+ /// Mercancias
+ /// Requerido.
+ ///
+ [JsonProperty("Mercancias")]
+ public CartaPorteMercancias Mercancias { get; set; } = default!;
+
+ ///
+ /// Figuras de transporte.
+ /// Opcional.
+ ///
+ [JsonProperty("FiguraTransporte")]
+ public List? FiguraTransporte { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteDataPropertiesFiguraTransporteItem.cs b/Models/CartaPorteDataPropertiesFiguraTransporteItem.cs
new file mode 100644
index 0000000..19ca4ed
--- /dev/null
+++ b/Models/CartaPorteDataPropertiesFiguraTransporteItem.cs
@@ -0,0 +1,73 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteDataPropertiesFiguraTransporteItem
+ ///
+ public class CartaPorteDataPropertiesFiguraTransporteItem
+ {
+ ///
+ /// Atributo requerido. Clave que identifica el tipo de figura de transporte conforme al catálogo correspondiente (operador, propietario, arrendatario, notificado). Debe coincidir con c_TipoFigura.
+ /// Requerido.
+ ///
+ [JsonProperty("TipoFigura")]
+ public string TipoFigura { get; set; } = default!;
+
+ ///
+ /// RFC del operador/propietario/arrendatario o figura interveniente.
+ /// Opcional.
+ ///
+ [JsonProperty("RFCFigura")]
+ public string? RFCFigura { get; set; } = default!;
+
+ ///
+ /// Número de licencia del operador cuando TipoFigura corresponde a operador.
+ /// Opcional.
+ ///
+ [JsonProperty("NumLicencia")]
+ public string? NumLicencia { get; set; } = default!;
+
+ ///
+ /// Nombre o razón social de la figura de transporte (requerido).
+ /// Requerido.
+ ///
+ [JsonProperty("NombreFigura")]
+ public string NombreFigura { get; set; } = default!;
+
+ ///
+ /// Número de registro fiscal en el extranjero de la figura cuando aplica.
+ /// Opcional.
+ ///
+ [JsonProperty("NumRegIdTribFigura")]
+ public string? NumRegIdTribFigura { get; set; } = default!;
+
+ ///
+ /// Clave del país de residencia fiscal de la figura (c_Pais) cuando es extranjero.
+ /// Opcional.
+ ///
+ [JsonProperty("ResidenciaFiscalFigura")]
+ public string? ResidenciaFiscalFigura { get; set; } = default!;
+
+ ///
+ /// Arreglo opcional con las partes del transporte que se relacionan a la figura.
+ /// Opcional.
+ ///
+ [JsonProperty("PartesTransporte")]
+ public List? PartesTransporte { get; set; } = default!;
+
+ ///
+ /// Domicilio asociado a la figura del transporte.
+ /// Opcional.
+ ///
+ [JsonProperty("Domicilio")]
+ public CartaPorteDomicilio? Domicilio { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteDataPropertiesFiguraTransporteItemPartesTransporteItem.cs b/Models/CartaPorteDataPropertiesFiguraTransporteItemPartesTransporteItem.cs
new file mode 100644
index 0000000..9cfdcb2
--- /dev/null
+++ b/Models/CartaPorteDataPropertiesFiguraTransporteItemPartesTransporteItem.cs
@@ -0,0 +1,24 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteDataPropertiesFiguraTransporteItemPartesTransporteItem
+ ///
+ public class CartaPorteDataPropertiesFiguraTransporteItemPartesTransporteItem
+ {
+ ///
+ /// Clave de la parte del transporte conforme al catálogo c_ParteTransporte.
+ /// Requerido.
+ ///
+ [JsonProperty("ParteTransporte")]
+ public string ParteTransporte { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteDataPropertiesUbicacionesItem.cs b/Models/CartaPorteDataPropertiesUbicacionesItem.cs
new file mode 100644
index 0000000..302e0f8
--- /dev/null
+++ b/Models/CartaPorteDataPropertiesUbicacionesItem.cs
@@ -0,0 +1,108 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteDataPropertiesUbicacionesItem
+ ///
+ public class CartaPorteDataPropertiesUbicacionesItem
+ {
+ ///
+ /// Atributo requerido para precisar si el tipo de ubicación corresponde al origen o destino de las ubicaciones para el traslado de los bienes y/o mercancías en los distintos medios de transporte. Valores: "Origen" | "Destino".
+ /// Requerido.
+ ///
+ [JsonProperty("TipoUbicacion")]
+ public string TipoUbicacion { get; set; } = default!;
+
+ ///
+ /// Atributo condicional para registrar una clave que identifique el punto de salida o entrada de los bienes y/o mercancías. Formato: "OR" o "DE" seguido de 6 dígitos numéricos (expresión regular (OR|DE)[0-9]{6}).
+ /// Opcional.
+ ///
+ [JsonProperty("IDUbicacion")]
+ public string? IDUbicacion { get; set; } = default!;
+
+ ///
+ /// Atributo requerido para registrar el RFC del remitente o destinatario de los bienes y/o mercancías que se trasladan.
+ /// Requerido.
+ ///
+ [JsonProperty("RFCRemitenteDestinatario")]
+ public string RFCRemitenteDestinatario { get; set; } = default!;
+
+ ///
+ /// Atributo opcional para registrar el nombre del remitente o destinatario de los bienes y/o mercancías (longitud 1 a 254 caracteres).
+ /// Opcional.
+ ///
+ [JsonProperty("NombreRemitenteDestinatario")]
+ public string? NombreRemitenteDestinatario { get; set; } = default!;
+
+ ///
+ /// Atributo condicional para el número de identificación o registro fiscal del país de residencia del remitente o destinatario cuando se trate de residentes en el extranjero (longitud 6 a 40 caracteres).
+ /// Opcional.
+ ///
+ [JsonProperty("NumRegIdTrib")]
+ public string? NumRegIdTrib { get; set; } = default!;
+
+ ///
+ /// Atributo condicional para registrar la clave del país de residencia fiscal conforme al catálogo c_Pais (ISO 3166-1).
+ /// Opcional.
+ ///
+ [JsonProperty("ResidenciaFiscal")]
+ public string? ResidenciaFiscal { get; set; } = default!;
+
+ ///
+ /// Atributo condicional para la clave de la estación de origen o destino conforme al catálogo c_Estaciones del complemento Carta Porte y al tipo de transporte.
+ /// Opcional.
+ ///
+ [JsonProperty("NumEstacion")]
+ public string? NumEstacion { get; set; } = default!;
+
+ ///
+ /// Atributo condicional para el nombre de la estación de origen o destino conforme al catálogo c_Estaciones (longitud 1 a 50 caracteres).
+ /// Opcional.
+ ///
+ [JsonProperty("NombreEstacion")]
+ public string? NombreEstacion { get; set; } = default!;
+
+ ///
+ /// Atributo condicional para registrar el tipo de puerto de origen o destino en transporte marítimo. Valores: "Altura" | "Cabotaje".
+ /// Opcional.
+ ///
+ [JsonProperty("NavegacionTrafico")]
+ public string? NavegacionTrafico { get; set; } = default!;
+
+ ///
+ /// Atributo requerido para registrar la fecha y hora estimada de salida o llegada en formato AAAA-MM-DDThh:mm:ss.
+ /// Requerido.
+ ///
+ [JsonProperty("FechaHoraSalidaLlegada")]
+ public string FechaHoraSalidaLlegada { get; set; } = default!;
+
+ ///
+ /// Atributo condicional para registrar el tipo de estación por la que pasan las mercancías conforme al catálogo c_TipoEstacion.
+ /// Opcional.
+ ///
+ [JsonProperty("TipoEstacion")]
+ public string? TipoEstacion { get; set; } = default!;
+
+ ///
+ /// Atributo condicional para registrar en kilómetros la distancia recorrida entre la ubicación de origen y la de destino parcial o final.
+ /// Opcional.
+ ///
+ [JsonProperty("DistanciaRecorrida")]
+ public decimal? DistanciaRecorrida { get; set; } = default!;
+
+ ///
+ /// Domicilio
+ /// Opcional.
+ ///
+ [JsonProperty("Domicilio")]
+ public CartaPorteDomicilio? Domicilio { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteDerechosDePaso.cs b/Models/CartaPorteDerechosDePaso.cs
new file mode 100644
index 0000000..e1c17ad
--- /dev/null
+++ b/Models/CartaPorteDerechosDePaso.cs
@@ -0,0 +1,31 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteDerechosDePaso
+ ///
+ public class CartaPorteDerechosDePaso
+ {
+ ///
+ /// Tipo de derecho de paso ferroviario.
+ /// Opcional.
+ ///
+ [JsonProperty("TipoDerechoDePaso")]
+ public string? TipoDerechoDePaso { get; set; } = default!;
+
+ ///
+ /// Kilometraje cubierto/pagado en el derecho de paso.
+ /// Opcional.
+ ///
+ [JsonProperty("KilometrajePagado")]
+ public decimal? KilometrajePagado { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteDetalleMercancia.cs b/Models/CartaPorteDetalleMercancia.cs
new file mode 100644
index 0000000..7c88b84
--- /dev/null
+++ b/Models/CartaPorteDetalleMercancia.cs
@@ -0,0 +1,52 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteDetalleMercancia
+ ///
+ public class CartaPorteDetalleMercancia
+ {
+ ///
+ /// Clave de la unidad de peso de la mercancía conforme al catálogo correspondiente.
+ /// Requerido.
+ ///
+ [JsonProperty("UnidadPesoMerc")]
+ public string UnidadPesoMerc { get; set; } = default!;
+
+ ///
+ /// Peso bruto de la mercancía incluyendo embalajes y tare.
+ /// Requerido.
+ ///
+ [JsonProperty("PesoBruto")]
+ public decimal PesoBruto { get; set; } = default!;
+
+ ///
+ /// Peso neto de la mercancía sin incluir embalajes ni tara.
+ /// Requerido.
+ ///
+ [JsonProperty("PesoNeto")]
+ public decimal PesoNeto { get; set; } = default!;
+
+ ///
+ /// Peso de la tara (contenedores, embalajes) asociado a la mercancía.
+ /// Requerido.
+ ///
+ [JsonProperty("PesoTara")]
+ public decimal PesoTara { get; set; } = default!;
+
+ ///
+ /// Número de piezas que conforman la mercancía detallada.
+ /// Opcional.
+ ///
+ [JsonProperty("NumPiezas")]
+ public decimal? NumPiezas { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteDocumentacionAduanera.cs b/Models/CartaPorteDocumentacionAduanera.cs
new file mode 100644
index 0000000..ffb2a6c
--- /dev/null
+++ b/Models/CartaPorteDocumentacionAduanera.cs
@@ -0,0 +1,45 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// RFC del importador cuando aplica.
+ ///
+ public class CartaPorteDocumentacionAduanera
+ {
+ ///
+ /// Tipo de documento aduanero (pedimento, guía, conocimiento) relacionado.
+ /// Opcional.
+ ///
+ [JsonProperty("TipoDocumento")]
+ public string? TipoDocumento { get; set; } = default!;
+
+ ///
+ /// Número de pedimento de importación/exportación.
+ /// Opcional.
+ ///
+ [JsonProperty("NumPedimento")]
+ public string? NumPedimento { get; set; } = default!;
+
+ ///
+ /// Identificador alterno del documento aduanero.
+ /// Opcional.
+ ///
+ [JsonProperty("IdentDocAduanero")]
+ public string? IdentDocAduanero { get; set; } = default!;
+
+ ///
+ /// RFCImpo
+ /// Opcional.
+ ///
+ [JsonProperty("RFCImpo")]
+ public string? RFCImpo { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteDomicilio.cs b/Models/CartaPorteDomicilio.cs
new file mode 100644
index 0000000..f1bbef9
--- /dev/null
+++ b/Models/CartaPorteDomicilio.cs
@@ -0,0 +1,87 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// Domicilio relacionado a la ubicación en el complemento Carta Porte.
+ ///
+ public class CartaPorteDomicilio
+ {
+ ///
+ /// Calle del domicilio de origen y/o destino (requerida en XSD).
+ /// Opcional.
+ ///
+ [JsonProperty("Calle")]
+ public string? Calle { get; set; } = default!;
+
+ ///
+ /// Número exterior donde se ubica el domicilio.
+ /// Opcional.
+ ///
+ [JsonProperty("NumeroExterior")]
+ public string? NumeroExterior { get; set; } = default!;
+
+ ///
+ /// Número interior del domicilio, si existe.
+ /// Opcional.
+ ///
+ [JsonProperty("NumeroInterior")]
+ public string? NumeroInterior { get; set; } = default!;
+
+ ///
+ /// Colonia o dato análogo del domicilio.
+ /// Opcional.
+ ///
+ [JsonProperty("Colonia")]
+ public string? Colonia { get; set; } = default!;
+
+ ///
+ /// Ciudad, población o distrito del domicilio.
+ /// Opcional.
+ ///
+ [JsonProperty("Localidad")]
+ public string? Localidad { get; set; } = default!;
+
+ ///
+ /// Referencia geográfica adicional (ej. coordenadas GPS).
+ /// Opcional.
+ ///
+ [JsonProperty("Referencia")]
+ public string? Referencia { get; set; } = default!;
+
+ ///
+ /// Municipio, delegación, alcaldía o análogo del domicilio.
+ /// Opcional.
+ ///
+ [JsonProperty("Municipio")]
+ public string? Municipio { get; set; } = default!;
+
+ ///
+ /// Clave de estado, entidad o región (ISO 3166-2 conforme catálogo SAT).
+ /// Requerido.
+ ///
+ [JsonProperty("Estado")]
+ public string Estado { get; set; } = default!;
+
+ ///
+ /// Clave del país (catálogo c_Pais, ISO 3166-1).
+ /// Requerido.
+ ///
+ [JsonProperty("Pais")]
+ public string Pais { get; set; } = default!;
+
+ ///
+ /// Código postal del domicilio.
+ /// Requerido.
+ ///
+ [JsonProperty("CodigoPostal")]
+ public string CodigoPostal { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteGuiaIdentificacion.cs b/Models/CartaPorteGuiaIdentificacion.cs
new file mode 100644
index 0000000..dcdce11
--- /dev/null
+++ b/Models/CartaPorteGuiaIdentificacion.cs
@@ -0,0 +1,38 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteGuiaIdentificacion
+ ///
+ public class CartaPorteGuiaIdentificacion
+ {
+ ///
+ /// Número de la guía de identificación asociada a la mercancía.
+ /// Opcional.
+ ///
+ [JsonProperty("NumeroGuiaIdentificacion")]
+ public string? NumeroGuiaIdentificacion { get; set; } = default!;
+
+ ///
+ /// Descripción detallada de la guía de identificación.
+ /// Opcional.
+ ///
+ [JsonProperty("DescripGuiaIdentificacion")]
+ public string? DescripGuiaIdentificacion { get; set; } = default!;
+
+ ///
+ /// Peso amparado por la guía de identificación.
+ /// Opcional.
+ ///
+ [JsonProperty("PesoGuiaIdentificacion")]
+ public decimal? PesoGuiaIdentificacion { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteIdentificacionVehicular.cs b/Models/CartaPorteIdentificacionVehicular.cs
new file mode 100644
index 0000000..9415db7
--- /dev/null
+++ b/Models/CartaPorteIdentificacionVehicular.cs
@@ -0,0 +1,45 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteIdentificacionVehicular
+ ///
+ public class CartaPorteIdentificacionVehicular
+ {
+ ///
+ /// Configuración vehicular (catCartaPorte:c_ConfigAutotransporte) del vehículo primario.
+ /// Requerido.
+ ///
+ [JsonProperty("ConfigVehicular")]
+ public string ConfigVehicular { get; set; } = default!;
+
+ ///
+ /// Peso bruto vehicular máximo permitido.
+ /// Requerido.
+ ///
+ [JsonProperty("PesoBrutoVehicular")]
+ public decimal PesoBrutoVehicular { get; set; } = default!;
+
+ ///
+ /// Placa del vehículo motor.
+ /// Requerido.
+ ///
+ [JsonProperty("PlacaVM")]
+ public string PlacaVM { get; set; } = default!;
+
+ ///
+ /// Año modelo del vehículo motor.
+ /// Requerido.
+ ///
+ [JsonProperty("AnioModeloVM")]
+ public string AnioModeloVM { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteMercancia.cs b/Models/CartaPorteMercancia.cs
new file mode 100644
index 0000000..4040277
--- /dev/null
+++ b/Models/CartaPorteMercancia.cs
@@ -0,0 +1,311 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteMercancia
+ ///
+ public class CartaPorteMercancia
+ {
+ ///
+ /// Clave del bien o producto transportado (catCartaPorte:c_BienesTransp).
+ /// Requerido.
+ ///
+ [JsonProperty("BienesTransp")]
+ public string BienesTransp { get; set; } = default!;
+
+ ///
+ /// Clave STCC para transporte ferroviario cuando corresponda.
+ /// Opcional.
+ ///
+ [JsonProperty("ClaveSTCC")]
+ public string? ClaveSTCC { get; set; } = default!;
+
+ ///
+ /// Descripción comercial del bien transportado.
+ /// Requerido.
+ ///
+ [JsonProperty("Descripcion")]
+ public string Descripcion { get; set; } = default!;
+
+ ///
+ /// Cantidad total de unidades del bien.
+ /// Requerido.
+ ///
+ [JsonProperty("Cantidad")]
+ public decimal Cantidad { get; set; } = default!;
+
+ ///
+ /// Clave de unidad (c_ClaveUnidad) aplicable a la cantidad.
+ /// Requerido.
+ ///
+ [JsonProperty("ClaveUnidad")]
+ public string ClaveUnidad { get; set; } = default!;
+
+ ///
+ /// Texto descriptivo de la unidad de medida.
+ /// Opcional.
+ ///
+ [JsonProperty("Unidad")]
+ public string? Unidad { get; set; } = default!;
+
+ ///
+ /// Dimensiones físicas de la mercancía (largo x ancho x alto) si aplica.
+ /// Opcional.
+ ///
+ [JsonProperty("Dimensiones")]
+ public string? Dimensiones { get; set; } = default!;
+
+ ///
+ /// Indicador de si la mercancía es material peligroso ("Sí" / "No").
+ /// Opcional.
+ ///
+ [JsonProperty("MaterialPeligroso")]
+ public string? MaterialPeligroso { get; set; } = default!;
+
+ ///
+ /// Clave del material peligroso (c_MaterialPeligroso) cuando MaterialPeligroso es Sí.
+ /// Opcional.
+ ///
+ [JsonProperty("CveMaterialPeligroso")]
+ public string? CveMaterialPeligroso { get; set; } = default!;
+
+ ///
+ /// Clave del tipo de embalaje utilizado (c_TipoEmbalaje).
+ /// Opcional.
+ ///
+ [JsonProperty("Embalaje")]
+ public string? Embalaje { get; set; } = default!;
+
+ ///
+ /// Descripción adicional del embalaje.
+ /// Opcional.
+ ///
+ [JsonProperty("DescripEmbalaje")]
+ public string? DescripEmbalaje { get; set; } = default!;
+
+ ///
+ /// Sector regulado por COFEPRIS al que pertenece el producto.
+ /// Opcional.
+ ///
+ [JsonProperty("SectorCOFEPRIS")]
+ public string? SectorCOFEPRIS { get; set; } = default!;
+
+ ///
+ /// Nombre del ingrediente activo (productos regulados).
+ /// Opcional.
+ ///
+ [JsonProperty("NombreIngredienteActivo")]
+ public string? NombreIngredienteActivo { get; set; } = default!;
+
+ ///
+ /// Nombre químico del producto cuando aplica.
+ /// Opcional.
+ ///
+ [JsonProperty("NomQuimico")]
+ public string? NomQuimico { get; set; } = default!;
+
+ ///
+ /// Denominación genérica del producto farmacéutico.
+ /// Opcional.
+ ///
+ [JsonProperty("DenominacionGenericaProd")]
+ public string? DenominacionGenericaProd { get; set; } = default!;
+
+ ///
+ /// Denominación distintiva (marca) del producto farmacéutico.
+ /// Opcional.
+ ///
+ [JsonProperty("DenominacionDistintivaProd")]
+ public string? DenominacionDistintivaProd { get; set; } = default!;
+
+ ///
+ /// Nombre o razón social del fabricante.
+ /// Opcional.
+ ///
+ [JsonProperty("Fabricante")]
+ public string? Fabricante { get; set; } = default!;
+
+ ///
+ /// Fecha de caducidad del producto (AAAAMMDD o formato aplicable).
+ /// Opcional.
+ ///
+ [JsonProperty("FechaCaducidad")]
+ public string? FechaCaducidad { get; set; } = default!;
+
+ ///
+ /// Número de lote del medicamento.
+ /// Opcional.
+ ///
+ [JsonProperty("LoteMedicamento")]
+ public string? LoteMedicamento { get; set; } = default!;
+
+ ///
+ /// Forma farmacéutica (tableta, cápsula, solución, etc.).
+ /// Opcional.
+ ///
+ [JsonProperty("FormaFarmaceutica")]
+ public string? FormaFarmaceutica { get; set; } = default!;
+
+ ///
+ /// Condiciones especiales de transporte (refrigeración, frágil, etc.).
+ /// Opcional.
+ ///
+ [JsonProperty("CondicionesEspTransp")]
+ public string? CondicionesEspTransp { get; set; } = default!;
+
+ ///
+ /// Registro sanitario o folio de autorización.
+ /// Opcional.
+ ///
+ [JsonProperty("RegistroSanitarioFolioAutorizacion")]
+ public string? RegistroSanitarioFolioAutorizacion { get; set; } = default!;
+
+ ///
+ /// Número de permiso de importación.
+ /// Opcional.
+ ///
+ [JsonProperty("PermisoImportacion")]
+ public string? PermisoImportacion { get; set; } = default!;
+
+ ///
+ /// Folio VUCEM de importación.
+ /// Opcional.
+ ///
+ [JsonProperty("FolioImpoVUCEM")]
+ public string? FolioImpoVUCEM { get; set; } = default!;
+
+ ///
+ /// Número CAS para sustancias químicas.
+ /// Opcional.
+ ///
+ [JsonProperty("NumCAS")]
+ public string? NumCAS { get; set; } = default!;
+
+ ///
+ /// Razón social de la empresa importadora.
+ /// Opcional.
+ ///
+ [JsonProperty("RazonSocialEmpImp")]
+ public string? RazonSocialEmpImp { get; set; } = default!;
+
+ ///
+ /// Número de registro sanitario o plaguicida COFEPRIS.
+ /// Opcional.
+ ///
+ [JsonProperty("NumRegSanPlagCOFEPRIS")]
+ public string? NumRegSanPlagCOFEPRIS { get; set; } = default!;
+
+ ///
+ /// Información adicional del fabricante.
+ /// Opcional.
+ ///
+ [JsonProperty("DatosFabricante")]
+ public string? DatosFabricante { get; set; } = default!;
+
+ ///
+ /// Información del formulador del producto.
+ /// Opcional.
+ ///
+ [JsonProperty("DatosFormulador")]
+ public string? DatosFormulador { get; set; } = default!;
+
+ ///
+ /// Información del maquilador (si aplica).
+ /// Opcional.
+ ///
+ [JsonProperty("DatosMaquilador")]
+ public string? DatosMaquilador { get; set; } = default!;
+
+ ///
+ /// Uso autorizado del producto.
+ /// Opcional.
+ ///
+ [JsonProperty("UsoAutorizado")]
+ public string? UsoAutorizado { get; set; } = default!;
+
+ ///
+ /// Peso en kilogramos de la mercancía (puede ser peso neto o bruto según contexto).
+ /// Requerido.
+ ///
+ [JsonProperty("PesoEnKg")]
+ public decimal PesoEnKg { get; set; } = default!;
+
+ ///
+ /// Valor monetario de la mercancía.
+ /// Opcional.
+ ///
+ [JsonProperty("ValorMercancia")]
+ public decimal? ValorMercancia { get; set; } = default!;
+
+ ///
+ /// Clave de moneda (c_Moneda) del valor de la mercancía.
+ /// Opcional.
+ ///
+ [JsonProperty("Moneda")]
+ public string? Moneda { get; set; } = default!;
+
+ ///
+ /// Fracción arancelaria aplicable (c_FraccionArancelaria).
+ /// Opcional.
+ ///
+ [JsonProperty("FraccionArancelaria")]
+ public string? FraccionArancelaria { get; set; } = default!;
+
+ ///
+ /// UUID asociado al complemento de Comercio Exterior relacionado.
+ /// Opcional.
+ ///
+ [JsonProperty("UUIDComercioExt")]
+ public string? UUIDComercioExt { get; set; } = default!;
+
+ ///
+ /// Tipo de materia prima (si aplica para minerales, sustancias, etc.).
+ /// Opcional.
+ ///
+ [JsonProperty("TipoMateria")]
+ public string? TipoMateria { get; set; } = default!;
+
+ ///
+ /// Descripción de la materia prima.
+ /// Opcional.
+ ///
+ [JsonProperty("DescripcionMateria")]
+ public string? DescripcionMateria { get; set; } = default!;
+
+ ///
+ /// Documentos aduaneros asociados a la mercancía.
+ /// Opcional.
+ ///
+ [JsonProperty("DocumentacionAduanera")]
+ public List? DocumentacionAduanera { get; set; } = default!;
+
+ ///
+ /// Guías de identificación asociadas.
+ /// Opcional.
+ ///
+ [JsonProperty("GuiasIdentificacion")]
+ public List? GuiasIdentificacion { get; set; } = default!;
+
+ ///
+ /// Detalle de cantidades transportadas por origen/destino.
+ /// Opcional.
+ ///
+ [JsonProperty("CantidadTransporta")]
+ public List? CantidadTransporta { get; set; } = default!;
+
+ ///
+ /// Detalle de pesos y piezas de la mercancía.
+ /// Opcional.
+ ///
+ [JsonProperty("DetalleMercancia")]
+ public List? DetalleMercancia { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteMercancias.cs b/Models/CartaPorteMercancias.cs
new file mode 100644
index 0000000..74afc24
--- /dev/null
+++ b/Models/CartaPorteMercancias.cs
@@ -0,0 +1,94 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteMercancias
+ ///
+ public class CartaPorteMercancias
+ {
+ ///
+ /// Suma del peso bruto total de las mercancías (aéreo y ferroviario).
+ /// Requerido.
+ ///
+ [JsonProperty("PesoBrutoTotal")]
+ public decimal PesoBrutoTotal { get; set; } = default!;
+
+ ///
+ /// Clave de unidad de medida estandarizada del peso (catCartaPorte:c_ClaveUnidadPeso).
+ /// Requerido.
+ ///
+ [JsonProperty("UnidadPeso")]
+ public string UnidadPeso { get; set; } = default!;
+
+ ///
+ /// Suma de los valores PesoNeto de cada DetalleMercancia.
+ /// Opcional.
+ ///
+ [JsonProperty("PesoNetoTotal")]
+ public decimal? PesoNetoTotal { get; set; } = default!;
+
+ ///
+ /// Número total de mercancías (cantidad de nodos Mercancia).
+ /// Requerido.
+ ///
+ [JsonProperty("NumTotalMercancias")]
+ public decimal NumTotalMercancias { get; set; } = default!;
+
+ ///
+ /// Importe pagado por la tasación de las mercancías (vía aérea).
+ /// Opcional.
+ ///
+ [JsonProperty("CargoPorTasacion")]
+ public decimal? CargoPorTasacion { get; set; } = default!;
+
+ ///
+ /// Indica si aplica logística inversa, recolección o devolución.
+ /// Opcional.
+ ///
+ [JsonProperty("LogisticaInversaRecoleccionDevolucion")]
+ public string? LogisticaInversaRecoleccionDevolucion { get; set; } = default!;
+
+ ///
+ /// Arreglo requerido con las mercancías transportadas.
+ /// Requerido.
+ ///
+ [JsonProperty("Mercancia")]
+ public List Mercancia { get; set; } = default!;
+
+ ///
+ /// Datos del autotransporte de carga federal.
+ /// Opcional.
+ ///
+ [JsonProperty("Autotransporte")]
+ public CartaPorteAutotransporte? Autotransporte { get; set; } = default!;
+
+ ///
+ /// Datos de la embarcación para transporte marítimo.
+ /// Opcional.
+ ///
+ [JsonProperty("TransporteMaritimo")]
+ public CartaPorteTransporteMaritimo? TransporteMaritimo { get; set; } = default!;
+
+ ///
+ /// Datos del transporte aéreo utilizado.
+ /// Opcional.
+ ///
+ [JsonProperty("TransporteAereo")]
+ public CartaPorteTransporteAereo? TransporteAereo { get; set; } = default!;
+
+ ///
+ /// Datos del transporte ferroviario utilizado.
+ /// Opcional.
+ ///
+ [JsonProperty("TransporteFerroviario")]
+ public CartaPorteTransporteFerroviario? TransporteFerroviario { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteRemolque.cs b/Models/CartaPorteRemolque.cs
new file mode 100644
index 0000000..174619a
--- /dev/null
+++ b/Models/CartaPorteRemolque.cs
@@ -0,0 +1,31 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteRemolque
+ ///
+ public class CartaPorteRemolque
+ {
+ ///
+ /// Subtipo de remolque (catCartaPorte:c_SubTipoRem).
+ /// Opcional.
+ ///
+ [JsonProperty("SubTipoRem")]
+ public string? SubTipoRem { get; set; } = default!;
+
+ ///
+ /// Placa del remolque.
+ /// Opcional.
+ ///
+ [JsonProperty("Placa")]
+ public string? Placa { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteSeguros.cs b/Models/CartaPorteSeguros.cs
new file mode 100644
index 0000000..1e0ad3f
--- /dev/null
+++ b/Models/CartaPorteSeguros.cs
@@ -0,0 +1,66 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteSeguros
+ ///
+ public class CartaPorteSeguros
+ {
+ ///
+ /// Nombre de la aseguradora de responsabilidad civil.
+ /// Requerido.
+ ///
+ [JsonProperty("AseguraRespCivil")]
+ public string AseguraRespCivil { get; set; } = default!;
+
+ ///
+ /// Número de póliza de responsabilidad civil.
+ /// Requerido.
+ ///
+ [JsonProperty("PolizaRespCivil")]
+ public string PolizaRespCivil { get; set; } = default!;
+
+ ///
+ /// Aseguradora contra daños al medio ambiente.
+ /// Opcional.
+ ///
+ [JsonProperty("AseguraMedAmbiente")]
+ public string? AseguraMedAmbiente { get; set; } = default!;
+
+ ///
+ /// Número de póliza de medio ambiente.
+ /// Opcional.
+ ///
+ [JsonProperty("PolizaMedAmbiente")]
+ public string? PolizaMedAmbiente { get; set; } = default!;
+
+ ///
+ /// Aseguradora de la carga.
+ /// Opcional.
+ ///
+ [JsonProperty("AseguraCarga")]
+ public string? AseguraCarga { get; set; } = default!;
+
+ ///
+ /// Número de póliza de la carga.
+ /// Opcional.
+ ///
+ [JsonProperty("PolizaCarga")]
+ public string? PolizaCarga { get; set; } = default!;
+
+ ///
+ /// Prima total de los seguros contratados.
+ /// Opcional.
+ ///
+ [JsonProperty("PrimaSeguro")]
+ public decimal? PrimaSeguro { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteTransporteAereo.cs b/Models/CartaPorteTransporteAereo.cs
new file mode 100644
index 0000000..dabec06
--- /dev/null
+++ b/Models/CartaPorteTransporteAereo.cs
@@ -0,0 +1,101 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteTransporteAereo
+ ///
+ public class CartaPorteTransporteAereo
+ {
+ ///
+ /// Clave del permiso SCT para transporte aéreo.
+ /// Opcional.
+ ///
+ [JsonProperty("PermSCT")]
+ public string? PermSCT { get; set; } = default!;
+
+ ///
+ /// Número de permiso SCT.
+ /// Opcional.
+ ///
+ [JsonProperty("NumPermisoSCT")]
+ public string? NumPermisoSCT { get; set; } = default!;
+
+ ///
+ /// Matrícula de la aeronave.
+ /// Opcional.
+ ///
+ [JsonProperty("MatriculaAeronave")]
+ public string? MatriculaAeronave { get; set; } = default!;
+
+ ///
+ /// Nombre de la aseguradora aérea.
+ /// Opcional.
+ ///
+ [JsonProperty("NombreAseg")]
+ public string? NombreAseg { get; set; } = default!;
+
+ ///
+ /// Número de póliza de seguro de la aeronave.
+ /// Opcional.
+ ///
+ [JsonProperty("NumPolizaSeguro")]
+ public string? NumPolizaSeguro { get; set; } = default!;
+
+ ///
+ /// Número de guía aérea (Air Waybill).
+ /// Opcional.
+ ///
+ [JsonProperty("NumeroGuia")]
+ public string? NumeroGuia { get; set; } = default!;
+
+ ///
+ /// Lugar donde se celebró el contrato de transporte.
+ /// Opcional.
+ ///
+ [JsonProperty("LugarContrato")]
+ public string? LugarContrato { get; set; } = default!;
+
+ ///
+ /// Código del transportista aéreo.
+ /// Opcional.
+ ///
+ [JsonProperty("CodigoTransportista")]
+ public string? CodigoTransportista { get; set; } = default!;
+
+ ///
+ /// RFC del embarcador.
+ /// Opcional.
+ ///
+ [JsonProperty("RFCEmbarcador")]
+ public string? RFCEmbarcador { get; set; } = default!;
+
+ ///
+ /// Número de registro tributario extranjero del embarcador.
+ /// Opcional.
+ ///
+ [JsonProperty("NumRegIdTribEmbarc")]
+ public string? NumRegIdTribEmbarc { get; set; } = default!;
+
+ ///
+ /// País de residencia fiscal del embarcador.
+ /// Opcional.
+ ///
+ [JsonProperty("ResidenciaFiscalEmbarc")]
+ public string? ResidenciaFiscalEmbarc { get; set; } = default!;
+
+ ///
+ /// Nombre o razón social del embarcador.
+ /// Opcional.
+ ///
+ [JsonProperty("NombreEmbarcador")]
+ public string? NombreEmbarcador { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteTransporteFerroviario.cs b/Models/CartaPorteTransporteFerroviario.cs
new file mode 100644
index 0000000..46244e0
--- /dev/null
+++ b/Models/CartaPorteTransporteFerroviario.cs
@@ -0,0 +1,59 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteTransporteFerroviario
+ ///
+ public class CartaPorteTransporteFerroviario
+ {
+ ///
+ /// Tipo de servicio ferroviario (regular, intermodal, etc.).
+ /// Opcional.
+ ///
+ [JsonProperty("TipoDeServicio")]
+ public string? TipoDeServicio { get; set; } = default!;
+
+ ///
+ /// Tipo de tráfico (nacional, internacional, etc.).
+ /// Opcional.
+ ///
+ [JsonProperty("TipoDeTrafico")]
+ public string? TipoDeTrafico { get; set; } = default!;
+
+ ///
+ /// Nombre de la aseguradora ferroviaria.
+ /// Opcional.
+ ///
+ [JsonProperty("NombreAseg")]
+ public string? NombreAseg { get; set; } = default!;
+
+ ///
+ /// Número de póliza de seguro ferroviario.
+ /// Opcional.
+ ///
+ [JsonProperty("NumPolizaSeguro")]
+ public string? NumPolizaSeguro { get; set; } = default!;
+
+ ///
+ /// Lista de derechos de paso aplicados.
+ /// Opcional.
+ ///
+ [JsonProperty("DerechosDePaso")]
+ public List? DerechosDePaso { get; set; } = default!;
+
+ ///
+ /// Lista de carros ferroviarios involucrados.
+ /// Opcional.
+ ///
+ [JsonProperty("Carro")]
+ public List? Carro { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CartaPorteTransporteMaritimo.cs b/Models/CartaPorteTransporteMaritimo.cs
new file mode 100644
index 0000000..4a1d9f1
--- /dev/null
+++ b/Models/CartaPorteTransporteMaritimo.cs
@@ -0,0 +1,178 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteTransporteMaritimo
+ ///
+ public class CartaPorteTransporteMaritimo
+ {
+ ///
+ /// Clave del permiso SCT de la embarcación.
+ /// Requerido.
+ ///
+ [JsonProperty("PermSCT")]
+ public string PermSCT { get; set; } = default!;
+
+ ///
+ /// Número de permiso SCT de la embarcación.
+ /// Requerido.
+ ///
+ [JsonProperty("NumPermisoSCT")]
+ public string NumPermisoSCT { get; set; } = default!;
+
+ ///
+ /// Nombre de la aseguradora marítima.
+ /// Opcional.
+ ///
+ [JsonProperty("NombreAseg")]
+ public string? NombreAseg { get; set; } = default!;
+
+ ///
+ /// Número de póliza de seguro marítimo.
+ /// Opcional.
+ ///
+ [JsonProperty("NumPolizaSeguro")]
+ public string? NumPolizaSeguro { get; set; } = default!;
+
+ ///
+ /// Tipo de embarcación (catCartaPorte:c_TipoEmbarcacion).
+ /// Opcional.
+ ///
+ [JsonProperty("TipoEmbarcacion")]
+ public string? TipoEmbarcacion { get; set; } = default!;
+
+ ///
+ /// Matrícula de la embarcación.
+ /// Opcional.
+ ///
+ [JsonProperty("Matricula")]
+ public string? Matricula { get; set; } = default!;
+
+ ///
+ /// Número OMI (IMO number) de la embarcación.
+ /// Opcional.
+ ///
+ [JsonProperty("NumeroOMI")]
+ public string? NumeroOMI { get; set; } = default!;
+
+ ///
+ /// Año de construcción de la embarcación.
+ /// Opcional.
+ ///
+ [JsonProperty("AnioEmbarcacion")]
+ public string? AnioEmbarcacion { get; set; } = default!;
+
+ ///
+ /// Nombre propio de la embarcación.
+ /// Opcional.
+ ///
+ [JsonProperty("NombreEmbarc")]
+ public string? NombreEmbarc { get; set; } = default!;
+
+ ///
+ /// Nacionalidad o bandera de la embarcación.
+ /// Opcional.
+ ///
+ [JsonProperty("NacionalidadEmbarc")]
+ public string? NacionalidadEmbarc { get; set; } = default!;
+
+ ///
+ /// Toneladas de arqueo bruto.
+ /// Opcional.
+ ///
+ [JsonProperty("UnidadesDeArqBruto")]
+ public decimal? UnidadesDeArqBruto { get; set; } = default!;
+
+ ///
+ /// Tipo de carga (granel, contenedores, líquidos, etc.).
+ /// Opcional.
+ ///
+ [JsonProperty("TipoCarga")]
+ public string? TipoCarga { get; set; } = default!;
+
+ ///
+ /// Longitud total de la embarcación (eslora).
+ /// Opcional.
+ ///
+ [JsonProperty("Eslora")]
+ public decimal? Eslora { get; set; } = default!;
+
+ ///
+ /// Ancho máximo de la embarcación (manga).
+ /// Opcional.
+ ///
+ [JsonProperty("Manga")]
+ public decimal? Manga { get; set; } = default!;
+
+ ///
+ /// Calado máximo.
+ /// Opcional.
+ ///
+ [JsonProperty("Calado")]
+ public decimal? Calado { get; set; } = default!;
+
+ ///
+ /// Altura del puntal.
+ /// Opcional.
+ ///
+ [JsonProperty("Puntal")]
+ public decimal? Puntal { get; set; } = default!;
+
+ ///
+ /// Nombre de la línea naviera.
+ /// Opcional.
+ ///
+ [JsonProperty("LineaNaviera")]
+ public string? LineaNaviera { get; set; } = default!;
+
+ ///
+ /// Nombre del agente naviero.
+ /// Opcional.
+ ///
+ [JsonProperty("NombreAgenteNaviero")]
+ public string? NombreAgenteNaviero { get; set; } = default!;
+
+ ///
+ /// Número de autorización del agente naviero.
+ /// Opcional.
+ ///
+ [JsonProperty("NumAutorizacionNaviero")]
+ public string? NumAutorizacionNaviero { get; set; } = default!;
+
+ ///
+ /// Número de viaje o rotación.
+ /// Opcional.
+ ///
+ [JsonProperty("NumViaje")]
+ public string? NumViaje { get; set; } = default!;
+
+ ///
+ /// Número de conocimiento de embarque.
+ /// Opcional.
+ ///
+ [JsonProperty("NumConocEmbarc")]
+ public string? NumConocEmbarc { get; set; } = default!;
+
+ ///
+ /// Permiso temporal de navegación.
+ /// Opcional.
+ ///
+ [JsonProperty("PermisoTempNavegacion")]
+ public string? PermisoTempNavegacion { get; set; } = default!;
+
+ ///
+ /// Lista de contenedores asociados al embarque.
+ /// Opcional.
+ ///
+ [JsonProperty("Contenedor")]
+ public List? Contenedor { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CatalogItem.cs b/Models/CatalogItem.cs
index 0e37fc1..df30cf6 100644
--- a/Models/CatalogItem.cs
+++ b/Models/CatalogItem.cs
@@ -1,9 +1,39 @@
-namespace Facturapi
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
{
+ ///
+ /// CatalogItem
+ ///
public class CatalogItem
{
- public string Key { get; set; }
- public string Description { get; set; }
- public double Score { get; set; }
+ ///
+ /// Clave del catálogo
+ /// Opcional.
+ ///
+ [JsonProperty("key")]
+ public string? Key { get; set; } = default!;
+
+ ///
+ /// Descripción de la entrada del catálogo
+ /// Opcional.
+ ///
+ [JsonProperty("description")]
+ public string? Description { get; set; } = default!;
+
+ ///
+ /// Número del 0 al 1 que representa el nivel de coincidencia del
+ /// resultado con respecto a la consulta de búsqueda.
+ /// Opcional.
+ ///
+ [JsonProperty("score")]
+ public decimal? Score { get; set; } = default!;
+
}
}
diff --git a/Models/Certificate.cs b/Models/Certificate.cs
index ca3be8e..635c43d 100644
--- a/Models/Certificate.cs
+++ b/Models/Certificate.cs
@@ -1,11 +1,47 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
namespace Facturapi
{
+ ///
+ /// Certificate
+ ///
public class Certificate
{
- public DateTime UpdatedAt { get; set; }
- public DateTime ExpiresAt { get; set; }
- public bool HasCertificate { get; set; }
+ ///
+ /// Indica si la organización ya tiene el Certificado de Sello Digital (CSD) cargado.
+ /// Opcional.
+ ///
+ [JsonProperty("has_certificate")]
+ public bool? HasCertificate { get; set; } = default!;
+
+ ///
+ /// Format: date-time
+ /// Fecha de la última actualización del certificado. Se omite cuando no hay un certificado cargado.
+ /// Opcional.
+ ///
+ [JsonProperty("updated_at")]
+ public DateTime? UpdatedAt { get; set; } = default!;
+
+ ///
+ /// Format: date-time
+ /// Fecha de expiración del certificado. Se omite cuando no hay un certificado cargado.
+ /// Opcional.
+ ///
+ [JsonProperty("expires_at")]
+ public DateTime? ExpiresAt { get; set; } = default!;
+
+ ///
+ /// Número de serie del certificado CSD.
+ /// Opcional.
+ ///
+ [JsonProperty("serial_number")]
+ public string? SerialNumber { get; set; } = default!;
+
}
-}
\ No newline at end of file
+}
diff --git a/Models/CheckApiHealthResponse.cs b/Models/CheckApiHealthResponse.cs
new file mode 100644
index 0000000..c291d57
--- /dev/null
+++ b/Models/CheckApiHealthResponse.cs
@@ -0,0 +1,24 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CheckApiHealthResponse
+ ///
+ public class CheckApiHealthResponse
+ {
+ ///
+ /// ok
+ /// Opcional.
+ ///
+ [JsonProperty("ok")]
+ public bool? Ok { get; set; } = default!;
+
+ }
+}
diff --git a/Models/ComercioExteriorDataProperties.cs b/Models/ComercioExteriorDataProperties.cs
new file mode 100644
index 0000000..a8fac0f
--- /dev/null
+++ b/Models/ComercioExteriorDataProperties.cs
@@ -0,0 +1,123 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorDataProperties
+ ///
+ public class ComercioExteriorDataProperties
+ {
+ ///
+ /// Receptor
+ /// Opcional.
+ ///
+ [JsonProperty("Receptor")]
+ public ComercioExteriorDataPropertiesReceptor? Receptor { get; set; } = default!;
+
+ ///
+ /// Version
+ /// Valores: "2.0".
+ /// Opcional.
+ ///
+ [JsonProperty("Version")]
+ public string? Version { get; set; } = default!;
+
+ ///
+ /// Clave del catálogo c_MotivoTraslado.
+ /// Opcional.
+ ///
+ [JsonProperty("MotivoTraslado")]
+ public string? MotivoTraslado { get; set; } = default!;
+
+ ///
+ /// Clave del pedimento (catálogo c_ClavePedimento).
+ /// Requerido.
+ ///
+ [JsonProperty("ClaveDePedimento")]
+ public string ClaveDePedimento { get; set; } = default!;
+
+ ///
+ /// Indica si existe certificado de origen.
+ /// Requerido.
+ ///
+ [JsonProperty("CertificadoOrigen")]
+ public int CertificadoOrigen { get; set; } = default!;
+
+ ///
+ /// Número de certificado de origen.
+ /// Opcional.
+ ///
+ [JsonProperty("NumCertificadoOrigen")]
+ public string? NumCertificadoOrigen { get; set; } = default!;
+
+ ///
+ /// Número de exportador confiable.
+ /// Opcional.
+ ///
+ [JsonProperty("NumeroExportadorConfiable")]
+ public string? NumeroExportadorConfiable { get; set; } = default!;
+
+ ///
+ /// Clave del INCOTERM (catálogo c_INCOTERM).
+ /// Opcional.
+ ///
+ [JsonProperty("Incoterm")]
+ public string? Incoterm { get; set; } = default!;
+
+ ///
+ /// Observaciones
+ /// Opcional.
+ ///
+ [JsonProperty("Observaciones")]
+ public string? Observaciones { get; set; } = default!;
+
+ ///
+ /// Tipo de cambio USD.
+ /// Requerido.
+ ///
+ [JsonProperty("TipoCambioUSD")]
+ public decimal TipoCambioUSD { get; set; } = default!;
+
+ ///
+ /// Total en USD.
+ /// Requerido.
+ ///
+ [JsonProperty("TotalUSD")]
+ public decimal TotalUSD { get; set; } = default!;
+
+ ///
+ /// Objeto con información del emisor del complemento. Requerido cuando el domicilio y CURP del emisor no se toman de la organización que emite el complemento.
+ /// Opcional.
+ ///
+ [JsonProperty("Emisor")]
+ public OneOf? Emisor { get; set; } = default!;
+
+ ///
+ /// Propietario
+ /// Opcional.
+ ///
+ [JsonProperty("Propietario")]
+ public List? Propietario { get; set; } = default!;
+
+ ///
+ /// Destinatario
+ /// Opcional.
+ ///
+ [JsonProperty("Destinatario")]
+ public List? Destinatario { get; set; } = default!;
+
+ ///
+ /// Mercancias
+ /// Requerido.
+ ///
+ [JsonProperty("Mercancias")]
+ public ComercioExteriorMercancias Mercancias { get; set; } = default!;
+
+ }
+}
diff --git a/Models/ComercioExteriorDataPropertiesDestinatarioItem.cs b/Models/ComercioExteriorDataPropertiesDestinatarioItem.cs
new file mode 100644
index 0000000..9943cac
--- /dev/null
+++ b/Models/ComercioExteriorDataPropertiesDestinatarioItem.cs
@@ -0,0 +1,45 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorDataPropertiesDestinatarioItem
+ ///
+ public class ComercioExteriorDataPropertiesDestinatarioItem
+ {
+ ///
+ /// ID del objeto `customer` relacionado a la factura, en caso de no haber sido eliminado
+ /// Opcional.
+ ///
+ [JsonProperty("id")]
+ public string? Id { get; set; } = default!;
+
+ ///
+ /// Domicilio
+ /// Opcional.
+ ///
+ [JsonProperty("Domicilio")]
+ public List? Domicilio { get; set; } = default!;
+
+ ///
+ /// NumRegIdTrib
+ /// Opcional.
+ ///
+ [JsonProperty("NumRegIdTrib")]
+ public string? NumRegIdTrib { get; set; } = default!;
+
+ ///
+ /// Nombre
+ /// Opcional.
+ ///
+ [JsonProperty("Nombre")]
+ public string? Nombre { get; set; } = default!;
+
+ }
+}
diff --git a/Models/ComercioExteriorDataPropertiesPropietarioItem.cs b/Models/ComercioExteriorDataPropertiesPropietarioItem.cs
new file mode 100644
index 0000000..15791d6
--- /dev/null
+++ b/Models/ComercioExteriorDataPropertiesPropietarioItem.cs
@@ -0,0 +1,38 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorDataPropertiesPropietarioItem
+ ///
+ public class ComercioExteriorDataPropertiesPropietarioItem
+ {
+ ///
+ /// NumRegIdTrib
+ /// Opcional.
+ ///
+ [JsonProperty("NumRegIdTrib")]
+ public string? NumRegIdTrib { get; set; } = default!;
+
+ ///
+ /// Clave del catálogo c_Pais.
+ /// Opcional.
+ ///
+ [JsonProperty("ResidenciaFiscal")]
+ public string? ResidenciaFiscal { get; set; } = default!;
+
+ ///
+ /// ID del objeto `customer` relacionado a la factura, en caso de no haber sido eliminado
+ /// Opcional.
+ ///
+ [JsonProperty("id")]
+ public string? Id { get; set; } = default!;
+
+ }
+}
diff --git a/Models/ComercioExteriorDataPropertiesReceptor.cs b/Models/ComercioExteriorDataPropertiesReceptor.cs
new file mode 100644
index 0000000..06e730a
--- /dev/null
+++ b/Models/ComercioExteriorDataPropertiesReceptor.cs
@@ -0,0 +1,38 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorDataPropertiesReceptor
+ ///
+ public class ComercioExteriorDataPropertiesReceptor
+ {
+ ///
+ /// ID del objeto `customer` relacionado a la factura, en caso de no haber sido eliminado
+ /// Opcional.
+ ///
+ [JsonProperty("id")]
+ public string? Id { get; set; } = default!;
+
+ ///
+ /// Domicilio
+ /// Opcional.
+ ///
+ [JsonProperty("Domicilio")]
+ public ComercioExteriorDomicilio? Domicilio { get; set; } = default!;
+
+ ///
+ /// NumRegIdTrib
+ /// Opcional.
+ ///
+ [JsonProperty("NumRegIdTrib")]
+ public string? NumRegIdTrib { get; set; } = default!;
+
+ }
+}
diff --git a/Models/ComercioExteriorDescripcionesEspecificas.cs b/Models/ComercioExteriorDescripcionesEspecificas.cs
new file mode 100644
index 0000000..903b81e
--- /dev/null
+++ b/Models/ComercioExteriorDescripcionesEspecificas.cs
@@ -0,0 +1,45 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorDescripcionesEspecificas
+ ///
+ public class ComercioExteriorDescripcionesEspecificas
+ {
+ ///
+ /// Marca
+ /// Requerido.
+ ///
+ [JsonProperty("Marca")]
+ public string Marca { get; set; } = default!;
+
+ ///
+ /// Modelo
+ /// Opcional.
+ ///
+ [JsonProperty("Modelo")]
+ public string? Modelo { get; set; } = default!;
+
+ ///
+ /// SubModelo
+ /// Opcional.
+ ///
+ [JsonProperty("SubModelo")]
+ public string? SubModelo { get; set; } = default!;
+
+ ///
+ /// NumeroSerie
+ /// Opcional.
+ ///
+ [JsonProperty("NumeroSerie")]
+ public string? NumeroSerie { get; set; } = default!;
+
+ }
+}
diff --git a/Models/ComercioExteriorDomicilio.cs b/Models/ComercioExteriorDomicilio.cs
new file mode 100644
index 0000000..e0c29fb
--- /dev/null
+++ b/Models/ComercioExteriorDomicilio.cs
@@ -0,0 +1,87 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorDomicilio
+ ///
+ public class ComercioExteriorDomicilio
+ {
+ ///
+ /// Calle
+ /// Requerido.
+ ///
+ [JsonProperty("Calle")]
+ public string Calle { get; set; } = default!;
+
+ ///
+ /// NumeroExterior
+ /// Opcional.
+ ///
+ [JsonProperty("NumeroExterior")]
+ public string? NumeroExterior { get; set; } = default!;
+
+ ///
+ /// NumeroInterior
+ /// Opcional.
+ ///
+ [JsonProperty("NumeroInterior")]
+ public string? NumeroInterior { get; set; } = default!;
+
+ ///
+ /// Colonia
+ /// Opcional.
+ ///
+ [JsonProperty("Colonia")]
+ public string? Colonia { get; set; } = default!;
+
+ ///
+ /// Localidad
+ /// Opcional.
+ ///
+ [JsonProperty("Localidad")]
+ public string? Localidad { get; set; } = default!;
+
+ ///
+ /// Referencia
+ /// Opcional.
+ ///
+ [JsonProperty("Referencia")]
+ public string? Referencia { get; set; } = default!;
+
+ ///
+ /// Municipio
+ /// Opcional.
+ ///
+ [JsonProperty("Municipio")]
+ public string? Municipio { get; set; } = default!;
+
+ ///
+ /// Estado
+ /// Requerido.
+ ///
+ [JsonProperty("Estado")]
+ public string Estado { get; set; } = default!;
+
+ ///
+ /// Clave del catálogo c_Pais.
+ /// Requerido.
+ ///
+ [JsonProperty("Pais")]
+ public string Pais { get; set; } = default!;
+
+ ///
+ /// CodigoPostal
+ /// Requerido.
+ ///
+ [JsonProperty("CodigoPostal")]
+ public string CodigoPostal { get; set; } = default!;
+
+ }
+}
diff --git a/Models/ComercioExteriorEmisor.cs b/Models/ComercioExteriorEmisor.cs
new file mode 100644
index 0000000..1c98782
--- /dev/null
+++ b/Models/ComercioExteriorEmisor.cs
@@ -0,0 +1,31 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorEmisor
+ ///
+ public class ComercioExteriorEmisor
+ {
+ ///
+ /// Domicilio
+ /// Requerido.
+ ///
+ [JsonProperty("Domicilio")]
+ public ComercioExteriorDomicilio Domicilio { get; set; } = default!;
+
+ ///
+ /// Curp
+ /// Opcional.
+ ///
+ [JsonProperty("Curp")]
+ public string? Curp { get; set; } = default!;
+
+ }
+}
diff --git a/Models/ComercioExteriorMercancia.cs b/Models/ComercioExteriorMercancia.cs
new file mode 100644
index 0000000..e720f83
--- /dev/null
+++ b/Models/ComercioExteriorMercancia.cs
@@ -0,0 +1,66 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorMercancia
+ ///
+ public class ComercioExteriorMercancia
+ {
+ ///
+ /// DescripcionesEspecificas
+ /// Opcional.
+ ///
+ [JsonProperty("DescripcionesEspecificas")]
+ public List? DescripcionesEspecificas { get; set; } = default!;
+
+ ///
+ /// NoIdentificacion
+ /// Requerido.
+ ///
+ [JsonProperty("NoIdentificacion")]
+ public string NoIdentificacion { get; set; } = default!;
+
+ ///
+ /// Clave del catálogo c_FraccionArancelaria.
+ /// Opcional.
+ ///
+ [JsonProperty("FraccionArancelaria")]
+ public string? FraccionArancelaria { get; set; } = default!;
+
+ ///
+ /// CantidadAduana
+ /// Opcional.
+ ///
+ [JsonProperty("CantidadAduana")]
+ public decimal? CantidadAduana { get; set; } = default!;
+
+ ///
+ /// Clave del catálogo c_UnidadAduana.
+ /// Opcional.
+ ///
+ [JsonProperty("UnidadAduana")]
+ public string? UnidadAduana { get; set; } = default!;
+
+ ///
+ /// ValorUnitarioAduana
+ /// Opcional.
+ ///
+ [JsonProperty("ValorUnitarioAduana")]
+ public decimal? ValorUnitarioAduana { get; set; } = default!;
+
+ ///
+ /// ValorDolares
+ /// Requerido.
+ ///
+ [JsonProperty("ValorDolares")]
+ public decimal ValorDolares { get; set; } = default!;
+
+ }
+}
diff --git a/Models/ComercioExteriorMercancias.cs b/Models/ComercioExteriorMercancias.cs
new file mode 100644
index 0000000..5ef52dc
--- /dev/null
+++ b/Models/ComercioExteriorMercancias.cs
@@ -0,0 +1,24 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorMercancias
+ ///
+ public class ComercioExteriorMercancias
+ {
+ ///
+ /// Mercancia
+ /// Requerido.
+ ///
+ [JsonProperty("Mercancia")]
+ public List Mercancia { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CompletionStep.cs b/Models/CompletionStep.cs
index 318031c..75129f3 100644
--- a/Models/CompletionStep.cs
+++ b/Models/CompletionStep.cs
@@ -1,8 +1,32 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
namespace Facturapi
{
+ ///
+ /// CompletionStep
+ ///
public class CompletionStep
{
- public string Type { get; set; }
- public string Description { get; set; }
+ ///
+ /// Código que representa el tipo de paso que se requiere completar
+ /// Valores: "legal", "logo", "certificate", "manifiesto".
+ /// Opcional.
+ ///
+ [JsonProperty("type")]
+ public string? Type { get; set; } = default!;
+
+ ///
+ /// Texto que describe el paso que se requiere completar y que puedes usar para mostrárselo al usuario.
+ /// Opcional.
+ ///
+ [JsonProperty("description")]
+ public string? Description { get; set; } = default!;
+
}
}
diff --git a/Models/CreateInvoiceResponse.cs b/Models/CreateInvoiceResponse.cs
new file mode 100644
index 0000000..9eacaf6
--- /dev/null
+++ b/Models/CreateInvoiceResponse.cs
@@ -0,0 +1,366 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CreateInvoiceResponse
+ ///
+ public class CreateInvoiceResponse
+ {
+ ///
+ /// ID del objeto
+ /// Requerido.
+ ///
+ [JsonProperty("id")]
+ public string Id { get; set; } = default!;
+
+ ///
+ /// Format: date-time
+ /// Fecha de registro
+ /// Requerido.
+ ///
+ [JsonProperty("created_at")]
+ public DateTime CreatedAt { get; set; } = default!;
+
+ ///
+ /// Si el valor es `true`, indica que el objeto fue creado en ambiente Live; o si es `false`, en ambiente Test.
+ /// Requerido.
+ ///
+ [JsonProperty("livemode")]
+ public bool Livemode { get; set; } = default!;
+
+ ///
+ /// Estado actual de la factura. `failed` indica que el timbrado en segundo plano o la recuperación automática del CFDI terminó sin éxito.
+ /// Valores: "pending".
+ /// Requerido.
+ ///
+ [JsonProperty("status")]
+ public string Status { get; set; } = default!;
+
+ ///
+ /// cancellation
+ /// Opcional.
+ ///
+ [JsonProperty("cancellation")]
+ public InvoiceCancellation? Cancellation { get; set; } = default!;
+
+ ///
+ /// cancellation_status
+ /// Valores: "none", "accepted", "pending", "rejected", "expired", "verifying".
+ /// Requerido.
+ ///
+ [JsonProperty("cancellation_status")]
+ public string CancellationStatus { get; set; } = default!;
+
+ ///
+ /// Format: date-time
+ /// Fecha en la que se canceló el CFDI con hora aproximada.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("canceled_at")]
+ public DateTime? CanceledAt { get; set; } = default!;
+
+ ///
+ /// Format: uri
+ /// Dirección URL para verificar el estado del CFDI en el portal del SAT. Este link es el mismo que aparece en el código QR, en el PDF de la factura.
+ /// Opcional.
+ ///
+ [JsonProperty("verification_url")]
+ public string? VerificationUrl { get; set; } = default!;
+
+ ///
+ /// address
+ /// Opcional.
+ ///
+ [JsonProperty("address")]
+ public Address? Address { get; set; } = default!;
+
+ ///
+ /// Tipo de comprobante. Puede tener los valores `"I"`: Ingreso, `"P"`: Pago, `"E"`: Egreso, `"N"`: Nómina, `"T"`: Traslado.
+ /// Valores: "E", "I", "T", "N", "P".
+ /// Requerido.
+ ///
+ [JsonProperty("type")]
+ public string Type { get; set; } = default!;
+
+ ///
+ /// customer
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("customer")]
+ public CustomerInfo? Customer { get; set; } = default!;
+
+ ///
+ /// Monto total facturado.
+ /// Requerido.
+ ///
+ [JsonProperty("total")]
+ public decimal Total { get; set; } = default!;
+
+ ///
+ /// Número de folio autoincremental para control interno y sin validez fiscal.
+ /// Opcional.
+ ///
+ [JsonProperty("folio_number")]
+ public int? FolioNumber { get; set; } = default!;
+
+ ///
+ /// Serie. Caracteres designados por la empresa para control interno y sin validez fiscal. En el PDF se imprime junto al número de folio.
+ /// Opcional.
+ ///
+ [JsonProperty("series")]
+ public string? Series { get; set; } = default!;
+
+ ///
+ /// Identificador que puedes usar para relacionar esta factura con tus registros para después buscar por este número.
+ /// Opcional.
+ ///
+ [JsonProperty("external_id")]
+ public string? ExternalId { get; set; } = default!;
+
+ ///
+ /// Clave que identifica una operación para evitar recursos duplicados. Consulta [Idempotencia](https://docs.facturapi.io/docs/getting-started/idempotency).
+ /// Opcional.
+ ///
+ [JsonProperty("idempotency_key")]
+ public string? IdempotencyKey { get; set; } = default!;
+
+ ///
+ /// Código que representa la forma de pago, de acuerdo al [catálogo del SAT](https://docs.facturapi.io/api/#forma-de-pago).
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("payment_form")]
+ public string? PaymentForm { get; set; } = default!;
+
+ ///
+ /// Total del complemento de Pago cuando la factura es tipo P.
+ /// Opcional.
+ ///
+ [JsonProperty("total_payment_amount")]
+ public decimal? TotalPaymentAmount { get; set; } = default!;
+
+ ///
+ /// Total del monto pagado convertido de la moneda de pago a Pesos Mexicanos.
+ /// Opcional.
+ ///
+ [JsonProperty("total_payment_amount_converted")]
+ public decimal? TotalPaymentAmountConverted { get; set; } = default!;
+
+ ///
+ /// Este campo es asignado automáticamente por Facturapi. Indica si una factura
+ /// con status `draft` está completa y lista para intentar timbrarse. Si el valor es `true`, puedes
+ /// intentar timbrar la factura con el método [Timbrar Factura]('#/operation/stampInvoice').
+ /// Si el valor es `false`, debes usar el método [Actualizar Factura]('#/operation/updateDraftInvoice')
+ /// para completar los campos faltantes.
+ ///
+ /// En una factura con status diferente a `draft`, este campo siempre será `false`.
+ /// Opcional.
+ ///
+ [JsonProperty("is_ready_to_stamp")]
+ public bool? IsReadyToStamp { get; set; } = default!;
+
+ ///
+ /// Conceptos incluidos en el comprobante
+ /// Requerido.
+ ///
+ [JsonProperty("items")]
+ public List Items { get; set; } = default!;
+
+ ///
+ /// Documentos relacionados con la factura.
+ /// Opcional.
+ ///
+ [JsonProperty("related_documents")]
+ public List? RelatedDocuments { get; set; } = default!;
+
+ ///
+ /// En facturas con tipo I (Ingreso) y método de pago PPD, este campo lista los
+ /// IDs de los comprobantes de pago cuyo arreglo de documentos relacionados incluye el UUID
+ /// de esta factura. Este campo es llenado por Facturapi en el momento en que se crea o importa
+ /// el comprobante de pago (tipo P), siempre y cuando pertenezca a la misma organización.
+ /// Opcional.
+ ///
+ [JsonProperty("received_payment_ids")]
+ public List? ReceivedPaymentIds { get; set; } = default!;
+
+ ///
+ /// En facturas con tipo P (Pago), este arreglo lista los IDs de los comprobantes de ingreso
+ /// listados en el arreglo de documentos relacionados. Este campo es llenado por Facturapi siempre
+ /// y cuando el comprobante relacionado también esté registrado en Facturapi y pertenezca a la misma organización.
+ /// Opcional.
+ ///
+ [JsonProperty("target_invoice_ids")]
+ public List? TargetInvoiceIds { get; set; } = default!;
+
+ ///
+ /// Al recuperar el detalle de un CFDI de ingreso o egreso, este arreglo contiene los IDs de los
+ /// CFDI del tipo opuesto relacionados mediante `related_documents`. Para un ingreso incluye los
+ /// egresos que referencian su UUID; para un egreso incluye los ingresos cuyos UUID están en sus
+ /// documentos relacionados. Solo incluye CFDI registrados en la misma organización y ambiente.
+ /// Opcional.
+ ///
+ [JsonProperty("related_invoice_ids")]
+ public List? RelatedInvoiceIds { get; set; } = default!;
+
+ ///
+ /// Código de la moneda, acorde al estándar [ISO 4217](https://es.wikipedia.org/wiki/ISO_4217).
+ /// Requerido.
+ ///
+ [JsonProperty("currency")]
+ public string Currency { get; set; } = default!;
+
+ ///
+ /// Tipo de cambio conforme a la moneda usada. Representa el número de pesos mexicanos que equivalen a una unidad de la divisa señalada en el atributo `currency`.
+ /// Requerido.
+ ///
+ [JsonProperty("exchange")]
+ public decimal Exchange { get; set; } = default!;
+
+ ///
+ /// Complementos a incluir en la factura.
+ /// Opcional.
+ ///
+ [JsonProperty("complements")]
+ public List? Complements { get; set; } = default!;
+
+ ///
+ /// Format: html
+ /// En caso de que necesites incluir más información en el PDF, este campo te permite insertar código HTML con tu propio contenido.
+ /// Opcional.
+ ///
+ [JsonProperty("pdf_custom_section")]
+ public string? PdfCustomSection { get; set; } = default!;
+
+ ///
+ /// Format: xml
+ /// Código XML con la Addenda que se necesite agregar a la factura.
+ /// Opcional.
+ ///
+ [JsonProperty("addenda")]
+ public string? Addenda { get; set; } = default!;
+
+ ///
+ /// Namespaces a insertar en el nodo raíz de la factura. Requerido en `addenda`.
+ /// Opcional.
+ ///
+ [JsonProperty("namespaces")]
+ public List? Namespaces { get; set; } = default!;
+
+ ///
+ /// ID de la organización a la que pertenece este recurso.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("organization")]
+ public string? Organization { get; set; } = default!;
+
+ ///
+ /// issuer_type
+ /// Valores: "issuing", "receiving".
+ /// Opcional.
+ ///
+ [JsonProperty("issuer_type")]
+ public string? IssuerType { get; set; } = default!;
+
+ ///
+ /// cfdi_version
+ /// Opcional.
+ ///
+ [JsonProperty("cfdi_version")]
+ public decimal? CfdiVersion { get; set; } = default!;
+
+ ///
+ /// issuer_info
+ /// Opcional.
+ ///
+ [JsonProperty("issuer_info")]
+ public CustomerInfo? IssuerInfo { get; set; } = default!;
+
+ ///
+ /// payment_method
+ /// Valores: "PUE", "PPD".
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("payment_method")]
+ public string? PaymentMethod { get; set; } = default!;
+
+ ///
+ /// use
+ /// Opcional.
+ ///
+ [JsonProperty("use")]
+ public string? Use { get; set; } = default!;
+
+ ///
+ /// amount_due
+ /// Requerido.
+ ///
+ [JsonProperty("amount_due")]
+ public decimal AmountDue { get; set; } = default!;
+
+ ///
+ /// Format: uri
+ /// Opcional.
+ ///
+ [JsonProperty("verification_carta_porte")]
+ public string? VerificationCartaPorte { get; set; } = default!;
+
+ ///
+ /// conditions
+ /// Opcional.
+ ///
+ [JsonProperty("conditions")]
+ public string? Conditions { get; set; } = default!;
+
+ ///
+ /// export
+ /// Opcional.
+ ///
+ [JsonProperty("export")]
+ public string? Export { get; set; } = default!;
+
+ ///
+ /// global
+ /// Opcional.
+ ///
+ [JsonProperty("global")]
+ public Global? Global { get; set; } = default!;
+
+ ///
+ /// Format: date-time
+ /// Fecha de expedición en formato ISO8601. Puede ser null en borradores.
+ /// Requerido.
+ /// Admite null.
+ ///
+ [JsonProperty("date")]
+ public DateTime? Date { get; set; } = default!;
+
+ ///
+ /// Format: uuid
+ /// Folio fiscal de la factura, asignado por el SAT. En borradores sin timbrar puede ser null o estar omitido.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("uuid")]
+ public string? Uuid { get; set; } = default!;
+
+ ///
+ /// stamp
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("stamp")]
+ public Stamp? Stamp { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CreateToInvoiceFromReceiptsResponse.cs b/Models/CreateToInvoiceFromReceiptsResponse.cs
new file mode 100644
index 0000000..6e35e2d
--- /dev/null
+++ b/Models/CreateToInvoiceFromReceiptsResponse.cs
@@ -0,0 +1,403 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CreateToInvoiceFromReceiptsResponse
+ ///
+ public class CreateToInvoiceFromReceiptsResponse
+ {
+ ///
+ /// ID del objeto
+ /// Opcional.
+ ///
+ [JsonProperty("id")]
+ public string? Id { get; set; } = default!;
+
+ ///
+ /// Format: date-time
+ /// Fecha de registro
+ /// Opcional.
+ ///
+ [JsonProperty("created_at")]
+ public DateTime? CreatedAt { get; set; } = default!;
+
+ ///
+ /// Si el valor es `true`, indica que el objeto fue creado en ambiente Live; o si es `false`, en ambiente Test.
+ /// Opcional.
+ ///
+ [JsonProperty("livemode")]
+ public bool? Livemode { get; set; } = default!;
+
+ ///
+ /// Estado actual de la factura. `failed` indica que el timbrado en segundo plano o la recuperación automática del CFDI terminó sin éxito.
+ /// Valores: "valid", "canceled", "draft", "pending", "failed".
+ /// Opcional.
+ ///
+ [JsonProperty("status")]
+ public string? Status { get; set; } = default!;
+
+ ///
+ /// cancellation
+ /// Opcional.
+ ///
+ [JsonProperty("cancellation")]
+ public InvoiceCancellation? Cancellation { get; set; } = default!;
+
+ ///
+ /// cancellation_status
+ /// Valores: "none", "accepted", "pending", "rejected", "expired", "verifying".
+ /// Opcional.
+ ///
+ [JsonProperty("cancellation_status")]
+ public string? CancellationStatus { get; set; } = default!;
+
+ ///
+ /// Format: date-time
+ /// Fecha en la que se canceló el CFDI con hora aproximada.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("canceled_at")]
+ public DateTime? CanceledAt { get; set; } = default!;
+
+ ///
+ /// Format: uri
+ /// Dirección URL para verificar el estado del CFDI en el portal del SAT. Este link es el mismo que aparece en el código QR, en el PDF de la factura.
+ /// Opcional.
+ ///
+ [JsonProperty("verification_url")]
+ public string? VerificationUrl { get; set; } = default!;
+
+ ///
+ /// address
+ /// Opcional.
+ ///
+ [JsonProperty("address")]
+ public Address? Address { get; set; } = default!;
+
+ ///
+ /// Tipo de comprobante. Puede tener los valores `"I"`: Ingreso, `"P"`: Pago, `"E"`: Egreso, `"N"`: Nómina, `"T"`: Traslado.
+ /// Valores: "E", "I", "T", "N", "P".
+ /// Opcional.
+ ///
+ [JsonProperty("type")]
+ public string? Type { get; set; } = default!;
+
+ ///
+ /// customer
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("customer")]
+ public CustomerInfo? Customer { get; set; } = default!;
+
+ ///
+ /// Monto total facturado.
+ /// Requerido.
+ ///
+ [JsonProperty("total")]
+ public decimal Total { get; set; } = default!;
+
+ ///
+ /// Número de folio autoincremental para control interno y sin validez fiscal.
+ /// Opcional.
+ ///
+ [JsonProperty("folio_number")]
+ public int? FolioNumber { get; set; } = default!;
+
+ ///
+ /// Serie. Caracteres designados por la empresa para control interno y sin validez fiscal. En el PDF se imprime junto al número de folio.
+ /// Opcional.
+ ///
+ [JsonProperty("series")]
+ public string? Series { get; set; } = default!;
+
+ ///
+ /// Identificador que puedes usar para relacionar esta factura con tus registros para después buscar por este número.
+ /// Opcional.
+ ///
+ [JsonProperty("external_id")]
+ public string? ExternalId { get; set; } = default!;
+
+ ///
+ /// Clave que identifica una operación para evitar recursos duplicados. Consulta [Idempotencia](https://docs.facturapi.io/docs/getting-started/idempotency).
+ /// Opcional.
+ ///
+ [JsonProperty("idempotency_key")]
+ public string? IdempotencyKey { get; set; } = default!;
+
+ ///
+ /// Código que representa la forma de pago, de acuerdo al [catálogo del SAT](https://docs.facturapi.io/api/#forma-de-pago).
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("payment_form")]
+ public string? PaymentForm { get; set; } = default!;
+
+ ///
+ /// Total del complemento de Pago cuando la factura es tipo P.
+ /// Opcional.
+ ///
+ [JsonProperty("total_payment_amount")]
+ public decimal? TotalPaymentAmount { get; set; } = default!;
+
+ ///
+ /// Total del monto pagado convertido de la moneda de pago a Pesos Mexicanos.
+ /// Opcional.
+ ///
+ [JsonProperty("total_payment_amount_converted")]
+ public decimal? TotalPaymentAmountConverted { get; set; } = default!;
+
+ ///
+ /// Este campo es asignado automáticamente por Facturapi. Indica si una factura
+ /// con status `draft` está completa y lista para intentar timbrarse. Si el valor es `true`, puedes
+ /// intentar timbrar la factura con el método [Timbrar Factura]('#/operation/stampInvoice').
+ /// Si el valor es `false`, debes usar el método [Actualizar Factura]('#/operation/updateDraftInvoice')
+ /// para completar los campos faltantes.
+ ///
+ /// En una factura con status diferente a `draft`, este campo siempre será `false`.
+ /// Opcional.
+ ///
+ [JsonProperty("is_ready_to_stamp")]
+ public bool? IsReadyToStamp { get; set; } = default!;
+
+ ///
+ /// Conceptos incluidos en el comprobante
+ /// Opcional.
+ ///
+ [JsonProperty("items")]
+ public List? Items { get; set; } = default!;
+
+ ///
+ /// Documentos relacionados con la factura.
+ /// Opcional.
+ ///
+ [JsonProperty("related_documents")]
+ public List? RelatedDocuments { get; set; } = default!;
+
+ ///
+ /// En facturas con tipo I (Ingreso) y método de pago PPD, este campo lista los
+ /// IDs de los comprobantes de pago cuyo arreglo de documentos relacionados incluye el UUID
+ /// de esta factura. Este campo es llenado por Facturapi en el momento en que se crea o importa
+ /// el comprobante de pago (tipo P), siempre y cuando pertenezca a la misma organización.
+ /// Opcional.
+ ///
+ [JsonProperty("received_payment_ids")]
+ public List? ReceivedPaymentIds { get; set; } = default!;
+
+ ///
+ /// En facturas con tipo P (Pago), este arreglo lista los IDs de los comprobantes de ingreso
+ /// listados en el arreglo de documentos relacionados. Este campo es llenado por Facturapi siempre
+ /// y cuando el comprobante relacionado también esté registrado en Facturapi y pertenezca a la misma organización.
+ /// Opcional.
+ ///
+ [JsonProperty("target_invoice_ids")]
+ public List? TargetInvoiceIds { get; set; } = default!;
+
+ ///
+ /// Al recuperar el detalle de un CFDI de ingreso o egreso, este arreglo contiene los IDs de los
+ /// CFDI del tipo opuesto relacionados mediante `related_documents`. Para un ingreso incluye los
+ /// egresos que referencian su UUID; para un egreso incluye los ingresos cuyos UUID están en sus
+ /// documentos relacionados. Solo incluye CFDI registrados en la misma organización y ambiente.
+ /// Opcional.
+ ///
+ [JsonProperty("related_invoice_ids")]
+ public List? RelatedInvoiceIds { get; set; } = default!;
+
+ ///
+ /// Código de la moneda, acorde al estándar [ISO 4217](https://es.wikipedia.org/wiki/ISO_4217).
+ /// Opcional.
+ ///
+ [JsonProperty("currency")]
+ public string? Currency { get; set; } = default!;
+
+ ///
+ /// Tipo de cambio conforme a la moneda usada. Representa el número de pesos mexicanos que equivalen a una unidad de la divisa señalada en el atributo `currency`.
+ /// Opcional.
+ ///
+ [JsonProperty("exchange")]
+ public decimal? Exchange { get; set; } = default!;
+
+ ///
+ /// Complementos a incluir en la factura.
+ /// Opcional.
+ ///
+ [JsonProperty("complements")]
+ public List? Complements { get; set; } = default!;
+
+ ///
+ /// Format: html
+ /// En caso de que necesites incluir más información en el PDF, este campo te permite insertar código HTML con tu propio contenido.
+ /// Opcional.
+ ///
+ [JsonProperty("pdf_custom_section")]
+ public string? PdfCustomSection { get; set; } = default!;
+
+ ///
+ /// Format: xml
+ /// Código XML con la Addenda que se necesite agregar a la factura.
+ /// Opcional.
+ ///
+ [JsonProperty("addenda")]
+ public string? Addenda { get; set; } = default!;
+
+ ///
+ /// Namespaces a insertar en el nodo raíz de la factura. Requerido en `addenda`.
+ /// Opcional.
+ ///
+ [JsonProperty("namespaces")]
+ public List? Namespaces { get; set; } = default!;
+
+ ///
+ /// ID de la organización a la que pertenece este recurso.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("organization")]
+ public string? Organization { get; set; } = default!;
+
+ ///
+ /// issuer_type
+ /// Valores: "issuing", "receiving".
+ /// Opcional.
+ ///
+ [JsonProperty("issuer_type")]
+ public string? IssuerType { get; set; } = default!;
+
+ ///
+ /// cfdi_version
+ /// Opcional.
+ ///
+ [JsonProperty("cfdi_version")]
+ public decimal? CfdiVersion { get; set; } = default!;
+
+ ///
+ /// issuer_info
+ /// Opcional.
+ ///
+ [JsonProperty("issuer_info")]
+ public CustomerInfo? IssuerInfo { get; set; } = default!;
+
+ ///
+ /// payment_method
+ /// Valores: "PUE", "PPD".
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("payment_method")]
+ public string? PaymentMethod { get; set; } = default!;
+
+ ///
+ /// use
+ /// Opcional.
+ ///
+ [JsonProperty("use")]
+ public string? Use { get; set; } = default!;
+
+ ///
+ /// amount_due
+ /// Opcional.
+ ///
+ [JsonProperty("amount_due")]
+ public decimal? AmountDue { get; set; } = default!;
+
+ ///
+ /// Format: uri
+ /// Opcional.
+ ///
+ [JsonProperty("verification_carta_porte")]
+ public string? VerificationCartaPorte { get; set; } = default!;
+
+ ///
+ /// conditions
+ /// Opcional.
+ ///
+ [JsonProperty("conditions")]
+ public string? Conditions { get; set; } = default!;
+
+ ///
+ /// export
+ /// Opcional.
+ ///
+ [JsonProperty("export")]
+ public string? Export { get; set; } = default!;
+
+ ///
+ /// global
+ /// Opcional.
+ ///
+ [JsonProperty("global")]
+ public Global? Global { get; set; } = default!;
+
+ ///
+ /// Format: date-time
+ /// Format: date-time
+ /// Fecha de expedición en formato ISO8601. Puede ser null en borradores.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("date")]
+ public DateTime? Date { get; set; } = default!;
+
+ ///
+ /// Format: uuid
+ /// Format: uuid
+ /// Folio fiscal de la factura, asignado por el SAT. En borradores sin timbrar puede ser null o estar omitido.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("uuid")]
+ public string? Uuid { get; set; } = default!;
+
+ ///
+ /// stamp
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("stamp")]
+ public Stamp? Stamp { get; set; } = default!;
+
+ ///
+ /// subtotal
+ /// Opcional.
+ ///
+ [JsonProperty("subtotal")]
+ public decimal? Subtotal { get; set; } = default!;
+
+ ///
+ /// discount
+ /// Opcional.
+ ///
+ [JsonProperty("discount")]
+ public decimal? Discount { get; set; } = default!;
+
+ ///
+ /// receipts
+ /// Opcional.
+ ///
+ [JsonProperty("receipts")]
+ public List? Receipts { get; set; } = default!;
+
+ ///
+ /// item_count
+ /// Opcional.
+ ///
+ [JsonProperty("item_count")]
+ public int? ItemCount { get; set; } = default!;
+
+ ///
+ /// taxes
+ /// Opcional.
+ ///
+ [JsonProperty("taxes")]
+ public CreateToInvoiceFromReceiptsResponseTaxes? Taxes { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CreateToInvoiceFromReceiptsResponseTaxes.cs b/Models/CreateToInvoiceFromReceiptsResponseTaxes.cs
new file mode 100644
index 0000000..ffa8ecc
--- /dev/null
+++ b/Models/CreateToInvoiceFromReceiptsResponseTaxes.cs
@@ -0,0 +1,73 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CreateToInvoiceFromReceiptsResponseTaxes
+ ///
+ public class CreateToInvoiceFromReceiptsResponseTaxes
+ {
+ ///
+ /// totalAdded
+ /// Requerido.
+ ///
+ [JsonProperty("totalAdded")]
+ public decimal TotalAdded { get; set; } = default!;
+
+ ///
+ /// totalWithholding
+ /// Requerido.
+ ///
+ [JsonProperty("totalWithholding")]
+ public decimal TotalWithholding { get; set; } = default!;
+
+ ///
+ /// localTotalAdded
+ /// Requerido.
+ ///
+ [JsonProperty("localTotalAdded")]
+ public decimal LocalTotalAdded { get; set; } = default!;
+
+ ///
+ /// localTotalWithholding
+ /// Requerido.
+ ///
+ [JsonProperty("localTotalWithholding")]
+ public decimal LocalTotalWithholding { get; set; } = default!;
+
+ ///
+ /// allAdded
+ /// Requerido.
+ ///
+ [JsonProperty("allAdded")]
+ public List AllAdded { get; set; } = default!;
+
+ ///
+ /// allWithholding
+ /// Requerido.
+ ///
+ [JsonProperty("allWithholding")]
+ public List AllWithholding { get; set; } = default!;
+
+ ///
+ /// localAllAdded
+ /// Requerido.
+ ///
+ [JsonProperty("localAllAdded")]
+ public List LocalAllAdded { get; set; } = default!;
+
+ ///
+ /// localAllWithholding
+ /// Requerido.
+ ///
+ [JsonProperty("localAllWithholding")]
+ public List LocalAllWithholding { get; set; } = default!;
+
+ }
+}
diff --git a/Models/Customer.cs b/Models/Customer.cs
index d59e870..98d1a10 100644
--- a/Models/Customer.cs
+++ b/Models/Customer.cs
@@ -1,21 +1,143 @@
-using System;
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
namespace Facturapi
{
+ ///
+ /// Objeto Customer
+ ///
public class Customer
{
- public string Id { get; set; }
- public DateTime CreatedAt { get; set; }
- public bool Livemode { get; set; }
- public string Email { get; set; }
- public string Phone { get; set; }
- public Address Address { get; set; }
- public string LegalName { get; set; }
- public string TaxId { get; set; }
- public string TaxSystem { get; set; }
- public DateTime SatValidatedAt { get; set; }
- public string EditLink { get; set; }
- public DateTime EditLinkExpiresAt { get; set; }
- public string DefaultInvoiceUse { get; set; }
+ ///
+ /// ID del objeto
+ /// Requerido.
+ ///
+ [JsonProperty("id")]
+ public string Id { get; set; } = default!;
+
+ ///
+ /// Format: date-time
+ /// Fecha de registro
+ /// Requerido.
+ ///
+ [JsonProperty("created_at")]
+ public DateTime CreatedAt { get; set; } = default!;
+
+ ///
+ /// Si el valor es `true`, indica que el objeto fue creado en ambiente Live; o si es `false`, en ambiente Test.
+ /// Requerido.
+ ///
+ [JsonProperty("livemode")]
+ public bool Livemode { get; set; } = default!;
+
+ ///
+ /// Enlace a una página alojada donde el cliente puede editar su información una vez.
+ /// Ejemplo: https://auto.facturapi.io/tax-info/abcdWXYZ1234
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("edit_link")]
+ public string? EditLink { get; set; } = default!;
+
+ ///
+ /// Format: date-time
+ /// Fecha de expiración del enlace de edición.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("edit_link_expires_at")]
+ public DateTime? EditLinkExpiresAt { get; set; } = default!;
+
+ ///
+ /// Format: date-time
+ /// Fecha en la que la información fiscal fue validado por el SAT.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("sat_validated_at")]
+ public DateTime? SatValidatedAt { get; set; } = default!;
+
+ ///
+ /// Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.).
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("legal_name")]
+ public string? LegalName { get; set; } = default!;
+
+ ///
+ /// En clientes de México contiene el RFC del cliente. Para extranjeros es opcional y representa el número de registro de identificación tributaria, es decir, el equivalente al RFC en el país del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("tax_id")]
+ public string? TaxId { get; set; } = default!;
+
+ ///
+ /// Requerido para clientes nacionales. Clave del régimen fiscal del cliente, del catálogo de [Regímenes Fiscales](https://docs.facturapi.io/api/#r%C3%A9gimen-fiscal).
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("tax_system")]
+ public string? TaxSystem { get; set; } = default!;
+
+ ///
+ /// Format: email
+ /// Dirección de correo electrónico al cual enviar las facturas generadas.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("email")]
+ public string? Email { get; set; } = default!;
+
+ ///
+ /// Teléfono del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("phone")]
+ public string? Phone { get; set; } = default!;
+
+ ///
+ /// Uso de CFDI por defecto.
+ /// Opcional.
+ ///
+ [JsonProperty("default_invoice_use")]
+ public string? DefaultInvoiceUse { get; set; } = default!;
+
+ ///
+ /// address
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("address")]
+ public Address? Address { get; set; } = default!;
+
+ ///
+ /// ID de la organización a la que pertenece este recurso.
+ /// Requerido.
+ ///
+ [JsonProperty("organization")]
+ public string Organization { get; set; } = default!;
+
+ ///
+ /// curp
+ /// Opcional.
+ ///
+ [JsonProperty("curp")]
+ public string? Curp { get; set; } = default!;
+
+ ///
+ /// external_id
+ /// Opcional.
+ ///
+ [JsonProperty("external_id")]
+ public string? ExternalId { get; set; } = default!;
+
}
}
diff --git a/Models/CustomerEditLinkEmailResult.cs b/Models/CustomerEditLinkEmailResult.cs
new file mode 100644
index 0000000..75c1a25
--- /dev/null
+++ b/Models/CustomerEditLinkEmailResult.cs
@@ -0,0 +1,24 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomerEditLinkEmailResult
+ ///
+ public class CustomerEditLinkEmailResult
+ {
+ ///
+ /// Indica si el enlace se envió correctamente
+ /// Opcional.
+ ///
+ [JsonProperty("ok")]
+ public bool? Ok { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CustomerInfo.cs b/Models/CustomerInfo.cs
new file mode 100644
index 0000000..765f3cf
--- /dev/null
+++ b/Models/CustomerInfo.cs
@@ -0,0 +1,63 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// Objeto con información parcial del cliente receptor del comprobante. Para obtener el objeto `Customer` completo, deberás consultarlo con el método de [Obtener Cliente]('#/operation/getCustomer').
+ ///
+ public class CustomerInfo
+ {
+ ///
+ /// ID del objeto `customer` relacionado a la factura, en caso de no haber sido eliminado
+ /// Opcional.
+ ///
+ [JsonProperty("id")]
+ public string? Id { get; set; } = default!;
+
+ ///
+ /// Nombre fiscal o razón social del cliente, *sin* incluir el régimen societario (ej.: S.A. de C.V.).
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("legal_name")]
+ public string? LegalName { get; set; } = default!;
+
+ ///
+ /// RFC del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("tax_id")]
+ public string? TaxId { get; set; } = default!;
+
+ ///
+ /// address
+ /// Opcional.
+ ///
+ [JsonProperty("address")]
+ public Address? Address { get; set; } = default!;
+
+ ///
+ /// phone
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("phone")]
+ public string? Phone { get; set; } = default!;
+
+ ///
+ /// tax_system
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonProperty("tax_system")]
+ public string? TaxSystem { get; set; } = default!;
+
+ }
+}
diff --git a/Models/Customization.cs b/Models/Customization.cs
index c6563a3..9d42135 100644
--- a/Models/Customization.cs
+++ b/Models/Customization.cs
@@ -1,9 +1,60 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
namespace Facturapi
{
+ ///
+ /// Customization
+ ///
public class Customization
{
- public string Color { get; set; }
- public bool HasLogo { get; set; }
- public PdfExtra PdfExtra { get; set; }
+ ///
+ /// default_series
+ /// Opcional.
+ ///
+ [JsonProperty("default_series")]
+ public CustomizationDefaultSeries? DefaultSeries { get; set; } = default!;
+
+ ///
+ /// Indica si la organización ya tiene un logotipo cargado.
+ /// Opcional.
+ ///
+ [JsonProperty("has_logo")]
+ public bool? HasLogo { get; set; } = default!;
+
+ ///
+ /// Format: hex
+ /// Color distintivo de la marca en representación Hexadecimal RGB de 6 caracteres.
+ /// Opcional.
+ ///
+ [JsonProperty("color")]
+ public string? Color { get; set; } = default!;
+
+ ///
+ /// Número de folio que se asignará a la siguiente factura en ambiente Live (y que se incrementará automáticamente por cada nueva factura).
+ /// Opcional.
+ ///
+ [JsonProperty("next_folio_number")]
+ public int? NextFolioNumber { get; set; } = default!;
+
+ ///
+ /// Número de folio que se asignará a la siguiente factura en ambiente Test (y que se incrementará automáticamente por cada nueva factura).
+ /// Opcional.
+ ///
+ [JsonProperty("next_folio_number_test")]
+ public int? NextFolioNumberTest { get; set; } = default!;
+
+ ///
+ /// Configura qué campos opcionales se quieren mostrar en el PDF. El SAT no obliga a mostrar estos campos, pero pueden activarse según la preferencia de la organización.
+ /// Opcional.
+ ///
+ [JsonProperty("pdf_extra")]
+ public CustomizationPdfExtra? PdfExtra { get; set; } = default!;
+
}
-}
\ No newline at end of file
+}
diff --git a/Models/CustomizationDefaultSeries.cs b/Models/CustomizationDefaultSeries.cs
new file mode 100644
index 0000000..9ed779e
--- /dev/null
+++ b/Models/CustomizationDefaultSeries.cs
@@ -0,0 +1,52 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomizationDefaultSeries
+ ///
+ public class CustomizationDefaultSeries
+ {
+ ///
+ /// I
+ /// Opcional.
+ ///
+ [JsonProperty("I")]
+ public string? I { get; set; } = default!;
+
+ ///
+ /// E
+ /// Opcional.
+ ///
+ [JsonProperty("E")]
+ public string? E { get; set; } = default!;
+
+ ///
+ /// P
+ /// Opcional.
+ ///
+ [JsonProperty("P")]
+ public string? P { get; set; } = default!;
+
+ ///
+ /// N
+ /// Opcional.
+ ///
+ [JsonProperty("N")]
+ public string? N { get; set; } = default!;
+
+ ///
+ /// T
+ /// Opcional.
+ ///
+ [JsonProperty("T")]
+ public string? T { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CustomizationPdfExtra.cs b/Models/CustomizationPdfExtra.cs
new file mode 100644
index 0000000..348815b
--- /dev/null
+++ b/Models/CustomizationPdfExtra.cs
@@ -0,0 +1,122 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomizationPdfExtra
+ ///
+ public class CustomizationPdfExtra
+ {
+ ///
+ /// Mostrar códigos de catálogos del SAT junto a sus descripciones. Ejemplo: “KGM Kilogramo”.
+ /// Opcional.
+ ///
+ [JsonProperty("codes")]
+ public bool? Codes { get; set; } = default!;
+
+ ///
+ /// Mostrar los códigos estandarizados de estado y de país en el PDF. Ejemplo: "SON" en lugar de "Sonora" y "MEX" en lugar de "México".
+ /// Opcional.
+ ///
+ [JsonProperty("address_codes")]
+ public bool? AddressCodes { get; set; } = default!;
+
+ ///
+ /// Mostrar la clave de producto-servicio.
+ /// Opcional.
+ ///
+ [JsonProperty("product_key")]
+ public bool? ProductKey { get; set; } = default!;
+
+ ///
+ /// Mostrar la clave de exportación en el PDF.
+ /// Opcional.
+ ///
+ [JsonProperty("export_key")]
+ public bool? ExportKey { get; set; } = default!;
+
+ ///
+ /// Redondear el precio unitario en el PDF a 2 decimales, pero conservar los 6 decimales en el XML.
+ /// Opcional.
+ ///
+ [JsonProperty("round_unit_price")]
+ public bool? RoundUnitPrice { get; set; } = default!;
+
+ ///
+ /// Mostrar el desglose de impuestos en el PDF. Si se desactiva, sólo se mostratán los impuestos en los totales, pero no en el detalle de cada concepto.
+ /// Opcional.
+ ///
+ [JsonProperty("tax_breakdown")]
+ public bool? TaxBreakdown { get; set; } = default!;
+
+ ///
+ /// Mostrar el desglose de IEPS en el PDF. Si se desactiva, solo se mostrarán los impuestos relacionados al IVA en el subtotal.
+ /// Opcional.
+ ///
+ [JsonProperty("ieps_breakdown")]
+ public bool? IepsBreakdown { get; set; } = default!;
+
+ ///
+ /// Suma IEPS con subtotal sin desglosarlo en el PDF.
+ /// Opcional.
+ ///
+ [JsonProperty("combine_ieps_with_subtotal")]
+ public bool? CombineIepsWithSubtotal { get; set; } = default!;
+
+ ///
+ /// Renderizar el complemento de Carta Porte 3.1 en el PDF sólo si el complemento de carta porte está incluido en la factura.
+ /// Opcional.
+ ///
+ [JsonProperty("render_carta_porte")]
+ public bool? RenderCartaPorte { get; set; } = default!;
+
+ ///
+ /// Repetir la firma electrónica en cada página del PDF. Si se desactiva, la firma electrónica sólo se mostrará una vez.
+ /// Opcional.
+ ///
+ [JsonProperty("repeat_signature")]
+ public bool? RepeatSignature { get; set; } = default!;
+
+ ///
+ /// Mostrar el domicilio fiscal de la organización en vez del lugar de expedición de la factura. Solo se muestra una dirección.
+ /// Opcional.
+ ///
+ [JsonProperty("render_organization_address")]
+ public bool? RenderOrganizationAddress { get; set; } = default!;
+
+ ///
+ /// Renderizar el complemento de Instituciones Educativas Privadas en el PDF.
+ /// Opcional.
+ ///
+ [JsonProperty("render_iedu")]
+ public bool? RenderIedu { get; set; } = default!;
+
+ ///
+ /// Renderizar el complemento de hidrocarburos y petrolíferos en el PDF.
+ /// Opcional.
+ ///
+ [JsonProperty("render_hyp_complement")]
+ public bool? RenderHypComplement { get; set; } = default!;
+
+ ///
+ /// Renderizar el complemento de comercio exterior en el PDF.
+ /// Opcional.
+ ///
+ [JsonProperty("render_comercio_exterior")]
+ public bool? RenderComercioExterior { get; set; } = default!;
+
+ ///
+ /// payroll_options
+ /// Opcional.
+ ///
+ [JsonProperty("payroll_options")]
+ public CustomizationPdfExtraPayrollOptions? PayrollOptions { get; set; } = default!;
+
+ }
+}
diff --git a/Models/CustomizationPdfExtraPayrollOptions.cs b/Models/CustomizationPdfExtraPayrollOptions.cs
new file mode 100644
index 0000000..c6070a2
--- /dev/null
+++ b/Models/CustomizationPdfExtraPayrollOptions.cs
@@ -0,0 +1,45 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomizationPdfExtraPayrollOptions
+ ///
+ public class CustomizationPdfExtraPayrollOptions
+ {
+ ///
+ /// tipo_contrato
+ /// Opcional.
+ ///
+ [JsonProperty("tipo_contrato")]
+ public bool? TipoContrato { get; set; } = default!;
+
+ ///
+ /// puesto
+ /// Opcional.
+ ///
+ [JsonProperty("puesto")]
+ public bool? Puesto { get; set; } = default!;
+
+ ///
+ /// riesgo_puesto
+ /// Opcional.
+ ///
+ [JsonProperty("riesgo_puesto")]
+ public bool? RiesgoPuesto { get; set; } = default!;
+
+ ///
+ /// antiguedad
+ /// Opcional.
+ ///
+ [JsonProperty("antiguedad")]
+ public bool? Antiguedad { get; set; } = default!;
+
+ }
+}
diff --git a/Models/DomainAvailability.cs b/Models/DomainAvailability.cs
index 13d93cc..d9b12b7 100644
--- a/Models/DomainAvailability.cs
+++ b/Models/DomainAvailability.cs
@@ -1,7 +1,24 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
namespace Facturapi
{
+ ///
+ /// DomainAvailability
+ ///
public class DomainAvailability
{
- public bool Available { get; set; }
+ ///
+ /// Indica si el dominio está diponible
+ /// Requerido.
+ ///
+ [JsonProperty("available")]
+ public bool Available { get; set; } = default!;
+
}
}
diff --git a/Models/Efos.cs b/Models/Efos.cs
new file mode 100644
index 0000000..1a7b5d3
--- /dev/null
+++ b/Models/Efos.cs
@@ -0,0 +1,35 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// Efos
+ ///
+ public class Efos
+ {
+ ///
+ /// Indica si el RFC tiene algún asunto relacionado con esta lista.
+ /// `true`: El RFC no está en la lista de EFOS o su situación fue
+ /// apelada y resultó favorable. `false`: El RFC está registrado como
+ /// “Presunto” o “Definitivo” en la lista de EFOS.
+ /// Opcional.
+ ///
+ [JsonProperty("is_valid")]
+ public bool? IsValid { get; set; } = default!;
+
+ ///
+ /// Objeto con el resultado de la búqueda ante el SAT.
+ /// Toda la información contenida en este objeto proviene del SAT.
+ /// Opcional.
+ ///
+ [JsonProperty("data")]
+ public EfosData? Data { get; set; } = default!;
+
+ }
+}
diff --git a/Models/EfosData.cs b/Models/EfosData.cs
new file mode 100644
index 0000000..b562726
--- /dev/null
+++ b/Models/EfosData.cs
@@ -0,0 +1,39 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// EfosData
+ ///
+ public class EfosData
+ {
+ ///
+ /// Disponible sólo cuando el RFC no fue encontrado en la lista,
+ /// lo cual es bueno.
+ /// Opcional.
+ ///
+ [JsonProperty("mensaje")]
+ public string? Mensaje { get; set; } = default!;
+
+ ///
+ /// Texto que indica la fecha de actualización de la lista.
+ /// Opcional.
+ ///
+ [JsonProperty("fechaLista")]
+ public string? FechaLista { get; set; } = default!;
+
+ ///
+ /// Arreglo con los resultados de la búsqueda en la lista de EFOS.
+ /// Opcional.
+ ///
+ [JsonProperty("detalles")]
+ public List? Detalles { get; set; } = default!;
+
+ }
+}
diff --git a/Models/EfosDetalle.cs b/Models/EfosDetalle.cs
new file mode 100644
index 0000000..91b4048
--- /dev/null
+++ b/Models/EfosDetalle.cs
@@ -0,0 +1,100 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// EfosDetalle
+ ///
+ public class EfosDetalle
+ {
+ ///
+ /// El RFC consultado, a manera de confirmación.
+ /// Opcional.
+ ///
+ [JsonProperty("rfc")]
+ public string? Rfc { get; set; } = default!;
+
+ ///
+ /// Razón social del contribuyente.
+ /// Opcional.
+ ///
+ [JsonProperty("razonSocial")]
+ public string? RazonSocial { get; set; } = default!;
+
+ ///
+ /// Texto que indica la situación actual. Consulta
+ /// [esta tabla](https://docs.facturapi.io/api/#situación-del-contribuyente) para ver
+ /// el detalle de los distintos valores.
+ /// Opcional.
+ ///
+ [JsonProperty("situacionContribuyente")]
+ public string? SituacionContribuyente { get; set; } = default!;
+
+ ///
+ /// Texto con identificador y fecha del reporte de presunción.
+ /// Opcional.
+ ///
+ [JsonProperty("numFechaPresuncion")]
+ public string? NumFechaPresuncion { get; set; } = default!;
+
+ ///
+ /// Format: DD/MM/YYYY
+ /// Fecha de publicación de presunción.
+ /// Opcional.
+ ///
+ [JsonProperty("pubFechaSatPresuntos")]
+ public string? PubFechaSatPresuntos { get; set; } = default!;
+
+ ///
+ /// Texto con identificador y fecha de publicación en el listado global de presunción.
+ /// Opcional.
+ ///
+ [JsonProperty("numGlobalPresuncion")]
+ public string? NumGlobalPresuncion { get; set; } = default!;
+
+ ///
+ /// Format: DD/MM/YYYY
+ /// Fecha de publicación en el Diario Oficial de la Federación (DOF).
+ /// Opcional.
+ ///
+ [JsonProperty("pubFechaDofPresuntos")]
+ public string? PubFechaDofPresuntos { get; set; } = default!;
+
+ ///
+ /// Identificador de la publicación de estado “Definitivo”.
+ /// Opcional.
+ ///
+ [JsonProperty("pubSatDefinitivos")]
+ public string? PubSatDefinitivos { get; set; } = default!;
+
+ ///
+ /// Format: DD/MM/YYYY
+ /// Fecha de la publicación de estado “Definitivo” en el DOF.
+ /// Opcional.
+ ///
+ [JsonProperty("pubDofDefinitivos")]
+ public string? PubDofDefinitivos { get; set; } = default!;
+
+ ///
+ /// Texto con identificador y fecha de sentencia favorable.
+ /// Opcional.
+ ///
+ [JsonProperty("numFechaSentFav")]
+ public string? NumFechaSentFav { get; set; } = default!;
+
+ ///
+ /// Format: DD/MM/YYYY
+ /// Fecha de sentencia favorable
+ /// Opcional.
+ ///
+ [JsonProperty("pubSatSentFav")]
+ public string? PubSatSentFav { get; set; } = default!;
+
+ }
+}
diff --git a/Models/ErrorDetail.cs b/Models/ErrorDetail.cs
new file mode 100644
index 0000000..2e43d22
--- /dev/null
+++ b/Models/ErrorDetail.cs
@@ -0,0 +1,54 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ErrorDetail
+ ///
+ public class ErrorDetail
+ {
+ ///
+ /// Mensaje legible del detalle.
+ /// Requerido.
+ ///
+ [JsonProperty("message")]
+ public string Message { get; set; } = default!;
+
+ ///
+ /// Subcódigo del detalle. En validaciones de Facturapi usa códigos como `required`, `invalid_type` o `tax_id_not_found`; en errores externos puede contener el código original del proveedor.
+ /// Requerido.
+ ///
+ [JsonProperty("code")]
+ public string Code { get; set; } = default!;
+
+ ///
+ /// Ubicación opcional del dato relacionado con este detalle.
+ /// Valores: "body", "query", "params", "headers", "files".
+ /// Opcional.
+ ///
+ [JsonProperty("location")]
+ public string? Location { get; set; } = default!;
+
+ ///
+ /// Ruta opcional del campo relacionado con este detalle.
+ /// Opcional.
+ ///
+ [JsonProperty("path")]
+ public string? Path { get; set; } = default!;
+
+ ///
+ /// Fuente del detalle.
+ /// Valores: "facturapi", "sat", "pac".
+ /// Requerido.
+ ///
+ [JsonProperty("source")]
+ public string Source { get; set; } = default!;
+
+ }
+}
diff --git a/Models/FielCertificate.cs b/Models/FielCertificate.cs
new file mode 100644
index 0000000..2892748
--- /dev/null
+++ b/Models/FielCertificate.cs
@@ -0,0 +1,47 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// FielCertificate
+ ///
+ public class FielCertificate
+ {
+ ///
+ /// Indica si la organización ya tiene el Certificado FIEL cargado.
+ /// Opcional.
+ ///
+ [JsonProperty("has_certificate")]
+ public bool? HasCertificate { get; set; } = default!;
+
+ ///
+ /// Format: date-time
+ /// Fecha de la última actualización del certificado FIEL. Se omite cuando no hay un certificado cargado.
+ /// Opcional.
+ ///
+ [JsonProperty("updated_at")]
+ public DateTime? UpdatedAt { get; set; } = default!;
+
+ ///
+ /// Format: date-time
+ /// Fecha de expiración del certificado FIEL. Se omite cuando no hay un certificado cargado.
+ /// Opcional.
+ ///
+ [JsonProperty("expires_at")]
+ public DateTime? ExpiresAt { get; set; } = default!;
+
+ ///
+ /// Número de serie del certificado FIEL.
+ /// Opcional.
+ ///
+ [JsonProperty("serial_number")]
+ public string? SerialNumber { get; set; } = default!;
+
+ }
+}
diff --git a/Models/GenericError.cs b/Models/GenericError.cs
new file mode 100644
index 0000000..7df1cee
--- /dev/null
+++ b/Models/GenericError.cs
@@ -0,0 +1,70 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// GenericError
+ ///
+ public class GenericError
+ {
+ ///
+ /// Descripción del error
+ /// Indica qué salió mal y puede incluir una sugerencia sobre cómo solucionar el error.
+ /// Requerido.
+ ///
+ [JsonProperty("message")]
+ public string Message { get; set; } = default!;
+
+ ///
+ /// Código de estado HTTP
+ /// Format: int32
+ /// Código de estado HTTP de esta respuesta de error.
+ /// Requerido.
+ ///
+ [JsonProperty("status")]
+ public int Status { get; set; } = default!;
+
+ ///
+ /// Indica si la petición fue exitosa. Siempre `false` en respuestas de error.
+ /// Requerido.
+ ///
+ [JsonProperty("ok")]
+ public bool Ok { get; set; } = default!;
+
+ ///
+ /// Código de error estable para manejar el error de forma programática. Consulta la guía de manejo de errores para ver la lista de códigos documentados.
+ /// Requerido.
+ ///
+ [JsonProperty("code")]
+ public string Code { get; set; } = default!;
+
+ ///
+ /// Ubicación opcional del dato relacionado con el error.
+ /// Valores: "body", "query", "params", "headers", "files".
+ /// Opcional.
+ ///
+ [JsonProperty("location")]
+ public string? Location { get; set; } = default!;
+
+ ///
+ /// Ruta opcional del campo relacionado con el error.
+ /// Opcional.
+ ///
+ [JsonProperty("path")]
+ public string? Path { get; set; } = default!;
+
+ ///
+ /// Detalles adicionales del error. Sólo se incluye cuando aporta información útil.
+ /// Opcional.
+ ///
+ [JsonProperty("errors")]
+ public List? Errors { get; set; } = default!;
+
+ }
+}
diff --git a/Models/Global.cs b/Models/Global.cs
index bbc23f7..2dc267d 100644
--- a/Models/Global.cs
+++ b/Models/Global.cs
@@ -1,12 +1,39 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
using System;
+using System.IO;
using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
namespace Facturapi
{
+ ///
+ /// Global
+ ///
public class Global
{
- public string Periodicity { get; set; }
- public string Months { get; set; }
- public int Year { get; set; }
+ ///
+ /// periodicity
+ /// Valores: "day", "week", "fortnight", "month", "two_months".
+ /// Requerido.
+ ///
+ [JsonProperty("periodicity")]
+ public string Periodicity { get; set; } = default!;
+
+ ///
+ /// months
+ /// Requerido.
+ ///
+ [JsonProperty("months")]
+ public string Months { get; set; } = default!;
+
+ ///
+ /// year
+ /// Requerido.
+ ///
+ [JsonProperty("year")]
+ public int Year { get; set; } = default!;
+
}
}
diff --git a/Models/HidroYPetroComplement.cs b/Models/HidroYPetroComplement.cs
new file mode 100644
index 0000000..f5095e8
--- /dev/null
+++ b/Models/HidroYPetroComplement.cs
@@ -0,0 +1,50 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// HidroYPetroComplement
+ ///
+ public class HidroYPetroComplement
+ {
+ ///
+ /// Tipo de permiso otorgado por la autoridad competente, conforme al [Catálogo Hidrocarburos Petrolíferos](https://docs.facturapi.io/api/#cat%C3%A1logos-hidrocarburos-petrol%C3%ADferos).
+ /// Valores: "PER01", "PER02", "PER03", "PER04", "PER05", "PER06", "PER07", "PER08", "PER09", "PER10", "PER11".
+ /// Opcional.
+ ///
+ [JsonProperty("tipo_permiso")]
+ public string? TipoPermiso { get; set; } = default!;
+
+ ///
+ /// Número de permiso otorgado por la autoridad competente, conforme a la nomenclatura del catálogo c_TipoPermiso.
+ /// Opcional.
+ ///
+ [JsonProperty("numero_permiso")]
+ public string? NumeroPermiso { get; set; } = default!;
+
+ ///
+ /// Subtipo del hidrocarburo o petrolífero, conforme al [Catálogo Hidrocarburos Petrolíferos](https://docs.facturapi.io/api/#cat%C3%A1logos-hidrocarburos-petrol%C3%ADferos).
+ /// Valores: "SP16", "SP17", "SP18", "SP19", "SP22", "SP23", "SP24", "SP25", "SP48".
+ /// Opcional.
+ ///
+ [JsonProperty("sub_producto_hyp")]
+ public string? SubProductoHyp { get; set; } = default!;
+
+ ///
+ /// Clave correspondiente a hidrocarburos y petrolíferos, conforme al [Catálogo Hidrocarburos Petrolíferos](https://docs.facturapi.io/api/#cat%C3%A1logos-hidrocarburos-petrol%C3%ADferos).
+ ///
+ /// Puedes enviarla explícitamente o dejar que Facturapi la derive desde el `product_key` del concepto cuando aplique.
+ /// Valores: "15101514", "15101515", "15101505".
+ /// Opcional.
+ ///
+ [JsonProperty("clave_hyp")]
+ public string? ClaveHyp { get; set; } = default!;
+
+ }
+}
diff --git a/Models/IeduComplement.cs b/Models/IeduComplement.cs
new file mode 100644
index 0000000..3d8bcdb
--- /dev/null
+++ b/Models/IeduComplement.cs
@@ -0,0 +1,56 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// Complemento concepto de Instituciones Educativas Privadas versión 1.0.
+ ///
+ /// Se incluye a nivel concepto dentro de `items[].complement`.
+ ///
+ ///
+ public class IeduComplement
+ {
+ ///
+ /// Nombre del alumno.
+ /// Opcional.
+ ///
+ [JsonProperty("nombreAlumno")]
+ public string? NombreAlumno { get; set; } = default!;
+
+ ///
+ /// CURP del alumno de la institución educativa.
+ /// Opcional.
+ ///
+ [JsonProperty("CURP")]
+ public string? CURP { get; set; } = default!;
+
+ ///
+ /// Nivel educativo que cursa el alumno.
+ /// Valores: "Preescolar", "Primaria", "Secundaria", "Profesional técnico", "Bachillerato o su equivalente".
+ /// Opcional.
+ ///
+ [JsonProperty("nivelEducativo")]
+ public string? NivelEducativo { get; set; } = default!;
+
+ ///
+ /// Clave del centro de trabajo o reconocimiento de validez oficial de estudios de la institución educativa privada donde se realiza el pago.
+ /// Opcional.
+ ///
+ [JsonProperty("autRVOE")]
+ public string? AutRVOE { get; set; } = default!;
+
+ ///
+ /// RFC de quien realiza el pago cuando sea diferente a quien recibe el servicio.
+ /// Opcional.
+ ///
+ [JsonProperty("rfcPago")]
+ public string? RfcPago { get; set; } = default!;
+
+ }
+}
diff --git a/Models/Inputs/CancellationQueryInput.cs b/Models/Inputs/CancellationQueryInput.cs
new file mode 100644
index 0000000..cb6ebfc
--- /dev/null
+++ b/Models/Inputs/CancellationQueryInput.cs
@@ -0,0 +1,42 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// Omite los parámetros para eliminar un borrador. Los documentos emitidos requieren motivo; los motivos 01 y 04 también requieren substitution.
+ ///
+ public class CancellationQueryInput : Dictionary
+ {
+ ///
+ /// motive
+ /// Valores: "01", "04", "02", "03".
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Motive
+ {
+ get => TryGetValue("motive", out var value) ? (string?)value! : default!;
+ set => this["motive"] = value;
+ }
+
+ ///
+ /// ID de Facturapi o UUID del documento sustituto.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Substitution
+ {
+ get => TryGetValue("substitution", out var value) ? (string?)value! : default!;
+ set => this["substitution"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CancellationWithSubstitutionInput.cs b/Models/Inputs/CancellationWithSubstitutionInput.cs
new file mode 100644
index 0000000..e77c298
--- /dev/null
+++ b/Models/Inputs/CancellationWithSubstitutionInput.cs
@@ -0,0 +1,51 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// Omite los parámetros para eliminar un borrador. Los documentos emitidos requieren motivo; los motivos 01 y 04 también requieren substitution.
+ ///
+ public class CancellationWithSubstitutionInput : CancellationQueryInput
+ {
+ ///
+ /// Crea CancellationWithSubstitutionInput.
+ ///
+ /// motive Valores: "01", "04". Requerido.
+ /// ID de Facturapi o UUID del documento sustituto. Requerido.
+ public CancellationWithSubstitutionInput(string @motive, string @substitution) : base()
+ {
+ this["motive"] = @motive;
+ this["substitution"] = @substitution;
+ }
+
+ ///
+ /// motive
+ /// Valores: "01", "04".
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public new string Motive
+ {
+ get => TryGetValue("motive", out var value) ? (string)value! : default!;
+ set => this["motive"] = value;
+ }
+
+ ///
+ /// ID de Facturapi o UUID del documento sustituto.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public new string Substitution
+ {
+ get => TryGetValue("substitution", out var value) ? (string)value! : default!;
+ set => this["substitution"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteAutotransporteInput.cs b/Models/Inputs/CartaPorteAutotransporteInput.cs
new file mode 100644
index 0000000..78172a0
--- /dev/null
+++ b/Models/Inputs/CartaPorteAutotransporteInput.cs
@@ -0,0 +1,87 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteAutotransporteInput
+ ///
+ public class CartaPorteAutotransporteInput : Dictionary
+ {
+ ///
+ /// Crea CartaPorteAutotransporteInput.
+ ///
+ /// Clave del permiso SCT del autotransporte. Requerido.
+ /// Número del permiso SCT. Requerido.
+ /// Datos de identificación del vehículo principal. Requerido.
+ /// Información de seguros aplicables. Requerido.
+ public CartaPorteAutotransporteInput(string @permSCT, string @numPermisoSCT, CartaPorteIdentificacionVehicularInput @identificacionVehicular, CartaPorteSegurosInput @seguros)
+ {
+ this["PermSCT"] = @permSCT;
+ this["NumPermisoSCT"] = @numPermisoSCT;
+ this["IdentificacionVehicular"] = @identificacionVehicular;
+ this["Seguros"] = @seguros;
+ }
+
+ ///
+ /// Clave del permiso SCT del autotransporte.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string PermSCT
+ {
+ get => TryGetValue("PermSCT", out var value) ? (string)value! : default!;
+ set => this["PermSCT"] = value;
+ }
+
+ ///
+ /// Número del permiso SCT.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string NumPermisoSCT
+ {
+ get => TryGetValue("NumPermisoSCT", out var value) ? (string)value! : default!;
+ set => this["NumPermisoSCT"] = value;
+ }
+
+ ///
+ /// Datos de identificación del vehículo principal.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public CartaPorteIdentificacionVehicularInput IdentificacionVehicular
+ {
+ get => TryGetValue("IdentificacionVehicular", out var value) ? (CartaPorteIdentificacionVehicularInput)value! : default!;
+ set => this["IdentificacionVehicular"] = value;
+ }
+
+ ///
+ /// Información de seguros aplicables.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public CartaPorteSegurosInput Seguros
+ {
+ get => TryGetValue("Seguros", out var value) ? (CartaPorteSegurosInput)value! : default!;
+ set => this["Seguros"] = value;
+ }
+
+ ///
+ /// Lista de remolques acoplados.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? Remolques
+ {
+ get => TryGetValue("Remolques", out var value) ? (List?)value! : default!;
+ set => this["Remolques"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteCantidadTransportaInput.cs b/Models/Inputs/CartaPorteCantidadTransportaInput.cs
new file mode 100644
index 0000000..532100c
--- /dev/null
+++ b/Models/Inputs/CartaPorteCantidadTransportaInput.cs
@@ -0,0 +1,74 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteCantidadTransportaInput
+ ///
+ public class CartaPorteCantidadTransportaInput : Dictionary
+ {
+ ///
+ /// Crea CartaPorteCantidadTransportaInput.
+ ///
+ /// Cantidad Requerido.
+ /// IDOrigen Requerido.
+ /// IDDestino Requerido.
+ public CartaPorteCantidadTransportaInput(decimal @cantidad, string @iDOrigen, string @iDDestino)
+ {
+ this["Cantidad"] = @cantidad;
+ this["IDOrigen"] = @iDOrigen;
+ this["IDDestino"] = @iDDestino;
+ }
+
+ ///
+ /// Cantidad
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public decimal Cantidad
+ {
+ get => TryGetValue("Cantidad", out var value) ? (decimal)value! : default!;
+ set => this["Cantidad"] = value;
+ }
+
+ ///
+ /// IDOrigen
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string IDOrigen
+ {
+ get => TryGetValue("IDOrigen", out var value) ? (string)value! : default!;
+ set => this["IDOrigen"] = value;
+ }
+
+ ///
+ /// IDDestino
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string IDDestino
+ {
+ get => TryGetValue("IDDestino", out var value) ? (string)value! : default!;
+ set => this["IDDestino"] = value;
+ }
+
+ ///
+ /// Clave del medio de transporte.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? CvesTransporte
+ {
+ get => TryGetValue("CvesTransporte", out var value) ? (string?)value! : default!;
+ set => this["CvesTransporte"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteCarroFerroviarioInput.cs b/Models/Inputs/CartaPorteCarroFerroviarioInput.cs
new file mode 100644
index 0000000..8a26e5d
--- /dev/null
+++ b/Models/Inputs/CartaPorteCarroFerroviarioInput.cs
@@ -0,0 +1,72 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteCarroFerroviarioInput
+ ///
+ public class CartaPorteCarroFerroviarioInput : Dictionary
+ {
+ ///
+ /// Tipo de carro ferroviario.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? TipoCarro
+ {
+ get => TryGetValue("TipoCarro", out var value) ? (string?)value! : default!;
+ set => this["TipoCarro"] = value;
+ }
+
+ ///
+ /// Matrícula o número identificador del carro.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? MatriculaCarro
+ {
+ get => TryGetValue("MatriculaCarro", out var value) ? (string?)value! : default!;
+ set => this["MatriculaCarro"] = value;
+ }
+
+ ///
+ /// Número de guía asociado al carro.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? GuiaCarro
+ {
+ get => TryGetValue("GuiaCarro", out var value) ? (string?)value! : default!;
+ set => this["GuiaCarro"] = value;
+ }
+
+ ///
+ /// Toneladas netas transportadas en el carro.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? ToneladasNetasCarro
+ {
+ get => TryGetValue("ToneladasNetasCarro", out var value) ? (decimal?)value! : default!;
+ set => this["ToneladasNetasCarro"] = value;
+ }
+
+ ///
+ /// Contenedores asociados al carro.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? Contenedor
+ {
+ get => TryGetValue("Contenedor", out var value) ? (List?)value! : default!;
+ set => this["Contenedor"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteContenedorFerroviarioInput.cs b/Models/Inputs/CartaPorteContenedorFerroviarioInput.cs
new file mode 100644
index 0000000..9479806
--- /dev/null
+++ b/Models/Inputs/CartaPorteContenedorFerroviarioInput.cs
@@ -0,0 +1,50 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteContenedorFerroviarioInput
+ ///
+ public class CartaPorteContenedorFerroviarioInput : Dictionary
+ {
+ ///
+ /// Tipo de contenedor ferroviario.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? TipoContenedor
+ {
+ get => TryGetValue("TipoContenedor", out var value) ? (string?)value! : default!;
+ set => this["TipoContenedor"] = value;
+ }
+
+ ///
+ /// Peso del contenedor vacío.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? PesoContenedorVacio
+ {
+ get => TryGetValue("PesoContenedorVacio", out var value) ? (decimal?)value! : default!;
+ set => this["PesoContenedorVacio"] = value;
+ }
+
+ ///
+ /// Peso neto de la mercancía contenida.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? PesoNetoMercancia
+ {
+ get => TryGetValue("PesoNetoMercancia", out var value) ? (decimal?)value! : default!;
+ set => this["PesoNetoMercancia"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteContenedorMaritimoInput.cs b/Models/Inputs/CartaPorteContenedorMaritimoInput.cs
new file mode 100644
index 0000000..5de03af
--- /dev/null
+++ b/Models/Inputs/CartaPorteContenedorMaritimoInput.cs
@@ -0,0 +1,94 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteContenedorMaritimoInput
+ ///
+ public class CartaPorteContenedorMaritimoInput : Dictionary
+ {
+ ///
+ /// Tipo de contenedor marítimo (ISO / catálogo SAT).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? TipoContenedor
+ {
+ get => TryGetValue("TipoContenedor", out var value) ? (string?)value! : default!;
+ set => this["TipoContenedor"] = value;
+ }
+
+ ///
+ /// Matrícula o número identificador del contenedor.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? MatriculaContenedor
+ {
+ get => TryGetValue("MatriculaContenedor", out var value) ? (string?)value! : default!;
+ set => this["MatriculaContenedor"] = value;
+ }
+
+ ///
+ /// Número de precinto o sello de seguridad.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumPrecinto
+ {
+ get => TryGetValue("NumPrecinto", out var value) ? (string?)value! : default!;
+ set => this["NumPrecinto"] = value;
+ }
+
+ ///
+ /// Identificador CCP relacionado cuando se reutiliza información.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? IdCCPRelacionado
+ {
+ get => TryGetValue("IdCCPRelacionado", out var value) ? (string?)value! : default!;
+ set => this["IdCCPRelacionado"] = value;
+ }
+
+ ///
+ /// Placa del vehículo motor asociado (si aplica en transbordo).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? PlacaVMCCP
+ {
+ get => TryGetValue("PlacaVMCCP", out var value) ? (string?)value! : default!;
+ set => this["PlacaVMCCP"] = value;
+ }
+
+ ///
+ /// Fecha de certificación CCP del contenedor.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? FechaCertificacionCCP
+ {
+ get => TryGetValue("FechaCertificacionCCP", out var value) ? (string?)value! : default!;
+ set => this["FechaCertificacionCCP"] = value;
+ }
+
+ ///
+ /// RemolquesCCP
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? RemolquesCCP
+ {
+ get => TryGetValue("RemolquesCCP", out var value) ? (List?)value! : default!;
+ set => this["RemolquesCCP"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteContenedorMaritimoInputRemolquesCCPItem.cs b/Models/Inputs/CartaPorteContenedorMaritimoInputRemolquesCCPItem.cs
new file mode 100644
index 0000000..94e4c16
--- /dev/null
+++ b/Models/Inputs/CartaPorteContenedorMaritimoInputRemolquesCCPItem.cs
@@ -0,0 +1,39 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteContenedorMaritimoInputRemolquesCCPItem
+ ///
+ public class CartaPorteContenedorMaritimoInputRemolquesCCPItem : Dictionary
+ {
+ ///
+ /// Subtipo de remolque relacionado (CCP).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? SubTipoRemCCP
+ {
+ get => TryGetValue("SubTipoRemCCP", out var value) ? (string?)value! : default!;
+ set => this["SubTipoRemCCP"] = value;
+ }
+
+ ///
+ /// Placa del remolque relacionado (CCP).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? PlacaCCP
+ {
+ get => TryGetValue("PlacaCCP", out var value) ? (string?)value! : default!;
+ set => this["PlacaCCP"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteDataPropertiesInput.cs b/Models/Inputs/CartaPorteDataPropertiesInput.cs
new file mode 100644
index 0000000..d69ba0c
--- /dev/null
+++ b/Models/Inputs/CartaPorteDataPropertiesInput.cs
@@ -0,0 +1,175 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// Complemento Carta Porte versión 3.1. (Beta)
+ ///
+ public class CartaPorteDataPropertiesInput : Dictionary
+ {
+ ///
+ /// Crea CartaPorteDataPropertiesInput.
+ ///
+ /// Identificador único de la Carta Porte. Requerido.
+ /// Indica si el transporte es internacional. Requerido.
+ /// Arreglo de ubicaciones. Requerido.
+ /// Mercancias Requerido.
+ public CartaPorteDataPropertiesInput(string @idCCP, string @transpInternac, List @ubicaciones, CartaPorteMercanciasInput @mercancias)
+ {
+ this["IdCCP"] = @idCCP;
+ this["TranspInternac"] = @transpInternac;
+ this["Ubicaciones"] = @ubicaciones;
+ this["Mercancias"] = @mercancias;
+ }
+
+ ///
+ /// Identificador único de la Carta Porte.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string IdCCP
+ {
+ get => TryGetValue("IdCCP", out var value) ? (string)value! : default!;
+ set => this["IdCCP"] = value;
+ }
+
+ ///
+ /// Indica si el transporte es internacional.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string TranspInternac
+ {
+ get => TryGetValue("TranspInternac", out var value) ? (string)value! : default!;
+ set => this["TranspInternac"] = value;
+ }
+
+ ///
+ /// Entrada o salida de mercancías.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? EntradaSalidaMerc
+ {
+ get => TryGetValue("EntradaSalidaMerc", out var value) ? (string?)value! : default!;
+ set => this["EntradaSalidaMerc"] = value;
+ }
+
+ ///
+ /// País de origen o destino.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? PaisOrigenDestino
+ {
+ get => TryGetValue("PaisOrigenDestino", out var value) ? (string?)value! : default!;
+ set => this["PaisOrigenDestino"] = value;
+ }
+
+ ///
+ /// Vía de entrada o salida.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? ViaEntradaSalida
+ {
+ get => TryGetValue("ViaEntradaSalida", out var value) ? (string?)value! : default!;
+ set => this["ViaEntradaSalida"] = value;
+ }
+
+ ///
+ /// Distancia total recorrida.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? TotalDistRec
+ {
+ get => TryGetValue("TotalDistRec", out var value) ? (decimal?)value! : default!;
+ set => this["TotalDistRec"] = value;
+ }
+
+ ///
+ /// Registro del programa ISTMO.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? RegistroISTMO
+ {
+ get => TryGetValue("RegistroISTMO", out var value) ? (string?)value! : default!;
+ set => this["RegistroISTMO"] = value;
+ }
+
+ ///
+ /// Polo origen.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? UbicacionPoloOrigen
+ {
+ get => TryGetValue("UbicacionPoloOrigen", out var value) ? (string?)value! : default!;
+ set => this["UbicacionPoloOrigen"] = value;
+ }
+
+ ///
+ /// Polo destino.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? UbicacionPoloDestino
+ {
+ get => TryGetValue("UbicacionPoloDestino", out var value) ? (string?)value! : default!;
+ set => this["UbicacionPoloDestino"] = value;
+ }
+
+ ///
+ /// Objeto con los regímenes aduaneros aplicables.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public Dictionary? RegimenesAduaneros
+ {
+ get => TryGetValue("RegimenesAduaneros", out var value) ? (Dictionary?)value! : default!;
+ set => this["RegimenesAduaneros"] = value;
+ }
+
+ ///
+ /// Arreglo de ubicaciones.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public List Ubicaciones
+ {
+ get => TryGetValue("Ubicaciones", out var value) ? (List)value! : default!;
+ set => this["Ubicaciones"] = value;
+ }
+
+ ///
+ /// Mercancias
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public CartaPorteMercanciasInput Mercancias
+ {
+ get => TryGetValue("Mercancias", out var value) ? (CartaPorteMercanciasInput)value! : default!;
+ set => this["Mercancias"] = value;
+ }
+
+ ///
+ /// Figuras de transporte.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? FiguraTransporte
+ {
+ get => TryGetValue("FiguraTransporte", out var value) ? (List?)value! : default!;
+ set => this["FiguraTransporte"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteDataPropertiesInputFiguraTransporteItem.cs b/Models/Inputs/CartaPorteDataPropertiesInputFiguraTransporteItem.cs
new file mode 100644
index 0000000..64c3059
--- /dev/null
+++ b/Models/Inputs/CartaPorteDataPropertiesInputFiguraTransporteItem.cs
@@ -0,0 +1,116 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteDataPropertiesInputFiguraTransporteItem
+ ///
+ public class CartaPorteDataPropertiesInputFiguraTransporteItem : Dictionary
+ {
+ ///
+ /// Crea CartaPorteDataPropertiesInputFiguraTransporteItem.
+ ///
+ /// Atributo requerido. Clave que identifica el tipo de figura de transporte conforme al catálogo correspondiente (operador, propietario, arrendatario, notificado). Debe coincidir con c_TipoFigura. Requerido.
+ /// Nombre o razón social de la figura de transporte (requerido). Requerido.
+ public CartaPorteDataPropertiesInputFiguraTransporteItem(string @tipoFigura, string @nombreFigura)
+ {
+ this["TipoFigura"] = @tipoFigura;
+ this["NombreFigura"] = @nombreFigura;
+ }
+
+ ///
+ /// Atributo requerido. Clave que identifica el tipo de figura de transporte conforme al catálogo correspondiente (operador, propietario, arrendatario, notificado). Debe coincidir con c_TipoFigura.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string TipoFigura
+ {
+ get => TryGetValue("TipoFigura", out var value) ? (string)value! : default!;
+ set => this["TipoFigura"] = value;
+ }
+
+ ///
+ /// RFC del operador/propietario/arrendatario o figura interveniente.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? RFCFigura
+ {
+ get => TryGetValue("RFCFigura", out var value) ? (string?)value! : default!;
+ set => this["RFCFigura"] = value;
+ }
+
+ ///
+ /// Número de licencia del operador cuando TipoFigura corresponde a operador.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumLicencia
+ {
+ get => TryGetValue("NumLicencia", out var value) ? (string?)value! : default!;
+ set => this["NumLicencia"] = value;
+ }
+
+ ///
+ /// Nombre o razón social de la figura de transporte (requerido).
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string NombreFigura
+ {
+ get => TryGetValue("NombreFigura", out var value) ? (string)value! : default!;
+ set => this["NombreFigura"] = value;
+ }
+
+ ///
+ /// Número de registro fiscal en el extranjero de la figura cuando aplica.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumRegIdTribFigura
+ {
+ get => TryGetValue("NumRegIdTribFigura", out var value) ? (string?)value! : default!;
+ set => this["NumRegIdTribFigura"] = value;
+ }
+
+ ///
+ /// Clave del país de residencia fiscal de la figura (c_Pais) cuando es extranjero.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? ResidenciaFiscalFigura
+ {
+ get => TryGetValue("ResidenciaFiscalFigura", out var value) ? (string?)value! : default!;
+ set => this["ResidenciaFiscalFigura"] = value;
+ }
+
+ ///
+ /// Arreglo opcional con las partes del transporte que se relacionan a la figura.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? PartesTransporte
+ {
+ get => TryGetValue("PartesTransporte", out var value) ? (List?)value! : default!;
+ set => this["PartesTransporte"] = value;
+ }
+
+ ///
+ /// Domicilio asociado a la figura del transporte.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public CartaPorteDomicilioInput? Domicilio
+ {
+ get => TryGetValue("Domicilio", out var value) ? (CartaPorteDomicilioInput?)value! : default!;
+ set => this["Domicilio"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteDataPropertiesInputFiguraTransporteItemPartesTransporteItem.cs b/Models/Inputs/CartaPorteDataPropertiesInputFiguraTransporteItemPartesTransporteItem.cs
new file mode 100644
index 0000000..5f7f869
--- /dev/null
+++ b/Models/Inputs/CartaPorteDataPropertiesInputFiguraTransporteItemPartesTransporteItem.cs
@@ -0,0 +1,37 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteDataPropertiesInputFiguraTransporteItemPartesTransporteItem
+ ///
+ public class CartaPorteDataPropertiesInputFiguraTransporteItemPartesTransporteItem : Dictionary
+ {
+ ///
+ /// Crea CartaPorteDataPropertiesInputFiguraTransporteItemPartesTransporteItem.
+ ///
+ /// Clave de la parte del transporte conforme al catálogo c_ParteTransporte. Requerido.
+ public CartaPorteDataPropertiesInputFiguraTransporteItemPartesTransporteItem(string @parteTransporte)
+ {
+ this["ParteTransporte"] = @parteTransporte;
+ }
+
+ ///
+ /// Clave de la parte del transporte conforme al catálogo c_ParteTransporte.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string ParteTransporte
+ {
+ get => TryGetValue("ParteTransporte", out var value) ? (string)value! : default!;
+ set => this["ParteTransporte"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteDataPropertiesInputUbicacionesItem.cs b/Models/Inputs/CartaPorteDataPropertiesInputUbicacionesItem.cs
new file mode 100644
index 0000000..31e194e
--- /dev/null
+++ b/Models/Inputs/CartaPorteDataPropertiesInputUbicacionesItem.cs
@@ -0,0 +1,173 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteDataPropertiesInputUbicacionesItem
+ ///
+ public class CartaPorteDataPropertiesInputUbicacionesItem : Dictionary
+ {
+ ///
+ /// Crea CartaPorteDataPropertiesInputUbicacionesItem.
+ ///
+ /// Atributo requerido para precisar si el tipo de ubicación corresponde al origen o destino de las ubicaciones para el traslado de los bienes y/o mercancías en los distintos medios de transporte. Valores: "Origen" | "Destino". Requerido.
+ /// Atributo requerido para registrar el RFC del remitente o destinatario de los bienes y/o mercancías que se trasladan. Requerido.
+ /// Atributo requerido para registrar la fecha y hora estimada de salida o llegada en formato AAAA-MM-DDThh:mm:ss. Requerido.
+ public CartaPorteDataPropertiesInputUbicacionesItem(string @tipoUbicacion, string @rFCRemitenteDestinatario, string @fechaHoraSalidaLlegada)
+ {
+ this["TipoUbicacion"] = @tipoUbicacion;
+ this["RFCRemitenteDestinatario"] = @rFCRemitenteDestinatario;
+ this["FechaHoraSalidaLlegada"] = @fechaHoraSalidaLlegada;
+ }
+
+ ///
+ /// Atributo requerido para precisar si el tipo de ubicación corresponde al origen o destino de las ubicaciones para el traslado de los bienes y/o mercancías en los distintos medios de transporte. Valores: "Origen" | "Destino".
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string TipoUbicacion
+ {
+ get => TryGetValue("TipoUbicacion", out var value) ? (string)value! : default!;
+ set => this["TipoUbicacion"] = value;
+ }
+
+ ///
+ /// Atributo condicional para registrar una clave que identifique el punto de salida o entrada de los bienes y/o mercancías. Formato: "OR" o "DE" seguido de 6 dígitos numéricos (expresión regular (OR|DE)[0-9]{6}).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? IDUbicacion
+ {
+ get => TryGetValue("IDUbicacion", out var value) ? (string?)value! : default!;
+ set => this["IDUbicacion"] = value;
+ }
+
+ ///
+ /// Atributo requerido para registrar el RFC del remitente o destinatario de los bienes y/o mercancías que se trasladan.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string RFCRemitenteDestinatario
+ {
+ get => TryGetValue("RFCRemitenteDestinatario", out var value) ? (string)value! : default!;
+ set => this["RFCRemitenteDestinatario"] = value;
+ }
+
+ ///
+ /// Atributo opcional para registrar el nombre del remitente o destinatario de los bienes y/o mercancías (longitud 1 a 254 caracteres).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NombreRemitenteDestinatario
+ {
+ get => TryGetValue("NombreRemitenteDestinatario", out var value) ? (string?)value! : default!;
+ set => this["NombreRemitenteDestinatario"] = value;
+ }
+
+ ///
+ /// Atributo condicional para el número de identificación o registro fiscal del país de residencia del remitente o destinatario cuando se trate de residentes en el extranjero (longitud 6 a 40 caracteres).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumRegIdTrib
+ {
+ get => TryGetValue("NumRegIdTrib", out var value) ? (string?)value! : default!;
+ set => this["NumRegIdTrib"] = value;
+ }
+
+ ///
+ /// Atributo condicional para registrar la clave del país de residencia fiscal conforme al catálogo c_Pais (ISO 3166-1).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? ResidenciaFiscal
+ {
+ get => TryGetValue("ResidenciaFiscal", out var value) ? (string?)value! : default!;
+ set => this["ResidenciaFiscal"] = value;
+ }
+
+ ///
+ /// Atributo condicional para la clave de la estación de origen o destino conforme al catálogo c_Estaciones del complemento Carta Porte y al tipo de transporte.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumEstacion
+ {
+ get => TryGetValue("NumEstacion", out var value) ? (string?)value! : default!;
+ set => this["NumEstacion"] = value;
+ }
+
+ ///
+ /// Atributo condicional para el nombre de la estación de origen o destino conforme al catálogo c_Estaciones (longitud 1 a 50 caracteres).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NombreEstacion
+ {
+ get => TryGetValue("NombreEstacion", out var value) ? (string?)value! : default!;
+ set => this["NombreEstacion"] = value;
+ }
+
+ ///
+ /// Atributo condicional para registrar el tipo de puerto de origen o destino en transporte marítimo. Valores: "Altura" | "Cabotaje".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NavegacionTrafico
+ {
+ get => TryGetValue("NavegacionTrafico", out var value) ? (string?)value! : default!;
+ set => this["NavegacionTrafico"] = value;
+ }
+
+ ///
+ /// Atributo requerido para registrar la fecha y hora estimada de salida o llegada en formato AAAA-MM-DDThh:mm:ss.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string FechaHoraSalidaLlegada
+ {
+ get => TryGetValue("FechaHoraSalidaLlegada", out var value) ? (string)value! : default!;
+ set => this["FechaHoraSalidaLlegada"] = value;
+ }
+
+ ///
+ /// Atributo condicional para registrar el tipo de estación por la que pasan las mercancías conforme al catálogo c_TipoEstacion.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? TipoEstacion
+ {
+ get => TryGetValue("TipoEstacion", out var value) ? (string?)value! : default!;
+ set => this["TipoEstacion"] = value;
+ }
+
+ ///
+ /// Atributo condicional para registrar en kilómetros la distancia recorrida entre la ubicación de origen y la de destino parcial o final.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? DistanciaRecorrida
+ {
+ get => TryGetValue("DistanciaRecorrida", out var value) ? (decimal?)value! : default!;
+ set => this["DistanciaRecorrida"] = value;
+ }
+
+ ///
+ /// Domicilio
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public CartaPorteDomicilioInput? Domicilio
+ {
+ get => TryGetValue("Domicilio", out var value) ? (CartaPorteDomicilioInput?)value! : default!;
+ set => this["Domicilio"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteDerechosDePasoInput.cs b/Models/Inputs/CartaPorteDerechosDePasoInput.cs
new file mode 100644
index 0000000..25b4499
--- /dev/null
+++ b/Models/Inputs/CartaPorteDerechosDePasoInput.cs
@@ -0,0 +1,39 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteDerechosDePasoInput
+ ///
+ public class CartaPorteDerechosDePasoInput : Dictionary
+ {
+ ///
+ /// Tipo de derecho de paso ferroviario.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? TipoDerechoDePaso
+ {
+ get => TryGetValue("TipoDerechoDePaso", out var value) ? (string?)value! : default!;
+ set => this["TipoDerechoDePaso"] = value;
+ }
+
+ ///
+ /// Kilometraje cubierto/pagado en el derecho de paso.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? KilometrajePagado
+ {
+ get => TryGetValue("KilometrajePagado", out var value) ? (decimal?)value! : default!;
+ set => this["KilometrajePagado"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteDetalleMercanciaInput.cs b/Models/Inputs/CartaPorteDetalleMercanciaInput.cs
new file mode 100644
index 0000000..1f75704
--- /dev/null
+++ b/Models/Inputs/CartaPorteDetalleMercanciaInput.cs
@@ -0,0 +1,87 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteDetalleMercanciaInput
+ ///
+ public class CartaPorteDetalleMercanciaInput : Dictionary
+ {
+ ///
+ /// Crea CartaPorteDetalleMercanciaInput.
+ ///
+ /// Clave de la unidad de peso de la mercancía conforme al catálogo correspondiente. Requerido.
+ /// Peso bruto de la mercancía incluyendo embalajes y tare. Requerido.
+ /// Peso neto de la mercancía sin incluir embalajes ni tara. Requerido.
+ /// Peso de la tara (contenedores, embalajes) asociado a la mercancía. Requerido.
+ public CartaPorteDetalleMercanciaInput(string @unidadPesoMerc, decimal @pesoBruto, decimal @pesoNeto, decimal @pesoTara)
+ {
+ this["UnidadPesoMerc"] = @unidadPesoMerc;
+ this["PesoBruto"] = @pesoBruto;
+ this["PesoNeto"] = @pesoNeto;
+ this["PesoTara"] = @pesoTara;
+ }
+
+ ///
+ /// Clave de la unidad de peso de la mercancía conforme al catálogo correspondiente.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string UnidadPesoMerc
+ {
+ get => TryGetValue("UnidadPesoMerc", out var value) ? (string)value! : default!;
+ set => this["UnidadPesoMerc"] = value;
+ }
+
+ ///
+ /// Peso bruto de la mercancía incluyendo embalajes y tare.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public decimal PesoBruto
+ {
+ get => TryGetValue("PesoBruto", out var value) ? (decimal)value! : default!;
+ set => this["PesoBruto"] = value;
+ }
+
+ ///
+ /// Peso neto de la mercancía sin incluir embalajes ni tara.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public decimal PesoNeto
+ {
+ get => TryGetValue("PesoNeto", out var value) ? (decimal)value! : default!;
+ set => this["PesoNeto"] = value;
+ }
+
+ ///
+ /// Peso de la tara (contenedores, embalajes) asociado a la mercancía.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public decimal PesoTara
+ {
+ get => TryGetValue("PesoTara", out var value) ? (decimal)value! : default!;
+ set => this["PesoTara"] = value;
+ }
+
+ ///
+ /// Número de piezas que conforman la mercancía detallada.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? NumPiezas
+ {
+ get => TryGetValue("NumPiezas", out var value) ? (decimal?)value! : default!;
+ set => this["NumPiezas"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteDocumentacionAduaneraInput.cs b/Models/Inputs/CartaPorteDocumentacionAduaneraInput.cs
new file mode 100644
index 0000000..253f05b
--- /dev/null
+++ b/Models/Inputs/CartaPorteDocumentacionAduaneraInput.cs
@@ -0,0 +1,61 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// RFC del importador cuando aplica.
+ ///
+ public class CartaPorteDocumentacionAduaneraInput : Dictionary
+ {
+ ///
+ /// Tipo de documento aduanero (pedimento, guía, conocimiento) relacionado.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? TipoDocumento
+ {
+ get => TryGetValue("TipoDocumento", out var value) ? (string?)value! : default!;
+ set => this["TipoDocumento"] = value;
+ }
+
+ ///
+ /// Número de pedimento de importación/exportación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumPedimento
+ {
+ get => TryGetValue("NumPedimento", out var value) ? (string?)value! : default!;
+ set => this["NumPedimento"] = value;
+ }
+
+ ///
+ /// Identificador alterno del documento aduanero.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? IdentDocAduanero
+ {
+ get => TryGetValue("IdentDocAduanero", out var value) ? (string?)value! : default!;
+ set => this["IdentDocAduanero"] = value;
+ }
+
+ ///
+ /// RFCImpo
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? RFCImpo
+ {
+ get => TryGetValue("RFCImpo", out var value) ? (string?)value! : default!;
+ set => this["RFCImpo"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteDomicilioInput.cs b/Models/Inputs/CartaPorteDomicilioInput.cs
new file mode 100644
index 0000000..28a1085
--- /dev/null
+++ b/Models/Inputs/CartaPorteDomicilioInput.cs
@@ -0,0 +1,140 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// Domicilio relacionado a la ubicación en el complemento Carta Porte.
+ ///
+ public class CartaPorteDomicilioInput : Dictionary
+ {
+ ///
+ /// Crea CartaPorteDomicilioInput.
+ ///
+ /// Clave de estado, entidad o región (ISO 3166-2 conforme catálogo SAT). Requerido.
+ /// Clave del país (catálogo c_Pais, ISO 3166-1). Requerido.
+ /// Código postal del domicilio. Requerido.
+ public CartaPorteDomicilioInput(string @estado, string @pais, string @codigoPostal)
+ {
+ this["Estado"] = @estado;
+ this["Pais"] = @pais;
+ this["CodigoPostal"] = @codigoPostal;
+ }
+
+ ///
+ /// Calle del domicilio de origen y/o destino (requerida en XSD).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Calle
+ {
+ get => TryGetValue("Calle", out var value) ? (string?)value! : default!;
+ set => this["Calle"] = value;
+ }
+
+ ///
+ /// Número exterior donde se ubica el domicilio.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumeroExterior
+ {
+ get => TryGetValue("NumeroExterior", out var value) ? (string?)value! : default!;
+ set => this["NumeroExterior"] = value;
+ }
+
+ ///
+ /// Número interior del domicilio, si existe.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumeroInterior
+ {
+ get => TryGetValue("NumeroInterior", out var value) ? (string?)value! : default!;
+ set => this["NumeroInterior"] = value;
+ }
+
+ ///
+ /// Colonia o dato análogo del domicilio.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Colonia
+ {
+ get => TryGetValue("Colonia", out var value) ? (string?)value! : default!;
+ set => this["Colonia"] = value;
+ }
+
+ ///
+ /// Ciudad, población o distrito del domicilio.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Localidad
+ {
+ get => TryGetValue("Localidad", out var value) ? (string?)value! : default!;
+ set => this["Localidad"] = value;
+ }
+
+ ///
+ /// Referencia geográfica adicional (ej. coordenadas GPS).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Referencia
+ {
+ get => TryGetValue("Referencia", out var value) ? (string?)value! : default!;
+ set => this["Referencia"] = value;
+ }
+
+ ///
+ /// Municipio, delegación, alcaldía o análogo del domicilio.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Municipio
+ {
+ get => TryGetValue("Municipio", out var value) ? (string?)value! : default!;
+ set => this["Municipio"] = value;
+ }
+
+ ///
+ /// Clave de estado, entidad o región (ISO 3166-2 conforme catálogo SAT).
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string Estado
+ {
+ get => TryGetValue("Estado", out var value) ? (string)value! : default!;
+ set => this["Estado"] = value;
+ }
+
+ ///
+ /// Clave del país (catálogo c_Pais, ISO 3166-1).
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string Pais
+ {
+ get => TryGetValue("Pais", out var value) ? (string)value! : default!;
+ set => this["Pais"] = value;
+ }
+
+ ///
+ /// Código postal del domicilio.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string CodigoPostal
+ {
+ get => TryGetValue("CodigoPostal", out var value) ? (string)value! : default!;
+ set => this["CodigoPostal"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteGuiaIdentificacionInput.cs b/Models/Inputs/CartaPorteGuiaIdentificacionInput.cs
new file mode 100644
index 0000000..921aaae
--- /dev/null
+++ b/Models/Inputs/CartaPorteGuiaIdentificacionInput.cs
@@ -0,0 +1,50 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteGuiaIdentificacionInput
+ ///
+ public class CartaPorteGuiaIdentificacionInput : Dictionary
+ {
+ ///
+ /// Número de la guía de identificación asociada a la mercancía.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumeroGuiaIdentificacion
+ {
+ get => TryGetValue("NumeroGuiaIdentificacion", out var value) ? (string?)value! : default!;
+ set => this["NumeroGuiaIdentificacion"] = value;
+ }
+
+ ///
+ /// Descripción detallada de la guía de identificación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? DescripGuiaIdentificacion
+ {
+ get => TryGetValue("DescripGuiaIdentificacion", out var value) ? (string?)value! : default!;
+ set => this["DescripGuiaIdentificacion"] = value;
+ }
+
+ ///
+ /// Peso amparado por la guía de identificación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? PesoGuiaIdentificacion
+ {
+ get => TryGetValue("PesoGuiaIdentificacion", out var value) ? (decimal?)value! : default!;
+ set => this["PesoGuiaIdentificacion"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteIdentificacionVehicularInput.cs b/Models/Inputs/CartaPorteIdentificacionVehicularInput.cs
new file mode 100644
index 0000000..7f2768b
--- /dev/null
+++ b/Models/Inputs/CartaPorteIdentificacionVehicularInput.cs
@@ -0,0 +1,76 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteIdentificacionVehicularInput
+ ///
+ public class CartaPorteIdentificacionVehicularInput : Dictionary
+ {
+ ///
+ /// Crea CartaPorteIdentificacionVehicularInput.
+ ///
+ /// Configuración vehicular (catCartaPorte:c_ConfigAutotransporte) del vehículo primario. Requerido.
+ /// Peso bruto vehicular máximo permitido. Requerido.
+ /// Placa del vehículo motor. Requerido.
+ /// Año modelo del vehículo motor. Requerido.
+ public CartaPorteIdentificacionVehicularInput(string @configVehicular, decimal @pesoBrutoVehicular, string @placaVM, string @anioModeloVM)
+ {
+ this["ConfigVehicular"] = @configVehicular;
+ this["PesoBrutoVehicular"] = @pesoBrutoVehicular;
+ this["PlacaVM"] = @placaVM;
+ this["AnioModeloVM"] = @anioModeloVM;
+ }
+
+ ///
+ /// Configuración vehicular (catCartaPorte:c_ConfigAutotransporte) del vehículo primario.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string ConfigVehicular
+ {
+ get => TryGetValue("ConfigVehicular", out var value) ? (string)value! : default!;
+ set => this["ConfigVehicular"] = value;
+ }
+
+ ///
+ /// Peso bruto vehicular máximo permitido.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public decimal PesoBrutoVehicular
+ {
+ get => TryGetValue("PesoBrutoVehicular", out var value) ? (decimal)value! : default!;
+ set => this["PesoBrutoVehicular"] = value;
+ }
+
+ ///
+ /// Placa del vehículo motor.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string PlacaVM
+ {
+ get => TryGetValue("PlacaVM", out var value) ? (string)value! : default!;
+ set => this["PlacaVM"] = value;
+ }
+
+ ///
+ /// Año modelo del vehículo motor.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string AnioModeloVM
+ {
+ get => TryGetValue("AnioModeloVM", out var value) ? (string)value! : default!;
+ set => this["AnioModeloVM"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteInput.cs b/Models/Inputs/CartaPorteInput.cs
new file mode 100644
index 0000000..e31fbcf
--- /dev/null
+++ b/Models/Inputs/CartaPorteInput.cs
@@ -0,0 +1,48 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteInput
+ ///
+ public class CartaPorteInput : InvoiceComplementInput
+ {
+ ///
+ /// Crea CartaPorteInput.
+ ///
+ public CartaPorteInput() : base("carta_porte")
+ {
+ this["type"] = "carta_porte";
+ }
+
+ ///
+ /// type
+ /// Valores: "carta_porte".
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public new string Type
+ {
+ get => TryGetValue("type", out var value) ? (string)value! : default!;
+ set => this["type"] = value;
+ }
+
+ ///
+ /// data
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public new CartaPorteDataPropertiesInput? Data
+ {
+ get => TryGetValue("data", out var value) ? (CartaPorteDataPropertiesInput?)value! : default!;
+ set => this["data"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteMercanciaInput.cs b/Models/Inputs/CartaPorteMercanciaInput.cs
new file mode 100644
index 0000000..7c5842c
--- /dev/null
+++ b/Models/Inputs/CartaPorteMercanciaInput.cs
@@ -0,0 +1,496 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteMercanciaInput
+ ///
+ public class CartaPorteMercanciaInput : Dictionary
+ {
+ ///
+ /// Crea CartaPorteMercanciaInput.
+ ///
+ /// Clave del bien o producto transportado (catCartaPorte:c_BienesTransp). Requerido.
+ /// Descripción comercial del bien transportado. Requerido.
+ /// Cantidad total de unidades del bien. Requerido.
+ /// Clave de unidad (c_ClaveUnidad) aplicable a la cantidad. Requerido.
+ /// Peso en kilogramos de la mercancía (puede ser peso neto o bruto según contexto). Requerido.
+ public CartaPorteMercanciaInput(string @bienesTransp, string @descripcion, decimal @cantidad, string @claveUnidad, decimal @pesoEnKg)
+ {
+ this["BienesTransp"] = @bienesTransp;
+ this["Descripcion"] = @descripcion;
+ this["Cantidad"] = @cantidad;
+ this["ClaveUnidad"] = @claveUnidad;
+ this["PesoEnKg"] = @pesoEnKg;
+ }
+
+ ///
+ /// Clave del bien o producto transportado (catCartaPorte:c_BienesTransp).
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string BienesTransp
+ {
+ get => TryGetValue("BienesTransp", out var value) ? (string)value! : default!;
+ set => this["BienesTransp"] = value;
+ }
+
+ ///
+ /// Clave STCC para transporte ferroviario cuando corresponda.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? ClaveSTCC
+ {
+ get => TryGetValue("ClaveSTCC", out var value) ? (string?)value! : default!;
+ set => this["ClaveSTCC"] = value;
+ }
+
+ ///
+ /// Descripción comercial del bien transportado.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string Descripcion
+ {
+ get => TryGetValue("Descripcion", out var value) ? (string)value! : default!;
+ set => this["Descripcion"] = value;
+ }
+
+ ///
+ /// Cantidad total de unidades del bien.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public decimal Cantidad
+ {
+ get => TryGetValue("Cantidad", out var value) ? (decimal)value! : default!;
+ set => this["Cantidad"] = value;
+ }
+
+ ///
+ /// Clave de unidad (c_ClaveUnidad) aplicable a la cantidad.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string ClaveUnidad
+ {
+ get => TryGetValue("ClaveUnidad", out var value) ? (string)value! : default!;
+ set => this["ClaveUnidad"] = value;
+ }
+
+ ///
+ /// Texto descriptivo de la unidad de medida.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Unidad
+ {
+ get => TryGetValue("Unidad", out var value) ? (string?)value! : default!;
+ set => this["Unidad"] = value;
+ }
+
+ ///
+ /// Dimensiones físicas de la mercancía (largo x ancho x alto) si aplica.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Dimensiones
+ {
+ get => TryGetValue("Dimensiones", out var value) ? (string?)value! : default!;
+ set => this["Dimensiones"] = value;
+ }
+
+ ///
+ /// Indicador de si la mercancía es material peligroso ("Sí" / "No").
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? MaterialPeligroso
+ {
+ get => TryGetValue("MaterialPeligroso", out var value) ? (string?)value! : default!;
+ set => this["MaterialPeligroso"] = value;
+ }
+
+ ///
+ /// Clave del material peligroso (c_MaterialPeligroso) cuando MaterialPeligroso es Sí.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? CveMaterialPeligroso
+ {
+ get => TryGetValue("CveMaterialPeligroso", out var value) ? (string?)value! : default!;
+ set => this["CveMaterialPeligroso"] = value;
+ }
+
+ ///
+ /// Clave del tipo de embalaje utilizado (c_TipoEmbalaje).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Embalaje
+ {
+ get => TryGetValue("Embalaje", out var value) ? (string?)value! : default!;
+ set => this["Embalaje"] = value;
+ }
+
+ ///
+ /// Descripción adicional del embalaje.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? DescripEmbalaje
+ {
+ get => TryGetValue("DescripEmbalaje", out var value) ? (string?)value! : default!;
+ set => this["DescripEmbalaje"] = value;
+ }
+
+ ///
+ /// Sector regulado por COFEPRIS al que pertenece el producto.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? SectorCOFEPRIS
+ {
+ get => TryGetValue("SectorCOFEPRIS", out var value) ? (string?)value! : default!;
+ set => this["SectorCOFEPRIS"] = value;
+ }
+
+ ///
+ /// Nombre del ingrediente activo (productos regulados).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NombreIngredienteActivo
+ {
+ get => TryGetValue("NombreIngredienteActivo", out var value) ? (string?)value! : default!;
+ set => this["NombreIngredienteActivo"] = value;
+ }
+
+ ///
+ /// Nombre químico del producto cuando aplica.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NomQuimico
+ {
+ get => TryGetValue("NomQuimico", out var value) ? (string?)value! : default!;
+ set => this["NomQuimico"] = value;
+ }
+
+ ///
+ /// Denominación genérica del producto farmacéutico.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? DenominacionGenericaProd
+ {
+ get => TryGetValue("DenominacionGenericaProd", out var value) ? (string?)value! : default!;
+ set => this["DenominacionGenericaProd"] = value;
+ }
+
+ ///
+ /// Denominación distintiva (marca) del producto farmacéutico.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? DenominacionDistintivaProd
+ {
+ get => TryGetValue("DenominacionDistintivaProd", out var value) ? (string?)value! : default!;
+ set => this["DenominacionDistintivaProd"] = value;
+ }
+
+ ///
+ /// Nombre o razón social del fabricante.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Fabricante
+ {
+ get => TryGetValue("Fabricante", out var value) ? (string?)value! : default!;
+ set => this["Fabricante"] = value;
+ }
+
+ ///
+ /// Fecha de caducidad del producto (AAAAMMDD o formato aplicable).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? FechaCaducidad
+ {
+ get => TryGetValue("FechaCaducidad", out var value) ? (string?)value! : default!;
+ set => this["FechaCaducidad"] = value;
+ }
+
+ ///
+ /// Número de lote del medicamento.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? LoteMedicamento
+ {
+ get => TryGetValue("LoteMedicamento", out var value) ? (string?)value! : default!;
+ set => this["LoteMedicamento"] = value;
+ }
+
+ ///
+ /// Forma farmacéutica (tableta, cápsula, solución, etc.).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? FormaFarmaceutica
+ {
+ get => TryGetValue("FormaFarmaceutica", out var value) ? (string?)value! : default!;
+ set => this["FormaFarmaceutica"] = value;
+ }
+
+ ///
+ /// Condiciones especiales de transporte (refrigeración, frágil, etc.).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? CondicionesEspTransp
+ {
+ get => TryGetValue("CondicionesEspTransp", out var value) ? (string?)value! : default!;
+ set => this["CondicionesEspTransp"] = value;
+ }
+
+ ///
+ /// Registro sanitario o folio de autorización.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? RegistroSanitarioFolioAutorizacion
+ {
+ get => TryGetValue("RegistroSanitarioFolioAutorizacion", out var value) ? (string?)value! : default!;
+ set => this["RegistroSanitarioFolioAutorizacion"] = value;
+ }
+
+ ///
+ /// Número de permiso de importación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? PermisoImportacion
+ {
+ get => TryGetValue("PermisoImportacion", out var value) ? (string?)value! : default!;
+ set => this["PermisoImportacion"] = value;
+ }
+
+ ///
+ /// Folio VUCEM de importación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? FolioImpoVUCEM
+ {
+ get => TryGetValue("FolioImpoVUCEM", out var value) ? (string?)value! : default!;
+ set => this["FolioImpoVUCEM"] = value;
+ }
+
+ ///
+ /// Número CAS para sustancias químicas.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumCAS
+ {
+ get => TryGetValue("NumCAS", out var value) ? (string?)value! : default!;
+ set => this["NumCAS"] = value;
+ }
+
+ ///
+ /// Razón social de la empresa importadora.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? RazonSocialEmpImp
+ {
+ get => TryGetValue("RazonSocialEmpImp", out var value) ? (string?)value! : default!;
+ set => this["RazonSocialEmpImp"] = value;
+ }
+
+ ///
+ /// Número de registro sanitario o plaguicida COFEPRIS.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumRegSanPlagCOFEPRIS
+ {
+ get => TryGetValue("NumRegSanPlagCOFEPRIS", out var value) ? (string?)value! : default!;
+ set => this["NumRegSanPlagCOFEPRIS"] = value;
+ }
+
+ ///
+ /// Información adicional del fabricante.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? DatosFabricante
+ {
+ get => TryGetValue("DatosFabricante", out var value) ? (string?)value! : default!;
+ set => this["DatosFabricante"] = value;
+ }
+
+ ///
+ /// Información del formulador del producto.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? DatosFormulador
+ {
+ get => TryGetValue("DatosFormulador", out var value) ? (string?)value! : default!;
+ set => this["DatosFormulador"] = value;
+ }
+
+ ///
+ /// Información del maquilador (si aplica).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? DatosMaquilador
+ {
+ get => TryGetValue("DatosMaquilador", out var value) ? (string?)value! : default!;
+ set => this["DatosMaquilador"] = value;
+ }
+
+ ///
+ /// Uso autorizado del producto.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? UsoAutorizado
+ {
+ get => TryGetValue("UsoAutorizado", out var value) ? (string?)value! : default!;
+ set => this["UsoAutorizado"] = value;
+ }
+
+ ///
+ /// Peso en kilogramos de la mercancía (puede ser peso neto o bruto según contexto).
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public decimal PesoEnKg
+ {
+ get => TryGetValue("PesoEnKg", out var value) ? (decimal)value! : default!;
+ set => this["PesoEnKg"] = value;
+ }
+
+ ///
+ /// Valor monetario de la mercancía.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? ValorMercancia
+ {
+ get => TryGetValue("ValorMercancia", out var value) ? (decimal?)value! : default!;
+ set => this["ValorMercancia"] = value;
+ }
+
+ ///
+ /// Clave de moneda (c_Moneda) del valor de la mercancía.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Moneda
+ {
+ get => TryGetValue("Moneda", out var value) ? (string?)value! : default!;
+ set => this["Moneda"] = value;
+ }
+
+ ///
+ /// Fracción arancelaria aplicable (c_FraccionArancelaria).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? FraccionArancelaria
+ {
+ get => TryGetValue("FraccionArancelaria", out var value) ? (string?)value! : default!;
+ set => this["FraccionArancelaria"] = value;
+ }
+
+ ///
+ /// UUID asociado al complemento de Comercio Exterior relacionado.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? UUIDComercioExt
+ {
+ get => TryGetValue("UUIDComercioExt", out var value) ? (string?)value! : default!;
+ set => this["UUIDComercioExt"] = value;
+ }
+
+ ///
+ /// Tipo de materia prima (si aplica para minerales, sustancias, etc.).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? TipoMateria
+ {
+ get => TryGetValue("TipoMateria", out var value) ? (string?)value! : default!;
+ set => this["TipoMateria"] = value;
+ }
+
+ ///
+ /// Descripción de la materia prima.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? DescripcionMateria
+ {
+ get => TryGetValue("DescripcionMateria", out var value) ? (string?)value! : default!;
+ set => this["DescripcionMateria"] = value;
+ }
+
+ ///
+ /// Documentos aduaneros asociados a la mercancía.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? DocumentacionAduanera
+ {
+ get => TryGetValue("DocumentacionAduanera", out var value) ? (List?)value! : default!;
+ set => this["DocumentacionAduanera"] = value;
+ }
+
+ ///
+ /// Guías de identificación asociadas.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? GuiasIdentificacion
+ {
+ get => TryGetValue("GuiasIdentificacion", out var value) ? (List?)value! : default!;
+ set => this["GuiasIdentificacion"] = value;
+ }
+
+ ///
+ /// Detalle de cantidades transportadas por origen/destino.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? CantidadTransporta
+ {
+ get => TryGetValue("CantidadTransporta", out var value) ? (List?)value! : default!;
+ set => this["CantidadTransporta"] = value;
+ }
+
+ ///
+ /// Detalle de pesos y piezas de la mercancía.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? DetalleMercancia
+ {
+ get => TryGetValue("DetalleMercancia", out var value) ? (List?)value! : default!;
+ set => this["DetalleMercancia"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteMercanciasInput.cs b/Models/Inputs/CartaPorteMercanciasInput.cs
new file mode 100644
index 0000000..190d57c
--- /dev/null
+++ b/Models/Inputs/CartaPorteMercanciasInput.cs
@@ -0,0 +1,153 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteMercanciasInput
+ ///
+ public class CartaPorteMercanciasInput : Dictionary
+ {
+ ///
+ /// Crea CartaPorteMercanciasInput.
+ ///
+ /// Suma del peso bruto total de las mercancías (aéreo y ferroviario). Requerido.
+ /// Clave de unidad de medida estandarizada del peso (catCartaPorte:c_ClaveUnidadPeso). Requerido.
+ /// Número total de mercancías (cantidad de nodos Mercancia). Requerido.
+ /// Arreglo requerido con las mercancías transportadas. Requerido.
+ public CartaPorteMercanciasInput(decimal @pesoBrutoTotal, string @unidadPeso, decimal @numTotalMercancias, List @mercancia)
+ {
+ this["PesoBrutoTotal"] = @pesoBrutoTotal;
+ this["UnidadPeso"] = @unidadPeso;
+ this["NumTotalMercancias"] = @numTotalMercancias;
+ this["Mercancia"] = @mercancia;
+ }
+
+ ///
+ /// Suma del peso bruto total de las mercancías (aéreo y ferroviario).
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public decimal PesoBrutoTotal
+ {
+ get => TryGetValue("PesoBrutoTotal", out var value) ? (decimal)value! : default!;
+ set => this["PesoBrutoTotal"] = value;
+ }
+
+ ///
+ /// Clave de unidad de medida estandarizada del peso (catCartaPorte:c_ClaveUnidadPeso).
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string UnidadPeso
+ {
+ get => TryGetValue("UnidadPeso", out var value) ? (string)value! : default!;
+ set => this["UnidadPeso"] = value;
+ }
+
+ ///
+ /// Suma de los valores PesoNeto de cada DetalleMercancia.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? PesoNetoTotal
+ {
+ get => TryGetValue("PesoNetoTotal", out var value) ? (decimal?)value! : default!;
+ set => this["PesoNetoTotal"] = value;
+ }
+
+ ///
+ /// Número total de mercancías (cantidad de nodos Mercancia).
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public decimal NumTotalMercancias
+ {
+ get => TryGetValue("NumTotalMercancias", out var value) ? (decimal)value! : default!;
+ set => this["NumTotalMercancias"] = value;
+ }
+
+ ///
+ /// Importe pagado por la tasación de las mercancías (vía aérea).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? CargoPorTasacion
+ {
+ get => TryGetValue("CargoPorTasacion", out var value) ? (decimal?)value! : default!;
+ set => this["CargoPorTasacion"] = value;
+ }
+
+ ///
+ /// Indica si aplica logística inversa, recolección o devolución.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? LogisticaInversaRecoleccionDevolucion
+ {
+ get => TryGetValue("LogisticaInversaRecoleccionDevolucion", out var value) ? (string?)value! : default!;
+ set => this["LogisticaInversaRecoleccionDevolucion"] = value;
+ }
+
+ ///
+ /// Arreglo requerido con las mercancías transportadas.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public List Mercancia
+ {
+ get => TryGetValue("Mercancia", out var value) ? (List)value! : default!;
+ set => this["Mercancia"] = value;
+ }
+
+ ///
+ /// Datos del autotransporte de carga federal.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public CartaPorteAutotransporteInput? Autotransporte
+ {
+ get => TryGetValue("Autotransporte", out var value) ? (CartaPorteAutotransporteInput?)value! : default!;
+ set => this["Autotransporte"] = value;
+ }
+
+ ///
+ /// Datos de la embarcación para transporte marítimo.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public CartaPorteTransporteMaritimoInput? TransporteMaritimo
+ {
+ get => TryGetValue("TransporteMaritimo", out var value) ? (CartaPorteTransporteMaritimoInput?)value! : default!;
+ set => this["TransporteMaritimo"] = value;
+ }
+
+ ///
+ /// Datos del transporte aéreo utilizado.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public CartaPorteTransporteAereoInput? TransporteAereo
+ {
+ get => TryGetValue("TransporteAereo", out var value) ? (CartaPorteTransporteAereoInput?)value! : default!;
+ set => this["TransporteAereo"] = value;
+ }
+
+ ///
+ /// Datos del transporte ferroviario utilizado.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public CartaPorteTransporteFerroviarioInput? TransporteFerroviario
+ {
+ get => TryGetValue("TransporteFerroviario", out var value) ? (CartaPorteTransporteFerroviarioInput?)value! : default!;
+ set => this["TransporteFerroviario"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteRemolqueInput.cs b/Models/Inputs/CartaPorteRemolqueInput.cs
new file mode 100644
index 0000000..9ff1cde
--- /dev/null
+++ b/Models/Inputs/CartaPorteRemolqueInput.cs
@@ -0,0 +1,39 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteRemolqueInput
+ ///
+ public class CartaPorteRemolqueInput : Dictionary
+ {
+ ///
+ /// Subtipo de remolque (catCartaPorte:c_SubTipoRem).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? SubTipoRem
+ {
+ get => TryGetValue("SubTipoRem", out var value) ? (string?)value! : default!;
+ set => this["SubTipoRem"] = value;
+ }
+
+ ///
+ /// Placa del remolque.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Placa
+ {
+ get => TryGetValue("Placa", out var value) ? (string?)value! : default!;
+ set => this["Placa"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteSegurosInput.cs b/Models/Inputs/CartaPorteSegurosInput.cs
new file mode 100644
index 0000000..45718c4
--- /dev/null
+++ b/Models/Inputs/CartaPorteSegurosInput.cs
@@ -0,0 +1,105 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteSegurosInput
+ ///
+ public class CartaPorteSegurosInput : Dictionary
+ {
+ ///
+ /// Crea CartaPorteSegurosInput.
+ ///
+ /// Nombre de la aseguradora de responsabilidad civil. Requerido.
+ /// Número de póliza de responsabilidad civil. Requerido.
+ public CartaPorteSegurosInput(string @aseguraRespCivil, string @polizaRespCivil)
+ {
+ this["AseguraRespCivil"] = @aseguraRespCivil;
+ this["PolizaRespCivil"] = @polizaRespCivil;
+ }
+
+ ///
+ /// Nombre de la aseguradora de responsabilidad civil.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string AseguraRespCivil
+ {
+ get => TryGetValue("AseguraRespCivil", out var value) ? (string)value! : default!;
+ set => this["AseguraRespCivil"] = value;
+ }
+
+ ///
+ /// Número de póliza de responsabilidad civil.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string PolizaRespCivil
+ {
+ get => TryGetValue("PolizaRespCivil", out var value) ? (string)value! : default!;
+ set => this["PolizaRespCivil"] = value;
+ }
+
+ ///
+ /// Aseguradora contra daños al medio ambiente.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? AseguraMedAmbiente
+ {
+ get => TryGetValue("AseguraMedAmbiente", out var value) ? (string?)value! : default!;
+ set => this["AseguraMedAmbiente"] = value;
+ }
+
+ ///
+ /// Número de póliza de medio ambiente.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? PolizaMedAmbiente
+ {
+ get => TryGetValue("PolizaMedAmbiente", out var value) ? (string?)value! : default!;
+ set => this["PolizaMedAmbiente"] = value;
+ }
+
+ ///
+ /// Aseguradora de la carga.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? AseguraCarga
+ {
+ get => TryGetValue("AseguraCarga", out var value) ? (string?)value! : default!;
+ set => this["AseguraCarga"] = value;
+ }
+
+ ///
+ /// Número de póliza de la carga.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? PolizaCarga
+ {
+ get => TryGetValue("PolizaCarga", out var value) ? (string?)value! : default!;
+ set => this["PolizaCarga"] = value;
+ }
+
+ ///
+ /// Prima total de los seguros contratados.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? PrimaSeguro
+ {
+ get => TryGetValue("PrimaSeguro", out var value) ? (decimal?)value! : default!;
+ set => this["PrimaSeguro"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteTransporteAereoInput.cs b/Models/Inputs/CartaPorteTransporteAereoInput.cs
new file mode 100644
index 0000000..6256754
--- /dev/null
+++ b/Models/Inputs/CartaPorteTransporteAereoInput.cs
@@ -0,0 +1,149 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteTransporteAereoInput
+ ///
+ public class CartaPorteTransporteAereoInput : Dictionary
+ {
+ ///
+ /// Clave del permiso SCT para transporte aéreo.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? PermSCT
+ {
+ get => TryGetValue("PermSCT", out var value) ? (string?)value! : default!;
+ set => this["PermSCT"] = value;
+ }
+
+ ///
+ /// Número de permiso SCT.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumPermisoSCT
+ {
+ get => TryGetValue("NumPermisoSCT", out var value) ? (string?)value! : default!;
+ set => this["NumPermisoSCT"] = value;
+ }
+
+ ///
+ /// Matrícula de la aeronave.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? MatriculaAeronave
+ {
+ get => TryGetValue("MatriculaAeronave", out var value) ? (string?)value! : default!;
+ set => this["MatriculaAeronave"] = value;
+ }
+
+ ///
+ /// Nombre de la aseguradora aérea.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NombreAseg
+ {
+ get => TryGetValue("NombreAseg", out var value) ? (string?)value! : default!;
+ set => this["NombreAseg"] = value;
+ }
+
+ ///
+ /// Número de póliza de seguro de la aeronave.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumPolizaSeguro
+ {
+ get => TryGetValue("NumPolizaSeguro", out var value) ? (string?)value! : default!;
+ set => this["NumPolizaSeguro"] = value;
+ }
+
+ ///
+ /// Número de guía aérea (Air Waybill).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumeroGuia
+ {
+ get => TryGetValue("NumeroGuia", out var value) ? (string?)value! : default!;
+ set => this["NumeroGuia"] = value;
+ }
+
+ ///
+ /// Lugar donde se celebró el contrato de transporte.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? LugarContrato
+ {
+ get => TryGetValue("LugarContrato", out var value) ? (string?)value! : default!;
+ set => this["LugarContrato"] = value;
+ }
+
+ ///
+ /// Código del transportista aéreo.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? CodigoTransportista
+ {
+ get => TryGetValue("CodigoTransportista", out var value) ? (string?)value! : default!;
+ set => this["CodigoTransportista"] = value;
+ }
+
+ ///
+ /// RFC del embarcador.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? RFCEmbarcador
+ {
+ get => TryGetValue("RFCEmbarcador", out var value) ? (string?)value! : default!;
+ set => this["RFCEmbarcador"] = value;
+ }
+
+ ///
+ /// Número de registro tributario extranjero del embarcador.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumRegIdTribEmbarc
+ {
+ get => TryGetValue("NumRegIdTribEmbarc", out var value) ? (string?)value! : default!;
+ set => this["NumRegIdTribEmbarc"] = value;
+ }
+
+ ///
+ /// País de residencia fiscal del embarcador.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? ResidenciaFiscalEmbarc
+ {
+ get => TryGetValue("ResidenciaFiscalEmbarc", out var value) ? (string?)value! : default!;
+ set => this["ResidenciaFiscalEmbarc"] = value;
+ }
+
+ ///
+ /// Nombre o razón social del embarcador.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NombreEmbarcador
+ {
+ get => TryGetValue("NombreEmbarcador", out var value) ? (string?)value! : default!;
+ set => this["NombreEmbarcador"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteTransporteFerroviarioInput.cs b/Models/Inputs/CartaPorteTransporteFerroviarioInput.cs
new file mode 100644
index 0000000..8aa7bc8
--- /dev/null
+++ b/Models/Inputs/CartaPorteTransporteFerroviarioInput.cs
@@ -0,0 +1,83 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteTransporteFerroviarioInput
+ ///
+ public class CartaPorteTransporteFerroviarioInput : Dictionary
+ {
+ ///
+ /// Tipo de servicio ferroviario (regular, intermodal, etc.).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? TipoDeServicio
+ {
+ get => TryGetValue("TipoDeServicio", out var value) ? (string?)value! : default!;
+ set => this["TipoDeServicio"] = value;
+ }
+
+ ///
+ /// Tipo de tráfico (nacional, internacional, etc.).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? TipoDeTrafico
+ {
+ get => TryGetValue("TipoDeTrafico", out var value) ? (string?)value! : default!;
+ set => this["TipoDeTrafico"] = value;
+ }
+
+ ///
+ /// Nombre de la aseguradora ferroviaria.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NombreAseg
+ {
+ get => TryGetValue("NombreAseg", out var value) ? (string?)value! : default!;
+ set => this["NombreAseg"] = value;
+ }
+
+ ///
+ /// Número de póliza de seguro ferroviario.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumPolizaSeguro
+ {
+ get => TryGetValue("NumPolizaSeguro", out var value) ? (string?)value! : default!;
+ set => this["NumPolizaSeguro"] = value;
+ }
+
+ ///
+ /// Lista de derechos de paso aplicados.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? DerechosDePaso
+ {
+ get => TryGetValue("DerechosDePaso", out var value) ? (List?)value! : default!;
+ set => this["DerechosDePaso"] = value;
+ }
+
+ ///
+ /// Lista de carros ferroviarios involucrados.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? Carro
+ {
+ get => TryGetValue("Carro", out var value) ? (List?)value! : default!;
+ set => this["Carro"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaPorteTransporteMaritimoInput.cs b/Models/Inputs/CartaPorteTransporteMaritimoInput.cs
new file mode 100644
index 0000000..75b1230
--- /dev/null
+++ b/Models/Inputs/CartaPorteTransporteMaritimoInput.cs
@@ -0,0 +1,281 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaPorteTransporteMaritimoInput
+ ///
+ public class CartaPorteTransporteMaritimoInput : Dictionary
+ {
+ ///
+ /// Crea CartaPorteTransporteMaritimoInput.
+ ///
+ /// Clave del permiso SCT de la embarcación. Requerido.
+ /// Número de permiso SCT de la embarcación. Requerido.
+ public CartaPorteTransporteMaritimoInput(string @permSCT, string @numPermisoSCT)
+ {
+ this["PermSCT"] = @permSCT;
+ this["NumPermisoSCT"] = @numPermisoSCT;
+ }
+
+ ///
+ /// Clave del permiso SCT de la embarcación.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string PermSCT
+ {
+ get => TryGetValue("PermSCT", out var value) ? (string)value! : default!;
+ set => this["PermSCT"] = value;
+ }
+
+ ///
+ /// Número de permiso SCT de la embarcación.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string NumPermisoSCT
+ {
+ get => TryGetValue("NumPermisoSCT", out var value) ? (string)value! : default!;
+ set => this["NumPermisoSCT"] = value;
+ }
+
+ ///
+ /// Nombre de la aseguradora marítima.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NombreAseg
+ {
+ get => TryGetValue("NombreAseg", out var value) ? (string?)value! : default!;
+ set => this["NombreAseg"] = value;
+ }
+
+ ///
+ /// Número de póliza de seguro marítimo.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumPolizaSeguro
+ {
+ get => TryGetValue("NumPolizaSeguro", out var value) ? (string?)value! : default!;
+ set => this["NumPolizaSeguro"] = value;
+ }
+
+ ///
+ /// Tipo de embarcación (catCartaPorte:c_TipoEmbarcacion).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? TipoEmbarcacion
+ {
+ get => TryGetValue("TipoEmbarcacion", out var value) ? (string?)value! : default!;
+ set => this["TipoEmbarcacion"] = value;
+ }
+
+ ///
+ /// Matrícula de la embarcación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Matricula
+ {
+ get => TryGetValue("Matricula", out var value) ? (string?)value! : default!;
+ set => this["Matricula"] = value;
+ }
+
+ ///
+ /// Número OMI (IMO number) de la embarcación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumeroOMI
+ {
+ get => TryGetValue("NumeroOMI", out var value) ? (string?)value! : default!;
+ set => this["NumeroOMI"] = value;
+ }
+
+ ///
+ /// Año de construcción de la embarcación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? AnioEmbarcacion
+ {
+ get => TryGetValue("AnioEmbarcacion", out var value) ? (string?)value! : default!;
+ set => this["AnioEmbarcacion"] = value;
+ }
+
+ ///
+ /// Nombre propio de la embarcación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NombreEmbarc
+ {
+ get => TryGetValue("NombreEmbarc", out var value) ? (string?)value! : default!;
+ set => this["NombreEmbarc"] = value;
+ }
+
+ ///
+ /// Nacionalidad o bandera de la embarcación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NacionalidadEmbarc
+ {
+ get => TryGetValue("NacionalidadEmbarc", out var value) ? (string?)value! : default!;
+ set => this["NacionalidadEmbarc"] = value;
+ }
+
+ ///
+ /// Toneladas de arqueo bruto.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? UnidadesDeArqBruto
+ {
+ get => TryGetValue("UnidadesDeArqBruto", out var value) ? (decimal?)value! : default!;
+ set => this["UnidadesDeArqBruto"] = value;
+ }
+
+ ///
+ /// Tipo de carga (granel, contenedores, líquidos, etc.).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? TipoCarga
+ {
+ get => TryGetValue("TipoCarga", out var value) ? (string?)value! : default!;
+ set => this["TipoCarga"] = value;
+ }
+
+ ///
+ /// Longitud total de la embarcación (eslora).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? Eslora
+ {
+ get => TryGetValue("Eslora", out var value) ? (decimal?)value! : default!;
+ set => this["Eslora"] = value;
+ }
+
+ ///
+ /// Ancho máximo de la embarcación (manga).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? Manga
+ {
+ get => TryGetValue("Manga", out var value) ? (decimal?)value! : default!;
+ set => this["Manga"] = value;
+ }
+
+ ///
+ /// Calado máximo.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? Calado
+ {
+ get => TryGetValue("Calado", out var value) ? (decimal?)value! : default!;
+ set => this["Calado"] = value;
+ }
+
+ ///
+ /// Altura del puntal.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? Puntal
+ {
+ get => TryGetValue("Puntal", out var value) ? (decimal?)value! : default!;
+ set => this["Puntal"] = value;
+ }
+
+ ///
+ /// Nombre de la línea naviera.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? LineaNaviera
+ {
+ get => TryGetValue("LineaNaviera", out var value) ? (string?)value! : default!;
+ set => this["LineaNaviera"] = value;
+ }
+
+ ///
+ /// Nombre del agente naviero.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NombreAgenteNaviero
+ {
+ get => TryGetValue("NombreAgenteNaviero", out var value) ? (string?)value! : default!;
+ set => this["NombreAgenteNaviero"] = value;
+ }
+
+ ///
+ /// Número de autorización del agente naviero.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumAutorizacionNaviero
+ {
+ get => TryGetValue("NumAutorizacionNaviero", out var value) ? (string?)value! : default!;
+ set => this["NumAutorizacionNaviero"] = value;
+ }
+
+ ///
+ /// Número de viaje o rotación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumViaje
+ {
+ get => TryGetValue("NumViaje", out var value) ? (string?)value! : default!;
+ set => this["NumViaje"] = value;
+ }
+
+ ///
+ /// Número de conocimiento de embarque.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumConocEmbarc
+ {
+ get => TryGetValue("NumConocEmbarc", out var value) ? (string?)value! : default!;
+ set => this["NumConocEmbarc"] = value;
+ }
+
+ ///
+ /// Permiso temporal de navegación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? PermisoTempNavegacion
+ {
+ get => TryGetValue("PermisoTempNavegacion", out var value) ? (string?)value! : default!;
+ set => this["PermisoTempNavegacion"] = value;
+ }
+
+ ///
+ /// Lista de contenedores asociados al embarque.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? Contenedor
+ {
+ get => TryGetValue("Contenedor", out var value) ? (List?)value! : default!;
+ set => this["Contenedor"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaporteCatalogSearchAirTransportCodesParams.cs b/Models/Inputs/CartaporteCatalogSearchAirTransportCodesParams.cs
new file mode 100644
index 0000000..f4b269a
--- /dev/null
+++ b/Models/Inputs/CartaporteCatalogSearchAirTransportCodesParams.cs
@@ -0,0 +1,84 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaporteCatalogSearchAirTransportCodesParams
+ ///
+ public class CartaporteCatalogSearchAirTransportCodesParams : Dictionary
+ {
+ ///
+ /// Modo de paginación de la búsqueda. `page` (por defecto) o `cursor` (recomendado para listas grandes).
+ /// Valores: "page", "cursor".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Pagination
+ {
+ get => TryGetValue("pagination", out var value) ? (string?)value! : default!;
+ set => this["pagination"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados posteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `before`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? After
+ {
+ get => TryGetValue("after", out var value) ? (string?)value! : default!;
+ set => this["after"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados anteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `after`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Before
+ {
+ get => TryGetValue("before", out var value) ? (string?)value! : default!;
+ set => this["before"] = value;
+ }
+
+ ///
+ /// Prefijo para buscar en `key`, `airline_name` o `icao_designator`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// Página de resultados a regresar, empezando desde la página 1. El máximo no es fijo; junto con `limit` debe caber dentro del tope de 3,000 resultados.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// Número del 1 al 100 que representa la cantidad máxima de resultados a regresar con motivos de paginación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaporteCatalogSearchCustomsDocumentsParams.cs b/Models/Inputs/CartaporteCatalogSearchCustomsDocumentsParams.cs
new file mode 100644
index 0000000..8ee9dd5
--- /dev/null
+++ b/Models/Inputs/CartaporteCatalogSearchCustomsDocumentsParams.cs
@@ -0,0 +1,84 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaporteCatalogSearchCustomsDocumentsParams
+ ///
+ public class CartaporteCatalogSearchCustomsDocumentsParams : Dictionary
+ {
+ ///
+ /// Modo de paginación de la búsqueda. `page` (por defecto) o `cursor` (recomendado para listas grandes).
+ /// Valores: "page", "cursor".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Pagination
+ {
+ get => TryGetValue("pagination", out var value) ? (string?)value! : default!;
+ set => this["pagination"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados posteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `before`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? After
+ {
+ get => TryGetValue("after", out var value) ? (string?)value! : default!;
+ set => this["after"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados anteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `after`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Before
+ {
+ get => TryGetValue("before", out var value) ? (string?)value! : default!;
+ set => this["before"] = value;
+ }
+
+ ///
+ /// Prefijo para buscar en `key` o `description`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// Página de resultados a regresar, empezando desde la página 1. El máximo no es fijo; junto con `limit` debe caber dentro del tope de 3,000 resultados.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// Número del 1 al 100 que representa la cantidad máxima de resultados a regresar con motivos de paginación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaporteCatalogSearchHazardousMaterialsParams.cs b/Models/Inputs/CartaporteCatalogSearchHazardousMaterialsParams.cs
new file mode 100644
index 0000000..6a3497e
--- /dev/null
+++ b/Models/Inputs/CartaporteCatalogSearchHazardousMaterialsParams.cs
@@ -0,0 +1,84 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaporteCatalogSearchHazardousMaterialsParams
+ ///
+ public class CartaporteCatalogSearchHazardousMaterialsParams : Dictionary
+ {
+ ///
+ /// Modo de paginación de la búsqueda. `page` (por defecto) o `cursor` (recomendado para listas grandes).
+ /// Valores: "page", "cursor".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Pagination
+ {
+ get => TryGetValue("pagination", out var value) ? (string?)value! : default!;
+ set => this["pagination"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados posteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `before`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? After
+ {
+ get => TryGetValue("after", out var value) ? (string?)value! : default!;
+ set => this["after"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados anteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `after`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Before
+ {
+ get => TryGetValue("before", out var value) ? (string?)value! : default!;
+ set => this["before"] = value;
+ }
+
+ ///
+ /// Prefijo para buscar en `key`, `description` o `class_division`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// Página de resultados a regresar, empezando desde la página 1. El máximo no es fijo; junto con `limit` debe caber dentro del tope de 3,000 resultados.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// Número del 1 al 100 que representa la cantidad máxima de resultados a regresar con motivos de paginación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaporteCatalogSearchMarineContainersParams.cs b/Models/Inputs/CartaporteCatalogSearchMarineContainersParams.cs
new file mode 100644
index 0000000..9a88c95
--- /dev/null
+++ b/Models/Inputs/CartaporteCatalogSearchMarineContainersParams.cs
@@ -0,0 +1,84 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaporteCatalogSearchMarineContainersParams
+ ///
+ public class CartaporteCatalogSearchMarineContainersParams : Dictionary
+ {
+ ///
+ /// Modo de paginación de la búsqueda. `page` (por defecto) o `cursor` (recomendado para listas grandes).
+ /// Valores: "page", "cursor".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Pagination
+ {
+ get => TryGetValue("pagination", out var value) ? (string?)value! : default!;
+ set => this["pagination"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados posteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `before`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? After
+ {
+ get => TryGetValue("after", out var value) ? (string?)value! : default!;
+ set => this["after"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados anteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `after`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Before
+ {
+ get => TryGetValue("before", out var value) ? (string?)value! : default!;
+ set => this["before"] = value;
+ }
+
+ ///
+ /// Prefijo para buscar en `key` o `description`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// Página de resultados a regresar, empezando desde la página 1. El máximo no es fijo; junto con `limit` debe caber dentro del tope de 3,000 resultados.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// Número del 1 al 100 que representa la cantidad máxima de resultados a regresar con motivos de paginación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaporteCatalogSearchNavalAuthorizationsParams.cs b/Models/Inputs/CartaporteCatalogSearchNavalAuthorizationsParams.cs
new file mode 100644
index 0000000..9e022a2
--- /dev/null
+++ b/Models/Inputs/CartaporteCatalogSearchNavalAuthorizationsParams.cs
@@ -0,0 +1,84 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaporteCatalogSearchNavalAuthorizationsParams
+ ///
+ public class CartaporteCatalogSearchNavalAuthorizationsParams : Dictionary
+ {
+ ///
+ /// Modo de paginación de la búsqueda. `page` (por defecto) o `cursor` (recomendado para listas grandes).
+ /// Valores: "page", "cursor".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Pagination
+ {
+ get => TryGetValue("pagination", out var value) ? (string?)value! : default!;
+ set => this["pagination"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados posteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `before`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? After
+ {
+ get => TryGetValue("after", out var value) ? (string?)value! : default!;
+ set => this["after"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados anteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `after`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Before
+ {
+ get => TryGetValue("before", out var value) ? (string?)value! : default!;
+ set => this["before"] = value;
+ }
+
+ ///
+ /// Prefijo para buscar en `key`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// Página de resultados a regresar, empezando desde la página 1. El máximo no es fijo; junto con `limit` debe caber dentro del tope de 3,000 resultados.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// Número del 1 al 100 que representa la cantidad máxima de resultados a regresar con motivos de paginación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaporteCatalogSearchPackagingTypesParams.cs b/Models/Inputs/CartaporteCatalogSearchPackagingTypesParams.cs
new file mode 100644
index 0000000..7115b6a
--- /dev/null
+++ b/Models/Inputs/CartaporteCatalogSearchPackagingTypesParams.cs
@@ -0,0 +1,84 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaporteCatalogSearchPackagingTypesParams
+ ///
+ public class CartaporteCatalogSearchPackagingTypesParams : Dictionary
+ {
+ ///
+ /// Modo de paginación de la búsqueda. `page` (por defecto) o `cursor` (recomendado para listas grandes).
+ /// Valores: "page", "cursor".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Pagination
+ {
+ get => TryGetValue("pagination", out var value) ? (string?)value! : default!;
+ set => this["pagination"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados posteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `before`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? After
+ {
+ get => TryGetValue("after", out var value) ? (string?)value! : default!;
+ set => this["after"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados anteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `after`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Before
+ {
+ get => TryGetValue("before", out var value) ? (string?)value! : default!;
+ set => this["before"] = value;
+ }
+
+ ///
+ /// Prefijo para buscar en `key` o `description`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// Página de resultados a regresar, empezando desde la página 1. El máximo no es fijo; junto con `limit` debe caber dentro del tope de 3,000 resultados.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// Número del 1 al 100 que representa la cantidad máxima de resultados a regresar con motivos de paginación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaporteCatalogSearchPortStationsParams.cs b/Models/Inputs/CartaporteCatalogSearchPortStationsParams.cs
new file mode 100644
index 0000000..c1966dd
--- /dev/null
+++ b/Models/Inputs/CartaporteCatalogSearchPortStationsParams.cs
@@ -0,0 +1,84 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaporteCatalogSearchPortStationsParams
+ ///
+ public class CartaporteCatalogSearchPortStationsParams : Dictionary
+ {
+ ///
+ /// Modo de paginación de la búsqueda. `page` (por defecto) o `cursor` (recomendado para listas grandes).
+ /// Valores: "page", "cursor".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Pagination
+ {
+ get => TryGetValue("pagination", out var value) ? (string?)value! : default!;
+ set => this["pagination"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados posteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `before`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? After
+ {
+ get => TryGetValue("after", out var value) ? (string?)value! : default!;
+ set => this["after"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados anteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `after`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Before
+ {
+ get => TryGetValue("before", out var value) ? (string?)value! : default!;
+ set => this["before"] = value;
+ }
+
+ ///
+ /// Prefijo para buscar en `key`, `description` o `iata_designator`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// Página de resultados a regresar, empezando desde la página 1. El máximo no es fijo; junto con `limit` debe caber dentro del tope de 3,000 resultados.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// Número del 1 al 100 que representa la cantidad máxima de resultados a regresar con motivos de paginación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaporteCatalogSearchRightsOfPassageParams.cs b/Models/Inputs/CartaporteCatalogSearchRightsOfPassageParams.cs
new file mode 100644
index 0000000..9673b72
--- /dev/null
+++ b/Models/Inputs/CartaporteCatalogSearchRightsOfPassageParams.cs
@@ -0,0 +1,84 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaporteCatalogSearchRightsOfPassageParams
+ ///
+ public class CartaporteCatalogSearchRightsOfPassageParams : Dictionary
+ {
+ ///
+ /// Modo de paginación de la búsqueda. `page` (por defecto) o `cursor` (recomendado para listas grandes).
+ /// Valores: "page", "cursor".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Pagination
+ {
+ get => TryGetValue("pagination", out var value) ? (string?)value! : default!;
+ set => this["pagination"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados posteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `before`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? After
+ {
+ get => TryGetValue("after", out var value) ? (string?)value! : default!;
+ set => this["after"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados anteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `after`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Before
+ {
+ get => TryGetValue("before", out var value) ? (string?)value! : default!;
+ set => this["before"] = value;
+ }
+
+ ///
+ /// Prefijo para buscar en `key`, `right_of_passage` o `concessionaire`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// Página de resultados a regresar, empezando desde la página 1. El máximo no es fijo; junto con `limit` debe caber dentro del tope de 3,000 resultados.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// Número del 1 al 100 que representa la cantidad máxima de resultados a regresar con motivos de paginación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaporteCatalogSearchTrailerTypesParams.cs b/Models/Inputs/CartaporteCatalogSearchTrailerTypesParams.cs
new file mode 100644
index 0000000..a4eecb7
--- /dev/null
+++ b/Models/Inputs/CartaporteCatalogSearchTrailerTypesParams.cs
@@ -0,0 +1,84 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaporteCatalogSearchTrailerTypesParams
+ ///
+ public class CartaporteCatalogSearchTrailerTypesParams : Dictionary
+ {
+ ///
+ /// Modo de paginación de la búsqueda. `page` (por defecto) o `cursor` (recomendado para listas grandes).
+ /// Valores: "page", "cursor".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Pagination
+ {
+ get => TryGetValue("pagination", out var value) ? (string?)value! : default!;
+ set => this["pagination"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados posteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `before`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? After
+ {
+ get => TryGetValue("after", out var value) ? (string?)value! : default!;
+ set => this["after"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados anteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `after`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Before
+ {
+ get => TryGetValue("before", out var value) ? (string?)value! : default!;
+ set => this["before"] = value;
+ }
+
+ ///
+ /// Prefijo para buscar en `key` o `description`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// Página de resultados a regresar, empezando desde la página 1. El máximo no es fijo; junto con `limit` debe caber dentro del tope de 3,000 resultados.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// Número del 1 al 100 que representa la cantidad máxima de resultados a regresar con motivos de paginación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CartaporteCatalogSearchTransportConfigsParams.cs b/Models/Inputs/CartaporteCatalogSearchTransportConfigsParams.cs
new file mode 100644
index 0000000..a377890
--- /dev/null
+++ b/Models/Inputs/CartaporteCatalogSearchTransportConfigsParams.cs
@@ -0,0 +1,84 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CartaporteCatalogSearchTransportConfigsParams
+ ///
+ public class CartaporteCatalogSearchTransportConfigsParams : Dictionary
+ {
+ ///
+ /// Modo de paginación de la búsqueda. `page` (por defecto) o `cursor` (recomendado para listas grandes).
+ /// Valores: "page", "cursor".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Pagination
+ {
+ get => TryGetValue("pagination", out var value) ? (string?)value! : default!;
+ set => this["pagination"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados posteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `before`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? After
+ {
+ get => TryGetValue("after", out var value) ? (string?)value! : default!;
+ set => this["after"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados anteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `after`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Before
+ {
+ get => TryGetValue("before", out var value) ? (string?)value! : default!;
+ set => this["before"] = value;
+ }
+
+ ///
+ /// Prefijo para buscar en `key` o `description`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// Página de resultados a regresar, empezando desde la página 1. El máximo no es fijo; junto con `limit` debe caber dentro del tope de 3,000 resultados.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// Número del 1 al 100 que representa la cantidad máxima de resultados a regresar con motivos de paginación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CatalogGetProductCategoryParams.cs b/Models/Inputs/CatalogGetProductCategoryParams.cs
new file mode 100644
index 0000000..40df5a2
--- /dev/null
+++ b/Models/Inputs/CatalogGetProductCategoryParams.cs
@@ -0,0 +1,73 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CatalogGetProductCategoryParams
+ ///
+ public class CatalogGetProductCategoryParams : Dictionary
+ {
+ ///
+ /// Modo de paginación de la búsqueda. `page` (por defecto) o `cursor` (recomendado para listas grandes).
+ /// Valores: "page", "cursor".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Pagination
+ {
+ get => TryGetValue("pagination", out var value) ? (string?)value! : default!;
+ set => this["pagination"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados posteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `before`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? After
+ {
+ get => TryGetValue("after", out var value) ? (string?)value! : default!;
+ set => this["after"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados anteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `after`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Before
+ {
+ get => TryGetValue("before", out var value) ? (string?)value! : default!;
+ set => this["before"] = value;
+ }
+
+ ///
+ /// Página de resultados a regresar, empezando desde la página 1. El máximo no es fijo; junto con `limit` debe caber dentro del tope de 3,000 resultados (con el `limit` por defecto de 100, la página máxima es 30).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// Número del 1 al 100 que representa la cantidad máxima de resultados a regresar con motivos de paginación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CatalogSearchCountriesParams.cs b/Models/Inputs/CatalogSearchCountriesParams.cs
new file mode 100644
index 0000000..fd9bdbd
--- /dev/null
+++ b/Models/Inputs/CatalogSearchCountriesParams.cs
@@ -0,0 +1,50 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CatalogSearchCountriesParams
+ ///
+ public class CatalogSearchCountriesParams : Dictionary
+ {
+ ///
+ /// Código o texto a buscar.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// page
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// limit
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CatalogSearchInvoiceUsesParams.cs b/Models/Inputs/CatalogSearchInvoiceUsesParams.cs
new file mode 100644
index 0000000..a99b5df
--- /dev/null
+++ b/Models/Inputs/CatalogSearchInvoiceUsesParams.cs
@@ -0,0 +1,50 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CatalogSearchInvoiceUsesParams
+ ///
+ public class CatalogSearchInvoiceUsesParams : Dictionary
+ {
+ ///
+ /// Código o texto a buscar.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// page
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// limit
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CatalogSearchProductsParams.cs b/Models/Inputs/CatalogSearchProductsParams.cs
new file mode 100644
index 0000000..035612a
--- /dev/null
+++ b/Models/Inputs/CatalogSearchProductsParams.cs
@@ -0,0 +1,95 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CatalogSearchProductsParams
+ ///
+ public class CatalogSearchProductsParams : Dictionary
+ {
+ ///
+ /// Prefijo de categoría de 2, 4 o 6 dígitos. Incluye descendientes y se combina con q. Sin q, lista los productos de la categoría.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Category
+ {
+ get => TryGetValue("category", out var value) ? (string?)value! : default!;
+ set => this["category"] = value;
+ }
+
+ ///
+ /// Modo de paginación de la búsqueda. `page` (por defecto) o `cursor` (recomendado para listas grandes).
+ /// Valores: "page", "cursor".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Pagination
+ {
+ get => TryGetValue("pagination", out var value) ? (string?)value! : default!;
+ set => this["pagination"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados posteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `before`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? After
+ {
+ get => TryGetValue("after", out var value) ? (string?)value! : default!;
+ set => this["after"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados anteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `after`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Before
+ {
+ get => TryGetValue("before", out var value) ? (string?)value! : default!;
+ set => this["before"] = value;
+ }
+
+ ///
+ /// Busca prefijos de claves, descripciones, palabras similares y nombres de categorías, sin distinguir mayúsculas ni diacríticos.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// Página de resultados a regresar, empezando desde la página 1. El máximo no es fijo; junto con `limit` debe caber dentro del tope de 3,000 resultados (con el `limit` por defecto de 100, la página máxima es 30).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// Número del 1 al 100 que representa la cantidad máxima de resultados a regresar con motivos de paginación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CatalogSearchTaxSystemsParams.cs b/Models/Inputs/CatalogSearchTaxSystemsParams.cs
new file mode 100644
index 0000000..df3cc79
--- /dev/null
+++ b/Models/Inputs/CatalogSearchTaxSystemsParams.cs
@@ -0,0 +1,50 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CatalogSearchTaxSystemsParams
+ ///
+ public class CatalogSearchTaxSystemsParams : Dictionary
+ {
+ ///
+ /// Código o texto a buscar.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// page
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// limit
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CatalogSearchUnitsParams.cs b/Models/Inputs/CatalogSearchUnitsParams.cs
new file mode 100644
index 0000000..d4c1f49
--- /dev/null
+++ b/Models/Inputs/CatalogSearchUnitsParams.cs
@@ -0,0 +1,84 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CatalogSearchUnitsParams
+ ///
+ public class CatalogSearchUnitsParams : Dictionary
+ {
+ ///
+ /// Modo de paginación de la búsqueda. `page` (por defecto) o `cursor` (recomendado para listas grandes).
+ /// Valores: "page", "cursor".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Pagination
+ {
+ get => TryGetValue("pagination", out var value) ? (string?)value! : default!;
+ set => this["pagination"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados posteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `before`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? After
+ {
+ get => TryGetValue("after", out var value) ? (string?)value! : default!;
+ set => this["after"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados anteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `after`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Before
+ {
+ get => TryGetValue("before", out var value) ? (string?)value! : default!;
+ set => this["before"] = value;
+ }
+
+ ///
+ /// Consulta. Texto a buscar en la descripción de la unidad de medida.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// Página de resultados a regresar, empezando desde la página 1. El máximo no es fijo; junto con `limit` debe caber dentro del tope de 3,000 resultados (con el `limit` por defecto de 100, la página máxima es 30).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// Número del 1 al 100 que representa la cantidad máxima de resultados a regresar con motivos de paginación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CatalogSearchZipCodesParams.cs b/Models/Inputs/CatalogSearchZipCodesParams.cs
new file mode 100644
index 0000000..dccf03d
--- /dev/null
+++ b/Models/Inputs/CatalogSearchZipCodesParams.cs
@@ -0,0 +1,95 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CatalogSearchZipCodesParams
+ ///
+ public class CatalogSearchZipCodesParams : Dictionary
+ {
+ ///
+ /// Modo de paginación de la búsqueda. `page` (por defecto) o `cursor` (recomendado para listas grandes).
+ /// Valores: "page", "cursor".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Pagination
+ {
+ get => TryGetValue("pagination", out var value) ? (string?)value! : default!;
+ set => this["pagination"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados posteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `before`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? After
+ {
+ get => TryGetValue("after", out var value) ? (string?)value! : default!;
+ set => this["after"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados anteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `after`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Before
+ {
+ get => TryGetValue("before", out var value) ? (string?)value! : default!;
+ set => this["before"] = value;
+ }
+
+ ///
+ /// Código o prefijo de 1 a 5 dígitos, o nombre de colonia, localidad/ciudad, municipio o estado.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// page
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// limit
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ ///
+ /// Clave de estado de tres letras (por ejemplo ZAC).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? State
+ {
+ get => TryGetValue("state", out var value) ? (string?)value! : default!;
+ set => this["state"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/ComercioExteriorCatalogSearchTariffFractionsParams.cs b/Models/Inputs/ComercioExteriorCatalogSearchTariffFractionsParams.cs
new file mode 100644
index 0000000..7000e8a
--- /dev/null
+++ b/Models/Inputs/ComercioExteriorCatalogSearchTariffFractionsParams.cs
@@ -0,0 +1,84 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorCatalogSearchTariffFractionsParams
+ ///
+ public class ComercioExteriorCatalogSearchTariffFractionsParams : Dictionary
+ {
+ ///
+ /// Modo de paginación de la búsqueda. `page` (por defecto) o `cursor` (recomendado para listas grandes).
+ /// Valores: "page", "cursor".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Pagination
+ {
+ get => TryGetValue("pagination", out var value) ? (string?)value! : default!;
+ set => this["pagination"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados posteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `before`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? After
+ {
+ get => TryGetValue("after", out var value) ? (string?)value! : default!;
+ set => this["after"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados anteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `after`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Before
+ {
+ get => TryGetValue("before", out var value) ? (string?)value! : default!;
+ set => this["before"] = value;
+ }
+
+ ///
+ /// Prefijo para buscar en `key` o `description`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// Página de resultados a regresar, empezando desde la página 1. El máximo no es fijo; junto con `limit` debe caber dentro del tope de 3,000 resultados.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// Número del 1 al 100 que representa la cantidad máxima de resultados a regresar con motivos de paginación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/ComercioExteriorDataInput.cs b/Models/Inputs/ComercioExteriorDataInput.cs
new file mode 100644
index 0000000..a130cf6
--- /dev/null
+++ b/Models/Inputs/ComercioExteriorDataInput.cs
@@ -0,0 +1,200 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorDataInput
+ ///
+ public class ComercioExteriorDataInput : Dictionary
+ {
+ ///
+ /// Crea ComercioExteriorDataInput.
+ ///
+ /// Clave del pedimento (catálogo c_ClavePedimento). Requerido.
+ /// Indica si existe certificado de origen. Requerido.
+ /// Tipo de cambio USD. Requerido.
+ /// Total en USD. Requerido.
+ /// Mercancias Requerido.
+ public ComercioExteriorDataInput(string @claveDePedimento, int @certificadoOrigen, decimal @tipoCambioUSD, decimal @totalUSD, ComercioExteriorMercanciasInput @mercancias)
+ {
+ this["ClaveDePedimento"] = @claveDePedimento;
+ this["CertificadoOrigen"] = @certificadoOrigen;
+ this["TipoCambioUSD"] = @tipoCambioUSD;
+ this["TotalUSD"] = @totalUSD;
+ this["Mercancias"] = @mercancias;
+ }
+
+ ///
+ /// Receptor
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf? Receptor
+ {
+ get => TryGetValue("Receptor", out var value) && value != null ? OneOf.FromValue(value) : default(OneOf?);
+ set => this["Receptor"] = value?.Value;
+ }
+
+ ///
+ /// Version
+ /// Valores: "2.0".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Version
+ {
+ get => TryGetValue("Version", out var value) ? (string?)value! : default!;
+ set => this["Version"] = value;
+ }
+
+ ///
+ /// Clave del catálogo c_MotivoTraslado.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? MotivoTraslado
+ {
+ get => TryGetValue("MotivoTraslado", out var value) ? (string?)value! : default!;
+ set => this["MotivoTraslado"] = value;
+ }
+
+ ///
+ /// Clave del pedimento (catálogo c_ClavePedimento).
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string ClaveDePedimento
+ {
+ get => TryGetValue("ClaveDePedimento", out var value) ? (string)value! : default!;
+ set => this["ClaveDePedimento"] = value;
+ }
+
+ ///
+ /// Indica si existe certificado de origen.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public int CertificadoOrigen
+ {
+ get => TryGetValue("CertificadoOrigen", out var value) ? (int)value! : default!;
+ set => this["CertificadoOrigen"] = value;
+ }
+
+ ///
+ /// Número de certificado de origen.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumCertificadoOrigen
+ {
+ get => TryGetValue("NumCertificadoOrigen", out var value) ? (string?)value! : default!;
+ set => this["NumCertificadoOrigen"] = value;
+ }
+
+ ///
+ /// Número de exportador confiable.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumeroExportadorConfiable
+ {
+ get => TryGetValue("NumeroExportadorConfiable", out var value) ? (string?)value! : default!;
+ set => this["NumeroExportadorConfiable"] = value;
+ }
+
+ ///
+ /// Clave del INCOTERM (catálogo c_INCOTERM).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Incoterm
+ {
+ get => TryGetValue("Incoterm", out var value) ? (string?)value! : default!;
+ set => this["Incoterm"] = value;
+ }
+
+ ///
+ /// Observaciones
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Observaciones
+ {
+ get => TryGetValue("Observaciones", out var value) ? (string?)value! : default!;
+ set => this["Observaciones"] = value;
+ }
+
+ ///
+ /// Tipo de cambio USD.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public decimal TipoCambioUSD
+ {
+ get => TryGetValue("TipoCambioUSD", out var value) ? (decimal)value! : default!;
+ set => this["TipoCambioUSD"] = value;
+ }
+
+ ///
+ /// Total en USD.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public decimal TotalUSD
+ {
+ get => TryGetValue("TotalUSD", out var value) ? (decimal)value! : default!;
+ set => this["TotalUSD"] = value;
+ }
+
+ ///
+ /// Objeto con información del emisor del complemento. Requerido cuando el domicilio y CURP del emisor no se toman de la organización que emite el complemento.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf? Emisor
+ {
+ get => TryGetValue("Emisor", out var value) && value != null ? OneOf.FromValue(value) : default(OneOf?);
+ set => this["Emisor"] = value?.Value;
+ }
+
+ ///
+ /// Propietario
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? Propietario
+ {
+ get => TryGetValue("Propietario", out var value) ? (List?)value! : default!;
+ set => this["Propietario"] = value;
+ }
+
+ ///
+ /// Destinatario
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? Destinatario
+ {
+ get => TryGetValue("Destinatario", out var value) ? (List?)value! : default!;
+ set => this["Destinatario"] = value;
+ }
+
+ ///
+ /// Mercancias
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public ComercioExteriorMercanciasInput Mercancias
+ {
+ get => TryGetValue("Mercancias", out var value) ? (ComercioExteriorMercanciasInput)value! : default!;
+ set => this["Mercancias"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/ComercioExteriorDataInputDestinatarioItem.cs b/Models/Inputs/ComercioExteriorDataInputDestinatarioItem.cs
new file mode 100644
index 0000000..bf99253
--- /dev/null
+++ b/Models/Inputs/ComercioExteriorDataInputDestinatarioItem.cs
@@ -0,0 +1,61 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorDataInputDestinatarioItem
+ ///
+ public class ComercioExteriorDataInputDestinatarioItem : Dictionary
+ {
+ ///
+ /// ID del objeto `customer` relacionado a la factura, en caso de no haber sido eliminado
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Id
+ {
+ get => TryGetValue("id", out var value) ? (string?)value! : default!;
+ set => this["id"] = value;
+ }
+
+ ///
+ /// Domicilio
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? Domicilio
+ {
+ get => TryGetValue("Domicilio", out var value) ? (List?)value! : default!;
+ set => this["Domicilio"] = value;
+ }
+
+ ///
+ /// NumRegIdTrib
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumRegIdTrib
+ {
+ get => TryGetValue("NumRegIdTrib", out var value) ? (string?)value! : default!;
+ set => this["NumRegIdTrib"] = value;
+ }
+
+ ///
+ /// Nombre
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Nombre
+ {
+ get => TryGetValue("Nombre", out var value) ? (string?)value! : default!;
+ set => this["Nombre"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/ComercioExteriorDataInputPropietarioItem.cs b/Models/Inputs/ComercioExteriorDataInputPropietarioItem.cs
new file mode 100644
index 0000000..ecb68dd
--- /dev/null
+++ b/Models/Inputs/ComercioExteriorDataInputPropietarioItem.cs
@@ -0,0 +1,50 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorDataInputPropietarioItem
+ ///
+ public class ComercioExteriorDataInputPropietarioItem : Dictionary
+ {
+ ///
+ /// NumRegIdTrib
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumRegIdTrib
+ {
+ get => TryGetValue("NumRegIdTrib", out var value) ? (string?)value! : default!;
+ set => this["NumRegIdTrib"] = value;
+ }
+
+ ///
+ /// Clave del catálogo c_Pais.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? ResidenciaFiscal
+ {
+ get => TryGetValue("ResidenciaFiscal", out var value) ? (string?)value! : default!;
+ set => this["ResidenciaFiscal"] = value;
+ }
+
+ ///
+ /// ID del objeto `customer` relacionado a la factura, en caso de no haber sido eliminado
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Id
+ {
+ get => TryGetValue("id", out var value) ? (string?)value! : default!;
+ set => this["id"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/ComercioExteriorDescripcionesEspecificasInput.cs b/Models/Inputs/ComercioExteriorDescripcionesEspecificasInput.cs
new file mode 100644
index 0000000..8688454
--- /dev/null
+++ b/Models/Inputs/ComercioExteriorDescripcionesEspecificasInput.cs
@@ -0,0 +1,70 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorDescripcionesEspecificasInput
+ ///
+ public class ComercioExteriorDescripcionesEspecificasInput : Dictionary
+ {
+ ///
+ /// Crea ComercioExteriorDescripcionesEspecificasInput.
+ ///
+ /// Marca Requerido.
+ public ComercioExteriorDescripcionesEspecificasInput(string @marca)
+ {
+ this["Marca"] = @marca;
+ }
+
+ ///
+ /// Marca
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string Marca
+ {
+ get => TryGetValue("Marca", out var value) ? (string)value! : default!;
+ set => this["Marca"] = value;
+ }
+
+ ///
+ /// Modelo
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Modelo
+ {
+ get => TryGetValue("Modelo", out var value) ? (string?)value! : default!;
+ set => this["Modelo"] = value;
+ }
+
+ ///
+ /// SubModelo
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? SubModelo
+ {
+ get => TryGetValue("SubModelo", out var value) ? (string?)value! : default!;
+ set => this["SubModelo"] = value;
+ }
+
+ ///
+ /// NumeroSerie
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumeroSerie
+ {
+ get => TryGetValue("NumeroSerie", out var value) ? (string?)value! : default!;
+ set => this["NumeroSerie"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/ComercioExteriorDomicilioInput.cs b/Models/Inputs/ComercioExteriorDomicilioInput.cs
new file mode 100644
index 0000000..7587209
--- /dev/null
+++ b/Models/Inputs/ComercioExteriorDomicilioInput.cs
@@ -0,0 +1,142 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorDomicilioInput
+ ///
+ public class ComercioExteriorDomicilioInput : Dictionary
+ {
+ ///
+ /// Crea ComercioExteriorDomicilioInput.
+ ///
+ /// Calle Requerido.
+ /// Estado Requerido.
+ /// Clave del catálogo c_Pais. Requerido.
+ /// CodigoPostal Requerido.
+ public ComercioExteriorDomicilioInput(string @calle, string @estado, string @pais, string @codigoPostal)
+ {
+ this["Calle"] = @calle;
+ this["Estado"] = @estado;
+ this["Pais"] = @pais;
+ this["CodigoPostal"] = @codigoPostal;
+ }
+
+ ///
+ /// Calle
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string Calle
+ {
+ get => TryGetValue("Calle", out var value) ? (string)value! : default!;
+ set => this["Calle"] = value;
+ }
+
+ ///
+ /// NumeroExterior
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumeroExterior
+ {
+ get => TryGetValue("NumeroExterior", out var value) ? (string?)value! : default!;
+ set => this["NumeroExterior"] = value;
+ }
+
+ ///
+ /// NumeroInterior
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumeroInterior
+ {
+ get => TryGetValue("NumeroInterior", out var value) ? (string?)value! : default!;
+ set => this["NumeroInterior"] = value;
+ }
+
+ ///
+ /// Colonia
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Colonia
+ {
+ get => TryGetValue("Colonia", out var value) ? (string?)value! : default!;
+ set => this["Colonia"] = value;
+ }
+
+ ///
+ /// Localidad
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Localidad
+ {
+ get => TryGetValue("Localidad", out var value) ? (string?)value! : default!;
+ set => this["Localidad"] = value;
+ }
+
+ ///
+ /// Referencia
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Referencia
+ {
+ get => TryGetValue("Referencia", out var value) ? (string?)value! : default!;
+ set => this["Referencia"] = value;
+ }
+
+ ///
+ /// Municipio
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Municipio
+ {
+ get => TryGetValue("Municipio", out var value) ? (string?)value! : default!;
+ set => this["Municipio"] = value;
+ }
+
+ ///
+ /// Estado
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string Estado
+ {
+ get => TryGetValue("Estado", out var value) ? (string)value! : default!;
+ set => this["Estado"] = value;
+ }
+
+ ///
+ /// Clave del catálogo c_Pais.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string Pais
+ {
+ get => TryGetValue("Pais", out var value) ? (string)value! : default!;
+ set => this["Pais"] = value;
+ }
+
+ ///
+ /// CodigoPostal
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string CodigoPostal
+ {
+ get => TryGetValue("CodigoPostal", out var value) ? (string)value! : default!;
+ set => this["CodigoPostal"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/ComercioExteriorEmisorInput.cs b/Models/Inputs/ComercioExteriorEmisorInput.cs
new file mode 100644
index 0000000..f3b78a8
--- /dev/null
+++ b/Models/Inputs/ComercioExteriorEmisorInput.cs
@@ -0,0 +1,48 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorEmisorInput
+ ///
+ public class ComercioExteriorEmisorInput : Dictionary
+ {
+ ///
+ /// Crea ComercioExteriorEmisorInput.
+ ///
+ /// Domicilio Requerido.
+ public ComercioExteriorEmisorInput(ComercioExteriorDomicilioInput @domicilio)
+ {
+ this["Domicilio"] = @domicilio;
+ }
+
+ ///
+ /// Domicilio
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public ComercioExteriorDomicilioInput Domicilio
+ {
+ get => TryGetValue("Domicilio", out var value) ? (ComercioExteriorDomicilioInput)value! : default!;
+ set => this["Domicilio"] = value;
+ }
+
+ ///
+ /// Curp
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Curp
+ {
+ get => TryGetValue("Curp", out var value) ? (string?)value! : default!;
+ set => this["Curp"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/ComercioExteriorInput.cs b/Models/Inputs/ComercioExteriorInput.cs
new file mode 100644
index 0000000..f38c2dc
--- /dev/null
+++ b/Models/Inputs/ComercioExteriorInput.cs
@@ -0,0 +1,48 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorInput
+ ///
+ public class ComercioExteriorInput : InvoiceComplementInput
+ {
+ ///
+ /// Crea ComercioExteriorInput.
+ ///
+ public ComercioExteriorInput() : base("comercio_exterior")
+ {
+ this["type"] = "comercio_exterior";
+ }
+
+ ///
+ /// type
+ /// Valores: "comercio_exterior".
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public new string Type
+ {
+ get => TryGetValue("type", out var value) ? (string)value! : default!;
+ set => this["type"] = value;
+ }
+
+ ///
+ /// data
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public new ComercioExteriorDataInput? Data
+ {
+ get => TryGetValue("data", out var value) ? (ComercioExteriorDataInput?)value! : default!;
+ set => this["data"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/ComercioExteriorMercanciaInput.cs b/Models/Inputs/ComercioExteriorMercanciaInput.cs
new file mode 100644
index 0000000..2cccdbe
--- /dev/null
+++ b/Models/Inputs/ComercioExteriorMercanciaInput.cs
@@ -0,0 +1,105 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorMercanciaInput
+ ///
+ public class ComercioExteriorMercanciaInput : Dictionary
+ {
+ ///
+ /// Crea ComercioExteriorMercanciaInput.
+ ///
+ /// NoIdentificacion Requerido.
+ /// ValorDolares Requerido.
+ public ComercioExteriorMercanciaInput(string @noIdentificacion, decimal @valorDolares)
+ {
+ this["NoIdentificacion"] = @noIdentificacion;
+ this["ValorDolares"] = @valorDolares;
+ }
+
+ ///
+ /// DescripcionesEspecificas
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? DescripcionesEspecificas
+ {
+ get => TryGetValue("DescripcionesEspecificas", out var value) ? (List?)value! : default!;
+ set => this["DescripcionesEspecificas"] = value;
+ }
+
+ ///
+ /// NoIdentificacion
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string NoIdentificacion
+ {
+ get => TryGetValue("NoIdentificacion", out var value) ? (string)value! : default!;
+ set => this["NoIdentificacion"] = value;
+ }
+
+ ///
+ /// Clave del catálogo c_FraccionArancelaria.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? FraccionArancelaria
+ {
+ get => TryGetValue("FraccionArancelaria", out var value) ? (string?)value! : default!;
+ set => this["FraccionArancelaria"] = value;
+ }
+
+ ///
+ /// CantidadAduana
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? CantidadAduana
+ {
+ get => TryGetValue("CantidadAduana", out var value) ? (decimal?)value! : default!;
+ set => this["CantidadAduana"] = value;
+ }
+
+ ///
+ /// Clave del catálogo c_UnidadAduana.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? UnidadAduana
+ {
+ get => TryGetValue("UnidadAduana", out var value) ? (string?)value! : default!;
+ set => this["UnidadAduana"] = value;
+ }
+
+ ///
+ /// ValorUnitarioAduana
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? ValorUnitarioAduana
+ {
+ get => TryGetValue("ValorUnitarioAduana", out var value) ? (decimal?)value! : default!;
+ set => this["ValorUnitarioAduana"] = value;
+ }
+
+ ///
+ /// ValorDolares
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public decimal ValorDolares
+ {
+ get => TryGetValue("ValorDolares", out var value) ? (decimal)value! : default!;
+ set => this["ValorDolares"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/ComercioExteriorMercanciasInput.cs b/Models/Inputs/ComercioExteriorMercanciasInput.cs
new file mode 100644
index 0000000..b495ad5
--- /dev/null
+++ b/Models/Inputs/ComercioExteriorMercanciasInput.cs
@@ -0,0 +1,37 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorMercanciasInput
+ ///
+ public class ComercioExteriorMercanciasInput : Dictionary
+ {
+ ///
+ /// Crea ComercioExteriorMercanciasInput.
+ ///
+ /// Mercancia Requerido.
+ public ComercioExteriorMercanciasInput(List @mercancia)
+ {
+ this["Mercancia"] = @mercancia;
+ }
+
+ ///
+ /// Mercancia
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public List Mercancia
+ {
+ get => TryGetValue("Mercancia", out var value) ? (List)value! : default!;
+ set => this["Mercancia"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/ComercioExteriorReceptorInput.cs b/Models/Inputs/ComercioExteriorReceptorInput.cs
new file mode 100644
index 0000000..4c736dc
--- /dev/null
+++ b/Models/Inputs/ComercioExteriorReceptorInput.cs
@@ -0,0 +1,39 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// ComercioExteriorReceptorInput
+ ///
+ public class ComercioExteriorReceptorInput : Dictionary
+ {
+ ///
+ /// Domicilio
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public ComercioExteriorDomicilioInput? Domicilio
+ {
+ get => TryGetValue("Domicilio", out var value) ? (ComercioExteriorDomicilioInput?)value! : default!;
+ set => this["Domicilio"] = value;
+ }
+
+ ///
+ /// NumRegIdTrib
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? NumRegIdTrib
+ {
+ get => TryGetValue("NumRegIdTrib", out var value) ? (string?)value! : default!;
+ set => this["NumRegIdTrib"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomComplementInput.cs b/Models/Inputs/CustomComplementInput.cs
new file mode 100644
index 0000000..ef54d9e
--- /dev/null
+++ b/Models/Inputs/CustomComplementInput.cs
@@ -0,0 +1,50 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomComplement
+ ///
+ public class CustomComplementInput : InvoiceComplementInput
+ {
+ ///
+ /// Crea CustomComplementInput.
+ ///
+ /// data Requerido.
+ public CustomComplementInput(string @data) : base("custom")
+ {
+ this["data"] = @data;
+ this["type"] = "custom";
+ }
+
+ ///
+ /// Tipo de complemento.
+ /// Valores: "custom".
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public new string Type
+ {
+ get => TryGetValue("type", out var value) ? (string)value! : default!;
+ set => this["type"] = value;
+ }
+
+ ///
+ /// data
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public new string Data
+ {
+ get => TryGetValue("data", out var value) ? (string)value! : default!;
+ set => this["data"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerComercioExteriorInput.cs b/Models/Inputs/CustomerComercioExteriorInput.cs
new file mode 100644
index 0000000..019d88b
--- /dev/null
+++ b/Models/Inputs/CustomerComercioExteriorInput.cs
@@ -0,0 +1,28 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// Objeto con información parcial del cliente receptor del comprobante. Para obtener el objeto `Customer` completo, deberás consultarlo con el método de [Obtener Cliente]('#/operation/getCustomer').
+ ///
+ public class CustomerComercioExteriorInput : Dictionary
+ {
+ ///
+ /// ID del objeto `customer` relacionado a la factura, en caso de no haber sido eliminado
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Id
+ {
+ get => TryGetValue("id", out var value) ? (string?)value! : default!;
+ set => this["id"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerCreateCommonInput.cs b/Models/Inputs/CustomerCreateCommonInput.cs
new file mode 100644
index 0000000..fe24d10
--- /dev/null
+++ b/Models/Inputs/CustomerCreateCommonInput.cs
@@ -0,0 +1,73 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomerCreateCommonInput
+ ///
+ public class CustomerCreateCommonInput : Dictionary
+ {
+ ///
+ /// Crea CustomerCreateCommonInput.
+ ///
+ /// Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.). Requerido.
+ public CustomerCreateCommonInput(string @legalName)
+ {
+ this["legal_name"] = @legalName;
+ }
+
+ ///
+ /// Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.).
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string LegalName
+ {
+ get => TryGetValue("legal_name", out var value) ? (string)value! : default!;
+ set => this["legal_name"] = value;
+ }
+
+ ///
+ /// Format: email
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Email
+ {
+ get => TryGetValue("email", out var value) ? (string?)value! : default!;
+ set => this["email"] = value;
+ }
+
+ ///
+ /// Teléfono del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Phone
+ {
+ get => TryGetValue("phone", out var value) ? (string?)value! : default!;
+ set => this["phone"] = value;
+ }
+
+ ///
+ /// Uso de CFDI que se utiliza en facturas de ingreso cuando se omite use o se envía null. Si el cliente no tiene un uso configurado, se utiliza G03. Para clientes extranjeros o con RFC genérico sólo se admite S01; omitirlo, enviar null o una cadena vacía asigna S01.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? DefaultInvoiceUse
+ {
+ get => TryGetValue("default_invoice_use", out var value) ? (string?)value! : default!;
+ set => this["default_invoice_use"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerCreateInput.cs b/Models/Inputs/CustomerCreateInput.cs
new file mode 100644
index 0000000..3f3599e
--- /dev/null
+++ b/Models/Inputs/CustomerCreateInput.cs
@@ -0,0 +1,114 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// Los campos requeridos dependen del país y del RFC. Omitir el país equivale a México. Con createEditLink=true se usa CustomerCreateWithEditLinkInput.
+ ///
+ public class CustomerCreateInput : Dictionary
+ {
+ ///
+ /// Crea CustomerCreateInput.
+ ///
+ /// Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.). Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.). Nombre fiscal o razón social del receptor, sin el régimen societario (ej.: S.A. de C.V.). Para una factura individual con RFC genérico, envía el nombre del receptor y omite global. Para una factura global de ingreso, usa PUBLICO EN GENERAL con el RFC XAXX010101000 y envía global con periodicity, months y year. Requerido.
+ public CustomerCreateInput(string @legalName)
+ {
+ this["legal_name"] = @legalName;
+ }
+
+ ///
+ /// Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.).
+ /// Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.).
+ /// Nombre fiscal o razón social del receptor, sin el régimen societario (ej.: S.A. de C.V.). Para una factura individual con RFC genérico, envía el nombre del receptor y omite global. Para una factura global de ingreso, usa PUBLICO EN GENERAL con el RFC XAXX010101000 y envía global con periodicity, months y year.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string LegalName
+ {
+ get => TryGetValue("legal_name", out var value) ? (string)value! : default!;
+ set => this["legal_name"] = value;
+ }
+
+ ///
+ /// Format: email
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Email
+ {
+ get => TryGetValue("email", out var value) ? (string?)value! : default!;
+ set => this["email"] = value;
+ }
+
+ ///
+ /// Teléfono del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Phone
+ {
+ get => TryGetValue("phone", out var value) ? (string?)value! : default!;
+ set => this["phone"] = value;
+ }
+
+ ///
+ /// Uso de CFDI que se utiliza en facturas de ingreso cuando se omite use o se envía null. Si el cliente no tiene un uso configurado, se utiliza G03. Para clientes extranjeros o con RFC genérico sólo se admite S01; omitirlo, enviar null o una cadena vacía asigna S01.
+ /// Uso de CFDI que se utiliza en facturas de ingreso cuando se omite use o se envía null. Si el cliente no tiene un uso configurado, se utiliza G03. Para clientes extranjeros o con RFC genérico sólo se admite S01; omitirlo, enviar null o una cadena vacía asigna S01.
+ /// Sólo se admite S01. Omitirlo, enviar null o una cadena vacía asigna S01.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? DefaultInvoiceUse
+ {
+ get => TryGetValue("default_invoice_use", out var value) ? (string?)value! : default!;
+ set => this["default_invoice_use"] = value;
+ }
+
+ ///
+ /// En clientes de México contiene el RFC del cliente. Para extranjeros es opcional y representa el número de registro de identificación tributaria, es decir, el equivalente al RFC en el país del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? TaxId
+ {
+ get => TryGetValue("tax_id", out var value) ? (string?)value! : default!;
+ set => this["tax_id"] = value;
+ }
+
+ ///
+ /// Requerido para clientes nacionales. Clave del régimen fiscal del cliente, del catálogo de [Regímenes Fiscales](https://docs.facturapi.io/api/#r%C3%A9gimen-fiscal).
+ /// Los clientes extranjeros usan 616. Omitirlo, enviar null o una cadena vacía usa el valor predeterminado.
+ /// Régimen fiscal del receptor. Con RFC genérico, si se omite se utiliza 616 (Sin obligaciones fiscales); si se envía explícitamente, sólo se admite 616.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? TaxSystem
+ {
+ get => TryGetValue("tax_system", out var value) ? (string?)value! : default!;
+ set => this["tax_system"] = value;
+ }
+
+ ///
+ /// address
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf? Address
+ {
+ get => TryGetValue("address", out var value) && value != null ? OneOf.FromValue(value) : default(OneOf?);
+ set => this["address"] = value?.Value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerCreateParams.cs b/Models/Inputs/CustomerCreateParams.cs
new file mode 100644
index 0000000..95ceca9
--- /dev/null
+++ b/Models/Inputs/CustomerCreateParams.cs
@@ -0,0 +1,33 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomerCreateParams
+ ///
+ public class CustomerCreateParams : Dictionary
+ {
+ ///
+ /// Si pasas el valor `true`, se generará un enlace para que el cliente pueda editar
+ /// su información fiscal. Este enlace estará disponible en el campo "edit_link", será
+ /// válido por 3 días y sólo se podrá usar una vez.
+ /// Además, pasar el valor `true` desactivará la validación de información fiscal con el SAT,
+ /// permitiendo crear clientes con información incompleta.
+ /// Con `true`, el body sigue `CustomerCreateWithEditLinkInput`; en otro caso sigue `CustomerCreateInput`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public bool? CreateEditLink
+ {
+ get => TryGetValue("createEditLink", out var value) ? (bool?)value! : default!;
+ set => this["createEditLink"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerCreateWithEditLinkInput.cs b/Models/Inputs/CustomerCreateWithEditLinkInput.cs
new file mode 100644
index 0000000..0ee3799
--- /dev/null
+++ b/Models/Inputs/CustomerCreateWithEditLinkInput.cs
@@ -0,0 +1,113 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// La información del cliente puede estar incompleta cuando createEditLink=true. Los campos opcionales con valor null se tratan como omitidos. Los valores no nulos deben conservar formatos válidos.
+ ///
+ public class CustomerCreateWithEditLinkInput : Dictionary
+ {
+ ///
+ /// Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.).
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? LegalName
+ {
+ get => TryGetValue("legal_name", out var value) ? (string?)value! : default!;
+ set => this["legal_name"] = value;
+ }
+
+ ///
+ /// En clientes de México contiene el RFC del cliente. Para extranjeros es opcional y representa el número de registro de identificación tributaria, es decir, el equivalente al RFC en el país del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? TaxId
+ {
+ get => TryGetValue("tax_id", out var value) ? (string?)value! : default!;
+ set => this["tax_id"] = value;
+ }
+
+ ///
+ /// Format: email
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Email
+ {
+ get => TryGetValue("email", out var value) ? (string?)value! : default!;
+ set => this["email"] = value;
+ }
+
+ ///
+ /// Teléfono del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Phone
+ {
+ get => TryGetValue("phone", out var value) ? (string?)value! : default!;
+ set => this["phone"] = value;
+ }
+
+ ///
+ /// external_id
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? ExternalId
+ {
+ get => TryGetValue("external_id", out var value) ? (string?)value! : default!;
+ set => this["external_id"] = value;
+ }
+
+ ///
+ /// Uso de CFDI que se utiliza en facturas de ingreso cuando se omite use o se envía null. Si el cliente no tiene un uso configurado, se utiliza G03. Para clientes extranjeros o con RFC genérico sólo se admite S01; omitirlo, enviar null o una cadena vacía asigna S01.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? DefaultInvoiceUse
+ {
+ get => TryGetValue("default_invoice_use", out var value) ? (string?)value! : default!;
+ set => this["default_invoice_use"] = value;
+ }
+
+ ///
+ /// Requerido para clientes nacionales. Clave del régimen fiscal del cliente, del catálogo de [Regímenes Fiscales](https://docs.facturapi.io/api/#r%C3%A9gimen-fiscal).
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? TaxSystem
+ {
+ get => TryGetValue("tax_system", out var value) ? (string?)value! : default!;
+ set => this["tax_system"] = value;
+ }
+
+ ///
+ /// address
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public CustomerCreateWithEditLinkInputAddress? Address
+ {
+ get => TryGetValue("address", out var value) ? (CustomerCreateWithEditLinkInputAddress?)value! : default!;
+ set => this["address"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerCreateWithEditLinkInputAddress.cs b/Models/Inputs/CustomerCreateWithEditLinkInputAddress.cs
new file mode 100644
index 0000000..1e7c619
--- /dev/null
+++ b/Models/Inputs/CustomerCreateWithEditLinkInputAddress.cs
@@ -0,0 +1,125 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomerCreateWithEditLinkInputAddress
+ ///
+ public class CustomerCreateWithEditLinkInputAddress : Dictionary
+ {
+ ///
+ /// Nombre de la calle
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Street
+ {
+ get => TryGetValue("street", out var value) ? (string?)value! : default!;
+ set => this["street"] = value;
+ }
+
+ ///
+ /// Número exterior.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Exterior
+ {
+ get => TryGetValue("exterior", out var value) ? (string?)value! : default!;
+ set => this["exterior"] = value;
+ }
+
+ ///
+ /// Número interior.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Interior
+ {
+ get => TryGetValue("interior", out var value) ? (string?)value! : default!;
+ set => this["interior"] = value;
+ }
+
+ ///
+ /// Colonia
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Neighborhood
+ {
+ get => TryGetValue("neighborhood", out var value) ? (string?)value! : default!;
+ set => this["neighborhood"] = value;
+ }
+
+ ///
+ /// Ciudad
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? City
+ {
+ get => TryGetValue("city", out var value) ? (string?)value! : default!;
+ set => this["city"] = value;
+ }
+
+ ///
+ /// Municipio o delegación
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Municipality
+ {
+ get => TryGetValue("municipality", out var value) ? (string?)value! : default!;
+ set => this["municipality"] = value;
+ }
+
+ ///
+ /// state
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? State
+ {
+ get => TryGetValue("state", out var value) ? (string?)value! : default!;
+ set => this["state"] = value;
+ }
+
+ ///
+ /// ISO 3166-1 alpha-3.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Country
+ {
+ get => TryGetValue("country", out var value) ? (string?)value! : default!;
+ set => this["country"] = value;
+ }
+
+ ///
+ /// Código postal
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Zip
+ {
+ get => TryGetValue("zip", out var value) ? (string?)value! : default!;
+ set => this["zip"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerEditableInput.cs b/Models/Inputs/CustomerEditableInput.cs
new file mode 100644
index 0000000..cd9e71e
--- /dev/null
+++ b/Models/Inputs/CustomerEditableInput.cs
@@ -0,0 +1,101 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomerEditableInput
+ ///
+ public class CustomerEditableInput : Dictionary
+ {
+ ///
+ /// Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.).
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? LegalName
+ {
+ get => TryGetValue("legal_name", out var value) ? (string?)value! : default!;
+ set => this["legal_name"] = value;
+ }
+
+ ///
+ /// En clientes de México contiene el RFC del cliente. Para extranjeros es opcional y representa el número de registro de identificación tributaria, es decir, el equivalente al RFC en el país del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? TaxId
+ {
+ get => TryGetValue("tax_id", out var value) ? (string?)value! : default!;
+ set => this["tax_id"] = value;
+ }
+
+ ///
+ /// email
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Email
+ {
+ get => TryGetValue("email", out var value) ? (string?)value! : default!;
+ set => this["email"] = value;
+ }
+
+ ///
+ /// Teléfono del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Phone
+ {
+ get => TryGetValue("phone", out var value) ? (string?)value! : default!;
+ set => this["phone"] = value;
+ }
+
+ ///
+ /// external_id
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? ExternalId
+ {
+ get => TryGetValue("external_id", out var value) ? (string?)value! : default!;
+ set => this["external_id"] = value;
+ }
+
+ ///
+ /// Uso de CFDI que se utiliza en facturas de ingreso cuando se omite use o se envía null. Si el cliente no tiene un uso configurado, se utiliza G03. Para clientes extranjeros o con RFC genérico sólo se admite S01; omitirlo, enviar null o una cadena vacía asigna S01.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? DefaultInvoiceUse
+ {
+ get => TryGetValue("default_invoice_use", out var value) ? (string?)value! : default!;
+ set => this["default_invoice_use"] = value;
+ }
+
+ ///
+ /// address
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public CustomerEditableInputAddress? Address
+ {
+ get => TryGetValue("address", out var value) ? (CustomerEditableInputAddress?)value! : default!;
+ set => this["address"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerEditableInputAddress.cs b/Models/Inputs/CustomerEditableInputAddress.cs
new file mode 100644
index 0000000..de61f6a
--- /dev/null
+++ b/Models/Inputs/CustomerEditableInputAddress.cs
@@ -0,0 +1,124 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomerEditableInputAddress
+ ///
+ public class CustomerEditableInputAddress : Dictionary
+ {
+ ///
+ /// Nombre de la calle
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Street
+ {
+ get => TryGetValue("street", out var value) ? (string?)value! : default!;
+ set => this["street"] = value;
+ }
+
+ ///
+ /// Número exterior.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Exterior
+ {
+ get => TryGetValue("exterior", out var value) ? (string?)value! : default!;
+ set => this["exterior"] = value;
+ }
+
+ ///
+ /// Número interior.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Interior
+ {
+ get => TryGetValue("interior", out var value) ? (string?)value! : default!;
+ set => this["interior"] = value;
+ }
+
+ ///
+ /// Colonia
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Neighborhood
+ {
+ get => TryGetValue("neighborhood", out var value) ? (string?)value! : default!;
+ set => this["neighborhood"] = value;
+ }
+
+ ///
+ /// Ciudad
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? City
+ {
+ get => TryGetValue("city", out var value) ? (string?)value! : default!;
+ set => this["city"] = value;
+ }
+
+ ///
+ /// Municipio o delegación
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Municipality
+ {
+ get => TryGetValue("municipality", out var value) ? (string?)value! : default!;
+ set => this["municipality"] = value;
+ }
+
+ ///
+ /// Código postal
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Zip
+ {
+ get => TryGetValue("zip", out var value) ? (string?)value! : default!;
+ set => this["zip"] = value;
+ }
+
+ ///
+ /// state
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? State
+ {
+ get => TryGetValue("state", out var value) ? (string?)value! : default!;
+ set => this["state"] = value;
+ }
+
+ ///
+ /// ISO 3166-1 alpha-3.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Country
+ {
+ get => TryGetValue("country", out var value) ? (string?)value! : default!;
+ set => this["country"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerForeignAddressInput.cs b/Models/Inputs/CustomerForeignAddressInput.cs
new file mode 100644
index 0000000..9b3ba3a
--- /dev/null
+++ b/Models/Inputs/CustomerForeignAddressInput.cs
@@ -0,0 +1,125 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomerForeignAddressInput
+ ///
+ public class CustomerForeignAddressInput : Dictionary
+ {
+ ///
+ /// Crea CustomerForeignAddressInput.
+ ///
+ /// Código ISO 3166-1 alpha-3 distinto de MEX. Es necesario para aplicar las reglas de cliente extranjero. Requerido.
+ public CustomerForeignAddressInput(string @country)
+ {
+ this["country"] = @country;
+ }
+
+ ///
+ /// Nombre de la calle
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Street
+ {
+ get => TryGetValue("street", out var value) ? (string?)value! : default!;
+ set => this["street"] = value;
+ }
+
+ ///
+ /// Número exterior.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Exterior
+ {
+ get => TryGetValue("exterior", out var value) ? (string?)value! : default!;
+ set => this["exterior"] = value;
+ }
+
+ ///
+ /// Número interior.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Interior
+ {
+ get => TryGetValue("interior", out var value) ? (string?)value! : default!;
+ set => this["interior"] = value;
+ }
+
+ ///
+ /// Colonia
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Neighborhood
+ {
+ get => TryGetValue("neighborhood", out var value) ? (string?)value! : default!;
+ set => this["neighborhood"] = value;
+ }
+
+ ///
+ /// Ciudad
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? City
+ {
+ get => TryGetValue("city", out var value) ? (string?)value! : default!;
+ set => this["city"] = value;
+ }
+
+ ///
+ /// Municipio o delegación
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Municipality
+ {
+ get => TryGetValue("municipality", out var value) ? (string?)value! : default!;
+ set => this["municipality"] = value;
+ }
+
+ ///
+ /// Código postal
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Zip
+ {
+ get => TryGetValue("zip", out var value) ? (string?)value! : default!;
+ set => this["zip"] = value;
+ }
+
+ ///
+ /// Código ISO 3166-1 alpha-3 distinto de MEX. Es necesario para aplicar las reglas de cliente extranjero.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string Country
+ {
+ get => TryGetValue("country", out var value) ? (string)value! : default!;
+ set => this["country"] = value;
+ }
+
+ ///
+ /// state
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? State
+ {
+ get => TryGetValue("state", out var value) ? (string?)value! : default!;
+ set => this["state"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerForeignCreateInput.cs b/Models/Inputs/CustomerForeignCreateInput.cs
new file mode 100644
index 0000000..239443d
--- /dev/null
+++ b/Models/Inputs/CustomerForeignCreateInput.cs
@@ -0,0 +1,113 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// Requiere razón social y domicilio con un país explícito distinto de MEX. El identificador fiscal y el código postal son opcionales; el régimen fiscal predeterminado es 616.
+ ///
+ public class CustomerForeignCreateInput : CustomerCreateInput
+ {
+ ///
+ /// Crea CustomerForeignCreateInput.
+ ///
+ /// Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.). Requerido.
+ /// address Requerido.
+ public CustomerForeignCreateInput(string @legalName, CustomerForeignAddressInput @address) : base(@legalName)
+ {
+ this["legal_name"] = @legalName;
+ this["address"] = @address;
+ }
+
+ ///
+ /// Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.).
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public new string LegalName
+ {
+ get => TryGetValue("legal_name", out var value) ? (string)value! : default!;
+ set => this["legal_name"] = value;
+ }
+
+ ///
+ /// Format: email
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public new string? Email
+ {
+ get => TryGetValue("email", out var value) ? (string?)value! : default!;
+ set => this["email"] = value;
+ }
+
+ ///
+ /// Teléfono del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public new string? Phone
+ {
+ get => TryGetValue("phone", out var value) ? (string?)value! : default!;
+ set => this["phone"] = value;
+ }
+
+ ///
+ /// Uso de CFDI que se utiliza en facturas de ingreso cuando se omite use o se envía null. Si el cliente no tiene un uso configurado, se utiliza G03. Para clientes extranjeros o con RFC genérico sólo se admite S01; omitirlo, enviar null o una cadena vacía asigna S01.
+ /// Sólo se admite S01. Omitirlo, enviar null o una cadena vacía asigna S01.
+ /// Valores: "", "S01".
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public new string? DefaultInvoiceUse
+ {
+ get => TryGetValue("default_invoice_use", out var value) ? (string?)value! : default!;
+ set => this["default_invoice_use"] = value;
+ }
+
+ ///
+ /// En clientes de México contiene el RFC del cliente. Para extranjeros es opcional y representa el número de registro de identificación tributaria, es decir, el equivalente al RFC en el país del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public new string? TaxId
+ {
+ get => TryGetValue("tax_id", out var value) ? (string?)value! : default!;
+ set => this["tax_id"] = value;
+ }
+
+ ///
+ /// Los clientes extranjeros usan 616. Omitirlo, enviar null o una cadena vacía usa el valor predeterminado.
+ /// Valores: "", "616".
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public new string? TaxSystem
+ {
+ get => TryGetValue("tax_system", out var value) ? (string?)value! : default!;
+ set => this["tax_system"] = value;
+ }
+
+ ///
+ /// address
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public new CustomerForeignAddressInput Address
+ {
+ get => TryGetValue("address", out var value) ? (CustomerForeignAddressInput)value! : default!;
+ set => this["address"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerGenericCreateInput.cs b/Models/Inputs/CustomerGenericCreateInput.cs
new file mode 100644
index 0000000..bb7a37a
--- /dev/null
+++ b/Models/Inputs/CustomerGenericCreateInput.cs
@@ -0,0 +1,113 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// RFC de público en general XAXX010101000 o RFC genérico extranjero XEXX010101000. Requiere razón social y RFC. El régimen fiscal predeterminado es 616. El código postal es opcional; null o una cadena vacía se tratan como omitidos.
+ ///
+ public class CustomerGenericCreateInput : CustomerCreateInput
+ {
+ ///
+ /// Crea CustomerGenericCreateInput.
+ ///
+ /// Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.). Nombre fiscal o razón social del receptor, sin el régimen societario (ej.: S.A. de C.V.). Para una factura individual con RFC genérico, envía el nombre del receptor y omite global. Para una factura global de ingreso, usa PUBLICO EN GENERAL con el RFC XAXX010101000 y envía global con periodicity, months y year. Requerido.
+ /// tax_id Valores: "XAXX010101000", "XEXX010101000". Requerido.
+ public CustomerGenericCreateInput(string @legalName, string @taxId) : base(@legalName)
+ {
+ this["legal_name"] = @legalName;
+ this["tax_id"] = @taxId;
+ }
+
+ ///
+ /// Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.).
+ /// Nombre fiscal o razón social del receptor, sin el régimen societario (ej.: S.A. de C.V.). Para una factura individual con RFC genérico, envía el nombre del receptor y omite global. Para una factura global de ingreso, usa PUBLICO EN GENERAL con el RFC XAXX010101000 y envía global con periodicity, months y year.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public new string LegalName
+ {
+ get => TryGetValue("legal_name", out var value) ? (string)value! : default!;
+ set => this["legal_name"] = value;
+ }
+
+ ///
+ /// Format: email
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public new string? Email
+ {
+ get => TryGetValue("email", out var value) ? (string?)value! : default!;
+ set => this["email"] = value;
+ }
+
+ ///
+ /// Teléfono del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public new string? Phone
+ {
+ get => TryGetValue("phone", out var value) ? (string?)value! : default!;
+ set => this["phone"] = value;
+ }
+
+ ///
+ /// Uso de CFDI que se utiliza en facturas de ingreso cuando se omite use o se envía null. Si el cliente no tiene un uso configurado, se utiliza G03. Para clientes extranjeros o con RFC genérico sólo se admite S01; omitirlo, enviar null o una cadena vacía asigna S01.
+ /// Sólo se admite S01. Omitirlo, enviar null o una cadena vacía asigna S01.
+ /// Valores: "", "S01".
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public new string? DefaultInvoiceUse
+ {
+ get => TryGetValue("default_invoice_use", out var value) ? (string?)value! : default!;
+ set => this["default_invoice_use"] = value;
+ }
+
+ ///
+ /// tax_id
+ /// Valores: "XAXX010101000", "XEXX010101000".
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public new string TaxId
+ {
+ get => TryGetValue("tax_id", out var value) ? (string)value! : default!;
+ set => this["tax_id"] = value;
+ }
+
+ ///
+ /// Régimen fiscal del receptor. Con RFC genérico, si se omite se utiliza 616 (Sin obligaciones fiscales); si se envía explícitamente, sólo se admite 616.
+ /// Valores: "616".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public new string? TaxSystem
+ {
+ get => TryGetValue("tax_system", out var value) ? (string?)value! : default!;
+ set => this["tax_system"] = value;
+ }
+
+ ///
+ /// address
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public new CustomerGenericCreateInputAddress? Address
+ {
+ get => TryGetValue("address", out var value) ? (CustomerGenericCreateInputAddress?)value! : default!;
+ set => this["address"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerGenericCreateInputAddress.cs b/Models/Inputs/CustomerGenericCreateInputAddress.cs
new file mode 100644
index 0000000..2524d3b
--- /dev/null
+++ b/Models/Inputs/CustomerGenericCreateInputAddress.cs
@@ -0,0 +1,125 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomerGenericCreateInputAddress
+ ///
+ public class CustomerGenericCreateInputAddress : Dictionary
+ {
+ ///
+ /// Nombre de la calle
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Street
+ {
+ get => TryGetValue("street", out var value) ? (string?)value! : default!;
+ set => this["street"] = value;
+ }
+
+ ///
+ /// Número exterior.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Exterior
+ {
+ get => TryGetValue("exterior", out var value) ? (string?)value! : default!;
+ set => this["exterior"] = value;
+ }
+
+ ///
+ /// Número interior.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Interior
+ {
+ get => TryGetValue("interior", out var value) ? (string?)value! : default!;
+ set => this["interior"] = value;
+ }
+
+ ///
+ /// Colonia
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Neighborhood
+ {
+ get => TryGetValue("neighborhood", out var value) ? (string?)value! : default!;
+ set => this["neighborhood"] = value;
+ }
+
+ ///
+ /// Ciudad
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? City
+ {
+ get => TryGetValue("city", out var value) ? (string?)value! : default!;
+ set => this["city"] = value;
+ }
+
+ ///
+ /// Municipio o delegación
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Municipality
+ {
+ get => TryGetValue("municipality", out var value) ? (string?)value! : default!;
+ set => this["municipality"] = value;
+ }
+
+ ///
+ /// state
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? State
+ {
+ get => TryGetValue("state", out var value) ? (string?)value! : default!;
+ set => this["state"] = value;
+ }
+
+ ///
+ /// ISO 3166-1 alpha-3.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Country
+ {
+ get => TryGetValue("country", out var value) ? (string?)value! : default!;
+ set => this["country"] = value;
+ }
+
+ ///
+ /// Código postal opcional. Para México, si se proporciona debe tener cinco dígitos.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Zip
+ {
+ get => TryGetValue("zip", out var value) ? (string?)value! : default!;
+ set => this["zip"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerListParams.cs b/Models/Inputs/CustomerListParams.cs
new file mode 100644
index 0000000..beeaf84
--- /dev/null
+++ b/Models/Inputs/CustomerListParams.cs
@@ -0,0 +1,95 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomerListParams
+ ///
+ public class CustomerListParams : Dictionary
+ {
+ ///
+ /// Modo de paginación de la búsqueda. `page` (por defecto) o `cursor` (recomendado para listas grandes).
+ /// Valores: "page", "cursor".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Pagination
+ {
+ get => TryGetValue("pagination", out var value) ? (string?)value! : default!;
+ set => this["pagination"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados posteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `before`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? After
+ {
+ get => TryGetValue("after", out var value) ? (string?)value! : default!;
+ set => this["after"] = value;
+ }
+
+ ///
+ /// Devuelve los resultados anteriores al cursor indicado. Solo con `pagination=cursor`; mutuamente excluyente con `after`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Before
+ {
+ get => TryGetValue("before", out var value) ? (string?)value! : default!;
+ set => this["before"] = value;
+ }
+
+ ///
+ /// Consulta. Texto a buscar en `legal_name` (nombre fiscal) o en `tax_id` (RFC).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Q
+ {
+ get => TryGetValue("q", out var value) ? (string?)value! : default!;
+ set => this["q"] = value;
+ }
+
+ ///
+ /// Objeto con rango de fechas solicitado.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public DateRangeInput? Date
+ {
+ get => TryGetValue("date", out var value) ? (DateRangeInput?)value! : default!;
+ set => this["date"] = value;
+ }
+
+ ///
+ /// Página de resultados a regresar, empezando desde la página 1. El máximo no es fijo; junto con `limit` debe caber dentro del tope de 3,000 resultados (con el `limit` por defecto de 100, la página máxima es 30).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Page
+ {
+ get => TryGetValue("page", out var value) ? (int?)value! : default!;
+ set => this["page"] = value;
+ }
+
+ ///
+ /// Número del 1 al 100 que representa la cantidad máxima de resultados a regresar con motivos de paginación.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? Limit
+ {
+ get => TryGetValue("limit", out var value) ? (int?)value! : default!;
+ set => this["limit"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerNationalAddressInput.cs b/Models/Inputs/CustomerNationalAddressInput.cs
new file mode 100644
index 0000000..21d75c5
--- /dev/null
+++ b/Models/Inputs/CustomerNationalAddressInput.cs
@@ -0,0 +1,127 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomerNationalAddressInput
+ ///
+ public class CustomerNationalAddressInput : Dictionary
+ {
+ ///
+ /// Crea CustomerNationalAddressInput.
+ ///
+ /// Código postal Requerido.
+ public CustomerNationalAddressInput(string @zip)
+ {
+ this["zip"] = @zip;
+ }
+
+ ///
+ /// Nombre de la calle
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Street
+ {
+ get => TryGetValue("street", out var value) ? (string?)value! : default!;
+ set => this["street"] = value;
+ }
+
+ ///
+ /// Número exterior.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Exterior
+ {
+ get => TryGetValue("exterior", out var value) ? (string?)value! : default!;
+ set => this["exterior"] = value;
+ }
+
+ ///
+ /// Número interior.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Interior
+ {
+ get => TryGetValue("interior", out var value) ? (string?)value! : default!;
+ set => this["interior"] = value;
+ }
+
+ ///
+ /// Colonia
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Neighborhood
+ {
+ get => TryGetValue("neighborhood", out var value) ? (string?)value! : default!;
+ set => this["neighborhood"] = value;
+ }
+
+ ///
+ /// Ciudad
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? City
+ {
+ get => TryGetValue("city", out var value) ? (string?)value! : default!;
+ set => this["city"] = value;
+ }
+
+ ///
+ /// Municipio o delegación
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Municipality
+ {
+ get => TryGetValue("municipality", out var value) ? (string?)value! : default!;
+ set => this["municipality"] = value;
+ }
+
+ ///
+ /// Código postal
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string Zip
+ {
+ get => TryGetValue("zip", out var value) ? (string)value! : default!;
+ set => this["zip"] = value;
+ }
+
+ ///
+ /// state
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? State
+ {
+ get => TryGetValue("state", out var value) ? (string?)value! : default!;
+ set => this["state"] = value;
+ }
+
+ ///
+ /// country
+ /// Valores: "", "MEX".
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Country
+ {
+ get => TryGetValue("country", out var value) ? (string?)value! : default!;
+ set => this["country"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerNationalCreateInput.cs b/Models/Inputs/CustomerNationalCreateInput.cs
new file mode 100644
index 0000000..6e314bc
--- /dev/null
+++ b/Models/Inputs/CustomerNationalCreateInput.cs
@@ -0,0 +1,112 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// País MEX, u omitido. Requiere razón social, RFC, régimen fiscal y código postal. Los RFC genéricos usan CustomerGenericCreateInput.
+ ///
+ public class CustomerNationalCreateInput : CustomerCreateInput
+ {
+ ///
+ /// Crea CustomerNationalCreateInput.
+ ///
+ /// Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.). Requerido.
+ /// En clientes de México contiene el RFC del cliente. Para extranjeros es opcional y representa el número de registro de identificación tributaria, es decir, el equivalente al RFC en el país del cliente. Requerido.
+ /// Requerido para clientes nacionales. Clave del régimen fiscal del cliente, del catálogo de [Regímenes Fiscales](https://docs.facturapi.io/api/#r%C3%A9gimen-fiscal). Requerido.
+ /// address Requerido.
+ public CustomerNationalCreateInput(string @legalName, string @taxId, string @taxSystem, CustomerNationalAddressInput @address) : base(@legalName)
+ {
+ this["legal_name"] = @legalName;
+ this["tax_id"] = @taxId;
+ this["tax_system"] = @taxSystem;
+ this["address"] = @address;
+ }
+
+ ///
+ /// Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.).
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public new string LegalName
+ {
+ get => TryGetValue("legal_name", out var value) ? (string)value! : default!;
+ set => this["legal_name"] = value;
+ }
+
+ ///
+ /// Format: email
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public new string? Email
+ {
+ get => TryGetValue("email", out var value) ? (string?)value! : default!;
+ set => this["email"] = value;
+ }
+
+ ///
+ /// Teléfono del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public new string? Phone
+ {
+ get => TryGetValue("phone", out var value) ? (string?)value! : default!;
+ set => this["phone"] = value;
+ }
+
+ ///
+ /// Uso de CFDI que se utiliza en facturas de ingreso cuando se omite use o se envía null. Si el cliente no tiene un uso configurado, se utiliza G03. Para clientes extranjeros o con RFC genérico sólo se admite S01; omitirlo, enviar null o una cadena vacía asigna S01.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public new string? DefaultInvoiceUse
+ {
+ get => TryGetValue("default_invoice_use", out var value) ? (string?)value! : default!;
+ set => this["default_invoice_use"] = value;
+ }
+
+ ///
+ /// En clientes de México contiene el RFC del cliente. Para extranjeros es opcional y representa el número de registro de identificación tributaria, es decir, el equivalente al RFC en el país del cliente.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public new string TaxId
+ {
+ get => TryGetValue("tax_id", out var value) ? (string)value! : default!;
+ set => this["tax_id"] = value;
+ }
+
+ ///
+ /// Requerido para clientes nacionales. Clave del régimen fiscal del cliente, del catálogo de [Regímenes Fiscales](https://docs.facturapi.io/api/#r%C3%A9gimen-fiscal).
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public new string TaxSystem
+ {
+ get => TryGetValue("tax_system", out var value) ? (string)value! : default!;
+ set => this["tax_system"] = value;
+ }
+
+ ///
+ /// address
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public new CustomerNationalAddressInput Address
+ {
+ get => TryGetValue("address", out var value) ? (CustomerNationalAddressInput)value! : default!;
+ set => this["address"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerUpdateInput.cs b/Models/Inputs/CustomerUpdateInput.cs
new file mode 100644
index 0000000..b464d6d
--- /dev/null
+++ b/Models/Inputs/CustomerUpdateInput.cs
@@ -0,0 +1,109 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// En una actualización sin createEditLink=true, los campos omitidos conservan su valor. Un valor null borra los campos que admiten null; un campo opcional puede omitirse sin que necesariamente admita null. No se permite null en legal_name, tax_id, tax_system ni address. En email, phone y los campos opcionales street, exterior, interior, neighborhood, city, municipality y state del domicilio, una cadena vacía o sólo espacios se normaliza a null. El código postal vacío no se acepta.
+ ///
+ public class CustomerUpdateInput : Dictionary
+ {
+ ///
+ /// Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? LegalName
+ {
+ get => TryGetValue("legal_name", out var value) ? (string?)value! : default!;
+ set => this["legal_name"] = value;
+ }
+
+ ///
+ /// En clientes de México contiene el RFC del cliente. Para extranjeros es opcional y representa el número de registro de identificación tributaria, es decir, el equivalente al RFC en el país del cliente.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? TaxId
+ {
+ get => TryGetValue("tax_id", out var value) ? (string?)value! : default!;
+ set => this["tax_id"] = value;
+ }
+
+ ///
+ /// email
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Email
+ {
+ get => TryGetValue("email", out var value) ? (string?)value! : default!;
+ set => this["email"] = value;
+ }
+
+ ///
+ /// Teléfono del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Phone
+ {
+ get => TryGetValue("phone", out var value) ? (string?)value! : default!;
+ set => this["phone"] = value;
+ }
+
+ ///
+ /// external_id
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? ExternalId
+ {
+ get => TryGetValue("external_id", out var value) ? (string?)value! : default!;
+ set => this["external_id"] = value;
+ }
+
+ ///
+ /// Uso de CFDI que se utiliza en facturas de ingreso cuando se omite use o se envía null. Si el cliente no tiene un uso configurado, se utiliza G03. Para clientes extranjeros o con RFC genérico sólo se admite S01; omitirlo, enviar null o una cadena vacía asigna S01.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? DefaultInvoiceUse
+ {
+ get => TryGetValue("default_invoice_use", out var value) ? (string?)value! : default!;
+ set => this["default_invoice_use"] = value;
+ }
+
+ ///
+ /// Requerido para clientes nacionales. Clave del régimen fiscal del cliente, del catálogo de [Regímenes Fiscales](https://docs.facturapi.io/api/#r%C3%A9gimen-fiscal).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? TaxSystem
+ {
+ get => TryGetValue("tax_system", out var value) ? (string?)value! : default!;
+ set => this["tax_system"] = value;
+ }
+
+ ///
+ /// address
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public CustomerUpdateInputAddress? Address
+ {
+ get => TryGetValue("address", out var value) ? (CustomerUpdateInputAddress?)value! : default!;
+ set => this["address"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerUpdateInputAddress.cs b/Models/Inputs/CustomerUpdateInputAddress.cs
new file mode 100644
index 0000000..ec55987
--- /dev/null
+++ b/Models/Inputs/CustomerUpdateInputAddress.cs
@@ -0,0 +1,123 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomerUpdateInputAddress
+ ///
+ public class CustomerUpdateInputAddress : Dictionary
+ {
+ ///
+ /// Nombre de la calle
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Street
+ {
+ get => TryGetValue("street", out var value) ? (string?)value! : default!;
+ set => this["street"] = value;
+ }
+
+ ///
+ /// Número exterior.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Exterior
+ {
+ get => TryGetValue("exterior", out var value) ? (string?)value! : default!;
+ set => this["exterior"] = value;
+ }
+
+ ///
+ /// Número interior.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Interior
+ {
+ get => TryGetValue("interior", out var value) ? (string?)value! : default!;
+ set => this["interior"] = value;
+ }
+
+ ///
+ /// Colonia
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Neighborhood
+ {
+ get => TryGetValue("neighborhood", out var value) ? (string?)value! : default!;
+ set => this["neighborhood"] = value;
+ }
+
+ ///
+ /// Ciudad
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? City
+ {
+ get => TryGetValue("city", out var value) ? (string?)value! : default!;
+ set => this["city"] = value;
+ }
+
+ ///
+ /// Municipio o delegación
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Municipality
+ {
+ get => TryGetValue("municipality", out var value) ? (string?)value! : default!;
+ set => this["municipality"] = value;
+ }
+
+ ///
+ /// Código postal
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Zip
+ {
+ get => TryGetValue("zip", out var value) ? (string?)value! : default!;
+ set => this["zip"] = value;
+ }
+
+ ///
+ /// state
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? State
+ {
+ get => TryGetValue("state", out var value) ? (string?)value! : default!;
+ set => this["state"] = value;
+ }
+
+ ///
+ /// ISO 3166-1 alpha-3.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Country
+ {
+ get => TryGetValue("country", out var value) ? (string?)value! : default!;
+ set => this["country"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerUpdateParams.cs b/Models/Inputs/CustomerUpdateParams.cs
new file mode 100644
index 0000000..d72ebcb
--- /dev/null
+++ b/Models/Inputs/CustomerUpdateParams.cs
@@ -0,0 +1,31 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomerUpdateParams
+ ///
+ public class CustomerUpdateParams : Dictionary
+ {
+ ///
+ /// Si pasas el valor `true`, se generará un enlace para que el cliente pueda editar
+ /// su información fiscal. Este enlace estará disponible en el campo "edit_link", será
+ /// válido por 3 días y sólo se podrá usar una vez. Pasar el valor `true` al editar
+ /// **no** desactivará la validación de información fiscal con el SAT.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public bool? CreateEditLink
+ {
+ get => TryGetValue("createEditLink", out var value) ? (bool?)value! : default!;
+ set => this["createEditLink"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerUpdateWithEditLinkInput.cs b/Models/Inputs/CustomerUpdateWithEditLinkInput.cs
new file mode 100644
index 0000000..1150275
--- /dev/null
+++ b/Models/Inputs/CustomerUpdateWithEditLinkInput.cs
@@ -0,0 +1,113 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// Con createEditLink=true, los campos omitidos conservan su valor y null borra el valor existente, incluidos los datos fiscales. Los valores no nulos deben ser válidos. En email, phone y los campos opcionales street, exterior, interior, neighborhood, city, municipality y state del domicilio, una cadena vacía o sólo espacios se normaliza a null. El código postal vacío no se acepta.
+ ///
+ public class CustomerUpdateWithEditLinkInput : Dictionary
+ {
+ ///
+ /// Nombre fiscal o razón social del cliente, *sin* el régimen societario (ej.: S.A. de C.V.).
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? LegalName
+ {
+ get => TryGetValue("legal_name", out var value) ? (string?)value! : default!;
+ set => this["legal_name"] = value;
+ }
+
+ ///
+ /// En clientes de México contiene el RFC del cliente. Para extranjeros es opcional y representa el número de registro de identificación tributaria, es decir, el equivalente al RFC en el país del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? TaxId
+ {
+ get => TryGetValue("tax_id", out var value) ? (string?)value! : default!;
+ set => this["tax_id"] = value;
+ }
+
+ ///
+ /// email
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Email
+ {
+ get => TryGetValue("email", out var value) ? (string?)value! : default!;
+ set => this["email"] = value;
+ }
+
+ ///
+ /// Teléfono del cliente.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Phone
+ {
+ get => TryGetValue("phone", out var value) ? (string?)value! : default!;
+ set => this["phone"] = value;
+ }
+
+ ///
+ /// external_id
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? ExternalId
+ {
+ get => TryGetValue("external_id", out var value) ? (string?)value! : default!;
+ set => this["external_id"] = value;
+ }
+
+ ///
+ /// Uso de CFDI que se utiliza en facturas de ingreso cuando se omite use o se envía null. Si el cliente no tiene un uso configurado, se utiliza G03. Para clientes extranjeros o con RFC genérico sólo se admite S01; omitirlo, enviar null o una cadena vacía asigna S01.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? DefaultInvoiceUse
+ {
+ get => TryGetValue("default_invoice_use", out var value) ? (string?)value! : default!;
+ set => this["default_invoice_use"] = value;
+ }
+
+ ///
+ /// Requerido para clientes nacionales. Clave del régimen fiscal del cliente, del catálogo de [Regímenes Fiscales](https://docs.facturapi.io/api/#r%C3%A9gimen-fiscal).
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? TaxSystem
+ {
+ get => TryGetValue("tax_system", out var value) ? (string?)value! : default!;
+ set => this["tax_system"] = value;
+ }
+
+ ///
+ /// address
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public CustomerUpdateWithEditLinkInputAddress? Address
+ {
+ get => TryGetValue("address", out var value) ? (CustomerUpdateWithEditLinkInputAddress?)value! : default!;
+ set => this["address"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/CustomerUpdateWithEditLinkInputAddress.cs b/Models/Inputs/CustomerUpdateWithEditLinkInputAddress.cs
new file mode 100644
index 0000000..9138561
--- /dev/null
+++ b/Models/Inputs/CustomerUpdateWithEditLinkInputAddress.cs
@@ -0,0 +1,125 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// CustomerUpdateWithEditLinkInputAddress
+ ///
+ public class CustomerUpdateWithEditLinkInputAddress : Dictionary
+ {
+ ///
+ /// Nombre de la calle
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Street
+ {
+ get => TryGetValue("street", out var value) ? (string?)value! : default!;
+ set => this["street"] = value;
+ }
+
+ ///
+ /// Número exterior.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Exterior
+ {
+ get => TryGetValue("exterior", out var value) ? (string?)value! : default!;
+ set => this["exterior"] = value;
+ }
+
+ ///
+ /// Número interior.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Interior
+ {
+ get => TryGetValue("interior", out var value) ? (string?)value! : default!;
+ set => this["interior"] = value;
+ }
+
+ ///
+ /// Colonia
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Neighborhood
+ {
+ get => TryGetValue("neighborhood", out var value) ? (string?)value! : default!;
+ set => this["neighborhood"] = value;
+ }
+
+ ///
+ /// Ciudad
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? City
+ {
+ get => TryGetValue("city", out var value) ? (string?)value! : default!;
+ set => this["city"] = value;
+ }
+
+ ///
+ /// Municipio o delegación
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Municipality
+ {
+ get => TryGetValue("municipality", out var value) ? (string?)value! : default!;
+ set => this["municipality"] = value;
+ }
+
+ ///
+ /// state
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? State
+ {
+ get => TryGetValue("state", out var value) ? (string?)value! : default!;
+ set => this["state"] = value;
+ }
+
+ ///
+ /// ISO 3166-1 alpha-3.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Country
+ {
+ get => TryGetValue("country", out var value) ? (string?)value! : default!;
+ set => this["country"] = value;
+ }
+
+ ///
+ /// Código postal
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Zip
+ {
+ get => TryGetValue("zip", out var value) ? (string?)value! : default!;
+ set => this["zip"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/DateRangeInput.cs b/Models/Inputs/DateRangeInput.cs
new file mode 100644
index 0000000..2c3a98b
--- /dev/null
+++ b/Models/Inputs/DateRangeInput.cs
@@ -0,0 +1,69 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// DateRangeInput
+ ///
+ public class DateRangeInput : Dictionary
+ {
+ ///
+ /// Greater than
+ /// Format: date-time
+ /// Límite inferior exclusivo del rango de fechas a solicitar.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf? Gt
+ {
+ get => TryGetValue("gt", out var value) && value != null ? OneOf.FromValue(value) : default(OneOf?);
+ set => this["gt"] = value?.Value;
+ }
+
+ ///
+ /// Greater than or equals
+ /// Format: date-time
+ /// Límite inferior inclusivo del rango de fechas a solicitar.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf? Gte
+ {
+ get => TryGetValue("gte", out var value) && value != null ? OneOf.FromValue(value) : default(OneOf?);
+ set => this["gte"] = value?.Value;
+ }
+
+ ///
+ /// Lesser than
+ /// Format: date-time
+ /// Límite superior exclusivo del rango de fechas a solicitar.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf? Lt
+ {
+ get => TryGetValue("lt", out var value) && value != null ? OneOf.FromValue(value) : default(OneOf?);
+ set => this["lt"] = value?.Value;
+ }
+
+ ///
+ /// Lesser than or equals
+ /// Format: date-time
+ /// Límite superior inclusivo del rango de fechas a solicitar.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf? Lte
+ {
+ get => TryGetValue("lte", out var value) && value != null ? OneOf.FromValue(value) : default(OneOf?);
+ set => this["lte"] = value?.Value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/GlobalInvoiceCommonInput.cs b/Models/Inputs/GlobalInvoiceCommonInput.cs
new file mode 100644
index 0000000..0329104
--- /dev/null
+++ b/Models/Inputs/GlobalInvoiceCommonInput.cs
@@ -0,0 +1,148 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// GlobalInvoiceCommonInput
+ ///
+ public class GlobalInvoiceCommonInput : Dictionary
+ {
+ ///
+ /// Fecha inicial de los recibos que se incluirán en la factura global.
+ /// Por default, este valor es el inicio del último periodo (día, semana,
+ /// quincena o mes), según el valor de "Periodicidad" (`periodicity`)
+ /// en la configuración de recibos de tu organización. Este valor es requerido cuando se envíe el campo `receipts`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf? From
+ {
+ get => TryGetValue("from", out var value) && value != null ? OneOf.FromValue(value) : default(OneOf?);
+ set => this["from"] = value?.Value;
+ }
+
+ ///
+ /// Fecha final de los recibos que se incluirán en la factura global.
+ /// Por default, este valor es el fin del último periodo (día, semana,
+ /// quincena o mes), según el valor de "Periodicidad" (`periodicity`)
+ /// en la configuración de recibos de tu organización. Este valor es requerido cuando se envíe el campo `receipts`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf? To
+ {
+ get => TryGetValue("to", out var value) && value != null ? OneOf.FromValue(value) : default(OneOf?);
+ set => this["to"] = value?.Value;
+ }
+
+ ///
+ /// Periodicidad que corresponde al rango de fechas utilizado.
+ /// Si omites los campos `from` y `to`, las fechas que se asignarán por
+ /// default dependerán del valor de `periodicity`.
+ ///
+ /// Si se omite, se utiliza la periodicidad configurada en los recibos de la organización.
+ /// Valores: "day", "week", "fortnight", "month", "two_months".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Periodicity
+ {
+ get => TryGetValue("periodicity", out var value) ? (string?)value! : default!;
+ set => this["periodicity"] = value;
+ }
+
+ ///
+ /// Clave que representa el mes o bimestre de la factura. Consulta
+ /// los posibles valores en el [catálogo de Meses y Bimestres](https://docs.facturapi.io/api/#meses-y-bimestres).
+ ///
+ /// Si se omite, el mes o bimestre se determina a partir de la fecha inicial y la periodicidad.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Months
+ {
+ get => TryGetValue("months", out var value) ? (string?)value! : default!;
+ set => this["months"] = value;
+ }
+
+ ///
+ /// Número de folio asignado por la empresa para control interno.
+ /// Si se omite, se asignará el valor autoincremental de la organización.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? FolioNumber
+ {
+ get => TryGetValue("folio_number", out var value) ? (int?)value! : default!;
+ set => this["folio_number"] = value;
+ }
+
+ ///
+ /// Serie. Caracteres designados por la empresa para control interno y sin validez fiscal.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Series
+ {
+ get => TryGetValue("series", out var value) ? (string?)value! : default!;
+ set => this["series"] = value;
+ }
+
+ ///
+ /// Fecha de emisión de la factura. Si se omite, se utiliza la fecha final (`to`), limitada a la fecha y hora actuales.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf? Date
+ {
+ get => TryGetValue("date", out var value) && value != null ? OneOf.FromValue(value) : default(OneOf?);
+ set => this["date"] = value?.Value;
+ }
+
+ ///
+ /// Código que representa la forma de pago, de acuerdo al [catálogo del SAT](https://docs.facturapi.io/api/#forma-de-pago). Si se incluye, los recibos se agruparán y se crearán la factura global por la forma de pago.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? PaymentForm
+ {
+ get => TryGetValue("payment_form", out var value) ? (string?)value! : default!;
+ set => this["payment_form"] = value;
+ }
+
+ ///
+ /// Recibos a incluir en la factura global. Si se incluye este parámetro, los parámetros `from` y `to` serán requeridos y tendrán que cumplir con el campo `periodicity`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? Receipts
+ {
+ get => TryGetValue("receipts", out var value) ? (List?)value! : default!;
+ set => this["receipts"] = value;
+ }
+
+ ///
+ /// Permite procesar periodos con más de 5,000 recibos abiertos. Cuando es
+ /// `true`, la factura incluye como máximo 5,000 recibos y los restantes
+ /// conservan el status `"open"`. Repite la solicitud con el mismo periodo
+ /// hasta recibir `null`, que indica que ya no quedan recibos por facturar.
+ ///
+ /// Cuando es `false`, un periodo con más de 5,000 recibos abiertos devuelve
+ /// el error `global_invoice_too_many_items`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public bool? LimitToMaxReceipts
+ {
+ get => TryGetValue("limit_to_max_receipts", out var value) ? (bool?)value! : default!;
+ set => this["limit_to_max_receipts"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/GlobalInvoiceInput.cs b/Models/Inputs/GlobalInvoiceInput.cs
new file mode 100644
index 0000000..1670dfd
--- /dev/null
+++ b/Models/Inputs/GlobalInvoiceInput.cs
@@ -0,0 +1,149 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// Las fechas son opcionales al seleccionar por periodo. Al enviar receipts se requieren from y to. La periodicidad predeterminada viene de la configuración de la organización.
+ ///
+ public class GlobalInvoiceInput : Dictionary
+ {
+ ///
+ /// Fecha inicial de los recibos que se incluirán en la factura global.
+ /// Por default, este valor es el inicio del último periodo (día, semana,
+ /// quincena o mes), según el valor de "Periodicidad" (`periodicity`)
+ /// en la configuración de recibos de tu organización. Este valor es requerido cuando se envíe el campo `receipts`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf? From
+ {
+ get => TryGetValue("from", out var value) && value != null ? OneOf.FromValue(value) : default(OneOf?);
+ set => this["from"] = value?.Value;
+ }
+
+ ///
+ /// Fecha final de los recibos que se incluirán en la factura global.
+ /// Por default, este valor es el fin del último periodo (día, semana,
+ /// quincena o mes), según el valor de "Periodicidad" (`periodicity`)
+ /// en la configuración de recibos de tu organización. Este valor es requerido cuando se envíe el campo `receipts`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf? To
+ {
+ get => TryGetValue("to", out var value) && value != null ? OneOf.FromValue(value) : default(OneOf?);
+ set => this["to"] = value?.Value;
+ }
+
+ ///
+ /// Periodicidad que corresponde al rango de fechas utilizado.
+ /// Si omites los campos `from` y `to`, las fechas que se asignarán por
+ /// default dependerán del valor de `periodicity`.
+ ///
+ /// Si se omite, se utiliza la periodicidad configurada en los recibos de la organización.
+ /// Valores: "day", "week", "fortnight", "month", "two_months".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Periodicity
+ {
+ get => TryGetValue("periodicity", out var value) ? (string?)value! : default!;
+ set => this["periodicity"] = value;
+ }
+
+ ///
+ /// Clave que representa el mes o bimestre de la factura. Consulta
+ /// los posibles valores en el [catálogo de Meses y Bimestres](https://docs.facturapi.io/api/#meses-y-bimestres).
+ ///
+ /// Si se omite, el mes o bimestre se determina a partir de la fecha inicial y la periodicidad.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Months
+ {
+ get => TryGetValue("months", out var value) ? (string?)value! : default!;
+ set => this["months"] = value;
+ }
+
+ ///
+ /// Número de folio asignado por la empresa para control interno.
+ /// Si se omite, se asignará el valor autoincremental de la organización.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? FolioNumber
+ {
+ get => TryGetValue("folio_number", out var value) ? (int?)value! : default!;
+ set => this["folio_number"] = value;
+ }
+
+ ///
+ /// Serie. Caracteres designados por la empresa para control interno y sin validez fiscal.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Series
+ {
+ get => TryGetValue("series", out var value) ? (string?)value! : default!;
+ set => this["series"] = value;
+ }
+
+ ///
+ /// Fecha de emisión de la factura. Si se omite, se utiliza la fecha final (`to`), limitada a la fecha y hora actuales.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf? Date
+ {
+ get => TryGetValue("date", out var value) && value != null ? OneOf.FromValue(value) : default(OneOf?);
+ set => this["date"] = value?.Value;
+ }
+
+ ///
+ /// Código que representa la forma de pago, de acuerdo al [catálogo del SAT](https://docs.facturapi.io/api/#forma-de-pago). Si se incluye, los recibos se agruparán y se crearán la factura global por la forma de pago.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? PaymentForm
+ {
+ get => TryGetValue("payment_form", out var value) ? (string?)value! : default!;
+ set => this["payment_form"] = value;
+ }
+
+ ///
+ /// Recibos a incluir en la factura global. Si se incluye este parámetro, los parámetros `from` y `to` serán requeridos y tendrán que cumplir con el campo `periodicity`.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public List? Receipts
+ {
+ get => TryGetValue("receipts", out var value) ? (List?)value! : default!;
+ set => this["receipts"] = value;
+ }
+
+ ///
+ /// Permite procesar periodos con más de 5,000 recibos abiertos. Cuando es
+ /// `true`, la factura incluye como máximo 5,000 recibos y los restantes
+ /// conservan el status `"open"`. Repite la solicitud con el mismo periodo
+ /// hasta recibir `null`, que indica que ya no quedan recibos por facturar.
+ ///
+ /// Cuando es `false`, un periodo con más de 5,000 recibos abiertos devuelve
+ /// el error `global_invoice_too_many_items`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public bool? LimitToMaxReceipts
+ {
+ get => TryGetValue("limit_to_max_receipts", out var value) ? (bool?)value! : default!;
+ set => this["limit_to_max_receipts"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/HidroYPetroComplementInput.cs b/Models/Inputs/HidroYPetroComplementInput.cs
new file mode 100644
index 0000000..660cd0f
--- /dev/null
+++ b/Models/Inputs/HidroYPetroComplementInput.cs
@@ -0,0 +1,79 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// HidroYPetroComplementInput
+ ///
+ public class HidroYPetroComplementInput : Dictionary
+ {
+ ///
+ /// Crea HidroYPetroComplementInput.
+ ///
+ /// Tipo de permiso otorgado por la autoridad competente, conforme al [Catálogo Hidrocarburos Petrolíferos](https://docs.facturapi.io/api/#cat%C3%A1logos-hidrocarburos-petrol%C3%ADferos). Valores: "PER01", "PER02", "PER03", "PER04", "PER05", "PER06", "PER07", "PER08", "PER09", "PER10", "PER11". Requerido.
+ /// Número de permiso otorgado por la autoridad competente, conforme a la nomenclatura del catálogo c_TipoPermiso. Requerido.
+ /// Subtipo del hidrocarburo o petrolífero, conforme al [Catálogo Hidrocarburos Petrolíferos](https://docs.facturapi.io/api/#cat%C3%A1logos-hidrocarburos-petrol%C3%ADferos). Valores: "SP16", "SP17", "SP18", "SP19", "SP22", "SP23", "SP24", "SP25", "SP48". Requerido.
+ public HidroYPetroComplementInput(string @tipoPermiso, string @numeroPermiso, string @subProductoHyp)
+ {
+ this["tipo_permiso"] = @tipoPermiso;
+ this["numero_permiso"] = @numeroPermiso;
+ this["sub_producto_hyp"] = @subProductoHyp;
+ }
+
+ ///
+ /// Tipo de permiso otorgado por la autoridad competente, conforme al [Catálogo Hidrocarburos Petrolíferos](https://docs.facturapi.io/api/#cat%C3%A1logos-hidrocarburos-petrol%C3%ADferos).
+ /// Valores: "PER01", "PER02", "PER03", "PER04", "PER05", "PER06", "PER07", "PER08", "PER09", "PER10", "PER11".
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string TipoPermiso
+ {
+ get => TryGetValue("tipo_permiso", out var value) ? (string)value! : default!;
+ set => this["tipo_permiso"] = value;
+ }
+
+ ///
+ /// Número de permiso otorgado por la autoridad competente, conforme a la nomenclatura del catálogo c_TipoPermiso.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string NumeroPermiso
+ {
+ get => TryGetValue("numero_permiso", out var value) ? (string)value! : default!;
+ set => this["numero_permiso"] = value;
+ }
+
+ ///
+ /// Subtipo del hidrocarburo o petrolífero, conforme al [Catálogo Hidrocarburos Petrolíferos](https://docs.facturapi.io/api/#cat%C3%A1logos-hidrocarburos-petrol%C3%ADferos).
+ /// Valores: "SP16", "SP17", "SP18", "SP19", "SP22", "SP23", "SP24", "SP25", "SP48".
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string SubProductoHyp
+ {
+ get => TryGetValue("sub_producto_hyp", out var value) ? (string)value! : default!;
+ set => this["sub_producto_hyp"] = value;
+ }
+
+ ///
+ /// Clave correspondiente a hidrocarburos y petrolíferos, conforme al [Catálogo Hidrocarburos Petrolíferos](https://docs.facturapi.io/api/#cat%C3%A1logos-hidrocarburos-petrol%C3%ADferos).
+ ///
+ /// Puedes enviarla explícitamente o dejar que Facturapi la derive desde el `product_key` del concepto cuando aplique.
+ /// Valores: "15101514", "15101515", "15101505".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? ClaveHyp
+ {
+ get => TryGetValue("clave_hyp", out var value) ? (string?)value! : default!;
+ set => this["clave_hyp"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/IeduComplementInput.cs b/Models/Inputs/IeduComplementInput.cs
new file mode 100644
index 0000000..0e905ca
--- /dev/null
+++ b/Models/Inputs/IeduComplementInput.cs
@@ -0,0 +1,88 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// IeduComplementInput
+ ///
+ public class IeduComplementInput : Dictionary
+ {
+ ///
+ /// Crea IeduComplementInput.
+ ///
+ /// Nombre del alumno. Requerido.
+ /// CURP del alumno de la institución educativa. Requerido.
+ /// Nivel educativo que cursa el alumno. Valores: "Preescolar", "Primaria", "Secundaria", "Profesional técnico", "Bachillerato o su equivalente". Requerido.
+ /// Clave del centro de trabajo o reconocimiento de validez oficial de estudios de la institución educativa privada donde se realiza el pago. Requerido.
+ public IeduComplementInput(string @nombreAlumno, string @cURP, string @nivelEducativo, string @autRVOE)
+ {
+ this["nombreAlumno"] = @nombreAlumno;
+ this["CURP"] = @cURP;
+ this["nivelEducativo"] = @nivelEducativo;
+ this["autRVOE"] = @autRVOE;
+ }
+
+ ///
+ /// Nombre del alumno.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string NombreAlumno
+ {
+ get => TryGetValue("nombreAlumno", out var value) ? (string)value! : default!;
+ set => this["nombreAlumno"] = value;
+ }
+
+ ///
+ /// CURP del alumno de la institución educativa.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string CURP
+ {
+ get => TryGetValue("CURP", out var value) ? (string)value! : default!;
+ set => this["CURP"] = value;
+ }
+
+ ///
+ /// Nivel educativo que cursa el alumno.
+ /// Valores: "Preescolar", "Primaria", "Secundaria", "Profesional técnico", "Bachillerato o su equivalente".
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string NivelEducativo
+ {
+ get => TryGetValue("nivelEducativo", out var value) ? (string)value! : default!;
+ set => this["nivelEducativo"] = value;
+ }
+
+ ///
+ /// Clave del centro de trabajo o reconocimiento de validez oficial de estudios de la institución educativa privada donde se realiza el pago.
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string AutRVOE
+ {
+ get => TryGetValue("autRVOE", out var value) ? (string)value! : default!;
+ set => this["autRVOE"] = value;
+ }
+
+ ///
+ /// RFC de quien realiza el pago cuando sea diferente a quien recibe el servicio.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? RfcPago
+ {
+ get => TryGetValue("rfcPago", out var value) ? (string?)value! : default!;
+ set => this["rfcPago"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/InvoiceCommonEditInput.cs b/Models/Inputs/InvoiceCommonEditInput.cs
new file mode 100644
index 0000000..29bab47
--- /dev/null
+++ b/Models/Inputs/InvoiceCommonEditInput.cs
@@ -0,0 +1,155 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// InvoiceCommonEditInput
+ ///
+ public class InvoiceCommonEditInput : Dictionary
+ {
+ ///
+ /// Crea InvoiceCommonEditInput.
+ ///
+ public InvoiceCommonEditInput()
+ {
+ this["status"] = "draft";
+ }
+
+ ///
+ /// Estado de la factura. El valor `draft` identifica un borrador que no se ha timbrado ni enviado al SAT.
+ /// Sólo es posible editar facturas con este estado; al editarlas, no se puede cambiar `status`.
+ /// Valores: "draft".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Status
+ {
+ get => TryGetValue("status", out var value) ? (string?)value! : default!;
+ set => this["status"] = value;
+ }
+
+ ///
+ /// Format: date-time
+ /// Fecha de expedición del comprobante en formato ISO8601 (UTC String). No puede ser anterior a 72 horas en el pasado, ni posterior al presente.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf? Date
+ {
+ get => TryGetValue("date", out var value) && value != null ? OneOf.FromValue(value) : default(OneOf?);
+ set => this["date"] = value?.Value;
+ }
+
+ ///
+ /// address
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public InvoiceCommonEditInputAddress? Address
+ {
+ get => TryGetValue("address", out var value) ? (InvoiceCommonEditInputAddress?)value! : default!;
+ set => this["address"] = value;
+ }
+
+ ///
+ /// Identificador opcional que puedes usar para relacionar esta factura con tus registros y poder hacer búsquedas usando este identificador. Facturapi no valida que este campo sea único.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? ExternalId
+ {
+ get => TryGetValue("external_id", out var value) ? (string?)value! : default!;
+ set => this["external_id"] = value;
+ }
+
+ ///
+ /// Clave que identifica una operación para evitar recursos duplicados al repetir o enviar solicitudes en paralelo. Debe ser única dentro de la misma organización, ambiente y tipo de recurso.
+ /// Si otra solicitud está procesando la clave o si ya está asociada a un recurso, la API responde HTTP `409` con `code: idempotency_key_in_use`; no reproduce la respuesta original.
+ /// Si se deja en blanco, no se toma en cuenta. Consulta [Idempotencia](https://docs.facturapi.io/docs/getting-started/idempotency).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? IdempotencyKey
+ {
+ get => TryGetValue("idempotency_key", out var value) ? (string?)value! : default!;
+ set => this["idempotency_key"] = value;
+ }
+
+ ///
+ /// Número de folio asignado por la empresa para control interno. Si se omite, se asignará el valor autoincremental de la organización.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? FolioNumber
+ {
+ get => TryGetValue("folio_number", out var value) ? (int?)value! : default!;
+ set => this["folio_number"] = value;
+ }
+
+ ///
+ /// Serie. Caracteres designados por la empresa para control interno y sin validez fiscal.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Series
+ {
+ get => TryGetValue("series", out var value) ? (string?)value! : default!;
+ set => this["series"] = value;
+ }
+
+ ///
+ /// Format: xml
+ /// En caso de que necesites incluir más información en el PDF, este campo te permite enviar código HTML con tu propio contenido.
+ ///
+ /// Por seguridad, el código que puedes enviar está limitado a las siguientes etiquetas: `h1`, `h2`, `h3`, `h4`, `h5`, `h6`, `div`, `p`, `span`, `small`, `br`, `b`, `i`, `ul`, `ol`, `li`, `strong`, `table`, `thead`, `tbody`, `tfoot`, `tr`, `th` y `td`. No se permiten atributos ni estilos.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? PdfCustomSection
+ {
+ get => TryGetValue("pdf_custom_section", out var value) ? (string?)value! : default!;
+ set => this["pdf_custom_section"] = value;
+ }
+
+ ///
+ /// Format: xml
+ /// Código XML con la Addenda que se necesite agregar a la factura.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Addenda
+ {
+ get => TryGetValue("addenda", out var value) ? (string?)value! : default!;
+ set => this["addenda"] = value;
+ }
+
+ ///
+ /// Si incluiste el parámetro `complements`, este campo es opcional; en cambio si incluiste el parámetro `addenda`, debes enviar la información necesaria para incluir estos namespaces en el documento XML.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? Namespaces
+ {
+ get => TryGetValue("namespaces", out var value) ? (List?)value! : default!;
+ set => this["namespaces"] = value;
+ }
+
+ ///
+ /// Configura qué campos opcionales se quieren mostrar en el PDF. El SAT no obliga a mostrar estos campos, pero pueden activarse según la preferencia del cliente para la factura en curso. Utiliza este campo para peticiones de generación de facturas en las cuales necesites utilizar una configuración distinta al campo pdf_extra de la organización.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public InvoiceableCommonEditInputPdfOptions? PdfOptions
+ {
+ get => TryGetValue("pdf_options", out var value) ? (InvoiceableCommonEditInputPdfOptions?)value! : default!;
+ set => this["pdf_options"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/InvoiceCommonEditInputAddress.cs b/Models/Inputs/InvoiceCommonEditInputAddress.cs
new file mode 100644
index 0000000..bfb3baa
--- /dev/null
+++ b/Models/Inputs/InvoiceCommonEditInputAddress.cs
@@ -0,0 +1,105 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// InvoiceCommonEditInputAddress
+ ///
+ public class InvoiceCommonEditInputAddress : Dictionary
+ {
+ ///
+ /// Nombre de la calle
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Street
+ {
+ get => TryGetValue("street", out var value) ? (string?)value! : default!;
+ set => this["street"] = value;
+ }
+
+ ///
+ /// Número exterior.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Exterior
+ {
+ get => TryGetValue("exterior", out var value) ? (string?)value! : default!;
+ set => this["exterior"] = value;
+ }
+
+ ///
+ /// Número interior.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Interior
+ {
+ get => TryGetValue("interior", out var value) ? (string?)value! : default!;
+ set => this["interior"] = value;
+ }
+
+ ///
+ /// Colonia
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Neighborhood
+ {
+ get => TryGetValue("neighborhood", out var value) ? (string?)value! : default!;
+ set => this["neighborhood"] = value;
+ }
+
+ ///
+ /// Ciudad
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? City
+ {
+ get => TryGetValue("city", out var value) ? (string?)value! : default!;
+ set => this["city"] = value;
+ }
+
+ ///
+ /// Municipio o delegación
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Municipality
+ {
+ get => TryGetValue("municipality", out var value) ? (string?)value! : default!;
+ set => this["municipality"] = value;
+ }
+
+ ///
+ /// Código postal
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Zip
+ {
+ get => TryGetValue("zip", out var value) ? (string?)value! : default!;
+ set => this["zip"] = value;
+ }
+
+ ///
+ /// Nombre del Estado o Entidad Federativa.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? State
+ {
+ get => TryGetValue("state", out var value) ? (string?)value! : default!;
+ set => this["state"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/InvoiceCommonInput.cs b/Models/Inputs/InvoiceCommonInput.cs
new file mode 100644
index 0000000..e44610a
--- /dev/null
+++ b/Models/Inputs/InvoiceCommonInput.cs
@@ -0,0 +1,161 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// InvoiceCommonInput
+ ///
+ public class InvoiceCommonInput : Dictionary
+ {
+ ///
+ /// customer
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf? Customer
+ {
+ get => TryGetValue("customer", out var value) && value != null ? OneOf.FromValue(value) : default(OneOf?);
+ set => this["customer"] = value?.Value;
+ }
+
+ ///
+ /// Estado inicial de la factura. Si se envía `draft`, la factura se guardará como borrador y no se timbrará ni se
+ /// enviará al SAT. También al enviar `draft`, todos los campos requeridos se vuelven
+ /// opcionales. Si se omite, el estado por default es `pending` y una vez timbrada (en la respuesta) este
+ /// campo se actualizará a `valid`. Para facturas asíncronas, este campo se quedará en `pending` hasta que
+ /// se timbre la factura.
+ /// Valores: "pending", "draft".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Status
+ {
+ get => TryGetValue("status", out var value) ? (string?)value! : default!;
+ set => this["status"] = value;
+ }
+
+ ///
+ /// Format: date-time
+ /// Fecha de expedición del comprobante en formato ISO8601. Si se omite, se utiliza la fecha y hora actuales. No puede ser anterior a 72 horas en el pasado ni posterior al presente.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf? Date
+ {
+ get => TryGetValue("date", out var value) && value != null ? OneOf.FromValue(value) : default(OneOf?);
+ set => this["date"] = value?.Value;
+ }
+
+ ///
+ /// address
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public InvoiceCommonInputAddress? Address
+ {
+ get => TryGetValue("address", out var value) ? (InvoiceCommonInputAddress?)value! : default!;
+ set => this["address"] = value;
+ }
+
+ ///
+ /// Identificador opcional que puedes usar para relacionar esta factura con tus registros y poder hacer búsquedas usando este identificador. Facturapi no valida que este campo sea único.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? ExternalId
+ {
+ get => TryGetValue("external_id", out var value) ? (string?)value! : default!;
+ set => this["external_id"] = value;
+ }
+
+ ///
+ /// Clave que identifica una operación para evitar recursos duplicados al repetir o enviar solicitudes en paralelo. Debe ser única dentro de la misma organización, ambiente y tipo de recurso.
+ /// Si otra solicitud está procesando la clave o si ya está asociada a un recurso, la API responde HTTP `409` con `code: idempotency_key_in_use`; no reproduce la respuesta original.
+ /// Si se deja en blanco, no se toma en cuenta. Consulta [Idempotencia](https://docs.facturapi.io/docs/getting-started/idempotency).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? IdempotencyKey
+ {
+ get => TryGetValue("idempotency_key", out var value) ? (string?)value! : default!;
+ set => this["idempotency_key"] = value;
+ }
+
+ ///
+ /// Número de folio asignado por la empresa para control interno. Si se omite, se asignará el valor autoincremental de la organización.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public int? FolioNumber
+ {
+ get => TryGetValue("folio_number", out var value) ? (int?)value! : default!;
+ set => this["folio_number"] = value;
+ }
+
+ ///
+ /// Serie. Caracteres designados por la empresa para control interno y sin validez fiscal.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Series
+ {
+ get => TryGetValue("series", out var value) ? (string?)value! : default!;
+ set => this["series"] = value;
+ }
+
+ ///
+ /// Format: xml
+ /// En caso de que necesites incluir más información en el PDF, este campo te permite enviar código HTML con tu propio contenido.
+ ///
+ /// Por seguridad, el código que puedes enviar está limitado a las siguientes etiquetas: `h1`, `h2`, `h3`, `h4`, `h5`, `h6`, `div`, `p`, `span`, `small`, `br`, `b`, `i`, `ul`, `ol`, `li`, `strong`, `table`, `thead`, `tbody`, `tfoot`, `tr`, `th` y `td`. No se permiten atributos ni estilos.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? PdfCustomSection
+ {
+ get => TryGetValue("pdf_custom_section", out var value) ? (string?)value! : default!;
+ set => this["pdf_custom_section"] = value;
+ }
+
+ ///
+ /// Format: xml
+ /// Código XML con la Addenda que se necesite agregar a la factura.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Addenda
+ {
+ get => TryGetValue("addenda", out var value) ? (string?)value! : default!;
+ set => this["addenda"] = value;
+ }
+
+ ///
+ /// Si incluiste el parámetro `complements`, este campo es opcional; en cambio si incluiste el parámetro `addenda`, debes enviar la información necesaria para incluir estos namespaces en el documento XML.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? Namespaces
+ {
+ get => TryGetValue("namespaces", out var value) ? (List?)value! : default!;
+ set => this["namespaces"] = value;
+ }
+
+ ///
+ /// Configura qué campos opcionales se quieren mostrar en el PDF. El SAT no obliga a mostrar estos campos, pero pueden activarse según la preferencia del cliente para la factura en curso. Utiliza este campo para peticiones de generación de facturas en las cuales necesites utilizar una configuración distinta al campo pdf_extra de la organización.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public InvoiceableCommonInputPdfOptions? PdfOptions
+ {
+ get => TryGetValue("pdf_options", out var value) ? (InvoiceableCommonInputPdfOptions?)value! : default!;
+ set => this["pdf_options"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/InvoiceCommonInputAddress.cs b/Models/Inputs/InvoiceCommonInputAddress.cs
new file mode 100644
index 0000000..f49be6b
--- /dev/null
+++ b/Models/Inputs/InvoiceCommonInputAddress.cs
@@ -0,0 +1,105 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// InvoiceCommonInputAddress
+ ///
+ public class InvoiceCommonInputAddress : Dictionary
+ {
+ ///
+ /// Nombre de la calle
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Street
+ {
+ get => TryGetValue("street", out var value) ? (string?)value! : default!;
+ set => this["street"] = value;
+ }
+
+ ///
+ /// Número exterior.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Exterior
+ {
+ get => TryGetValue("exterior", out var value) ? (string?)value! : default!;
+ set => this["exterior"] = value;
+ }
+
+ ///
+ /// Número interior.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Interior
+ {
+ get => TryGetValue("interior", out var value) ? (string?)value! : default!;
+ set => this["interior"] = value;
+ }
+
+ ///
+ /// Colonia
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Neighborhood
+ {
+ get => TryGetValue("neighborhood", out var value) ? (string?)value! : default!;
+ set => this["neighborhood"] = value;
+ }
+
+ ///
+ /// Ciudad
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? City
+ {
+ get => TryGetValue("city", out var value) ? (string?)value! : default!;
+ set => this["city"] = value;
+ }
+
+ ///
+ /// Municipio o delegación
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Municipality
+ {
+ get => TryGetValue("municipality", out var value) ? (string?)value! : default!;
+ set => this["municipality"] = value;
+ }
+
+ ///
+ /// Código postal
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Zip
+ {
+ get => TryGetValue("zip", out var value) ? (string?)value! : default!;
+ set => this["zip"] = value;
+ }
+
+ ///
+ /// Nombre del Estado o Entidad Federativa.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? State
+ {
+ get => TryGetValue("state", out var value) ? (string?)value! : default!;
+ set => this["state"] = value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/InvoiceComplementInput.cs b/Models/Inputs/InvoiceComplementInput.cs
new file mode 100644
index 0000000..92d4484
--- /dev/null
+++ b/Models/Inputs/InvoiceComplementInput.cs
@@ -0,0 +1,49 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// InvoiceComplementInput
+ ///
+ public class InvoiceComplementInput : Dictionary
+ {
+ ///
+ /// Crea InvoiceComplementInput.
+ ///
+ /// Tipo de complemento. Valores: "custom", "pago", "nomina", "carta_porte", "comercio_exterior", "leyendas_fiscales". Requerido.
+ public InvoiceComplementInput(string @type)
+ {
+ this["type"] = @type;
+ }
+
+ ///
+ /// Tipo de complemento.
+ /// Valores: "custom", "pago", "nomina", "carta_porte", "comercio_exterior", "leyendas_fiscales".
+ /// Requerido.
+ ///
+ [JsonIgnore]
+ public string Type
+ {
+ get => TryGetValue("type", out var value) ? (string)value! : default!;
+ set => this["type"] = value;
+ }
+
+ ///
+ /// data
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public OneOf, NominaComplementDataInput, CartaPorteDataPropertiesInput, ComercioExteriorDataInput, LeyendasFiscalesDataInput>? Data
+ {
+ get => TryGetValue("data", out var value) && value != null ? OneOf, NominaComplementDataInput, CartaPorteDataPropertiesInput, ComercioExteriorDataInput, LeyendasFiscalesDataInput>.FromValue(value) : default(OneOf, NominaComplementDataInput, CartaPorteDataPropertiesInput, ComercioExteriorDataInput, LeyendasFiscalesDataInput>?);
+ set => this["data"] = value?.Value;
+ }
+
+ }
+}
diff --git a/Models/Inputs/InvoiceCreateInput.cs b/Models/Inputs/InvoiceCreateInput.cs
new file mode 100644
index 0000000..55d1f1d
--- /dev/null
+++ b/Models/Inputs/InvoiceCreateInput.cs
@@ -0,0 +1,367 @@
+// Generated by pnpm generate:sdk. Do not edit directly.
+#nullable enable
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Facturapi
+{
+ ///
+ /// Datos de la factura según su tipo y estado inicial. Omite status para timbrar; usa draft para guardar un borrador.
+ ///
+ public class InvoiceCreateInput : Dictionary
+ {
+ ///
+ /// Tipo de comprobante. El valor default es `“I”` (Ingreso).
+ /// Tipo de comprobante de esta variante de entrada.
+ /// Valores: "I", "E", "P", "N", "T".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Type
+ {
+ get => TryGetValue("type", out var value) ? (string?)value! : default!;
+ set => this["type"] = value;
+ }
+
+ ///
+ /// Conceptos a incluir en la factura.
+ ///
+ /// El número máximo de elementos que puedes incluir en una factura es de 5,000. Si necesitas
+ /// emitir una factura con más de 5,000 conceptos, puedes dividir la transacción en varias facturas.
+ /// Conceptos a incluir en la nota de crédito.
+ ///
+ /// El número máximo de elementos que puedes incluir en el comprobante es de 5,000. Si necesitas
+ /// emitir un comprobante con más de 5,000 conceptos, puedes dividir la transacción en varios comprobantes.
+ /// Conceptos a incluir en el comprobante de Traslado.
+ ///
+ /// El número máximo de elementos que puedes incluir en un comprobante es de 5,000. Si necesitas
+ /// emitir un comprobante con más de 5,000 conceptos, puedes dividir la transacción en varios comprobantes.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List>? Items
+ {
+ get => TryGetValue("items", out var value) ? (List>?)value! : default!;
+ set => this["items"] = value;
+ }
+
+ ///
+ /// Código que representa la forma de pago, de acuerdo al [catálogo del SAT](https://docs.facturapi.io/api/#forma-de-pago).
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? PaymentForm
+ {
+ get => TryGetValue("payment_form", out var value) ? (string?)value! : default!;
+ set => this["payment_form"] = value;
+ }
+
+ ///
+ /// Código del método de pago según el catálogo del SAT.
+ ///
+ /// - `PUE`: Pago en Una sola Exhibición
+ /// - `PPD`: Pago en Parcialidades o Diferido
+ /// Código del método de pago según el catálogo del SAT. Para facturas de Egreso,
+ /// este campo es opcional y el único valor permitido es `PUE` (Pago en Una sola Exhibición).
+ /// Valores: "PUE", "PPD".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? PaymentMethod
+ {
+ get => TryGetValue("payment_method", out var value) ? (string?)value! : default!;
+ set => this["payment_method"] = value;
+ }
+
+ ///
+ /// Si se omite o es null, se utiliza el uso configurado en el cliente; si no tiene uno, se utiliza G03. Para clientes extranjeros o con RFC genérico se utiliza S01, incluso si se envía otro uso válido del catálogo.
+ ///
+ /// Código de Uso CFDI según el catálogo del SAT. Puedes ver los códigos
+ /// en [esta tabla](https://docs.facturapi.io/api/#uso-cfdi), o utilizar las constantes incluidas en
+ /// nuestras librerías.
+ ///
+ /// En una factura global, el uso es `S01`.
+ /// Código de Uso CFDI según el catálogo del SAT. Puedes ver los códigos
+ /// en [esta tabla](https://docs.facturapi.io/api/#uso-cfdi), o utilizar las constantes incluidas en
+ /// nuestras librerías.
+ ///
+ /// Para factura global debe ingresarse la clave `S01`.
+ /// Código de Uso CFDI según el catálogo del SAT. Puedes ver los códigos en [esta tabla](https://docs.facturapi.io/api/#uso-cfdi), o utilizar las constantes incluidas en nuestras librerías.
+ /// Código de Uso CFDI según el catálogo del SAT. Puedes ver los códigos en
+ /// [esta tabla](https://docs.facturapi.io/api/#uso-cfdi), o utilizar las constantes incluidas en nuestras librerías.
+ /// Opcional.
+ /// Admite null.
+ ///
+ [JsonIgnore]
+ public string? Use
+ {
+ get => TryGetValue("use", out var value) ? (string?)value! : default!;
+ set => this["use"] = value;
+ }
+
+ ///
+ /// Código de la moneda, acorde al estándar [ISO 4217](https://es.wikipedia.org/wiki/ISO_4217).
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Currency
+ {
+ get => TryGetValue("currency", out var value) ? (string?)value! : default!;
+ set => this["currency"] = value;
+ }
+
+ ///
+ /// Tipo de cambio conforme a la moneda usada. Representa el número de pesos
+ /// mexicanos (MXN) que equivalen a una unidad de la divisa señalada en el atributo `currency`.
+ /// Tipo de cambio conforme a la moneda usada. Representa el número de pesos mexicanos (MXN) que equivalen a una unidad de la divisa señalada en el atributo `currency`.
+ /// Tipo de cambio conforme a la moneda usada. Representa el número de pesos mexicanos
+ /// (MXN) que equivalen a una unidad de la divisa señalada en el atributo `currency`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public decimal? Exchange
+ {
+ get => TryGetValue("exchange", out var value) ? (decimal?)value! : default!;
+ set => this["exchange"] = value;
+ }
+
+ ///
+ /// Condiciones de pago
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Conditions
+ {
+ get => TryGetValue("conditions", out var value) ? (string?)value! : default!;
+ set => this["conditions"] = value;
+ }
+
+ ///
+ /// Documentos relacionados con la factura.
+ /// Documentos relacionados con la nota de crédito.
+ /// Documentos relacionados con el comprobante.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? RelatedDocuments
+ {
+ get => TryGetValue("related_documents", out var value) ? (List?)value! : default!;
+ set => this["related_documents"] = value;
+ }
+
+ ///
+ /// Información del periodo que abarca una factura global. En una factura de ingreso, este objeto es obligatorio cuando el receptor tiene `tax_id=XAXX010101000` y `legal_name=PUBLICO EN GENERAL`. Incluye periodicity, months y year.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public InvoiceCreateInputGlobal? Global
+ {
+ get => TryGetValue("global", out var value) ? (InvoiceCreateInputGlobal?)value! : default!;
+ set => this["global"] = value;
+ }
+
+ ///
+ /// Indica si el comprobante ampara una operación de exportación.
+ ///
+ /// - `01`: No aplica
+ /// - `02`: Definitiva con clave A1
+ /// - `03`: Temporal
+ /// - `04`: Definitiva con clave distinta a A1 o cuando no existe enajenación en términos del CFF
+ /// Valores: "01", "04", "02", "03".
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public string? Export
+ {
+ get => TryGetValue("export", out var value) ? (string?)value! : default!;
+ set => this["export"] = value;
+ }
+
+ ///
+ /// Complementos a incluir en la factura. Puedes incluir cualquier complemento en la
+ /// factura si tú mismo construyes el nodo XML del complemento y usas el tipo `custom`.
+ /// Es necesario agregar la información del complemento al PDF por separado usando el
+ /// parámetro `pdf_custom_section`.
+ /// Complementos a incluir en el comprobante. Puedes incluir cualquier
+ /// complemento en el comprobante si tú mismo construyes el nodo XML del
+ /// complemento y usas el tipo `custom`. Es necesario agregar la información
+ /// del complemento al PDF por separado usando el parámetro `pdf_custom_section`.
+ /// Complementos a incluir en la factura.
+ /// Complementos a incluir en el comprobante. Puedes incluir cualquier complemento en
+ /// el comprobante si tú mismo construyes el nodo XML del complemento y usas el tipo
+ /// `custom`. Es necesario agregar la información del complemento al PDF por separado
+ /// usando el parámetro `pdf_custom_section`.
+ /// Opcional.
+ ///
+ [JsonIgnore]
+ public List? Complements
+ {
+ get => TryGetValue("complements", out var value) ? (List