# Zoho Books

> Facturar desde Zoho Books: cada factura confirmada se emite como CFE y vuelve a Zoho con su número, su estado en DGI y el PDF

Si la empresa lleva su facturación en Zoho Books, no hace falta cargar nada dos
veces: una factura marcada como enviada en Zoho se emite como eFactura en pymo,
y el resultado fiscal vuelve a la misma factura de Zoho. Lo mismo para una nota
de crédito y para una factura anulada.

No hay nada que programar. La conexión se hace desde la configuración de pymo,
y lo único que configura el contador del lado de Zoho es el RUT de cada cliente.

## Conectar

Desde **Configuración** en pymo, en la tarjeta **Conectar con Zoho**:

| Paso | Qué pasa |
|---|---|
| 1. `Conectar con Zoho` | pymo te lleva a Zoho para que autorices el acceso a tu organización. Si tu cuenta tiene más de una organización, elegís cuál conectar |
| 2. Volvés a pymo | La tarjeta muestra los impuestos que existen en tu Zoho y pide, para cada uno, el tipo de IVA (`IndFact`) con el que va en el CFE. pymo sugiere uno a partir del porcentaje, y vos lo confirmás |
| 3. Forma de pago por defecto | Contado o Crédito. Se usa cuando la factura de Zoho no dice otra cosa (ver más abajo) |
| 4. `Activar facturación desde Zoho` | pymo guarda el mapeo y crea en tu Zoho todo lo que necesita para recibir las facturas. A partir de acá se emite |

<Warning>
**El tipo de IVA no se puede corregir después de activar.** El `IndFact` de
cada línea va en el CFE y una vez emitido es definitivo. Si un impuesto quedó
mal mapeado, pedí a pymo que lo corrija antes de seguir emitiendo.
</Warning>

Una conexión es de la empresa y de **una sola sucursal**: todos los CFE que
salen desde Zoho se emiten con la numeración de esa sucursal. Para cambiar de
sucursal hay que pedir a pymo que desconecte y volver a activar.

## Qué crea pymo en tu Zoho

Al activar, pymo crea en tu organización los campos donde va a escribir el
resultado, y las reglas que le avisan cuando hay algo para emitir. Un campo
que ya existe lo reutiliza. Las reglas y sus webhooks no: cada activación
rehace los tres que pymo tiene anotados. Una regla o un webhook `pymo` que
haya quedado de antes y pymo no tenga anotado queda al lado del nuevo y sus
avisos fallan todos, así que si ves reglas o webhooks `pymo` repetidos,
borrá a mano los que sobran.

| Dónde | Campos personalizados |
|---|---|
| Factura | `pymo CFE tipo`, `pymo CFE serie`, `pymo CFE numero`, `pymo CFE estado DGI`, `pymo invoice id`, `pymo NC serie`, `pymo NC numero`, `pymo NC estado DGI`, `Forma Pago` |
| Nota de crédito | `pymo CFE tipo`, `pymo CFE serie`, `pymo CFE numero`, `pymo CFE estado DGI`, `pymo invoice id`, `Forma Pago` |
| Contacto | `RUT` |

Y tres reglas de flujo de trabajo, cada una con su webhook:

| Regla en Zoho | Cuándo dispara | Qué emite pymo |
|---|---|---|
| `pymo emitir CFE` | Una factura pasa a **Sent** (o a Overdue), y también cuando se edita una factura que ya está en ese estado | Una eFactura (`111`) |
| `pymo nota de crédito` | Se crea una nota de crédito y queda **Open** | Una nota de crédito de eFactura (`112`) |
| `pymo anulación` | Una factura pasa a **Void** | Una `112` por el total, que anula el CFE original |

No edites esas reglas ni sus webhooks a mano: el secreto con el que pymo
verifica cada aviso es parte de ellos, y una regla modificada deja de emitir sin
avisar. Si algo quedó mal, pedí a pymo que las recree: una vez que la
conexión está activa, la tarjeta ya no muestra el botón `Activar`.

## Lo que tenés que hacer vos

Tres cosas, y ninguna es por factura:

| Qué | Dónde | Por qué |
|---|---|---|
| Cargar el **RUT** de cada cliente en el campo `RUT` del contacto | Contacto en Zoho | Es el receptor del CFE. Una factura cuyo cliente no tiene RUT **no se emite**: se rechaza y queda registrada como fallida en Zoho (ver "Cuando algo falla") |
| Usar en cada línea un impuesto de los que mapeaste al activar | Factura en Zoho | Cada línea del CFE lleva su `IndFact`, y una línea con un impuesto sin mapear se rechaza |
| Marcar la factura como **enviada** cuando esté lista | Factura en Zoho | Ese es el momento de emisión. Un borrador no emite nada |

Y una opcional: el campo `Forma Pago` (Contado o Crédito) en la factura o en
la nota de crédito. Si lo dejás vacío, vale el que elegiste al activar. Si lo
completás, ese gana para ese documento.

Sólo se emiten **eFacturas** (`111`): el receptor tiene que tener RUT. Una
factura a un consumidor final sin RUT no se convierte en eTicket, se rechaza.

## Cómo se convierte la factura en CFE

pymo lee la factura tal como Zoho la manda y arma el CFE. No hay que armar
ningún payload: sirve el que Zoho envía por defecto.

| En la factura de Zoho | En el CFE |
|---|---|
| `RUT` del contacto y nombre del cliente | `Receptor` (RUT, Uruguay) |
| Moneda y tipo de cambio | `Totales.TpoMoneda` y `Totales.TpoCambio` |
| Precios con impuestos incluidos | `IdDoc.MntBruto` |
| `Forma Pago`, o el valor por defecto | `IdDoc.FmaPago` |
| Cada línea: orden, nombre o descripción, cantidad, unidad, precio, total, impuesto | Una línea de `Items`, con el `IndFact` del mapeo |
| Id de la factura en Zoho | La clave de idempotencia del CFE |

Dos detalles que vienen de las reglas de DGI y no de pymo:

- El nombre del ítem se corta a 80 caracteres, y la unidad a 4. Una línea sin
  nombre usa la primera línea de su descripción; una línea sin ninguno de los
  dos se rechaza.
- El monto y los impuestos los calcula pymo a partir de las líneas, como en
  cualquier emisión. Ver [Reglas fiscales](/reglas-fiscales).

## Qué vuelve a Zoho

Sobre la factura, en el momento de la emisión:

| Campo en Zoho | Qué trae |
|---|---|
| `pymo CFE tipo`, `pymo CFE serie`, `pymo CFE numero` | El comprobante: `111`, su serie y su número |
| `pymo CFE estado DGI` | El estado del CFE en ese momento. Recién emitido, todavía no lo vio DGI |
| `pymo invoice id` | El id del CFE en pymo, para buscarlo desde pymo |
| Adjunto | El PDF del CFE, con el nombre `111-<serie>-<número>.pdf` |

Y **minutos después**, cuando DGI responde, `pymo CFE estado DGI` pasa a
`PROCESSED_ACCEPTED` o `PROCESSED_REJECTED`. Ese segundo dato llega en el
siguiente ciclo de notificación de pymo, no en el instante; si un rato después
de emitir sigue en su valor inicial, es normal. Los estados posibles son los
mismos de cualquier CFE: ver [Emitir un CFE](/emision), sección "Estados del
CFE".

Una nota de crédito recibe los mismos campos sobre sí misma, y su propio PDF.

<Note>
Los campos `pymo …` de Zoho son informativos. pymo **no los lee** para decidir
nada: la relación entre una factura de Zoho y su CFE la guarda pymo. Editarlos a
mano no cambia el comprobante ni hace que una nota de crédito apunte a otro.
</Note>

## Reenvíos, ediciones, notas de crédito y anulaciones

| Situación | Qué hace pymo |
|---|---|
| Zoho reenvía la misma factura (reintento, o la regla vuelve a disparar sin cambios) | Responde con el mismo CFE. **No emite dos veces** ni consume otro número |
| Se edita una factura que ya se emitió | Emite una `112` que anula el CFE anterior y una `111` nueva con el contenido actual. La factura queda con los campos del CFE nuevo, la serie y el número de la NC en `pymo NC serie` y `pymo NC numero`, y los dos PDF adjuntos. **Cada edición consume dos números de CAE**: es el costo fiscal de corregir, no un error |
| Se edita una factura que ya tiene una nota de crédito | Se rechaza y no se emite nada. La corrección anula el CFE entero y nada descuenta lo que la nota de crédito ya acreditó. Para corregirla, anulá la factura y emitila de nuevo |
| Se edita una factura cuyo CFE anterior DGI rechazó | Sale sólo la `111` nueva. Un CFE rechazado no existe fiscalmente y no hay nada que anular, así que esa edición consume **un solo** número de CAE |
| Se crea una nota de crédito sobre una factura emitida desde Zoho | Emite una `112` que referencia ese CFE. El receptor sale del CFE original, no de la nota |
| Se crea una nota de crédito sobre una factura que pymo no emitió | Se rechaza. No hay CFE al que referenciar |
| Se crea una nota de crédito sobre un CFE que DGI rechazó | Se rechaza. Un CFE rechazado no existe fiscalmente y no hay nada que acreditar |
| Se anula (Void) una factura emitida desde Zoho | Emite una `112` por el total, que anula el CFE. Zoho no permite editar una factura anulada, así que **ese resultado no se escribe en la factura**: la NC está en pymo con su estado, y la factura de Zoho queda como estaba |
| Se edita una nota de crédito ya emitida | **No pasa nada**: la regla de notas de crédito sólo dispara cuando la nota pasa a **Open**, no cuando se edita una que ya está abierta. Zoho no manda ningún aviso, no hay rechazo ni registro de fallo, y el CFE queda con el contenido anterior |
| Se reenvía una anulación con cambios | Se rechaza. Las correcciones automáticas son sólo para facturas |

Una nota de crédito que **no referencia ninguna factura** sólo se emite si Zoho
manda el RUT del cliente en el aviso; si no lo trae, se rechaza. Si necesitás
ese caso, consultá con pymo antes de usarlo.

## Cuando algo falla

pymo nunca emite "más o menos". Si no puede armar un CFE válido, rechaza el
aviso y no consume numeración. Zoho lo registra en **Settings → Automation →
Workflow Logs** como fallido, con el motivo que pymo devolvió, y lo reintenta
según su propia política.

| Motivo típico | Qué corregir |
|---|---|
| El cliente no tiene RUT | Cargarlo en el contacto y después guardar un cambio en la factura. La factura ya está en **Sent** y no se la puede volver a marcar como enviada: lo que vuelve a disparar la regla es guardar la factura, no editar el contacto |
| La factura ya tiene una nota de crédito y se editó | Anular la factura y volver a emitirla. Una factura ya acreditada no se corrige editándola |
| Una línea usa un impuesto sin mapear | Cambiar el impuesto de la línea por uno de los mapeados, o pedir a pymo que agregue el nuevo al mapeo |
| Una línea no tiene nombre ni descripción | Completar la línea |
| No hay forma de pago | Completar `Forma Pago` en el documento, o el valor por defecto en pymo |
| No hay numeración (CAE) para ese tipo de CFE | Cargar CAE en pymo. El reintento de Zoho emite solo cuando haya |

Lo que **no** aparece ahí: un CFE que se emitió y DGI rechazó después. Ese caso
se ve en `pymo CFE estado DGI` como `PROCESSED_REJECTED`, y el motivo está en
pymo. Igual que en cualquier emisión, la respuesta inmediata no es la aceptación
de DGI: ver [Emitir un CFE](/emision).

<Warning>
Si un aviso falla, la factura queda en Zoho **sin CFE** hasta que se corrija la
causa. Zoho reintenta un tiempo y después deja de hacerlo. Conviene mirar los
Workflow Logs cuando una factura enviada no muestra `pymo CFE numero` a los
pocos minutos.
</Warning>
