From 3d46d36647f2af93884a831817049e21c1295674 Mon Sep 17 00:00:00 2001 From: jhoffman-ms Date: Wed, 3 Jun 2026 11:31:06 -0300 Subject: [PATCH 1/3] docs(spec): add transfer checkout summary picture 16 --- docs/assets/picture_16.png | Bin 0 -> 42018 bytes ...03_checkout-summary-transfer-picture-16.md | 405 ++++++++++++++++++ 2 files changed, 405 insertions(+) create mode 100644 docs/assets/picture_16.png create mode 100644 docs/specs/SPEC_20260603_checkout-summary-transfer-picture-16.md diff --git a/docs/assets/picture_16.png b/docs/assets/picture_16.png new file mode 100644 index 0000000000000000000000000000000000000000..b30228000429b18e8667fee63d66a950e4a7b37d GIT binary patch literal 42018 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 literal 0 HcmV?d00001 diff --git a/docs/specs/SPEC_20260603_checkout-summary-transfer-picture-16.md b/docs/specs/SPEC_20260603_checkout-summary-transfer-picture-16.md new file mode 100644 index 000000000..3d883a91f --- /dev/null +++ b/docs/specs/SPEC_20260603_checkout-summary-transfer-picture-16.md @@ -0,0 +1,405 @@ +# SPEC_20260603_checkout-summary-transfer-picture-16 + +## 1) Contexto + +Esta SPEC define la implementacion de la variante visual referenciada por +`docs/assets/picture_16.png` dentro del flujo de `CheckoutSummary`, para el +escenario en el que el metodo de pago del checkout es `TRANSF`. + +La imagen corresponde al estado posterior a una compra/upgrade que todavia +requiere acreditacion manual del pago por transferencia bancaria. + +--- + +## 2) Fuente de verdad + +Prioridad para esta tarea: + +1. Esta SPEC. +2. `AGENTS.md`. +3. Patrones actuales de `src/components/Plans/Checkout/CheckoutSummary/`. +4. Asset de referencia: `docs/assets/picture_16.png`. + +Nota de trazabilidad: + +- Esta SPEC nace a partir del prompt y del asset `picture_16.png`. +- No existe una SPEC previa versionada para este cambio puntual. + +--- + +## 3) Objetivo + +Cuando el usuario llegue a `CheckoutSummary` con metodo de pago +`TRANSF`, debe mostrarse una variante alineada con `picture_16.png`, +reemplazando el bloque actual de instrucciones genericas por una presentacion +mas guiada del proceso de pago. + +La implementacion debe: + +- mantener el mensaje de estado del checkout; +- mantener el resumen de compra existente; +- mostrar pasos claros para completar el pago por transferencia; +- mostrar los datos bancarios necesarios en pantalla segun pais de facturacion; +- preservar los flujos actuales no alcanzados por `picture_16`. + +--- + +## 4) Alcance + +### 4.1 En alcance + +- Ruta `CheckoutSummary`: + `src/components/Plans/Checkout/CheckoutSummary/CheckoutSummary.js` +- Bloque de instrucciones de transferencia: + `src/components/Plans/Checkout/CheckoutSummary/TransferInformation/index.js` +- Textos visibles del resumen de checkout para transferencia en: + - `src/i18n/es.js` + - `src/i18n/en.js` +- Tests del flujo de resumen de checkout por transferencia. + +### 4.2 Fuera de alcance + +- Cambios en el formulario de seleccion/carga del metodo de pago. +- Cambios en `PaymentMethod`, `BillingInformation` o `ContactInformation`. +- Cambios en checkout success para tarjeta, Mercado Pago o debito automatico. +- Cambios de comportamiento del checkout server-side o de APIs de billing. +- Implementacion de logica de copiado al portapapeles. +- Creacion de un flujo distinto por pais fuera del mismo layout base. + +--- + +## 5) Escenario objetivo + +### 5.1 Condiciones de activacion + +La variante de `picture_16` debe aplicarse solo cuando se cumplan todas estas +condiciones: + +- el usuario esta en `CheckoutSummary`; +- el query param `paymentMethod` equivale a `TRANSF`; +- `upgradePending` es `true`; +- `billingCountry` es uno de estos valores: + - `ar` + - `mx` + - `co` + +### 5.2 Fallback + +Si `paymentMethod` es `TRANSF` pero no se cumple alguna de estas condiciones: + +- `billingCountry !== 'ar'`; o +- `upgradePending === false`; + +debe preservarse el bloque actual de transferencia, sin forzar el layout nuevo +de `picture_16`. + +Razon: + +- el nuevo layout debe cubrir todos los paises hoy soportados para + transferencia; +- el fallback actual debe seguir protegiendo cualquier pais futuro/no esperado y + el caso transferencia sin `upgradePending`. + +--- + +## 6) Comportamiento funcional + +### 6.1 Estructura general + +En el escenario objetivo, `CheckoutSummary` debe mantener: + +- link de volver arriba de la pagina; +- titulo principal `Disfruta Doppler`; +- mensaje de estado con CTA `IR AL INICIO`; +- resumen de compra actual; +- bloque de pasos para completar el pago. + +No debe cambiar: + +- la navegacion del CTA `IR AL INICIO` (`/dashboard`); +- la logica que decide titulo, descripcion y summary segun `buyType`; +- el origen de `paymentMethod`, `billingCountry` y `upgradePending`. + +### 6.2 Mensaje de estado + +El bloque superior tipo success/warning debe conservar la logica actual del +flujo de transferencia con `upgradePending`, reutilizando: + +- `checkoutProcessSuccess.transfer_title` +- `checkoutProcessSuccess.transfer_warning_message` +- `checkoutProcessSuccess.go_to_home_link` + +La implementacion no debe introducir una nueva decision de negocio para ese +mensaje si la logica actual ya resuelve el estado correcto. + +### 6.3 Resumen de compra + +El resumen de compra visible debajo del mensaje superior debe reutilizar el +componente y la logica existentes. + +No debe redisenarse el resumen de: + +- detalle/tipo de plan; +- cantidad; +- facturacion; +- cantidades de creditos/regalos si aplicaran. + +### 6.4 Bloque de pasos para transferencia + +El bloque actual de `TransferInformation` debe adaptarse al layout y contenido +de `picture_16` para el caso objetivo. + +El layout base debe ser el mismo para Argentina, Mexico y Colombia. Lo que +varia por pais es el contenido del bloque de datos bancarios/instrucciones +especificas. + +Regla explicita: + +- los pasos para completar el proceso de pago aplican tambien para Mexico y + Colombia; +- no debe existir una secuencia distinta de pasos por pais en esta iteracion; +- la unica variacion permitida por pais dentro de esa secuencia comun es la + informacion bancaria o fiscal necesaria para concretar la transferencia. + +Debe incluir: + +1. Un heading de seccion reutilizando + `checkoutProcessSuccess.transfer_steps_title`. +2. Un paso inicial con texto introductorio para realizar el deposito o + transferencia bancaria. +3. Un bloque visual de datos bancarios del pais correspondiente. +4. Un paso para enviar el comprobante a `billing@fromdoppler.com`. +5. Un paso final indicando que, una vez confirmado el pago, el usuario podra + comenzar a usar su nuevo plan. +6. Una linea final de cierre reutilizando + `checkoutProcessSuccess.transfer_explore_message`. + +### 6.5 Datos bancarios por pais + +El bloque de datos bancarios debe resolverse segun `billingCountry`. + +Los pasos 1, 2, 4, 5 y 6 mantienen la misma intencion funcional para `ar`, +`mx` y `co`. Solo el contenido del bloque del paso 3 puede variar segun el +pais. + +#### Argentina (`ar`) + +Para `billingCountry = 'ar'`, el bloque debe mostrar estos valores, alineados +al asset `picture_16`: + +- Banco: `BBVA BANCO FRANCES S.A.` +- Titular: `Biside SRL` +- CUIT: `30-7119594-1` +- CC: `090/408227/0` +- CBU: `0170090920000040822703` +- Alias: `BISIDE` + +#### Mexico (`mx`) + +Para `billingCountry = 'mx'`, debe mostrarse el mismo layout base de +`picture_16`, reemplazando el bloque bancario por los datos especificos de +transferencia definidos para Mexico. + +#### Colombia (`co`) + +Para `billingCountry = 'co'`, debe mostrarse el mismo layout base de +`picture_16`, reemplazando el bloque bancario por los datos especificos de +transferencia definidos para Colombia. + +Reglas comunes: + +- los labels visibles (`Banco`, `Titular`, `CUIT`, `CC`, `CBU`, `Alias`) deben + vivir en i18n cuando apliquen; +- si un pais requiere labels distintos a los de Argentina, esos labels tambien + deben salir de i18n; +- los valores de las cuentas o instrucciones por pais deben quedar + centralizados en una configuracion scopeada al bloque de transferencia y no + desperdigados en JSX; +- no inventar una fuente remota nueva para estos datos. + +Contrato esperado: + +- la implementacion debe poder resolver datos por `billingCountry` para `ar`, + `mx` y `co`; +- si faltara algun dato puntual de negocio para `mx` o `co`, debe dejarse + explicitado antes de implementar, no inferido desde el asset argentino. + +### 6.6 Iconografia del bloque bancario + +`picture_16` muestra: + +- iconos por paso; y +- un isotipo circular junto al bloque bancario. + +Reglas para esta iteracion: + +- reusar iconografia ya disponible en la app/style-guide para los pasos; +- si no existe un asset exportable/versionado para el isotipo circular del + bloque bancario, no rasterizar la captura ni inventar un asset nuevo; +- en ausencia de asset versionado, priorizar el layout y el contenido antes que + replicar ese isotipo. + +### 6.7 CBU y Alias + +`picture_16` sugiere una accion visual junto a `CBU` y `Alias`. + +Para evitar decisiones arbitrarias, esta SPEC define que en esta primera +iteracion: + +- no se implementa copiado al portapapeles; +- no se agregan tooltips, toasts ni estados de copiado; +- si se renderiza un icono junto a esos campos, debe ser decorativo solamente. + +--- + +## 7) Diseno y estilos + +- Replicar la composicion general de `docs/assets/picture_16.png`. +- Mantener consistencia con el style-guide de Doppler y con el layout actual de + `CheckoutSummary`. +- Usar el mismo layout base para `ar`, `mx` y `co`. +- Reusar clases existentes como `dp-wrap-message`, `dp-purchase-summary-list`, + `dp-rowflex`, grilla y tipografias del style-guide. +- Si se requieren estilos nuevos, scopearlos al bloque de transferencia dentro + de `src/components/Plans/Checkout/CheckoutSummary/TransferInformation/`. +- Evitar cambios globales salvo que el archivo ya sea el owner natural del + ajuste. + +Lineamientos visuales minimos: + +- los pasos deben conservar lectura vertical clara; +- los datos bancarios deben destacarse como bloque dentro del paso 1; +- el email `billing@fromdoppler.com` debe verse como accion reconocible; +- la linea final "Mientras tanto..." debe quedar separada visualmente del paso + anterior; +- debe funcionar correctamente en desktop y mobile. + +--- + +## 8) Accesibilidad + +- Mantener orden semantico correcto de headings. +- El email de envio de comprobante debe ser un link real (`mailto:`) o reutilizar + el patron accesible ya usado por el proyecto para emails clickeables. +- Los pasos deben estar construidos con markup semantico legible para screen + readers. +- Los iconos decorativos no deben agregar ruido semantico. + +--- + +## 9) Internacionalizacion + +Agregar o ajustar keys en: + +- `src/i18n/es.js` +- `src/i18n/en.js` + +Reglas: + +- no hardcodear copy visible en JSX; +- reutilizar keys actuales si representan exactamente el mismo texto; +- crear keys nuevas bajo `checkoutProcessSuccess` para: + - intro del paso 1; + - labels de datos bancarios; + - labels alternativos por pais, si `mx` o `co` no comparten exactamente los + mismos campos; + - texto final de confirmacion si el actual no coincide exactamente; + - cualquier copy adicional necesario para reflejar `picture_16`. + +No es necesario traducir los valores bancarios concretos, pero si los labels e +instrucciones. + +--- + +## 10) Archivos esperados + +Como minimo, la implementacion deberia tocar: + +- `src/components/Plans/Checkout/CheckoutSummary/TransferInformation/index.js` +- `src/components/Plans/Checkout/CheckoutSummary/CheckoutSummary.js` + solo si hiciera falta ajustar el contrato del componente +- `src/i18n/es.js` +- `src/i18n/en.js` + +Tests sugeridos: + +- `src/components/Plans/Checkout/CheckoutSummary/TransferInformation/index.test.js` + si se crea cobertura focalizada; +- `src/components/Plans/Checkout/CheckoutSummary/CheckoutSummery.test.js` + para integracion minima. + +--- + +## 11) Contrato de datos + +Entradas relevantes ya disponibles: + +- `paymentMethod` +- `billingCountry` +- `upgradePending` + +Salida esperada: + +- render de variante `picture_16` para `TRANSF + upgradePending` cuando + `billingCountry` sea `ar`, `mx` o `co`; +- render de fallback actual para otros casos de transferencia. + +No deben agregarse: + +- llamadas nuevas a APIs; +- dependencias nuevas; +- persistencia de estado de UI no necesaria. + +--- + +## 12) Testing + +Agregar o actualizar tests para validar, como minimo: + +- render del bloque `picture_16` cuando `paymentMethod = TRANSF`, + `billingCountry = 'ar'` y `upgradePending = true`; +- render del bloque `picture_16` cuando `paymentMethod = TRANSF`, + `billingCountry = 'mx'` y `upgradePending = true`; +- render del bloque `picture_16` cuando `paymentMethod = TRANSF`, + `billingCountry = 'co'` y `upgradePending = true`; +- presencia de datos bancarios/instrucciones de Argentina en pantalla; +- presencia de datos bancarios/instrucciones de Mexico en pantalla; +- presencia de datos bancarios/instrucciones de Colombia en pantalla; +- presencia del mail `billing@fromdoppler.com`; +- presencia del mensaje final de confirmacion del pago; +- preservacion del resumen de compra; +- fallback al bloque actual si `billingCountry` no es `ar`, `mx` ni `co`; +- fallback al bloque actual si `upgradePending = false`; +- no regresion para Mercado Pago y tarjeta. + +--- + +## 13) Definition of Done + +La tarea se considera completa cuando: + +- `CheckoutSummary` muestra la variante de `picture_16` en el escenario + objetivo; +- los datos de transferencia por pais (`ar`, `mx`, `co`) son visibles y + legibles; +- el resumen de compra existente no se rompe; +- el fallback de transferencia para escenarios fuera de alcance se mantiene; +- i18n ES/EN queda actualizado; +- los tests relevantes quedan en verde; +- no se introducen regresiones en otros metodos de pago. + +--- + +## 14) Pendientes de detalle funcional + +Quedan explicitamente pendientes para futura validacion de producto/diseno: + +- confirmar si el isotipo circular del bloque bancario tiene asset exportable; +- confirmar si `CBU` y `Alias` deben tener accion real de copiado; +- confirmar si el caso `TRANSF` con `upgradePending = false` tambien debe + migrar al layout nuevo o debe conservar el fallback actual. + +Dato pendiente obligatorio antes de implementar si no estuviera definido en la +tarea: + +- valores exactos de cuenta/instrucciones para Mexico y Colombia. From de2e13d075950e4672d228b2b5d2bbb1e5f9512b Mon Sep 17 00:00:00 2001 From: jhoffman-ms Date: Wed, 3 Jun 2026 11:47:07 -0300 Subject: [PATCH 2/3] docs(spec): align transfer country data contract --- ...03_checkout-summary-transfer-picture-16.md | 45 +++++++++++++------ 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/docs/specs/SPEC_20260603_checkout-summary-transfer-picture-16.md b/docs/specs/SPEC_20260603_checkout-summary-transfer-picture-16.md index 3d883a91f..f1af02fca 100644 --- a/docs/specs/SPEC_20260603_checkout-summary-transfer-picture-16.md +++ b/docs/specs/SPEC_20260603_checkout-summary-transfer-picture-16.md @@ -182,34 +182,53 @@ Los pasos 1, 2, 4, 5 y 6 mantienen la misma intencion funcional para `ar`, `mx` y `co`. Solo el contenido del bloque del paso 3 puede variar segun el pais. +#### Regla comun para `ar`, `mx` y `co` + +Para cualquiera de los paises soportados por transferencia (`ar`, `mx`, `co`), +el bloque debe mostrar: + +- los datos de la cuenta bancaria correspondiente a ese pais; +- los identificadores fiscales o bancarios que apliquen a ese pais; +- cualquier instruccion complementaria indispensable para concretar la + transferencia desde ese pais. + +La SPEC no debe asumir que todos los paises comparten exactamente los mismos +campos visibles. Por ejemplo: + +- Argentina puede requerir `CUIT`, `CC`, `CBU`, `Alias`; +- Mexico puede requerir otros campos bancarios o fiscales; +- Colombia puede requerir otros campos bancarios o fiscales. + +Lo obligatorio es: + +- mismo layout base; +- mismo flujo de pasos; +- contenido bancario/fiscal especifico por pais. + #### Argentina (`ar`) -Para `billingCountry = 'ar'`, el bloque debe mostrar estos valores, alineados -al asset `picture_16`: +Para `billingCountry = 'ar'`, el bloque debe tomar los datos de transferencia +definidos por negocio para Argentina. -- Banco: `BBVA BANCO FRANCES S.A.` -- Titular: `Biside SRL` -- CUIT: `30-7119594-1` -- CC: `090/408227/0` -- CBU: `0170090920000040822703` -- Alias: `BISIDE` +`picture_16` muestra como referencia visual un ejemplo de ese bloque para +Argentina, pero el asset no debe tratarse como fuente independiente para +inventar o mantener datos sensibles sin validacion. #### Mexico (`mx`) Para `billingCountry = 'mx'`, debe mostrarse el mismo layout base de `picture_16`, reemplazando el bloque bancario por los datos especificos de -transferencia definidos para Mexico. +transferencia definidos por negocio para Mexico. #### Colombia (`co`) Para `billingCountry = 'co'`, debe mostrarse el mismo layout base de `picture_16`, reemplazando el bloque bancario por los datos especificos de -transferencia definidos para Colombia. +transferencia definidos por negocio para Colombia. Reglas comunes: -- los labels visibles (`Banco`, `Titular`, `CUIT`, `CC`, `CBU`, `Alias`) deben - vivir en i18n cuando apliquen; +- los labels visibles deben vivir en i18n cuando apliquen; - si un pais requiere labels distintos a los de Argentina, esos labels tambien deben salir de i18n; - los valores de las cuentas o instrucciones por pais deben quedar @@ -221,7 +240,7 @@ Contrato esperado: - la implementacion debe poder resolver datos por `billingCountry` para `ar`, `mx` y `co`; -- si faltara algun dato puntual de negocio para `mx` o `co`, debe dejarse +- si faltara algun dato puntual de negocio para cualquier pais, debe dejarse explicitado antes de implementar, no inferido desde el asset argentino. ### 6.6 Iconografia del bloque bancario From 8c44464f948f686b30548159adf17d36c1feb87b Mon Sep 17 00:00:00 2001 From: jhoffman-ms Date: Wed, 3 Jun 2026 11:49:27 -0300 Subject: [PATCH 3/3] docs(spec): share transfer banking data across countries --- ...03_checkout-summary-transfer-picture-16.md | 66 +++++++------------ 1 file changed, 24 insertions(+), 42 deletions(-) diff --git a/docs/specs/SPEC_20260603_checkout-summary-transfer-picture-16.md b/docs/specs/SPEC_20260603_checkout-summary-transfer-picture-16.md index f1af02fca..71ed0c5ac 100644 --- a/docs/specs/SPEC_20260603_checkout-summary-transfer-picture-16.md +++ b/docs/specs/SPEC_20260603_checkout-summary-transfer-picture-16.md @@ -187,61 +187,51 @@ pais. Para cualquiera de los paises soportados por transferencia (`ar`, `mx`, `co`), el bloque debe mostrar: -- los datos de la cuenta bancaria correspondiente a ese pais; -- los identificadores fiscales o bancarios que apliquen a ese pais; -- cualquier instruccion complementaria indispensable para concretar la - transferencia desde ese pais. - -La SPEC no debe asumir que todos los paises comparten exactamente los mismos -campos visibles. Por ejemplo: - -- Argentina puede requerir `CUIT`, `CC`, `CBU`, `Alias`; -- Mexico puede requerir otros campos bancarios o fiscales; -- Colombia puede requerir otros campos bancarios o fiscales. +- el mismo bloque bancario de referencia mostrado en `picture_16`; +- los mismos identificadores fiscales y bancarios visibles; +- las mismas instrucciones complementarias del proceso de transferencia. Lo obligatorio es: - mismo layout base; - mismo flujo de pasos; -- contenido bancario/fiscal especifico por pais. +- mismo contenido bancario/fiscal para `ar`, `mx` y `co`. #### Argentina (`ar`) -Para `billingCountry = 'ar'`, el bloque debe tomar los datos de transferencia -definidos por negocio para Argentina. +Para `billingCountry = 'ar'`, el bloque debe mostrar estos valores: -`picture_16` muestra como referencia visual un ejemplo de ese bloque para -Argentina, pero el asset no debe tratarse como fuente independiente para -inventar o mantener datos sensibles sin validacion. +- Banco: `BBVA BANCO FRANCES S.A.` +- Titular: `Biside SRL` +- CUIT: `30-7119594-1` +- CC: `090/408227/0` +- CBU: `0170090920000040822703` +- Alias: `BISIDE` #### Mexico (`mx`) -Para `billingCountry = 'mx'`, debe mostrarse el mismo layout base de -`picture_16`, reemplazando el bloque bancario por los datos especificos de -transferencia definidos por negocio para Mexico. +Para `billingCountry = 'mx'`, debe mostrarse exactamente el mismo bloque de +datos e instrucciones definido para Argentina. #### Colombia (`co`) -Para `billingCountry = 'co'`, debe mostrarse el mismo layout base de -`picture_16`, reemplazando el bloque bancario por los datos especificos de -transferencia definidos por negocio para Colombia. +Para `billingCountry = 'co'`, debe mostrarse exactamente el mismo bloque de +datos e instrucciones definido para Argentina. Reglas comunes: - los labels visibles deben vivir en i18n cuando apliquen; -- si un pais requiere labels distintos a los de Argentina, esos labels tambien - deben salir de i18n; -- los valores de las cuentas o instrucciones por pais deben quedar +- los valores del bloque bancario y las instrucciones comunes deben quedar centralizados en una configuracion scopeada al bloque de transferencia y no desperdigados en JSX; - no inventar una fuente remota nueva para estos datos. Contrato esperado: -- la implementacion debe poder resolver datos por `billingCountry` para `ar`, - `mx` y `co`; -- si faltara algun dato puntual de negocio para cualquier pais, debe dejarse - explicitado antes de implementar, no inferido desde el asset argentino. +- la implementacion debe poder resolver la misma variante para `billingCountry` + `ar`, `mx` y `co`; +- no debe introducirse una diferenciacion de contenido entre esos tres paises + en esta iteracion. ### 6.6 Iconografia del bloque bancario @@ -320,8 +310,6 @@ Reglas: - crear keys nuevas bajo `checkoutProcessSuccess` para: - intro del paso 1; - labels de datos bancarios; - - labels alternativos por pais, si `mx` o `co` no comparten exactamente los - mismos campos; - texto final de confirmacion si el actual no coincide exactamente; - cualquier copy adicional necesario para reflejar `picture_16`. @@ -381,9 +369,8 @@ Agregar o actualizar tests para validar, como minimo: `billingCountry = 'mx'` y `upgradePending = true`; - render del bloque `picture_16` cuando `paymentMethod = TRANSF`, `billingCountry = 'co'` y `upgradePending = true`; -- presencia de datos bancarios/instrucciones de Argentina en pantalla; -- presencia de datos bancarios/instrucciones de Mexico en pantalla; -- presencia de datos bancarios/instrucciones de Colombia en pantalla; +- presencia del mismo bloque bancario/instrucciones en pantalla para + Argentina, Mexico y Colombia; - presencia del mail `billing@fromdoppler.com`; - presencia del mensaje final de confirmacion del pago; - preservacion del resumen de compra; @@ -399,8 +386,8 @@ La tarea se considera completa cuando: - `CheckoutSummary` muestra la variante de `picture_16` en el escenario objetivo; -- los datos de transferencia por pais (`ar`, `mx`, `co`) son visibles y - legibles; +- el mismo bloque de datos de transferencia es visible y legible para `ar`, + `mx` y `co`; - el resumen de compra existente no se rompe; - el fallback de transferencia para escenarios fuera de alcance se mantiene; - i18n ES/EN queda actualizado; @@ -417,8 +404,3 @@ Quedan explicitamente pendientes para futura validacion de producto/diseno: - confirmar si `CBU` y `Alias` deben tener accion real de copiado; - confirmar si el caso `TRANSF` con `upgradePending = false` tambien debe migrar al layout nuevo o debe conservar el fallback actual. - -Dato pendiente obligatorio antes de implementar si no estuviera definido en la -tarea: - -- valores exactos de cuenta/instrucciones para Mexico y Colombia.