diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..5473423 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,5 @@ +{ + "permissions": { + "defaultMode": "bypassPermissions" + } +} diff --git a/.gitignore b/.gitignore index 5ff6309..c27e327 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,5 @@ build/ .vscode/ ### Mac OS ### -.DS_Store \ No newline at end of file +.DS_Store +.fake \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index 3877e65..2f1c175 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,31 +4,36 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## Project Overview -Official Java SDK for FiscalAPI - a Mexican CFDI electronic invoicing service (SAT integration). Provides CFDI 4.0 invoicing, certificate management, mass downloads, payroll, and SAT catalog queries. +Official Java SDK for FiscalAPI - a Mexican CFDI electronic invoicing service (SAT integration). Provides CFDI 4.0 invoicing, certificate management, mass downloads, payroll, and SAT catalog queries. Published to Maven Central as `com.fiscalapi:fiscalapi`. ## Build Commands ```bash mvn clean compile # Compile -mvn test # Run tests mvn package # Create JAR -mvn clean deploy -Prelease # Deploy to Maven Central (requires GPG) +mvn clean deploy -Prelease # Deploy to Maven Central (requires GPG + settings.xml credentials) ``` +No unit tests exist in this project currently. No linting or formatting tools are configured. + ## Architecture ### Entry Point -`FiscalApiClient.create(FiscalApiSettings)` - Factory method creating the main client with all services. +`FiscalApiClient.create(FiscalApiSettings)` - Factory method creating the main client with all 10 services. ### Service Layer Pattern ``` IFiscalApiClient (facade) - ├── getInvoiceService() → IInvoiceService extends IFiscalApiService - ├── getPersonService() → IPersonService extends IFiscalApiService - ├── getProductService() → IProductService extends IFiscalApiService - ├── getTaxFileService() → ITaxFileService extends IFiscalApiService - ├── getCatalogService() → ICatalogService extends IFiscalApiService - └── ... (other services) + ├── getInvoiceService() → IInvoiceService (cancel, status, getPdf, send, getXml) + ├── getPersonService() → IPersonService + ├── getProductService() → IProductService + ├── getTaxFileService() → ITaxFileService (getDefaultReferences, getDefaultValues) + ├── getCatalogService() → ICatalogService (custom search/query) + ├── getApiKeyService() → IApiKeyService + ├── getStampService() → IStampService (transfer, withdraw) + ├── getDownloadCatalogService() → IDownloadCatalogService + ├── getDownloadRuleService() → IDownloadRuleService + └── getDownloadRequestService() → IDownloadRequestService (cancel, retry, delete) ``` ### Generic CRUD Base @@ -43,20 +48,39 @@ Subclasses must implement `getTypeParameterClass()` to return the entity type fo ### DTO Hierarchy ``` -SerializableDto → AuditableDto (createdAt, updatedAt) → BaseDto (id) +SerializableDto (toString() returns pretty-printed JSON) + → AuditableDto (createdAt, updatedAt: LocalDateTime) + → BaseDto (id: String) ``` All models extend `BaseDto`. Responses wrapped in `ApiResponse`. ### HTTP Layer -- `OkHttpClientFactory` - Creates/caches OkHttpClient instances with auth headers (X-API-KEY, X-TENANT-KEY, X-API-VERSION, X-TIMEZONE) -- `FiscalApiHttpClient` - Wraps OkHttp with Jackson, handles request/response logging in debug mode +- `OkHttpClientFactory` - Creates/caches OkHttpClient instances with auth headers (X-API-KEY, X-TENANT-KEY, X-API-VERSION, X-TIMEZONE). Default timezone: America/Mexico_City. +- `FiscalApiHttpClient` - Wraps OkHttp with Jackson. ObjectMapper configured with: + - `JavaTimeModule` (LocalDateTime/ZonedDateTime support) + - `FAIL_ON_UNKNOWN_PROPERTIES = false` + - `WRITE_BIGDECIMAL_AS_PLAIN = true` + - Non-null serialization inclusion + - Custom `BigDecimalSerializer` in `serialization/` (avoids scientific notation) ### Key Packages -- `abstractions/` - Service interfaces -- `common/` - ApiResponse, PagedList, settings +- `abstractions/` - Service interfaces (all prefixed with `I`) +- `common/` - ApiResponse, PagedList, FiscalApiSettings, BaseDto hierarchy - `http/` - HTTP client implementation -- `models/` - All DTOs (invoicing/, downloading/ subpackages) +- `models/` - All DTOs + - `models/invoicing/` - Invoice, InvoiceItem, InvoiceIssuer, InvoiceRecipient, etc. + - `models/invoicing/payroll/` - 13 payroll CFDI types (Payroll, EmployeeData, PayrollEarning, etc.) + - `models/invoicing/paymentComplement/` - Payment complement models + - `models/invoicing/localTaxes/` - Local tax models + - `models/downloading/` - Mass download models - `services/` - Service implementations +- `serialization/` - Custom Jackson serializers +- `examples/` - Usage examples (payroll, local taxes, stamps) + +### Two Modes of Operation +The SDK supports two invoicing modes (see examples/): +- **By references** - Pass entity IDs, server resolves full data +- **By values** - Pass complete entity data inline ## Configuration @@ -65,18 +89,26 @@ FiscalApiSettings settings = new FiscalApiSettings(); settings.setApiUrl("https://test.fiscalapi.com"); // or https://live.fiscalapi.com settings.setApiKey("sk_test_..."); settings.setTenant("..."); -settings.setDebugMode(true); // Logs requests/responses +settings.setDebugMode(true); // Logs requests/responses to console +// settings.setApiVersion("v4"); // default +// settings.setTimeZone("America/Mexico_City"); // default FiscalApiClient client = FiscalApiClient.create(settings); ``` +Spring Boot integration: Use `@Value` properties + `@Bean` registration (see README.md for full pattern). + ## API Endpoint Pattern `{apiUrl}/api/{apiVersion}/{resource}/{id?}/{action?}` Example: `POST api/v4/invoices`, `GET api/v4/invoices/{id}?details=true` +## Deployment + +GitHub Actions workflow (`.github/workflows/deploy.yml`): manual dispatch, builds with Java 8 Temurin, signs with GPG, deploys to Maven Central. + ## Dependencies - OkHttp3 4.12.0 (HTTP) -- Jackson 2.14.2 (JSON) +- Jackson 2.14.2 + JSR310 module (JSON + Java 8 time) - Java 8+ (source/target) diff --git a/pom.xml b/pom.xml index 758329d..9cede2f 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.fiscalapi fiscalapi - 4.0.360 + 4.0.384 ${project.groupId}:${project.artifactId} Genera facturas CFDI válidas ante el SAT consumiendo la API de https://www.fiscalapi.com https://www.fiscalapi.com diff --git a/src/main/java/com/fiscalapi/examples/EjemplosCartaPorteReferencias.java b/src/main/java/com/fiscalapi/examples/EjemplosCartaPorteReferencias.java new file mode 100644 index 0000000..3233323 --- /dev/null +++ b/src/main/java/com/fiscalapi/examples/EjemplosCartaPorteReferencias.java @@ -0,0 +1,3817 @@ +package com.fiscalapi.examples; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +import com.fiscalapi.OptUtil; +import com.fiscalapi.common.ApiResponse; +import com.fiscalapi.common.FiscalApiSettings; +import com.fiscalapi.models.invoicing.Complement; +import com.fiscalapi.models.invoicing.Invoice; +import com.fiscalapi.models.invoicing.InvoiceIssuer; +import com.fiscalapi.models.invoicing.InvoiceItem; +import com.fiscalapi.models.invoicing.InvoiceRecipient; +import com.fiscalapi.models.invoicing.ItemTax; +import com.fiscalapi.models.invoicing.TaxCredential; +import com.fiscalapi.models.invoicing.billOfLading.Autotransporte; +import com.fiscalapi.models.invoicing.billOfLading.CantidadTransporta; +import com.fiscalapi.models.invoicing.billOfLading.Carro; +import com.fiscalapi.models.invoicing.billOfLading.CartaPorte; +import com.fiscalapi.models.invoicing.billOfLading.ContenedorMaritimo; +import com.fiscalapi.models.invoicing.billOfLading.DerechoDePaso; +import com.fiscalapi.models.invoicing.billOfLading.DocumentoAduanero; +import com.fiscalapi.models.invoicing.billOfLading.UbicacionDomicilio; +import com.fiscalapi.models.invoicing.billOfLading.TipoFiguraDomicilio; +import com.fiscalapi.models.invoicing.billOfLading.Mercancia; +import com.fiscalapi.models.invoicing.billOfLading.RegimenAduanero; +import com.fiscalapi.models.invoicing.billOfLading.Remolque; +import com.fiscalapi.models.invoicing.billOfLading.RemolqueCCP; +import com.fiscalapi.models.invoicing.billOfLading.TipoFigura; +import com.fiscalapi.models.invoicing.billOfLading.ParteTransporte; +import com.fiscalapi.models.invoicing.billOfLading.DetalleMercancia; +import com.fiscalapi.models.invoicing.billOfLading.TransporteAereo; +import com.fiscalapi.models.invoicing.billOfLading.TransporteFerroviario; +import com.fiscalapi.models.invoicing.billOfLading.TransporteMaritimo; +import com.fiscalapi.models.invoicing.billOfLading.Ubicacion; +import com.fiscalapi.services.FiscalApiClient; + +public class EjemplosCartaPorteReferencias { + + final String escuelaKemperUrgateBase64Cer = "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE="; + final String escuelaKemperUrgateBase64Key = "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo="; + final String password = "12345678a"; + + public void main(String[] args) { + FiscalApiSettings settings = new FiscalApiSettings(); + settings.setDebugMode(true); + settings.setApiUrl("https://test.fiscalapi.com"); + settings.setApiKey("api_key"); + settings.setTenant("tenant_id"); + + System.out.println("\n===== Ejemplo 1: Factura ingreso autotransporte nacional (sin impuestos) ====="); + facturaIngresoAutoTransporteNacional(settings); + + System.out.println("\n===== Ejemplo 2: Factura ingreso autotransporte nacional con impuestos ====="); + facturaIngresoAutoTransporteNacionalConImpuestos(settings); + + System.out.println("\n===== Ejemplo 3: Factura ingreso autotransporte extranjero (salida) ====="); + facturaIngresoAutoTransporteExtranjero(settings); + + System.out.println("\n===== Ejemplo 4: Factura ingreso autotransporte internacional aduanero (entrada con pedimento) ====="); + facturaIngresoAutoTransporteInternacionalAduanero(settings); + + System.out.println("\n===== Ejemplo 5: Factura ingreso transporte ferroviario nacional ====="); + facturaIngresoTransporteFerroviarioNacional(settings); + + System.out.println("\n===== Ejemplo 6: Factura ingreso transporte ferroviario extranjero ====="); + facturaIngresoTransporteFerroviarioExtranjero(settings); + + System.out.println("\n===== Ejemplo 7: Factura ingreso transporte ferroviario internacional aduanero (entrada, IMD) ====="); + facturaIngresoTransporteFerroviarioInternacionalAduanero(settings); + + System.out.println("\n===== Ejemplo 8: Factura ingreso transporte aereo nacional ====="); + facturaIngresoTransporteAereoNacional(settings); + + System.out.println("\n===== Ejemplo 9: Factura ingreso transporte aereo extranjero (salida) ====="); + facturaIngresoTransporteAereoExtranjero(settings); + + System.out.println("\n===== Ejemplo 10: Factura ingreso transporte aereo internacional aduanero (entrada, IMD) ====="); + facturaIngresoTransporteAereoInternacionalAduanero(settings); + + System.out.println("\n===== Ejemplo 11: Factura ingreso transporte maritimo nacional ====="); + facturaIngresoTransporteMaritimoNacional(settings); + + System.out.println("\n===== Ejemplo 12: Factura ingreso transporte maritimo extranjero (salida) ====="); + facturaIngresoTransporteMaritimoExtranjero(settings); + + System.out.println("\n===== Ejemplo 13: Factura ingreso transporte maritimo internacional aduanero (entrada, IMD x2) ====="); + facturaIngresoTransporteMaritimoInternacionalAduanero(settings); + + System.out.println("\n===== Ejemplo 14: Factura traslado autotransporte nacional ====="); + facturaTrasladoAutoTransporteNacional(settings); + + System.out.println("\n===== Ejemplo 15: Factura traslado autotransporte extranjero (salida, EXD) ====="); + facturaTrasladoAutoTransporteExtranjero(settings); + + System.out.println("\n===== Ejemplo 16: Factura traslado autotransporte internacional aduanero (entrada, IMD) ====="); + facturaTrasladoAutoTransporteInternacionalAduanero(settings); + + System.out.println("\n===== Ejemplo 17: Factura traslado transporte ferroviario nacional ====="); + facturaTrasladoTransporteFerroviarioNacional(settings); + + System.out.println("\n===== Ejemplo 18: Factura traslado transporte ferroviario extranjero ====="); + facturaTrasladoTransporteFerroviarioExtranjero(settings); + + System.out.println("\n===== Ejemplo 19: Factura traslado transporte ferroviario internacional aduanero (entrada, IMD) ====="); + facturaTrasladoTransporteFerroviarioInternacionalAduanero(settings); + + System.out.println("\n===== Ejemplo 20: Factura traslado transporte aereo nacional ====="); + facturaTrasladoTransporteAereoNacional(settings); + + System.out.println("\n===== Ejemplo 21: Factura traslado transporte aereo extranjero (salida, EXD) ====="); + facturaTrasladoTransporteAereoExtranjero(settings); + + System.out.println("\n===== Ejemplo 22: Factura traslado transporte aereo internacional aduanero (entrada, IMD) ====="); + facturaTrasladoTransporteAereoInternacionalAduanero(settings); + + System.out.println("\n===== Ejemplo 23: Factura traslado transporte maritimo nacional ====="); + facturaTrasladoTransporteMaritimoNacional(settings); + + System.out.println("\n===== Ejemplo 24: Factura traslado transporte maritimo extranjero (salida, EXD) ====="); + facturaTrasladoTransporteMaritimoExtranjero(settings); + + System.out.println("\n===== Ejemplo 25: Factura traslado transporte maritimo internacional aduanero (entrada, IMD x2) ====="); + facturaTrasladoTransporteMaritimoInternacionalAduanero(settings); + } + + // Factura ingreso autotransporte nacional (sin impuestos) + private void facturaIngresoAutoTransporteNacional(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + LocalDateTime currentDate = OptUtil.parseLocalDateTime("2026-04-30T19:00:00"); + + // Issuer + InvoiceIssuer issuer = new InvoiceIssuer(); + issuer.setId("0e82a655-5f0c-4e07-abab-8f322e4123ef"); + + // Recipient + InvoiceRecipient recipient = new InvoiceRecipient(); + recipient.setId("0e82a655-5f0c-4e07-abab-8f322e4123ef"); + + // Items + InvoiceItem item = new InvoiceItem(); + item.setItemCode("78101800"); + item.setItemSku("UT421511"); + item.setQuantity(new BigDecimal("1")); + item.setUnitOfMeasurementCode("H87"); + item.setDescription("Transporte de carga por carretera"); + item.setUnitPrice(new BigDecimal("100.00")); + item.setDiscount(new BigDecimal("0")); + item.setTaxObjectCode("01"); + item.setItemTaxes(new ArrayList<>()); + List items = new ArrayList<>(); + items.add(item); + + // Ubicacion Origen + UbicacionDomicilio domicilioOrigen = new UbicacionDomicilio(); + domicilioOrigen.setCalle("Calle1"); + domicilioOrigen.setNumeroExterior("211"); + domicilioOrigen.setNumeroInterior("212"); + domicilioOrigen.setColoniaId("1957"); + domicilioOrigen.setLocalidadId("13"); + domicilioOrigen.setReferencia("casa blanca"); + domicilioOrigen.setMunicipioId("011"); + domicilioOrigen.setEstadoId("CMX"); + domicilioOrigen.setPaisId("MEX"); + domicilioOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("URE180429TM6"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setDomicilio(domicilioOrigen); + + // Ubicacion Destino + UbicacionDomicilio domicilioDestino = new UbicacionDomicilio(); + domicilioDestino.setCalle("Calle2"); + domicilioDestino.setNumeroExterior("214"); + domicilioDestino.setNumeroInterior("215"); + domicilioDestino.setColoniaId("0347"); + domicilioDestino.setLocalidadId("23"); + domicilioDestino.setReferencia("casa negra"); + domicilioDestino.setMunicipioId("004"); + domicilioDestino.setEstadoId("COA"); + domicilioDestino.setPaisId("MEX"); + domicilioDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("URE180429TM6"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDistanciaRecorrida(new BigDecimal("1")); + destino.setDomicilio(domicilioDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia + CantidadTransporta cantidadTransporta = new CantidadTransporta(); + cantidadTransporta.setCantidad(new BigDecimal("1")); + cantidadTransporta.setIdOrigen("OR101010"); + cantidadTransporta.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(cantidadTransporta); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2003-04-02T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setFormaFarmaceuticaId("01"); + mercancia.setCondicionesEspTranspId("01"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setFraccionArancelariaId("6309000100"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // Autotransporte + Remolque remolque = new Remolque(); + remolque.setSubTipoRemId("CTR004"); + remolque.setPlaca("VL45K98"); + List remolques = new ArrayList<>(); + remolques.add(remolque); + + Autotransporte autotransporte = new Autotransporte(); + autotransporte.setPermSCTId("TPAF01"); + autotransporte.setNumPermisoSCT("NumPermisoSCT1"); + autotransporte.setConfigVehicularId("VL"); + autotransporte.setPesoBrutoVehicular(new BigDecimal("1")); + autotransporte.setPlacaVM("plac892"); + autotransporte.setAnioModeloVM(2020); + autotransporte.setAseguraRespCivil("AseguraRespCivil"); + autotransporte.setPolizaRespCivil("123456789"); + autotransporte.setRemolques(remolques); + + // TipoFigura + TipoFiguraDomicilio domicilioFigura = new TipoFiguraDomicilio(); + domicilioFigura.setCalle("Calle1"); + domicilioFigura.setNumeroExterior("NumeroExterior1"); + domicilioFigura.setNumeroInterior("NumeroInterior1"); + domicilioFigura.setColoniaId("Colonia1"); + domicilioFigura.setLocalidadId("Localidad1"); + domicilioFigura.setReferencia("Referencia1"); + domicilioFigura.setMunicipioId("Municipio1"); + domicilioFigura.setEstadoId("Estado1"); + domicilioFigura.setPaisId("AFG"); + domicilioFigura.setCodigoPostalId("CodigoPosta1"); + + TipoFigura tipoFigura = new TipoFigura(); + tipoFigura.setTipoFiguraId("01"); + tipoFigura.setRfcFigura("URE180429TM6"); + tipoFigura.setNumLicencia("NumLicencia1"); + tipoFigura.setNombreFigura("NombreFigura1"); + tipoFigura.setDomicilio(domicilioFigura); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(tipoFigura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setTotalDistRec(new BigDecimal("1")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setLogisticaInversaRecoleccionDevolucionId("Sí"); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setAutotransporte(autotransporte); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setPaymentFormCode("01"); + invoice.setPaymentMethodCode("PUE"); + invoice.setCurrencyCode("MXN"); + invoice.setTypeCode("I"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("SerieCCP31"); + invoice.setDate(currentDate); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(issuer); + invoice.setRecipient(recipient); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse = client.getInvoiceService().create(invoice); + System.out.println(apiResponse); + } + + // Factura ingreso autotransporte nacional con impuestos + private void facturaIngresoAutoTransporteNacionalConImpuestos(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + LocalDateTime currentDate = OptUtil.parseLocalDateTime(LocalDateTime.now().toString()); + + // Issuer + InvoiceIssuer issuer = new InvoiceIssuer(); + issuer.setId("0e82a655-5f0c-4e07-abab-8f322e4123ef"); + + // Recipient + InvoiceRecipient recipient = new InvoiceRecipient(); + recipient.setId("0e82a655-5f0c-4e07-abab-8f322e4123ef"); + + // Items + List itemTaxes = new ArrayList<>(); + ItemTax ivaTraslado = new ItemTax(); + ivaTraslado.setTaxCode("002"); + ivaTraslado.setTaxTypeCode("Tasa"); + ivaTraslado.setTaxRate(new BigDecimal("0.160000")); + ivaTraslado.setTaxFlagCode("T"); + itemTaxes.add(ivaTraslado); + ItemTax ivaRetencion = new ItemTax(); + ivaRetencion.setTaxCode("002"); + ivaRetencion.setTaxTypeCode("Tasa"); + ivaRetencion.setTaxRate(new BigDecimal("0.040000")); + ivaRetencion.setTaxFlagCode("R"); + itemTaxes.add(ivaRetencion); + + InvoiceItem item = new InvoiceItem(); + item.setItemCode("78101800"); + item.setItemSku("UT421511"); + item.setQuantity(new BigDecimal("1")); + item.setUnitOfMeasurementCode("H87"); + item.setDescription("Transporte de carga por carretera"); + item.setUnitPrice(new BigDecimal("26232.75")); + item.setDiscount(new BigDecimal("0")); + item.setTaxObjectCode("02"); + item.setItemTaxes(itemTaxes); + List items = new ArrayList<>(); + items.add(item); + + // Ubicacion Origen + UbicacionDomicilio domicilioOrigen = new UbicacionDomicilio(); + domicilioOrigen.setCalle("Calle1"); + domicilioOrigen.setNumeroExterior("211"); + domicilioOrigen.setNumeroInterior("212"); + domicilioOrigen.setColoniaId("1957"); + domicilioOrigen.setLocalidadId("13"); + domicilioOrigen.setReferencia("casa blanca"); + domicilioOrigen.setMunicipioId("011"); + domicilioOrigen.setEstadoId("CMX"); + domicilioOrigen.setPaisId("MEX"); + domicilioOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("URE180429TM6"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setDomicilio(domicilioOrigen); + + // Ubicacion Destino + UbicacionDomicilio domicilioDestino = new UbicacionDomicilio(); + domicilioDestino.setCalle("Calle2"); + domicilioDestino.setNumeroExterior("214"); + domicilioDestino.setNumeroInterior("215"); + domicilioDestino.setColoniaId("0347"); + domicilioDestino.setLocalidadId("23"); + domicilioDestino.setReferencia("casa negra"); + domicilioDestino.setMunicipioId("004"); + domicilioDestino.setEstadoId("COA"); + domicilioDestino.setPaisId("MEX"); + domicilioDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("URE180429TM6"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDistanciaRecorrida(new BigDecimal("1")); + destino.setDomicilio(domicilioDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia + CantidadTransporta cantidadTransporta = new CantidadTransporta(); + cantidadTransporta.setCantidad(new BigDecimal("1")); + cantidadTransporta.setIdOrigen("OR101010"); + cantidadTransporta.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(cantidadTransporta); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2003-04-02T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setFormaFarmaceuticaId("01"); + mercancia.setCondicionesEspTranspId("01"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setFraccionArancelariaId("6309000100"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // Autotransporte + Remolque remolque = new Remolque(); + remolque.setSubTipoRemId("CTR004"); + remolque.setPlaca("VL45K98"); + List remolques = new ArrayList<>(); + remolques.add(remolque); + + Autotransporte autotransporte = new Autotransporte(); + autotransporte.setPermSCTId("TPAF01"); + autotransporte.setNumPermisoSCT("NumPermisoSCT1"); + autotransporte.setConfigVehicularId("VL"); + autotransporte.setPesoBrutoVehicular(new BigDecimal("1")); + autotransporte.setPlacaVM("plac892"); + autotransporte.setAnioModeloVM(2020); + autotransporte.setAseguraRespCivil("AseguraRespCivil"); + autotransporte.setPolizaRespCivil("123456789"); + autotransporte.setRemolques(remolques); + + // TipoFigura + TipoFiguraDomicilio domicilioFigura = new TipoFiguraDomicilio(); + domicilioFigura.setCalle("Calle1"); + domicilioFigura.setNumeroExterior("NumeroExterior1"); + domicilioFigura.setNumeroInterior("NumeroInterior1"); + domicilioFigura.setColoniaId("Colonia1"); + domicilioFigura.setLocalidadId("Localidad1"); + domicilioFigura.setReferencia("Referencia1"); + domicilioFigura.setMunicipioId("Municipio1"); + domicilioFigura.setEstadoId("Estado1"); + domicilioFigura.setPaisId("AFG"); + domicilioFigura.setCodigoPostalId("CodigoPosta1"); + + TipoFigura tipoFigura = new TipoFigura(); + tipoFigura.setTipoFiguraId("01"); + tipoFigura.setRfcFigura("URE180429TM6"); + tipoFigura.setNumLicencia("NumLicencia1"); + tipoFigura.setNombreFigura("NombreFigura1"); + tipoFigura.setDomicilio(domicilioFigura); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(tipoFigura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setTotalDistRec(new BigDecimal("1")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setLogisticaInversaRecoleccionDevolucionId("Sí"); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setAutotransporte(autotransporte); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setPaymentFormCode("01"); + invoice.setPaymentMethodCode("PUE"); + invoice.setCurrencyCode("MXN"); + invoice.setTypeCode("I"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("SerieCCP31"); + invoice.setDate(currentDate); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(issuer); + invoice.setRecipient(recipient); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse = client.getInvoiceService().create(invoice); + System.out.println(apiResponse); + } + + // Factura ingreso autotransporte extranjero (salida) + private void facturaIngresoAutoTransporteExtranjero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + LocalDateTime currentDate = OptUtil.parseLocalDateTime(LocalDateTime.now().toString()); + + // Issuer + InvoiceIssuer issuer = new InvoiceIssuer(); + issuer.setId("0e82a655-5f0c-4e07-abab-8f322e4123ef"); + + // Recipient + InvoiceRecipient recipient = new InvoiceRecipient(); + recipient.setId("0e82a655-5f0c-4e07-abab-8f322e4123ef"); + + // Items + InvoiceItem item = new InvoiceItem(); + item.setItemCode("78101800"); + item.setItemSku("UT421511"); + item.setQuantity(new BigDecimal("1")); + item.setUnitOfMeasurementCode("H87"); + item.setDescription("Transporte de carga por carretera"); + item.setUnitPrice(new BigDecimal("100.00")); + item.setDiscount(new BigDecimal("0")); + item.setTaxObjectCode("01"); + item.setItemTaxes(new ArrayList<>()); + List items = new ArrayList<>(); + items.add(item); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("EXD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (extranjero) + UbicacionDomicilio domicilioOrigen = new UbicacionDomicilio(); + domicilioOrigen.setCalle("ST"); + domicilioOrigen.setNumeroExterior("214"); + domicilioOrigen.setColoniaId("N/A"); + domicilioOrigen.setReferencia("WHITE HOUSE"); + domicilioOrigen.setMunicipioId("N/A"); + domicilioOrigen.setEstadoId("TX"); + domicilioOrigen.setPaisId("USA"); + domicilioOrigen.setCodigoPostalId("N/A"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("XEXX010101000"); + origen.setNumRegIdTrib("01010101"); + origen.setResidenciaFiscalId("USA"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + origen.setDomicilio(domicilioOrigen); + + // Ubicacion Destino (extranjero) + UbicacionDomicilio domicilioDestino = new UbicacionDomicilio(); + domicilioDestino.setCalle("ST"); + domicilioDestino.setNumeroExterior("214"); + domicilioDestino.setColoniaId("N/A"); + domicilioDestino.setReferencia("WHITE HOUSE"); + domicilioDestino.setMunicipioId("N/A"); + domicilioDestino.setEstadoId("TX"); + domicilioDestino.setPaisId("USA"); + domicilioDestino.setCodigoPostalId("N/A"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("XEXX010101000"); + destino.setNumRegIdTrib("01010101"); + destino.setResidenciaFiscalId("USA"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDistanciaRecorrida(new BigDecimal("1")); + destino.setDomicilio(domicilioDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia + CantidadTransporta cantidadTransporta = new CantidadTransporta(); + cantidadTransporta.setCantidad(new BigDecimal("1")); + cantidadTransporta.setIdOrigen("OR101010"); + cantidadTransporta.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(cantidadTransporta); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2003-04-02T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setFormaFarmaceuticaId("01"); + mercancia.setCondicionesEspTranspId("01"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setFraccionArancelariaId("6309000100"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // Autotransporte + Remolque remolque = new Remolque(); + remolque.setSubTipoRemId("CTR004"); + remolque.setPlaca("VL45K98"); + List remolques = new ArrayList<>(); + remolques.add(remolque); + + Autotransporte autotransporte = new Autotransporte(); + autotransporte.setPermSCTId("TPAF01"); + autotransporte.setNumPermisoSCT("NumPermisoSCT1"); + autotransporte.setConfigVehicularId("VL"); + autotransporte.setPesoBrutoVehicular(new BigDecimal("1")); + autotransporte.setPlacaVM("plac892"); + autotransporte.setAnioModeloVM(2020); + autotransporte.setAseguraRespCivil("AseguraRespCivil"); + autotransporte.setPolizaRespCivil("123456789"); + autotransporte.setRemolques(remolques); + + // TipoFigura + TipoFiguraDomicilio domicilioFigura = new TipoFiguraDomicilio(); + domicilioFigura.setCalle("ST"); + domicilioFigura.setNumeroExterior("214"); + domicilioFigura.setColoniaId("N/A"); + domicilioFigura.setReferencia("WHITE HOUSE"); + domicilioFigura.setMunicipioId("N/A"); + domicilioFigura.setEstadoId("TX"); + domicilioFigura.setPaisId("USA"); + domicilioFigura.setCodigoPostalId("N/A"); + + TipoFigura tipoFigura = new TipoFigura(); + tipoFigura.setTipoFiguraId("01"); + tipoFigura.setRfcFigura("EKU9003173C9"); + tipoFigura.setNumLicencia("NumLicencia1"); + tipoFigura.setNombreFigura("NombreFigura1"); + tipoFigura.setDomicilio(domicilioFigura); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(tipoFigura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Salida"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("01"); + cartaPorte.setTotalDistRec(new BigDecimal("1")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setLogisticaInversaRecoleccionDevolucionId("Sí"); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setAutotransporte(autotransporte); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setPaymentFormCode("01"); + invoice.setPaymentMethodCode("PUE"); + invoice.setCurrencyCode("MXN"); + invoice.setTypeCode("I"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("SerieCCP31"); + invoice.setDate(currentDate); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(issuer); + invoice.setRecipient(recipient); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse = client.getInvoiceService().create(invoice); + System.out.println(apiResponse); + } + + // Factura ingreso autotransporte internacional aduanero (entrada con pedimento) + private void facturaIngresoAutoTransporteInternacionalAduanero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + LocalDateTime currentDate = OptUtil.parseLocalDateTime(LocalDateTime.now().toString()); + + // Issuer + InvoiceIssuer issuer = new InvoiceIssuer(); + issuer.setId("0e82a655-5f0c-4e07-abab-8f322e4123ef"); + + // Recipient + InvoiceRecipient recipient = new InvoiceRecipient(); + recipient.setId("0e82a655-5f0c-4e07-abab-8f322e4123ef"); + + // Items + InvoiceItem item = new InvoiceItem(); + item.setItemCode("78101800"); + item.setItemSku("UT421511"); + item.setQuantity(new BigDecimal("1")); + item.setUnitOfMeasurementCode("H87"); + item.setDescription("Transporte de carga por carretera"); + item.setUnitPrice(new BigDecimal("100.00")); + item.setDiscount(new BigDecimal("0")); + item.setTaxObjectCode("01"); + item.setItemTaxes(new ArrayList<>()); + List items = new ArrayList<>(); + items.add(item); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("IMD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (extranjero) + UbicacionDomicilio domicilioOrigen = new UbicacionDomicilio(); + domicilioOrigen.setCalle("ST"); + domicilioOrigen.setNumeroExterior("214"); + domicilioOrigen.setColoniaId("N/A"); + domicilioOrigen.setReferencia("WHITE HOUSE"); + domicilioOrigen.setMunicipioId("N/A"); + domicilioOrigen.setEstadoId("TX"); + domicilioOrigen.setPaisId("USA"); + domicilioOrigen.setCodigoPostalId("N/A"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("XEXX010101000"); + origen.setNumRegIdTrib("01010101"); + origen.setResidenciaFiscalId("USA"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + origen.setDomicilio(domicilioOrigen); + + // Ubicacion Destino (extranjero) + UbicacionDomicilio domicilioDestino = new UbicacionDomicilio(); + domicilioDestino.setCalle("ST"); + domicilioDestino.setNumeroExterior("214"); + domicilioDestino.setColoniaId("N/A"); + domicilioDestino.setReferencia("WHITE HOUSE"); + domicilioDestino.setMunicipioId("N/A"); + domicilioDestino.setEstadoId("TX"); + domicilioDestino.setPaisId("USA"); + domicilioDestino.setCodigoPostalId("N/A"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("XEXX010101000"); + destino.setNumRegIdTrib("01010101"); + destino.setResidenciaFiscalId("USA"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDistanciaRecorrida(new BigDecimal("1")); + destino.setDomicilio(domicilioDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia con documentacion aduanera + DocumentoAduanero documentoAduanero = new DocumentoAduanero(); + documentoAduanero.setTipoDocumentoId("01"); + documentoAduanero.setNumPedimento("23 43 0472 8000448"); + documentoAduanero.setRfcImpo("EKU9003173C9"); + List documentosAduaneros = new ArrayList<>(); + documentosAduaneros.add(documentoAduanero); + + CantidadTransporta cantidadTransporta = new CantidadTransporta(); + cantidadTransporta.setCantidad(new BigDecimal("1")); + cantidadTransporta.setIdOrigen("OR101010"); + cantidadTransporta.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(cantidadTransporta); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2003-04-02T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setFormaFarmaceuticaId("01"); + mercancia.setCondicionesEspTranspId("01"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setFraccionArancelariaId("6309000100"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setDocumentacionAduanera(documentosAduaneros); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // Autotransporte + Remolque remolque = new Remolque(); + remolque.setSubTipoRemId("CTR004"); + remolque.setPlaca("VL45K98"); + List remolques = new ArrayList<>(); + remolques.add(remolque); + + Autotransporte autotransporte = new Autotransporte(); + autotransporte.setPermSCTId("TPAF01"); + autotransporte.setNumPermisoSCT("NumPermisoSCT1"); + autotransporte.setConfigVehicularId("VL"); + autotransporte.setPesoBrutoVehicular(new BigDecimal("1")); + autotransporte.setPlacaVM("plac892"); + autotransporte.setAnioModeloVM(2020); + autotransporte.setAseguraRespCivil("AseguraRespCivil"); + autotransporte.setPolizaRespCivil("123456789"); + autotransporte.setRemolques(remolques); + + // TipoFigura + TipoFiguraDomicilio domicilioFigura = new TipoFiguraDomicilio(); + domicilioFigura.setCalle("ST"); + domicilioFigura.setNumeroExterior("214"); + domicilioFigura.setColoniaId("N/A"); + domicilioFigura.setReferencia("WHITE HOUSE"); + domicilioFigura.setMunicipioId("N/A"); + domicilioFigura.setEstadoId("TX"); + domicilioFigura.setPaisId("USA"); + domicilioFigura.setCodigoPostalId("N/A"); + + TipoFigura tipoFigura = new TipoFigura(); + tipoFigura.setTipoFiguraId("01"); + tipoFigura.setRfcFigura("EKU9003173C9"); + tipoFigura.setNumLicencia("NumLicencia1"); + tipoFigura.setNombreFigura("NombreFigura1"); + tipoFigura.setDomicilio(domicilioFigura); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(tipoFigura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Entrada"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("01"); + cartaPorte.setTotalDistRec(new BigDecimal("1")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setLogisticaInversaRecoleccionDevolucionId("Sí"); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setAutotransporte(autotransporte); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setPaymentFormCode("01"); + invoice.setPaymentMethodCode("PUE"); + invoice.setCurrencyCode("MXN"); + invoice.setTypeCode("I"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("SerieCCP31"); + invoice.setDate(currentDate); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(issuer); + invoice.setRecipient(recipient); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse = client.getInvoiceService().create(invoice); + System.out.println(apiResponse); + } + + // Factura ingreso transporte ferroviario nacional + private void facturaIngresoTransporteFerroviarioNacional(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Ubicaciones: comunes + destino 5 (JM047/HUEHUETOCA, tipoEstacion "03", COA) + List ubicaciones = buildUbicacionesFerroviarioComunes(); + UbicacionDomicilio domDest5 = new UbicacionDomicilio(); + domDest5.setCalle("Calle2"); + domDest5.setNumeroExterior("214"); + domDest5.setNumeroInterior("215"); + domDest5.setColoniaId("0347"); + domDest5.setLocalidadId("23"); + domDest5.setReferencia("casa negra"); + domDest5.setMunicipioId("004"); + domDest5.setEstadoId("COA"); + domDest5.setPaisId("MEX"); + domDest5.setCodigoPostalId("25350"); + + Ubicacion dest5 = new Ubicacion(); + dest5.setTipoUbicacion("Destino"); + dest5.setIdUbicacion("DE202025"); + dest5.setRfcRemitenteDestinatario("EKU9003173C9"); + dest5.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest5.setNumEstacionId("JM047"); + dest5.setNombreEstacion("HUEHUETOCA"); + dest5.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T05:00:01")); + dest5.setTipoEstacionId("03"); + dest5.setDistanciaRecorrida(new BigDecimal("100.00")); + dest5.setDomicilio(domDest5); + ubicaciones.add(dest5); + + // Mercancia + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202025"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setTotalDistRec(new BigDecimal("500")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteFerroviario(buildTransporteFerroviario()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + ApiResponse apiResponse = client.getInvoiceService().create( + buildInvoice(buildIssuerEKU(), buildRecipientEKU(), items, complement)); + System.out.println(apiResponse); + } + + // Factura ingreso transporte ferroviario extranjero + private void facturaIngresoTransporteFerroviarioExtranjero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("EXD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicaciones: comunes + destino 5 (XEXX010101000, USA address) + List ubicaciones = buildUbicacionesFerroviarioComunes(); + UbicacionDomicilio domDest5 = new UbicacionDomicilio(); + domDest5.setCalle("ST"); + domDest5.setNumeroExterior("1234"); + domDest5.setColoniaId("1234"); + domDest5.setReferencia("WHITE HOUSE"); + domDest5.setMunicipioId("1234"); + domDest5.setEstadoId("TX"); + domDest5.setPaisId("USA"); + domDest5.setCodigoPostalId("12345"); + + Ubicacion dest5 = new Ubicacion(); + dest5.setTipoUbicacion("Destino"); + dest5.setIdUbicacion("DE202025"); + dest5.setRfcRemitenteDestinatario("XEXX010101000"); + dest5.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest5.setNumRegIdTrib("01010101"); + dest5.setResidenciaFiscalId("USA"); + dest5.setNumEstacionId("EF0001"); + dest5.setNombreEstacion("NombreEstacion"); + dest5.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T05:00:01")); + dest5.setDistanciaRecorrida(new BigDecimal("100.00")); + dest5.setDomicilio(domDest5); + ubicaciones.add(dest5); + + // Mercancia (with tipoMateria) + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202025"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Salida"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("04"); + cartaPorte.setTotalDistRec(new BigDecimal("500")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteFerroviario(buildTransporteFerroviario()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + ApiResponse apiResponse = client.getInvoiceService().create( + buildInvoice(buildIssuerEKU(), buildRecipientEKU(), items, complement)); + System.out.println(apiResponse); + } + + // Factura ingreso transporte ferroviario internacional aduanero (entrada, IMD) + private void facturaIngresoTransporteFerroviarioInternacionalAduanero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("IMD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicaciones: comunes + destino 5 (JM047/HUEHUETOCA, tipoEstacion "03", COA) + List ubicaciones = buildUbicacionesFerroviarioComunes(); + UbicacionDomicilio domDest5 = new UbicacionDomicilio(); + domDest5.setCalle("Calle2"); + domDest5.setNumeroExterior("214"); + domDest5.setNumeroInterior("215"); + domDest5.setColoniaId("0347"); + domDest5.setLocalidadId("23"); + domDest5.setReferencia("casa negra"); + domDest5.setMunicipioId("004"); + domDest5.setEstadoId("COA"); + domDest5.setPaisId("MEX"); + domDest5.setCodigoPostalId("25350"); + + Ubicacion dest5 = new Ubicacion(); + dest5.setTipoUbicacion("Destino"); + dest5.setIdUbicacion("DE202025"); + dest5.setRfcRemitenteDestinatario("EKU9003173C9"); + dest5.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest5.setNumEstacionId("JM047"); + dest5.setNombreEstacion("HUEHUETOCA"); + dest5.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T05:00:01")); + dest5.setTipoEstacionId("03"); + dest5.setDistanciaRecorrida(new BigDecimal("100.00")); + dest5.setDomicilio(domDest5); + ubicaciones.add(dest5); + + // Mercancia con documentacion aduanera + DocumentoAduanero doc = new DocumentoAduanero(); + doc.setTipoDocumentoId("01"); + doc.setNumPedimento("23 43 0472 8000448"); + doc.setRfcImpo("EKU9003173C9"); + List docs = new ArrayList<>(); + docs.add(doc); + + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202025"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setDocumentacionAduanera(docs); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Entrada"); + cartaPorte.setPaisOrigenDestinoId("AFG"); + cartaPorte.setViaEntradaSalidaId("04"); + cartaPorte.setTotalDistRec(new BigDecimal("500")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteFerroviario(buildTransporteFerroviario()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + ApiResponse apiResponse = client.getInvoiceService().create( + buildInvoice(buildIssuerEKU(), buildRecipientEKU(), items, complement)); + System.out.println(apiResponse); + } + + // Factura ingreso transporte aereo nacional + private void facturaIngresoTransporteAereoNacional(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Origen (aeropuerto EA0417, Loreto) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("EA0417"); + origen.setNombreEstacion("Loreto"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Destino (aeropuerto EA0418, Los Cabos) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumEstacionId("EA0418"); + destino.setNombreEstacion("Los Cabos"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setTipoEstacionId("03"); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia (with valorMercancia and monedaId) + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // TransporteAereo + TransporteAereo transporteAereo = new TransporteAereo(); + transporteAereo.setPermSCTId("TPAF01"); + transporteAereo.setNumPermisoSCT("Demo"); + transporteAereo.setMatriculaAeronave("61E5-WZ"); + transporteAereo.setNombreAseg("NombreAseg"); + transporteAereo.setNumPolizaSeguro("NumPolizaSeguro"); + transporteAereo.setNumeroGuia("acUbYlBVTmlzx"); + transporteAereo.setLugarContrato("LugarContrato"); + transporteAereo.setCodigoTransportistaId("CA001"); + transporteAereo.setRfcEmbarcador("EKU9003173C9"); + transporteAereo.setNombreEmbarcador("Embarcador"); + + // TipoFigura (tipoFiguraId "01", numLicencia, no partesTransporte) + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("a234567890"); + figura.setNombreFigura("NombreFigura"); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteAereo(transporteAereo); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + ApiResponse apiResponse = client.getInvoiceService().create( + buildInvoice(buildIssuerEKU(), buildRecipientEKU(), items, complement)); + System.out.println(apiResponse); + } + + // Factura ingreso transporte aereo extranjero (salida) + private void facturaIngresoTransporteAereoExtranjero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("EXD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (EA0417 / Loreto, COA/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle2"); + domOrigen.setNumeroExterior("214"); + domOrigen.setNumeroInterior("215"); + domOrigen.setColoniaId("0347"); + domOrigen.setLocalidadId("23"); + domOrigen.setReferencia("casa negra"); + domOrigen.setMunicipioId("004"); + domOrigen.setEstadoId("COA"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("25350"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("EA0417"); + origen.setNombreEstacion("Loreto"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (EA0143 / Phoenix-Mesa Gateway, USA/TX — foreign) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("ST"); + domDestino.setNumeroExterior("12344"); + domDestino.setColoniaId("N/A"); + domDestino.setReferencia("WHITE HOUSE"); + domDestino.setMunicipioId("N/A"); + domDestino.setEstadoId("TX"); + domDestino.setPaisId("USA"); + domDestino.setCodigoPostalId("12345"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("XEXX010101000"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario"); + destino.setNumRegIdTrib("01010101"); + destino.setResidenciaFiscalId("USA"); + destino.setNumEstacionId("EA0143"); + destino.setNombreEstacion("Phoenix-Mesa Gateway"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // TipoFigura (operador, licencia) + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("a234567890"); + figura.setNombreFigura("NombreFigura"); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Salida"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("03"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteAereo(buildTransporteAereoCP()); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + ApiResponse apiResponse = client.getInvoiceService().create( + buildInvoice(buildIssuerEKU(), buildRecipientEKU(), items, complement)); + System.out.println(apiResponse); + } + + // Factura ingreso transporte aereo internacional aduanero (entrada, IMD) + private void facturaIngresoTransporteAereoInternacionalAduanero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("IMD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (EA0417 / Loreto, CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("EA0417"); + origen.setNombreEstacion("Loreto"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (EA0418 / Los Cabos, COA/MEX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumEstacionId("EA0418"); + destino.setNombreEstacion("Los Cabos"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setTipoEstacionId("03"); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia con documentacion aduanera + DocumentoAduanero doc = new DocumentoAduanero(); + doc.setTipoDocumentoId("01"); + doc.setNumPedimento("23 43 0472 8000448"); + doc.setRfcImpo("EKU9003173C9"); + List docs = new ArrayList<>(); + docs.add(doc); + + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setDocumentacionAduanera(docs); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // TipoFigura (operador, licencia) + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("a234567890"); + figura.setNombreFigura("NombreFigura"); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Entrada"); + cartaPorte.setPaisOrigenDestinoId("AFG"); + cartaPorte.setViaEntradaSalidaId("03"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteAereo(buildTransporteAereoCP()); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + ApiResponse apiResponse = client.getInvoiceService().create( + buildInvoice(buildIssuerEKU(), buildRecipientEKU(), items, complement)); + System.out.println(apiResponse); + } + + // Factura ingreso transporte maritimo nacional + private void facturaIngresoTransporteMaritimoNacional(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Ubicacion Origen (PM001 / Rosarito, CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("PM001"); + origen.setNombreEstacion("Rosarito"); + origen.setNavegacionTraficoId("Altura"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (PM001 / Rosarito, COA/MEX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumEstacionId("PM001"); + destino.setNombreEstacion("Rosarito"); + destino.setNavegacionTraficoId("Altura"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setTipoEstacionId("03"); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia with detalleMercancia + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + DetalleMercancia detalle = new DetalleMercancia(); + detalle.setUnidadPesoMercId("Tu"); + detalle.setPesoBruto(new BigDecimal("1")); + detalle.setPesoNeto(new BigDecimal("1")); + detalle.setPesoTara(new BigDecimal("0.001")); + detalle.setNumPiezas(1); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setCantidadTransporta(cantTransList); + mercancia.setDetalleMercancia(detalle); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("1")); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteMaritimo(buildTransporteMaritimo()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + ApiResponse apiResponse = client.getInvoiceService().create( + buildInvoice(buildIssuerEKU(), buildRecipientEKU(), items, complement)); + System.out.println(apiResponse); + } + + // Factura ingreso transporte maritimo extranjero (salida) + private void facturaIngresoTransporteMaritimoExtranjero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("EXD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (PM001 / Rosarito, CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("PM001"); + origen.setNombreEstacion("Rosarito"); + origen.setNavegacionTraficoId("Altura"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (PM120 / NombreEstacion, USA/TX — foreign) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("ST"); + domDestino.setNumeroExterior("12345"); + domDestino.setColoniaId("N/A"); + domDestino.setReferencia("N/A"); + domDestino.setMunicipioId("N/A"); + domDestino.setEstadoId("TX"); + domDestino.setPaisId("USA"); + domDestino.setCodigoPostalId("12345"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("XEXX010101000"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumRegIdTrib("01010101"); + destino.setResidenciaFiscalId("USA"); + destino.setNumEstacionId("PM120"); + destino.setNombreEstacion("NombreEstacion"); + destino.setNavegacionTraficoId("Altura"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia with detalleMercancia and tipoMateria + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + DetalleMercancia detalle = new DetalleMercancia(); + detalle.setUnidadPesoMercId("Tu"); + detalle.setPesoBruto(new BigDecimal("1")); + detalle.setPesoNeto(new BigDecimal("1")); + detalle.setPesoTara(new BigDecimal("0.001")); + detalle.setNumPiezas(1); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setCantidadTransporta(cantTransList); + mercancia.setDetalleMercancia(detalle); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Salida"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("02"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("1")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteMaritimo(buildTransporteMaritimo()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + ApiResponse apiResponse = client.getInvoiceService().create( + buildInvoice(buildIssuerEKU(), buildRecipientEKU(), items, complement)); + System.out.println(apiResponse); + } + + // Factura ingreso transporte maritimo internacional aduanero (entrada, IMD x2) + private void facturaIngresoTransporteMaritimoInternacionalAduanero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero (two IMD entries) + RegimenAduanero regimenAduanero1 = new RegimenAduanero(); + regimenAduanero1.setRegimenAduaneroId("IMD"); + RegimenAduanero regimenAduanero2 = new RegimenAduanero(); + regimenAduanero2.setRegimenAduaneroId("IMD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero1); + regimenAduaneros.add(regimenAduanero2); + + // Ubicacion Origen (EA0417 / Loreto, navegacionTrafico "Altura", CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("EA0417"); + origen.setNombreEstacion("Loreto"); + origen.setNavegacionTraficoId("Altura"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (PM001 / Rosarito, navegacionTrafico "Altura", COA/MEX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumEstacionId("PM001"); + destino.setNombreEstacion("Rosarito"); + destino.setNavegacionTraficoId("Altura"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T04:00:01")); + destino.setTipoEstacionId("02"); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia with documentacionAduanera, detalleMercancia, tipoMateria, cvesTransporteId + DocumentoAduanero doc = new DocumentoAduanero(); + doc.setTipoDocumentoId("01"); + doc.setNumPedimento("23 43 0472 8000448"); + doc.setRfcImpo("EKU9003173C9"); + List docs = new ArrayList<>(); + docs.add(doc); + + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + ct.setCvesTransporteId("02"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + DetalleMercancia detalle = new DetalleMercancia(); + detalle.setUnidadPesoMercId("X1A"); + detalle.setPesoBruto(new BigDecimal("1.50")); + detalle.setPesoNeto(new BigDecimal("1.00")); + detalle.setPesoTara(new BigDecimal("0.50")); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2003-04-02T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setFormaFarmaceuticaId("01"); + mercancia.setCondicionesEspTranspId("01"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1.50")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setFraccionArancelariaId("6309000100"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setDocumentacionAduanera(docs); + mercancia.setCantidadTransporta(cantTransList); + mercancia.setDetalleMercancia(detalle); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // TipoFigura (tipoFiguraId "01", numLicencia, AFG domicilio) + TipoFiguraDomicilio domFigura = new TipoFiguraDomicilio(); + domFigura.setCalle("Calle1"); + domFigura.setNumeroExterior("NumeroExterior1"); + domFigura.setNumeroInterior("NumeroInterior1"); + domFigura.setColoniaId("Colonia1"); + domFigura.setLocalidadId("Localidad1"); + domFigura.setReferencia("Referencia1"); + domFigura.setMunicipioId("Municipio1"); + domFigura.setEstadoId("Estado1"); + domFigura.setPaisId("AFG"); + domFigura.setCodigoPostalId("CodigoPosta1"); + + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("NumLicencia1"); + figura.setNombreFigura("NombreFigura1"); + figura.setDomicilio(domFigura); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Entrada"); + cartaPorte.setPaisOrigenDestinoId("AFG"); + cartaPorte.setViaEntradaSalidaId("01"); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("1")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteMaritimo(buildTransporteMaritimo()); + cartaPorte.setTransporteAereo(buildTransporteAereoCP()); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setPaymentFormCode("01"); + invoice.setPaymentMethodCode("PUE"); + invoice.setCurrencyCode("MXN"); + invoice.setTypeCode("I"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("CP3.1"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse = client.getInvoiceService().create(invoice); + System.out.println(apiResponse); + } + + // Factura traslado autotransporte nacional + private void facturaTrasladoAutoTransporteNacional(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Ubicacion Origen (no station, CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (no station, COA/MEX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDistanciaRecorrida(new BigDecimal("1")); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia (simplified, fechaCaducidad 2028-01-01, no formaFarmaceutica/condiciones/fraccion) + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // Autotransporte + Remolque remolque = new Remolque(); + remolque.setSubTipoRemId("CTR004"); + remolque.setPlaca("VL45K98"); + List remolques = new ArrayList<>(); + remolques.add(remolque); + + Autotransporte autotransporte = new Autotransporte(); + autotransporte.setPermSCTId("TPAF01"); + autotransporte.setNumPermisoSCT("NumPermisoSCT1"); + autotransporte.setConfigVehicularId("VL"); + autotransporte.setPesoBrutoVehicular(new BigDecimal("1")); + autotransporte.setPlacaVM("plac892"); + autotransporte.setAnioModeloVM(2020); + autotransporte.setAseguraRespCivil("AseguraRespCivil"); + autotransporte.setPolizaRespCivil("123456789"); + autotransporte.setRemolques(remolques); + + // TipoFigura (no domicilio) + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("a234567890"); + figura.setNombreFigura("NombreFigura"); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setTotalDistRec(new BigDecimal("1")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setLogisticaInversaRecoleccionDevolucionId("Sí"); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setAutotransporte(autotransporte); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse = client.getInvoiceService().create(invoice); + System.out.println(apiResponse); + } + + // Factura traslado autotransporte extranjero (salida, EXD) + private void facturaTrasladoAutoTransporteExtranjero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("EXD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (foreign USA/TX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("ST"); + domOrigen.setNumeroExterior("214"); + domOrigen.setColoniaId("N/A"); + domOrigen.setReferencia("WHITE HOUSE"); + domOrigen.setMunicipioId("N/A"); + domOrigen.setEstadoId("TX"); + domOrigen.setPaisId("USA"); + domOrigen.setCodigoPostalId("N/A"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("XEXX010101000"); + origen.setNumRegIdTrib("01010101"); + origen.setResidenciaFiscalId("USA"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (foreign USA/TX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("ST"); + domDestino.setNumeroExterior("214"); + domDestino.setColoniaId("N/A"); + domDestino.setReferencia("WHITE HOUSE"); + domDestino.setMunicipioId("N/A"); + domDestino.setEstadoId("TX"); + domDestino.setPaisId("USA"); + domDestino.setCodigoPostalId("N/A"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("XEXX010101000"); + destino.setNumRegIdTrib("01010101"); + destino.setResidenciaFiscalId("USA"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDistanciaRecorrida(new BigDecimal("1")); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia (tipoMateria, fraccionArancelaria, no detalleMercancia, no documentacionAduanera) + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2003-04-02T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setFormaFarmaceuticaId("01"); + mercancia.setCondicionesEspTranspId("01"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setFraccionArancelariaId("6309000100"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // Autotransporte + Remolque remolque = new Remolque(); + remolque.setSubTipoRemId("CTR004"); + remolque.setPlaca("VL45K98"); + List remolques = new ArrayList<>(); + remolques.add(remolque); + + Autotransporte autotransporte = new Autotransporte(); + autotransporte.setPermSCTId("TPAF01"); + autotransporte.setNumPermisoSCT("NumPermisoSCT1"); + autotransporte.setConfigVehicularId("VL"); + autotransporte.setPesoBrutoVehicular(new BigDecimal("1")); + autotransporte.setPlacaVM("plac892"); + autotransporte.setAnioModeloVM(2020); + autotransporte.setAseguraRespCivil("AseguraRespCivil"); + autotransporte.setPolizaRespCivil("123456789"); + autotransporte.setRemolques(remolques); + + // TipoFigura with USA domicilio + TipoFiguraDomicilio domFigura = new TipoFiguraDomicilio(); + domFigura.setCalle("ST"); + domFigura.setNumeroExterior("214"); + domFigura.setColoniaId("N/A"); + domFigura.setReferencia("WHITE HOUSE"); + domFigura.setMunicipioId("N/A"); + domFigura.setEstadoId("TX"); + domFigura.setPaisId("USA"); + domFigura.setCodigoPostalId("N/A"); + + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("NumLicencia1"); + figura.setNombreFigura("NombreFigura1"); + figura.setDomicilio(domFigura); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Salida"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("01"); + cartaPorte.setTotalDistRec(new BigDecimal("1")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setLogisticaInversaRecoleccionDevolucionId("Sí"); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setAutotransporte(autotransporte); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("SerieCCP31"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse = client.getInvoiceService().create(invoice); + System.out.println(apiResponse); + } + + // Factura traslado autotransporte internacional aduanero (entrada, IMD) + private void facturaTrasladoAutoTransporteInternacionalAduanero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("IMD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (foreign USA/TX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("ST"); + domOrigen.setNumeroExterior("214"); + domOrigen.setColoniaId("N/A"); + domOrigen.setReferencia("WHITE HOUSE"); + domOrigen.setMunicipioId("N/A"); + domOrigen.setEstadoId("TX"); + domOrigen.setPaisId("USA"); + domOrigen.setCodigoPostalId("N/A"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("XEXX010101000"); + origen.setNumRegIdTrib("01010101"); + origen.setResidenciaFiscalId("USA"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (foreign USA/TX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("ST"); + domDestino.setNumeroExterior("214"); + domDestino.setColoniaId("N/A"); + domDestino.setReferencia("WHITE HOUSE"); + domDestino.setMunicipioId("N/A"); + domDestino.setEstadoId("TX"); + domDestino.setPaisId("USA"); + domDestino.setCodigoPostalId("N/A"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("XEXX010101000"); + destino.setNumRegIdTrib("01010101"); + destino.setResidenciaFiscalId("USA"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDistanciaRecorrida(new BigDecimal("1")); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia with documentacionAduanera, tipoMateria, fraccionArancelaria + DocumentoAduanero doc = new DocumentoAduanero(); + doc.setTipoDocumentoId("01"); + doc.setNumPedimento("23 43 0472 8000448"); + doc.setRfcImpo("EKU9003173C9"); + List docs = new ArrayList<>(); + docs.add(doc); + + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2003-04-02T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setFormaFarmaceuticaId("01"); + mercancia.setCondicionesEspTranspId("01"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setFraccionArancelariaId("6309000100"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setDocumentacionAduanera(docs); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // Autotransporte + Remolque remolque = new Remolque(); + remolque.setSubTipoRemId("CTR004"); + remolque.setPlaca("VL45K98"); + List remolques = new ArrayList<>(); + remolques.add(remolque); + + Autotransporte autotransporte = new Autotransporte(); + autotransporte.setPermSCTId("TPAF01"); + autotransporte.setNumPermisoSCT("NumPermisoSCT1"); + autotransporte.setConfigVehicularId("VL"); + autotransporte.setPesoBrutoVehicular(new BigDecimal("1")); + autotransporte.setPlacaVM("plac892"); + autotransporte.setAnioModeloVM(2020); + autotransporte.setAseguraRespCivil("AseguraRespCivil"); + autotransporte.setPolizaRespCivil("123456789"); + autotransporte.setRemolques(remolques); + + // TipoFigura with USA domicilio + TipoFiguraDomicilio domFigura = new TipoFiguraDomicilio(); + domFigura.setCalle("ST"); + domFigura.setNumeroExterior("214"); + domFigura.setColoniaId("N/A"); + domFigura.setReferencia("WHITE HOUSE"); + domFigura.setMunicipioId("N/A"); + domFigura.setEstadoId("TX"); + domFigura.setPaisId("USA"); + domFigura.setCodigoPostalId("N/A"); + + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("NumLicencia1"); + figura.setNombreFigura("NombreFigura1"); + figura.setDomicilio(domFigura); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Entrada"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("01"); + cartaPorte.setTotalDistRec(new BigDecimal("1")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setLogisticaInversaRecoleccionDevolucionId("Sí"); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setAutotransporte(autotransporte); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("SerieCCP31"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse = client.getInvoiceService().create(invoice); + System.out.println(apiResponse); + } + + // Ejemplo 17: Factura traslado transporte ferroviario nacional + private void facturaTrasladoTransporteFerroviarioNacional(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Ubicaciones: comunes + destino 5 (JM047/HUEHUETOCA, tipoEstacion "03", COA) + List ubicaciones = buildUbicacionesFerroviarioComunes(); + UbicacionDomicilio domDest5 = new UbicacionDomicilio(); + domDest5.setCalle("Calle2"); + domDest5.setNumeroExterior("214"); + domDest5.setNumeroInterior("215"); + domDest5.setColoniaId("0347"); + domDest5.setLocalidadId("23"); + domDest5.setReferencia("casa negra"); + domDest5.setMunicipioId("004"); + domDest5.setEstadoId("COA"); + domDest5.setPaisId("MEX"); + domDest5.setCodigoPostalId("25350"); + + Ubicacion dest5 = new Ubicacion(); + dest5.setTipoUbicacion("Destino"); + dest5.setIdUbicacion("DE202025"); + dest5.setRfcRemitenteDestinatario("EKU9003173C9"); + dest5.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest5.setNumEstacionId("JM047"); + dest5.setNombreEstacion("HUEHUETOCA"); + dest5.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T05:00:01")); + dest5.setTipoEstacionId("03"); + dest5.setDistanciaRecorrida(new BigDecimal("100.00")); + dest5.setDomicilio(domDest5); + ubicaciones.add(dest5); + + // Mercancia + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202025"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setTotalDistRec(new BigDecimal("500")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteFerroviario(buildTransporteFerroviario()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse17 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse17); + } + + // Ejemplo 18: Factura traslado transporte ferroviario extranjero + private void facturaTrasladoTransporteFerroviarioExtranjero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("EXD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicaciones: comunes + destino 5 (XEXX010101000, USA address) + List ubicaciones = buildUbicacionesFerroviarioComunes(); + UbicacionDomicilio domDest5 = new UbicacionDomicilio(); + domDest5.setCalle("ST"); + domDest5.setNumeroExterior("1234"); + domDest5.setColoniaId("1234"); + domDest5.setReferencia("WHITE HOUSE"); + domDest5.setMunicipioId("1234"); + domDest5.setEstadoId("TX"); + domDest5.setPaisId("USA"); + domDest5.setCodigoPostalId("12345"); + + Ubicacion dest5 = new Ubicacion(); + dest5.setTipoUbicacion("Destino"); + dest5.setIdUbicacion("DE202025"); + dest5.setRfcRemitenteDestinatario("XEXX010101000"); + dest5.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest5.setNumRegIdTrib("01010101"); + dest5.setResidenciaFiscalId("USA"); + dest5.setNumEstacionId("EF0001"); + dest5.setNombreEstacion("NombreEstacion"); + dest5.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T05:00:01")); + dest5.setDistanciaRecorrida(new BigDecimal("100.00")); + dest5.setDomicilio(domDest5); + ubicaciones.add(dest5); + + // Mercancia (with tipoMateria) + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202025"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Salida"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("04"); + cartaPorte.setTotalDistRec(new BigDecimal("500")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteFerroviario(buildTransporteFerroviario()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse18 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse18); + } + + // Ejemplo 19: Factura traslado transporte ferroviario internacional aduanero (entrada, IMD) + private void facturaTrasladoTransporteFerroviarioInternacionalAduanero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("IMD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicaciones: comunes + destino 5 (JM047/HUEHUETOCA, tipoEstacion "03", COA) + List ubicaciones = buildUbicacionesFerroviarioComunes(); + UbicacionDomicilio domDest5 = new UbicacionDomicilio(); + domDest5.setCalle("Calle2"); + domDest5.setNumeroExterior("214"); + domDest5.setNumeroInterior("215"); + domDest5.setColoniaId("0347"); + domDest5.setLocalidadId("23"); + domDest5.setReferencia("casa negra"); + domDest5.setMunicipioId("004"); + domDest5.setEstadoId("COA"); + domDest5.setPaisId("MEX"); + domDest5.setCodigoPostalId("25350"); + + Ubicacion dest5 = new Ubicacion(); + dest5.setTipoUbicacion("Destino"); + dest5.setIdUbicacion("DE202025"); + dest5.setRfcRemitenteDestinatario("EKU9003173C9"); + dest5.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest5.setNumEstacionId("JM047"); + dest5.setNombreEstacion("HUEHUETOCA"); + dest5.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T05:00:01")); + dest5.setTipoEstacionId("03"); + dest5.setDistanciaRecorrida(new BigDecimal("100.00")); + dest5.setDomicilio(domDest5); + ubicaciones.add(dest5); + + // Mercancia con documentacion aduanera y tipoMateria + DocumentoAduanero doc = new DocumentoAduanero(); + doc.setTipoDocumentoId("01"); + doc.setNumPedimento("23 43 0472 8000448"); + doc.setRfcImpo("EKU9003173C9"); + List docs = new ArrayList<>(); + docs.add(doc); + + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202025"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setDocumentacionAduanera(docs); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Entrada"); + cartaPorte.setPaisOrigenDestinoId("AFG"); + cartaPorte.setViaEntradaSalidaId("04"); + cartaPorte.setTotalDistRec(new BigDecimal("500")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteFerroviario(buildTransporteFerroviario()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse19 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse19); + } + + // Ejemplo 20: Factura traslado transporte aereo nacional + private void facturaTrasladoTransporteAereoNacional(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Origen (aeropuerto EA0417, Loreto) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("EA0417"); + origen.setNombreEstacion("Loreto"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Destino (aeropuerto EA0418, Los Cabos) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumEstacionId("EA0418"); + destino.setNombreEstacion("Los Cabos"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setTipoEstacionId("03"); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia (with valorMercancia and monedaId) + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // TransporteAereo + TransporteAereo transporteAereo = new TransporteAereo(); + transporteAereo.setPermSCTId("TPAF01"); + transporteAereo.setNumPermisoSCT("Demo"); + transporteAereo.setMatriculaAeronave("61E5-WZ"); + transporteAereo.setNombreAseg("NombreAseg"); + transporteAereo.setNumPolizaSeguro("NumPolizaSeguro"); + transporteAereo.setNumeroGuia("acUbYlBVTmlzx"); + transporteAereo.setLugarContrato("LugarContrato"); + transporteAereo.setCodigoTransportistaId("CA001"); + transporteAereo.setRfcEmbarcador("EKU9003173C9"); + transporteAereo.setNombreEmbarcador("Embarcador"); + + // TipoFigura (tipoFiguraId "01", numLicencia, no partesTransporte) + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("a234567890"); + figura.setNombreFigura("NombreFigura"); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteAereo(transporteAereo); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse20 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse20); + } + + // Ejemplo 21: Factura traslado transporte aereo extranjero (salida, EXD) + private void facturaTrasladoTransporteAereoExtranjero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("EXD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (EA0417 / Loreto, COA/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle2"); + domOrigen.setNumeroExterior("214"); + domOrigen.setNumeroInterior("215"); + domOrigen.setColoniaId("0347"); + domOrigen.setLocalidadId("23"); + domOrigen.setReferencia("casa negra"); + domOrigen.setMunicipioId("004"); + domOrigen.setEstadoId("COA"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("25350"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("EA0417"); + origen.setNombreEstacion("Loreto"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (EA0143 / Phoenix-Mesa Gateway, USA/TX — foreign) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("ST"); + domDestino.setNumeroExterior("12344"); + domDestino.setColoniaId("N/A"); + domDestino.setReferencia("WHITE HOUSE"); + domDestino.setMunicipioId("N/A"); + domDestino.setEstadoId("TX"); + domDestino.setPaisId("USA"); + domDestino.setCodigoPostalId("12345"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("XEXX010101000"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario"); + destino.setNumRegIdTrib("01010101"); + destino.setResidenciaFiscalId("USA"); + destino.setNumEstacionId("EA0143"); + destino.setNombreEstacion("Phoenix-Mesa Gateway"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // TipoFigura (operador, licencia, no partesTransporte, no domicilio) + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("a234567890"); + figura.setNombreFigura("NombreFigura"); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Salida"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("03"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteAereo(buildTransporteAereoCP()); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse21 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse21); + } + + // Ejemplo 22: Factura traslado transporte aereo internacional aduanero (entrada, IMD) + private void facturaTrasladoTransporteAereoInternacionalAduanero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("IMD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (EA0417 / Loreto, CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("EA0417"); + origen.setNombreEstacion("Loreto"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (EA0418 / Los Cabos, COA/MEX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumEstacionId("EA0418"); + destino.setNombreEstacion("Los Cabos"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setTipoEstacionId("03"); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia con documentacion aduanera y tipoMateria + DocumentoAduanero doc = new DocumentoAduanero(); + doc.setTipoDocumentoId("01"); + doc.setNumPedimento("23 43 0472 8000448"); + doc.setRfcImpo("EKU9003173C9"); + List docs = new ArrayList<>(); + docs.add(doc); + + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setDocumentacionAduanera(docs); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // TipoFigura (operador, licencia, no partesTransporte, no domicilio) + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("a234567890"); + figura.setNombreFigura("NombreFigura"); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Entrada"); + cartaPorte.setPaisOrigenDestinoId("AFG"); + cartaPorte.setViaEntradaSalidaId("03"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteAereo(buildTransporteAereoCP()); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse22 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse22); + } + + // Ejemplo 23: Factura traslado transporte maritimo nacional + private void facturaTrasladoTransporteMaritimoNacional(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Ubicacion Origen (PM001 / Rosarito, CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("PM001"); + origen.setNombreEstacion("Rosarito"); + origen.setNavegacionTraficoId("Altura"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (PM001 / Rosarito, COA/MEX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumEstacionId("PM001"); + destino.setNombreEstacion("Rosarito"); + destino.setNavegacionTraficoId("Altura"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setTipoEstacionId("03"); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia with detalleMercancia + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + DetalleMercancia detalle = new DetalleMercancia(); + detalle.setUnidadPesoMercId("Tu"); + detalle.setPesoBruto(new BigDecimal("1")); + detalle.setPesoNeto(new BigDecimal("1")); + detalle.setPesoTara(new BigDecimal("0.001")); + detalle.setNumPiezas(1); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setCantidadTransporta(cantTransList); + mercancia.setDetalleMercancia(detalle); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("1")); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteMaritimo(buildTransporteMaritimo()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse23 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse23); + } + + // Ejemplo 24: Factura traslado transporte maritimo extranjero (salida, EXD) + private void facturaTrasladoTransporteMaritimoExtranjero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("EXD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (PM001 / Rosarito, CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("PM001"); + origen.setNombreEstacion("Rosarito"); + origen.setNavegacionTraficoId("Altura"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (PM120 / NombreEstacion, USA/TX — foreign) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("ST"); + domDestino.setNumeroExterior("12345"); + domDestino.setColoniaId("N/A"); + domDestino.setReferencia("N/A"); + domDestino.setMunicipioId("N/A"); + domDestino.setEstadoId("TX"); + domDestino.setPaisId("USA"); + domDestino.setCodigoPostalId("12345"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("XEXX010101000"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumRegIdTrib("01010101"); + destino.setResidenciaFiscalId("USA"); + destino.setNumEstacionId("PM120"); + destino.setNombreEstacion("NombreEstacion"); + destino.setNavegacionTraficoId("Altura"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia with detalleMercancia and tipoMateria + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + DetalleMercancia detalle = new DetalleMercancia(); + detalle.setUnidadPesoMercId("Tu"); + detalle.setPesoBruto(new BigDecimal("1")); + detalle.setPesoNeto(new BigDecimal("1")); + detalle.setPesoTara(new BigDecimal("0.001")); + detalle.setNumPiezas(1); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setCantidadTransporta(cantTransList); + mercancia.setDetalleMercancia(detalle); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Salida"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("02"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("1")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteMaritimo(buildTransporteMaritimo()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse24 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse24); + } + + // Ejemplo 25: Factura traslado transporte maritimo internacional aduanero (entrada, IMD x2) + private void facturaTrasladoTransporteMaritimoInternacionalAduanero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero (two IMD entries) + RegimenAduanero regimenAduanero1 = new RegimenAduanero(); + regimenAduanero1.setRegimenAduaneroId("IMD"); + RegimenAduanero regimenAduanero2 = new RegimenAduanero(); + regimenAduanero2.setRegimenAduaneroId("IMD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero1); + regimenAduaneros.add(regimenAduanero2); + + // Ubicacion Origen (PM001 / Rosarito, CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("PM001"); + origen.setNombreEstacion("Rosarito"); + origen.setNavegacionTraficoId("Altura"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (PM001 / Rosarito, COA/MEX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumEstacionId("PM001"); + destino.setNombreEstacion("Rosarito"); + destino.setNavegacionTraficoId("Altura"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setTipoEstacionId("03"); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia with documentacionAduanera, detalleMercancia, and tipoMateria + DocumentoAduanero doc = new DocumentoAduanero(); + doc.setTipoDocumentoId("01"); + doc.setNumPedimento("23 43 0472 8000448"); + doc.setRfcImpo("EKU9003173C9"); + List docs = new ArrayList<>(); + docs.add(doc); + + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + DetalleMercancia detalle = new DetalleMercancia(); + detalle.setUnidadPesoMercId("Tu"); + detalle.setPesoBruto(new BigDecimal("1")); + detalle.setPesoNeto(new BigDecimal("1")); + detalle.setPesoTara(new BigDecimal("0.001")); + detalle.setNumPiezas(1); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setDocumentacionAduanera(docs); + mercancia.setCantidadTransporta(cantTransList); + mercancia.setDetalleMercancia(detalle); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Entrada"); + cartaPorte.setPaisOrigenDestinoId("AFG"); + cartaPorte.setViaEntradaSalidaId("02"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("1")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteMaritimo(buildTransporteMaritimo()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse25 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse25); + } + + // ── Helper methods ────────────────────────────────────────────────────────── + + private List buildTaxCredentials() { + TaxCredential cer = new TaxCredential(); + cer.setBase64File(escuelaKemperUrgateBase64Cer); + cer.setFileType(0); + cer.setPassword(password); + TaxCredential key = new TaxCredential(); + key.setBase64File(escuelaKemperUrgateBase64Key); + key.setFileType(1); + key.setPassword(password); + List credentials = new ArrayList<>(); + credentials.add(cer); + credentials.add(key); + return credentials; + } + + private InvoiceIssuer buildIssuerEKU() { + InvoiceIssuer issuer = new InvoiceIssuer(); + issuer.setId("0e82a655-5f0c-4e07-abab-8f322e4123ef"); + return issuer; + } + + private InvoiceRecipient buildRecipientEKU() { + InvoiceRecipient recipient = new InvoiceRecipient(); + recipient.setId("0e82a655-5f0c-4e07-abab-8f322e4123ef"); + return recipient; + } + + private InvoiceItem buildStandardItem() { + InvoiceItem item = new InvoiceItem(); + item.setItemCode("78101800"); + item.setItemSku("UT421511"); + item.setQuantity(new BigDecimal("1")); + item.setUnitOfMeasurementCode("H87"); + item.setDescription("Transporte de carga por carretera"); + item.setUnitPrice(new BigDecimal("100.00")); + item.setDiscount(new BigDecimal("0")); + item.setTaxObjectCode("01"); + item.setItemTaxes(new ArrayList<>()); + return item; + } + + private Invoice buildInvoice(InvoiceIssuer issuer, InvoiceRecipient recipient, + List items, Complement complement) { + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setPaymentFormCode("01"); + invoice.setPaymentMethodCode("PUE"); + invoice.setCurrencyCode("MXN"); + invoice.setTypeCode("I"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(issuer); + invoice.setRecipient(recipient); + invoice.setItems(items); + invoice.setComplement(complement); + return invoice; + } + + private TransporteAereo buildTransporteAereoCP() { + TransporteAereo transporteAereo = new TransporteAereo(); + transporteAereo.setPermSCTId("TPAF01"); + transporteAereo.setNumPermisoSCT("Demo"); + transporteAereo.setMatriculaAeronave("61E5-WZ"); + transporteAereo.setNombreAseg("NombreAseg"); + transporteAereo.setNumPolizaSeguro("NumPolizaSeguro"); + transporteAereo.setNumeroGuia("acUbYlBVTmlzx"); + transporteAereo.setLugarContrato("LugarContrato"); + transporteAereo.setCodigoTransportistaId("CA001"); + transporteAereo.setRfcEmbarcador("EKU9003173C9"); + transporteAereo.setNombreEmbarcador("Embarcador"); + return transporteAereo; + } + + private TransporteMaritimo buildTransporteMaritimo() { + RemolqueCCP remolqueCCP = new RemolqueCCP(); + remolqueCCP.setSubTipoRemCCPId("CTR001"); + remolqueCCP.setPlacaCCP("JNG7636"); + List remolquesCCP = new ArrayList<>(); + remolquesCCP.add(remolqueCCP); + + ContenedorMaritimo contenedor = new ContenedorMaritimo(); + contenedor.setTipoContenedorId("CM011"); + contenedor.setIdCCPRelacionado("CCCBCD94-870A-4332-A52A-A52AA52AA52A"); + contenedor.setPlacaVMCCP("JNG7683"); + contenedor.setFechaCertificacionCCP(OptUtil.parseLocalDateTime("2024-06-20T11:11:00")); + contenedor.setRemolquesCCP(remolquesCCP); + List contenedores = new ArrayList<>(); + contenedores.add(contenedor); + + TransporteMaritimo maritimo = new TransporteMaritimo(); + maritimo.setPermSCTId("TPAF01"); + maritimo.setNumPermisoSCT("NumPermisoSCT1"); + maritimo.setNombreAseg("NombreAseg1"); + maritimo.setNumPolizaSeguro("NumPolizaSeguro1"); + maritimo.setTipoEmbarcacionId("B01"); + maritimo.setMatricula("Matricula1"); + maritimo.setNumeroOMI("IMO1234567"); + maritimo.setAnioEmbarcacion(2003); + maritimo.setNombreEmbarc("NombreEmbarc1"); + maritimo.setNacionalidadEmbarcId("AFG"); + maritimo.setUnidadesDeArqBruto(new BigDecimal("0.001")); + maritimo.setTipoCargaId("CGS"); + maritimo.setEslora(new BigDecimal("0.01")); + maritimo.setManga(new BigDecimal("0.01")); + maritimo.setCalado(new BigDecimal("0.01")); + maritimo.setPuntal(new BigDecimal("0.01")); + maritimo.setLineaNaviera("LineaNaviera1"); + maritimo.setNombreAgenteNaviero("NombreAgenteNaviero1"); + maritimo.setNumAutorizacionNavieroId("ANC001/2022"); + maritimo.setNumViaje("NumViaje1"); + maritimo.setNumConocEmbarc("NumConocEmbarc1"); + maritimo.setPermisoTempNavegacion("PermisoTempNavegac1"); + maritimo.setContenedores(contenedores); + return maritimo; + } + + private TransporteFerroviario buildTransporteFerroviario() { + DerechoDePaso derecho = new DerechoDePaso(); + derecho.setTipoDerechoDePasoId("CDP114"); + derecho.setKilometrajePagado(new BigDecimal("100")); + List derechos = new ArrayList<>(); + derechos.add(derecho); + + Carro carro = new Carro(); + carro.setTipoCarroId("TC08"); + carro.setMatriculaCarro("A00012"); + carro.setGuiaCarro("123ASD"); + carro.setToneladasNetasCarro(new BigDecimal("10")); + List carros = new ArrayList<>(); + carros.add(carro); + + TransporteFerroviario transporte = new TransporteFerroviario(); + transporte.setTipoDeServicioId("TS01"); + transporte.setTipoDeTraficoId("TT01"); + transporte.setDerechosDePaso(derechos); + transporte.setCarros(carros); + return transporte; + } + + private List buildTiposFiguraFerroviario() { + ParteTransporte parte = new ParteTransporte(); + parte.setParteTransporteId("PT02"); + List partes = new ArrayList<>(); + partes.add(parte); + + TipoFiguraDomicilio domicilio = new TipoFiguraDomicilio(); + domicilio.setCalle("calle"); + domicilio.setNumeroExterior("211"); + domicilio.setColoniaId("0814"); + domicilio.setLocalidadId("01"); + domicilio.setReferencia("casa blanca"); + domicilio.setMunicipioId("010"); + domicilio.setEstadoId("ZAC"); + domicilio.setPaisId("MEX"); + domicilio.setCodigoPostalId("99080"); + + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("02"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNombreFigura("NombreFigura"); + figura.setPartesTransporte(partes); + figura.setDomicilio(domicilio); + + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + return tiposFigura; + } + + private List buildUbicacionesFerroviarioComunes() { + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("Q0736"); + origen.setNombreEstacion("SANTO NINO"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + Ubicacion dest1 = new Ubicacion(); + dest1.setTipoUbicacion("Destino"); + dest1.setIdUbicacion("DE202021"); + dest1.setRfcRemitenteDestinatario("EKU9003173C9"); + dest1.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest1.setNumEstacionId("SC283"); + dest1.setNombreEstacion("HUAXTITLA"); + dest1.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T01:00:01")); + dest1.setTipoEstacionId("02"); + dest1.setDistanciaRecorrida(new BigDecimal("100.00")); + + Ubicacion dest2 = new Ubicacion(); + dest2.setTipoUbicacion("Destino"); + dest2.setIdUbicacion("DE202022"); + dest2.setRfcRemitenteDestinatario("EKU9003173C9"); + dest2.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest2.setNumEstacionId("TG0"); + dest2.setNombreEstacion("NAVOJOA"); + dest2.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T02:00:01")); + dest2.setTipoEstacionId("02"); + dest2.setDistanciaRecorrida(new BigDecimal("100.00")); + + Ubicacion dest3 = new Ubicacion(); + dest3.setTipoUbicacion("Destino"); + dest3.setIdUbicacion("DE202023"); + dest3.setRfcRemitenteDestinatario("EKU9003173C9"); + dest3.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest3.setNumEstacionId("E0029"); + dest3.setNombreEstacion("TRES JAGUEYES"); + dest3.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T03:00:01")); + dest3.setTipoEstacionId("02"); + dest3.setDistanciaRecorrida(new BigDecimal("100.00")); + + Ubicacion dest4 = new Ubicacion(); + dest4.setTipoUbicacion("Destino"); + dest4.setIdUbicacion("DE202024"); + dest4.setRfcRemitenteDestinatario("EKU9003173C9"); + dest4.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest4.setNumEstacionId("TI032"); + dest4.setNombreEstacion("NAVOLATO"); + dest4.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T04:00:01")); + dest4.setTipoEstacionId("02"); + dest4.setDistanciaRecorrida(new BigDecimal("100.00")); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(dest1); + ubicaciones.add(dest2); + ubicaciones.add(dest3); + ubicaciones.add(dest4); + return ubicaciones; + } +} diff --git a/src/main/java/com/fiscalapi/examples/EjemplosCartaPorteValores.java b/src/main/java/com/fiscalapi/examples/EjemplosCartaPorteValores.java new file mode 100644 index 0000000..8f34669 --- /dev/null +++ b/src/main/java/com/fiscalapi/examples/EjemplosCartaPorteValores.java @@ -0,0 +1,3904 @@ +package com.fiscalapi.examples; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +import com.fiscalapi.OptUtil; +import com.fiscalapi.common.ApiResponse; +import com.fiscalapi.common.FiscalApiSettings; +import com.fiscalapi.models.invoicing.Complement; +import com.fiscalapi.models.invoicing.Invoice; +import com.fiscalapi.models.invoicing.InvoiceIssuer; +import com.fiscalapi.models.invoicing.InvoiceItem; +import com.fiscalapi.models.invoicing.InvoiceRecipient; +import com.fiscalapi.models.invoicing.ItemTax; +import com.fiscalapi.models.invoicing.TaxCredential; +import com.fiscalapi.models.invoicing.billOfLading.Autotransporte; +import com.fiscalapi.models.invoicing.billOfLading.CantidadTransporta; +import com.fiscalapi.models.invoicing.billOfLading.Carro; +import com.fiscalapi.models.invoicing.billOfLading.CartaPorte; +import com.fiscalapi.models.invoicing.billOfLading.ContenedorMaritimo; +import com.fiscalapi.models.invoicing.billOfLading.DerechoDePaso; +import com.fiscalapi.models.invoicing.billOfLading.DocumentoAduanero; +import com.fiscalapi.models.invoicing.billOfLading.UbicacionDomicilio; +import com.fiscalapi.models.invoicing.billOfLading.TipoFiguraDomicilio; +import com.fiscalapi.models.invoicing.billOfLading.Mercancia; +import com.fiscalapi.models.invoicing.billOfLading.RegimenAduanero; +import com.fiscalapi.models.invoicing.billOfLading.Remolque; +import com.fiscalapi.models.invoicing.billOfLading.RemolqueCCP; +import com.fiscalapi.models.invoicing.billOfLading.TipoFigura; +import com.fiscalapi.models.invoicing.billOfLading.ParteTransporte; +import com.fiscalapi.models.invoicing.billOfLading.DetalleMercancia; +import com.fiscalapi.models.invoicing.billOfLading.TransporteAereo; +import com.fiscalapi.models.invoicing.billOfLading.TransporteFerroviario; +import com.fiscalapi.models.invoicing.billOfLading.TransporteMaritimo; +import com.fiscalapi.models.invoicing.billOfLading.Ubicacion; +import com.fiscalapi.services.FiscalApiClient; + +public class EjemplosCartaPorteValores { + + final String escuelaKemperUrgateBase64Cer = "MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE="; + final String escuelaKemperUrgateBase64Key = "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIAgEAAoIBAQACAggAMBQGCCqGSIb3DQMHBAgwggS/AgEAMASCBMh4EHl7aNSCaMDA1VlRoXCZ5UUmqErAbucoZQObOaLUEm+I+QZ7Y8Giupo+F1XWkLvAsdk/uZlJcTfKLJyJbJwsQYbSpLOCLataZ4O5MVnnmMbfG//NKJn9kSMvJQZhSwAwoGLYDm1ESGezrvZabgFJnoQv8Si1nAhVGTk9FkFBesxRzq07dmZYwFCnFSX4xt2fDHs1PMpQbeq83aL/PzLCce3kxbYSB5kQlzGtUYayiYXcu0cVRu228VwBLCD+2wTDDoCmRXtPesgrLKUR4WWWb5N2AqAU1mNDC+UEYsENAerOFXWnmwrcTAu5qyZ7GsBMTpipW4Dbou2yqQ0lpA/aB06n1kz1aL6mNqGPaJ+OqoFuc8Ugdhadd+MmjHfFzoI20SZ3b2geCsUMNCsAd6oXMsZdWm8lzjqCGWHFeol0ik/xHMQvuQkkeCsQ28PBxdnUgf7ZGer+TN+2ZLd2kvTBOk6pIVgy5yC6cZ+o1Tloql9hYGa6rT3xcMbXlW+9e5jM2MWXZliVW3ZhaPjptJFDbIfWxJPjz4QvKyJk0zok4muv13Iiwj2bCyefUTRz6psqI4cGaYm9JpscKO2RCJN8UluYGbbWmYQU+Int6LtZj/lv8p6xnVjWxYI+rBPdtkpfFYRp+MJiXjgPw5B6UGuoruv7+vHjOLHOotRo+RdjZt7NqL9dAJnl1Qb2jfW6+d7NYQSI/bAwxO0sk4taQIT6Gsu/8kfZOPC2xk9rphGqCSS/4q3Os0MMjA1bcJLyoWLp13pqhK6bmiiHw0BBXH4fbEp4xjSbpPx4tHXzbdn8oDsHKZkWh3pPC2J/nVl0k/yF1KDVowVtMDXE47k6TGVcBoqe8PDXCG9+vjRpzIidqNo5qebaUZu6riWMWzldz8x3Z/jLWXuDiM7/Yscn0Z2GIlfoeyz+GwP2eTdOw9EUedHjEQuJY32bq8LICimJ4Ht+zMJKUyhwVQyAER8byzQBwTYmYP5U0wdsyIFitphw+/IH8+v08Ia1iBLPQAeAvRfTTIFLCs8foyUrj5Zv2B/wTYIZy6ioUM+qADeXyo45uBLLqkN90Rf6kiTqDld78NxwsfyR5MxtJLVDFkmf2IMMJHTqSfhbi+7QJaC11OOUJTD0v9wo0X/oO5GvZhe0ZaGHnm9zqTopALuFEAxcaQlc4R81wjC4wrIrqWnbcl2dxiBtD73KW+wcC9ymsLf4I8BEmiN25lx/OUc1IHNyXZJYSFkEfaxCEZWKcnbiyf5sqFSSlEqZLc4lUPJFAoP6s1FHVcyO0odWqdadhRZLZC9RCzQgPlMRtji/OXy5phh7diOBZv5UYp5nb+MZ2NAB/eFXm2JLguxjvEstuvTDmZDUb6Uqv++RdhO5gvKf/AcwU38ifaHQ9uvRuDocYwVxZS2nr9rOwZ8nAh+P2o4e0tEXjxFKQGhxXYkn75H3hhfnFYjik/2qunHBBZfcdG148MaNP6DjX33M238T9Zw/GyGx00JMogr2pdP4JAErv9a5yt4YR41KGf8guSOUbOXVARw6+ybh7+meb7w4BeTlj3aZkv8tVGdfIt3lrwVnlbzhLjeQY6PplKp3/a5Kr5yM0T4wJoKQQ6v3vSNmrhpbuAtKxpMILe8CQoo="; + final String password = "12345678a"; + + public void main(String[] args) { + FiscalApiSettings settings = new FiscalApiSettings(); + settings.setDebugMode(false); + settings.setApiUrl("https://test.fiscalapi.com"); + settings.setApiKey("sk_test_b7dae706_e16f_4faf_90fb_a5d1990985a2"); + settings.setTenant("275510ee-f64d-435a-9e92-1553d8f10a7e"); + + System.out.println("\n===== Ejemplo 1: Factura ingreso autotransporte nacional (sin impuestos) ====="); + facturaIngresoAutoTransporteNacional(settings); + + System.out.println("\n===== Ejemplo 2: Factura ingreso autotransporte nacional con impuestos ====="); + facturaIngresoAutoTransporteNacionalConImpuestos(settings); + + System.out.println("\n===== Ejemplo 3: Factura ingreso autotransporte extranjero (salida) ====="); + facturaIngresoAutoTransporteExtranjero(settings); + + System.out.println("\n===== Ejemplo 4: Factura ingreso autotransporte internacional aduanero (entrada con pedimento) ====="); + facturaIngresoAutoTransporteInternacionalAduanero(settings); + + System.out.println("\n===== Ejemplo 5: Factura ingreso transporte ferroviario nacional ====="); + facturaIngresoTransporteFerroviarioNacional(settings); + + System.out.println("\n===== Ejemplo 6: Factura ingreso transporte ferroviario extranjero ====="); + facturaIngresoTransporteFerroviarioExtranjero(settings); + + System.out.println("\n===== Ejemplo 7: Factura ingreso transporte ferroviario internacional aduanero (entrada, IMD) ====="); + facturaIngresoTransporteFerroviarioInternacionalAduanero(settings); + + System.out.println("\n===== Ejemplo 8: Factura ingreso transporte aereo nacional ====="); + facturaIngresoTransporteAereoNacional(settings); + + System.out.println("\n===== Ejemplo 9: Factura ingreso transporte aereo extranjero (salida) ====="); + facturaIngresoTransporteAereoExtranjero(settings); + + System.out.println("\n===== Ejemplo 10: Factura ingreso transporte aereo internacional aduanero (entrada, IMD) ====="); + facturaIngresoTransporteAereoInternacionalAduanero(settings); + + System.out.println("\n===== Ejemplo 11: Factura ingreso transporte maritimo nacional ====="); + facturaIngresoTransporteMaritimoNacional(settings); + + System.out.println("\n===== Ejemplo 12: Factura ingreso transporte maritimo extranjero (salida) ====="); + facturaIngresoTransporteMaritimoExtranjero(settings); + + System.out.println("\n===== Ejemplo 13: Factura ingreso transporte maritimo internacional aduanero (entrada, IMD x2) ====="); + facturaIngresoTransporteMaritimoInternacionalAduanero(settings); + + System.out.println("\n===== Ejemplo 14: Factura traslado autotransporte nacional ====="); + facturaTrasladoAutoTransporteNacional(settings); + + System.out.println("\n===== Ejemplo 15: Factura traslado autotransporte extranjero (salida, EXD) ====="); + facturaTrasladoAutoTransporteExtranjero(settings); + + System.out.println("\n===== Ejemplo 16: Factura traslado autotransporte internacional aduanero (entrada, IMD) ====="); + facturaTrasladoAutoTransporteInternacionalAduanero(settings); + + System.out.println("\n===== Ejemplo 17: Factura traslado transporte ferroviario nacional ====="); + facturaTrasladoTransporteFerroviarioNacional(settings); + + System.out.println("\n===== Ejemplo 18: Factura traslado transporte ferroviario extranjero ====="); + facturaTrasladoTransporteFerroviarioExtranjero(settings); + + System.out.println("\n===== Ejemplo 19: Factura traslado transporte ferroviario internacional aduanero (entrada, IMD) ====="); + facturaTrasladoTransporteFerroviarioInternacionalAduanero(settings); + + System.out.println("\n===== Ejemplo 20: Factura traslado transporte aereo nacional ====="); + facturaTrasladoTransporteAereoNacional(settings); + + System.out.println("\n===== Ejemplo 21: Factura traslado transporte aereo extranjero (salida, EXD) ====="); + facturaTrasladoTransporteAereoExtranjero(settings); + + System.out.println("\n===== Ejemplo 22: Factura traslado transporte aereo internacional aduanero (entrada, IMD) ====="); + facturaTrasladoTransporteAereoInternacionalAduanero(settings); + + System.out.println("\n===== Ejemplo 23: Factura traslado transporte maritimo nacional ====="); + facturaTrasladoTransporteMaritimoNacional(settings); + + System.out.println("\n===== Ejemplo 24: Factura traslado transporte maritimo extranjero (salida, EXD) ====="); + facturaTrasladoTransporteMaritimoExtranjero(settings); + + System.out.println("\n===== Ejemplo 25: Factura traslado transporte maritimo internacional aduanero (entrada, IMD x2) ====="); + facturaTrasladoTransporteMaritimoInternacionalAduanero(settings); + } + + // Factura ingreso autotransporte nacional (sin impuestos) + private void facturaIngresoAutoTransporteNacional(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + LocalDateTime currentDate = OptUtil.parseLocalDateTime("2026-04-30T19:00:00"); + + // Tax credentials + List taxCredentials = new ArrayList<>(); + TaxCredential cer = new TaxCredential(); + cer.setBase64File(escuelaKemperUrgateBase64Cer); + cer.setFileType(0); + cer.setPassword(password); + TaxCredential key = new TaxCredential(); + key.setBase64File(escuelaKemperUrgateBase64Key); + key.setFileType(1); + key.setPassword(password); + taxCredentials.add(cer); + taxCredentials.add(key); + + // Issuer + InvoiceIssuer issuer = new InvoiceIssuer(); + issuer.setTin("EKU9003173C9"); + issuer.setLegalName("ESCUELA KEMPER URGATE"); + issuer.setTaxRegimeCode("601"); + issuer.setTaxCredentials(taxCredentials); + + // Recipient + InvoiceRecipient recipient = new InvoiceRecipient(); + recipient.setTin("URE180429TM6"); + recipient.setLegalName("UNIVERSIDAD ROBOTICA ESPAÑOLA"); + recipient.setZipCode("86991"); + recipient.setTaxRegimeCode("601"); + recipient.setCfdiUseCode("S01"); + + // Items + InvoiceItem item = new InvoiceItem(); + item.setItemCode("78101800"); + item.setItemSku("UT421511"); + item.setQuantity(new BigDecimal("1")); + item.setUnitOfMeasurementCode("H87"); + item.setDescription("Transporte de carga por carretera"); + item.setUnitPrice(new BigDecimal("100.00")); + item.setDiscount(new BigDecimal("0")); + item.setTaxObjectCode("01"); + item.setItemTaxes(new ArrayList<>()); + List items = new ArrayList<>(); + items.add(item); + + // Ubicacion Origen + UbicacionDomicilio domicilioOrigen = new UbicacionDomicilio(); + domicilioOrigen.setCalle("Calle1"); + domicilioOrigen.setNumeroExterior("211"); + domicilioOrigen.setNumeroInterior("212"); + domicilioOrigen.setColoniaId("1957"); + domicilioOrigen.setLocalidadId("13"); + domicilioOrigen.setReferencia("casa blanca"); + domicilioOrigen.setMunicipioId("011"); + domicilioOrigen.setEstadoId("CMX"); + domicilioOrigen.setPaisId("MEX"); + domicilioOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("URE180429TM6"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setDomicilio(domicilioOrigen); + + // Ubicacion Destino + UbicacionDomicilio domicilioDestino = new UbicacionDomicilio(); + domicilioDestino.setCalle("Calle2"); + domicilioDestino.setNumeroExterior("214"); + domicilioDestino.setNumeroInterior("215"); + domicilioDestino.setColoniaId("0347"); + domicilioDestino.setLocalidadId("23"); + domicilioDestino.setReferencia("casa negra"); + domicilioDestino.setMunicipioId("004"); + domicilioDestino.setEstadoId("COA"); + domicilioDestino.setPaisId("MEX"); + domicilioDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("URE180429TM6"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDistanciaRecorrida(new BigDecimal("1")); + destino.setDomicilio(domicilioDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia + CantidadTransporta cantidadTransporta = new CantidadTransporta(); + cantidadTransporta.setCantidad(new BigDecimal("1")); + cantidadTransporta.setIdOrigen("OR101010"); + cantidadTransporta.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(cantidadTransporta); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2003-04-02T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setFormaFarmaceuticaId("01"); + mercancia.setCondicionesEspTranspId("01"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setFraccionArancelariaId("6309000100"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // Autotransporte + Remolque remolque = new Remolque(); + remolque.setSubTipoRemId("CTR004"); + remolque.setPlaca("VL45K98"); + List remolques = new ArrayList<>(); + remolques.add(remolque); + + Autotransporte autotransporte = new Autotransporte(); + autotransporte.setPermSCTId("TPAF01"); + autotransporte.setNumPermisoSCT("NumPermisoSCT1"); + autotransporte.setConfigVehicularId("VL"); + autotransporte.setPesoBrutoVehicular(new BigDecimal("1")); + autotransporte.setPlacaVM("plac892"); + autotransporte.setAnioModeloVM(2020); + autotransporte.setAseguraRespCivil("AseguraRespCivil"); + autotransporte.setPolizaRespCivil("123456789"); + autotransporte.setRemolques(remolques); + + // TipoFigura + TipoFiguraDomicilio domicilioFigura = new TipoFiguraDomicilio(); + domicilioFigura.setCalle("Calle1"); + domicilioFigura.setNumeroExterior("NumeroExterior1"); + domicilioFigura.setNumeroInterior("NumeroInterior1"); + domicilioFigura.setColoniaId("Colonia1"); + domicilioFigura.setLocalidadId("Localidad1"); + domicilioFigura.setReferencia("Referencia1"); + domicilioFigura.setMunicipioId("Municipio1"); + domicilioFigura.setEstadoId("Estado1"); + domicilioFigura.setPaisId("AFG"); + domicilioFigura.setCodigoPostalId("CodigoPosta1"); + + TipoFigura tipoFigura = new TipoFigura(); + tipoFigura.setTipoFiguraId("01"); + tipoFigura.setRfcFigura("URE180429TM6"); + tipoFigura.setNumLicencia("NumLicencia1"); + tipoFigura.setNombreFigura("NombreFigura1"); + tipoFigura.setDomicilio(domicilioFigura); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(tipoFigura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setTotalDistRec(new BigDecimal("1")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setLogisticaInversaRecoleccionDevolucionId("Sí"); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setAutotransporte(autotransporte); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setPaymentFormCode("01"); + invoice.setPaymentMethodCode("PUE"); + invoice.setCurrencyCode("MXN"); + invoice.setTypeCode("I"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("SerieCCP31"); + invoice.setDate(currentDate); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(issuer); + invoice.setRecipient(recipient); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse = client.getInvoiceService().create(invoice); + System.out.println(apiResponse); + } + + // Factura ingreso autotransporte nacional con impuestos + private void facturaIngresoAutoTransporteNacionalConImpuestos(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + LocalDateTime currentDate = OptUtil.parseLocalDateTime(LocalDateTime.now().toString()); + + // Tax credentials + List taxCredentials = new ArrayList<>(); + TaxCredential cer = new TaxCredential(); + cer.setBase64File(escuelaKemperUrgateBase64Cer); + cer.setFileType(0); + cer.setPassword(password); + TaxCredential key = new TaxCredential(); + key.setBase64File(escuelaKemperUrgateBase64Key); + key.setFileType(1); + key.setPassword(password); + taxCredentials.add(cer); + taxCredentials.add(key); + + // Issuer + InvoiceIssuer issuer = new InvoiceIssuer(); + issuer.setTin("EKU9003173C9"); + issuer.setLegalName("ESCUELA KEMPER URGATE"); + issuer.setTaxRegimeCode("601"); + issuer.setTaxCredentials(taxCredentials); + + // Recipient + InvoiceRecipient recipient = new InvoiceRecipient(); + recipient.setTin("URE180429TM6"); + recipient.setLegalName("UNIVERSIDAD ROBOTICA ESPAÑOLA"); + recipient.setZipCode("86991"); + recipient.setTaxRegimeCode("601"); + recipient.setCfdiUseCode("S01"); + + // Items + List itemTaxes = new ArrayList<>(); + ItemTax ivaTraslado = new ItemTax(); + ivaTraslado.setTaxCode("002"); + ivaTraslado.setTaxTypeCode("Tasa"); + ivaTraslado.setTaxRate(new BigDecimal("0.160000")); + ivaTraslado.setTaxFlagCode("T"); + itemTaxes.add(ivaTraslado); + ItemTax ivaRetencion = new ItemTax(); + ivaRetencion.setTaxCode("002"); + ivaRetencion.setTaxTypeCode("Tasa"); + ivaRetencion.setTaxRate(new BigDecimal("0.040000")); + ivaRetencion.setTaxFlagCode("R"); + itemTaxes.add(ivaRetencion); + + InvoiceItem item = new InvoiceItem(); + item.setItemCode("78101800"); + item.setItemSku("UT421511"); + item.setQuantity(new BigDecimal("1")); + item.setUnitOfMeasurementCode("H87"); + item.setDescription("Transporte de carga por carretera"); + item.setUnitPrice(new BigDecimal("26232.75")); + item.setDiscount(new BigDecimal("0")); + item.setTaxObjectCode("02"); + item.setItemTaxes(itemTaxes); + List items = new ArrayList<>(); + items.add(item); + + // Ubicacion Origen + UbicacionDomicilio domicilioOrigen = new UbicacionDomicilio(); + domicilioOrigen.setCalle("Calle1"); + domicilioOrigen.setNumeroExterior("211"); + domicilioOrigen.setNumeroInterior("212"); + domicilioOrigen.setColoniaId("1957"); + domicilioOrigen.setLocalidadId("13"); + domicilioOrigen.setReferencia("casa blanca"); + domicilioOrigen.setMunicipioId("011"); + domicilioOrigen.setEstadoId("CMX"); + domicilioOrigen.setPaisId("MEX"); + domicilioOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("URE180429TM6"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setDomicilio(domicilioOrigen); + + // Ubicacion Destino + UbicacionDomicilio domicilioDestino = new UbicacionDomicilio(); + domicilioDestino.setCalle("Calle2"); + domicilioDestino.setNumeroExterior("214"); + domicilioDestino.setNumeroInterior("215"); + domicilioDestino.setColoniaId("0347"); + domicilioDestino.setLocalidadId("23"); + domicilioDestino.setReferencia("casa negra"); + domicilioDestino.setMunicipioId("004"); + domicilioDestino.setEstadoId("COA"); + domicilioDestino.setPaisId("MEX"); + domicilioDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("URE180429TM6"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDistanciaRecorrida(new BigDecimal("1")); + destino.setDomicilio(domicilioDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia + CantidadTransporta cantidadTransporta = new CantidadTransporta(); + cantidadTransporta.setCantidad(new BigDecimal("1")); + cantidadTransporta.setIdOrigen("OR101010"); + cantidadTransporta.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(cantidadTransporta); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2003-04-02T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setFormaFarmaceuticaId("01"); + mercancia.setCondicionesEspTranspId("01"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setFraccionArancelariaId("6309000100"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // Autotransporte + Remolque remolque = new Remolque(); + remolque.setSubTipoRemId("CTR004"); + remolque.setPlaca("VL45K98"); + List remolques = new ArrayList<>(); + remolques.add(remolque); + + Autotransporte autotransporte = new Autotransporte(); + autotransporte.setPermSCTId("TPAF01"); + autotransporte.setNumPermisoSCT("NumPermisoSCT1"); + autotransporte.setConfigVehicularId("VL"); + autotransporte.setPesoBrutoVehicular(new BigDecimal("1")); + autotransporte.setPlacaVM("plac892"); + autotransporte.setAnioModeloVM(2020); + autotransporte.setAseguraRespCivil("AseguraRespCivil"); + autotransporte.setPolizaRespCivil("123456789"); + autotransporte.setRemolques(remolques); + + // TipoFigura + TipoFiguraDomicilio domicilioFigura = new TipoFiguraDomicilio(); + domicilioFigura.setCalle("Calle1"); + domicilioFigura.setNumeroExterior("NumeroExterior1"); + domicilioFigura.setNumeroInterior("NumeroInterior1"); + domicilioFigura.setColoniaId("Colonia1"); + domicilioFigura.setLocalidadId("Localidad1"); + domicilioFigura.setReferencia("Referencia1"); + domicilioFigura.setMunicipioId("Municipio1"); + domicilioFigura.setEstadoId("Estado1"); + domicilioFigura.setPaisId("AFG"); + domicilioFigura.setCodigoPostalId("CodigoPosta1"); + + TipoFigura tipoFigura = new TipoFigura(); + tipoFigura.setTipoFiguraId("01"); + tipoFigura.setRfcFigura("URE180429TM6"); + tipoFigura.setNumLicencia("NumLicencia1"); + tipoFigura.setNombreFigura("NombreFigura1"); + tipoFigura.setDomicilio(domicilioFigura); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(tipoFigura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setTotalDistRec(new BigDecimal("1")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setLogisticaInversaRecoleccionDevolucionId("Sí"); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setAutotransporte(autotransporte); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setPaymentFormCode("01"); + invoice.setPaymentMethodCode("PUE"); + invoice.setCurrencyCode("MXN"); + invoice.setTypeCode("I"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("SerieCCP31"); + invoice.setDate(currentDate); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(issuer); + invoice.setRecipient(recipient); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse = client.getInvoiceService().create(invoice); + System.out.println(apiResponse); + } + + // Factura ingreso autotransporte extranjero (salida) + private void facturaIngresoAutoTransporteExtranjero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + LocalDateTime currentDate = OptUtil.parseLocalDateTime(LocalDateTime.now().toString()); + + // Tax credentials + List taxCredentials = new ArrayList<>(); + TaxCredential cer = new TaxCredential(); + cer.setBase64File(escuelaKemperUrgateBase64Cer); + cer.setFileType(0); + cer.setPassword(password); + TaxCredential key = new TaxCredential(); + key.setBase64File(escuelaKemperUrgateBase64Key); + key.setFileType(1); + key.setPassword(password); + taxCredentials.add(cer); + taxCredentials.add(key); + + // Issuer + InvoiceIssuer issuer = new InvoiceIssuer(); + issuer.setTin("EKU9003173C9"); + issuer.setLegalName("ESCUELA KEMPER URGATE"); + issuer.setTaxRegimeCode("601"); + issuer.setTaxCredentials(taxCredentials); + + // Recipient (same as issuer for international) + InvoiceRecipient recipient = new InvoiceRecipient(); + recipient.setTin("EKU9003173C9"); + recipient.setLegalName("ESCUELA KEMPER URGATE"); + recipient.setZipCode("42501"); + recipient.setTaxRegimeCode("601"); + recipient.setCfdiUseCode("S01"); + + // Items + InvoiceItem item = new InvoiceItem(); + item.setItemCode("78101800"); + item.setItemSku("UT421511"); + item.setQuantity(new BigDecimal("1")); + item.setUnitOfMeasurementCode("H87"); + item.setDescription("Transporte de carga por carretera"); + item.setUnitPrice(new BigDecimal("100.00")); + item.setDiscount(new BigDecimal("0")); + item.setTaxObjectCode("01"); + item.setItemTaxes(new ArrayList<>()); + List items = new ArrayList<>(); + items.add(item); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("EXD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (extranjero) + UbicacionDomicilio domicilioOrigen = new UbicacionDomicilio(); + domicilioOrigen.setCalle("ST"); + domicilioOrigen.setNumeroExterior("214"); + domicilioOrigen.setColoniaId("N/A"); + domicilioOrigen.setReferencia("WHITE HOUSE"); + domicilioOrigen.setMunicipioId("N/A"); + domicilioOrigen.setEstadoId("TX"); + domicilioOrigen.setPaisId("USA"); + domicilioOrigen.setCodigoPostalId("N/A"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("XEXX010101000"); + origen.setNumRegIdTrib("01010101"); + origen.setResidenciaFiscalId("USA"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + origen.setDomicilio(domicilioOrigen); + + // Ubicacion Destino (extranjero) + UbicacionDomicilio domicilioDestino = new UbicacionDomicilio(); + domicilioDestino.setCalle("ST"); + domicilioDestino.setNumeroExterior("214"); + domicilioDestino.setColoniaId("N/A"); + domicilioDestino.setReferencia("WHITE HOUSE"); + domicilioDestino.setMunicipioId("N/A"); + domicilioDestino.setEstadoId("TX"); + domicilioDestino.setPaisId("USA"); + domicilioDestino.setCodigoPostalId("N/A"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("XEXX010101000"); + destino.setNumRegIdTrib("01010101"); + destino.setResidenciaFiscalId("USA"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDistanciaRecorrida(new BigDecimal("1")); + destino.setDomicilio(domicilioDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia + CantidadTransporta cantidadTransporta = new CantidadTransporta(); + cantidadTransporta.setCantidad(new BigDecimal("1")); + cantidadTransporta.setIdOrigen("OR101010"); + cantidadTransporta.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(cantidadTransporta); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2003-04-02T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setFormaFarmaceuticaId("01"); + mercancia.setCondicionesEspTranspId("01"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setFraccionArancelariaId("6309000100"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // Autotransporte + Remolque remolque = new Remolque(); + remolque.setSubTipoRemId("CTR004"); + remolque.setPlaca("VL45K98"); + List remolques = new ArrayList<>(); + remolques.add(remolque); + + Autotransporte autotransporte = new Autotransporte(); + autotransporte.setPermSCTId("TPAF01"); + autotransporte.setNumPermisoSCT("NumPermisoSCT1"); + autotransporte.setConfigVehicularId("VL"); + autotransporte.setPesoBrutoVehicular(new BigDecimal("1")); + autotransporte.setPlacaVM("plac892"); + autotransporte.setAnioModeloVM(2020); + autotransporte.setAseguraRespCivil("AseguraRespCivil"); + autotransporte.setPolizaRespCivil("123456789"); + autotransporte.setRemolques(remolques); + + // TipoFigura + TipoFiguraDomicilio domicilioFigura = new TipoFiguraDomicilio(); + domicilioFigura.setCalle("ST"); + domicilioFigura.setNumeroExterior("214"); + domicilioFigura.setColoniaId("N/A"); + domicilioFigura.setReferencia("WHITE HOUSE"); + domicilioFigura.setMunicipioId("N/A"); + domicilioFigura.setEstadoId("TX"); + domicilioFigura.setPaisId("USA"); + domicilioFigura.setCodigoPostalId("N/A"); + + TipoFigura tipoFigura = new TipoFigura(); + tipoFigura.setTipoFiguraId("01"); + tipoFigura.setRfcFigura("EKU9003173C9"); + tipoFigura.setNumLicencia("NumLicencia1"); + tipoFigura.setNombreFigura("NombreFigura1"); + tipoFigura.setDomicilio(domicilioFigura); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(tipoFigura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Salida"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("01"); + cartaPorte.setTotalDistRec(new BigDecimal("1")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setLogisticaInversaRecoleccionDevolucionId("Sí"); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setAutotransporte(autotransporte); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setPaymentFormCode("01"); + invoice.setPaymentMethodCode("PUE"); + invoice.setCurrencyCode("MXN"); + invoice.setTypeCode("I"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("SerieCCP31"); + invoice.setDate(currentDate); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(issuer); + invoice.setRecipient(recipient); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse = client.getInvoiceService().create(invoice); + System.out.println(apiResponse); + } + + // Factura ingreso autotransporte internacional aduanero (entrada con pedimento) + private void facturaIngresoAutoTransporteInternacionalAduanero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + LocalDateTime currentDate = OptUtil.parseLocalDateTime(LocalDateTime.now().toString()); + + // Tax credentials + List taxCredentials = new ArrayList<>(); + TaxCredential cer = new TaxCredential(); + cer.setBase64File(escuelaKemperUrgateBase64Cer); + cer.setFileType(0); + cer.setPassword(password); + TaxCredential key = new TaxCredential(); + key.setBase64File(escuelaKemperUrgateBase64Key); + key.setFileType(1); + key.setPassword(password); + taxCredentials.add(cer); + taxCredentials.add(key); + + // Issuer + InvoiceIssuer issuer = new InvoiceIssuer(); + issuer.setTin("EKU9003173C9"); + issuer.setLegalName("ESCUELA KEMPER URGATE"); + issuer.setTaxRegimeCode("601"); + issuer.setTaxCredentials(taxCredentials); + + // Recipient (same as issuer for international) + InvoiceRecipient recipient = new InvoiceRecipient(); + recipient.setTin("EKU9003173C9"); + recipient.setLegalName("ESCUELA KEMPER URGATE"); + recipient.setZipCode("42501"); + recipient.setTaxRegimeCode("601"); + recipient.setCfdiUseCode("S01"); + + // Items + InvoiceItem item = new InvoiceItem(); + item.setItemCode("78101800"); + item.setItemSku("UT421511"); + item.setQuantity(new BigDecimal("1")); + item.setUnitOfMeasurementCode("H87"); + item.setDescription("Transporte de carga por carretera"); + item.setUnitPrice(new BigDecimal("100.00")); + item.setDiscount(new BigDecimal("0")); + item.setTaxObjectCode("01"); + item.setItemTaxes(new ArrayList<>()); + List items = new ArrayList<>(); + items.add(item); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("IMD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (extranjero) + UbicacionDomicilio domicilioOrigen = new UbicacionDomicilio(); + domicilioOrigen.setCalle("ST"); + domicilioOrigen.setNumeroExterior("214"); + domicilioOrigen.setColoniaId("N/A"); + domicilioOrigen.setReferencia("WHITE HOUSE"); + domicilioOrigen.setMunicipioId("N/A"); + domicilioOrigen.setEstadoId("TX"); + domicilioOrigen.setPaisId("USA"); + domicilioOrigen.setCodigoPostalId("N/A"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("XEXX010101000"); + origen.setNumRegIdTrib("01010101"); + origen.setResidenciaFiscalId("USA"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + origen.setDomicilio(domicilioOrigen); + + // Ubicacion Destino (extranjero) + UbicacionDomicilio domicilioDestino = new UbicacionDomicilio(); + domicilioDestino.setCalle("ST"); + domicilioDestino.setNumeroExterior("214"); + domicilioDestino.setColoniaId("N/A"); + domicilioDestino.setReferencia("WHITE HOUSE"); + domicilioDestino.setMunicipioId("N/A"); + domicilioDestino.setEstadoId("TX"); + domicilioDestino.setPaisId("USA"); + domicilioDestino.setCodigoPostalId("N/A"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("XEXX010101000"); + destino.setNumRegIdTrib("01010101"); + destino.setResidenciaFiscalId("USA"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDistanciaRecorrida(new BigDecimal("1")); + destino.setDomicilio(domicilioDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia con documentacion aduanera + DocumentoAduanero documentoAduanero = new DocumentoAduanero(); + documentoAduanero.setTipoDocumentoId("01"); + documentoAduanero.setNumPedimento("23 43 0472 8000448"); + documentoAduanero.setRfcImpo("EKU9003173C9"); + List documentosAduaneros = new ArrayList<>(); + documentosAduaneros.add(documentoAduanero); + + CantidadTransporta cantidadTransporta = new CantidadTransporta(); + cantidadTransporta.setCantidad(new BigDecimal("1")); + cantidadTransporta.setIdOrigen("OR101010"); + cantidadTransporta.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(cantidadTransporta); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2003-04-02T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setFormaFarmaceuticaId("01"); + mercancia.setCondicionesEspTranspId("01"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setFraccionArancelariaId("6309000100"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setDocumentacionAduanera(documentosAduaneros); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // Autotransporte + Remolque remolque = new Remolque(); + remolque.setSubTipoRemId("CTR004"); + remolque.setPlaca("VL45K98"); + List remolques = new ArrayList<>(); + remolques.add(remolque); + + Autotransporte autotransporte = new Autotransporte(); + autotransporte.setPermSCTId("TPAF01"); + autotransporte.setNumPermisoSCT("NumPermisoSCT1"); + autotransporte.setConfigVehicularId("VL"); + autotransporte.setPesoBrutoVehicular(new BigDecimal("1")); + autotransporte.setPlacaVM("plac892"); + autotransporte.setAnioModeloVM(2020); + autotransporte.setAseguraRespCivil("AseguraRespCivil"); + autotransporte.setPolizaRespCivil("123456789"); + autotransporte.setRemolques(remolques); + + // TipoFigura + TipoFiguraDomicilio domicilioFigura = new TipoFiguraDomicilio(); + domicilioFigura.setCalle("ST"); + domicilioFigura.setNumeroExterior("214"); + domicilioFigura.setColoniaId("N/A"); + domicilioFigura.setReferencia("WHITE HOUSE"); + domicilioFigura.setMunicipioId("N/A"); + domicilioFigura.setEstadoId("TX"); + domicilioFigura.setPaisId("USA"); + domicilioFigura.setCodigoPostalId("N/A"); + + TipoFigura tipoFigura = new TipoFigura(); + tipoFigura.setTipoFiguraId("01"); + tipoFigura.setRfcFigura("EKU9003173C9"); + tipoFigura.setNumLicencia("NumLicencia1"); + tipoFigura.setNombreFigura("NombreFigura1"); + tipoFigura.setDomicilio(domicilioFigura); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(tipoFigura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Entrada"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("01"); + cartaPorte.setTotalDistRec(new BigDecimal("1")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setLogisticaInversaRecoleccionDevolucionId("Sí"); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setAutotransporte(autotransporte); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setPaymentFormCode("01"); + invoice.setPaymentMethodCode("PUE"); + invoice.setCurrencyCode("MXN"); + invoice.setTypeCode("I"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("SerieCCP31"); + invoice.setDate(currentDate); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(issuer); + invoice.setRecipient(recipient); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse = client.getInvoiceService().create(invoice); + System.out.println(apiResponse); + } + + // Factura ingreso transporte ferroviario nacional + private void facturaIngresoTransporteFerroviarioNacional(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Ubicaciones: comunes + destino 5 (JM047/HUEHUETOCA, tipoEstacion "03", COA) + List ubicaciones = buildUbicacionesFerroviarioComunes(); + UbicacionDomicilio domDest5 = new UbicacionDomicilio(); + domDest5.setCalle("Calle2"); + domDest5.setNumeroExterior("214"); + domDest5.setNumeroInterior("215"); + domDest5.setColoniaId("0347"); + domDest5.setLocalidadId("23"); + domDest5.setReferencia("casa negra"); + domDest5.setMunicipioId("004"); + domDest5.setEstadoId("COA"); + domDest5.setPaisId("MEX"); + domDest5.setCodigoPostalId("25350"); + + Ubicacion dest5 = new Ubicacion(); + dest5.setTipoUbicacion("Destino"); + dest5.setIdUbicacion("DE202025"); + dest5.setRfcRemitenteDestinatario("EKU9003173C9"); + dest5.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest5.setNumEstacionId("JM047"); + dest5.setNombreEstacion("HUEHUETOCA"); + dest5.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T05:00:01")); + dest5.setTipoEstacionId("03"); + dest5.setDistanciaRecorrida(new BigDecimal("100.00")); + dest5.setDomicilio(domDest5); + ubicaciones.add(dest5); + + // Mercancia + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202025"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setTotalDistRec(new BigDecimal("500")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteFerroviario(buildTransporteFerroviario()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + ApiResponse apiResponse = client.getInvoiceService().create( + buildInvoice(buildIssuerEKU(), buildRecipientEKU(), items, complement)); + System.out.println(apiResponse); + } + + // Factura ingreso transporte ferroviario extranjero + private void facturaIngresoTransporteFerroviarioExtranjero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("EXD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicaciones: comunes + destino 5 (XEXX010101000, USA address) + List ubicaciones = buildUbicacionesFerroviarioComunes(); + UbicacionDomicilio domDest5 = new UbicacionDomicilio(); + domDest5.setCalle("ST"); + domDest5.setNumeroExterior("1234"); + domDest5.setColoniaId("1234"); + domDest5.setReferencia("WHITE HOUSE"); + domDest5.setMunicipioId("1234"); + domDest5.setEstadoId("TX"); + domDest5.setPaisId("USA"); + domDest5.setCodigoPostalId("12345"); + + Ubicacion dest5 = new Ubicacion(); + dest5.setTipoUbicacion("Destino"); + dest5.setIdUbicacion("DE202025"); + dest5.setRfcRemitenteDestinatario("XEXX010101000"); + dest5.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest5.setNumRegIdTrib("01010101"); + dest5.setResidenciaFiscalId("USA"); + dest5.setNumEstacionId("EF0001"); + dest5.setNombreEstacion("NombreEstacion"); + dest5.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T05:00:01")); + dest5.setDistanciaRecorrida(new BigDecimal("100.00")); + dest5.setDomicilio(domDest5); + ubicaciones.add(dest5); + + // Mercancia (with tipoMateria) + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202025"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Salida"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("04"); + cartaPorte.setTotalDistRec(new BigDecimal("500")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteFerroviario(buildTransporteFerroviario()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + ApiResponse apiResponse = client.getInvoiceService().create( + buildInvoice(buildIssuerEKU(), buildRecipientEKU(), items, complement)); + System.out.println(apiResponse); + } + + // Factura ingreso transporte ferroviario internacional aduanero (entrada, IMD) + private void facturaIngresoTransporteFerroviarioInternacionalAduanero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("IMD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicaciones: comunes + destino 5 (JM047/HUEHUETOCA, tipoEstacion "03", COA) + List ubicaciones = buildUbicacionesFerroviarioComunes(); + UbicacionDomicilio domDest5 = new UbicacionDomicilio(); + domDest5.setCalle("Calle2"); + domDest5.setNumeroExterior("214"); + domDest5.setNumeroInterior("215"); + domDest5.setColoniaId("0347"); + domDest5.setLocalidadId("23"); + domDest5.setReferencia("casa negra"); + domDest5.setMunicipioId("004"); + domDest5.setEstadoId("COA"); + domDest5.setPaisId("MEX"); + domDest5.setCodigoPostalId("25350"); + + Ubicacion dest5 = new Ubicacion(); + dest5.setTipoUbicacion("Destino"); + dest5.setIdUbicacion("DE202025"); + dest5.setRfcRemitenteDestinatario("EKU9003173C9"); + dest5.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest5.setNumEstacionId("JM047"); + dest5.setNombreEstacion("HUEHUETOCA"); + dest5.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T05:00:01")); + dest5.setTipoEstacionId("03"); + dest5.setDistanciaRecorrida(new BigDecimal("100.00")); + dest5.setDomicilio(domDest5); + ubicaciones.add(dest5); + + // Mercancia con documentacion aduanera + DocumentoAduanero doc = new DocumentoAduanero(); + doc.setTipoDocumentoId("01"); + doc.setNumPedimento("23 43 0472 8000448"); + doc.setRfcImpo("EKU9003173C9"); + List docs = new ArrayList<>(); + docs.add(doc); + + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202025"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setDocumentacionAduanera(docs); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Entrada"); + cartaPorte.setPaisOrigenDestinoId("AFG"); + cartaPorte.setViaEntradaSalidaId("04"); + cartaPorte.setTotalDistRec(new BigDecimal("500")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteFerroviario(buildTransporteFerroviario()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + ApiResponse apiResponse = client.getInvoiceService().create( + buildInvoice(buildIssuerEKU(), buildRecipientEKU(), items, complement)); + System.out.println(apiResponse); + } + + // Factura ingreso transporte aereo nacional + private void facturaIngresoTransporteAereoNacional(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Origen (aeropuerto EA0417, Loreto) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("EA0417"); + origen.setNombreEstacion("Loreto"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Destino (aeropuerto EA0418, Los Cabos) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumEstacionId("EA0418"); + destino.setNombreEstacion("Los Cabos"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setTipoEstacionId("03"); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia (with valorMercancia and monedaId) + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // TransporteAereo + TransporteAereo transporteAereo = new TransporteAereo(); + transporteAereo.setPermSCTId("TPAF01"); + transporteAereo.setNumPermisoSCT("Demo"); + transporteAereo.setMatriculaAeronave("61E5-WZ"); + transporteAereo.setNombreAseg("NombreAseg"); + transporteAereo.setNumPolizaSeguro("NumPolizaSeguro"); + transporteAereo.setNumeroGuia("acUbYlBVTmlzx"); + transporteAereo.setLugarContrato("LugarContrato"); + transporteAereo.setCodigoTransportistaId("CA001"); + transporteAereo.setRfcEmbarcador("EKU9003173C9"); + transporteAereo.setNombreEmbarcador("Embarcador"); + + // TipoFigura (tipoFiguraId "01", numLicencia, no partesTransporte) + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("a234567890"); + figura.setNombreFigura("NombreFigura"); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteAereo(transporteAereo); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + ApiResponse apiResponse = client.getInvoiceService().create( + buildInvoice(buildIssuerEKU(), buildRecipientEKU(), items, complement)); + System.out.println(apiResponse); + } + + // Factura ingreso transporte aereo extranjero (salida) + private void facturaIngresoTransporteAereoExtranjero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("EXD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (EA0417 / Loreto, COA/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle2"); + domOrigen.setNumeroExterior("214"); + domOrigen.setNumeroInterior("215"); + domOrigen.setColoniaId("0347"); + domOrigen.setLocalidadId("23"); + domOrigen.setReferencia("casa negra"); + domOrigen.setMunicipioId("004"); + domOrigen.setEstadoId("COA"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("25350"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("EA0417"); + origen.setNombreEstacion("Loreto"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (EA0143 / Phoenix-Mesa Gateway, USA/TX — foreign) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("ST"); + domDestino.setNumeroExterior("12344"); + domDestino.setColoniaId("N/A"); + domDestino.setReferencia("WHITE HOUSE"); + domDestino.setMunicipioId("N/A"); + domDestino.setEstadoId("TX"); + domDestino.setPaisId("USA"); + domDestino.setCodigoPostalId("12345"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("XEXX010101000"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario"); + destino.setNumRegIdTrib("01010101"); + destino.setResidenciaFiscalId("USA"); + destino.setNumEstacionId("EA0143"); + destino.setNombreEstacion("Phoenix-Mesa Gateway"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // TipoFigura (operador, licencia) + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("a234567890"); + figura.setNombreFigura("NombreFigura"); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Salida"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("03"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteAereo(buildTransporteAereoCP()); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + ApiResponse apiResponse = client.getInvoiceService().create( + buildInvoice(buildIssuerEKU(), buildRecipientEKU(), items, complement)); + System.out.println(apiResponse); + } + + // Factura ingreso transporte aereo internacional aduanero (entrada, IMD) + private void facturaIngresoTransporteAereoInternacionalAduanero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("IMD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (EA0417 / Loreto, CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("EA0417"); + origen.setNombreEstacion("Loreto"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (EA0418 / Los Cabos, COA/MEX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumEstacionId("EA0418"); + destino.setNombreEstacion("Los Cabos"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setTipoEstacionId("03"); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia con documentacion aduanera + DocumentoAduanero doc = new DocumentoAduanero(); + doc.setTipoDocumentoId("01"); + doc.setNumPedimento("23 43 0472 8000448"); + doc.setRfcImpo("EKU9003173C9"); + List docs = new ArrayList<>(); + docs.add(doc); + + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setDocumentacionAduanera(docs); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // TipoFigura (operador, licencia) + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("a234567890"); + figura.setNombreFigura("NombreFigura"); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Entrada"); + cartaPorte.setPaisOrigenDestinoId("AFG"); + cartaPorte.setViaEntradaSalidaId("03"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteAereo(buildTransporteAereoCP()); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + ApiResponse apiResponse = client.getInvoiceService().create( + buildInvoice(buildIssuerEKU(), buildRecipientEKU(), items, complement)); + System.out.println(apiResponse); + } + + // Factura ingreso transporte maritimo nacional + private void facturaIngresoTransporteMaritimoNacional(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Ubicacion Origen (PM001 / Rosarito, CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("PM001"); + origen.setNombreEstacion("Rosarito"); + origen.setNavegacionTraficoId("Altura"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (PM001 / Rosarito, COA/MEX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumEstacionId("PM001"); + destino.setNombreEstacion("Rosarito"); + destino.setNavegacionTraficoId("Altura"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setTipoEstacionId("03"); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia with detalleMercancia + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + DetalleMercancia detalle = new DetalleMercancia(); + detalle.setUnidadPesoMercId("Tu"); + detalle.setPesoBruto(new BigDecimal("1")); + detalle.setPesoNeto(new BigDecimal("1")); + detalle.setPesoTara(new BigDecimal("0.001")); + detalle.setNumPiezas(1); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setCantidadTransporta(cantTransList); + mercancia.setDetalleMercancia(detalle); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("1")); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteMaritimo(buildTransporteMaritimo()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + ApiResponse apiResponse = client.getInvoiceService().create( + buildInvoice(buildIssuerEKU(), buildRecipientEKU(), items, complement)); + System.out.println(apiResponse); + } + + // Factura ingreso transporte maritimo extranjero (salida) + private void facturaIngresoTransporteMaritimoExtranjero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("EXD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (PM001 / Rosarito, CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("PM001"); + origen.setNombreEstacion("Rosarito"); + origen.setNavegacionTraficoId("Altura"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (PM120 / NombreEstacion, USA/TX — foreign) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("ST"); + domDestino.setNumeroExterior("12345"); + domDestino.setColoniaId("N/A"); + domDestino.setReferencia("N/A"); + domDestino.setMunicipioId("N/A"); + domDestino.setEstadoId("TX"); + domDestino.setPaisId("USA"); + domDestino.setCodigoPostalId("12345"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("XEXX010101000"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumRegIdTrib("01010101"); + destino.setResidenciaFiscalId("USA"); + destino.setNumEstacionId("PM120"); + destino.setNombreEstacion("NombreEstacion"); + destino.setNavegacionTraficoId("Altura"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia with detalleMercancia and tipoMateria + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + DetalleMercancia detalle = new DetalleMercancia(); + detalle.setUnidadPesoMercId("Tu"); + detalle.setPesoBruto(new BigDecimal("1")); + detalle.setPesoNeto(new BigDecimal("1")); + detalle.setPesoTara(new BigDecimal("0.001")); + detalle.setNumPiezas(1); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setCantidadTransporta(cantTransList); + mercancia.setDetalleMercancia(detalle); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Salida"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("02"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("1")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteMaritimo(buildTransporteMaritimo()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + ApiResponse apiResponse = client.getInvoiceService().create( + buildInvoice(buildIssuerEKU(), buildRecipientEKU(), items, complement)); + System.out.println(apiResponse); + } + + // Factura ingreso transporte maritimo internacional aduanero (entrada, IMD x2) + private void facturaIngresoTransporteMaritimoInternacionalAduanero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero (two IMD entries) + RegimenAduanero regimenAduanero1 = new RegimenAduanero(); + regimenAduanero1.setRegimenAduaneroId("IMD"); + RegimenAduanero regimenAduanero2 = new RegimenAduanero(); + regimenAduanero2.setRegimenAduaneroId("IMD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero1); + regimenAduaneros.add(regimenAduanero2); + + // Ubicacion Origen (EA0417 / Loreto, navegacionTrafico "Altura", CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("EA0417"); + origen.setNombreEstacion("Loreto"); + origen.setNavegacionTraficoId("Altura"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (PM001 / Rosarito, navegacionTrafico "Altura", COA/MEX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumEstacionId("PM001"); + destino.setNombreEstacion("Rosarito"); + destino.setNavegacionTraficoId("Altura"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T04:00:01")); + destino.setTipoEstacionId("02"); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia with documentacionAduanera, detalleMercancia, tipoMateria, cvesTransporteId + DocumentoAduanero doc = new DocumentoAduanero(); + doc.setTipoDocumentoId("01"); + doc.setNumPedimento("23 43 0472 8000448"); + doc.setRfcImpo("EKU9003173C9"); + List docs = new ArrayList<>(); + docs.add(doc); + + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + ct.setCvesTransporteId("02"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + DetalleMercancia detalle = new DetalleMercancia(); + detalle.setUnidadPesoMercId("X1A"); + detalle.setPesoBruto(new BigDecimal("1.50")); + detalle.setPesoNeto(new BigDecimal("1.00")); + detalle.setPesoTara(new BigDecimal("0.50")); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2003-04-02T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setFormaFarmaceuticaId("01"); + mercancia.setCondicionesEspTranspId("01"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1.50")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setFraccionArancelariaId("6309000100"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setDocumentacionAduanera(docs); + mercancia.setCantidadTransporta(cantTransList); + mercancia.setDetalleMercancia(detalle); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // TipoFigura (tipoFiguraId "01", numLicencia, AFG domicilio) + TipoFiguraDomicilio domFigura = new TipoFiguraDomicilio(); + domFigura.setCalle("Calle1"); + domFigura.setNumeroExterior("NumeroExterior1"); + domFigura.setNumeroInterior("NumeroInterior1"); + domFigura.setColoniaId("Colonia1"); + domFigura.setLocalidadId("Localidad1"); + domFigura.setReferencia("Referencia1"); + domFigura.setMunicipioId("Municipio1"); + domFigura.setEstadoId("Estado1"); + domFigura.setPaisId("AFG"); + domFigura.setCodigoPostalId("CodigoPosta1"); + + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("NumLicencia1"); + figura.setNombreFigura("NombreFigura1"); + figura.setDomicilio(domFigura); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Entrada"); + cartaPorte.setPaisOrigenDestinoId("AFG"); + cartaPorte.setViaEntradaSalidaId("01"); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("1")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteMaritimo(buildTransporteMaritimo()); + cartaPorte.setTransporteAereo(buildTransporteAereoCP()); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setPaymentFormCode("01"); + invoice.setPaymentMethodCode("PUE"); + invoice.setCurrencyCode("MXN"); + invoice.setTypeCode("I"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("CP3.1"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse = client.getInvoiceService().create(invoice); + System.out.println(apiResponse); + } + + // Factura traslado autotransporte nacional + private void facturaTrasladoAutoTransporteNacional(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Ubicacion Origen (no station, CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (no station, COA/MEX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDistanciaRecorrida(new BigDecimal("1")); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia (simplified, fechaCaducidad 2028-01-01, no formaFarmaceutica/condiciones/fraccion) + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // Autotransporte + Remolque remolque = new Remolque(); + remolque.setSubTipoRemId("CTR004"); + remolque.setPlaca("VL45K98"); + List remolques = new ArrayList<>(); + remolques.add(remolque); + + Autotransporte autotransporte = new Autotransporte(); + autotransporte.setPermSCTId("TPAF01"); + autotransporte.setNumPermisoSCT("NumPermisoSCT1"); + autotransporte.setConfigVehicularId("VL"); + autotransporte.setPesoBrutoVehicular(new BigDecimal("1")); + autotransporte.setPlacaVM("plac892"); + autotransporte.setAnioModeloVM(2020); + autotransporte.setAseguraRespCivil("AseguraRespCivil"); + autotransporte.setPolizaRespCivil("123456789"); + autotransporte.setRemolques(remolques); + + // TipoFigura (no domicilio) + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("a234567890"); + figura.setNombreFigura("NombreFigura"); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setTotalDistRec(new BigDecimal("1")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setLogisticaInversaRecoleccionDevolucionId("Sí"); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setAutotransporte(autotransporte); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse = client.getInvoiceService().create(invoice); + System.out.println(apiResponse); + } + + // Factura traslado autotransporte extranjero (salida, EXD) + private void facturaTrasladoAutoTransporteExtranjero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("EXD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (foreign USA/TX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("ST"); + domOrigen.setNumeroExterior("214"); + domOrigen.setColoniaId("N/A"); + domOrigen.setReferencia("WHITE HOUSE"); + domOrigen.setMunicipioId("N/A"); + domOrigen.setEstadoId("TX"); + domOrigen.setPaisId("USA"); + domOrigen.setCodigoPostalId("N/A"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("XEXX010101000"); + origen.setNumRegIdTrib("01010101"); + origen.setResidenciaFiscalId("USA"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (foreign USA/TX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("ST"); + domDestino.setNumeroExterior("214"); + domDestino.setColoniaId("N/A"); + domDestino.setReferencia("WHITE HOUSE"); + domDestino.setMunicipioId("N/A"); + domDestino.setEstadoId("TX"); + domDestino.setPaisId("USA"); + domDestino.setCodigoPostalId("N/A"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("XEXX010101000"); + destino.setNumRegIdTrib("01010101"); + destino.setResidenciaFiscalId("USA"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDistanciaRecorrida(new BigDecimal("1")); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia (tipoMateria, fraccionArancelaria, no detalleMercancia, no documentacionAduanera) + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2003-04-02T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setFormaFarmaceuticaId("01"); + mercancia.setCondicionesEspTranspId("01"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setFraccionArancelariaId("6309000100"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // Autotransporte + Remolque remolque = new Remolque(); + remolque.setSubTipoRemId("CTR004"); + remolque.setPlaca("VL45K98"); + List remolques = new ArrayList<>(); + remolques.add(remolque); + + Autotransporte autotransporte = new Autotransporte(); + autotransporte.setPermSCTId("TPAF01"); + autotransporte.setNumPermisoSCT("NumPermisoSCT1"); + autotransporte.setConfigVehicularId("VL"); + autotransporte.setPesoBrutoVehicular(new BigDecimal("1")); + autotransporte.setPlacaVM("plac892"); + autotransporte.setAnioModeloVM(2020); + autotransporte.setAseguraRespCivil("AseguraRespCivil"); + autotransporte.setPolizaRespCivil("123456789"); + autotransporte.setRemolques(remolques); + + // TipoFigura with USA domicilio + TipoFiguraDomicilio domFigura = new TipoFiguraDomicilio(); + domFigura.setCalle("ST"); + domFigura.setNumeroExterior("214"); + domFigura.setColoniaId("N/A"); + domFigura.setReferencia("WHITE HOUSE"); + domFigura.setMunicipioId("N/A"); + domFigura.setEstadoId("TX"); + domFigura.setPaisId("USA"); + domFigura.setCodigoPostalId("N/A"); + + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("NumLicencia1"); + figura.setNombreFigura("NombreFigura1"); + figura.setDomicilio(domFigura); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Salida"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("01"); + cartaPorte.setTotalDistRec(new BigDecimal("1")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setLogisticaInversaRecoleccionDevolucionId("Sí"); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setAutotransporte(autotransporte); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("SerieCCP31"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse = client.getInvoiceService().create(invoice); + System.out.println(apiResponse); + } + + // Factura traslado autotransporte internacional aduanero (entrada, IMD) + private void facturaTrasladoAutoTransporteInternacionalAduanero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("IMD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (foreign USA/TX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("ST"); + domOrigen.setNumeroExterior("214"); + domOrigen.setColoniaId("N/A"); + domOrigen.setReferencia("WHITE HOUSE"); + domOrigen.setMunicipioId("N/A"); + domOrigen.setEstadoId("TX"); + domOrigen.setPaisId("USA"); + domOrigen.setCodigoPostalId("N/A"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("XEXX010101000"); + origen.setNumRegIdTrib("01010101"); + origen.setResidenciaFiscalId("USA"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (foreign USA/TX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("ST"); + domDestino.setNumeroExterior("214"); + domDestino.setColoniaId("N/A"); + domDestino.setReferencia("WHITE HOUSE"); + domDestino.setMunicipioId("N/A"); + domDestino.setEstadoId("TX"); + domDestino.setPaisId("USA"); + domDestino.setCodigoPostalId("N/A"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("XEXX010101000"); + destino.setNumRegIdTrib("01010101"); + destino.setResidenciaFiscalId("USA"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDistanciaRecorrida(new BigDecimal("1")); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia with documentacionAduanera, tipoMateria, fraccionArancelaria + DocumentoAduanero doc = new DocumentoAduanero(); + doc.setTipoDocumentoId("01"); + doc.setNumPedimento("23 43 0472 8000448"); + doc.setRfcImpo("EKU9003173C9"); + List docs = new ArrayList<>(); + docs.add(doc); + + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2003-04-02T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setFormaFarmaceuticaId("01"); + mercancia.setCondicionesEspTranspId("01"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setFraccionArancelariaId("6309000100"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setDocumentacionAduanera(docs); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // Autotransporte + Remolque remolque = new Remolque(); + remolque.setSubTipoRemId("CTR004"); + remolque.setPlaca("VL45K98"); + List remolques = new ArrayList<>(); + remolques.add(remolque); + + Autotransporte autotransporte = new Autotransporte(); + autotransporte.setPermSCTId("TPAF01"); + autotransporte.setNumPermisoSCT("NumPermisoSCT1"); + autotransporte.setConfigVehicularId("VL"); + autotransporte.setPesoBrutoVehicular(new BigDecimal("1")); + autotransporte.setPlacaVM("plac892"); + autotransporte.setAnioModeloVM(2020); + autotransporte.setAseguraRespCivil("AseguraRespCivil"); + autotransporte.setPolizaRespCivil("123456789"); + autotransporte.setRemolques(remolques); + + // TipoFigura with USA domicilio + TipoFiguraDomicilio domFigura = new TipoFiguraDomicilio(); + domFigura.setCalle("ST"); + domFigura.setNumeroExterior("214"); + domFigura.setColoniaId("N/A"); + domFigura.setReferencia("WHITE HOUSE"); + domFigura.setMunicipioId("N/A"); + domFigura.setEstadoId("TX"); + domFigura.setPaisId("USA"); + domFigura.setCodigoPostalId("N/A"); + + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("NumLicencia1"); + figura.setNombreFigura("NombreFigura1"); + figura.setDomicilio(domFigura); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Entrada"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("01"); + cartaPorte.setTotalDistRec(new BigDecimal("1")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setLogisticaInversaRecoleccionDevolucionId("Sí"); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setAutotransporte(autotransporte); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("SerieCCP31"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse = client.getInvoiceService().create(invoice); + System.out.println(apiResponse); + } + + // Ejemplo 17: Factura traslado transporte ferroviario nacional + private void facturaTrasladoTransporteFerroviarioNacional(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Ubicaciones: comunes + destino 5 (JM047/HUEHUETOCA, tipoEstacion "03", COA) + List ubicaciones = buildUbicacionesFerroviarioComunes(); + UbicacionDomicilio domDest5 = new UbicacionDomicilio(); + domDest5.setCalle("Calle2"); + domDest5.setNumeroExterior("214"); + domDest5.setNumeroInterior("215"); + domDest5.setColoniaId("0347"); + domDest5.setLocalidadId("23"); + domDest5.setReferencia("casa negra"); + domDest5.setMunicipioId("004"); + domDest5.setEstadoId("COA"); + domDest5.setPaisId("MEX"); + domDest5.setCodigoPostalId("25350"); + + Ubicacion dest5 = new Ubicacion(); + dest5.setTipoUbicacion("Destino"); + dest5.setIdUbicacion("DE202025"); + dest5.setRfcRemitenteDestinatario("EKU9003173C9"); + dest5.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest5.setNumEstacionId("JM047"); + dest5.setNombreEstacion("HUEHUETOCA"); + dest5.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T05:00:01")); + dest5.setTipoEstacionId("03"); + dest5.setDistanciaRecorrida(new BigDecimal("100.00")); + dest5.setDomicilio(domDest5); + ubicaciones.add(dest5); + + // Mercancia + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202025"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setTotalDistRec(new BigDecimal("500")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteFerroviario(buildTransporteFerroviario()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse17 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse17); + } + + // Ejemplo 18: Factura traslado transporte ferroviario extranjero + private void facturaTrasladoTransporteFerroviarioExtranjero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("EXD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicaciones: comunes + destino 5 (XEXX010101000, USA address) + List ubicaciones = buildUbicacionesFerroviarioComunes(); + UbicacionDomicilio domDest5 = new UbicacionDomicilio(); + domDest5.setCalle("ST"); + domDest5.setNumeroExterior("1234"); + domDest5.setColoniaId("1234"); + domDest5.setReferencia("WHITE HOUSE"); + domDest5.setMunicipioId("1234"); + domDest5.setEstadoId("TX"); + domDest5.setPaisId("USA"); + domDest5.setCodigoPostalId("12345"); + + Ubicacion dest5 = new Ubicacion(); + dest5.setTipoUbicacion("Destino"); + dest5.setIdUbicacion("DE202025"); + dest5.setRfcRemitenteDestinatario("XEXX010101000"); + dest5.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest5.setNumRegIdTrib("01010101"); + dest5.setResidenciaFiscalId("USA"); + dest5.setNumEstacionId("EF0001"); + dest5.setNombreEstacion("NombreEstacion"); + dest5.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T05:00:01")); + dest5.setDistanciaRecorrida(new BigDecimal("100.00")); + dest5.setDomicilio(domDest5); + ubicaciones.add(dest5); + + // Mercancia (with tipoMateria) + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202025"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Salida"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("04"); + cartaPorte.setTotalDistRec(new BigDecimal("500")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteFerroviario(buildTransporteFerroviario()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse18 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse18); + } + + // Ejemplo 19: Factura traslado transporte ferroviario internacional aduanero (entrada, IMD) + private void facturaTrasladoTransporteFerroviarioInternacionalAduanero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("IMD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicaciones: comunes + destino 5 (JM047/HUEHUETOCA, tipoEstacion "03", COA) + List ubicaciones = buildUbicacionesFerroviarioComunes(); + UbicacionDomicilio domDest5 = new UbicacionDomicilio(); + domDest5.setCalle("Calle2"); + domDest5.setNumeroExterior("214"); + domDest5.setNumeroInterior("215"); + domDest5.setColoniaId("0347"); + domDest5.setLocalidadId("23"); + domDest5.setReferencia("casa negra"); + domDest5.setMunicipioId("004"); + domDest5.setEstadoId("COA"); + domDest5.setPaisId("MEX"); + domDest5.setCodigoPostalId("25350"); + + Ubicacion dest5 = new Ubicacion(); + dest5.setTipoUbicacion("Destino"); + dest5.setIdUbicacion("DE202025"); + dest5.setRfcRemitenteDestinatario("EKU9003173C9"); + dest5.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest5.setNumEstacionId("JM047"); + dest5.setNombreEstacion("HUEHUETOCA"); + dest5.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T05:00:01")); + dest5.setTipoEstacionId("03"); + dest5.setDistanciaRecorrida(new BigDecimal("100.00")); + dest5.setDomicilio(domDest5); + ubicaciones.add(dest5); + + // Mercancia con documentacion aduanera y tipoMateria + DocumentoAduanero doc = new DocumentoAduanero(); + doc.setTipoDocumentoId("01"); + doc.setNumPedimento("23 43 0472 8000448"); + doc.setRfcImpo("EKU9003173C9"); + List docs = new ArrayList<>(); + docs.add(doc); + + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202025"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setDocumentacionAduanera(docs); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Entrada"); + cartaPorte.setPaisOrigenDestinoId("AFG"); + cartaPorte.setViaEntradaSalidaId("04"); + cartaPorte.setTotalDistRec(new BigDecimal("500")); + cartaPorte.setRegistroISTMOId("Sí"); + cartaPorte.setUbicacionPoloOrigenId("01"); + cartaPorte.setUbicacionPoloDestinoId("01"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteFerroviario(buildTransporteFerroviario()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse19 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse19); + } + + // Ejemplo 20: Factura traslado transporte aereo nacional + private void facturaTrasladoTransporteAereoNacional(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Origen (aeropuerto EA0417, Loreto) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("EA0417"); + origen.setNombreEstacion("Loreto"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Destino (aeropuerto EA0418, Los Cabos) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumEstacionId("EA0418"); + destino.setNombreEstacion("Los Cabos"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setTipoEstacionId("03"); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia (with valorMercancia and monedaId) + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // TransporteAereo + TransporteAereo transporteAereo = new TransporteAereo(); + transporteAereo.setPermSCTId("TPAF01"); + transporteAereo.setNumPermisoSCT("Demo"); + transporteAereo.setMatriculaAeronave("61E5-WZ"); + transporteAereo.setNombreAseg("NombreAseg"); + transporteAereo.setNumPolizaSeguro("NumPolizaSeguro"); + transporteAereo.setNumeroGuia("acUbYlBVTmlzx"); + transporteAereo.setLugarContrato("LugarContrato"); + transporteAereo.setCodigoTransportistaId("CA001"); + transporteAereo.setRfcEmbarcador("EKU9003173C9"); + transporteAereo.setNombreEmbarcador("Embarcador"); + + // TipoFigura (tipoFiguraId "01", numLicencia, no partesTransporte) + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("a234567890"); + figura.setNombreFigura("NombreFigura"); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteAereo(transporteAereo); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse20 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse20); + } + + // Ejemplo 21: Factura traslado transporte aereo extranjero (salida, EXD) + private void facturaTrasladoTransporteAereoExtranjero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("EXD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (EA0417 / Loreto, COA/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle2"); + domOrigen.setNumeroExterior("214"); + domOrigen.setNumeroInterior("215"); + domOrigen.setColoniaId("0347"); + domOrigen.setLocalidadId("23"); + domOrigen.setReferencia("casa negra"); + domOrigen.setMunicipioId("004"); + domOrigen.setEstadoId("COA"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("25350"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("EA0417"); + origen.setNombreEstacion("Loreto"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (EA0143 / Phoenix-Mesa Gateway, USA/TX — foreign) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("ST"); + domDestino.setNumeroExterior("12344"); + domDestino.setColoniaId("N/A"); + domDestino.setReferencia("WHITE HOUSE"); + domDestino.setMunicipioId("N/A"); + domDestino.setEstadoId("TX"); + domDestino.setPaisId("USA"); + domDestino.setCodigoPostalId("12345"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("XEXX010101000"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario"); + destino.setNumRegIdTrib("01010101"); + destino.setResidenciaFiscalId("USA"); + destino.setNumEstacionId("EA0143"); + destino.setNombreEstacion("Phoenix-Mesa Gateway"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // TipoFigura (operador, licencia, no partesTransporte, no domicilio) + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("a234567890"); + figura.setNombreFigura("NombreFigura"); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Salida"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("03"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteAereo(buildTransporteAereoCP()); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse21 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse21); + } + + // Ejemplo 22: Factura traslado transporte aereo internacional aduanero (entrada, IMD) + private void facturaTrasladoTransporteAereoInternacionalAduanero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("IMD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (EA0417 / Loreto, CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("EA0417"); + origen.setNombreEstacion("Loreto"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (EA0418 / Los Cabos, COA/MEX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumEstacionId("EA0418"); + destino.setNombreEstacion("Los Cabos"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setTipoEstacionId("03"); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia con documentacion aduanera y tipoMateria + DocumentoAduanero doc = new DocumentoAduanero(); + doc.setTipoDocumentoId("01"); + doc.setNumPedimento("23 43 0472 8000448"); + doc.setRfcImpo("EKU9003173C9"); + List docs = new ArrayList<>(); + docs.add(doc); + + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setDocumentacionAduanera(docs); + mercancia.setCantidadTransporta(cantTransList); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // TipoFigura (operador, licencia, no partesTransporte, no domicilio) + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("01"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNumLicencia("a234567890"); + figura.setNombreFigura("NombreFigura"); + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Entrada"); + cartaPorte.setPaisOrigenDestinoId("AFG"); + cartaPorte.setViaEntradaSalidaId("03"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("10")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteAereo(buildTransporteAereoCP()); + cartaPorte.setTiposFigura(tiposFigura); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse22 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse22); + } + + // Ejemplo 23: Factura traslado transporte maritimo nacional + private void facturaTrasladoTransporteMaritimoNacional(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Ubicacion Origen (PM001 / Rosarito, CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("PM001"); + origen.setNombreEstacion("Rosarito"); + origen.setNavegacionTraficoId("Altura"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (PM001 / Rosarito, COA/MEX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumEstacionId("PM001"); + destino.setNombreEstacion("Rosarito"); + destino.setNavegacionTraficoId("Altura"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setTipoEstacionId("03"); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia with detalleMercancia + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + DetalleMercancia detalle = new DetalleMercancia(); + detalle.setUnidadPesoMercId("Tu"); + detalle.setPesoBruto(new BigDecimal("1")); + detalle.setPesoNeto(new BigDecimal("1")); + detalle.setPesoTara(new BigDecimal("0.001")); + detalle.setNumPiezas(1); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setCantidadTransporta(cantTransList); + mercancia.setDetalleMercancia(detalle); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("No"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("1")); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteMaritimo(buildTransporteMaritimo()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse23 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse23); + } + + // Ejemplo 24: Factura traslado transporte maritimo extranjero (salida, EXD) + private void facturaTrasladoTransporteMaritimoExtranjero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero + RegimenAduanero regimenAduanero = new RegimenAduanero(); + regimenAduanero.setRegimenAduaneroId("EXD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero); + + // Ubicacion Origen (PM001 / Rosarito, CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("PM001"); + origen.setNombreEstacion("Rosarito"); + origen.setNavegacionTraficoId("Altura"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (PM120 / NombreEstacion, USA/TX — foreign) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("ST"); + domDestino.setNumeroExterior("12345"); + domDestino.setColoniaId("N/A"); + domDestino.setReferencia("N/A"); + domDestino.setMunicipioId("N/A"); + domDestino.setEstadoId("TX"); + domDestino.setPaisId("USA"); + domDestino.setCodigoPostalId("12345"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("XEXX010101000"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumRegIdTrib("01010101"); + destino.setResidenciaFiscalId("USA"); + destino.setNumEstacionId("PM120"); + destino.setNombreEstacion("NombreEstacion"); + destino.setNavegacionTraficoId("Altura"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia with detalleMercancia and tipoMateria + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + DetalleMercancia detalle = new DetalleMercancia(); + detalle.setUnidadPesoMercId("Tu"); + detalle.setPesoBruto(new BigDecimal("1")); + detalle.setPesoNeto(new BigDecimal("1")); + detalle.setPesoTara(new BigDecimal("0.001")); + detalle.setNumPiezas(1); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setCantidadTransporta(cantTransList); + mercancia.setDetalleMercancia(detalle); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Salida"); + cartaPorte.setPaisOrigenDestinoId("USA"); + cartaPorte.setViaEntradaSalidaId("02"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("1")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteMaritimo(buildTransporteMaritimo()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse24 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse24); + } + + // Ejemplo 25: Factura traslado transporte maritimo internacional aduanero (entrada, IMD x2) + private void facturaTrasladoTransporteMaritimoInternacionalAduanero(FiscalApiSettings settings) { + FiscalApiClient client = FiscalApiClient.create(settings); + List items = new ArrayList<>(); + items.add(buildStandardItem()); + + // Regimen aduanero (two IMD entries) + RegimenAduanero regimenAduanero1 = new RegimenAduanero(); + regimenAduanero1.setRegimenAduaneroId("IMD"); + RegimenAduanero regimenAduanero2 = new RegimenAduanero(); + regimenAduanero2.setRegimenAduaneroId("IMD"); + List regimenAduaneros = new ArrayList<>(); + regimenAduaneros.add(regimenAduanero1); + regimenAduaneros.add(regimenAduanero2); + + // Ubicacion Origen (PM001 / Rosarito, CMX/MEX) + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("PM001"); + origen.setNombreEstacion("Rosarito"); + origen.setNavegacionTraficoId("Altura"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + // Ubicacion Destino (PM001 / Rosarito, COA/MEX) + UbicacionDomicilio domDestino = new UbicacionDomicilio(); + domDestino.setCalle("Calle2"); + domDestino.setNumeroExterior("214"); + domDestino.setNumeroInterior("215"); + domDestino.setColoniaId("0347"); + domDestino.setLocalidadId("23"); + domDestino.setReferencia("casa negra"); + domDestino.setMunicipioId("004"); + domDestino.setEstadoId("COA"); + domDestino.setPaisId("MEX"); + domDestino.setCodigoPostalId("25350"); + + Ubicacion destino = new Ubicacion(); + destino.setTipoUbicacion("Destino"); + destino.setIdUbicacion("DE202020"); + destino.setRfcRemitenteDestinatario("EKU9003173C9"); + destino.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + destino.setNumEstacionId("PM001"); + destino.setNombreEstacion("Rosarito"); + destino.setNavegacionTraficoId("Altura"); + destino.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:01")); + destino.setTipoEstacionId("03"); + destino.setDomicilio(domDestino); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(destino); + + // Mercancia with documentacionAduanera, detalleMercancia, and tipoMateria + DocumentoAduanero doc = new DocumentoAduanero(); + doc.setTipoDocumentoId("01"); + doc.setNumPedimento("23 43 0472 8000448"); + doc.setRfcImpo("EKU9003173C9"); + List docs = new ArrayList<>(); + docs.add(doc); + + CantidadTransporta ct = new CantidadTransporta(); + ct.setCantidad(new BigDecimal("1")); + ct.setIdOrigen("OR101010"); + ct.setIdDestino("DE202020"); + List cantTransList = new ArrayList<>(); + cantTransList.add(ct); + + DetalleMercancia detalle = new DetalleMercancia(); + detalle.setUnidadPesoMercId("Tu"); + detalle.setPesoBruto(new BigDecimal("1")); + detalle.setPesoNeto(new BigDecimal("1")); + detalle.setPesoTara(new BigDecimal("0.001")); + detalle.setNumPiezas(1); + + Mercancia mercancia = new Mercancia(); + mercancia.setBienesTranspId("11121900"); + mercancia.setDescripcion("Accesorios de equipo de telefonía"); + mercancia.setCantidad(new BigDecimal("1.0")); + mercancia.setClaveUnidadId("XBX"); + mercancia.setMaterialPeligrosoId("No"); + mercancia.setDenominacionGenericaProd("DenominacionGenericaProd1"); + mercancia.setDenominacionDistintivaProd("DenominacionDistintivaProd1"); + mercancia.setFabricante("Fabricante1"); + mercancia.setFechaCaducidad(LocalDateTime.parse("2028-01-01T00:00:00")); + mercancia.setLoteMedicamento("LoteMedic1"); + mercancia.setRegistroSanitarioFolioAutorizacion("RegistroSanita1"); + mercancia.setPesoEnKg(new BigDecimal("1")); + mercancia.setValorMercancia(new BigDecimal("100")); + mercancia.setMonedaId("MXN"); + mercancia.setTipoMateriaId("05"); + mercancia.setDescripcionMateria("otramateria"); + mercancia.setDocumentacionAduanera(docs); + mercancia.setCantidadTransporta(cantTransList); + mercancia.setDetalleMercancia(detalle); + List mercancias = new ArrayList<>(); + mercancias.add(mercancia); + + // CartaPorte + CartaPorte cartaPorte = new CartaPorte(); + cartaPorte.setTranspInternacId("Sí"); + cartaPorte.setEntradaSalidaMercId("Entrada"); + cartaPorte.setPaisOrigenDestinoId("AFG"); + cartaPorte.setViaEntradaSalidaId("02"); + cartaPorte.setUnidadPesoId("XBX"); + cartaPorte.setPesoNetoTotal(new BigDecimal("1")); + cartaPorte.setRegimenAduaneros(regimenAduaneros); + cartaPorte.setUbicaciones(ubicaciones); + cartaPorte.setMercancias(mercancias); + cartaPorte.setTransporteMaritimo(buildTransporteMaritimo()); + cartaPorte.setTiposFigura(buildTiposFiguraFerroviario()); + + Complement complement = new Complement(); + complement.setCartaPorte(cartaPorte); + + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setCurrencyCode("XXX"); + invoice.setTypeCode("T"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(buildIssuerEKU()); + invoice.setRecipient(buildRecipientEKU()); + invoice.setItems(items); + invoice.setComplement(complement); + + ApiResponse apiResponse25 = client.getInvoiceService().create(invoice); + System.out.println(apiResponse25); + } + + // ── Helper methods ────────────────────────────────────────────────────────── + + private List buildTaxCredentials() { + TaxCredential cer = new TaxCredential(); + cer.setBase64File(escuelaKemperUrgateBase64Cer); + cer.setFileType(0); + cer.setPassword(password); + TaxCredential key = new TaxCredential(); + key.setBase64File(escuelaKemperUrgateBase64Key); + key.setFileType(1); + key.setPassword(password); + List credentials = new ArrayList<>(); + credentials.add(cer); + credentials.add(key); + return credentials; + } + + private InvoiceIssuer buildIssuerEKU() { + InvoiceIssuer issuer = new InvoiceIssuer(); + issuer.setTin("EKU9003173C9"); + issuer.setLegalName("ESCUELA KEMPER URGATE"); + issuer.setTaxRegimeCode("601"); + issuer.setTaxCredentials(buildTaxCredentials()); + return issuer; + } + + private InvoiceRecipient buildRecipientEKU() { + InvoiceRecipient recipient = new InvoiceRecipient(); + recipient.setTin("EKU9003173C9"); + recipient.setLegalName("ESCUELA KEMPER URGATE"); + recipient.setZipCode("42501"); + recipient.setTaxRegimeCode("601"); + recipient.setCfdiUseCode("S01"); + return recipient; + } + + private InvoiceItem buildStandardItem() { + InvoiceItem item = new InvoiceItem(); + item.setItemCode("78101800"); + item.setItemSku("UT421511"); + item.setQuantity(new BigDecimal("1")); + item.setUnitOfMeasurementCode("H87"); + item.setDescription("Transporte de carga por carretera"); + item.setUnitPrice(new BigDecimal("100.00")); + item.setDiscount(new BigDecimal("0")); + item.setTaxObjectCode("01"); + item.setItemTaxes(new ArrayList<>()); + return item; + } + + private Invoice buildInvoice(InvoiceIssuer issuer, InvoiceRecipient recipient, + List items, Complement complement) { + Invoice invoice = new Invoice(); + invoice.setVersionCode("4.0"); + invoice.setPaymentFormCode("01"); + invoice.setPaymentMethodCode("PUE"); + invoice.setCurrencyCode("MXN"); + invoice.setTypeCode("I"); + invoice.setExpeditionZipCode("42501"); + invoice.setSeries("Serie"); + invoice.setDate(OptUtil.parseLocalDateTime(LocalDateTime.now().toString())); + invoice.setExchangeRate(new BigDecimal("1")); + invoice.setExportCode("01"); + invoice.setIssuer(issuer); + invoice.setRecipient(recipient); + invoice.setItems(items); + invoice.setComplement(complement); + return invoice; + } + + private TransporteAereo buildTransporteAereoCP() { + TransporteAereo transporteAereo = new TransporteAereo(); + transporteAereo.setPermSCTId("TPAF01"); + transporteAereo.setNumPermisoSCT("Demo"); + transporteAereo.setMatriculaAeronave("61E5-WZ"); + transporteAereo.setNombreAseg("NombreAseg"); + transporteAereo.setNumPolizaSeguro("NumPolizaSeguro"); + transporteAereo.setNumeroGuia("acUbYlBVTmlzx"); + transporteAereo.setLugarContrato("LugarContrato"); + transporteAereo.setCodigoTransportistaId("CA001"); + transporteAereo.setRfcEmbarcador("EKU9003173C9"); + transporteAereo.setNombreEmbarcador("Embarcador"); + return transporteAereo; + } + + private TransporteMaritimo buildTransporteMaritimo() { + RemolqueCCP remolqueCCP = new RemolqueCCP(); + remolqueCCP.setSubTipoRemCCPId("CTR001"); + remolqueCCP.setPlacaCCP("JNG7636"); + List remolquesCCP = new ArrayList<>(); + remolquesCCP.add(remolqueCCP); + + ContenedorMaritimo contenedor = new ContenedorMaritimo(); + contenedor.setTipoContenedorId("CM011"); + contenedor.setIdCCPRelacionado("CCCBCD94-870A-4332-A52A-A52AA52AA52A"); + contenedor.setPlacaVMCCP("JNG7683"); + contenedor.setFechaCertificacionCCP(OptUtil.parseLocalDateTime("2024-06-20T11:11:00")); + contenedor.setRemolquesCCP(remolquesCCP); + List contenedores = new ArrayList<>(); + contenedores.add(contenedor); + + TransporteMaritimo maritimo = new TransporteMaritimo(); + maritimo.setPermSCTId("TPAF01"); + maritimo.setNumPermisoSCT("NumPermisoSCT1"); + maritimo.setNombreAseg("NombreAseg1"); + maritimo.setNumPolizaSeguro("NumPolizaSeguro1"); + maritimo.setTipoEmbarcacionId("B01"); + maritimo.setMatricula("Matricula1"); + maritimo.setNumeroOMI("IMO1234567"); + maritimo.setAnioEmbarcacion(2003); + maritimo.setNombreEmbarc("NombreEmbarc1"); + maritimo.setNacionalidadEmbarcId("AFG"); + maritimo.setUnidadesDeArqBruto(new BigDecimal("0.001")); + maritimo.setTipoCargaId("CGS"); + maritimo.setEslora(new BigDecimal("0.01")); + maritimo.setManga(new BigDecimal("0.01")); + maritimo.setCalado(new BigDecimal("0.01")); + maritimo.setPuntal(new BigDecimal("0.01")); + maritimo.setLineaNaviera("LineaNaviera1"); + maritimo.setNombreAgenteNaviero("NombreAgenteNaviero1"); + maritimo.setNumAutorizacionNavieroId("ANC001/2022"); + maritimo.setNumViaje("NumViaje1"); + maritimo.setNumConocEmbarc("NumConocEmbarc1"); + maritimo.setPermisoTempNavegacion("PermisoTempNavegac1"); + maritimo.setContenedores(contenedores); + return maritimo; + } + + private TransporteFerroviario buildTransporteFerroviario() { + DerechoDePaso derecho = new DerechoDePaso(); + derecho.setTipoDerechoDePasoId("CDP114"); + derecho.setKilometrajePagado(new BigDecimal("100")); + List derechos = new ArrayList<>(); + derechos.add(derecho); + + Carro carro = new Carro(); + carro.setTipoCarroId("TC08"); + carro.setMatriculaCarro("A00012"); + carro.setGuiaCarro("123ASD"); + carro.setToneladasNetasCarro(new BigDecimal("10")); + List carros = new ArrayList<>(); + carros.add(carro); + + TransporteFerroviario transporte = new TransporteFerroviario(); + transporte.setTipoDeServicioId("TS01"); + transporte.setTipoDeTraficoId("TT01"); + transporte.setDerechosDePaso(derechos); + transporte.setCarros(carros); + return transporte; + } + + private List buildTiposFiguraFerroviario() { + ParteTransporte parte = new ParteTransporte(); + parte.setParteTransporteId("PT02"); + List partes = new ArrayList<>(); + partes.add(parte); + + TipoFiguraDomicilio domicilio = new TipoFiguraDomicilio(); + domicilio.setCalle("calle"); + domicilio.setNumeroExterior("211"); + domicilio.setColoniaId("0814"); + domicilio.setLocalidadId("01"); + domicilio.setReferencia("casa blanca"); + domicilio.setMunicipioId("010"); + domicilio.setEstadoId("ZAC"); + domicilio.setPaisId("MEX"); + domicilio.setCodigoPostalId("99080"); + + TipoFigura figura = new TipoFigura(); + figura.setTipoFiguraId("02"); + figura.setRfcFigura("EKU9003173C9"); + figura.setNombreFigura("NombreFigura"); + figura.setPartesTransporte(partes); + figura.setDomicilio(domicilio); + + List tiposFigura = new ArrayList<>(); + tiposFigura.add(figura); + return tiposFigura; + } + + private List buildUbicacionesFerroviarioComunes() { + UbicacionDomicilio domOrigen = new UbicacionDomicilio(); + domOrigen.setCalle("Calle1"); + domOrigen.setNumeroExterior("211"); + domOrigen.setNumeroInterior("212"); + domOrigen.setColoniaId("1957"); + domOrigen.setLocalidadId("13"); + domOrigen.setReferencia("casa blanca"); + domOrigen.setMunicipioId("011"); + domOrigen.setEstadoId("CMX"); + domOrigen.setPaisId("MEX"); + domOrigen.setCodigoPostalId("13250"); + + Ubicacion origen = new Ubicacion(); + origen.setTipoUbicacion("Origen"); + origen.setIdUbicacion("OR101010"); + origen.setRfcRemitenteDestinatario("EKU9003173C9"); + origen.setNombreRemitenteDestinatario("NombreRemitenteDestinatario1"); + origen.setNumEstacionId("Q0736"); + origen.setNombreEstacion("SANTO NINO"); + origen.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T00:00:00")); + origen.setTipoEstacionId("01"); + origen.setDomicilio(domOrigen); + + Ubicacion dest1 = new Ubicacion(); + dest1.setTipoUbicacion("Destino"); + dest1.setIdUbicacion("DE202021"); + dest1.setRfcRemitenteDestinatario("EKU9003173C9"); + dest1.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest1.setNumEstacionId("SC283"); + dest1.setNombreEstacion("HUAXTITLA"); + dest1.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T01:00:01")); + dest1.setTipoEstacionId("02"); + dest1.setDistanciaRecorrida(new BigDecimal("100.00")); + + Ubicacion dest2 = new Ubicacion(); + dest2.setTipoUbicacion("Destino"); + dest2.setIdUbicacion("DE202022"); + dest2.setRfcRemitenteDestinatario("EKU9003173C9"); + dest2.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest2.setNumEstacionId("TG0"); + dest2.setNombreEstacion("NAVOJOA"); + dest2.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T02:00:01")); + dest2.setTipoEstacionId("02"); + dest2.setDistanciaRecorrida(new BigDecimal("100.00")); + + Ubicacion dest3 = new Ubicacion(); + dest3.setTipoUbicacion("Destino"); + dest3.setIdUbicacion("DE202023"); + dest3.setRfcRemitenteDestinatario("EKU9003173C9"); + dest3.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest3.setNumEstacionId("E0029"); + dest3.setNombreEstacion("TRES JAGUEYES"); + dest3.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T03:00:01")); + dest3.setTipoEstacionId("02"); + dest3.setDistanciaRecorrida(new BigDecimal("100.00")); + + Ubicacion dest4 = new Ubicacion(); + dest4.setTipoUbicacion("Destino"); + dest4.setIdUbicacion("DE202024"); + dest4.setRfcRemitenteDestinatario("EKU9003173C9"); + dest4.setNombreRemitenteDestinatario("NombreRemitenteDestinatario2"); + dest4.setNumEstacionId("TI032"); + dest4.setNombreEstacion("NAVOLATO"); + dest4.setFechaHoraSalidaLlegada(LocalDateTime.parse("2023-08-01T04:00:01")); + dest4.setTipoEstacionId("02"); + dest4.setDistanciaRecorrida(new BigDecimal("100.00")); + + List ubicaciones = new ArrayList<>(); + ubicaciones.add(origen); + ubicaciones.add(dest1); + ubicaciones.add(dest2); + ubicaciones.add(dest3); + ubicaciones.add(dest4); + return ubicaciones; + } +} diff --git a/src/main/java/com/fiscalapi/Examples.java b/src/main/java/com/fiscalapi/examples/Examples.java similarity index 99% rename from src/main/java/com/fiscalapi/Examples.java rename to src/main/java/com/fiscalapi/examples/Examples.java index a697aca..f16c038 100644 --- a/src/main/java/com/fiscalapi/Examples.java +++ b/src/main/java/com/fiscalapi/examples/Examples.java @@ -1,4 +1,4 @@ -package com.fiscalapi; +package com.fiscalapi.examples; //package com.fiscalapi; // diff --git a/src/main/java/com/fiscalapi/models/invoicing/Complement.java b/src/main/java/com/fiscalapi/models/invoicing/Complement.java index a6295cb..34c1ee6 100644 --- a/src/main/java/com/fiscalapi/models/invoicing/Complement.java +++ b/src/main/java/com/fiscalapi/models/invoicing/Complement.java @@ -1,5 +1,6 @@ package com.fiscalapi.models.invoicing; +import com.fiscalapi.models.invoicing.billOfLading.CartaPorte; import com.fiscalapi.models.invoicing.localTaxes.LocalTaxes; import com.fiscalapi.models.invoicing.paymentComplement.InvoicePayment; import com.fiscalapi.models.invoicing.payroll.Payroll; @@ -8,6 +9,7 @@ public class Complement { private Payroll payroll; private InvoicePayment payment; private LocalTaxes localTaxes; + private CartaPorte cartaPorte; public Payroll getPayroll() { return payroll; @@ -32,4 +34,12 @@ public LocalTaxes getLocalTaxes() { public void setLocalTaxes(LocalTaxes localTaxes) { this.localTaxes = localTaxes; } + + public CartaPorte getCartaPorte() { + return cartaPorte; + } + + public void setCartaPorte(CartaPorte cartaPorte) { + this.cartaPorte = cartaPorte; + } } diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/Autotransporte.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/Autotransporte.java new file mode 100644 index 0000000..05e0a83 --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/Autotransporte.java @@ -0,0 +1,142 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fiscalapi.serialization.BigDecimalSerializer; + +import java.math.BigDecimal; +import java.util.List; + +public class Autotransporte { + private String permSCTId; + private String numPermisoSCT; + private String configVehicularId; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal pesoBrutoVehicular; + + private String placaVM; + private int anioModeloVM; + private String aseguraRespCivil; + private String polizaRespCivil; + private String aseguraMedAmbiente; + private String polizaMedAmbiente; + private String aseguraCarga; + private String polizaCarga; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal primaSeguro; + + private List remolques; + + public String getPermSCTId() { + return permSCTId; + } + + public void setPermSCTId(String permSCTId) { + this.permSCTId = permSCTId; + } + + public String getNumPermisoSCT() { + return numPermisoSCT; + } + + public void setNumPermisoSCT(String numPermisoSCT) { + this.numPermisoSCT = numPermisoSCT; + } + + public String getConfigVehicularId() { + return configVehicularId; + } + + public void setConfigVehicularId(String configVehicularId) { + this.configVehicularId = configVehicularId; + } + + public BigDecimal getPesoBrutoVehicular() { + return pesoBrutoVehicular; + } + + public void setPesoBrutoVehicular(BigDecimal pesoBrutoVehicular) { + this.pesoBrutoVehicular = pesoBrutoVehicular; + } + + public String getPlacaVM() { + return placaVM; + } + + public void setPlacaVM(String placaVM) { + this.placaVM = placaVM; + } + + public int getAnioModeloVM() { + return anioModeloVM; + } + + public void setAnioModeloVM(int anioModeloVM) { + this.anioModeloVM = anioModeloVM; + } + + public String getAseguraRespCivil() { + return aseguraRespCivil; + } + + public void setAseguraRespCivil(String aseguraRespCivil) { + this.aseguraRespCivil = aseguraRespCivil; + } + + public String getPolizaRespCivil() { + return polizaRespCivil; + } + + public void setPolizaRespCivil(String polizaRespCivil) { + this.polizaRespCivil = polizaRespCivil; + } + + public String getAseguraMedAmbiente() { + return aseguraMedAmbiente; + } + + public void setAseguraMedAmbiente(String aseguraMedAmbiente) { + this.aseguraMedAmbiente = aseguraMedAmbiente; + } + + public String getPolizaMedAmbiente() { + return polizaMedAmbiente; + } + + public void setPolizaMedAmbiente(String polizaMedAmbiente) { + this.polizaMedAmbiente = polizaMedAmbiente; + } + + public String getAseguraCarga() { + return aseguraCarga; + } + + public void setAseguraCarga(String aseguraCarga) { + this.aseguraCarga = aseguraCarga; + } + + public String getPolizaCarga() { + return polizaCarga; + } + + public void setPolizaCarga(String polizaCarga) { + this.polizaCarga = polizaCarga; + } + + public BigDecimal getPrimaSeguro() { + return primaSeguro; + } + + public void setPrimaSeguro(BigDecimal primaSeguro) { + this.primaSeguro = primaSeguro; + } + + public List getRemolques() { + return remolques; + } + + public void setRemolques(List remolques) { + this.remolques = remolques; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/CantidadTransporta.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/CantidadTransporta.java new file mode 100644 index 0000000..d73e35a --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/CantidadTransporta.java @@ -0,0 +1,47 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fiscalapi.serialization.BigDecimalSerializer; + +import java.math.BigDecimal; + +public class CantidadTransporta { + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal cantidad; + + private String idOrigen; + private String idDestino; + private String cvesTransporteId; + + public BigDecimal getCantidad() { + return cantidad; + } + + public void setCantidad(BigDecimal cantidad) { + this.cantidad = cantidad; + } + + public String getIdOrigen() { + return idOrigen; + } + + public void setIdOrigen(String idOrigen) { + this.idOrigen = idOrigen; + } + + public String getIdDestino() { + return idDestino; + } + + public void setIdDestino(String idDestino) { + this.idDestino = idDestino; + } + + public String getCvesTransporteId() { + return cvesTransporteId; + } + + public void setCvesTransporteId(String cvesTransporteId) { + this.cvesTransporteId = cvesTransporteId; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/Carro.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/Carro.java new file mode 100644 index 0000000..1df4e1e --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/Carro.java @@ -0,0 +1,58 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fiscalapi.serialization.BigDecimalSerializer; + +import java.math.BigDecimal; +import java.util.List; + +public class Carro { + private String tipoCarroId; + private String matriculaCarro; + private String guiaCarro; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal toneladasNetasCarro; + + private List contenedores; + + public String getTipoCarroId() { + return tipoCarroId; + } + + public void setTipoCarroId(String tipoCarroId) { + this.tipoCarroId = tipoCarroId; + } + + public String getMatriculaCarro() { + return matriculaCarro; + } + + public void setMatriculaCarro(String matriculaCarro) { + this.matriculaCarro = matriculaCarro; + } + + public String getGuiaCarro() { + return guiaCarro; + } + + public void setGuiaCarro(String guiaCarro) { + this.guiaCarro = guiaCarro; + } + + public BigDecimal getToneladasNetasCarro() { + return toneladasNetasCarro; + } + + public void setToneladasNetasCarro(BigDecimal toneladasNetasCarro) { + this.toneladasNetasCarro = toneladasNetasCarro; + } + + public List getContenedores() { + return contenedores; + } + + public void setContenedores(List contenedores) { + this.contenedores = contenedores; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/CarroContenedor.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/CarroContenedor.java new file mode 100644 index 0000000..83a9b1b --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/CarroContenedor.java @@ -0,0 +1,40 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fiscalapi.serialization.BigDecimalSerializer; + +import java.math.BigDecimal; + +public class CarroContenedor { + private String tipoContenedorId; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal pesoContenedorVacio; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal pesoNetoMercancia; + + public String getTipoContenedorId() { + return tipoContenedorId; + } + + public void setTipoContenedorId(String tipoContenedorId) { + this.tipoContenedorId = tipoContenedorId; + } + + public BigDecimal getPesoContenedorVacio() { + return pesoContenedorVacio; + } + + public void setPesoContenedorVacio(BigDecimal pesoContenedorVacio) { + this.pesoContenedorVacio = pesoContenedorVacio; + } + + public BigDecimal getPesoNetoMercancia() { + return pesoNetoMercancia; + } + + public void setPesoNetoMercancia(BigDecimal pesoNetoMercancia) { + this.pesoNetoMercancia = pesoNetoMercancia; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/CartaPorte.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/CartaPorte.java new file mode 100644 index 0000000..18699f6 --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/CartaPorte.java @@ -0,0 +1,198 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fiscalapi.serialization.BigDecimalSerializer; + +import java.math.BigDecimal; +import java.util.List; + +public class CartaPorte { + private String transpInternacId; + private String entradaSalidaMercId; + private String paisOrigenDestinoId; + private String viaEntradaSalidaId; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal totalDistRec; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal pesoNetoTotal; + + private String registroISTMOId; + private String ubicacionPoloOrigenId; + private String ubicacionPoloDestinoId; + private String unidadPesoId; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal cargoPorTasacion; + + private String logisticaInversaRecoleccionDevolucionId; + private List regimenAduaneros; + private List ubicaciones; + private List mercancias; + private Autotransporte autotransporte; + private TransporteMaritimo transporteMaritimo; + private TransporteAereo transporteAereo; + private TransporteFerroviario transporteFerroviario; + private List tiposFigura; + + public String getTranspInternacId() { + return transpInternacId; + } + + public void setTranspInternacId(String transpInternacId) { + this.transpInternacId = transpInternacId; + } + + public String getEntradaSalidaMercId() { + return entradaSalidaMercId; + } + + public void setEntradaSalidaMercId(String entradaSalidaMercId) { + this.entradaSalidaMercId = entradaSalidaMercId; + } + + public String getPaisOrigenDestinoId() { + return paisOrigenDestinoId; + } + + public void setPaisOrigenDestinoId(String paisOrigenDestinoId) { + this.paisOrigenDestinoId = paisOrigenDestinoId; + } + + public String getViaEntradaSalidaId() { + return viaEntradaSalidaId; + } + + public void setViaEntradaSalidaId(String viaEntradaSalidaId) { + this.viaEntradaSalidaId = viaEntradaSalidaId; + } + + public BigDecimal getTotalDistRec() { + return totalDistRec; + } + + public void setTotalDistRec(BigDecimal totalDistRec) { + this.totalDistRec = totalDistRec; + } + + public BigDecimal getPesoNetoTotal() { + return pesoNetoTotal; + } + + public void setPesoNetoTotal(BigDecimal pesoNetoTotal) { + this.pesoNetoTotal = pesoNetoTotal; + } + + public String getRegistroISTMOId() { + return registroISTMOId; + } + + public void setRegistroISTMOId(String registroISTMOId) { + this.registroISTMOId = registroISTMOId; + } + + public String getUbicacionPoloOrigenId() { + return ubicacionPoloOrigenId; + } + + public void setUbicacionPoloOrigenId(String ubicacionPoloOrigenId) { + this.ubicacionPoloOrigenId = ubicacionPoloOrigenId; + } + + public String getUbicacionPoloDestinoId() { + return ubicacionPoloDestinoId; + } + + public void setUbicacionPoloDestinoId(String ubicacionPoloDestinoId) { + this.ubicacionPoloDestinoId = ubicacionPoloDestinoId; + } + + public String getUnidadPesoId() { + return unidadPesoId; + } + + public void setUnidadPesoId(String unidadPesoId) { + this.unidadPesoId = unidadPesoId; + } + + public BigDecimal getCargoPorTasacion() { + return cargoPorTasacion; + } + + public void setCargoPorTasacion(BigDecimal cargoPorTasacion) { + this.cargoPorTasacion = cargoPorTasacion; + } + + public String getLogisticaInversaRecoleccionDevolucionId() { + return logisticaInversaRecoleccionDevolucionId; + } + + public void setLogisticaInversaRecoleccionDevolucionId(String logisticaInversaRecoleccionDevolucionId) { + this.logisticaInversaRecoleccionDevolucionId = logisticaInversaRecoleccionDevolucionId; + } + + public List getRegimenAduaneros() { + return regimenAduaneros; + } + + public void setRegimenAduaneros(List regimenAduaneros) { + this.regimenAduaneros = regimenAduaneros; + } + + public List getUbicaciones() { + return ubicaciones; + } + + public void setUbicaciones(List ubicaciones) { + this.ubicaciones = ubicaciones; + } + + public List getMercancias() { + return mercancias; + } + + public void setMercancias(List mercancias) { + this.mercancias = mercancias; + } + + public Autotransporte getAutotransporte() { + return autotransporte; + } + + public void setAutotransporte(Autotransporte autotransporte) { + this.autotransporte = autotransporte; + } + + public TransporteMaritimo getTransporteMaritimo() { + return transporteMaritimo; + } + + public void setTransporteMaritimo(TransporteMaritimo transporteMaritimo) { + this.transporteMaritimo = transporteMaritimo; + } + + public TransporteAereo getTransporteAereo() { + return transporteAereo; + } + + public void setTransporteAereo(TransporteAereo transporteAereo) { + this.transporteAereo = transporteAereo; + } + + public TransporteFerroviario getTransporteFerroviario() { + return transporteFerroviario; + } + + public void setTransporteFerroviario(TransporteFerroviario transporteFerroviario) { + this.transporteFerroviario = transporteFerroviario; + } + + public List getTiposFigura() { + return tiposFigura; + } + + public void setTiposFigura(List tiposFigura) { + this.tiposFigura = tiposFigura; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/ContenedorMaritimo.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/ContenedorMaritimo.java new file mode 100644 index 0000000..5fa6133 --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/ContenedorMaritimo.java @@ -0,0 +1,81 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; + +import java.time.LocalDateTime; +import java.util.List; + +public class ContenedorMaritimo { + private String tipoContenedorId; + private String matriculaContenedor; + private String numPrecinto; + private String idCCPRelacionado; + private String placaVMCCP; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS") + @JsonSerialize(using = LocalDateTimeSerializer.class) + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + private LocalDateTime fechaCertificacionCCP; + + private List remolquesCCP; + + public String getTipoContenedorId() { + return tipoContenedorId; + } + + public void setTipoContenedorId(String tipoContenedorId) { + this.tipoContenedorId = tipoContenedorId; + } + + public String getMatriculaContenedor() { + return matriculaContenedor; + } + + public void setMatriculaContenedor(String matriculaContenedor) { + this.matriculaContenedor = matriculaContenedor; + } + + public String getNumPrecinto() { + return numPrecinto; + } + + public void setNumPrecinto(String numPrecinto) { + this.numPrecinto = numPrecinto; + } + + public String getIdCCPRelacionado() { + return idCCPRelacionado; + } + + public void setIdCCPRelacionado(String idCCPRelacionado) { + this.idCCPRelacionado = idCCPRelacionado; + } + + public String getPlacaVMCCP() { + return placaVMCCP; + } + + public void setPlacaVMCCP(String placaVMCCP) { + this.placaVMCCP = placaVMCCP; + } + + public LocalDateTime getFechaCertificacionCCP() { + return fechaCertificacionCCP; + } + + public void setFechaCertificacionCCP(LocalDateTime fechaCertificacionCCP) { + this.fechaCertificacionCCP = fechaCertificacionCCP; + } + + public List getRemolquesCCP() { + return remolquesCCP; + } + + public void setRemolquesCCP(List remolquesCCP) { + this.remolquesCCP = remolquesCCP; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/DerechoDePaso.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/DerechoDePaso.java new file mode 100644 index 0000000..44035b7 --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/DerechoDePaso.java @@ -0,0 +1,29 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fiscalapi.serialization.BigDecimalSerializer; + +import java.math.BigDecimal; + +public class DerechoDePaso { + private String tipoDerechoDePasoId; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal kilometrajePagado; + + public String getTipoDerechoDePasoId() { + return tipoDerechoDePasoId; + } + + public void setTipoDerechoDePasoId(String tipoDerechoDePasoId) { + this.tipoDerechoDePasoId = tipoDerechoDePasoId; + } + + public BigDecimal getKilometrajePagado() { + return kilometrajePagado; + } + + public void setKilometrajePagado(BigDecimal kilometrajePagado) { + this.kilometrajePagado = kilometrajePagado; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/DetalleMercancia.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/DetalleMercancia.java new file mode 100644 index 0000000..61be0c4 --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/DetalleMercancia.java @@ -0,0 +1,61 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fiscalapi.serialization.BigDecimalSerializer; + +import java.math.BigDecimal; + +public class DetalleMercancia { + private String unidadPesoMercId; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal pesoBruto; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal pesoNeto; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal pesoTara; + + private Integer numPiezas = null; + + public String getUnidadPesoMercId() { + return unidadPesoMercId; + } + + public void setUnidadPesoMercId(String unidadPesoMercId) { + this.unidadPesoMercId = unidadPesoMercId; + } + + public BigDecimal getPesoBruto() { + return pesoBruto; + } + + public void setPesoBruto(BigDecimal pesoBruto) { + this.pesoBruto = pesoBruto; + } + + public BigDecimal getPesoNeto() { + return pesoNeto; + } + + public void setPesoNeto(BigDecimal pesoNeto) { + this.pesoNeto = pesoNeto; + } + + public BigDecimal getPesoTara() { + return pesoTara; + } + + public void setPesoTara(BigDecimal pesoTara) { + this.pesoTara = pesoTara; + } + + public Integer getNumPiezas() { + return numPiezas; + } + + public void setNumPiezas(Integer numPiezas) { + this.numPiezas = numPiezas; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/DocumentoAduanero.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/DocumentoAduanero.java new file mode 100644 index 0000000..828b234 --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/DocumentoAduanero.java @@ -0,0 +1,40 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +public class DocumentoAduanero { + private String tipoDocumentoId; + private String numPedimento; + private String identDocAduanero; + private String rfcImpo; + + public String getTipoDocumentoId() { + return tipoDocumentoId; + } + + public void setTipoDocumentoId(String tipoDocumentoId) { + this.tipoDocumentoId = tipoDocumentoId; + } + + public String getNumPedimento() { + return numPedimento; + } + + public void setNumPedimento(String numPedimento) { + this.numPedimento = numPedimento; + } + + public String getIdentDocAduanero() { + return identDocAduanero; + } + + public void setIdentDocAduanero(String identDocAduanero) { + this.identDocAduanero = identDocAduanero; + } + + public String getRfcImpo() { + return rfcImpo; + } + + public void setRfcImpo(String rfcImpo) { + this.rfcImpo = rfcImpo; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/GuiaIdentificacion.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/GuiaIdentificacion.java new file mode 100644 index 0000000..6b35485 --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/GuiaIdentificacion.java @@ -0,0 +1,38 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fiscalapi.serialization.BigDecimalSerializer; + +import java.math.BigDecimal; + +public class GuiaIdentificacion { + private String numeroGuiaIdentificacion; + private String descripGuiaIdentificacion; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal pesoGuiaIdentificacion; + + public String getNumeroGuiaIdentificacion() { + return numeroGuiaIdentificacion; + } + + public void setNumeroGuiaIdentificacion(String numeroGuiaIdentificacion) { + this.numeroGuiaIdentificacion = numeroGuiaIdentificacion; + } + + public String getDescripGuiaIdentificacion() { + return descripGuiaIdentificacion; + } + + public void setDescripGuiaIdentificacion(String descripGuiaIdentificacion) { + this.descripGuiaIdentificacion = descripGuiaIdentificacion; + } + + public BigDecimal getPesoGuiaIdentificacion() { + return pesoGuiaIdentificacion; + } + + public void setPesoGuiaIdentificacion(BigDecimal pesoGuiaIdentificacion) { + this.pesoGuiaIdentificacion = pesoGuiaIdentificacion; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/Mercancia.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/Mercancia.java new file mode 100644 index 0000000..7516e5b --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/Mercancia.java @@ -0,0 +1,406 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import com.fiscalapi.serialization.BigDecimalSerializer; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +public class Mercancia { + private String bienesTranspId; + private String claveSTCCId; + private String descripcion; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal cantidad; + + private String claveUnidadId; + private String unidad; + private String dimensiones; + private String materialPeligrosoId; + private String cveMaterialPeligrosoId; + private String embalajeId; + private String descripEmbalaje; + private String sectorCOFEPRISId; + private String nombreIngredienteActivo; + private String nomQuimico; + private String denominacionGenericaProd; + private String denominacionDistintivaProd; + private String fabricante; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS") + @JsonSerialize(using = LocalDateTimeSerializer.class) + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + private LocalDateTime fechaCaducidad; + + private String loteMedicamento; + private String formaFarmaceuticaId; + private String condicionesEspTranspId; + private String registroSanitarioFolioAutorizacion; + private String permisoImportacion; + private String folioImpoVUCEM; + private String numCAS; + private String razonSocialEmpImp; + private String numRegSanPlagCOFEPRIS; + private String datosFabricante; + private String datosFormulador; + private String datosMaquilador; + private String usoAutorizado; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal pesoEnKg; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal valorMercancia = null; + + private String monedaId; + private String fraccionArancelariaId; + private String uuidComercioExt; + private String tipoMateriaId; + private String descripcionMateria; + private List documentacionAduanera; + private List guiasIdentificacion; + private List cantidadTransporta; + private DetalleMercancia detalleMercancia; + + public String getBienesTranspId() { + return bienesTranspId; + } + + public void setBienesTranspId(String bienesTranspId) { + this.bienesTranspId = bienesTranspId; + } + + public String getClaveSTCCId() { + return claveSTCCId; + } + + public void setClaveSTCCId(String claveSTCCId) { + this.claveSTCCId = claveSTCCId; + } + + public String getDescripcion() { + return descripcion; + } + + public void setDescripcion(String descripcion) { + this.descripcion = descripcion; + } + + public BigDecimal getCantidad() { + return cantidad; + } + + public void setCantidad(BigDecimal cantidad) { + this.cantidad = cantidad; + } + + public String getClaveUnidadId() { + return claveUnidadId; + } + + public void setClaveUnidadId(String claveUnidadId) { + this.claveUnidadId = claveUnidadId; + } + + public String getUnidad() { + return unidad; + } + + public void setUnidad(String unidad) { + this.unidad = unidad; + } + + public String getDimensiones() { + return dimensiones; + } + + public void setDimensiones(String dimensiones) { + this.dimensiones = dimensiones; + } + + public String getMaterialPeligrosoId() { + return materialPeligrosoId; + } + + public void setMaterialPeligrosoId(String materialPeligrosoId) { + this.materialPeligrosoId = materialPeligrosoId; + } + + public String getCveMaterialPeligrosoId() { + return cveMaterialPeligrosoId; + } + + public void setCveMaterialPeligrosoId(String cveMaterialPeligrosoId) { + this.cveMaterialPeligrosoId = cveMaterialPeligrosoId; + } + + public String getEmbalajeId() { + return embalajeId; + } + + public void setEmbalajeId(String embalajeId) { + this.embalajeId = embalajeId; + } + + public String getDescripEmbalaje() { + return descripEmbalaje; + } + + public void setDescripEmbalaje(String descripEmbalaje) { + this.descripEmbalaje = descripEmbalaje; + } + + public String getSectorCOFEPRISId() { + return sectorCOFEPRISId; + } + + public void setSectorCOFEPRISId(String sectorCOFEPRISId) { + this.sectorCOFEPRISId = sectorCOFEPRISId; + } + + public String getNombreIngredienteActivo() { + return nombreIngredienteActivo; + } + + public void setNombreIngredienteActivo(String nombreIngredienteActivo) { + this.nombreIngredienteActivo = nombreIngredienteActivo; + } + + public String getNomQuimico() { + return nomQuimico; + } + + public void setNomQuimico(String nomQuimico) { + this.nomQuimico = nomQuimico; + } + + public String getDenominacionGenericaProd() { + return denominacionGenericaProd; + } + + public void setDenominacionGenericaProd(String denominacionGenericaProd) { + this.denominacionGenericaProd = denominacionGenericaProd; + } + + public String getDenominacionDistintivaProd() { + return denominacionDistintivaProd; + } + + public void setDenominacionDistintivaProd(String denominacionDistintivaProd) { + this.denominacionDistintivaProd = denominacionDistintivaProd; + } + + public String getFabricante() { + return fabricante; + } + + public void setFabricante(String fabricante) { + this.fabricante = fabricante; + } + + public LocalDateTime getFechaCaducidad() { + return fechaCaducidad; + } + + public void setFechaCaducidad(LocalDateTime fechaCaducidad) { + this.fechaCaducidad = fechaCaducidad; + } + + public String getLoteMedicamento() { + return loteMedicamento; + } + + public void setLoteMedicamento(String loteMedicamento) { + this.loteMedicamento = loteMedicamento; + } + + public String getFormaFarmaceuticaId() { + return formaFarmaceuticaId; + } + + public void setFormaFarmaceuticaId(String formaFarmaceuticaId) { + this.formaFarmaceuticaId = formaFarmaceuticaId; + } + + public String getCondicionesEspTranspId() { + return condicionesEspTranspId; + } + + public void setCondicionesEspTranspId(String condicionesEspTranspId) { + this.condicionesEspTranspId = condicionesEspTranspId; + } + + public String getRegistroSanitarioFolioAutorizacion() { + return registroSanitarioFolioAutorizacion; + } + + public void setRegistroSanitarioFolioAutorizacion(String registroSanitarioFolioAutorizacion) { + this.registroSanitarioFolioAutorizacion = registroSanitarioFolioAutorizacion; + } + + public String getPermisoImportacion() { + return permisoImportacion; + } + + public void setPermisoImportacion(String permisoImportacion) { + this.permisoImportacion = permisoImportacion; + } + + public String getFolioImpoVUCEM() { + return folioImpoVUCEM; + } + + public void setFolioImpoVUCEM(String folioImpoVUCEM) { + this.folioImpoVUCEM = folioImpoVUCEM; + } + + public String getNumCAS() { + return numCAS; + } + + public void setNumCAS(String numCAS) { + this.numCAS = numCAS; + } + + public String getRazonSocialEmpImp() { + return razonSocialEmpImp; + } + + public void setRazonSocialEmpImp(String razonSocialEmpImp) { + this.razonSocialEmpImp = razonSocialEmpImp; + } + + public String getNumRegSanPlagCOFEPRIS() { + return numRegSanPlagCOFEPRIS; + } + + public void setNumRegSanPlagCOFEPRIS(String numRegSanPlagCOFEPRIS) { + this.numRegSanPlagCOFEPRIS = numRegSanPlagCOFEPRIS; + } + + public String getDatosFabricante() { + return datosFabricante; + } + + public void setDatosFabricante(String datosFabricante) { + this.datosFabricante = datosFabricante; + } + + public String getDatosFormulador() { + return datosFormulador; + } + + public void setDatosFormulador(String datosFormulador) { + this.datosFormulador = datosFormulador; + } + + public String getDatosMaquilador() { + return datosMaquilador; + } + + public void setDatosMaquilador(String datosMaquilador) { + this.datosMaquilador = datosMaquilador; + } + + public String getUsoAutorizado() { + return usoAutorizado; + } + + public void setUsoAutorizado(String usoAutorizado) { + this.usoAutorizado = usoAutorizado; + } + + public BigDecimal getPesoEnKg() { + return pesoEnKg; + } + + public void setPesoEnKg(BigDecimal pesoEnKg) { + this.pesoEnKg = pesoEnKg; + } + + public BigDecimal getValorMercancia() { + return valorMercancia; + } + + public void setValorMercancia(BigDecimal valorMercancia) { + this.valorMercancia = valorMercancia; + } + + public String getMonedaId() { + return monedaId; + } + + public void setMonedaId(String monedaId) { + this.monedaId = monedaId; + } + + public String getFraccionArancelariaId() { + return fraccionArancelariaId; + } + + public void setFraccionArancelariaId(String fraccionArancelariaId) { + this.fraccionArancelariaId = fraccionArancelariaId; + } + + public String getUuidComercioExt() { + return uuidComercioExt; + } + + public void setUuidComercioExt(String uuidComercioExt) { + this.uuidComercioExt = uuidComercioExt; + } + + public String getTipoMateriaId() { + return tipoMateriaId; + } + + public void setTipoMateriaId(String tipoMateriaId) { + this.tipoMateriaId = tipoMateriaId; + } + + public String getDescripcionMateria() { + return descripcionMateria; + } + + public void setDescripcionMateria(String descripcionMateria) { + this.descripcionMateria = descripcionMateria; + } + + public List getDocumentacionAduanera() { + return documentacionAduanera; + } + + public void setDocumentacionAduanera(List documentacionAduanera) { + this.documentacionAduanera = documentacionAduanera; + } + + public List getGuiasIdentificacion() { + return guiasIdentificacion; + } + + public void setGuiasIdentificacion(List guiasIdentificacion) { + this.guiasIdentificacion = guiasIdentificacion; + } + + public List getCantidadTransporta() { + return cantidadTransporta; + } + + public void setCantidadTransporta(List cantidadTransporta) { + this.cantidadTransporta = cantidadTransporta; + } + + public DetalleMercancia getDetalleMercancia() { + return detalleMercancia; + } + + public void setDetalleMercancia(DetalleMercancia detalleMercancia) { + this.detalleMercancia = detalleMercancia; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/ParteTransporte.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/ParteTransporte.java new file mode 100644 index 0000000..3798811 --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/ParteTransporte.java @@ -0,0 +1,13 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +public class ParteTransporte { + private String parteTransporteId; + + public String getParteTransporteId() { + return parteTransporteId; + } + + public void setParteTransporteId(String parteTransporteId) { + this.parteTransporteId = parteTransporteId; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/RegimenAduanero.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/RegimenAduanero.java new file mode 100644 index 0000000..f1eac9a --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/RegimenAduanero.java @@ -0,0 +1,13 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +public class RegimenAduanero { + private String regimenAduaneroId; + + public String getRegimenAduaneroId() { + return regimenAduaneroId; + } + + public void setRegimenAduaneroId(String regimenAduaneroId) { + this.regimenAduaneroId = regimenAduaneroId; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/Remolque.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/Remolque.java new file mode 100644 index 0000000..042e79b --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/Remolque.java @@ -0,0 +1,22 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +public class Remolque { + private String subTipoRemId; + private String placa; + + public String getSubTipoRemId() { + return subTipoRemId; + } + + public void setSubTipoRemId(String subTipoRemId) { + this.subTipoRemId = subTipoRemId; + } + + public String getPlaca() { + return placa; + } + + public void setPlaca(String placa) { + this.placa = placa; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/RemolqueCCP.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/RemolqueCCP.java new file mode 100644 index 0000000..c0ee3ac --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/RemolqueCCP.java @@ -0,0 +1,22 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +public class RemolqueCCP { + private String subTipoRemCCPId; + private String placaCCP; + + public String getSubTipoRemCCPId() { + return subTipoRemCCPId; + } + + public void setSubTipoRemCCPId(String subTipoRemCCPId) { + this.subTipoRemCCPId = subTipoRemCCPId; + } + + public String getPlacaCCP() { + return placaCCP; + } + + public void setPlacaCCP(String placaCCP) { + this.placaCCP = placaCCP; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/TipoFigura.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/TipoFigura.java new file mode 100644 index 0000000..61f5739 --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/TipoFigura.java @@ -0,0 +1,78 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +import java.util.List; + +public class TipoFigura { + private String tipoFiguraId; + private String rfcFigura; + private String numLicencia; + private String nombreFigura; + private String numRegIdTribFigura; + private String residenciaFiscalFiguraId; + private List partesTransporte; + private TipoFiguraDomicilio domicilio; + + public String getTipoFiguraId() { + return tipoFiguraId; + } + + public void setTipoFiguraId(String tipoFiguraId) { + this.tipoFiguraId = tipoFiguraId; + } + + public String getRfcFigura() { + return rfcFigura; + } + + public void setRfcFigura(String rfcFigura) { + this.rfcFigura = rfcFigura; + } + + public String getNumLicencia() { + return numLicencia; + } + + public void setNumLicencia(String numLicencia) { + this.numLicencia = numLicencia; + } + + public String getNombreFigura() { + return nombreFigura; + } + + public void setNombreFigura(String nombreFigura) { + this.nombreFigura = nombreFigura; + } + + public String getNumRegIdTribFigura() { + return numRegIdTribFigura; + } + + public void setNumRegIdTribFigura(String numRegIdTribFigura) { + this.numRegIdTribFigura = numRegIdTribFigura; + } + + public String getResidenciaFiscalFiguraId() { + return residenciaFiscalFiguraId; + } + + public void setResidenciaFiscalFiguraId(String residenciaFiscalFiguraId) { + this.residenciaFiscalFiguraId = residenciaFiscalFiguraId; + } + + public List getPartesTransporte() { + return partesTransporte; + } + + public void setPartesTransporte(List partesTransporte) { + this.partesTransporte = partesTransporte; + } + + public TipoFiguraDomicilio getDomicilio() { + return domicilio; + } + + public void setDomicilio(TipoFiguraDomicilio domicilio) { + this.domicilio = domicilio; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/TipoFiguraDomicilio.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/TipoFiguraDomicilio.java new file mode 100644 index 0000000..b6b9473 --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/TipoFiguraDomicilio.java @@ -0,0 +1,94 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +public class TipoFiguraDomicilio { + private String calle; + private String numeroExterior; + private String numeroInterior; + private String coloniaId; + private String localidadId; + private String referencia; + private String municipioId; + private String estadoId; + private String paisId; + private String codigoPostalId; + + public String getCalle() { + return calle; + } + + public void setCalle(String calle) { + this.calle = calle; + } + + public String getNumeroExterior() { + return numeroExterior; + } + + public void setNumeroExterior(String numeroExterior) { + this.numeroExterior = numeroExterior; + } + + public String getNumeroInterior() { + return numeroInterior; + } + + public void setNumeroInterior(String numeroInterior) { + this.numeroInterior = numeroInterior; + } + + public String getColoniaId() { + return coloniaId; + } + + public void setColoniaId(String coloniaId) { + this.coloniaId = coloniaId; + } + + public String getLocalidadId() { + return localidadId; + } + + public void setLocalidadId(String localidadId) { + this.localidadId = localidadId; + } + + public String getReferencia() { + return referencia; + } + + public void setReferencia(String referencia) { + this.referencia = referencia; + } + + public String getMunicipioId() { + return municipioId; + } + + public void setMunicipioId(String municipioId) { + this.municipioId = municipioId; + } + + public String getEstadoId() { + return estadoId; + } + + public void setEstadoId(String estadoId) { + this.estadoId = estadoId; + } + + public String getPaisId() { + return paisId; + } + + public void setPaisId(String paisId) { + this.paisId = paisId; + } + + public String getCodigoPostalId() { + return codigoPostalId; + } + + public void setCodigoPostalId(String codigoPostalId) { + this.codigoPostalId = codigoPostalId; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/TransporteAereo.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/TransporteAereo.java new file mode 100644 index 0000000..b966add --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/TransporteAereo.java @@ -0,0 +1,112 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +public class TransporteAereo { + private String permSCTId; + private String numPermisoSCT; + private String matriculaAeronave; + private String nombreAseg; + private String numPolizaSeguro; + private String numeroGuia; + private String lugarContrato; + private String codigoTransportistaId; + private String rfcEmbarcador; + private String numRegIdTribEmbarc; + private String residenciaFiscalEmbarcId; + private String nombreEmbarcador; + + public String getPermSCTId() { + return permSCTId; + } + + public void setPermSCTId(String permSCTId) { + this.permSCTId = permSCTId; + } + + public String getNumPermisoSCT() { + return numPermisoSCT; + } + + public void setNumPermisoSCT(String numPermisoSCT) { + this.numPermisoSCT = numPermisoSCT; + } + + public String getMatriculaAeronave() { + return matriculaAeronave; + } + + public void setMatriculaAeronave(String matriculaAeronave) { + this.matriculaAeronave = matriculaAeronave; + } + + public String getNombreAseg() { + return nombreAseg; + } + + public void setNombreAseg(String nombreAseg) { + this.nombreAseg = nombreAseg; + } + + public String getNumPolizaSeguro() { + return numPolizaSeguro; + } + + public void setNumPolizaSeguro(String numPolizaSeguro) { + this.numPolizaSeguro = numPolizaSeguro; + } + + public String getNumeroGuia() { + return numeroGuia; + } + + public void setNumeroGuia(String numeroGuia) { + this.numeroGuia = numeroGuia; + } + + public String getLugarContrato() { + return lugarContrato; + } + + public void setLugarContrato(String lugarContrato) { + this.lugarContrato = lugarContrato; + } + + public String getCodigoTransportistaId() { + return codigoTransportistaId; + } + + public void setCodigoTransportistaId(String codigoTransportistaId) { + this.codigoTransportistaId = codigoTransportistaId; + } + + public String getRfcEmbarcador() { + return rfcEmbarcador; + } + + public void setRfcEmbarcador(String rfcEmbarcador) { + this.rfcEmbarcador = rfcEmbarcador; + } + + public String getNumRegIdTribEmbarc() { + return numRegIdTribEmbarc; + } + + public void setNumRegIdTribEmbarc(String numRegIdTribEmbarc) { + this.numRegIdTribEmbarc = numRegIdTribEmbarc; + } + + public String getResidenciaFiscalEmbarcId() { + return residenciaFiscalEmbarcId; + } + + public void setResidenciaFiscalEmbarcId(String residenciaFiscalEmbarcId) { + this.residenciaFiscalEmbarcId = residenciaFiscalEmbarcId; + } + + public String getNombreEmbarcador() { + return nombreEmbarcador; + } + + public void setNombreEmbarcador(String nombreEmbarcador) { + this.nombreEmbarcador = nombreEmbarcador; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/TransporteFerroviario.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/TransporteFerroviario.java new file mode 100644 index 0000000..29ad565 --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/TransporteFerroviario.java @@ -0,0 +1,60 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +import java.util.List; + +public class TransporteFerroviario { + private String tipoDeServicioId; + private String tipoDeTraficoId; + private String nombreAseg; + private String numPolizaSeguro; + private List derechosDePaso; + private List carros; + + public String getTipoDeServicioId() { + return tipoDeServicioId; + } + + public void setTipoDeServicioId(String tipoDeServicioId) { + this.tipoDeServicioId = tipoDeServicioId; + } + + public String getTipoDeTraficoId() { + return tipoDeTraficoId; + } + + public void setTipoDeTraficoId(String tipoDeTraficoId) { + this.tipoDeTraficoId = tipoDeTraficoId; + } + + public String getNombreAseg() { + return nombreAseg; + } + + public void setNombreAseg(String nombreAseg) { + this.nombreAseg = nombreAseg; + } + + public String getNumPolizaSeguro() { + return numPolizaSeguro; + } + + public void setNumPolizaSeguro(String numPolizaSeguro) { + this.numPolizaSeguro = numPolizaSeguro; + } + + public List getDerechosDePaso() { + return derechosDePaso; + } + + public void setDerechosDePaso(List derechosDePaso) { + this.derechosDePaso = derechosDePaso; + } + + public List getCarros() { + return carros; + } + + public void setCarros(List carros) { + this.carros = carros; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/TransporteMaritimo.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/TransporteMaritimo.java new file mode 100644 index 0000000..36fd05b --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/TransporteMaritimo.java @@ -0,0 +1,229 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fiscalapi.serialization.BigDecimalSerializer; + +import java.math.BigDecimal; +import java.util.List; + +public class TransporteMaritimo { + private String permSCTId; + private String numPermisoSCT; + private String nombreAseg; + private String numPolizaSeguro; + private String tipoEmbarcacionId; + private String matricula; + private String numeroOMI; + private Integer anioEmbarcacion = null; + private String nombreEmbarc; + private String nacionalidadEmbarcId; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal unidadesDeArqBruto; + + private String tipoCargaId; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal eslora = null; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal manga = null; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal calado = null; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal puntal = null; + + private String lineaNaviera; + private String nombreAgenteNaviero; + private String numAutorizacionNavieroId; + private String numViaje; + private String numConocEmbarc; + private String permisoTempNavegacion; + private List contenedores; + + public String getPermSCTId() { + return permSCTId; + } + + public void setPermSCTId(String permSCTId) { + this.permSCTId = permSCTId; + } + + public String getNumPermisoSCT() { + return numPermisoSCT; + } + + public void setNumPermisoSCT(String numPermisoSCT) { + this.numPermisoSCT = numPermisoSCT; + } + + public String getNombreAseg() { + return nombreAseg; + } + + public void setNombreAseg(String nombreAseg) { + this.nombreAseg = nombreAseg; + } + + public String getNumPolizaSeguro() { + return numPolizaSeguro; + } + + public void setNumPolizaSeguro(String numPolizaSeguro) { + this.numPolizaSeguro = numPolizaSeguro; + } + + public String getTipoEmbarcacionId() { + return tipoEmbarcacionId; + } + + public void setTipoEmbarcacionId(String tipoEmbarcacionId) { + this.tipoEmbarcacionId = tipoEmbarcacionId; + } + + public String getMatricula() { + return matricula; + } + + public void setMatricula(String matricula) { + this.matricula = matricula; + } + + public String getNumeroOMI() { + return numeroOMI; + } + + public void setNumeroOMI(String numeroOMI) { + this.numeroOMI = numeroOMI; + } + + public Integer getAnioEmbarcacion() { + return anioEmbarcacion; + } + + public void setAnioEmbarcacion(Integer anioEmbarcacion) { + this.anioEmbarcacion = anioEmbarcacion; + } + + public String getNombreEmbarc() { + return nombreEmbarc; + } + + public void setNombreEmbarc(String nombreEmbarc) { + this.nombreEmbarc = nombreEmbarc; + } + + public String getNacionalidadEmbarcId() { + return nacionalidadEmbarcId; + } + + public void setNacionalidadEmbarcId(String nacionalidadEmbarcId) { + this.nacionalidadEmbarcId = nacionalidadEmbarcId; + } + + public BigDecimal getUnidadesDeArqBruto() { + return unidadesDeArqBruto; + } + + public void setUnidadesDeArqBruto(BigDecimal unidadesDeArqBruto) { + this.unidadesDeArqBruto = unidadesDeArqBruto; + } + + public String getTipoCargaId() { + return tipoCargaId; + } + + public void setTipoCargaId(String tipoCargaId) { + this.tipoCargaId = tipoCargaId; + } + + public BigDecimal getEslora() { + return eslora; + } + + public void setEslora(BigDecimal eslora) { + this.eslora = eslora; + } + + public BigDecimal getManga() { + return manga; + } + + public void setManga(BigDecimal manga) { + this.manga = manga; + } + + public BigDecimal getCalado() { + return calado; + } + + public void setCalado(BigDecimal calado) { + this.calado = calado; + } + + public BigDecimal getPuntal() { + return puntal; + } + + public void setPuntal(BigDecimal puntal) { + this.puntal = puntal; + } + + public String getLineaNaviera() { + return lineaNaviera; + } + + public void setLineaNaviera(String lineaNaviera) { + this.lineaNaviera = lineaNaviera; + } + + public String getNombreAgenteNaviero() { + return nombreAgenteNaviero; + } + + public void setNombreAgenteNaviero(String nombreAgenteNaviero) { + this.nombreAgenteNaviero = nombreAgenteNaviero; + } + + public String getNumAutorizacionNavieroId() { + return numAutorizacionNavieroId; + } + + public void setNumAutorizacionNavieroId(String numAutorizacionNavieroId) { + this.numAutorizacionNavieroId = numAutorizacionNavieroId; + } + + public String getNumViaje() { + return numViaje; + } + + public void setNumViaje(String numViaje) { + this.numViaje = numViaje; + } + + public String getNumConocEmbarc() { + return numConocEmbarc; + } + + public void setNumConocEmbarc(String numConocEmbarc) { + this.numConocEmbarc = numConocEmbarc; + } + + public String getPermisoTempNavegacion() { + return permisoTempNavegacion; + } + + public void setPermisoTempNavegacion(String permisoTempNavegacion) { + this.permisoTempNavegacion = permisoTempNavegacion; + } + + public List getContenedores() { + return contenedores; + } + + public void setContenedores(List contenedores) { + this.contenedores = contenedores; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/Ubicacion.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/Ubicacion.java new file mode 100644 index 0000000..564583a --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/Ubicacion.java @@ -0,0 +1,138 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import com.fiscalapi.serialization.BigDecimalSerializer; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +public class Ubicacion { + private String tipoUbicacion; + private String idUbicacion; + private String rfcRemitenteDestinatario; + private String numRegIdTrib; + private String residenciaFiscalId; + private String nombreRemitenteDestinatario; + private String numEstacionId; + private String nombreEstacion; + private String navegacionTraficoId; + private String tipoEstacionId; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS") + @JsonSerialize(using = LocalDateTimeSerializer.class) + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + private LocalDateTime fechaHoraSalidaLlegada; + + @JsonSerialize(using = BigDecimalSerializer.class) + private BigDecimal distanciaRecorrida = null; + + private UbicacionDomicilio domicilio; + + public String getTipoUbicacion() { + return tipoUbicacion; + } + + public void setTipoUbicacion(String tipoUbicacion) { + this.tipoUbicacion = tipoUbicacion; + } + + public String getIdUbicacion() { + return idUbicacion; + } + + public void setIdUbicacion(String idUbicacion) { + this.idUbicacion = idUbicacion; + } + + public String getRfcRemitenteDestinatario() { + return rfcRemitenteDestinatario; + } + + public void setRfcRemitenteDestinatario(String rfcRemitenteDestinatario) { + this.rfcRemitenteDestinatario = rfcRemitenteDestinatario; + } + + public String getNumRegIdTrib() { + return numRegIdTrib; + } + + public void setNumRegIdTrib(String numRegIdTrib) { + this.numRegIdTrib = numRegIdTrib; + } + + public String getResidenciaFiscalId() { + return residenciaFiscalId; + } + + public void setResidenciaFiscalId(String residenciaFiscalId) { + this.residenciaFiscalId = residenciaFiscalId; + } + + public String getNombreRemitenteDestinatario() { + return nombreRemitenteDestinatario; + } + + public void setNombreRemitenteDestinatario(String nombreRemitenteDestinatario) { + this.nombreRemitenteDestinatario = nombreRemitenteDestinatario; + } + + public String getNumEstacionId() { + return numEstacionId; + } + + public void setNumEstacionId(String numEstacionId) { + this.numEstacionId = numEstacionId; + } + + public String getNombreEstacion() { + return nombreEstacion; + } + + public void setNombreEstacion(String nombreEstacion) { + this.nombreEstacion = nombreEstacion; + } + + public String getNavegacionTraficoId() { + return navegacionTraficoId; + } + + public void setNavegacionTraficoId(String navegacionTraficoId) { + this.navegacionTraficoId = navegacionTraficoId; + } + + public String getTipoEstacionId() { + return tipoEstacionId; + } + + public void setTipoEstacionId(String tipoEstacionId) { + this.tipoEstacionId = tipoEstacionId; + } + + public LocalDateTime getFechaHoraSalidaLlegada() { + return fechaHoraSalidaLlegada; + } + + public void setFechaHoraSalidaLlegada(LocalDateTime fechaHoraSalidaLlegada) { + this.fechaHoraSalidaLlegada = fechaHoraSalidaLlegada; + } + + public BigDecimal getDistanciaRecorrida() { + return distanciaRecorrida; + } + + public void setDistanciaRecorrida(BigDecimal distanciaRecorrida) { + this.distanciaRecorrida = distanciaRecorrida; + } + + public UbicacionDomicilio getDomicilio() { + return domicilio; + } + + public void setDomicilio(UbicacionDomicilio domicilio) { + this.domicilio = domicilio; + } +} diff --git a/src/main/java/com/fiscalapi/models/invoicing/billOfLading/UbicacionDomicilio.java b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/UbicacionDomicilio.java new file mode 100644 index 0000000..3ee327c --- /dev/null +++ b/src/main/java/com/fiscalapi/models/invoicing/billOfLading/UbicacionDomicilio.java @@ -0,0 +1,94 @@ +package com.fiscalapi.models.invoicing.billOfLading; + +public class UbicacionDomicilio { + private String calle; + private String numeroExterior; + private String numeroInterior; + private String coloniaId; + private String localidadId; + private String referencia; + private String municipioId; + private String estadoId; + private String paisId; + private String codigoPostalId; + + public String getCalle() { + return calle; + } + + public void setCalle(String calle) { + this.calle = calle; + } + + public String getNumeroExterior() { + return numeroExterior; + } + + public void setNumeroExterior(String numeroExterior) { + this.numeroExterior = numeroExterior; + } + + public String getNumeroInterior() { + return numeroInterior; + } + + public void setNumeroInterior(String numeroInterior) { + this.numeroInterior = numeroInterior; + } + + public String getColoniaId() { + return coloniaId; + } + + public void setColoniaId(String coloniaId) { + this.coloniaId = coloniaId; + } + + public String getLocalidadId() { + return localidadId; + } + + public void setLocalidadId(String localidadId) { + this.localidadId = localidadId; + } + + public String getReferencia() { + return referencia; + } + + public void setReferencia(String referencia) { + this.referencia = referencia; + } + + public String getMunicipioId() { + return municipioId; + } + + public void setMunicipioId(String municipioId) { + this.municipioId = municipioId; + } + + public String getEstadoId() { + return estadoId; + } + + public void setEstadoId(String estadoId) { + this.estadoId = estadoId; + } + + public String getPaisId() { + return paisId; + } + + public void setPaisId(String paisId) { + this.paisId = paisId; + } + + public String getCodigoPostalId() { + return codigoPostalId; + } + + public void setCodigoPostalId(String codigoPostalId) { + this.codigoPostalId = codigoPostalId; + } +}