En plan de pagos y cobranza inmobiliaria explicamos que TerraWare factura cada abono de una unidad en preventa con CFDI 4.0. Eso es cierto: cada pago —enganche o mensualidad— genera su propio comprobante. Lo que ese artículo no cubría es CÓMO se marca ese comprobante, y ahí encontramos algo que ninguna pieza previa de este blog había señalado: TerraWare (repo medware-inmobiliaria) siempre timbra el CFDI como pago en una sola exhibición (PUE), sin importar que el plan de pagos declare enganche + mensualidades a meses. No corrige ningún artículo previo —el flujo descrito sigue siendo correcto—, complementa con un detalle fiscal que faltaba.
Lo que exige la ley cuando el cobro no es completo al momento
El Código Fiscal de la Federación (CFF, texto vigente publicado por la Cámara de Diputados del H. Congreso de la Unión, última reforma DOF 09-04-2026) regula esto en el artículo 29-A, fracción VII, que fija dos rutas según cómo se cobre la operación:
"a) Cuando la contraprestación se pague en una sola exhibición, en el momento en que se expida el comprobante fiscal digital por Internet correspondiente a la operación de que se trate, se señalará expresamente dicha situación [...]
b) Cuando la contraprestación no se pague en una sola exhibición, o pagándose en una sola exhibición, ésta se realice de manera diferida del momento en que se emite el comprobante fiscal digital por Internet que ampara el valor total de la operación, se emitirá un comprobante fiscal digital por Internet por el valor total de la operación en el momento en que ésta se realice y se expedirá un comprobante fiscal digital por Internet por cada uno del resto de los pagos que se reciban [...], los cuales deberán señalar el folio del comprobante fiscal digital por Internet emitido por el total de la operación."
Un enganche seguido de mensualidades es, casi por definición, el supuesto del inciso b): el precio de la unidad no se paga completo al momento de facturar el enganche, sino en abonos repartidos a lo largo de meses o años. Cada uno de esos abonos exige marcarse como pago en parcialidades o diferido (PPD), no como pago en una sola exhibición (PUE).
Verificado en el código: el tipo lo sabe, la factura no lo dice
Lo que hace este hallazgo distinto a otros de esta serie es que el propio código de TerraWare declara que sabe la diferencia: dos paquetes de tipos compartidos definen paymentMethod: z.enum(['PUE', 'PPD']).default('PUE') (packages/shared-schemas/src/facturacion.schema.ts:35 y packages/shared-types/src/finance.ts:110). El enum existe, PPD es una opción válida en el sistema de tipos.
El problema es que el endpoint que de verdad timbra un CFDI de contrato —contracts.schemas.ts:50-52, que sólo acepta concept (texto libre) y kind (ingreso/egreso)— **no tiene ningún campo paymentMethod que aceptar**. Y el constructor del cuerpo que se envía al PAC, buildFacturamaCfdiRequest() (apps/services/core/src/contracts/cfdi/facturama-payload.ts:62), fija PaymentMethod: 'PUE' como literal fijo, con un comentario que lo confirma en el código: // Pago en una sola exhibición. No hay ninguna rama que lea si el pago que se está timbrando es un enganche, una mensualidad de un plan a 24 meses, o el saldo final: todos salen marcados PUE.
El mismo archivo revela un segundo problema, más chico pero del mismo origen: el receptor de todos los CFDI de contrato es fijo, Rfc: 'XAXX010101000', "PÚBLICO EN GENERAL" (facturama-payload.ts:71-72) —el propio comentario del archivo lo llama "mejora posterior" (línea 4-5)—, así que ni siquiera una unidad de varios millones de pesos se factura a nombre del comprador real.
La sanción: infracción del art. 83, multa del art. 84, ambos del CFF
Emitir un comprobante que no cumple los requisitos del artículo 29-A —incluido el correcto método de pago de la fracción VII— cae en la infracción del artículo 83, fracción VII: "expedirlos sin que cumplan los requisitos señalados en este Código". El artículo 84, fracción IV, inciso a), fija la multa general:
"a) De $22,300.00 a $127,530.00. En caso de reincidencia, las autoridades fiscales podrán, adicionalmente, clausurar preventivamente el establecimiento del contribuyente por un plazo de tres a quince días [...]"
A diferencia del caso de un complemento de pago faltante (multa específica del inciso d), aquí el defecto es el propio método de pago del comprobante, así que aplica el supuesto general del inciso a). Monto actualizado por resolución miscelánea fiscal, DOF 28-12-2025 —vigente para 2026—.
| Elemento | Qué dice la norma / qué hace TerraWare |
|---|---|
| Cuándo usar PUE | Art. 29-A, fr. VII, inciso a), CFF — pago completo al momento de facturar |
| Cuándo usar PPD | Art. 29-A, fr. VII, inciso b), CFF — pago no recibido completo al momento, como un enganche o una mensualidad |
| Tipos de datos en TerraWare | Sí distinguen PUE/PPD (facturacion.schema.ts:35, finance.ts:110) |
| Endpoint real que timbra el CFDI de un contrato | No acepta paymentMethod (contracts.schemas.ts:50-52) |
| Método de pago que sale en el CFDI | Siempre PUE, literal fijo (facturama-payload.ts:62) |
| Receptor del CFDI | Siempre "PÚBLICO EN GENERAL", nunca el RFC real del comprador (facturama-payload.ts:71-72) |
| Multa por comprobante que no cumple los requisitos de forma | Art. 84, fr. IV, inciso a): $22,300.00 a $127,530.00, con posible clausura preventiva en reincidencia |
Qué sigue siendo tuyo mientras tanto
Mientras TerraWare no distinga PUE de PPD en el CFDI real, cada desarrolladora que venda con enganche y mensualidades tiene que decidir el método de pago correcto por su cuenta y corregirlo fuera del sistema en cada abono que no sea la liquidación total. Lo mismo aplica al receptor: si el comprador necesita su CFDI nominativo —para deducir o comprobar la operación—, hoy hay que gestionarlo aparte, porque el sistema siempre factura a público en general.
Preguntas frecuentes
¿TerraWare factura cada abono del plan de pagos?
Sí, eso sigue siendo cierto: cada pago genera su propio CFDI 4.0. Lo que no distingue es el método de pago correcto de cada uno.
¿El sistema tiene alguna opción para marcar PPD?
El tipo de datos lo define (paymentMethod: 'PUE' | 'PPD'), pero el endpoint que realmente timbra el CFDI de un contrato no tiene ese campo, y el constructor de la petición al PAC fija PUE de forma literal.
¿A quién se factura una unidad vendida en TerraWare?
A "PÚBLICO EN GENERAL" con un RFC genérico, sin importar quién sea el comprador ni el monto de la operación.
¿Cuál es la multa exacta?
De $22,300.00 a $127,530.00 por comprobante que no cumple los requisitos de forma del art. 29-A, con posible clausura preventiva de 3 a 15 días en reincidencia. El monto concreto dentro del rango lo determina la autoridad fiscal caso por caso.
Fuentes consultadas: Código Fiscal de la Federación, texto vigente publicado por la Cámara de Diputados del H. Congreso de la Unión, última reforma DOF 09-04-2026, artículos 29-A, 83 y 84. Monto de la multa del art. 84, fracción IV, actualizado por resolución miscelánea fiscal, DOF 28-12-2025. Este artículo es orientativo y no sustituye una revisión de tu caso por tu contador o asesor fiscal.
Ve el flujo real de facturación en tu propia demo
Te mostramos en vivo cómo TerraWare timbra hoy cada abono del plan de pagos, y qué parte del método de pago correcto sigue corriendo fuera del sistema.
Agenda una demo gratis