{"section":"tutorials","requestedLocale":"es","requestedSlug":"vtex-sales-app-configurar-el-archivo-checkout-instore-custom-js","locale":"es","slug":"vtex-sales-app-configurar-el-archivo-checkout-instore-custom-js","path":"docs/es/tutorials/apps/vtex-sales-app/vtex-sales-app-configurar-el-archivo-checkout-instore-custom-js.md","branch":"main","content":"`checkout-instore-custom.js` es el archivo usado para personalizar la configuración de **VTEX Sales App**. Este artículo describe las propiedades disponibles en ese archivo y cómo definirlas. Para ubicarlo sigue los pasos a continuación:\n\n1. En el Admin VTEX, accede a **Configuración de la tienda > Storefront > Checkout** o ingresa **Checkout** en el campo de búsqueda.\n2. Haz clic en el engranaje de la cuenta principal en la que se instaló **Sales App**.\n3. Haz clic en la pestaña **Código**.\n4. En la sección **Archivos** puedes ver el archivo `checkout-instore-custom.js`.\n\n## Idioma y configuración regional\n\n- `window.LOCALE_MESSAGES.locale`: define el idioma y la configuración regional usados en **Sales App**, como español de España (`'es-es'`), portugués de Brasil (`'pt-br'`) e inglés de EE. UU. (`'en-us'`).\n\n## Configuración por cuenta\n\n- `window.INSTORE_CONFIG_BY_ACCOUNT`: objeto que mapea tiendas y cuentas a configuraciones específicas.\n  - **Clave:** ID y nombre de la tienda (ej.: `\"1\"` y `\"nombredelatienda\"`).\n  - `name`: nombre de la cuenta VTEX.\n- `accounts`: ubicado dentro de `INSTORE_CONFIG`, recibe el valor de `window.INSTORE_CONFIG_BY_ACCOUNT` y asocia **Sales App** a las tiendas configuradas.\n\n## Autenticación\n\n- `auth.oAuthProviderName`: define el proveedor de autenticación OAuth usado para iniciar sesión en **Sales App** (ej.: `'Google'`).\n\n## Flujo de checkout y navegación\n\n- `enableNewCheckout`: activa el nuevo flujo de checkout de **Sales App**. El valor predeterminado de esta flag es `false`. Cuando el retailer completa la configuración inicial, esta flag se guarda como `true` en la tienda.\n\n  > ⚠️ No cambies el valor de `enableNewCheckout`. **Sales App** guarda este valor automáticamente después de la configuración inicial, y un cambio manual puede interrumpir el flujo del checkout y generar problemas al finalizar pedidos.\n\n- `enableExplore`: activa la pantalla con la experiencia **Explorar** (vitrina y anuncios).\n\n- `initialPage`: define la página que se abre primero después de iniciar sesión. Los valores aceptados son:\n\n  | Valor              | Ruta                       | Qué abre                                                       |\n  | :----------------- | :------------------------- | :------------------------------------------------------------- |\n  | `'advertisements'` | `/checkout/advertisements` | Vitrina y anuncios (la página **Explorar**) |\n  | `'sale'`           | `/sale`                    | Flujo de venta (ruta descontinuada)         |\n  | `'turn-list'`      | `/turn-list`               | Seguimiento de vendedores                                      |\n  | `'b2b'`            | `/b2b`                     | Página de inicio B2B                                           |\n\n- `pathAfterLogin`: determina la ruta interna a la que se dirige al usuario después de iniciar sesión (ej: `'/sale'`). Esta flag se descontinuó y se reemplazó por `initialPage`. Aún tiene precedencia sobre `initialPage`. Si la tienda tiene `pathAfterLogin` en el archivo, `initialPage` se ignora.\n\n  > ⚠️ Usa `initialPage` en lugar de `pathAfterLogin`.\n\n- `topbarTitle`: define el texto que se muestra en la barra superior de **Sales App** (ej: `'Nombre de la tienda'`).\n\n- `enableChangePrice`: cuando se configura como `true`, permite que el vendedor cambie el precio manualmente en **Sales App**. Cuando es `false`, no lo permite. Está relacionado con el campo `manualPrice` del [OrderForm](https://developers.vtex.com/docs/guides/orderform-fields).\n\n## Ventas y seguimiento\n\n- `sales.enabled`: activa la funcionalidad de venta en **Sales App**.\n\n- `salesAssociateTracking.enabled`: activa el seguimiento de ventas por vendedor, de forma que los pedidos se asocien a un código de vendedor.\n\n  > ⚠️ Tanto `sales.enabled` como `salesAssociateTracking.enabled` tienen que estar configuradas como `true` para que **Sales App** funcione correctamente.\n\n- `salesPerformance.enabled`: cuando está configurado como `true`, muestra el monitor de desempeño de la tienda en el nuevo menú de **Sales App**. Cuando es `false`, no se muestra.\n\n- `enableStorePerformance`: cuando está configurado como `true`, muestra el desempeño de la tienda en la barra lateral de la versión anterior de **Sales App**. Cuando es `false`, no se muestra. Esta flag es independiente de `salesPerformance.enabled`.\n\n- `showItemOriginSeller`: cuando está configurado como `true`, muestra el texto **tienda partner** en los ítems vendidos por un seller externo. Cuando es `false`, no se muestra.\n\n## Búsqueda de productos (`search`)\n\n- `search.vtexSearch`: cuando está configurado como `true`, usa [**Intelligent Search**](/es/docs/tutorials/intelligent-search-vision-general). Cuando es `false` o no aparece en el archivo, usa [**VTEX Search (Legado)**](/es/docs/tutorials/como-funciona-vtex-search-legado). Los filtros facetados (`search.filtersEnabled`) y la regionalización (`search.regionalizationEnabled`) dependen de que esta flag esté configurada como `true`.\n- `search.filtersEnabled`: activa filtros facetados en la interfaz de búsqueda. Solo tiene efecto cuando `search.vtexSearch` está configurada como `true`.\n- `search.regionalizationEnabled`: activa la [búsqueda regionalizada](/es/docs/tutorials/regionalizacion). Solo tiene efecto cuando `search.vtexSearch` está configurada como `true`.\n- `search.alternateIdRegex`: expresión regular (regex) usada para reconocer IDs alternativos de SKU, como códigos de barras.\n\n## Stock y venta cuando no hay stock\n\n- `sellWithoutStockInHands`: permite vender productos sin stock local en tiendas con configuración de ventas de stock local (**On Hands**).\n- `showStock`: cuando está configurado como `true`, muestra la cantidad en stock en las pantallas de producto y de búsqueda. Cuando es `false`, no se muestra.\n\n## Anexos y servicios\n\n- `enableAttachments`: activa servicios y anexos en el flujo de venta (por ejemplo, empaque para regalo).\n- `giftPackagingName`: nombre que se muestra para el servicio o anexo (por ejemplo, `'empaque'`).\n\n## Social Selling\n\n- `socialShare.vendorType`: determina la identificación del vendedor en los links de [**Social Selling**](/es/docs/tracks/compartir-el-carrito-utilizando-vtex-sales-app-social-selling) (ej.: `'code'` para usar el código del vendedor).\n- `socialShare.hostName`: define la dirección del sitio web que aparece en el link compartido con el cliente. **Sales App** usa, en este orden, el valor definido en esta propiedad (`socialShare.hostName`), la dirección ya guardada para compartir (`share.hostName`) y, por último, la dirección de la página en la que el vendedor se encuentra (`window.location.host`).\n\n## Código del vendedor (`noteAsVendorCode`)\n\n- `noteAsVendorCode.type`: define el tipo de campo del código del vendedor. Solo el valor `'select'` crea una lista de selección. Los demás valores muestran un campo abierto de texto. Los valores aceptados son:\n\n  | Valor      | Resultado                                                                                                                                                                                                    |\n  | :--------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n  | `'select'` | Lista de selección con los vendedores de la tienda del vendedor que inició sesión. La lista se completa mediante `getVendorsByStore` a partir del `storeId` de ese vendedor. |\n  | `'input'`  | Campo de texto (`TextBox`).                                                                                                                                               |\n  | `'text'`   | Campo de texto (`TextBox`).                                                                                                                                               |\n\n- `noteAsVendorCode.skipValidation`: controla si el código del vendedor es obligatorio y la consulta a [Master Data](/es/docs/tutorials/master-data-es).\n\n  | Valor                    | Resultado                                                                                                     |\n  | :----------------------- | :------------------------------------------------------------------------------------------------------------ |\n  | `false`                  | Hace que el campo sea obligatorio.                                                            |\n  | `true`                   | Guarda el código sin consultar **Master Data**.                                               |\n  | Flag ausente del archivo | El campo no es obligatorio, pero **Sales App** aún valida si el código informado es correcto. |\n\n- `noteAsVendorCode.autofill`: define si el código del vendedor se autocompleta en el link compartido. Esta flag solo funciona si `socialShare` está definido. Consulta [Social Selling](#social-selling).\n\n  | Valor                    | Resultado                                                                  |\n  | :----------------------- | :-------------------------------------------------------------------------- |\n  | `false`                  | No autocompleta el código.                                 |\n  | `true`                   | Autocompleta el código del vendedor en el link compartido. |\n  | Flag ausente del archivo | El valor predeterminado es `true`.                         |\n\n- `noteAsVendorCode.mask`: expresión regular (regex) que valida el formato del código del vendedor.\n\n  | Valor                    | Resultado                                                                                                                          |\n  | :----------------------- | :--------------------------------------------------------------------------------------------------------------------------------- |\n  | Regex configurada        | Valida el formato del código del vendedor. Se ignora cuando `noteAsVendorCode.type` es `'select'`. |\n  | Flag ausente del archivo | La expresión regular (regex) permanece vacía y el campo acepta cualquier formato.               |\n\nConsulta a continuación un ejemplo de cómo configurar `noteAsVendorCode`:\n\n```js\nnoteAsVendorCode: {\n  type: 'input',\n  mask: '^LL.{0,8}$',\n  skipValidation: true,\n  autofill: false,\n}\n```\n\n## Cliente anónimo\n\n- `allowAnonymousUser`: cuando se configura como `true`, permite finalizar pedidos sin identificar al cliente. Cuando es `false`, no lo permite. Se usa para ventas de stock local (**On Hands**).\n\n## Registro y perfil del cliente\n\n- `customerProfile.isCorporate`: define si la venta para persona jurídica está disponible en el registro del cliente. Además de `true` y `false`, la flag acepta el objeto `{ optional: true }`.\n\n  | Valor                | Resultado                                                                                      |\n  | :------------------- | :----------------------------------------------------------------------------------------------- |\n  | `false`              | Desactiva la venta para persona jurídica.                                      |\n  | `true`               | Hace obligatorio identificar la venta como persona jurídica.                   |\n  | `{ optional: true }` | Mantiene disponible la venta para persona jurídica, pero el campo es opcional. |\n\n## Tipos de identificación del cliente\n\n- `enableIdentificationTypes`: define qué tipos de identificación del cliente están disponibles en **Sales App**. Configura cada propiedad como `true` para habilitar el método o como `false` para deshabilitarlo.\n  - `QRCode`: cuando se configura como `true`, permite que el cliente se identifique usando el código QR. Cuando es `false`, no lo permite.\n  - `CPF`: cuando se configura como `true`, permite que el cliente se identifique usando el CPF (Brasil). Cuando es `false`, no lo permite.\n  - `Email`: cuando se configura como `true`, permite que el cliente se identifique usando el email. Cuando es `false`, no lo permite.\n  - `Phone`: cuando se configura como `true`, permite que el cliente se identifique usando el número de teléfono. Cuando es `false`, no lo permite.\n\nConsulta a continuación un ejemplo sobre cómo configurar `enableIdentificationTypes`:\n\n```js\nenableIdentificationTypes: {\n  QRCode: false,\n  CPF: false,\n  Email: true,\n  Phone: false,\n}\n```\n\n## Pagos\n\n- `challengeDrivenPaymentWorkflow`: activa un flujo de pago con validaciones adicionales, como [cartera digital (ewallet)](/es/docs/tracks/cartera-digital-e-wallet), [Payment Apps](https://developers.vtex.com/docs/guides/payments-integration-payment-app) y [POS (Point of Sale)](https://developers.vtex.com/docs/guides/payments-integration-ppp-applied-to-pos).\n- `payments.filters`: lista los IDs de los medios de pago (`paymentSystemId`) que pueden mostrarse en el checkout de **Sales App** (ej: `'1'`, `'4'`, `'125'`, `'202'`, `'44'`, `'45'`, `'207'`, `'208'`, `'209'`).\n\n## Cancelación del pedido\n\n- `isCancelOrderAlwaysVisible`: cuando se configura como `true`, mantiene siempre visible en la interfaz la opción de cancelar el pedido. Cuando es `false`, no la mantiene visible.\n\n## Dispositivos e impresora\n\n- `printedOrderExtraText`: texto adicional impreso en el comprobante del pedido.\n- `enablePrintButton`: cuando se configura como `true`, muestra el botón de imprimir en el pedido. Cuando es `false`, no lo muestra. El valor predeterminado es `true`."}