Giter Club home page Giter Club logo

facturapi-node's People

Contributors

dependabot[bot] avatar javorosas avatar ningacoding avatar pastine avatar raul-facturapi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

facturapi-node's Issues

Definiciones de Typescript

Estaría increíble que se pudieran incluir las definiciones en typescript para poder utilizar de una mejor manera la librería.
Implementare algunas definiciones para mi proyecto y las pondré aquí cuando acabe, espero puedan servir.

Filtrado de facturas por "Métodos de pago" - PPD

Hola @javorosas ,

Summary:
Este es un feature request para un end point en su API que nos permita obtener una lista de facturas filtrando el campo "Métodos de pago", el objetivo es poder generar fácilmente vistas con las facturas PPD para posteriormente crear "Facturas de Recepción de Pagos" sobre las mismas.

Otra opción sería agregar un end point que nos permita enviar un objeto query para poder filtrar nuestras facturas.

Saludos!
MF

Crear Organizaciones por medio de API

Es una solicitud de nueva funcionalidad más que un "issue":

  • Poder crear Organizaciones programática-mente por medio de la API.

Algo como:

const facturapi = require('facturapi')('YOUR_API_KEY');

facturapi.organizations.create({
    comercialName: 'Nombre Comercial',
    legalName: 'Razón Social',
    // other required fields
}).then(organization=> {
    // Remember to store the organization.id in your records.
}).catch(err => console.log(err));

Y poder subirle los Certificados por medio de otras APIs.

Crear organizaciones por medio de la consola web es un poco engorroso, inseguro, manual y limitado.

Por lo tanto el "YOUR_API_KEY" debería ser único y para identificar una sola cuenta de facturapi.

problems with receipts.createGlobalInvoice

Hi Team,

When I try to create a Global invoice in test mode, the request comes back with 200 OK, but the response is empty. No error comes back. I checked the logs coming back from axios directly in the library, but no response is present.

I tried sending it with empty parameters and with from, to, series defined as well but the response is the same:

await facturapi.receipts.createGlobalInvoice({});

Solo se puede utilizar el sello digital?

Buen día, excelente proyecto. Pero no me es posible utilizarlo ya que solo tengo mi FIEL y en la herramienta gratuita del SAT siempre he sellado mis facturas con la FIEL.

Propuesta de Integración de Zod para Mejorar la Validación de Tipos

¡Hola!

Quiero comenzar expresando mi admiración y agradecimiento por el excepcional trabajo que realizan manteniendo esta biblioteca. Gracias a su esfuerzo, usuarios como yo podemos disfrutar de una herramienta tan útil y fácil de utilizar. ¡Felicidades!

Sugerencia

Les escribo para sugerir la integración de una biblioteca llamada Zod, que facilita la validación de tipos en tiempo de ejecución y permite generar tipos de TypeScript a partir de los esquemas definidos. Creo que podría complementar muy bien el trabajo que ya están haciendo, especialmente considerando que están trabajando en una adaptación a TypeScript.

Aquí les comparto algunos tipos que he creado en mi proyecto, aprovechando su excelente documentación en https://docs.facturapi.io/:

export const createOrganizationAddressDto = z.object({
  zip: z.string(),
  street: z.string(),
  exterior: z.string(),
  interior: z.string().optional(),
  neighborhood: z.string().optional(),
  city: z.string().optional(),
  municipality: z.string().optional(),
  state: z.string().optional(),
});
export type CreateOrganizationAddresseDto = z.infer<
  typeof createOrganizationAddressDto
>;

export const createOrganizationDto = z.object({
  name: z.string(),
  legal_name: z.string(),
  tax_system: z.string(),
  certificates: certificatesDto,
  website: z.string().optional(),
  support_email: z.string().optional(),
  phone: z.string().optional(),
  supabase_project_id: z.string(),
  address: createOrganizationAddressDto,
});
export type CreateOrganizationDto = z.infer<typeof createOrganizationDto>;

export type UpdateOrganizationResponse = {
  id: string;
  created_at: string;
  is_production_ready: boolean;
  pending_steps: PendingStep[];
  legal: LegalInfo;
  customization: Customization;
  certificate: Certificate;
};

Ejemplo de implementación

En este ejemplo, hago la implementación de la librería utilizando este endpoint:

updateLegal(id: string, data: Record<string, any>) {

// organizations.types.ts
import { z } from 'zod';

export const createOrganizationDto = z.object({
  name: z.string(),
  legal_name: z.string(),
  tax_system: z.string(),
  certificates: certificatesDto, // Asumiendo que certificatesDto está definido adecuadamente
  website: z.string().optional(),
  support_email: z.string().optional(),
  phone: z.string().optional(),
  supabase_project_id: z.string(),
  address: createOrganizationAddressDto, // Asumiendo que createOrganizationAddressDto está definido adecuadamente
});

export type CreateOrganizationDto = z.infer<typeof createOrganizationDto>;

// src/resources/organizations.ts
updateLegal(id: string, data: CreateOrganizationDto) {
  if (!id) return Promise.reject(new Error('id is required'));
  
  // Validar data usando el esquema de Zod
  const validation = createOrganizationDto.safeParse(data);
  if (!validation.success) {
    return Promise.reject(new Error('Validation failed: ' + validation.error.message));
  }

  // Si la validación es exitosa, proceder con la petición
  return this.client
    .put('/organizations/' + id + '/legal', data)
    .then((r) => r.data);
}

Como pueden observar, la implementación requerida para cada endpoint es mínima, mientras que los beneficios que aporta a la biblioteca son significativos.

Ventajas de integrar Zod

  1. Los tipos son más explícitos, facilitando la comprensión de los campos necesarios.
  2. Evita el uso de tipos genéricos como Record<string, string>, reemplazándolos por estructuras más legibles.
  3. Permite validar los esquemas antes de realizar las peticiones, optimizando el uso del ancho de banda.
  4. Mejora la experiencia de desarrollo al simplificar la interacción con la API.
  5. Se alinea con las prácticas estándar de la industria, especialmente útil en el contexto del rewrite a TypeScript que están realizando en este momento.
  6. Aumenta la mantenibilidad del código al usar tipos definidos claramente.
  7. Zod proporciona errores detallados y descriptivos que pueden ayudar significativamente durante el desarrollo y la depuración.
  8. Zod permite componer esquemas más complejos a partir de esquemas más simples. Esto es útil para mantener el código limpio y organizado.
  9. Zod permite agregar validaciones personalizadas a los esquemas, lo que ofrece flexibilidad para implementar reglas de negocio específicas sin complicar el uso de la biblioteca o los tipos generados.
  10. Los esquemas definidos en Zod pueden utilizarse para generar datos de prueba, lo que facilita escribir pruebas unitarias más robustas y fiables.

¡Gracias!

Estoy completamente dispuesto a enviarles el resto del código y colaborar estrechamente con ustedes en este esfuerzo.

Error 400 sin sugerencia en creación de Factura de Ingreso

Al momento de crear una Factura de ingreso, me retorna un error 400 con esta respuesta

Error: (0 , big_js_1.default)(...).plus is not a function
    at errorInterceptor (C:\Users\ikari\Documents\Estacionamiento\API\node_modules\facturapi\src\wrapper.js:14:27)

Versión:

"facturapi": "^3.2.0",

Dejo mi objeto de tipo Factura Ingreso tapando información de cliente.
Cabe remarcar que este mismo objecto funcionaba en la v1, se agregó:
"tax_system" al objecto de "customer"
"taxability" al objeto de "product"

{
	"customer": {
		"email": "Mi email",
		"legal_name": "Mi nombre",
		"tax_id": "Mi RFC",
		"tax_system": "616",
		"address": {
			"exterior": null,
			"interior": null,
			"neighborhood": null,
			"street": null,
			"zip": "Mi zip"
		},
		"phone": null
	},
	"items": [
		{
			"product": {
				"description": "Una semana",
				"price": 689.66,
				"product_key": "95121644",
				"tax_included": false,
				"unit_key": "WEE",
				"taxes": [
					{
						"rate": 0.16,
						"type": "IVA",
						"factor": "Tasa",
						"withholding": false
					}
				],
				"taxability": "02",
				"local_taxes": [
					{
						"type": "ISR",
						"rate": 0.0125,
						"withholding": true
					},
					{
						"type": "IVA",
						"rate": 0.16,
						"withholding": true
					}
				]
			},
			"quantity": 1,
			"discount": 0
		}
	],
	"payment_form": "99",
	"pdf_custom_section": "",
	"payment_method": "PPD",
	"use": "G03"
}

Problema al subir certificados (key, cer)

Estoy implementando en una API REST la funcionalidad de subir los archivos:

.key
.cer

Estoy siguiendo la documentación de facturapi (https://docs.facturapi.io/api/#operation/uploadOrganizationCertificate)

    const key = createReadStream(
      'absolute/path',
    );
    const cer = createReadStream(
      'absolute/path',
    );
    await this.facturapi.organizations.uploadCertificate(
      tenant.facturapiOrganizationId,
      cer,
      key,
      uploadCertificatePasswordDto.password,
    );

El error que me arroja es

Error: El certificado no es un CSD válido. Asegúrate de que se trate del CSD y no de la FIEL.

NOTA: Ya intente de iniciar sesión en el SAT con mi .cer y .key y contraseña y si funciona.

¿algo que se me este pasando?

Create client with tax_system just working with code "616"

Hello Team!!
(Error) - When create a new client with the new property tax_system, just allows code "616".

npm version

Post /customers

Object Request

{
  "legal_name": "X V2, S.A. de C.V.",
  "tax_id": "XAXX010101000",
  "tax_system": "601",
  "email": "[email protected]",
  "address": {
    "street": "Basement",
    "exterior": "911",
    "neighborhood": "Death Star",
    "zip": "86500",
    "country": "MEX"
  }
}

Response

{
  "message": "\"tax_system\" must be [616]",
  "path": "tax_system",
  "ok": false
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.