{"info":{"_postman_id":"9d9b329d-9e16-4b7f-a08d-8bbd9b632f4b","name":"API Xerpa PFM","description":"<html><head></head><body><p>La <strong>API Xerpa</strong> proporciona una solución eficiente y segura para la integración de servicios financieros en plataformas bancarias. Diseñada para optimizar la automatización de procesos y mejorar la experiencia del usuario, esta API permite gestionar autenticación, creación de usuarios, configuración de cuentas, ejecución de reglas de ahorro y procesamiento de transacciones. Su arquitectura escalable y basada en estándares de seguridad garantiza una comunicación confiable entre los sistemas bancarios y la infraestructura de Xerpa.</p>\n<p>Gracias a su diseño modular, la API facilita la implementación de nuevas funcionalidades sin afectar la estabilidad de los sistemas existentes. Permite la interacción mediante solicitudes HTTP seguras, asegurando la transmisión encriptada de datos y el cumplimiento de regulaciones bancarias. Con una documentación clara y detallada, los desarrolladores pueden integrar sus servicios de manera ágil y reducir tiempos de desarrollo e implementación.</p>\n<p>Esta documentación está diseñada para desarrolladores externos que deseen conectar sus productos con Xerpa de forma sencilla, clara y segura.</p>\n<hr>\n<blockquote>\n<p>⚠️<strong>¡IMPORTANTE!</strong><br><em>Esta documentación está dirigida exclusivamente a clientes de Xerpa. Si formas parte de una institución financiera que utiliza nuestros servicios, te invitamos a continuar con la lectura para conocer las especificaciones técnicas, flujos de integración y mejores prácticas para el uso de la API.</em> </p>\n</blockquote>\n<hr>\n<hr>\n<h4 id=\"🔐-autenticación\">🔐 Autenticación</h4>\n<p>Para consumir la mayoría de los endpoints, necesitarás un <strong>token de autenticación</strong>. Consulta la sección <a href=\"https://documenter.getpostman.com/view/25856993/2sAYkGJyjT#9e758eec-98e5-4418-b94c-2f4d50dd667a\">Autenticación </a> para conocer el flujo completo y cómo obtener un token válido.</p>\n<hr>\n<h4 id=\"🧪-entornos-y-variables\">🧪 Entornos y variables</h4>\n<p>Esta colección utiliza variables para facilitar la reutilización:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Variable</th>\n<th>Descripción</th>\n<th>Ejemplo</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>{{base_url}}</code></td>\n<td>Dirección base de la API</td>\n<td><code>https://api.xerpa.com/v1</code></td>\n</tr>\n<tr>\n<td><code>{{auth_token}}</code></td>\n<td>Token para autenticación</td>\n<td><code>eyJhbGciOiJIUz...</code></td>\n</tr>\n<tr>\n<td><code>{{user_id}}</code></td>\n<td>ID del usuario autenticado</td>\n<td><code>12345678</code></td>\n</tr>\n</tbody>\n</table>\n</div><p>Configura tu entorno antes de ejecutar los requests.</p>\n<hr>\n<h4 id=\"🧭-convenciones-generales\">🧭 Convenciones generales</h4>\n<ul>\n<li><p>Todas las respuestas están en formato <strong>JSON</strong>.</p>\n</li>\n<li><p>Todos los tiempos están en formato <strong>ISO 8601</strong> (UTC).</p>\n</li>\n<li><p>Versionado por URL: <code>https://api.xerpa.com/v1/...</code></p>\n</li>\n<li><p>Errores siguen el formato estándar: código HTTP + cuerpo con campos <code>code</code>, <code>message</code>, <code>details</code>.</p>\n</li>\n</ul>\n<hr>\n<h4 id=\"📦-versionado-de-la-api\">📦 Versionado de la API</h4>\n<p>La API se encuentra actualmente en la versión <strong>v1</strong>. Cambios mayores que impliquen incompatibilidades se comunicarán oportunamente y se expondrán en una nueva versión (<code>v2</code>, etc.).</p>\n<hr>\n<h4 id=\"📞-soporte\">📞 Soporte</h4>\n<p>Si tienes dudas, contáctanos en:</p>\n<p>📧 <a href=\"https://mailto:soporte@getxerpa.com\">soporte@getxerpa.com</a></p>\n<p>También puedes abrir un issue o pregunta en nuestro portal para desarrolladores en:</p>\n<p>🛠️ <a href=\"https://ubank.atlassian.net/servicedesk/customer\">https://ubank.atlassian.net/servicedesk/customer</a></p>\n<hr>\n<h1 id=\"arquitectura\">Arquitectura</h1>\n<img src=\"https://content.pstmn.io/873b5e32-afd8-425b-bf23-01861a830ac1/QXJxdWl0ZWN0dXRhX1hlcnBhLnBuZw==\">\n\n<p>La siguiente imagen ilustra la arquitectura de alto nivel que permite la integración entre los <strong>clientes del banco</strong> y la <strong>plataforma de Xerpa</strong>, destacando los principales componentes involucrados en el consumo de la API:</p>\n<h4 id=\"🟢-lado-del-cliente-banco\">🟢 Lado del Cliente (Banco)</h4>\n<ul>\n<li><p><strong>Clientes Banco:</strong> Usuarios finales que acceden a los productos y servicios a través del canal del banco.</p>\n</li>\n<li><p><strong>Procesos Banco:</strong> Sistemas internos del banco que interactúan con la API de Xerpa.</p>\n</li>\n<li><p><strong>Equipo de Negocio:</strong> Stakeholders que analizan los datos generados mediante los servicios provistos por Xerpa.</p>\n</li>\n</ul>\n<h4 id=\"🌐-conectividad\">🌐 Conectividad</h4>\n<ul>\n<li><p><strong>Internet:</strong> Medio de conexión entre el banco y la nube de Xerpa.</p>\n</li>\n<li><p><strong>API Gateway:</strong> Punto de entrada unificado que controla el acceso a las distintas APIs, aplica reglas de seguridad y enruta el tráfico.</p>\n</li>\n</ul>\n<h4 id=\"☁️-lado-de-xerpa-cloud\">☁️ Lado de Xerpa (Cloud)</h4>\n<ul>\n<li><p><strong>Load Balancer:</strong> Balanceador de carga que distribuye las solicitudes entrantes hacia los distintos servicios backend de forma eficiente.</p>\n</li>\n<li><p><strong>Security Groups:</strong> Reglas de red que protegen los servicios de backend y bases de datos.</p>\n</li>\n<li><p><strong>Contenedores Kubernetes:</strong></p>\n<ul>\n<li><p><code>APIs</code>: Módulos expuestos públicamente para integración externa.</p>\n</li>\n<li><p><code>Motores &amp; Servicios</code>: Procesos internos que ejecutan lógica de negocio y cálculos.</p>\n</li>\n<li><p><code>APIs Analítica</code>: Servicios especializados en la entrega de datos analíticos y reportes.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"🟣-bases-de-datos\">🟣 Bases de Datos</h4>\n<ul>\n<li><p><strong>BDD Operacional:</strong> Almacena información transaccional en tiempo real.</p>\n</li>\n<li><p><strong>BDD Analítica:</strong> Estructura orientada a consulta, optimizada para visualización, análisis y reportería.</p>\n</li>\n</ul>\n<hr>\n<h1 id=\"autenticacion\">Autenticación</h1>\n<p>La autenticación para acceder a los productos Xerpa se lleva a cabo solicitando primero un token de aplicación, mediante el envío de las credenciales más el API-Key asignadas por Xerpa al cliente al momento de habilitar sus ambientes de QA y Producción, según corresponda.</p>\n<p>Esta API fortalece la seguridad del sistema y optimiza la eficiencia en los procesos de desarrollo e integración. Su implementación es ágil y estructurada, permitiendo una integración fluida con los servicios existentes y garantizando una autenticación robusta para los usuarios.</p>\n<h1 id=\"flujo-de-integracion-y-autorizacion\">Flujo de integración y autorización</h1>\n<p>A continuación revisaremos el proceso de autenticación y autorización requerido para consumir los servicios de la API de Xerpa, a través de un <strong>API Gateway público</strong>, siguiendo el estándar <strong>OAuth 2.0 con Bearer Tokens</strong>.</p>\n<h4 id=\"📶-acceso-externo-mediante-api-gateway\">📶 Acceso externo mediante API Gateway</h4>\n<p>Todas las integraciones con Xerpa, ya sean desde sistemas del banco o desde aplicaciones cliente, se realizan a través de un <strong>API Gateway</strong> que valida tokens y enruta las solicitudes a los servicios internos protegidos.</p>\n<img src=\"https://content.pstmn.io/b20f2c20-0436-4517-adbc-1b6812dfbfa4/RGlhZ3JhbWFfU2VjdWVuY2lhX0F1dGVudGljYWNpb24gWGVycGEucG5n\">\n\n<h4 id=\"🔑-tipos-de-tokens-y-su-propósito\">🔑 Tipos de tokens y su propósito</h4>\n<h5 id=\"client-tokens\"><strong>Client Tokens</strong></h5>\n<ul>\n<li><p><strong>Uso:</strong> Integraciones sistema a sistema (backends del banco ↔ APIs de Xerpa).</p>\n</li>\n<li><p><strong>Alcance:</strong> Pueden acceder a información de múltiples usuarios o productos.</p>\n</li>\n<li><p><strong>Duración:</strong> Hasta 24 horas.</p>\n</li>\n<li><p><strong>Recomendado para:</strong> Automatización de procesos, sincronización de datos, dashboards internos.</p>\n</li>\n</ul>\n<h5 id=\"user-tokens\"><strong>User Tokens</strong></h5>\n<ul>\n<li><p><strong>Uso:</strong> Integraciones frontend (apps del banco ↔ APIs de Xerpa).</p>\n</li>\n<li><p><strong>Alcance:</strong> Limitado a información de un solo usuario.</p>\n</li>\n<li><p><strong>Duración:</strong> 5 minutos.</p>\n</li>\n<li><p><strong>Recomendado para:</strong> Consultas de usuario autenticado en tiempo real (por ejemplo, saldo, movimientos, reglas de ahorro).</p>\n</li>\n</ul>\n<hr>\n<h4 id=\"🔁-flujo-resumido-del-proceso\">🔁 Flujo resumido del proceso</h4>\n<ol>\n<li><p><strong>El sistema del banco solicita un token</strong> enviando su <code>client_id</code> y <code>client_secret</code> al <strong>servicio de autenticación</strong> de Xerpa.</p>\n</li>\n<li><p><strong>El servicio responde con un Client Token</strong>, que debe guardarse temporalmente y usarse en futuras solicitudes.</p>\n</li>\n<li><p><strong>El banco envía una solicitud a la API</strong>, incluyendo el token en el header:<br> <code>Authorization: Bearer {{auth_token}}</code></p>\n</li>\n<li><p><strong>El API Gateway valida el token</strong> a través del <strong>servicio de autorización</strong>.</p>\n</li>\n<li><p><strong>Si el token es válido</strong>, la petición se enruta al servicio API correspondiente.</p>\n</li>\n<li><p><strong>La respuesta final es devuelta</strong> al banco.</p>\n</li>\n</ol>\n<hr>\n<h4 id=\"🧩-consideraciones-adicionales\">🧩 Consideraciones adicionales</h4>\n<ul>\n<li><p>Todos los tokens deben enviarse en el header HTTP como:<br>  <code>Authorization: Bearer {token}</code></p>\n</li>\n<li><p>Las APIs de frontend requieren que primero se obtenga un <strong>User Token</strong>, generalmente generado por el backend autorizado.</p>\n</li>\n<li><p>Para llamadas concurrentes o integración con múltiples usuarios, se recomienda usar <strong>Client Tokens</strong> desde servidores backend.</p>\n</li>\n</ul>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Arquitectura","slug":"arquitectura"},{"content":"Autenticación","slug":"autenticacion"},{"content":"Flujo de integración y autorización","slug":"flujo-de-integracion-y-autorizacion"}],"owner":"25856993","collectionId":"9d9b329d-9e16-4b7f-a08d-8bbd9b632f4b","publishedId":"2sAYkGJyjT","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2025-07-28T16:09:56.000Z"},"item":[{"name":"Ahorro Automático","item":[{"name":"Metas de ahorro","item":[{"name":"excluded-accounts","item":[{"name":"Obtener excluded-accounts","id":"6b5580d4-5e8f-46bc-bbb0-1d79043575ce","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/excluded-accounts/","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","excluded-accounts",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"6b5580d4-5e8f-46bc-bbb0-1d79043575ce"},{"name":"Modificar excluded-accounts","id":"d8ea6b58-0316-432a-ae6a-65d876f1d861","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"accounts\": {\n        \"include\": [\n            \"user_airflow_3_account_1\",\n            \"user_airflow_3_account_4\"\n        ],\n        \"exclude\": []\n    }\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/excluded-accounts/","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","excluded-accounts",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"d8ea6b58-0316-432a-ae6a-65d876f1d861"}],"id":"59a31e30-37bf-460b-b8f2-0ca9247fc1b8","_postman_id":"59a31e30-37bf-460b-b8f2-0ca9247fc1b8","description":""},{"name":"Listar metas de ahorro","event":[{"listen":"test","script":{"id":"913b85b2-aa71-4d81-98e5-dbcf77a93a1f","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const projectProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    project_category: 'object',\r","    project_status: 'object',\r","    project_name: 'string',\r","    total: 'number',\r","    progress: 'number',\r","    processing: 'number',\r","    pending: 'number',\r","    from_account: ['string', 'null'],\r","    to_account: ['string', 'null'],\r","    goal_date: 'string',\r","    updated_at: 'string',\r","    deleted_at: ['string', 'null'],\r","    created_at: 'string',\r","    rules: 'array'\r","};\r","\r","const projectCategoryProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const projectStatusProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const projectCategoryMetadataProperties = {\r","    icon: 'string',\r","    name: 'string',\r","    color: 'string',\r","    order: 'number',\r","    active: 'boolean',\r","    short_name: 'string',\r","    description: 'string'\r","};\r","\r","// Check if the response is an array with at least one item\r","pm.test(\"Response is an array with at least one item\", () => {\r","    pm.expect(responseJson).to.be.an('array').that.is.not.empty;\r","});\r","\r","// Check properties of the first project\r","pm.test(\"Project has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson[0], projectProperties);\r","});\r","\r","// Check project_category properties\r","pm.test(\"Project category has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson[0].project_category, projectCategoryProperties);\r","});\r","\r","// Check project_status properties\r","pm.test(\"Project status has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson[0].project_status, projectStatusProperties);\r","});\r","\r","// Check project_category metadata properties\r","pm.test(\"Project category metadata has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson[0].project_category.metadata, projectCategoryMetadataProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}},"requests":{}}}],"id":"c70c44aa-59e9-4167-a358-09ae7807a415","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Authorization","value":"Bearer {{token_app}}","type":"text"}],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/","description":"<p>Este endpoint recupera todos los proyectos (metas de ahorro) asociados a un usuario específico, con opción de paginar los resultados.</p>\n<img src=\"https://content.pstmn.io/08a5f769-1a45-4def-b27c-c88c78567a78/TGlzdGFyX01ldGFzLnBuZw==\" width=\"106\" height=\"142\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Metodo: GET</p>\n</li>\n<li><p>URL: <code>{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/</code></p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>user_id</code> (string): ID del usuario asociado al proyecto.</li>\n</ul>\n</li>\n<li><p>Parámetros de query: Se agregan al final de la ruta, sirven principalmente para manejar la paginación de la petición. Ejm: <code>/projects/?page=1&amp;page_size=10</code></p>\n<ul>\n<li><p><code>page</code>(number): Número de página para la paginación de resultados.</p>\n</li>\n<li><p><code>page_size</code>(number): Cantidad de resultados que se incluirán por página.</p>\n</li>\n<li><p><code>paginate</code>(bool): Indica si se desea que la respuesta sea paginada o no.</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<hr />\n<h4 id=\"response\">Response</h4>\n<p>La respuesta incluirá un arreglo de objetos <code>project</code>, cada uno con los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): ID del proyecto.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario propietario del proyecto.</p>\n</li>\n<li><p><code>project_category</code> (objeto): Detalles de la categoría del proyecto, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID de la categoría.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la categoría.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>, <code>name</code>, <code>color</code>, <code>group</code>, <code>order</code>, <code>active</code>, <code>short_name</code>, <code>description</code>.</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>project_status</code> (object): Detalles del estado actual del proyecto, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del estado.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo del estado.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem de estado.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del estado.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>, <code>color</code>, <code>active</code>, <code>short_name</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>project_config</code> (object): Información sobre el estado la configuración del proyecto, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID de la configuración.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo de la configuración.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem de la configuración.</p>\n</li>\n<li><p><code>description</code>(string): Descripción de la configuración.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>limit</code>, <code>default</code>, <code>available</code>, <code>access_denied</code>, <code>permission_edit_field</code>, <code>allows_recieve_transfers</code>, <code>fields_required_to_create</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>project_name</code> (string): Nombre del proyecto.</p>\n</li>\n<li><p><code>total</code> (number): Monto total asociado al proyecto.</p>\n</li>\n<li><p><code>progress</code> (number): Monto ya ahorrado o progresado en el proyecto.</p>\n</li>\n<li><p><code>processing</code> (number): Monto actualmente en proceso de ahorro.</p>\n</li>\n<li><p><code>pending</code> (number): Monto pendiente por ahorrar.</p>\n</li>\n<li><p><code>investment_returns</code>(number): Importe ganado por las inversiones.</p>\n</li>\n<li><p><code>from_account</code> (string): Cuenta de origen de los fondos.</p>\n</li>\n<li><p><code>to_account</code> (string): Cuenta destino del ahorro.</p>\n</li>\n<li><p><code>goal_date</code> (string): Fecha objetivo del proyecto.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de última actualización.</p>\n</li>\n<li><p><code>deleted_at</code> (string or null): Fecha de eliminación, si aplica.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha de creación del proyecto.</p>\n</li>\n<li><p><code>rules</code> (array of object): Arreglo con las reglas de ahorro asociadas al proyecto.</p>\n</li>\n</ul>\n<p>La respuesta también incluye información de paginación, como:</p>\n<ul>\n<li><p><code>next</code>(string or null): URL de la siguiente página</p>\n</li>\n<li><p><code>previous</code>(string or null): URL de la página anterior</p>\n</li>\n<li><p><code>total_pages</code>(number): Total de páginas disponibles</p>\n</li>\n<li><p><code>current_page</code>(number): Página actual</p>\n</li>\n<li><p><code>offset</code>(number): Índice de desplazamiento</p>\n</li>\n<li><p><code>count</code>(number): Total de elementos</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"next\": { \"type\": [\"string\", \"null\"], \"format\": \"uri\" },\n    \"previous\": { \"type\": [\"string\", \"null\"], \"format\": \"uri\" },\n    \"total_pages\": { \"type\": \"integer\" },\n    \"current_page\": { \"type\": \"integer\" },\n    \"offset\": { \"type\": \"integer\" },\n    \"count\": { \"type\": \"integer\" },\n    \"results\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\" },\n          \"user_id\": { \"type\": \"string\" },\n          \"project_category\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\" },\n              \"catalog\": { \"type\": \"string\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"icon\": { \"type\": \"string\" },\n                  \"name\": { \"type\": \"string\" },\n                  \"color\": { \"type\": \"string\" },\n                  \"group\": { \"type\": \"string\" },\n                  \"order\": { \"type\": \"integer\" },\n                  \"active\": { \"type\": \"boolean\" },\n                  \"short_name\": { \"type\": \"string\" },\n                  \"description\": { \"type\": \"string\" }\n                }\n              }\n            }\n          },\n          \"project_status\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\" },\n              \"catalog\": { \"type\": \"string\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"icon\": { \"type\": \"string\" },\n                  \"color\": { \"type\": \"string\" },\n                  \"active\": { \"type\": \"boolean\" },\n                  \"short_name\": { \"type\": \"string\" }\n                }\n              }\n            }\n          },\n          \"project_config\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\" },\n              \"catalog\": { \"type\": \"string\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"limit\": { \"type\": [\"number\", \"null\"] },\n                  \"default\": { \"type\": \"boolean\" },\n                  \"available\": { \"type\": \"boolean\" },\n                  \"access_denied\": { \"type\": \"object\" },\n                  \"permission_edit_fields\": {\n                    \"type\": \"array\",\n                    \"items\": { \"type\": \"string\" }\n                  },\n                  \"allows_receive_transfers\": { \"type\": \"boolean\" },\n                  \"fields_required_to_create\": {\n                    \"type\": \"array\",\n                    \"items\": { \"type\": \"string\" }\n                  }\n                }\n              }\n            }\n          },\n          \"project_name\": { \"type\": \"string\" },\n          \"total\": { \"type\": \"number\" },\n          \"progress\": { \"type\": \"number\" },\n          \"processing\": { \"type\": \"number\" },\n          \"pending\": { \"type\": \"number\" },\n          \"investment_returns\": { \"type\": \"number\" },\n          \"from_account\": { \"type\": \"string\" },\n          \"to_account\": { \"type\": \"string\" },\n          \"goal_date\": { \"type\": \"string\", \"format\": \"date\" },\n          \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"deleted_at\": { \"type\": [\"string\", \"null\"], \"format\": \"date-time\" },\n          \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"rules\": {\n            \"type\": \"array\",\n            \"items\": { \"type\": \"object\" }\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects",""],"host":["{{host_app}}"],"query":[{"disabled":true,"key":"page","value":"1"},{"disabled":true,"key":"page_size","value":"1"},{"disabled":true,"key":"paginate","value":"false"},{"disabled":true,"key":"paginate_user_id","value":"true"},{"disabled":true,"description":{"content":"<p>default, custom</p>\n","type":"text/plain"},"key":"order_by_config_type","value":"custom"},{"disabled":true,"key":"project_config","value":"11abc328-f996-49bd-82b1-ca9b81dc12cc"},{"disabled":true,"description":{"content":"<p>default, custom</p>\n","type":"text/plain"},"key":"filter_by_config_type","value":"custom"},{"disabled":true,"key":"from_account","value":"test_user_api_2_account_7"},{"disabled":true,"key":"to_account","value":"test_user_api_2_account_1"}],"variable":[]}},"response":[{"id":"df0ea0c6-de71-421c-b8c2-a8d3d84aefc5","name":"Successful Response","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{token_app}}","type":"text"}],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/?paginate_user_id=true","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","users","{{user_id}}","projects",""],"query":[{"key":"page_size","value":"1","disabled":true},{"key":"paginate","value":"false","disabled":true},{"key":"order_by_config_type","value":"custom","description":"default, custom","disabled":true},{"key":"project_config","value":"11abc328-f996-49bd-82b1-ca9b81dc12cc","type":"text","disabled":true},{"key":"filter_by_config_type","value":"custom","description":"default, custom","type":"text","disabled":true},{"key":"paginate_user_id","value":"true"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 14:39:20 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"16092"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"b808a5ef-4c7e-423e-99bc-3f8a0114ba9c"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LVavsFmUoAMElHg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68387197-0f04b78135bc996156937a5a;Parent=76dc0c5557824b42;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"next\": \"/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/?page=2&paginate_user_id=true\",\n    \"previous\": null,\n    \"total_pages\": 3,\n    \"current_page\": 1,\n    \"offset\": 0,\n    \"count\": 30,\n    \"results\": [\n        {\n            \"id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"project_category\": {\n                \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_holidays\",\n                \"description\": \"Meta de ahorro para vacaciones\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                    \"name\": \"Vacaciones\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 1,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                    \"description\": \"\"\n                }\n            },\n            \"project_status\": {\n                \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_active\",\n                \"description\": \"Meta activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n                }\n            },\n            \"project_config\": {\n                \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"xerpa_project\",\n                \"description\": \"Meta default 212\",\n                \"metadata\": {\n                    \"limit\": null,\n                    \"default\": true,\n                    \"available\": true,\n                    \"access_denied\": {},\n                    \"permission_edit_fields\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ],\n                    \"allows_receive_transfers\": true,\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ]\n                }\n            },\n            \"project_name\": \"Viaje a japon\",\n            \"total\": 20000,\n            \"progress\": 9000,\n            \"processing\": 0,\n            \"pending\": 0,\n            \"investment_returns\": 0,\n            \"from_account\": \"test_user_api_2_account_1\",\n            \"to_account\": \"test_user_api_2_account_2\",\n            \"goal_date\": \"2030-10-30\",\n            \"updated_at\": \"2025-05-29T08:39:16.124334-06:00\",\n            \"deleted_at\": null,\n            \"created_at\": \"2025-05-28T14:09:35.599736-06:00\",\n            \"rules\": []\n        },\n        {\n            \"id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"project_category\": {\n                \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_holidays\",\n                \"description\": \"Meta de ahorro para vacaciones\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                    \"name\": \"Vacaciones\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 1,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                    \"description\": \"\"\n                }\n            },\n            \"project_status\": {\n                \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_active\",\n                \"description\": \"Meta activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n                }\n            },\n            \"project_config\": {\n                \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"xerpa_project\",\n                \"description\": \"Meta default 212\",\n                \"metadata\": {\n                    \"limit\": null,\n                    \"default\": true,\n                    \"available\": true,\n                    \"access_denied\": {},\n                    \"permission_edit_fields\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ],\n                    \"allows_receive_transfers\": true,\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ]\n                }\n            },\n            \"project_name\": \"Viaje a japon\",\n            \"total\": 20000,\n            \"progress\": 9000,\n            \"processing\": 0,\n            \"pending\": 0,\n            \"investment_returns\": 0,\n            \"from_account\": \"test_user_api_2_account_1\",\n            \"to_account\": \"test_user_api_2_account_2\",\n            \"goal_date\": \"2030-10-30\",\n            \"updated_at\": \"2025-05-29T08:39:16.124334-06:00\",\n            \"deleted_at\": null,\n            \"created_at\": \"2025-05-28T14:09:30.795588-06:00\",\n            \"rules\": []\n        },\n        {\n            \"id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"project_category\": {\n                \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_holidays\",\n                \"description\": \"Meta de ahorro para vacaciones\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                    \"name\": \"Vacaciones\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 1,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                    \"description\": \"\"\n                }\n            },\n            \"project_status\": {\n                \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_active\",\n                \"description\": \"Meta activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n                }\n            },\n            \"project_config\": {\n                \"id\": \"11abc328-f996-49bd-82b1-ca9b81dc12cc\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"xerpa_plus\",\n                \"description\": \"meta xerpa plus\",\n                \"metadata\": {\n                    \"info\": {\n                        \"return_rate\": 10\n                    },\n                    \"name\": \"Xerpa plus\",\n                    \"limit\": 1,\n                    \"default\": false,\n                    \"available\": true,\n                    \"access_denied\": {\n                        \"project_detail_view\": [\n                            \"PATCH\",\n                            \"DELETE\"\n                        ]\n                    },\n                    \"permission_edit_fields\": [\n                        \"progress\",\n                        \"processing\",\n                        \"from_account\",\n                        \"to_account\",\n                        \"pending\"\n                    ],\n                    \"fields_required_to_create\": [\n                        \"to_account\",\n                        \"from_account\",\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\",\n                        \"project_config_id\",\n                        \"project_category_id\"\n                    ]\n                }\n            },\n            \"project_name\": \"Xerpa plus\",\n            \"total\": 20000,\n            \"progress\": 8000,\n            \"processing\": 0,\n            \"pending\": 0,\n            \"investment_returns\": 1000,\n            \"from_account\": \"test_user_api_2_account_1\",\n            \"to_account\": \"test_user_api_2_account_4\",\n            \"goal_date\": \"2030-10-30\",\n            \"updated_at\": \"2025-05-29T08:39:16.124327-06:00\",\n            \"deleted_at\": null,\n            \"created_at\": \"2025-05-27T10:34:38.724843-06:00\",\n            \"rules\": []\n        },\n        {\n            \"id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"project_category\": {\n                \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_holidays\",\n                \"description\": \"Meta de ahorro para vacaciones\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                    \"name\": \"Vacaciones\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 1,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                    \"description\": \"\"\n                }\n            },\n            \"project_status\": {\n                \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_active\",\n                \"description\": \"Meta activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n                }\n            },\n            \"project_config\": {\n                \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"xerpa_project\",\n                \"description\": \"Meta default 212\",\n                \"metadata\": {\n                    \"limit\": null,\n                    \"default\": true,\n                    \"available\": true,\n                    \"access_denied\": {},\n                    \"permission_edit_fields\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ],\n                    \"allows_receive_transfers\": true,\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ]\n                }\n            },\n            \"project_name\": \"Xerpa plus\",\n            \"total\": 20000,\n            \"progress\": 8000,\n            \"processing\": 0,\n            \"pending\": 0,\n            \"investment_returns\": 1000,\n            \"from_account\": \"test_user_api_2_account_1\",\n            \"to_account\": \"test_user_api_2_account_4\",\n            \"goal_date\": \"2030-10-30\",\n            \"updated_at\": \"2025-05-29T08:39:16.124327-06:00\",\n            \"deleted_at\": null,\n            \"created_at\": \"2025-05-27T10:29:37.713619-06:00\",\n            \"rules\": []\n        },\n        {\n            \"id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"project_category\": {\n                \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_holidays\",\n                \"description\": \"Meta de ahorro para vacaciones\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                    \"name\": \"Vacaciones\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 1,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                    \"description\": \"\"\n                }\n            },\n            \"project_status\": {\n                \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_active\",\n                \"description\": \"Meta activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n                }\n            },\n            \"project_config\": {\n                \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"xerpa_project\",\n                \"description\": \"Meta default 212\",\n                \"metadata\": {\n                    \"limit\": null,\n                    \"default\": true,\n                    \"available\": true,\n                    \"access_denied\": {},\n                    \"permission_edit_fields\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ],\n                    \"allows_receive_transfers\": true,\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ]\n                }\n            },\n            \"project_name\": \"Xerpa plus\",\n            \"total\": 20000,\n            \"progress\": 8000,\n            \"processing\": 0,\n            \"pending\": 0,\n            \"investment_returns\": 1000,\n            \"from_account\": \"test_user_api_2_account_1\",\n            \"to_account\": \"test_user_api_2_account_4\",\n            \"goal_date\": \"2030-10-30\",\n            \"updated_at\": \"2025-05-29T08:39:16.124327-06:00\",\n            \"deleted_at\": null,\n            \"created_at\": \"2025-05-27T10:21:31.386703-06:00\",\n            \"rules\": []\n        },\n        {\n            \"id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"project_category\": {\n                \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_holidays\",\n                \"description\": \"Meta de ahorro para vacaciones\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                    \"name\": \"Vacaciones\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 1,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                    \"description\": \"\"\n                }\n            },\n            \"project_status\": {\n                \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_active\",\n                \"description\": \"Meta activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n                }\n            },\n            \"project_config\": {\n                \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"xerpa_project\",\n                \"description\": \"Meta default 212\",\n                \"metadata\": {\n                    \"limit\": null,\n                    \"default\": true,\n                    \"available\": true,\n                    \"access_denied\": {},\n                    \"permission_edit_fields\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ],\n                    \"allows_receive_transfers\": true,\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ]\n                }\n            },\n            \"project_name\": \"Xerpa plus\",\n            \"total\": 20000,\n            \"progress\": 8000,\n            \"processing\": 0,\n            \"pending\": 0,\n            \"investment_returns\": 1000,\n            \"from_account\": \"test_user_api_2_account_1\",\n            \"to_account\": \"test_user_api_2_account_4\",\n            \"goal_date\": \"2030-10-30\",\n            \"updated_at\": \"2025-05-29T08:39:16.124327-06:00\",\n            \"deleted_at\": null,\n            \"created_at\": \"2025-05-27T10:19:41.299354-06:00\",\n            \"rules\": []\n        },\n        {\n            \"id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"project_category\": {\n                \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_holidays\",\n                \"description\": \"Meta de ahorro para vacaciones\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                    \"name\": \"Vacaciones\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 1,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                    \"description\": \"\"\n                }\n            },\n            \"project_status\": {\n                \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_active\",\n                \"description\": \"Meta activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n                }\n            },\n            \"project_config\": {\n                \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"xerpa_project\",\n                \"description\": \"Meta default 212\",\n                \"metadata\": {\n                    \"limit\": null,\n                    \"default\": true,\n                    \"available\": true,\n                    \"access_denied\": {},\n                    \"permission_edit_fields\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ],\n                    \"allows_receive_transfers\": true,\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ]\n                }\n            },\n            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n            \"total\": 20000,\n            \"progress\": 8000,\n            \"processing\": 0,\n            \"pending\": 0,\n            \"investment_returns\": 1000,\n            \"from_account\": \"test_user_api_2_account_1\",\n            \"to_account\": \"test_user_api_2_account_4\",\n            \"goal_date\": \"2030-10-30\",\n            \"updated_at\": \"2025-05-29T08:39:16.124327-06:00\",\n            \"deleted_at\": null,\n            \"created_at\": \"2025-05-27T10:08:02.095287-06:00\",\n            \"rules\": []\n        },\n        {\n            \"id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"project_category\": {\n                \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_holidays\",\n                \"description\": \"Meta de ahorro para vacaciones\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                    \"name\": \"Vacaciones\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 1,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                    \"description\": \"\"\n                }\n            },\n            \"project_status\": {\n                \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_active\",\n                \"description\": \"Meta activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n                }\n            },\n            \"project_config\": {\n                \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"xerpa_project\",\n                \"description\": \"Meta default 212\",\n                \"metadata\": {\n                    \"limit\": null,\n                    \"default\": true,\n                    \"available\": true,\n                    \"access_denied\": {},\n                    \"permission_edit_fields\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ],\n                    \"allows_receive_transfers\": true,\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ]\n                }\n            },\n            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n            \"total\": 20000,\n            \"progress\": 8000,\n            \"processing\": 0,\n            \"pending\": 0,\n            \"investment_returns\": 1000,\n            \"from_account\": \"test_user_api_2_account_1\",\n            \"to_account\": \"test_user_api_2_account_4\",\n            \"goal_date\": \"2030-10-30\",\n            \"updated_at\": \"2025-05-29T08:39:16.124327-06:00\",\n            \"deleted_at\": null,\n            \"created_at\": \"2025-05-27T08:18:58.727962-06:00\",\n            \"rules\": []\n        },\n        {\n            \"id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"project_category\": {\n                \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_holidays\",\n                \"description\": \"Meta de ahorro para vacaciones\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                    \"name\": \"Vacaciones\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 1,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                    \"description\": \"\"\n                }\n            },\n            \"project_status\": {\n                \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_active\",\n                \"description\": \"Meta activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n                }\n            },\n            \"project_config\": {\n                \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"xerpa_project\",\n                \"description\": \"Meta default 212\",\n                \"metadata\": {\n                    \"limit\": null,\n                    \"default\": true,\n                    \"available\": true,\n                    \"access_denied\": {},\n                    \"permission_edit_fields\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ],\n                    \"allows_receive_transfers\": true,\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ]\n                }\n            },\n            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n            \"total\": 20000,\n            \"progress\": 8000,\n            \"processing\": 0,\n            \"pending\": 0,\n            \"investment_returns\": 1000,\n            \"from_account\": \"test_user_api_2_account_1\",\n            \"to_account\": \"test_user_api_2_account_4\",\n            \"goal_date\": \"2030-10-30\",\n            \"updated_at\": \"2025-05-29T08:39:16.124327-06:00\",\n            \"deleted_at\": null,\n            \"created_at\": \"2025-05-27T08:17:58.000128-06:00\",\n            \"rules\": []\n        },\n        {\n            \"id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"project_category\": {\n                \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_holidays\",\n                \"description\": \"Meta de ahorro para vacaciones\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                    \"name\": \"Vacaciones\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 1,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                    \"description\": \"\"\n                }\n            },\n            \"project_status\": {\n                \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_active\",\n                \"description\": \"Meta activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n                }\n            },\n            \"project_config\": {\n                \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"xerpa_project\",\n                \"description\": \"Meta default 212\",\n                \"metadata\": {\n                    \"limit\": null,\n                    \"default\": true,\n                    \"available\": true,\n                    \"access_denied\": {},\n                    \"permission_edit_fields\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ],\n                    \"allows_receive_transfers\": true,\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ]\n                }\n            },\n            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n            \"total\": 20000,\n            \"progress\": 8000,\n            \"processing\": 0,\n            \"pending\": 0,\n            \"investment_returns\": 1000,\n            \"from_account\": \"test_user_api_2_account_1\",\n            \"to_account\": \"test_user_api_2_account_4\",\n            \"goal_date\": \"2030-10-30\",\n            \"updated_at\": \"2025-05-29T08:39:16.124327-06:00\",\n            \"deleted_at\": null,\n            \"created_at\": \"2025-05-27T08:17:51.154771-06:00\",\n            \"rules\": []\n        }\n    ]\n}"},{"id":"bedf8b6a-3761-444c-874c-124708c36cf7","name":"Bad Request - Invalid Page","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer {{token_app}}","type":"text"}],"url":{"raw":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/projects/?paginate_user_id=true&page=100","host":["{{host_app}}api-saving"],"path":["v1","saving-service","users","{{user_id}}","projects",""],"query":[{"key":"paginate_user_id","value":"true"},{"key":"page","value":"100"}]}},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Invalid page.\"\n}"}],"_postman_id":"c70c44aa-59e9-4167-a358-09ae7807a415"},{"name":"Crear meta","event":[{"listen":"test","script":{"id":"5d0d4b70-267f-4b9b-9481-7562952d0557","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulPost();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const projectProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    project_name: 'string',\r","    total: 'string',\r","    progress: 'string',\r","    processing: 'string',\r","    pending: 'string',\r","    from_account: ['string', 'null'],\r","    to_account: ['string', 'null'],\r","    goal_date: 'string',\r","    created_at: 'string',\r","    updated_at: 'string',\r","    deleted_at: ['string', 'null'],\r","    project_category: 'string',\r","    project_status: 'string'\r","};\r","\r","// Check project properties\r","pm.test(\"Project has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, projectProperties);\r","});\r","// Test to check if the goal date is in the future\r","pm.test(\"Goal date is in the future\", function () {\r","    const responseJson = pm.response.json();\r","    const goalDate = new Date(responseJson.goal_date);\r","    const currentDate = new Date();\r","\r","    pm.expect(goalDate.getTime()).to.be.greaterThan(currentDate.getTime());\r","});\r","var template = `\r","<style type=\"text/css\">\r","    .tftable {font-size:14px;color:#333333;width:100%;border-width: 1px;border-color: #87ceeb;border-collapse: collapse;}\r","    .tftable th {font-size:18px;background-color:#87ceeb;border-width: 1px;padding: 8px;border-style: solid;border-color: #87ceeb;text-align:left;}\r","    .tftable tr {background-color:#ffffff;}\r","    .tftable td {font-size:14px;border-width: 1px;padding: 8px;border-style: solid;border-color: #87ceeb;}\r","    .tftable tr:hover {background-color:#e0ffff;}\r","</style>\r","\r","<table class=\"tftable\" border=\"1\">\r","    <tr>\r","        <th>ID</th>\r","        <th>User ID</th>\r","        <th>Project Name</th>\r","        <th>Total</th>\r","        <th>Progress</th>\r","        <th>Processing</th>\r","        <th>Pending</th>\r","        <th>From Account</th>\r","        <th>To Account</th>\r","        <th>Goal Date</th>\r","        <th>Created At</th>\r","        <th>Updated At</th>\r","        <th>Deleted At</th>\r","        <th>Project Category</th>\r","        <th>Project Status</th>\r","    </tr>\r","    \r","    {{#each response}}\r","        <tr>\r","            <td>{{id}}</td>\r","            <td>{{user_id}}</td>\r","            <td>{{project_name}}</td>\r","            <td>{{total}}</td>\r","            <td>{{progress}}</td>\r","            <td>{{processing}}</td>\r","            <td>{{pending}}</td>\r","            <td>{{from_account}}</td>\r","            <td>{{to_account}}</td>\r","            <td>{{goal_date}}</td>\r","            <td>{{created_at}}</td>\r","            <td>{{updated_at}}</td>\r","            <td>{{deleted_at}}</td>\r","            <td>{{project_category}}</td>\r","            <td>{{project_status}}</td>\r","        </tr>\r","    {{/each}}\r","</table>\r","`;\r","\r","function constructVisualizerPayload() {\r","    return {response: pm.response.json()}\r","}\r","\r","pm.visualizer.set(template, constructVisualizerPayload());"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}},"requests":{}}}],"id":"7d62465b-4d32-477c-840a-8f6d6c3035bb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"Viaje a japon -fixed_salary\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2030-10-30\",\r\n    \"from_account\": \"428bbeda-afea-49d3-9a62-c7c16694247a\",\r\n    \"to_account\": \"de0cd0a8-d145-4248-bb9a-017cb4dad1f2\",\r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/","description":"<p>Este endpoint permite al usuario crear una nueva meta de ahorro (proyecto) para un usuario específico.</p>\n<img src=\"https://content.pstmn.io/158f3791-52af-4b86-b6b1-4b741f1e0fdb/Q3JlYXIucG5n\" width=\"100\" height=\"110\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Metodo: POST</p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>user_id</code> (string): ID del usuario asociado al proyecto.</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body\">Request body</h4>\n<ul>\n<li><p><code>project_name</code> (string): Nombre del proyecto. No puede ser vacío.</p>\n</li>\n<li><p><code>project_category_id</code> (string) (Opcional): ID de la categoría del proyecto.</p>\n</li>\n<li><p><code>goal_date</code> (string): Fecha objetivo para completar el proyecto. Esta fecha debe ser posterior al día en que se realiza la solicitud.</p>\n</li>\n<li><p><code>from_account</code> (string) (Opcional): Cuenta de origen de los fondos del proyecto.</p>\n</li>\n<li><p><code>to_account</code> (string) (Opcional): Cuenta destino para los fondos del proyecto.</p>\n</li>\n<li><p><code>total</code> (number): Monto total asignado al proyecto, este debe ser un número mayor o igual a cero.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body-example\">Request Body Example</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"project_name\": \"Viaje a japon\",\n    \"project_category_id\": \"xxx-xxx-xxx-xxx-xxx\",\n    \"goal_date\": \"2030-10-30\",\n    \"from_account\": \"account_1\",\n    \"to_account\": \"account_2\",\n    \"total\": 20000\n}\n\n</code></pre>\n<hr />\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p><code>id</code> (string): ID del proyecto.</p>\n</li>\n<li><p><code>goal_date</code> (string): Fecha objetivo del proyecto.</p>\n</li>\n<li><p><code>total</code> (string): Monto total asociado al proyecto.</p>\n</li>\n<li><p><code>project_name</code> (string): Nombre del proyecto.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario propietario del proyecto.</p>\n</li>\n<li><p><code>progress</code> (number): Monto ya ahorrado o progresado en el proyecto.</p>\n</li>\n<li><p><code>processing</code> (number): Monto actualmente en proceso de ahorro.</p>\n</li>\n<li><p><code>pending</code> (number): Monto pendiente por ahorrar.</p>\n</li>\n<li><p><code>from_account</code> (string): Cuenta de origen de los fondos.</p>\n</li>\n<li><p><code>to_account</code> (string): Cuenta destino del ahorro.</p>\n</li>\n<li><p><code>investment_returns</code>(number): Importe ganado por las inversiones.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha de creación del proyecto.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de última actualización.</p>\n</li>\n<li><p><code>deleted_at</code> (null or string): Fecha de eliminación, si aplica.</p>\n</li>\n<li><p><code>proyect_category</code> (string): ID de la categoría del proyecto.</p>\n</li>\n<li><p><code>proyect_status</code> (string): ID del status del proyecto.</p>\n</li>\n<li><p><code>proyect_config</code> (string): ID de la configuración del proyecto.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\"type\": \"string\"},\n    \"user_id\": {\"type\": \"string\"},\n    \"project_name\": {\"type\": \"string\"},\n    \"total\": {\"type\": \"string\"},\n    \"progress\": {\"type\": \"string\"},\n    \"processing\": {\"type\": \"string\"},\n    \"pending\": {\"type\": \"string\"},\n    \"from_account\": {\"type\": \"string\"},\n    \"to_account\": {\"type\": \"string\"},\n    \"goal_date\": {\"type\": \"string\"},\n    \"created_at\": {\"type\": \"string\"},\n    \"updated_at\": {\"type\": \"string\"},\n    \"deleted_at\": {\"type\": [\"string\", \"null\"]},\n    \"project_category\": {\"type\": \"string\"},\n    \"project_status\": {\"type\": \"string\"}\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"c84df709-5a19-49b4-85f8-04793490adcc","name":"Successful Response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"Viaje a japon\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"test_user_api_2_account_1\",\r\n    \"to_account\": \"test_user_api_2_account_2\",\r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 16:24:51 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"620"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"451285ba-56fc-4e72-813d-e255ca604bc4"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LVqNBGd1oAMEW3w="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68388a52-3a3e78557d86b7d30030f32a;Parent=5b654f158cd80543;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n    \"goal_date\": \"2030-10-30\",\n    \"total\": \"20000.00\",\n    \"project_name\": \"Viaje a japon\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"progress\": \"0.00\",\n    \"processing\": \"0.00\",\n    \"pending\": \"0.00\",\n    \"from_account\": \"test_user_api_2_account_1\",\n    \"to_account\": \"test_user_api_2_account_2\",\n    \"investment_returns\": \"0.00\",\n    \"created_at\": \"2025-05-29T10:24:51.224698-06:00\",\n    \"updated_at\": \"2025-05-29T10:24:51.224717-06:00\",\n    \"deleted_at\": null,\n    \"project_category\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n    \"project_status\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n    \"project_config\": \"deead368-205e-464b-9d8c-82cb93517eef\"\n}"},{"id":"7ae22dcd-4e3b-484f-a6a3-cc8c4a90a6ba","name":"Bad Request - Invalid project name","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"test_user_api_2_account_1\",\r\n    \"to_account\": \"test_user_api_2_account_2\",\r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 16:30:43 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"49"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"27541f12-21d9-4a98-b6e9-5d64cdc1cc7c"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LVrEAH68IAMEI7g="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68388bb2-1e55b06062eb77015f7a857a;Parent=00b0e929fb97db61;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"project_name\": [\n        \"This field may not be blank.\"\n    ]\n}"},{"id":"eb1cb8fa-e0b1-48b1-8d9e-7e53f7ffb74f","name":"Bad Request - Invalid category ID","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"Viaje a japon\",\r\n    \"project_category_id\": \"invalid-uuid\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"test_user_api_2_account_1\",\r\n    \"to_account\": \"test_user_api_2_account_2\",\r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 16:31:37 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"64"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"13d96e29-ae52-4b56-80fc-4ae8677925ce"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LVrMfGUbIAMEB7A="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68388be9-46e413850a39a0e47d372810;Parent=1b2febba60ba9bea;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"project_category\": [\n        \"“invalid-uuid” is not a valid UUID.\"\n    ]\n}"},{"id":"c346a8e0-f91f-48bd-90a9-60bef4a54580","name":"Bad Request - Invalid goal date","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"Viaje a japon\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2000-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"test_user_api_2_account_1\",\r\n    \"to_account\": \"test_user_api_2_account_2\",\r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 16:32:23 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"16"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"5c3b32ea-75e4-49e2-bc56-e58b295e3ed6"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LVrTuHsToAMEOhA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68388c17-6b0de13c6def201178b221c5;Parent=26b905370d48a9c2;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"\"Invalid fields\""},{"id":"66de2705-a01f-4715-97cc-bd3536125624","name":"Bad Request - Invalid total","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"Viaje a japon\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"test_user_api_2_account_1\",\r\n    \"to_account\": \"test_user_api_2_account_2\",\r\n    \"total\": -9999\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 16:33:45 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"16"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"b1f98f61-629b-4041-a80a-0905eac7376e"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LVrgiGYYoAMET8A="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68388c69-00782e34062f1abb4a9cff5f;Parent=3ebce20108d060e0;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"\"Invalid fields\""},{"id":"f09d10e7-657c-4df1-8497-970f216b4cf3","name":"Bad Request - Empty body fields","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 16:37:49 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"57"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"07221adf-a3ae-45cc-8bfe-67b71cb3d6b5"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LVsGkENDoAMEDzQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68388d5c-05e1a2911b86237806e99a8e;Parent=0b17891d71fbf464;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"\"Missing required fields: project_name, goal_date, total\""},{"id":"25601ed4-8750-4b98-b30f-72022a37b9e4","name":"Bad Request - Invalid project name","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"test_user_api_2_account_1\",\r\n    \"to_account\": \"test_user_api_2_account_2\",\r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 18:29:43 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"49"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"5f7542dc-dcf5-42d2-bdd0-600e53c26714"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LV8fwHOUIAMEFpg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838a797-59fde1882e5c8e5e4730ce3c;Parent=09a4445cc4f306f0;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"project_name\": [\n        \"This field may not be blank.\"\n    ]\n}"},{"id":"d79446e6-b8b9-435c-b041-e9b649f55945","name":"Crear proyecto","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"Viaje a japon\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"\",\r\n    \"to_account\": \"\", \r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Internal Server Error","code":500,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 27 Jun 2025 19:08:26 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"181052"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"35477876-b4ca-4e01-be3b-628cc5864e3f"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"M1nWfHuqIAMEaiw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-685eec29-581096721dee9c7a5b9962ea;Parent=7f24724090a9ce73;Sampled=0;Lineage=1:d25c5fda:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n  <meta name=\"robots\" content=\"NONE,NOARCHIVE\">\n  <title>ProgrammingError\n          at /api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/</title>\n  <style type=\"text/css\">\n    html * { padding:0; margin:0; }\n    body * { padding:10px 20px; }\n    body * * { padding:0; }\n    body { font:small sans-serif; background-color:#fff; color:#000; }\n    body>div { border-bottom:1px solid #ddd; }\n    h1 { font-weight:normal; }\n    h2 { margin-bottom:.8em; }\n    h3 { margin:1em 0 .5em 0; }\n    h4 { margin:0 0 .5em 0; font-weight: normal; }\n    code, pre { font-size: 100%; white-space: pre-wrap; word-break: break-word; }\n    summary { cursor: pointer; }\n    table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }\n    tbody td, tbody th { vertical-align:top; padding:2px 3px; }\n    thead th {\n      padding:1px 6px 1px 3px; background:#fefefe; text-align:left;\n      font-weight:normal; font-size:11px; border:1px solid #ddd;\n    }\n    tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }\n    table.vars { margin:5px 10px 2px 40px; width: auto; }\n    table.vars td, table.req td { font-family:monospace; }\n    table td.code { width:100%; }\n    table td.code pre { overflow:hidden; }\n    table.source th { color:#666; }\n    table.source td { font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }\n    ul.traceback { list-style-type:none; color: #222; }\n    ul.traceback li.cause { word-break: break-word; }\n    ul.traceback li.frame { padding-bottom:1em; color:#4f4f4f; }\n    ul.traceback li.user { background-color:#e0e0e0; color:#000 }\n    div.context { padding:10px 0; overflow:hidden; }\n    div.context ol { padding-left:30px; margin:0 10px; list-style-position: inside; }\n    div.context ol li { font-family:monospace; white-space:pre; color:#777; cursor:pointer; padding-left: 2px; }\n    div.context ol li pre { display:inline; }\n    div.context ol.context-line li { color:#464646; background-color:#dfdfdf; padding: 3px 2px; }\n    div.context ol.context-line li span { position:absolute; right:32px; }\n    .user div.context ol.context-line li { background-color:#bbb; color:#000; }\n    .user div.context ol li { color:#666; }\n    div.commands, summary.commands { margin-left: 40px; }\n    div.commands a, summary.commands { color:#555; text-decoration:none; }\n    .user div.commands a { color: black; }\n    #summary { background: #ffc; }\n    #summary h2 { font-weight: normal; color: #666; }\n    #explanation { background:#eee; }\n    #template, #template-not-exist { background:#f6f6f6; }\n    #template-not-exist ul { margin: 0 0 10px 20px; }\n    #template-not-exist .postmortem-section { margin-bottom: 3px; }\n    #unicode-hint { background:#eee; }\n    #traceback { background:#eee; }\n    #requestinfo { background:#f6f6f6; padding-left:120px; }\n    #summary table { border:none; background:transparent; }\n    #requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }\n    #requestinfo h3 { margin-bottom:-1em; }\n    .error { background: #ffc; }\n    .specific { color:#cc3300; font-weight:bold; }\n    h2 span.commands { font-size:.7em; font-weight:normal; }\n    span.commands a:link {color:#5E5694;}\n    pre.exception_value { font-family: sans-serif; color: #575757; font-size: 1.5em; margin: 10px 0 10px 0; }\n    .append-bottom { margin-bottom: 10px; }\n    .fname { user-select: all; }\n  </style>\n  \n  <script>\n    function hideAll(elems) {\n      for (var e = 0; e < elems.length; e++) {\n        elems[e].style.display = 'none';\n      }\n    }\n    window.onload = function() {\n      hideAll(document.querySelectorAll('ol.pre-context'));\n      hideAll(document.querySelectorAll('ol.post-context'));\n      hideAll(document.querySelectorAll('div.pastebin'));\n    }\n    function toggle() {\n      for (var i = 0; i < arguments.length; i++) {\n        var e = document.getElementById(arguments[i]);\n        if (e) {\n          e.style.display = e.style.display == 'none' ? 'block': 'none';\n        }\n      }\n      return false;\n    }\n    function switchPastebinFriendly(link) {\n      s1 = \"Switch to copy-and-paste view\";\n      s2 = \"Switch back to interactive view\";\n      link.textContent = link.textContent.trim() == s1 ? s2: s1;\n      toggle('browserTraceback', 'pastebinTraceback');\n      return false;\n    }\n  </script>\n  \n</head>\n<body>\n<div id=\"summary\">\n  <h1>ProgrammingError\n       at /api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/</h1>\n  <pre class=\"exception_value\">permission denied for table projects_metrics\n</pre>\n  <table class=\"meta\">\n\n    <tr>\n      <th>Request Method:</th>\n      <td>POST</td>\n    </tr>\n    <tr>\n      <th>Request URL:</th>\n      <td>http://ftv7r7kk66.execute-api.us-east-1.amazonaws.com/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/</td>\n    </tr>\n\n    <tr>\n      <th>Django Version:</th>\n      <td>4.1.10</td>\n    </tr>\n\n    <tr>\n      <th>Exception Type:</th>\n      <td>ProgrammingError</td>\n    </tr>\n\n\n    <tr>\n      <th>Exception Value:</th>\n      <td><pre>permission denied for table projects_metrics\n</pre></td>\n    </tr>\n\n\n    <tr>\n      <th>Exception Location:</th>\n      <td><span class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</span>, line 89, in _execute</td>\n    </tr>\n\n\n    <tr>\n      <th>Raised during:</th>\n      <td>project.views.views.ProjectView</td>\n    </tr>\n\n    <tr>\n      <th>Python Executable:</th>\n      <td>/usr/local/bin/python</td>\n    </tr>\n    <tr>\n      <th>Python Version:</th>\n      <td>3.11.3</td>\n    </tr>\n    <tr>\n      <th>Python Path:</th>\n      <td><pre>[&#x27;/code/src&#x27;,\n &#x27;/code&#x27;,\n &#x27;/usr/local/bin&#x27;,\n &#x27;/usr/local/lib/python311.zip&#x27;,\n &#x27;/usr/local/lib/python3.11&#x27;,\n &#x27;/usr/local/lib/python3.11/lib-dynload&#x27;,\n &#x27;/usr/local/lib/python3.11/site-packages&#x27;]</pre></td>\n    </tr>\n    <tr>\n      <th>Server time:</th>\n      <td>Fri, 27 Jun 2025 13:08:25 -0600</td>\n    </tr>\n  </table>\n</div>\n\n\n\n\n<div id=\"traceback\">\n  <h2>Traceback <span class=\"commands\"><a href=\"#\" onclick=\"return switchPastebinFriendly(this);\">\n    Switch to copy-and-paste view</a></span>\n  </h2>\n  <div id=\"browserTraceback\">\n    <ul class=\"traceback\">\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 89, in _execute\n          \n\n          \n            <div class=\"context\" id=\"c140390588266496\">\n              \n                <ol start=\"82\" class=\"pre-context\" id=\"pre140390588266496\">\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>            if params is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>                # params default might be backend specific.</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>                return self.cursor.execute(sql)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>            else:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"89\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>                return self.cursor.execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='90' class=\"post-context\" id=\"post140390588266496\">\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>    def _executemany(self, sql, param_list, *ignored_wrapper_args):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>            return self.cursor.executemany(sql, param_list)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588266496\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>ignored_wrapper_args</td>\n                    <td class=\"code\"><pre>(False,\n {&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n  &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;})</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;485bb147-77c1-4e6c-9118-28cd363f45a6&#x27;),\n UUID(&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;),\n UUID(&#x27;6f3e32b4-2c0a-42da-babe-089467bec030&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 19, 8, 25, 885458, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n          <li class=\"cause\"><h3>\n          \n            The above exception (permission denied for table projects_metrics\n) was the direct cause of the following exception:\n          \n        </h3></li>\n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py</code>, line 56, in inner\n          \n\n          \n            <div class=\"context\" id=\"c140390588271104\">\n              \n                <ol start=\"49\" class=\"pre-context\" id=\"pre140390588271104\">\n                \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>        return inner</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>    else:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>        @wraps(get_response)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>        def inner(request):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>            try:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"56\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>                response = get_response(request)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='57' class=\"post-context\" id=\"post140390588271104\">\n                  \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>            except Exception as exc:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>                response = response_for_exception(request, exc)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>            return response</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>        return inner</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588271104\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>exc</td>\n                    <td class=\"code\"><pre>ProgrammingError(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>get_response</td>\n                    <td class=\"code\"><pre>&lt;bound method BaseHandler._get_response of &lt;django.core.handlers.wsgi.WSGIHandler object at 0x7faf3c218a50&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;WSGIRequest: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py</code>, line 197, in _get_response\n          \n\n          \n            <div class=\"context\" id=\"c140390588006016\">\n              \n                <ol start=\"190\" class=\"pre-context\" id=\"pre140390588006016\">\n                \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>        if response is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>            wrapped_callback = self.make_view_atomic(callback)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>            # If it is an asynchronous view, run it in a subthread.</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>            if asyncio.iscoroutinefunction(wrapped_callback):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>                wrapped_callback = async_to_sync(wrapped_callback)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>            try:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"197\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>                response = wrapped_callback(request, *callback_args, **callback_kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='198' class=\"post-context\" id=\"post140390588006016\">\n                  \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>            except Exception as e:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>                response = self.process_exception_by_middleware(e, request)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>                if response is None:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>                    raise</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>        # Complain if the view returned None (a common error).</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588006016\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>callback</td>\n                    <td class=\"code\"><pre>&lt;function View.as_view.&lt;locals&gt;.view at 0x7faf3bac7740&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>callback_args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>callback_kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>middleware_method</td>\n                    <td class=\"code\"><pre>&lt;bound method CorsMiddleware.process_view of &lt;CorsMiddleware get_response=BaseHandler._get_response&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;WSGIRequest: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>response</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.core.handlers.wsgi.WSGIHandler object at 0x7faf3c218a50&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>wrapped_callback</td>\n                    <td class=\"code\"><pre>&lt;function View.as_view.&lt;locals&gt;.view at 0x7faf3bac7740&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/views/decorators/csrf.py</code>, line 55, in wrapped_view\n          \n\n          \n            <div class=\"context\" id=\"c140390588231936\">\n              \n                <ol start=\"48\" class=\"pre-context\" id=\"pre140390588231936\">\n                \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre>def csrf_exempt(view_func):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre>    &quot;&quot;&quot;Mark a view function as being exempt from the CSRF view protection.&quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre>    # view_func.csrf_exempt = True would also work, but decorators are nicer</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre>    # if they don&#x27;t have side effects, so return a new function.</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre>    def wrapped_view(*args, **kwargs):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"55\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre>        return view_func(*args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='56' class=\"post-context\" id=\"post140390588231936\">\n                  \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre>    wrapped_view.csrf_exempt = True</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre>    return wraps(view_func)(wrapped_view)</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588231936\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>(&lt;WSGIRequest: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;,)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>view_func</td>\n                    <td class=\"code\"><pre>&lt;function View.as_view.&lt;locals&gt;.view at 0x7faf3be05440&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/views/generic/base.py</code>, line 103, in view\n          \n\n          \n            <div class=\"context\" id=\"c140390589925632\">\n              \n                <ol start=\"96\" class=\"pre-context\" id=\"pre140390589925632\">\n                \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>            self = cls(**initkwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>            self.setup(request, *args, **kwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>            if not hasattr(self, &quot;request&quot;):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>                raise AttributeError(</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>                    &quot;%s instance has no &#x27;request&#x27; attribute. Did you override &quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>                    &quot;setup() and forget to call super()?&quot; % cls.__name__</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>                )</pre></li>\n                \n                </ol>\n              \n              <ol start=\"103\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>            return self.dispatch(request, *args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='104' class=\"post-context\" id=\"post140390589925632\">\n                  \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>        view.view_class = cls</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>        view.view_initkwargs = initkwargs</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>        # __name__ and __qualname__ are intentionally left unchanged as</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>        # view_class should be used to robustly determine the name of the view</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390589925632\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>cls</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;project.views.views.ProjectView&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>initkwargs</td>\n                    <td class=\"code\"><pre>{}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;WSGIRequest: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 509, in dispatch\n          \n\n          \n            <div class=\"context\" id=\"c140390589931200\">\n              \n                <ol start=\"502\" class=\"pre-context\" id=\"pre140390589931200\">\n                \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>                                  self.http_method_not_allowed)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>            else:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>                handler = self.http_method_not_allowed</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>            response = handler(request, *args, **kwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>        except Exception as exc:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"509\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>            response = self.handle_exception(exc)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='510' class=\"post-context\" id=\"post140390589931200\">\n                  \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>        self.response = self.finalize_response(request, response, *args, **kwargs)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>        return self.response</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>    def options(self, request, *args, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>        &quot;&quot;&quot;</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390589931200\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>handler</td>\n                    <td class=\"code\"><pre>&lt;bound method ProjectView.post of &lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 469, in handle_exception\n          \n\n          \n            <div class=\"context\" id=\"c140390588271360\">\n              \n                <ol start=\"462\" class=\"pre-context\" id=\"pre140390588271360\">\n                \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>        exception_handler = self.get_exception_handler()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>        context = self.get_exception_handler_context()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>        response = exception_handler(exc, context)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>        if response is None:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"469\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>            self.raise_uncaught_exception(exc)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='470' class=\"post-context\" id=\"post140390588271360\">\n                  \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>        response.exception = True</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>        return response</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>    def raise_uncaught_exception(self, exc):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>        if settings.DEBUG:</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588271360\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>context</td>\n                    <td class=\"code\"><pre>{&#x27;args&#x27;: (),\n &#x27;kwargs&#x27;: {&#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;},\n &#x27;request&#x27;: &lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;,\n &#x27;view&#x27;: &lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exc</td>\n                    <td class=\"code\"><pre>ProgrammingError(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exception_handler</td>\n                    <td class=\"code\"><pre>&lt;function exception_handler at 0x7faf3bdcb7e0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>response</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 480, in raise_uncaught_exception\n          \n\n          \n            <div class=\"context\" id=\"c140390588262336\">\n              \n                <ol start=\"473\" class=\"pre-context\" id=\"pre140390588262336\">\n                \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>    def raise_uncaught_exception(self, exc):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>        if settings.DEBUG:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>            request = self.request</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>            renderer_format = getattr(request.accepted_renderer, &#x27;format&#x27;)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>            use_plaintext_traceback = renderer_format not in (&#x27;html&#x27;, &#x27;api&#x27;, &#x27;admin&#x27;)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>            request.force_plaintext_errors(use_plaintext_traceback)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"480\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>        raise exc</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='481' class=\"post-context\" id=\"post140390588262336\">\n                  \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>    # Note: Views are made CSRF exempt from within `as_view` as to prevent</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>    # accidental removal of this exemption in cases where `dispatch` needs to</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>    # be overridden.</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>    def dispatch(self, request, *args, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>        &quot;&quot;&quot;</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588262336\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>exc</td>\n                    <td class=\"code\"><pre>ProgrammingError(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>renderer_format</td>\n                    <td class=\"code\"><pre>&#x27;json&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>use_plaintext_traceback</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 506, in dispatch\n          \n\n          \n            <div class=\"context\" id=\"c140390588229760\">\n              \n                <ol start=\"499\" class=\"pre-context\" id=\"pre140390588229760\">\n                \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>            # Get the appropriate handler method</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>            if request.method.lower() in self.http_method_names:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>                handler = getattr(self, request.method.lower(),</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>                                  self.http_method_not_allowed)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>            else:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>                handler = self.http_method_not_allowed</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre></pre></li>\n                \n                </ol>\n              \n              <ol start=\"506\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>            response = handler(request, *args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='507' class=\"post-context\" id=\"post140390588229760\">\n                  \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>        except Exception as exc:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>            response = self.handle_exception(exc)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>        self.response = self.finalize_response(request, response, *args, **kwargs)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>        return self.response</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588229760\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>handler</td>\n                    <td class=\"code\"><pre>&lt;bound method ProjectView.post of &lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/code/src/project/views/views.py</code>, line 173, in post\n          \n\n          \n            <div class=\"context\" id=\"c140390588221888\">\n              \n                <ol start=\"166\" class=\"pre-context\" id=\"pre140390588221888\">\n                \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>            valid_fields = validator.validate_fields()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>        if not valid_fields:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>            return Response(&#x27;Invalid fields&#x27;, status=status.HTTP_400_BAD_REQUEST)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>        serializer.save()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre></pre></li>\n                \n                </ol>\n              \n              <ol start=\"173\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>        ProjectMetric.create_project_metric(serializer.instance.project_status_id, user_id, serializer.instance)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='174' class=\"post-context\" id=\"post140390588221888\">\n                  \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>        </pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>        return Response(serializer.data, status=status.HTTP_201_CREATED)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>class ProjectDetail(RetrieveUpdateDestroyAPIView):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>    &quot;&quot;&quot;Gets or updates a project.&quot;&quot;&quot;</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588221888\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>account_validation</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>have_required_fields</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>missing_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project</td>\n                    <td class=\"code\"><pre>{&#x27;from_account&#x27;: None,\n &#x27;goal_date&#x27;: &#x27;2030-10-30&#x27;,\n &#x27;id&#x27;: &#x27;2372e77f-20da-4b48-96cf-9b1e43d5e962&#x27;,\n &#x27;project_category&#x27;: &#x27;b95487f8-4d83-4e24-ad1a-951870596539&#x27;,\n &#x27;project_category_id&#x27;: &#x27;b95487f8-4d83-4e24-ad1a-951870596539&#x27;,\n &#x27;project_config&#x27;: UUID(&#x27;deead368-205e-464b-9d8c-82cb93517eef&#x27;),\n &#x27;project_name&#x27;: &#x27;Viaje a japon&#x27;,\n &#x27;project_status&#x27;: &#x27;8df908b6-8ab3-11ed-a1eb-0242ac120002&#x27;,\n &#x27;to_account&#x27;: None,\n &#x27;total&#x27;: 20000,\n &#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_config_id</td>\n                    <td class=\"code\"><pre>UUID(&#x27;deead368-205e-464b-9d8c-82cb93517eef&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_status_active_id</td>\n                    <td class=\"code\"><pre>&#x27;f2a34b3c-5eea-4bfd-a18e-06d675826486&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_status_setup_id</td>\n                    <td class=\"code\"><pre>&#x27;8df908b6-8ab3-11ed-a1eb-0242ac120002&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>required_fields</td>\n                    <td class=\"code\"><pre>[&#x27;project_name&#x27;, &#x27;goal_date&#x27;, &#x27;total&#x27;]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>serializer</td>\n                    <td class=\"code\"><pre>ProjectPostSerializer(data={&#x27;project_name&#x27;: &#x27;Viaje a japon&#x27;, &#x27;project_category_id&#x27;: &#x27;b95487f8-4d83-4e24-ad1a-951870596539&#x27;, &#x27;goal_date&#x27;: &#x27;2030-10-30&#x27;, &#x27;from_account&#x27;: None, &#x27;to_account&#x27;: None, &#x27;total&#x27;: 20000, &#x27;id&#x27;: &#x27;2372e77f-20da-4b48-96cf-9b1e43d5e962&#x27;, &#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;, &#x27;project_status&#x27;: &#x27;8df908b6-8ab3-11ed-a1eb-0242ac120002&#x27;, &#x27;project_category&#x27;: &#x27;b95487f8-4d83-4e24-ad1a-951870596539&#x27;, &#x27;project_config&#x27;: UUID(&#x27;deead368-205e-464b-9d8c-82cb93517eef&#x27;)}):\n    id = UUIDField(read_only=True)\n    goal_date = DateField(allow_null=True, required=False)\n    total = DecimalField(allow_null=True, decimal_places=2, default=1, max_digits=14, required=False)\n    project_name = CharField(allow_null=True)\n    user_id = UUIDField()\n    progress = DecimalField(decimal_places=2, max_digits=14, required=False)\n    processing = DecimalField(decimal_places=2, max_digits=14, required=False)\n    pending = DecimalField(decimal_places=2, max_digits=14, required=False)\n    from_account = CharField(allow_null=True, max_length=60, required=False)\n    to_account = CharField(allow_null=True, max_length=60, required=False)\n    investment_returns = DecimalField(decimal_places=2, max_digits=14, required=False)\n    created_at = DateTimeField(read_only=True)\n    updated_at = DateTimeField(read_only=True)\n    deleted_at = DateTimeField(allow_null=True, required=False)\n    project_category = PrimaryKeyRelatedField(queryset=Item.objects.all(), required=False)\n    project_status = PrimaryKeyRelatedField(queryset=Item.objects.all(), required=False)\n    project_config = PrimaryKeyRelatedField(queryset=Item.objects.all())</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>user_id</td>\n                    <td class=\"code\"><pre>&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>valid_fields</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>validator</td>\n                    <td class=\"code\"><pre>&lt;project.validators.ProjectValidator object at 0x7faf3c2501d0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/code/src/metric/service/project_metric_service.py</code>, line 14, in create_project_metric\n          \n\n          \n            <div class=\"context\" id=\"c140390588234944\">\n              \n                <ol start=\"7\" class=\"pre-context\" id=\"pre140390588234944\">\n                \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>    @staticmethod</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>    def create_project_metric(project_status_id, user_id, project ):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>        config_completed_datetime = None</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>        if str(project_status_id) == PROJECT_STATUS_ACTIVE_ID:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>            config_completed_datetime = datetime.now()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>        </pre></li>\n                \n                </ol>\n              \n              <ol start=\"14\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>        ProjectsMetrics.objects.create(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='15' class=\"post-context\" id=\"post140390588234944\">\n                  \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>            user_id=user_id,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>            project=project,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>            config_completed_datetime = config_completed_datetime</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>        )</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>    @staticmethod</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588234944\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>config_completed_datetime</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project</td>\n                    <td class=\"code\"><pre>&lt;Project: Project object (6f3e32b4-2c0a-42da-babe-089467bec030)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_status_id</td>\n                    <td class=\"code\"><pre>UUID(&#x27;8df908b6-8ab3-11ed-a1eb-0242ac120002&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>user_id</td>\n                    <td class=\"code\"><pre>&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/manager.py</code>, line 85, in manager_method\n          \n\n          \n            <div class=\"context\" id=\"c140390589859328\">\n              \n                <ol start=\"78\" class=\"pre-context\" id=\"pre140390589859328\">\n                \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>    def check(self, **kwargs):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>        return []</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>    @classmethod</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>    def _get_queryset_methods(cls, queryset_class):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>        def create_method(name, method):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>            def manager_method(self, *args, **kwargs):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"85\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>                return getattr(self.get_queryset(), name)(*args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='86' class=\"post-context\" id=\"post140390589859328\">\n                  \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>            manager_method.__name__ = method.__name__</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>            manager_method.__doc__ = method.__doc__</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>            return manager_method</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>        new_methods = {}</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390589859328\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;config_completed_datetime&#x27;: None,\n &#x27;project&#x27;: &lt;Project: Project object (6f3e32b4-2c0a-42da-babe-089467bec030)&gt;,\n &#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>name</td>\n                    <td class=\"code\"><pre>&#x27;create&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.manager.Manager object at 0x7faf3bfc3d50&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/query.py</code>, line 671, in create\n          \n\n          \n            <div class=\"context\" id=\"c140390588233920\">\n              \n                <ol start=\"664\" class=\"pre-context\" id=\"pre140390588233920\">\n                \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>    def create(self, **kwargs):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        Create a new object with the given kwargs, saving it to the database</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        and returning the created object.</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        obj = self.model(**kwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        self._for_write = True</pre></li>\n                \n                </ol>\n              \n              <ol start=\"671\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        obj.save(force_insert=True, using=self.db)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='672' class=\"post-context\" id=\"post140390588233920\">\n                  \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        return obj</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>    async def acreate(self, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        return await sync_to_async(self.create)(**kwargs)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>    def _prepare_for_bulk_create(self, objs):</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588233920\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;config_completed_datetime&#x27;: None,\n &#x27;project&#x27;: &lt;Project: Project object (6f3e32b4-2c0a-42da-babe-089467bec030)&gt;,\n &#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>obj</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (485bb147-77c1-4e6c-9118-28cd363f45a6)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>Error in formatting: ProgrammingError: permission denied for table projects_metrics\n</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 812, in save\n          \n\n          \n            <div class=\"context\" id=\"c140390589906560\">\n              \n                <ol start=\"805\" class=\"pre-context\" id=\"pre140390589906560\">\n                \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>            for field in self._meta.concrete_fields:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>                if not field.primary_key and not hasattr(field, &quot;through&quot;):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>                    field_names.add(field.attname)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>            loaded_fields = field_names.difference(deferred_fields)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>            if loaded_fields:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>                update_fields = frozenset(loaded_fields)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre></pre></li>\n                \n                </ol>\n              \n              <ol start=\"812\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>        self.save_base(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='813' class=\"post-context\" id=\"post140390589906560\">\n                  \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>            using=using,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>            force_insert=force_insert,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>            force_update=force_update,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>            update_fields=update_fields,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>        )</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390589906560\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>deferred_fields</td>\n                    <td class=\"code\"><pre>set()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_insert</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_update</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (485bb147-77c1-4e6c-9118-28cd363f45a6)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 863, in save_base\n          \n\n          \n            <div class=\"context\" id=\"c140390588229504\">\n              \n                <ol start=\"856\" class=\"pre-context\" id=\"pre140390588229504\">\n                \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>            context_manager = transaction.atomic(using=using, savepoint=False)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>        else:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>            context_manager = transaction.mark_for_rollback_on_error(using=using)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>        with context_manager:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>            parent_inserted = False</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>            if not raw:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>                parent_inserted = self._save_parents(cls, using, update_fields)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"863\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>            updated = self._save_table(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='864' class=\"post-context\" id=\"post140390588229504\">\n                  \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>                raw,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>                cls,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>                force_insert or parent_inserted,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>                force_update,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>                using,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>                update_fields,</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588229504\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>cls</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;metric.models.ProjectsMetrics&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>context_manager</td>\n                    <td class=\"code\"><pre>&lt;contextlib._GeneratorContextManager object at 0x7faf3b3e4890&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_insert</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_update</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>meta</td>\n                    <td class=\"code\"><pre>&lt;Options for ProjectsMetrics&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>origin</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;metric.models.ProjectsMetrics&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>parent_inserted</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (485bb147-77c1-4e6c-9118-28cd363f45a6)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 1006, in _save_table\n          \n\n          \n            <div class=\"context\" id=\"c140390588282688\">\n              \n                <ol start=\"999\" class=\"pre-context\" id=\"pre140390588282688\">\n                \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>                    )[&quot;_order__max&quot;]</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>                )</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>            fields = meta.local_concrete_fields</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>            if not pk_set:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>                fields = [f for f in fields if f is not meta.auto_field]</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>            returning_fields = meta.db_returning_fields</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1006\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>            results = self._do_insert(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1007' class=\"post-context\" id=\"post140390588282688\">\n                  \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>                cls._base_manager, using, fields, returning_fields, raw</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>            )</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>            if results:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>                for value, field in zip(results[0], returning_fields):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>                    setattr(self, field.attname, value)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>        return updated</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588282688\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>cls</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;metric.models.ProjectsMetrics&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>fields</td>\n                    <td class=\"code\"><pre>(&lt;django.db.models.fields.UUIDField: id&gt;,\n &lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.DateTimeField: updated_at&gt;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_insert</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_update</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>meta</td>\n                    <td class=\"code\"><pre>&lt;Options for ProjectsMetrics&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>non_pks</td>\n                    <td class=\"code\"><pre>[&lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.DateTimeField: updated_at&gt;]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>pk_set</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>pk_val</td>\n                    <td class=\"code\"><pre>UUID(&#x27;485bb147-77c1-4e6c-9118-28cd363f45a6&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (485bb147-77c1-4e6c-9118-28cd363f45a6)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>updated</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 1047, in _do_insert\n          \n\n          \n            <div class=\"context\" id=\"c140390588270208\">\n              \n                <ol start=\"1040\" class=\"pre-context\" id=\"pre140390588270208\">\n                \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>        return filtered._update(values) &gt; 0</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>    def _do_insert(self, manager, using, fields, returning_fields, raw):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>        Do an INSERT. If returning_fields is defined then this method should</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>        return the newly created data for the model.</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1047\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>        return manager._insert(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1048' class=\"post-context\" id=\"post140390588270208\">\n                  \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>            [self],</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>            fields=fields,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>            returning_fields=returning_fields,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>            using=using,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>            raw=raw,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>        )</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588270208\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>fields</td>\n                    <td class=\"code\"><pre>(&lt;django.db.models.fields.UUIDField: id&gt;,\n &lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.DateTimeField: updated_at&gt;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>manager</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.manager.Manager object at 0x7faf3b3d9cd0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (485bb147-77c1-4e6c-9118-28cd363f45a6)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/manager.py</code>, line 85, in manager_method\n          \n\n          \n            <div class=\"context\" id=\"c140390588206400\">\n              \n                <ol start=\"78\" class=\"pre-context\" id=\"pre140390588206400\">\n                \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>    def check(self, **kwargs):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>        return []</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>    @classmethod</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>    def _get_queryset_methods(cls, queryset_class):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>        def create_method(name, method):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>            def manager_method(self, *args, **kwargs):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"85\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>                return getattr(self.get_queryset(), name)(*args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='86' class=\"post-context\" id=\"post140390588206400\">\n                  \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>            manager_method.__name__ = method.__name__</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>            manager_method.__doc__ = method.__doc__</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>            return manager_method</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>        new_methods = {}</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588206400\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>([&lt;ProjectsMetrics: ProjectsMetrics object (485bb147-77c1-4e6c-9118-28cd363f45a6)&gt;],)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;fields&#x27;: (&lt;django.db.models.fields.UUIDField: id&gt;,\n            &lt;django.db.models.fields.UUIDField: user_id&gt;,\n            &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n            &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n            &lt;django.db.models.fields.DateTimeField: updated_at&gt;),\n &#x27;raw&#x27;: False,\n &#x27;returning_fields&#x27;: [],\n &#x27;using&#x27;: &#x27;default&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>name</td>\n                    <td class=\"code\"><pre>&#x27;_insert&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.manager.Manager object at 0x7faf3b3d9cd0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/query.py</code>, line 1791, in _insert\n          \n\n          \n            <div class=\"context\" id=\"c140390588269568\">\n              \n                <ol start=\"1784\" class=\"pre-context\" id=\"pre140390588269568\">\n                \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>        query = sql.InsertQuery(</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>            self.model,</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>            on_conflict=on_conflict,</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>            update_fields=update_fields,</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>            unique_fields=unique_fields,</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>        )</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>        query.insert_values(fields, objs, raw=raw)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1791\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>        return query.get_compiler(using=using).execute_sql(returning_fields)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1792' class=\"post-context\" id=\"post140390588269568\">\n                  \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>    _insert.alters_data = True</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>    _insert.queryset_only = False</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>    def _batched_insert(</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>        self,</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588269568\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>fields</td>\n                    <td class=\"code\"><pre>(&lt;django.db.models.fields.UUIDField: id&gt;,\n &lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.DateTimeField: updated_at&gt;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>objs</td>\n                    <td class=\"code\"><pre>[&lt;ProjectsMetrics: ProjectsMetrics object (485bb147-77c1-4e6c-9118-28cd363f45a6)&gt;]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>on_conflict</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>query</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.sql.subqueries.InsertQuery object at 0x7faf3b23fb10&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>Error in formatting: ProgrammingError: permission denied for table projects_metrics\n</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>unique_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py</code>, line 1660, in execute_sql\n          \n\n          \n            <div class=\"context\" id=\"c140390589937600\">\n              \n                <ol start=\"1653\" class=\"pre-context\" id=\"pre140390589937600\">\n                \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>            and len(self.query.objs) != 1</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>            and not self.connection.features.can_return_rows_from_bulk_insert</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>        )</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>        opts = self.query.get_meta()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>        self.returning_fields = returning_fields</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>        with self.connection.cursor() as cursor:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>            for sql, params in self.as_sql():</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1660\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>                cursor.execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1661' class=\"post-context\" id=\"post140390589937600\">\n                  \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>            if not self.returning_fields:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>                return []</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>            if (</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>                self.connection.features.can_return_rows_from_bulk_insert</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>                and len(self.query.objs) &gt; 1</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>            ):</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390589937600\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>cursor</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>opts</td>\n                    <td class=\"code\"><pre>&lt;Options for ProjectsMetrics&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;485bb147-77c1-4e6c-9118-28cd363f45a6&#x27;),\n UUID(&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;),\n UUID(&#x27;6f3e32b4-2c0a-42da-babe-089467bec030&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 19, 8, 25, 885458, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;SQLInsertCompiler model=ProjectsMetrics connection=&lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt; using=&#x27;default&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 102, in execute\n          \n\n          \n            <div class=\"context\" id=\"c140390588224128\">\n              \n                <ol start=\"95\" class=\"pre-context\" id=\"pre140390588224128\">\n                \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>class CursorDebugWrapper(CursorWrapper):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>    # XXX callproc isn&#x27;t instrumented at this time.</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>    def execute(self, sql, params=None):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>        with self.debug_sql(sql, params, use_last_executed_query=True):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"102\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>            return super().execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='103' class=\"post-context\" id=\"post140390588224128\">\n                  \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>    def executemany(self, sql, param_list):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>        with self.debug_sql(sql, param_list, many=True):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>            return super().executemany(sql, param_list)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>    @contextmanager</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588224128\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>__class__</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;django.db.backends.utils.CursorDebugWrapper&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;485bb147-77c1-4e6c-9118-28cd363f45a6&#x27;),\n UUID(&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;),\n UUID(&#x27;6f3e32b4-2c0a-42da-babe-089467bec030&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 19, 8, 25, 885458, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 67, in execute\n          \n\n          \n            <div class=\"context\" id=\"c140390588233408\">\n              \n                <ol start=\"60\" class=\"pre-context\" id=\"pre140390588233408\">\n                \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>            elif kparams is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>                return self.cursor.callproc(procname, params)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>            else:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>                params = params or ()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>                return self.cursor.callproc(procname, params, kparams)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>    def execute(self, sql, params=None):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"67\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>        return self._execute_with_wrappers(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='68' class=\"post-context\" id=\"post140390588233408\">\n                  \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>            sql, params, many=False, executor=self._execute</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>        )</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>    def executemany(self, sql, param_list):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>        return self._execute_with_wrappers(</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>            sql, param_list, many=True, executor=self._executemany</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588233408\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;485bb147-77c1-4e6c-9118-28cd363f45a6&#x27;),\n UUID(&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;),\n UUID(&#x27;6f3e32b4-2c0a-42da-babe-089467bec030&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 19, 8, 25, 885458, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 80, in _execute_with_wrappers\n          \n\n          \n            <div class=\"context\" id=\"c140390588271744\">\n              \n                <ol start=\"73\" class=\"pre-context\" id=\"pre140390588271744\">\n                \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>            sql, param_list, many=True, executor=self._executemany</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>        )</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>    def _execute_with_wrappers(self, sql, params, many, executor):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>        context = {&quot;connection&quot;: self.db, &quot;cursor&quot;: self}</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>        for wrapper in reversed(self.db.execute_wrappers):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>            executor = functools.partial(wrapper, executor)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"80\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>        return executor(sql, params, many, context)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='81' class=\"post-context\" id=\"post140390588271744\">\n                  \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>            if params is None:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>                # params default might be backend specific.</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588271744\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>context</td>\n                    <td class=\"code\"><pre>{&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>executor</td>\n                    <td class=\"code\"><pre>&lt;bound method CursorWrapper._execute of &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>many</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;485bb147-77c1-4e6c-9118-28cd363f45a6&#x27;),\n UUID(&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;),\n UUID(&#x27;6f3e32b4-2c0a-42da-babe-089467bec030&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 19, 8, 25, 885458, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 84, in _execute\n          \n\n          \n            <div class=\"context\" id=\"c140390588234816\">\n              \n                <ol start=\"77\" class=\"pre-context\" id=\"pre140390588234816\">\n                \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>        context = {&quot;connection&quot;: self.db, &quot;cursor&quot;: self}</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>        for wrapper in reversed(self.db.execute_wrappers):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>            executor = functools.partial(wrapper, executor)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>        return executor(sql, params, many, context)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                \n                </ol>\n              \n              <ol start=\"84\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>        with self.db.wrap_database_errors:</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='85' class=\"post-context\" id=\"post140390588234816\">\n                  \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>            if params is None:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>                # params default might be backend specific.</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>                return self.cursor.execute(sql)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>            else:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>                return self.cursor.execute(sql, params)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588234816\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>ignored_wrapper_args</td>\n                    <td class=\"code\"><pre>(False,\n {&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n  &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;})</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;485bb147-77c1-4e6c-9118-28cd363f45a6&#x27;),\n UUID(&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;),\n UUID(&#x27;6f3e32b4-2c0a-42da-babe-089467bec030&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 19, 8, 25, 885458, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/utils.py</code>, line 91, in __exit__\n          \n\n          \n            <div class=\"context\" id=\"c140390588262016\">\n              \n                <ol start=\"84\" class=\"pre-context\" id=\"pre140390588262016\">\n                \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>            db_exc_type = getattr(self.wrapper.Database, dj_exc_type.__name__)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>            if issubclass(exc_type, db_exc_type):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>                dj_exc_value = dj_exc_type(*exc_value.args)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>                # Only set the &#x27;errors_occurred&#x27; flag for errors that may make</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>                # the connection unusable.</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>                if dj_exc_type not in (DataError, IntegrityError):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>                    self.wrapper.errors_occurred = True</pre></li>\n                \n                </ol>\n              \n              <ol start=\"91\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>                raise dj_exc_value.with_traceback(traceback) from exc_value</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='92' class=\"post-context\" id=\"post140390588262016\">\n                  \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>    def __call__(self, func):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>        # Note that we are intentionally not using @wraps here for performance</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>        # reasons. Refs #21109.</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>        def inner(*args, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>            with self:</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588262016\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>db_exc_type</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;psycopg2.ProgrammingError&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>dj_exc_type</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;django.db.utils.ProgrammingError&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>dj_exc_value</td>\n                    <td class=\"code\"><pre>ProgrammingError(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exc_type</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;psycopg2.errors.InsufficientPrivilege&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exc_value</td>\n                    <td class=\"code\"><pre>InsufficientPrivilege(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.utils.DatabaseErrorWrapper object at 0x7faf3b20af90&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>traceback</td>\n                    <td class=\"code\"><pre>&lt;traceback object at 0x7faf3b24b800&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 89, in _execute\n          \n\n          \n            <div class=\"context\" id=\"c140390588266496\">\n              \n                <ol start=\"82\" class=\"pre-context\" id=\"pre140390588266496\">\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>            if params is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>                # params default might be backend specific.</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>                return self.cursor.execute(sql)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>            else:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"89\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>                return self.cursor.execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='90' class=\"post-context\" id=\"post140390588266496\">\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>    def _executemany(self, sql, param_list, *ignored_wrapper_args):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>            return self.cursor.executemany(sql, param_list)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588266496\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>ignored_wrapper_args</td>\n                    <td class=\"code\"><pre>(False,\n {&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n  &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;})</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;485bb147-77c1-4e6c-9118-28cd363f45a6&#x27;),\n UUID(&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;),\n UUID(&#x27;6f3e32b4-2c0a-42da-babe-089467bec030&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 19, 8, 25, 885458, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n    </ul>\n  </div>\n\n  <form action=\"https://dpaste.com/\" name=\"pasteform\" id=\"pasteform\" method=\"post\">\n  <div id=\"pastebinTraceback\" class=\"pastebin\">\n    <input type=\"hidden\" name=\"language\" value=\"PythonConsole\">\n    <input type=\"hidden\" name=\"title\"\n      value=\"ProgrammingError at /api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/\">\n    <input type=\"hidden\" name=\"source\" value=\"Django Dpaste Agent\">\n    <input type=\"hidden\" name=\"poster\" value=\"Django\">\n    <textarea name=\"content\" id=\"traceback_area\" cols=\"140\" rows=\"25\">\nEnvironment:\n\n\nRequest Method: POST\nRequest URL: http://ftv7r7kk66.execute-api.us-east-1.amazonaws.com/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/\n\nDjango Version: 4.1.10\nPython Version: 3.11.3\nInstalled Applications:\n[&#x27;django.contrib.admin&#x27;,\n &#x27;django.contrib.auth&#x27;,\n &#x27;django.contrib.contenttypes&#x27;,\n &#x27;django.contrib.sessions&#x27;,\n &#x27;django.contrib.messages&#x27;,\n &#x27;django.contrib.staticfiles&#x27;,\n &#x27;django_extensions&#x27;,\n &#x27;corsheaders&#x27;,\n &#x27;rest_framework&#x27;,\n &#x27;django_filters&#x27;,\n &#x27;monitoring&#x27;,\n &#x27;saving&#x27;,\n &#x27;payment&#x27;,\n &#x27;catalog&#x27;,\n &#x27;project&#x27;,\n &#x27;rule&#x27;,\n &#x27;activity&#x27;,\n &#x27;transaction&#x27;,\n &#x27;user&#x27;,\n &#x27;dashboard&#x27;,\n &#x27;metric&#x27;,\n &#x27;config&#x27;,\n &#x27;report&#x27;]\nInstalled Middleware:\n[&#x27;django.middleware.security.SecurityMiddleware&#x27;,\n &#x27;django.contrib.sessions.middleware.SessionMiddleware&#x27;,\n &#x27;django.middleware.common.CommonMiddleware&#x27;,\n &#x27;django.middleware.csrf.CsrfViewMiddleware&#x27;,\n &#x27;django.contrib.auth.middleware.AuthenticationMiddleware&#x27;,\n &#x27;django.contrib.messages.middleware.MessageMiddleware&#x27;,\n &#x27;django.middleware.clickjacking.XFrameOptionsMiddleware&#x27;,\n &#x27;corsheaders.middleware.CorsMiddleware&#x27;]\n\n\n\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 89, in _execute\n    return self.cursor.execute(sql, params)\n\nThe above exception (permission denied for table projects_metrics\n) was the direct cause of the following exception:\n  File \"/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py\", line 56, in inner\n    response = get_response(request)\n  File \"/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py\", line 197, in _get_response\n    response = wrapped_callback(request, *callback_args, **callback_kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/views/decorators/csrf.py\", line 55, in wrapped_view\n    return view_func(*args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/views/generic/base.py\", line 103, in view\n    return self.dispatch(request, *args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 509, in dispatch\n    response = self.handle_exception(exc)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 469, in handle_exception\n    self.raise_uncaught_exception(exc)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 480, in raise_uncaught_exception\n    raise exc\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 506, in dispatch\n    response = handler(request, *args, **kwargs)\n  File \"/code/src/project/views/views.py\", line 173, in post\n    ProjectMetric.create_project_metric(serializer.instance.project_status_id, user_id, serializer.instance)\n  File \"/code/src/metric/service/project_metric_service.py\", line 14, in create_project_metric\n    ProjectsMetrics.objects.create(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/manager.py\", line 85, in manager_method\n    return getattr(self.get_queryset(), name)(*args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\", line 671, in create\n    obj.save(force_insert=True, using=self.db)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 812, in save\n    self.save_base(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 863, in save_base\n    updated = self._save_table(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 1006, in _save_table\n    results = self._do_insert(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 1047, in _do_insert\n    return manager._insert(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/manager.py\", line 85, in manager_method\n    return getattr(self.get_queryset(), name)(*args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\", line 1791, in _insert\n    return query.get_compiler(using=using).execute_sql(returning_fields)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\", line 1660, in execute_sql\n    cursor.execute(sql, params)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 102, in execute\n    return super().execute(sql, params)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 67, in execute\n    return self._execute_with_wrappers(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 80, in _execute_with_wrappers\n    return executor(sql, params, many, context)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 84, in _execute\n    with self.db.wrap_database_errors:\n  File \"/usr/local/lib/python3.11/site-packages/django/db/utils.py\", line 91, in __exit__\n    raise dj_exc_value.with_traceback(traceback) from exc_value\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 89, in _execute\n    return self.cursor.execute(sql, params)\n\nException Type: ProgrammingError at /api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/\nException Value: permission denied for table projects_metrics\n\n</textarea>\n  <br><br>\n  <input type=\"submit\" value=\"Share this traceback on a public website\">\n  </div>\n</form>\n\n</div>\n\n\n<div id=\"requestinfo\">\n  <h2>Request information</h2>\n\n\n  \n    <h3 id=\"user-info\">USER</h3>\n    <p>AnonymousUser</p>\n  \n\n  <h3 id=\"get-info\">GET</h3>\n  \n    <p>No GET data</p>\n  \n\n  <h3 id=\"post-info\">POST</h3>\n  \n    <p>No POST data</p>\n  \n  <h3 id=\"files-info\">FILES</h3>\n  \n    <p>No FILES data</p>\n  \n\n\n  <h3 id=\"cookie-info\">COOKIES</h3>\n  \n    <p>No cookie data</p>\n  \n\n  <h3 id=\"meta-info\">META</h3>\n  <table class=\"req\">\n    <thead>\n      <tr>\n        <th>Variable</th>\n        <th>Value</th>\n      </tr>\n    </thead>\n    <tbody>\n      \n        <tr>\n          <td>CONTENT_LENGTH</td>\n          <td class=\"code\"><pre>&#x27;211&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CONTENT_TYPE</td>\n          <td class=\"code\"><pre>&#x27;application/json&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_ACCEPT</td>\n          <td class=\"code\"><pre>&#x27;*/*&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_ACCEPT_ENCODING</td>\n          <td class=\"code\"><pre>&#x27;gzip, deflate, br&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_AUTHORIZATION</td>\n          <td class=\"code\"><pre>(&#x27;Bearer &#x27;\n &#x27;eyJraWQiOiJtMERLaG9wdHBGQ3V3eGVXU2VTd2ZqMDJoZlZ4NDd3WStPaXdMQjN2dnJVPSIsImFsZyI6IlJTMjU2In0.eyJvcmlnaW5fanRpIjoiZWQ0YjBlM2ItZjdkMy00ZWNlLTg2MmYtMmU1ZWFmYThhN2Y0Iiwic3ViIjoiMzQ0ODc0OTgtMzA4MS03MDVjLWY5YTMtYjdlMmViZjY2NzY4IiwiYXVkIjoiMzFscWdvZmpvcGwwajF1MHFvNWszbDh1dTYiLCJldmVudF9pZCI6IjY4ZjBmNzk0LTk5OGItNGMwNi1iMjc0LWU5N2I3ZWMxMGM5MyIsInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNzI3MzU3OTMzLCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAudXMtZWFzdC0xLmFtYXpvbmF3cy5jb21cL3VzLWVhc3QtMV9sREFka3dLajAiLCJjb2duaXRvOnVzZXJuYW1lIjoieGgtdXNlci1xYS0xIiwiZXhwIjoxNzI3MzYxNTMzLCJpYXQiOjE3MjczNTc5MzMsImp0aSI6IjcxMTNjYTY4LTA1M2MtNDg0Mi04MWQyLTc3NzNjMzcwY2I0MiJ9.scD5yJLxwLULacwV6fiA5qW3FeMeuIV52ugrlIo9v4nMztSBHLCRxXs9sS-qNRVD9jmuirmgBkS5Hie-N4BXMrIv_Xo9FRWPfuBvC0YJbssh5KVvbWlLuSsvyuQL36YpTGM1fFzX5gEyNL8nSigyxFxvFlabNAzAiEYSZ3KrByNCUXiZx8NvkF7FjVP6taBSQ33lyBrnrVUPuul2IEp6Vq-2PvnIxbVDt2LKZB-2nfIADzZj6DhAGnWcbPdIpUKNpeFqDWg971oazl3wQ7IqU_0wfrvPFOo5nC_y2VwKiI7xvZyHOH0l8-bLAchBp98WsyN7mX-UAUyDYV5MHv9jJw&#x27;)</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_HOST</td>\n          <td class=\"code\"><pre>&#x27;ftv7r7kk66.execute-api.us-east-1.amazonaws.com&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_POSTMAN_TOKEN</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_USER_AGENT</td>\n          <td class=\"code\"><pre>&#x27;PostmanRuntime/7.44.1&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_AMZN_TRACE_ID</td>\n          <td class=\"code\"><pre>&#x27;Self=1-685eec29-2b3c707c53388f54561f33f7;Root=1-685eec29-581096721dee9c7a5b9962ea&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_FORWARDED_FOR</td>\n          <td class=\"code\"><pre>&#x27;190.21.240.254, 192.168.99.114&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_FORWARDED_PORT</td>\n          <td class=\"code\"><pre>&#x27;80&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_FORWARDED_PROTO</td>\n          <td class=\"code\"><pre>&#x27;http&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PATH_INFO</td>\n          <td class=\"code\"><pre>&#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>QUERY_STRING</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>RAW_URI</td>\n          <td class=\"code\"><pre>&#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>REMOTE_ADDR</td>\n          <td class=\"code\"><pre>&#x27;192.168.105.226&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>REMOTE_PORT</td>\n          <td class=\"code\"><pre>&#x27;26942&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>REQUEST_METHOD</td>\n          <td class=\"code\"><pre>&#x27;POST&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SCRIPT_NAME</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_NAME</td>\n          <td class=\"code\"><pre>&#x27;0.0.0.0&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_PORT</td>\n          <td class=\"code\"><pre>&#x27;8000&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_PROTOCOL</td>\n          <td class=\"code\"><pre>&#x27;HTTP/1.1&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_SOFTWARE</td>\n          <td class=\"code\"><pre>&#x27;gunicorn/20.1.0&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>gunicorn.socket</td>\n          <td class=\"code\"><pre>&lt;socket.socket fd=9, family=2, type=1, proto=0, laddr=(&#x27;192.168.66.61&#x27;, 8000), raddr=(&#x27;192.168.105.226&#x27;, 26942)&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.errors</td>\n          <td class=\"code\"><pre>&lt;gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7faf3b3bf970&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.file_wrapper</td>\n          <td class=\"code\"><pre>&lt;class &#x27;gunicorn.http.wsgi.FileWrapper&#x27;&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.input</td>\n          <td class=\"code\"><pre>&lt;gunicorn.http.body.Body object at 0x7faf3b23dc50&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.input_terminated</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.multiprocess</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.multithread</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.run_once</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.url_scheme</td>\n          <td class=\"code\"><pre>&#x27;http&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.version</td>\n          <td class=\"code\"><pre>(1, 0)</pre></td>\n        </tr>\n      \n    </tbody>\n  </table>\n\n\n  <h3 id=\"settings-info\">Settings</h3>\n  <h4>Using settings module <code>api_saving.settings</code></h4>\n  <table class=\"req\">\n    <thead>\n      <tr>\n        <th>Setting</th>\n        <th>Value</th>\n      </tr>\n    </thead>\n    <tbody>\n      \n        <tr>\n          <td>ABSOLUTE_URL_OVERRIDES</td>\n          <td class=\"code\"><pre>{}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>ADMINS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>ALLOWED_HOSTS</td>\n          <td class=\"code\"><pre>[&#x27;*&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>APPEND_SLASH</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>AUTHENTICATION_BACKENDS</td>\n          <td class=\"code\"><pre>[&#x27;django.contrib.auth.backends.ModelBackend&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>AUTH_PASSWORD_VALIDATORS</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>AUTH_USER_MODEL</td>\n          <td class=\"code\"><pre>&#x27;auth.User&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>BASE_DIR</td>\n          <td class=\"code\"><pre>PosixPath(&#x27;/code/src&#x27;)</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHES</td>\n          <td class=\"code\"><pre>{&#x27;default&#x27;: {&#x27;BACKEND&#x27;: &#x27;django.core.cache.backends.locmem.LocMemCache&#x27;}}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHE_MIDDLEWARE_ALIAS</td>\n          <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHE_MIDDLEWARE_KEY_PREFIX</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHE_MIDDLEWARE_SECONDS</td>\n          <td class=\"code\"><pre>600</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CORS_ORIGIN_ALLOW_ALL</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_AGE</td>\n          <td class=\"code\"><pre>31449600</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_DOMAIN</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_HTTPONLY</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_MASKED</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_NAME</td>\n          <td class=\"code\"><pre>&#x27;csrftoken&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_PATH</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_SAMESITE</td>\n          <td class=\"code\"><pre>&#x27;Lax&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_SECURE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_FAILURE_VIEW</td>\n          <td class=\"code\"><pre>&#x27;django.views.csrf.csrf_failure&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_HEADER_NAME</td>\n          <td class=\"code\"><pre>&#x27;HTTP_X_CSRFTOKEN&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_TRUSTED_ORIGINS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_USE_SESSIONS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATABASES</td>\n          <td class=\"code\"><pre>{&#x27;default&#x27;: {&#x27;ATOMIC_REQUESTS&#x27;: False,\n             &#x27;AUTOCOMMIT&#x27;: True,\n             &#x27;CONN_HEALTH_CHECKS&#x27;: False,\n             &#x27;CONN_MAX_AGE&#x27;: 0,\n             &#x27;ENGINE&#x27;: &#x27;django.db.backends.postgresql_psycopg2&#x27;,\n             &#x27;HOST&#x27;: &#x27;xerpabank-dev.ckdom9c6kdbz.us-east-1.rds.amazonaws.com&#x27;,\n             &#x27;NAME&#x27;: &#x27;saving_service_db&#x27;,\n             &#x27;OPTIONS&#x27;: {},\n             &#x27;PASSWORD&#x27;: &#x27;********************&#x27;,\n             &#x27;PORT&#x27;: &#x27;5432&#x27;,\n             &#x27;TEST&#x27;: {&#x27;CHARSET&#x27;: None,\n                      &#x27;COLLATION&#x27;: None,\n                      &#x27;MIGRATE&#x27;: True,\n                      &#x27;MIRROR&#x27;: None,\n                      &#x27;NAME&#x27;: None},\n             &#x27;TIME_ZONE&#x27;: None,\n             &#x27;USER&#x27;: &#x27;django&#x27;}}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATABASE_ROUTERS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATA_UPLOAD_MAX_MEMORY_SIZE</td>\n          <td class=\"code\"><pre>2621440</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATA_UPLOAD_MAX_NUMBER_FIELDS</td>\n          <td class=\"code\"><pre>1000</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATA_UPLOAD_MAX_NUMBER_FILES</td>\n          <td class=\"code\"><pre>100</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATETIME_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;N j, Y, P&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATETIME_INPUT_FORMATS</td>\n          <td class=\"code\"><pre>[&#x27;%Y-%m-%d %H:%M:%S&#x27;,\n &#x27;%Y-%m-%d %H:%M:%S.%f&#x27;,\n &#x27;%Y-%m-%d %H:%M&#x27;,\n &#x27;%m/%d/%Y %H:%M:%S&#x27;,\n &#x27;%m/%d/%Y %H:%M:%S.%f&#x27;,\n &#x27;%m/%d/%Y %H:%M&#x27;,\n &#x27;%m/%d/%y %H:%M:%S&#x27;,\n &#x27;%m/%d/%y %H:%M:%S.%f&#x27;,\n &#x27;%m/%d/%y %H:%M&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATE_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;N j, Y&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATE_INPUT_FORMATS</td>\n          <td class=\"code\"><pre>[&#x27;%Y-%m-%d&#x27;,\n &#x27;%m/%d/%Y&#x27;,\n &#x27;%m/%d/%y&#x27;,\n &#x27;%b %d %Y&#x27;,\n &#x27;%b %d, %Y&#x27;,\n &#x27;%d %b %Y&#x27;,\n &#x27;%d %b, %Y&#x27;,\n &#x27;%B %d %Y&#x27;,\n &#x27;%B %d, %Y&#x27;,\n &#x27;%d %B %Y&#x27;,\n &#x27;%d %B, %Y&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEBUG</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEBUG_PROPAGATE_EXCEPTIONS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DECIMAL_SEPARATOR</td>\n          <td class=\"code\"><pre>&#x27;.&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_AUTO_FIELD</td>\n          <td class=\"code\"><pre>&#x27;django.db.models.BigAutoField&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_CHARSET</td>\n          <td class=\"code\"><pre>&#x27;utf-8&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_EXCEPTION_REPORTER</td>\n          <td class=\"code\"><pre>&#x27;django.views.debug.ExceptionReporter&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_EXCEPTION_REPORTER_FILTER</td>\n          <td class=\"code\"><pre>&#x27;django.views.debug.SafeExceptionReporterFilter&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_FILE_STORAGE</td>\n          <td class=\"code\"><pre>&#x27;django.core.files.storage.FileSystemStorage&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_FROM_EMAIL</td>\n          <td class=\"code\"><pre>&#x27;webmaster@localhost&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_INDEX_TABLESPACE</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_TABLESPACE</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DISALLOWED_USER_AGENTS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_BACKEND</td>\n          <td class=\"code\"><pre>&#x27;django.core.mail.backends.smtp.EmailBackend&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_HOST</td>\n          <td class=\"code\"><pre>&#x27;localhost&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_HOST_PASSWORD</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_HOST_USER</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_PORT</td>\n          <td class=\"code\"><pre>25</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_SSL_CERTFILE</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_SSL_KEYFILE</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_SUBJECT_PREFIX</td>\n          <td class=\"code\"><pre>&#x27;[Django] &#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_TIMEOUT</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_USE_LOCALTIME</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_USE_SSL</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_USE_TLS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_DIRECTORY_PERMISSIONS</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_HANDLERS</td>\n          <td class=\"code\"><pre>[&#x27;django.core.files.uploadhandler.MemoryFileUploadHandler&#x27;,\n &#x27;django.core.files.uploadhandler.TemporaryFileUploadHandler&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_MAX_MEMORY_SIZE</td>\n          <td class=\"code\"><pre>2621440</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_PERMISSIONS</td>\n          <td class=\"code\"><pre>420</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_TEMP_DIR</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FIRST_DAY_OF_WEEK</td>\n          <td class=\"code\"><pre>0</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FIXTURE_DIRS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FORCE_SCRIPT_NAME</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FORMAT_MODULE_PATH</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FORM_RENDERER</td>\n          <td class=\"code\"><pre>&#x27;django.forms.renderers.DjangoTemplates&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>IGNORABLE_404_URLS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>IMPORT_USER_DATA_MODE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>INSTALLED_APPS</td>\n          <td class=\"code\"><pre>[&#x27;django.contrib.admin&#x27;,\n &#x27;django.contrib.auth&#x27;,\n &#x27;django.contrib.contenttypes&#x27;,\n &#x27;django.contrib.sessions&#x27;,\n &#x27;django.contrib.messages&#x27;,\n &#x27;django.contrib.staticfiles&#x27;,\n &#x27;django_extensions&#x27;,\n &#x27;corsheaders&#x27;,\n &#x27;rest_framework&#x27;,\n &#x27;django_filters&#x27;,\n &#x27;monitoring&#x27;,\n &#x27;saving&#x27;,\n &#x27;payment&#x27;,\n &#x27;catalog&#x27;,\n &#x27;project&#x27;,\n &#x27;rule&#x27;,\n &#x27;activity&#x27;,\n &#x27;transaction&#x27;,\n &#x27;user&#x27;,\n &#x27;dashboard&#x27;,\n &#x27;metric&#x27;,\n &#x27;config&#x27;,\n &#x27;report&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>INTERNAL_IPS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGES</td>\n          <td class=\"code\"><pre>[(&#x27;af&#x27;, &#x27;Afrikaans&#x27;),\n (&#x27;ar&#x27;, &#x27;Arabic&#x27;),\n (&#x27;ar-dz&#x27;, &#x27;Algerian Arabic&#x27;),\n (&#x27;ast&#x27;, &#x27;Asturian&#x27;),\n (&#x27;az&#x27;, &#x27;Azerbaijani&#x27;),\n (&#x27;bg&#x27;, &#x27;Bulgarian&#x27;),\n (&#x27;be&#x27;, &#x27;Belarusian&#x27;),\n (&#x27;bn&#x27;, &#x27;Bengali&#x27;),\n (&#x27;br&#x27;, &#x27;Breton&#x27;),\n (&#x27;bs&#x27;, &#x27;Bosnian&#x27;),\n (&#x27;ca&#x27;, &#x27;Catalan&#x27;),\n (&#x27;cs&#x27;, &#x27;Czech&#x27;),\n (&#x27;cy&#x27;, &#x27;Welsh&#x27;),\n (&#x27;da&#x27;, &#x27;Danish&#x27;),\n (&#x27;de&#x27;, &#x27;German&#x27;),\n (&#x27;dsb&#x27;, &#x27;Lower Sorbian&#x27;),\n (&#x27;el&#x27;, &#x27;Greek&#x27;),\n (&#x27;en&#x27;, &#x27;English&#x27;),\n (&#x27;en-au&#x27;, &#x27;Australian English&#x27;),\n (&#x27;en-gb&#x27;, &#x27;British English&#x27;),\n (&#x27;eo&#x27;, &#x27;Esperanto&#x27;),\n (&#x27;es&#x27;, &#x27;Spanish&#x27;),\n (&#x27;es-ar&#x27;, &#x27;Argentinian Spanish&#x27;),\n (&#x27;es-co&#x27;, &#x27;Colombian Spanish&#x27;),\n (&#x27;es-mx&#x27;, &#x27;Mexican Spanish&#x27;),\n (&#x27;es-ni&#x27;, &#x27;Nicaraguan Spanish&#x27;),\n (&#x27;es-ve&#x27;, &#x27;Venezuelan Spanish&#x27;),\n (&#x27;et&#x27;, &#x27;Estonian&#x27;),\n (&#x27;eu&#x27;, &#x27;Basque&#x27;),\n (&#x27;fa&#x27;, &#x27;Persian&#x27;),\n (&#x27;fi&#x27;, &#x27;Finnish&#x27;),\n (&#x27;fr&#x27;, &#x27;French&#x27;),\n (&#x27;fy&#x27;, &#x27;Frisian&#x27;),\n (&#x27;ga&#x27;, &#x27;Irish&#x27;),\n (&#x27;gd&#x27;, &#x27;Scottish Gaelic&#x27;),\n (&#x27;gl&#x27;, &#x27;Galician&#x27;),\n (&#x27;he&#x27;, &#x27;Hebrew&#x27;),\n (&#x27;hi&#x27;, &#x27;Hindi&#x27;),\n (&#x27;hr&#x27;, &#x27;Croatian&#x27;),\n (&#x27;hsb&#x27;, &#x27;Upper Sorbian&#x27;),\n (&#x27;hu&#x27;, &#x27;Hungarian&#x27;),\n (&#x27;hy&#x27;, &#x27;Armenian&#x27;),\n (&#x27;ia&#x27;, &#x27;Interlingua&#x27;),\n (&#x27;id&#x27;, &#x27;Indonesian&#x27;),\n (&#x27;ig&#x27;, &#x27;Igbo&#x27;),\n (&#x27;io&#x27;, &#x27;Ido&#x27;),\n (&#x27;is&#x27;, &#x27;Icelandic&#x27;),\n (&#x27;it&#x27;, &#x27;Italian&#x27;),\n (&#x27;ja&#x27;, &#x27;Japanese&#x27;),\n (&#x27;ka&#x27;, &#x27;Georgian&#x27;),\n (&#x27;kab&#x27;, &#x27;Kabyle&#x27;),\n (&#x27;kk&#x27;, &#x27;Kazakh&#x27;),\n (&#x27;km&#x27;, &#x27;Khmer&#x27;),\n (&#x27;kn&#x27;, &#x27;Kannada&#x27;),\n (&#x27;ko&#x27;, &#x27;Korean&#x27;),\n (&#x27;ky&#x27;, &#x27;Kyrgyz&#x27;),\n (&#x27;lb&#x27;, &#x27;Luxembourgish&#x27;),\n (&#x27;lt&#x27;, &#x27;Lithuanian&#x27;),\n (&#x27;lv&#x27;, &#x27;Latvian&#x27;),\n (&#x27;mk&#x27;, &#x27;Macedonian&#x27;),\n (&#x27;ml&#x27;, &#x27;Malayalam&#x27;),\n (&#x27;mn&#x27;, &#x27;Mongolian&#x27;),\n (&#x27;mr&#x27;, &#x27;Marathi&#x27;),\n (&#x27;ms&#x27;, &#x27;Malay&#x27;),\n (&#x27;my&#x27;, &#x27;Burmese&#x27;),\n (&#x27;nb&#x27;, &#x27;Norwegian Bokmål&#x27;),\n (&#x27;ne&#x27;, &#x27;Nepali&#x27;),\n (&#x27;nl&#x27;, &#x27;Dutch&#x27;),\n (&#x27;nn&#x27;, &#x27;Norwegian Nynorsk&#x27;),\n (&#x27;os&#x27;, &#x27;Ossetic&#x27;),\n (&#x27;pa&#x27;, &#x27;Punjabi&#x27;),\n (&#x27;pl&#x27;, &#x27;Polish&#x27;),\n (&#x27;pt&#x27;, &#x27;Portuguese&#x27;),\n (&#x27;pt-br&#x27;, &#x27;Brazilian Portuguese&#x27;),\n (&#x27;ro&#x27;, &#x27;Romanian&#x27;),\n (&#x27;ru&#x27;, &#x27;Russian&#x27;),\n (&#x27;sk&#x27;, &#x27;Slovak&#x27;),\n (&#x27;sl&#x27;, &#x27;Slovenian&#x27;),\n (&#x27;sq&#x27;, &#x27;Albanian&#x27;),\n (&#x27;sr&#x27;, &#x27;Serbian&#x27;),\n (&#x27;sr-latn&#x27;, &#x27;Serbian Latin&#x27;),\n (&#x27;sv&#x27;, &#x27;Swedish&#x27;),\n (&#x27;sw&#x27;, &#x27;Swahili&#x27;),\n (&#x27;ta&#x27;, &#x27;Tamil&#x27;),\n (&#x27;te&#x27;, &#x27;Telugu&#x27;),\n (&#x27;tg&#x27;, &#x27;Tajik&#x27;),\n (&#x27;th&#x27;, &#x27;Thai&#x27;),\n (&#x27;tk&#x27;, &#x27;Turkmen&#x27;),\n (&#x27;tr&#x27;, &#x27;Turkish&#x27;),\n (&#x27;tt&#x27;, &#x27;Tatar&#x27;),\n (&#x27;udm&#x27;, &#x27;Udmurt&#x27;),\n (&#x27;uk&#x27;, &#x27;Ukrainian&#x27;),\n (&#x27;ur&#x27;, &#x27;Urdu&#x27;),\n (&#x27;uz&#x27;, &#x27;Uzbek&#x27;),\n (&#x27;vi&#x27;, &#x27;Vietnamese&#x27;),\n (&#x27;zh-hans&#x27;, &#x27;Simplified Chinese&#x27;),\n (&#x27;zh-hant&#x27;, &#x27;Traditional Chinese&#x27;)]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGES_BIDI</td>\n          <td class=\"code\"><pre>[&#x27;he&#x27;, &#x27;ar&#x27;, &#x27;ar-dz&#x27;, &#x27;fa&#x27;, &#x27;ur&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_CODE</td>\n          <td class=\"code\"><pre>&#x27;en-us&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_AGE</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_DOMAIN</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_HTTPONLY</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_NAME</td>\n          <td class=\"code\"><pre>&#x27;django_language&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_PATH</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_SAMESITE</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_SECURE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOCALE_PATHS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGGING</td>\n          <td class=\"code\"><pre>{&#x27;disable_existing_loggers&#x27;: False,\n &#x27;filters&#x27;: {&#x27;require_debug_true&#x27;: {&#x27;()&#x27;: &#x27;django.utils.log.RequireDebugTrue&#x27;}},\n &#x27;formatters&#x27;: {&#x27;django.server&#x27;: {&#x27;()&#x27;: &#x27;django.utils.log.ServerFormatter&#x27;,\n                                  &#x27;format&#x27;: &#x27;[%(server_time)s] %(message)s&#x27;},\n                &#x27;simple&#x27;: {&#x27;format&#x27;: &#x27;%(levelname)s %(message)s&#x27;},\n                &#x27;verbose&#x27;: {&#x27;format&#x27;: &#x27;%(levelname)s %(asctime)s &#x27;\n                                      &#x27;%(pathname)s-&gt;%(module)s:%(lineno)s &#x27;\n                                      &#x27;%(process)d %(thread)d %(message)s&#x27;}},\n &#x27;handlers&#x27;: {&#x27;console&#x27;: {&#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,\n                          &#x27;formatter&#x27;: &#x27;simple&#x27;,\n                          &#x27;level&#x27;: &#x27;DEBUG&#x27;},\n              &#x27;django.server&#x27;: {&#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,\n                                &#x27;formatter&#x27;: &#x27;django.server&#x27;,\n                                &#x27;level&#x27;: &#x27;INFO&#x27;},\n              &#x27;message&#x27;: {&#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,\n                          &#x27;formatter&#x27;: &#x27;verbose&#x27;,\n                          &#x27;level&#x27;: &#x27;DEBUG&#x27;}},\n &#x27;loggers&#x27;: {&#x27;django&#x27;: {&#x27;handlers&#x27;: [&#x27;console&#x27;], &#x27;propagate&#x27;: True},\n             &#x27;django.db.backends&#x27;: {&#x27;handlers&#x27;: [&#x27;console&#x27;], &#x27;level&#x27;: &#x27;INFO&#x27;},\n             &#x27;django.message.log&#x27;: {&#x27;handlers&#x27;: [&#x27;message&#x27;],\n                                    &#x27;level&#x27;: &#x27;INFO&#x27;,\n                                    &#x27;propagate&#x27;: False},\n             &#x27;django.request&#x27;: {&#x27;handlers&#x27;: [&#x27;console&#x27;],\n                                &#x27;level&#x27;: &#x27;ERROR&#x27;,\n                                &#x27;propagate&#x27;: False},\n             &#x27;django.server&#x27;: {&#x27;handlers&#x27;: [&#x27;django.server&#x27;],\n                               &#x27;level&#x27;: &#x27;INFO&#x27;,\n                               &#x27;propagate&#x27;: False}},\n &#x27;version&#x27;: 1}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGGING_CONFIG</td>\n          <td class=\"code\"><pre>&#x27;logging.config.dictConfig&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGIN_REDIRECT_URL</td>\n          <td class=\"code\"><pre>&#x27;/accounts/profile/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGIN_URL</td>\n          <td class=\"code\"><pre>&#x27;/accounts/login/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGOUT_REDIRECT_URL</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MANAGERS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MEDIA_ROOT</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MEDIA_URL</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MESSAGE_STORAGE</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.messages.storage.fallback.FallbackStorage&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MIDDLEWARE</td>\n          <td class=\"code\"><pre>[&#x27;django.middleware.security.SecurityMiddleware&#x27;,\n &#x27;django.contrib.sessions.middleware.SessionMiddleware&#x27;,\n &#x27;django.middleware.common.CommonMiddleware&#x27;,\n &#x27;django.middleware.csrf.CsrfViewMiddleware&#x27;,\n &#x27;django.contrib.auth.middleware.AuthenticationMiddleware&#x27;,\n &#x27;django.contrib.messages.middleware.MessageMiddleware&#x27;,\n &#x27;django.middleware.clickjacking.XFrameOptionsMiddleware&#x27;,\n &#x27;corsheaders.middleware.CorsMiddleware&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MIGRATION_MODULES</td>\n          <td class=\"code\"><pre>{}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MONTH_DAY_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;F j&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>NUMBER_GROUPING</td>\n          <td class=\"code\"><pre>0</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PASSWORD_HASHERS</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PASSWORD_RESET_TIMEOUT</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PREPEND_WWW</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>ROOT_URLCONF</td>\n          <td class=\"code\"><pre>&#x27;api_saving.urls&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECRET_KEY</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECRET_KEY_FALLBACKS</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_CONTENT_TYPE_NOSNIFF</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_CROSS_ORIGIN_OPENER_POLICY</td>\n          <td class=\"code\"><pre>&#x27;same-origin&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_HSTS_INCLUDE_SUBDOMAINS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_HSTS_PRELOAD</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_HSTS_SECONDS</td>\n          <td class=\"code\"><pre>0</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_PROXY_SSL_HEADER</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_REDIRECT_EXEMPT</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_REFERRER_POLICY</td>\n          <td class=\"code\"><pre>&#x27;same-origin&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_SSL_HOST</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_SSL_REDIRECT</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_EMAIL</td>\n          <td class=\"code\"><pre>&#x27;root@localhost&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_CACHE_ALIAS</td>\n          <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_AGE</td>\n          <td class=\"code\"><pre>1209600</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_DOMAIN</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_HTTPONLY</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_NAME</td>\n          <td class=\"code\"><pre>&#x27;sessionid&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_PATH</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_SAMESITE</td>\n          <td class=\"code\"><pre>&#x27;Lax&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_SECURE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_ENGINE</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.sessions.backends.db&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_EXPIRE_AT_BROWSER_CLOSE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_FILE_PATH</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_SAVE_EVERY_REQUEST</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_SERIALIZER</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.sessions.serializers.JSONSerializer&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SETTINGS_MODULE</td>\n          <td class=\"code\"><pre>&#x27;api_saving.settings&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SHORT_DATETIME_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;m/d/Y P&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SHORT_DATE_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;m/d/Y&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SIGNING_BACKEND</td>\n          <td class=\"code\"><pre>&#x27;django.core.signing.TimestampSigner&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SILENCED_SYSTEM_CHECKS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATICFILES_DIRS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATICFILES_FINDERS</td>\n          <td class=\"code\"><pre>[&#x27;django.contrib.staticfiles.finders.FileSystemFinder&#x27;,\n &#x27;django.contrib.staticfiles.finders.AppDirectoriesFinder&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATICFILES_STORAGE</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.staticfiles.storage.StaticFilesStorage&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATIC_ROOT</td>\n          <td class=\"code\"><pre>&#x27;./static/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATIC_URL</td>\n          <td class=\"code\"><pre>&#x27;/static/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TEMPLATES</td>\n          <td class=\"code\"><pre>[{&#x27;APP_DIRS&#x27;: True,\n  &#x27;BACKEND&#x27;: &#x27;django.template.backends.django.DjangoTemplates&#x27;,\n  &#x27;DIRS&#x27;: [&#x27;/code/src/templates&#x27;],\n  &#x27;OPTIONS&#x27;: {&#x27;context_processors&#x27;: [&#x27;django.template.context_processors.debug&#x27;,\n                                     &#x27;django.template.context_processors.request&#x27;,\n                                     &#x27;django.contrib.auth.context_processors.auth&#x27;,\n                                     &#x27;django.contrib.messages.context_processors.messages&#x27;]}}]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TEST_NON_SERIALIZED_APPS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TEST_RUNNER</td>\n          <td class=\"code\"><pre>&#x27;django.test.runner.DiscoverRunner&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>THOUSAND_SEPARATOR</td>\n          <td class=\"code\"><pre>&#x27;,&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TIME_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;P&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TIME_INPUT_FORMATS</td>\n          <td class=\"code\"><pre>[&#x27;%H:%M:%S&#x27;, &#x27;%H:%M:%S.%f&#x27;, &#x27;%H:%M&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TIME_ZONE</td>\n          <td class=\"code\"><pre>&#x27;America/Mexico_City&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_DEPRECATED_PYTZ</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_I18N</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_L10N</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_THOUSAND_SEPARATOR</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_TZ</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_X_FORWARDED_HOST</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_X_FORWARDED_PORT</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>WSGI_APPLICATION</td>\n          <td class=\"code\"><pre>&#x27;api_saving.wsgi.application&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>X_FRAME_OPTIONS</td>\n          <td class=\"code\"><pre>&#x27;DENY&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>YEAR_MONTH_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;F Y&#x27;</pre></td>\n        </tr>\n      \n    </tbody>\n  </table>\n\n</div>\n\n  <div id=\"explanation\">\n    <p>\n      You’re seeing this error because you have <code>DEBUG = True</code> in your\n      Django settings file. Change that to <code>False</code>, and Django will\n      display a standard page generated by the handler for this status code.\n    </p>\n  </div>\n\n</body>\n</html>\n"},{"id":"f460c405-790d-431a-8c60-6cc6c5b57fd7","name":"Crear proyecto","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"Viaje a japon\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"\",\r\n    \"to_account\": \"\", \r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Internal Server Error","code":500,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 27 Jun 2025 20:03:52 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"180013"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"a1c4aa28-7e8e-4faa-8833-9a2406ce6de7"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"M1veTEyBIAMEa8A="},{"key":"X-Amzn-Trace-Id","value":"Root=1-685ef927-41ae7314208a8d8365a058da;Parent=3bc05eb8a7e17876;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n  <meta name=\"robots\" content=\"NONE,NOARCHIVE\">\n  <title>ProgrammingError\n          at /api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/</title>\n  <style type=\"text/css\">\n    html * { padding:0; margin:0; }\n    body * { padding:10px 20px; }\n    body * * { padding:0; }\n    body { font:small sans-serif; background-color:#fff; color:#000; }\n    body>div { border-bottom:1px solid #ddd; }\n    h1 { font-weight:normal; }\n    h2 { margin-bottom:.8em; }\n    h3 { margin:1em 0 .5em 0; }\n    h4 { margin:0 0 .5em 0; font-weight: normal; }\n    code, pre { font-size: 100%; white-space: pre-wrap; word-break: break-word; }\n    summary { cursor: pointer; }\n    table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }\n    tbody td, tbody th { vertical-align:top; padding:2px 3px; }\n    thead th {\n      padding:1px 6px 1px 3px; background:#fefefe; text-align:left;\n      font-weight:normal; font-size:11px; border:1px solid #ddd;\n    }\n    tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }\n    table.vars { margin:5px 10px 2px 40px; width: auto; }\n    table.vars td, table.req td { font-family:monospace; }\n    table td.code { width:100%; }\n    table td.code pre { overflow:hidden; }\n    table.source th { color:#666; }\n    table.source td { font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }\n    ul.traceback { list-style-type:none; color: #222; }\n    ul.traceback li.cause { word-break: break-word; }\n    ul.traceback li.frame { padding-bottom:1em; color:#4f4f4f; }\n    ul.traceback li.user { background-color:#e0e0e0; color:#000 }\n    div.context { padding:10px 0; overflow:hidden; }\n    div.context ol { padding-left:30px; margin:0 10px; list-style-position: inside; }\n    div.context ol li { font-family:monospace; white-space:pre; color:#777; cursor:pointer; padding-left: 2px; }\n    div.context ol li pre { display:inline; }\n    div.context ol.context-line li { color:#464646; background-color:#dfdfdf; padding: 3px 2px; }\n    div.context ol.context-line li span { position:absolute; right:32px; }\n    .user div.context ol.context-line li { background-color:#bbb; color:#000; }\n    .user div.context ol li { color:#666; }\n    div.commands, summary.commands { margin-left: 40px; }\n    div.commands a, summary.commands { color:#555; text-decoration:none; }\n    .user div.commands a { color: black; }\n    #summary { background: #ffc; }\n    #summary h2 { font-weight: normal; color: #666; }\n    #explanation { background:#eee; }\n    #template, #template-not-exist { background:#f6f6f6; }\n    #template-not-exist ul { margin: 0 0 10px 20px; }\n    #template-not-exist .postmortem-section { margin-bottom: 3px; }\n    #unicode-hint { background:#eee; }\n    #traceback { background:#eee; }\n    #requestinfo { background:#f6f6f6; padding-left:120px; }\n    #summary table { border:none; background:transparent; }\n    #requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }\n    #requestinfo h3 { margin-bottom:-1em; }\n    .error { background: #ffc; }\n    .specific { color:#cc3300; font-weight:bold; }\n    h2 span.commands { font-size:.7em; font-weight:normal; }\n    span.commands a:link {color:#5E5694;}\n    pre.exception_value { font-family: sans-serif; color: #575757; font-size: 1.5em; margin: 10px 0 10px 0; }\n    .append-bottom { margin-bottom: 10px; }\n    .fname { user-select: all; }\n  </style>\n  \n  <script>\n    function hideAll(elems) {\n      for (var e = 0; e < elems.length; e++) {\n        elems[e].style.display = 'none';\n      }\n    }\n    window.onload = function() {\n      hideAll(document.querySelectorAll('ol.pre-context'));\n      hideAll(document.querySelectorAll('ol.post-context'));\n      hideAll(document.querySelectorAll('div.pastebin'));\n    }\n    function toggle() {\n      for (var i = 0; i < arguments.length; i++) {\n        var e = document.getElementById(arguments[i]);\n        if (e) {\n          e.style.display = e.style.display == 'none' ? 'block': 'none';\n        }\n      }\n      return false;\n    }\n    function switchPastebinFriendly(link) {\n      s1 = \"Switch to copy-and-paste view\";\n      s2 = \"Switch back to interactive view\";\n      link.textContent = link.textContent.trim() == s1 ? s2: s1;\n      toggle('browserTraceback', 'pastebinTraceback');\n      return false;\n    }\n  </script>\n  \n</head>\n<body>\n<div id=\"summary\">\n  <h1>ProgrammingError\n       at /api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/</h1>\n  <pre class=\"exception_value\">permission denied for table projects_metrics\n</pre>\n  <table class=\"meta\">\n\n    <tr>\n      <th>Request Method:</th>\n      <td>POST</td>\n    </tr>\n    <tr>\n      <th>Request URL:</th>\n      <td>http://internal-k8s-xerpaheadlessgrou-205ab0f1be-396527338.us-east-1.elb.amazonaws.com/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/</td>\n    </tr>\n\n    <tr>\n      <th>Django Version:</th>\n      <td>4.1.10</td>\n    </tr>\n\n    <tr>\n      <th>Exception Type:</th>\n      <td>ProgrammingError</td>\n    </tr>\n\n\n    <tr>\n      <th>Exception Value:</th>\n      <td><pre>permission denied for table projects_metrics\n</pre></td>\n    </tr>\n\n\n    <tr>\n      <th>Exception Location:</th>\n      <td><span class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</span>, line 89, in _execute</td>\n    </tr>\n\n\n    <tr>\n      <th>Raised during:</th>\n      <td>project.views.views.ProjectView</td>\n    </tr>\n\n    <tr>\n      <th>Python Executable:</th>\n      <td>/usr/local/bin/python</td>\n    </tr>\n    <tr>\n      <th>Python Version:</th>\n      <td>3.11.3</td>\n    </tr>\n    <tr>\n      <th>Python Path:</th>\n      <td><pre>[&#x27;/code/src&#x27;,\n &#x27;/code&#x27;,\n &#x27;/usr/local/bin&#x27;,\n &#x27;/usr/local/lib/python311.zip&#x27;,\n &#x27;/usr/local/lib/python3.11&#x27;,\n &#x27;/usr/local/lib/python3.11/lib-dynload&#x27;,\n &#x27;/usr/local/lib/python3.11/site-packages&#x27;]</pre></td>\n    </tr>\n    <tr>\n      <th>Server time:</th>\n      <td>Fri, 27 Jun 2025 14:03:52 -0600</td>\n    </tr>\n  </table>\n</div>\n\n\n\n\n<div id=\"traceback\">\n  <h2>Traceback <span class=\"commands\"><a href=\"#\" onclick=\"return switchPastebinFriendly(this);\">\n    Switch to copy-and-paste view</a></span>\n  </h2>\n  <div id=\"browserTraceback\">\n    <ul class=\"traceback\">\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 89, in _execute\n          \n\n          \n            <div class=\"context\" id=\"c139882793061760\">\n              \n                <ol start=\"82\" class=\"pre-context\" id=\"pre139882793061760\">\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>            if params is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>                # params default might be backend specific.</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>                return self.cursor.execute(sql)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>            else:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"89\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>                return self.cursor.execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='90' class=\"post-context\" id=\"post139882793061760\">\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>    def _executemany(self, sql, param_list, *ignored_wrapper_args):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>            return self.cursor.executemany(sql, param_list)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793061760\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>ignored_wrapper_args</td>\n                    <td class=\"code\"><pre>(False,\n {&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n  &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;})</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c&#x27;),\n UUID(&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;),\n UUID(&#x27;64c5159f-12bd-4e50-b208-172ddd7e2ebd&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 20, 3, 52, 99354, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n          <li class=\"cause\"><h3>\n          \n            The above exception (permission denied for table projects_metrics\n) was the direct cause of the following exception:\n          \n        </h3></li>\n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py</code>, line 56, in inner\n          \n\n          \n            <div class=\"context\" id=\"c139882793067264\">\n              \n                <ol start=\"49\" class=\"pre-context\" id=\"pre139882793067264\">\n                \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>        return inner</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>    else:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>        @wraps(get_response)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>        def inner(request):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>            try:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"56\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>                response = get_response(request)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='57' class=\"post-context\" id=\"post139882793067264\">\n                  \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>            except Exception as exc:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>                response = response_for_exception(request, exc)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>            return response</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>        return inner</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793067264\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>exc</td>\n                    <td class=\"code\"><pre>ProgrammingError(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>get_response</td>\n                    <td class=\"code\"><pre>&lt;bound method BaseHandler._get_response of &lt;django.core.handlers.wsgi.WSGIHandler object at 0x7f390143a210&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;WSGIRequest: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py</code>, line 197, in _get_response\n          \n\n          \n            <div class=\"context\" id=\"c139882793069952\">\n              \n                <ol start=\"190\" class=\"pre-context\" id=\"pre139882793069952\">\n                \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>        if response is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>            wrapped_callback = self.make_view_atomic(callback)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>            # If it is an asynchronous view, run it in a subthread.</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>            if asyncio.iscoroutinefunction(wrapped_callback):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>                wrapped_callback = async_to_sync(wrapped_callback)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>            try:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"197\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>                response = wrapped_callback(request, *callback_args, **callback_kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='198' class=\"post-context\" id=\"post139882793069952\">\n                  \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>            except Exception as e:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>                response = self.process_exception_by_middleware(e, request)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>                if response is None:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>                    raise</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>        # Complain if the view returned None (a common error).</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793069952\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>callback</td>\n                    <td class=\"code\"><pre>&lt;function View.as_view.&lt;locals&gt;.view at 0x7f3900ccf6a0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>callback_args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>callback_kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>middleware_method</td>\n                    <td class=\"code\"><pre>&lt;bound method CorsMiddleware.process_view of &lt;CorsMiddleware get_response=BaseHandler._get_response&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;WSGIRequest: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>response</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.core.handlers.wsgi.WSGIHandler object at 0x7f390143a210&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>wrapped_callback</td>\n                    <td class=\"code\"><pre>&lt;function View.as_view.&lt;locals&gt;.view at 0x7f3900ccf6a0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/views/decorators/csrf.py</code>, line 55, in wrapped_view\n          \n\n          \n            <div class=\"context\" id=\"c139882793069888\">\n              \n                <ol start=\"48\" class=\"pre-context\" id=\"pre139882793069888\">\n                \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre>def csrf_exempt(view_func):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre>    &quot;&quot;&quot;Mark a view function as being exempt from the CSRF view protection.&quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre>    # view_func.csrf_exempt = True would also work, but decorators are nicer</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre>    # if they don&#x27;t have side effects, so return a new function.</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre>    def wrapped_view(*args, **kwargs):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"55\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre>        return view_func(*args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='56' class=\"post-context\" id=\"post139882793069888\">\n                  \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre>    wrapped_view.csrf_exempt = True</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre>    return wraps(view_func)(wrapped_view)</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793069888\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>(&lt;WSGIRequest: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;,)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>view_func</td>\n                    <td class=\"code\"><pre>&lt;function View.as_view.&lt;locals&gt;.view at 0x7f39010153a0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/views/generic/base.py</code>, line 103, in view\n          \n\n          \n            <div class=\"context\" id=\"c139882794940288\">\n              \n                <ol start=\"96\" class=\"pre-context\" id=\"pre139882794940288\">\n                \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>            self = cls(**initkwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>            self.setup(request, *args, **kwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>            if not hasattr(self, &quot;request&quot;):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>                raise AttributeError(</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>                    &quot;%s instance has no &#x27;request&#x27; attribute. Did you override &quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>                    &quot;setup() and forget to call super()?&quot; % cls.__name__</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>                )</pre></li>\n                \n                </ol>\n              \n              <ol start=\"103\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>            return self.dispatch(request, *args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='104' class=\"post-context\" id=\"post139882794940288\">\n                  \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>        view.view_class = cls</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>        view.view_initkwargs = initkwargs</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>        # __name__ and __qualname__ are intentionally left unchanged as</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>        # view_class should be used to robustly determine the name of the view</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794940288\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>cls</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;project.views.views.ProjectView&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>initkwargs</td>\n                    <td class=\"code\"><pre>{}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;WSGIRequest: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 509, in dispatch\n          \n\n          \n            <div class=\"context\" id=\"c139882794718720\">\n              \n                <ol start=\"502\" class=\"pre-context\" id=\"pre139882794718720\">\n                \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>                                  self.http_method_not_allowed)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>            else:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>                handler = self.http_method_not_allowed</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>            response = handler(request, *args, **kwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>        except Exception as exc:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"509\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>            response = self.handle_exception(exc)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='510' class=\"post-context\" id=\"post139882794718720\">\n                  \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>        self.response = self.finalize_response(request, response, *args, **kwargs)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>        return self.response</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>    def options(self, request, *args, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>        &quot;&quot;&quot;</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794718720\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>handler</td>\n                    <td class=\"code\"><pre>&lt;bound method ProjectView.post of &lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 469, in handle_exception\n          \n\n          \n            <div class=\"context\" id=\"c139882794716992\">\n              \n                <ol start=\"462\" class=\"pre-context\" id=\"pre139882794716992\">\n                \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>        exception_handler = self.get_exception_handler()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>        context = self.get_exception_handler_context()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>        response = exception_handler(exc, context)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>        if response is None:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"469\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>            self.raise_uncaught_exception(exc)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='470' class=\"post-context\" id=\"post139882794716992\">\n                  \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>        response.exception = True</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>        return response</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>    def raise_uncaught_exception(self, exc):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>        if settings.DEBUG:</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794716992\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>context</td>\n                    <td class=\"code\"><pre>{&#x27;args&#x27;: (),\n &#x27;kwargs&#x27;: {&#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;},\n &#x27;request&#x27;: &lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;,\n &#x27;view&#x27;: &lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exc</td>\n                    <td class=\"code\"><pre>ProgrammingError(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exception_handler</td>\n                    <td class=\"code\"><pre>&lt;function exception_handler at 0x7f3900fdf740&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>response</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 480, in raise_uncaught_exception\n          \n\n          \n            <div class=\"context\" id=\"c139882794861056\">\n              \n                <ol start=\"473\" class=\"pre-context\" id=\"pre139882794861056\">\n                \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>    def raise_uncaught_exception(self, exc):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>        if settings.DEBUG:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>            request = self.request</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>            renderer_format = getattr(request.accepted_renderer, &#x27;format&#x27;)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>            use_plaintext_traceback = renderer_format not in (&#x27;html&#x27;, &#x27;api&#x27;, &#x27;admin&#x27;)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>            request.force_plaintext_errors(use_plaintext_traceback)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"480\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>        raise exc</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='481' class=\"post-context\" id=\"post139882794861056\">\n                  \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>    # Note: Views are made CSRF exempt from within `as_view` as to prevent</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>    # accidental removal of this exemption in cases where `dispatch` needs to</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>    # be overridden.</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>    def dispatch(self, request, *args, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>        &quot;&quot;&quot;</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794861056\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>exc</td>\n                    <td class=\"code\"><pre>ProgrammingError(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>renderer_format</td>\n                    <td class=\"code\"><pre>&#x27;json&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>use_plaintext_traceback</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 506, in dispatch\n          \n\n          \n            <div class=\"context\" id=\"c139882793067328\">\n              \n                <ol start=\"499\" class=\"pre-context\" id=\"pre139882793067328\">\n                \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>            # Get the appropriate handler method</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>            if request.method.lower() in self.http_method_names:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>                handler = getattr(self, request.method.lower(),</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>                                  self.http_method_not_allowed)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>            else:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>                handler = self.http_method_not_allowed</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre></pre></li>\n                \n                </ol>\n              \n              <ol start=\"506\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>            response = handler(request, *args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='507' class=\"post-context\" id=\"post139882793067328\">\n                  \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>        except Exception as exc:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>            response = self.handle_exception(exc)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>        self.response = self.finalize_response(request, response, *args, **kwargs)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>        return self.response</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793067328\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>handler</td>\n                    <td class=\"code\"><pre>&lt;bound method ProjectView.post of &lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/code/src/project/views/views.py</code>, line 173, in post\n          \n\n          \n            <div class=\"context\" id=\"c139882793066816\">\n              \n                <ol start=\"166\" class=\"pre-context\" id=\"pre139882793066816\">\n                \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>            valid_fields = validator.validate_fields()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>        if not valid_fields:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>            return Response(&#x27;Invalid fields&#x27;, status=status.HTTP_400_BAD_REQUEST)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>        serializer.save()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre></pre></li>\n                \n                </ol>\n              \n              <ol start=\"173\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>        ProjectMetric.create_project_metric(serializer.instance.project_status_id, user_id, serializer.instance)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='174' class=\"post-context\" id=\"post139882793066816\">\n                  \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>        </pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>        return Response(serializer.data, status=status.HTTP_201_CREATED)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>class ProjectDetail(RetrieveUpdateDestroyAPIView):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>    &quot;&quot;&quot;Gets or updates a project.&quot;&quot;&quot;</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793066816\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>account_validation</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>have_required_fields</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>missing_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project</td>\n                    <td class=\"code\"><pre>{&#x27;from_account&#x27;: None,\n &#x27;goal_date&#x27;: &#x27;2030-10-30&#x27;,\n &#x27;id&#x27;: &#x27;6dd5bbb8-12a8-4205-83eb-66a6d55cebf4&#x27;,\n &#x27;project_category&#x27;: &#x27;b95487f8-4d83-4e24-ad1a-951870596539&#x27;,\n &#x27;project_category_id&#x27;: &#x27;b95487f8-4d83-4e24-ad1a-951870596539&#x27;,\n &#x27;project_config&#x27;: UUID(&#x27;deead368-205e-464b-9d8c-82cb93517eef&#x27;),\n &#x27;project_name&#x27;: &#x27;Viaje a japon&#x27;,\n &#x27;project_status&#x27;: &#x27;8df908b6-8ab3-11ed-a1eb-0242ac120002&#x27;,\n &#x27;to_account&#x27;: None,\n &#x27;total&#x27;: 20000,\n &#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_config_id</td>\n                    <td class=\"code\"><pre>UUID(&#x27;deead368-205e-464b-9d8c-82cb93517eef&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_status_active_id</td>\n                    <td class=\"code\"><pre>&#x27;f2a34b3c-5eea-4bfd-a18e-06d675826486&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_status_setup_id</td>\n                    <td class=\"code\"><pre>&#x27;8df908b6-8ab3-11ed-a1eb-0242ac120002&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>required_fields</td>\n                    <td class=\"code\"><pre>[&#x27;project_name&#x27;, &#x27;goal_date&#x27;, &#x27;total&#x27;]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>serializer</td>\n                    <td class=\"code\"><pre>ProjectPostSerializer(data={&#x27;project_name&#x27;: &#x27;Viaje a japon&#x27;, &#x27;project_category_id&#x27;: &#x27;b95487f8-4d83-4e24-ad1a-951870596539&#x27;, &#x27;goal_date&#x27;: &#x27;2030-10-30&#x27;, &#x27;from_account&#x27;: None, &#x27;to_account&#x27;: None, &#x27;total&#x27;: 20000, &#x27;id&#x27;: &#x27;6dd5bbb8-12a8-4205-83eb-66a6d55cebf4&#x27;, &#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;, &#x27;project_status&#x27;: &#x27;8df908b6-8ab3-11ed-a1eb-0242ac120002&#x27;, &#x27;project_category&#x27;: &#x27;b95487f8-4d83-4e24-ad1a-951870596539&#x27;, &#x27;project_config&#x27;: UUID(&#x27;deead368-205e-464b-9d8c-82cb93517eef&#x27;)}):\n    id = UUIDField(read_only=True)\n    goal_date = DateField(allow_null=True, required=False)\n    total = DecimalField(allow_null=True, decimal_places=2, default=1, max_digits=14, required=False)\n    project_name = CharField(allow_null=True)\n    user_id = UUIDField()\n    progress = DecimalField(decimal_places=2, max_digits=14, required=False)\n    processing = DecimalField(decimal_places=2, max_digits=14, required=False)\n    pending = DecimalField(decimal_places=2, max_digits=14, required=False)\n    from_account = CharField(allow_null=True, max_length=60, required=False)\n    to_account = CharField(allow_null=True, max_length=60, required=False)\n    investment_returns = DecimalField(decimal_places=2, max_digits=14, required=False)\n    created_at = DateTimeField(read_only=True)\n    updated_at = DateTimeField(read_only=True)\n    deleted_at = DateTimeField(allow_null=True, required=False)\n    project_category = PrimaryKeyRelatedField(queryset=Item.objects.all(), required=False)\n    project_status = PrimaryKeyRelatedField(queryset=Item.objects.all(), required=False)\n    project_config = PrimaryKeyRelatedField(queryset=Item.objects.all())</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>user_id</td>\n                    <td class=\"code\"><pre>&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>valid_fields</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>validator</td>\n                    <td class=\"code\"><pre>&lt;project.validators.ProjectValidator object at 0x7f39004aded0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/code/src/metric/service/project_metric_service.py</code>, line 14, in create_project_metric\n          \n\n          \n            <div class=\"context\" id=\"c139882793067200\">\n              \n                <ol start=\"7\" class=\"pre-context\" id=\"pre139882793067200\">\n                \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>    @staticmethod</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>    def create_project_metric(project_status_id, user_id, project ):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>        config_completed_datetime = None</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>        if str(project_status_id) == PROJECT_STATUS_ACTIVE_ID:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>            config_completed_datetime = datetime.now()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>        </pre></li>\n                \n                </ol>\n              \n              <ol start=\"14\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>        ProjectsMetrics.objects.create(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='15' class=\"post-context\" id=\"post139882793067200\">\n                  \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>            user_id=user_id,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>            project=project,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>            config_completed_datetime = config_completed_datetime</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>        )</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>    @staticmethod</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793067200\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>config_completed_datetime</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project</td>\n                    <td class=\"code\"><pre>&lt;Project: Project object (64c5159f-12bd-4e50-b208-172ddd7e2ebd)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_status_id</td>\n                    <td class=\"code\"><pre>UUID(&#x27;8df908b6-8ab3-11ed-a1eb-0242ac120002&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>user_id</td>\n                    <td class=\"code\"><pre>&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/manager.py</code>, line 85, in manager_method\n          \n\n          \n            <div class=\"context\" id=\"c139882796059264\">\n              \n                <ol start=\"78\" class=\"pre-context\" id=\"pre139882796059264\">\n                \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>    def check(self, **kwargs):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>        return []</pre></li>\n                \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>    @classmethod</pre></li>\n                \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>    def _get_queryset_methods(cls, queryset_class):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>        def create_method(name, method):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>            def manager_method(self, *args, **kwargs):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"85\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>                return getattr(self.get_queryset(), name)(*args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='86' class=\"post-context\" id=\"post139882796059264\">\n                  \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>            manager_method.__name__ = method.__name__</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>            manager_method.__doc__ = method.__doc__</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>            return manager_method</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>        new_methods = {}</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882796059264\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;config_completed_datetime&#x27;: None,\n &#x27;project&#x27;: &lt;Project: Project object (64c5159f-12bd-4e50-b208-172ddd7e2ebd)&gt;,\n &#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>name</td>\n                    <td class=\"code\"><pre>&#x27;create&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.manager.Manager object at 0x7f39004ae350&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/query.py</code>, line 671, in create\n          \n\n          \n            <div class=\"context\" id=\"c139882793067008\">\n              \n                <ol start=\"664\" class=\"pre-context\" id=\"pre139882793067008\">\n                \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>    def create(self, **kwargs):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        Create a new object with the given kwargs, saving it to the database</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        and returning the created object.</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        obj = self.model(**kwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        self._for_write = True</pre></li>\n                \n                </ol>\n              \n              <ol start=\"671\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        obj.save(force_insert=True, using=self.db)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='672' class=\"post-context\" id=\"post139882793067008\">\n                  \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        return obj</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>    async def acreate(self, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        return await sync_to_async(self.create)(**kwargs)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>    def _prepare_for_bulk_create(self, objs):</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793067008\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;config_completed_datetime&#x27;: None,\n &#x27;project&#x27;: &lt;Project: Project object (64c5159f-12bd-4e50-b208-172ddd7e2ebd)&gt;,\n &#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>obj</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>Error in formatting: ProgrammingError: permission denied for table projects_metrics\n</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 812, in save\n          \n\n          \n            <div class=\"context\" id=\"c139882794876096\">\n              \n                <ol start=\"805\" class=\"pre-context\" id=\"pre139882794876096\">\n                \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>            for field in self._meta.concrete_fields:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>                if not field.primary_key and not hasattr(field, &quot;through&quot;):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>                    field_names.add(field.attname)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>            loaded_fields = field_names.difference(deferred_fields)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>            if loaded_fields:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>                update_fields = frozenset(loaded_fields)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre></pre></li>\n                \n                </ol>\n              \n              <ol start=\"812\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>        self.save_base(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='813' class=\"post-context\" id=\"post139882794876096\">\n                  \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>            using=using,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>            force_insert=force_insert,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>            force_update=force_update,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>            update_fields=update_fields,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>        )</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794876096\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>deferred_fields</td>\n                    <td class=\"code\"><pre>set()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_insert</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_update</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 863, in save_base\n          \n\n          \n            <div class=\"context\" id=\"c139882793066176\">\n              \n                <ol start=\"856\" class=\"pre-context\" id=\"pre139882793066176\">\n                \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>            context_manager = transaction.atomic(using=using, savepoint=False)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>        else:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>            context_manager = transaction.mark_for_rollback_on_error(using=using)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>        with context_manager:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>            parent_inserted = False</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>            if not raw:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>                parent_inserted = self._save_parents(cls, using, update_fields)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"863\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>            updated = self._save_table(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='864' class=\"post-context\" id=\"post139882793066176\">\n                  \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>                raw,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>                cls,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>                force_insert or parent_inserted,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>                force_update,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>                using,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>                update_fields,</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793066176\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>cls</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;metric.models.ProjectsMetrics&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>context_manager</td>\n                    <td class=\"code\"><pre>&lt;contextlib._GeneratorContextManager object at 0x7f3900458490&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_insert</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_update</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>meta</td>\n                    <td class=\"code\"><pre>&lt;Options for ProjectsMetrics&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>origin</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;metric.models.ProjectsMetrics&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>parent_inserted</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 1006, in _save_table\n          \n\n          \n            <div class=\"context\" id=\"c139882794989568\">\n              \n                <ol start=\"999\" class=\"pre-context\" id=\"pre139882794989568\">\n                \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>                    )[&quot;_order__max&quot;]</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>                )</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>            fields = meta.local_concrete_fields</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>            if not pk_set:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>                fields = [f for f in fields if f is not meta.auto_field]</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>            returning_fields = meta.db_returning_fields</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1006\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>            results = self._do_insert(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1007' class=\"post-context\" id=\"post139882794989568\">\n                  \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>                cls._base_manager, using, fields, returning_fields, raw</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>            )</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>            if results:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>                for value, field in zip(results[0], returning_fields):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>                    setattr(self, field.attname, value)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>        return updated</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794989568\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>cls</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;metric.models.ProjectsMetrics&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>fields</td>\n                    <td class=\"code\"><pre>(&lt;django.db.models.fields.UUIDField: id&gt;,\n &lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.DateTimeField: updated_at&gt;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_insert</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_update</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>meta</td>\n                    <td class=\"code\"><pre>&lt;Options for ProjectsMetrics&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>non_pks</td>\n                    <td class=\"code\"><pre>[&lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.DateTimeField: updated_at&gt;]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>pk_set</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>pk_val</td>\n                    <td class=\"code\"><pre>UUID(&#x27;72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>updated</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 1047, in _do_insert\n          \n\n          \n            <div class=\"context\" id=\"c139882795035840\">\n              \n                <ol start=\"1040\" class=\"pre-context\" id=\"pre139882795035840\">\n                \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>        return filtered._update(values) &gt; 0</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>    def _do_insert(self, manager, using, fields, returning_fields, raw):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>        Do an INSERT. If returning_fields is defined then this method should</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>        return the newly created data for the model.</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1047\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>        return manager._insert(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1048' class=\"post-context\" id=\"post139882795035840\">\n                  \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>            [self],</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>            fields=fields,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>            returning_fields=returning_fields,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>            using=using,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>            raw=raw,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>        )</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882795035840\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>fields</td>\n                    <td class=\"code\"><pre>(&lt;django.db.models.fields.UUIDField: id&gt;,\n &lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.DateTimeField: updated_at&gt;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>manager</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.manager.Manager object at 0x7f39004adf90&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/manager.py</code>, line 85, in manager_method\n          \n\n          \n            <div class=\"context\" id=\"c139882794865920\">\n              \n                <ol start=\"78\" class=\"pre-context\" id=\"pre139882794865920\">\n                \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>    def check(self, **kwargs):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>        return []</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>    @classmethod</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>    def _get_queryset_methods(cls, queryset_class):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>        def create_method(name, method):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>            def manager_method(self, *args, **kwargs):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"85\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>                return getattr(self.get_queryset(), name)(*args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='86' class=\"post-context\" id=\"post139882794865920\">\n                  \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>            manager_method.__name__ = method.__name__</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>            manager_method.__doc__ = method.__doc__</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>            return manager_method</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>        new_methods = {}</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794865920\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>([&lt;ProjectsMetrics: ProjectsMetrics object (72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c)&gt;],)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;fields&#x27;: (&lt;django.db.models.fields.UUIDField: id&gt;,\n            &lt;django.db.models.fields.UUIDField: user_id&gt;,\n            &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n            &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n            &lt;django.db.models.fields.DateTimeField: updated_at&gt;),\n &#x27;raw&#x27;: False,\n &#x27;returning_fields&#x27;: [],\n &#x27;using&#x27;: &#x27;default&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>name</td>\n                    <td class=\"code\"><pre>&#x27;_insert&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.manager.Manager object at 0x7f39004adf90&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/query.py</code>, line 1791, in _insert\n          \n\n          \n            <div class=\"context\" id=\"c139882794491712\">\n              \n                <ol start=\"1784\" class=\"pre-context\" id=\"pre139882794491712\">\n                \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>        query = sql.InsertQuery(</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>            self.model,</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>            on_conflict=on_conflict,</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>            update_fields=update_fields,</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>            unique_fields=unique_fields,</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>        )</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>        query.insert_values(fields, objs, raw=raw)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1791\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>        return query.get_compiler(using=using).execute_sql(returning_fields)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1792' class=\"post-context\" id=\"post139882794491712\">\n                  \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>    _insert.alters_data = True</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>    _insert.queryset_only = False</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>    def _batched_insert(</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>        self,</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794491712\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>fields</td>\n                    <td class=\"code\"><pre>(&lt;django.db.models.fields.UUIDField: id&gt;,\n &lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.DateTimeField: updated_at&gt;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>objs</td>\n                    <td class=\"code\"><pre>[&lt;ProjectsMetrics: ProjectsMetrics object (72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c)&gt;]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>on_conflict</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>query</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.sql.subqueries.InsertQuery object at 0x7f3901012ad0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>Error in formatting: ProgrammingError: permission denied for table projects_metrics\n</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>unique_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py</code>, line 1660, in execute_sql\n          \n\n          \n            <div class=\"context\" id=\"c139882794710912\">\n              \n                <ol start=\"1653\" class=\"pre-context\" id=\"pre139882794710912\">\n                \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>            and len(self.query.objs) != 1</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>            and not self.connection.features.can_return_rows_from_bulk_insert</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>        )</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>        opts = self.query.get_meta()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>        self.returning_fields = returning_fields</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>        with self.connection.cursor() as cursor:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>            for sql, params in self.as_sql():</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1660\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>                cursor.execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1661' class=\"post-context\" id=\"post139882794710912\">\n                  \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>            if not self.returning_fields:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>                return []</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>            if (</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>                self.connection.features.can_return_rows_from_bulk_insert</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>                and len(self.query.objs) &gt; 1</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>            ):</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794710912\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>cursor</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>opts</td>\n                    <td class=\"code\"><pre>&lt;Options for ProjectsMetrics&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c&#x27;),\n UUID(&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;),\n UUID(&#x27;64c5159f-12bd-4e50-b208-172ddd7e2ebd&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 20, 3, 52, 99354, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;SQLInsertCompiler model=ProjectsMetrics connection=&lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt; using=&#x27;default&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 102, in execute\n          \n\n          \n            <div class=\"context\" id=\"c139882793064192\">\n              \n                <ol start=\"95\" class=\"pre-context\" id=\"pre139882793064192\">\n                \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>class CursorDebugWrapper(CursorWrapper):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>    # XXX callproc isn&#x27;t instrumented at this time.</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>    def execute(self, sql, params=None):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>        with self.debug_sql(sql, params, use_last_executed_query=True):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"102\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>            return super().execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='103' class=\"post-context\" id=\"post139882793064192\">\n                  \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>    def executemany(self, sql, param_list):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>        with self.debug_sql(sql, param_list, many=True):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>            return super().executemany(sql, param_list)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>    @contextmanager</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793064192\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>__class__</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;django.db.backends.utils.CursorDebugWrapper&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c&#x27;),\n UUID(&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;),\n UUID(&#x27;64c5159f-12bd-4e50-b208-172ddd7e2ebd&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 20, 3, 52, 99354, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 67, in execute\n          \n\n          \n            <div class=\"context\" id=\"c139882793069440\">\n              \n                <ol start=\"60\" class=\"pre-context\" id=\"pre139882793069440\">\n                \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>            elif kparams is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>                return self.cursor.callproc(procname, params)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>            else:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>                params = params or ()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>                return self.cursor.callproc(procname, params, kparams)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>    def execute(self, sql, params=None):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"67\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>        return self._execute_with_wrappers(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='68' class=\"post-context\" id=\"post139882793069440\">\n                  \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>            sql, params, many=False, executor=self._execute</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>        )</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>    def executemany(self, sql, param_list):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>        return self._execute_with_wrappers(</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>            sql, param_list, many=True, executor=self._executemany</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793069440\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c&#x27;),\n UUID(&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;),\n UUID(&#x27;64c5159f-12bd-4e50-b208-172ddd7e2ebd&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 20, 3, 52, 99354, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 80, in _execute_with_wrappers\n          \n\n          \n            <div class=\"context\" id=\"c139882794711424\">\n              \n                <ol start=\"73\" class=\"pre-context\" id=\"pre139882794711424\">\n                \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>            sql, param_list, many=True, executor=self._executemany</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>        )</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>    def _execute_with_wrappers(self, sql, params, many, executor):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>        context = {&quot;connection&quot;: self.db, &quot;cursor&quot;: self}</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>        for wrapper in reversed(self.db.execute_wrappers):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>            executor = functools.partial(wrapper, executor)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"80\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>        return executor(sql, params, many, context)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='81' class=\"post-context\" id=\"post139882794711424\">\n                  \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>            if params is None:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>                # params default might be backend specific.</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794711424\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>context</td>\n                    <td class=\"code\"><pre>{&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>executor</td>\n                    <td class=\"code\"><pre>&lt;bound method CursorWrapper._execute of &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>many</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c&#x27;),\n UUID(&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;),\n UUID(&#x27;64c5159f-12bd-4e50-b208-172ddd7e2ebd&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 20, 3, 52, 99354, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 84, in _execute\n          \n\n          \n            <div class=\"context\" id=\"c139882795036992\">\n              \n                <ol start=\"77\" class=\"pre-context\" id=\"pre139882795036992\">\n                \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>        context = {&quot;connection&quot;: self.db, &quot;cursor&quot;: self}</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>        for wrapper in reversed(self.db.execute_wrappers):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>            executor = functools.partial(wrapper, executor)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>        return executor(sql, params, many, context)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                \n                </ol>\n              \n              <ol start=\"84\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>        with self.db.wrap_database_errors:</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='85' class=\"post-context\" id=\"post139882795036992\">\n                  \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>            if params is None:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>                # params default might be backend specific.</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>                return self.cursor.execute(sql)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>            else:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>                return self.cursor.execute(sql, params)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882795036992\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>ignored_wrapper_args</td>\n                    <td class=\"code\"><pre>(False,\n {&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n  &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;})</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c&#x27;),\n UUID(&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;),\n UUID(&#x27;64c5159f-12bd-4e50-b208-172ddd7e2ebd&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 20, 3, 52, 99354, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/utils.py</code>, line 91, in __exit__\n          \n\n          \n            <div class=\"context\" id=\"c139882792984128\">\n              \n                <ol start=\"84\" class=\"pre-context\" id=\"pre139882792984128\">\n                \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>            db_exc_type = getattr(self.wrapper.Database, dj_exc_type.__name__)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>            if issubclass(exc_type, db_exc_type):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>                dj_exc_value = dj_exc_type(*exc_value.args)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>                # Only set the &#x27;errors_occurred&#x27; flag for errors that may make</pre></li>\n                \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>                # the connection unusable.</pre></li>\n                \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>                if dj_exc_type not in (DataError, IntegrityError):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>                    self.wrapper.errors_occurred = True</pre></li>\n                \n                </ol>\n              \n              <ol start=\"91\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>                raise dj_exc_value.with_traceback(traceback) from exc_value</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='92' class=\"post-context\" id=\"post139882792984128\">\n                  \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>    def __call__(self, func):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>        # Note that we are intentionally not using @wraps here for performance</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>        # reasons. Refs #21109.</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>        def inner(*args, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>            with self:</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882792984128\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>db_exc_type</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;psycopg2.ProgrammingError&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>dj_exc_type</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;django.db.utils.ProgrammingError&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>dj_exc_value</td>\n                    <td class=\"code\"><pre>ProgrammingError(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exc_type</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;psycopg2.errors.InsufficientPrivilege&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exc_value</td>\n                    <td class=\"code\"><pre>InsufficientPrivilege(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.utils.DatabaseErrorWrapper object at 0x7f39005ea910&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>traceback</td>\n                    <td class=\"code\"><pre>&lt;traceback object at 0x7f390030cd80&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 89, in _execute\n          \n\n          \n            <div class=\"context\" id=\"c139882793061760\">\n              \n                <ol start=\"82\" class=\"pre-context\" id=\"pre139882793061760\">\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>            if params is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>                # params default might be backend specific.</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>                return self.cursor.execute(sql)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>            else:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"89\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>                return self.cursor.execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='90' class=\"post-context\" id=\"post139882793061760\">\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>    def _executemany(self, sql, param_list, *ignored_wrapper_args):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>            return self.cursor.executemany(sql, param_list)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793061760\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>ignored_wrapper_args</td>\n                    <td class=\"code\"><pre>(False,\n {&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n  &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;})</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c&#x27;),\n UUID(&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;),\n UUID(&#x27;64c5159f-12bd-4e50-b208-172ddd7e2ebd&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 20, 3, 52, 99354, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n    </ul>\n  </div>\n\n  <form action=\"https://dpaste.com/\" name=\"pasteform\" id=\"pasteform\" method=\"post\">\n  <div id=\"pastebinTraceback\" class=\"pastebin\">\n    <input type=\"hidden\" name=\"language\" value=\"PythonConsole\">\n    <input type=\"hidden\" name=\"title\"\n      value=\"ProgrammingError at /api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/\">\n    <input type=\"hidden\" name=\"source\" value=\"Django Dpaste Agent\">\n    <input type=\"hidden\" name=\"poster\" value=\"Django\">\n    <textarea name=\"content\" id=\"traceback_area\" cols=\"140\" rows=\"25\">\nEnvironment:\n\n\nRequest Method: POST\nRequest URL: http://internal-k8s-xerpaheadlessgrou-205ab0f1be-396527338.us-east-1.elb.amazonaws.com/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/\n\nDjango Version: 4.1.10\nPython Version: 3.11.3\nInstalled Applications:\n[&#x27;django.contrib.admin&#x27;,\n &#x27;django.contrib.auth&#x27;,\n &#x27;django.contrib.contenttypes&#x27;,\n &#x27;django.contrib.sessions&#x27;,\n &#x27;django.contrib.messages&#x27;,\n &#x27;django.contrib.staticfiles&#x27;,\n &#x27;django_extensions&#x27;,\n &#x27;corsheaders&#x27;,\n &#x27;rest_framework&#x27;,\n &#x27;django_filters&#x27;,\n &#x27;monitoring&#x27;,\n &#x27;saving&#x27;,\n &#x27;payment&#x27;,\n &#x27;catalog&#x27;,\n &#x27;project&#x27;,\n &#x27;rule&#x27;,\n &#x27;activity&#x27;,\n &#x27;transaction&#x27;,\n &#x27;user&#x27;,\n &#x27;dashboard&#x27;,\n &#x27;metric&#x27;,\n &#x27;config&#x27;,\n &#x27;report&#x27;]\nInstalled Middleware:\n[&#x27;django.middleware.security.SecurityMiddleware&#x27;,\n &#x27;django.contrib.sessions.middleware.SessionMiddleware&#x27;,\n &#x27;django.middleware.common.CommonMiddleware&#x27;,\n &#x27;django.middleware.csrf.CsrfViewMiddleware&#x27;,\n &#x27;django.contrib.auth.middleware.AuthenticationMiddleware&#x27;,\n &#x27;django.contrib.messages.middleware.MessageMiddleware&#x27;,\n &#x27;django.middleware.clickjacking.XFrameOptionsMiddleware&#x27;,\n &#x27;corsheaders.middleware.CorsMiddleware&#x27;]\n\n\n\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 89, in _execute\n    return self.cursor.execute(sql, params)\n\nThe above exception (permission denied for table projects_metrics\n) was the direct cause of the following exception:\n  File \"/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py\", line 56, in inner\n    response = get_response(request)\n  File \"/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py\", line 197, in _get_response\n    response = wrapped_callback(request, *callback_args, **callback_kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/views/decorators/csrf.py\", line 55, in wrapped_view\n    return view_func(*args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/views/generic/base.py\", line 103, in view\n    return self.dispatch(request, *args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 509, in dispatch\n    response = self.handle_exception(exc)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 469, in handle_exception\n    self.raise_uncaught_exception(exc)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 480, in raise_uncaught_exception\n    raise exc\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 506, in dispatch\n    response = handler(request, *args, **kwargs)\n  File \"/code/src/project/views/views.py\", line 173, in post\n    ProjectMetric.create_project_metric(serializer.instance.project_status_id, user_id, serializer.instance)\n  File \"/code/src/metric/service/project_metric_service.py\", line 14, in create_project_metric\n    ProjectsMetrics.objects.create(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/manager.py\", line 85, in manager_method\n    return getattr(self.get_queryset(), name)(*args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\", line 671, in create\n    obj.save(force_insert=True, using=self.db)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 812, in save\n    self.save_base(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 863, in save_base\n    updated = self._save_table(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 1006, in _save_table\n    results = self._do_insert(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 1047, in _do_insert\n    return manager._insert(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/manager.py\", line 85, in manager_method\n    return getattr(self.get_queryset(), name)(*args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\", line 1791, in _insert\n    return query.get_compiler(using=using).execute_sql(returning_fields)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\", line 1660, in execute_sql\n    cursor.execute(sql, params)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 102, in execute\n    return super().execute(sql, params)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 67, in execute\n    return self._execute_with_wrappers(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 80, in _execute_with_wrappers\n    return executor(sql, params, many, context)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 84, in _execute\n    with self.db.wrap_database_errors:\n  File \"/usr/local/lib/python3.11/site-packages/django/db/utils.py\", line 91, in __exit__\n    raise dj_exc_value.with_traceback(traceback) from exc_value\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 89, in _execute\n    return self.cursor.execute(sql, params)\n\nException Type: ProgrammingError at /api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/\nException Value: permission denied for table projects_metrics\n\n</textarea>\n  <br><br>\n  <input type=\"submit\" value=\"Share this traceback on a public website\">\n  </div>\n</form>\n\n</div>\n\n\n<div id=\"requestinfo\">\n  <h2>Request information</h2>\n\n\n  \n    <h3 id=\"user-info\">USER</h3>\n    <p>AnonymousUser</p>\n  \n\n  <h3 id=\"get-info\">GET</h3>\n  \n    <p>No GET data</p>\n  \n\n  <h3 id=\"post-info\">POST</h3>\n  \n    <p>No POST data</p>\n  \n  <h3 id=\"files-info\">FILES</h3>\n  \n    <p>No FILES data</p>\n  \n\n\n  <h3 id=\"cookie-info\">COOKIES</h3>\n  \n    <p>No cookie data</p>\n  \n\n  <h3 id=\"meta-info\">META</h3>\n  <table class=\"req\">\n    <thead>\n      <tr>\n        <th>Variable</th>\n        <th>Value</th>\n      </tr>\n    </thead>\n    <tbody>\n      \n        <tr>\n          <td>CONTENT_LENGTH</td>\n          <td class=\"code\"><pre>&#x27;211&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CONTENT_TYPE</td>\n          <td class=\"code\"><pre>&#x27;application/json&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_ACCEPT_ENCODING</td>\n          <td class=\"code\"><pre>&#x27;identity&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_ACCESS_CONTROL_ALLOW_CREDENTIALS</td>\n          <td class=\"code\"><pre>&#x27;True&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_ACCESS_CONTROL_ALLOW_ORIGIN</td>\n          <td class=\"code\"><pre>&#x27;*&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_HOST</td>\n          <td class=\"code\"><pre>&#x27;internal-k8s-xerpaheadlessgrou-205ab0f1be-396527338.us-east-1.elb.amazonaws.com&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_USER_AGENT</td>\n          <td class=\"code\"><pre>&#x27;python-urllib3/1.26.19&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_AMZN_TRACE_ID</td>\n          <td class=\"code\"><pre>&#x27;Root=1-685ef927-3f7e6a0533510b4b05bf71ef&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_FORWARDED_FOR</td>\n          <td class=\"code\"><pre>&#x27;10.1.2.104&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_FORWARDED_PORT</td>\n          <td class=\"code\"><pre>&#x27;80&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_FORWARDED_PROTO</td>\n          <td class=\"code\"><pre>&#x27;http&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PATH_INFO</td>\n          <td class=\"code\"><pre>&#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>QUERY_STRING</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>RAW_URI</td>\n          <td class=\"code\"><pre>&#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>REMOTE_ADDR</td>\n          <td class=\"code\"><pre>&#x27;10.1.1.43&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>REMOTE_PORT</td>\n          <td class=\"code\"><pre>&#x27;34984&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>REQUEST_METHOD</td>\n          <td class=\"code\"><pre>&#x27;POST&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SCRIPT_NAME</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_NAME</td>\n          <td class=\"code\"><pre>&#x27;0.0.0.0&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_PORT</td>\n          <td class=\"code\"><pre>&#x27;8000&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_PROTOCOL</td>\n          <td class=\"code\"><pre>&#x27;HTTP/1.1&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_SOFTWARE</td>\n          <td class=\"code\"><pre>&#x27;gunicorn/20.1.0&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>gunicorn.socket</td>\n          <td class=\"code\"><pre>&lt;socket.socket fd=9, family=2, type=1, proto=0, laddr=(&#x27;10.1.1.120&#x27;, 8000), raddr=(&#x27;10.1.1.43&#x27;, 34984)&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.errors</td>\n          <td class=\"code\"><pre>&lt;gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f39004280a0&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.file_wrapper</td>\n          <td class=\"code\"><pre>&lt;class &#x27;gunicorn.http.wsgi.FileWrapper&#x27;&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.input</td>\n          <td class=\"code\"><pre>&lt;gunicorn.http.body.Body object at 0x7f39005dd090&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.input_terminated</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.multiprocess</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.multithread</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.run_once</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.url_scheme</td>\n          <td class=\"code\"><pre>&#x27;http&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.version</td>\n          <td class=\"code\"><pre>(1, 0)</pre></td>\n        </tr>\n      \n    </tbody>\n  </table>\n\n\n  <h3 id=\"settings-info\">Settings</h3>\n  <h4>Using settings module <code>api_saving.settings</code></h4>\n  <table class=\"req\">\n    <thead>\n      <tr>\n        <th>Setting</th>\n        <th>Value</th>\n      </tr>\n    </thead>\n    <tbody>\n      \n        <tr>\n          <td>ABSOLUTE_URL_OVERRIDES</td>\n          <td class=\"code\"><pre>{}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>ADMINS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>ALLOWED_HOSTS</td>\n          <td class=\"code\"><pre>[&#x27;*&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>APPEND_SLASH</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>AUTHENTICATION_BACKENDS</td>\n          <td class=\"code\"><pre>[&#x27;django.contrib.auth.backends.ModelBackend&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>AUTH_PASSWORD_VALIDATORS</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>AUTH_USER_MODEL</td>\n          <td class=\"code\"><pre>&#x27;auth.User&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>BASE_DIR</td>\n          <td class=\"code\"><pre>PosixPath(&#x27;/code/src&#x27;)</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHES</td>\n          <td class=\"code\"><pre>{&#x27;default&#x27;: {&#x27;BACKEND&#x27;: &#x27;django.core.cache.backends.locmem.LocMemCache&#x27;}}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHE_MIDDLEWARE_ALIAS</td>\n          <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHE_MIDDLEWARE_KEY_PREFIX</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHE_MIDDLEWARE_SECONDS</td>\n          <td class=\"code\"><pre>600</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CORS_ORIGIN_ALLOW_ALL</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_AGE</td>\n          <td class=\"code\"><pre>31449600</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_DOMAIN</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_HTTPONLY</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_MASKED</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_NAME</td>\n          <td class=\"code\"><pre>&#x27;csrftoken&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_PATH</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_SAMESITE</td>\n          <td class=\"code\"><pre>&#x27;Lax&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_SECURE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_FAILURE_VIEW</td>\n          <td class=\"code\"><pre>&#x27;django.views.csrf.csrf_failure&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_HEADER_NAME</td>\n          <td class=\"code\"><pre>&#x27;HTTP_X_CSRFTOKEN&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_TRUSTED_ORIGINS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_USE_SESSIONS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATABASES</td>\n          <td class=\"code\"><pre>{&#x27;default&#x27;: {&#x27;ATOMIC_REQUESTS&#x27;: False,\n             &#x27;AUTOCOMMIT&#x27;: True,\n             &#x27;CONN_HEALTH_CHECKS&#x27;: False,\n             &#x27;CONN_MAX_AGE&#x27;: 0,\n             &#x27;ENGINE&#x27;: &#x27;django.db.backends.postgresql_psycopg2&#x27;,\n             &#x27;HOST&#x27;: &#x27;xerpa-headless-us-east-1-xerpaheadless-rds-instance.ckdom9c6kdbz.us-east-1.rds.amazonaws.com&#x27;,\n             &#x27;NAME&#x27;: &#x27;saving_service_db&#x27;,\n             &#x27;OPTIONS&#x27;: {},\n             &#x27;PASSWORD&#x27;: &#x27;********************&#x27;,\n             &#x27;PORT&#x27;: &#x27;5432&#x27;,\n             &#x27;TEST&#x27;: {&#x27;CHARSET&#x27;: None,\n                      &#x27;COLLATION&#x27;: None,\n                      &#x27;MIGRATE&#x27;: True,\n                      &#x27;MIRROR&#x27;: None,\n                      &#x27;NAME&#x27;: None},\n             &#x27;TIME_ZONE&#x27;: None,\n             &#x27;USER&#x27;: &#x27;xerpaheadless_saving_service_user&#x27;}}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATABASE_ROUTERS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATA_UPLOAD_MAX_MEMORY_SIZE</td>\n          <td class=\"code\"><pre>2621440</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATA_UPLOAD_MAX_NUMBER_FIELDS</td>\n          <td class=\"code\"><pre>1000</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATA_UPLOAD_MAX_NUMBER_FILES</td>\n          <td class=\"code\"><pre>100</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATETIME_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;N j, Y, P&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATETIME_INPUT_FORMATS</td>\n          <td class=\"code\"><pre>[&#x27;%Y-%m-%d %H:%M:%S&#x27;,\n &#x27;%Y-%m-%d %H:%M:%S.%f&#x27;,\n &#x27;%Y-%m-%d %H:%M&#x27;,\n &#x27;%m/%d/%Y %H:%M:%S&#x27;,\n &#x27;%m/%d/%Y %H:%M:%S.%f&#x27;,\n &#x27;%m/%d/%Y %H:%M&#x27;,\n &#x27;%m/%d/%y %H:%M:%S&#x27;,\n &#x27;%m/%d/%y %H:%M:%S.%f&#x27;,\n &#x27;%m/%d/%y %H:%M&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATE_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;N j, Y&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATE_INPUT_FORMATS</td>\n          <td class=\"code\"><pre>[&#x27;%Y-%m-%d&#x27;,\n &#x27;%m/%d/%Y&#x27;,\n &#x27;%m/%d/%y&#x27;,\n &#x27;%b %d %Y&#x27;,\n &#x27;%b %d, %Y&#x27;,\n &#x27;%d %b %Y&#x27;,\n &#x27;%d %b, %Y&#x27;,\n &#x27;%B %d %Y&#x27;,\n &#x27;%B %d, %Y&#x27;,\n &#x27;%d %B %Y&#x27;,\n &#x27;%d %B, %Y&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEBUG</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEBUG_PROPAGATE_EXCEPTIONS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DECIMAL_SEPARATOR</td>\n          <td class=\"code\"><pre>&#x27;.&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_AUTO_FIELD</td>\n          <td class=\"code\"><pre>&#x27;django.db.models.BigAutoField&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_CHARSET</td>\n          <td class=\"code\"><pre>&#x27;utf-8&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_EXCEPTION_REPORTER</td>\n          <td class=\"code\"><pre>&#x27;django.views.debug.ExceptionReporter&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_EXCEPTION_REPORTER_FILTER</td>\n          <td class=\"code\"><pre>&#x27;django.views.debug.SafeExceptionReporterFilter&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_FILE_STORAGE</td>\n          <td class=\"code\"><pre>&#x27;django.core.files.storage.FileSystemStorage&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_FROM_EMAIL</td>\n          <td class=\"code\"><pre>&#x27;webmaster@localhost&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_INDEX_TABLESPACE</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_TABLESPACE</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DISALLOWED_USER_AGENTS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_BACKEND</td>\n          <td class=\"code\"><pre>&#x27;django.core.mail.backends.smtp.EmailBackend&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_HOST</td>\n          <td class=\"code\"><pre>&#x27;localhost&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_HOST_PASSWORD</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_HOST_USER</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_PORT</td>\n          <td class=\"code\"><pre>25</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_SSL_CERTFILE</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_SSL_KEYFILE</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_SUBJECT_PREFIX</td>\n          <td class=\"code\"><pre>&#x27;[Django] &#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_TIMEOUT</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_USE_LOCALTIME</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_USE_SSL</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_USE_TLS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_DIRECTORY_PERMISSIONS</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_HANDLERS</td>\n          <td class=\"code\"><pre>[&#x27;django.core.files.uploadhandler.MemoryFileUploadHandler&#x27;,\n &#x27;django.core.files.uploadhandler.TemporaryFileUploadHandler&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_MAX_MEMORY_SIZE</td>\n          <td class=\"code\"><pre>2621440</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_PERMISSIONS</td>\n          <td class=\"code\"><pre>420</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_TEMP_DIR</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FIRST_DAY_OF_WEEK</td>\n          <td class=\"code\"><pre>0</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FIXTURE_DIRS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FORCE_SCRIPT_NAME</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FORMAT_MODULE_PATH</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FORM_RENDERER</td>\n          <td class=\"code\"><pre>&#x27;django.forms.renderers.DjangoTemplates&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>IGNORABLE_404_URLS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>IMPORT_USER_DATA_MODE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>INSTALLED_APPS</td>\n          <td class=\"code\"><pre>[&#x27;django.contrib.admin&#x27;,\n &#x27;django.contrib.auth&#x27;,\n &#x27;django.contrib.contenttypes&#x27;,\n &#x27;django.contrib.sessions&#x27;,\n &#x27;django.contrib.messages&#x27;,\n &#x27;django.contrib.staticfiles&#x27;,\n &#x27;django_extensions&#x27;,\n &#x27;corsheaders&#x27;,\n &#x27;rest_framework&#x27;,\n &#x27;django_filters&#x27;,\n &#x27;monitoring&#x27;,\n &#x27;saving&#x27;,\n &#x27;payment&#x27;,\n &#x27;catalog&#x27;,\n &#x27;project&#x27;,\n &#x27;rule&#x27;,\n &#x27;activity&#x27;,\n &#x27;transaction&#x27;,\n &#x27;user&#x27;,\n &#x27;dashboard&#x27;,\n &#x27;metric&#x27;,\n &#x27;config&#x27;,\n &#x27;report&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>INTERNAL_IPS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGES</td>\n          <td class=\"code\"><pre>[(&#x27;af&#x27;, &#x27;Afrikaans&#x27;),\n (&#x27;ar&#x27;, &#x27;Arabic&#x27;),\n (&#x27;ar-dz&#x27;, &#x27;Algerian Arabic&#x27;),\n (&#x27;ast&#x27;, &#x27;Asturian&#x27;),\n (&#x27;az&#x27;, &#x27;Azerbaijani&#x27;),\n (&#x27;bg&#x27;, &#x27;Bulgarian&#x27;),\n (&#x27;be&#x27;, &#x27;Belarusian&#x27;),\n (&#x27;bn&#x27;, &#x27;Bengali&#x27;),\n (&#x27;br&#x27;, &#x27;Breton&#x27;),\n (&#x27;bs&#x27;, &#x27;Bosnian&#x27;),\n (&#x27;ca&#x27;, &#x27;Catalan&#x27;),\n (&#x27;cs&#x27;, &#x27;Czech&#x27;),\n (&#x27;cy&#x27;, &#x27;Welsh&#x27;),\n (&#x27;da&#x27;, &#x27;Danish&#x27;),\n (&#x27;de&#x27;, &#x27;German&#x27;),\n (&#x27;dsb&#x27;, &#x27;Lower Sorbian&#x27;),\n (&#x27;el&#x27;, &#x27;Greek&#x27;),\n (&#x27;en&#x27;, &#x27;English&#x27;),\n (&#x27;en-au&#x27;, &#x27;Australian English&#x27;),\n (&#x27;en-gb&#x27;, &#x27;British English&#x27;),\n (&#x27;eo&#x27;, &#x27;Esperanto&#x27;),\n (&#x27;es&#x27;, &#x27;Spanish&#x27;),\n (&#x27;es-ar&#x27;, &#x27;Argentinian Spanish&#x27;),\n (&#x27;es-co&#x27;, &#x27;Colombian Spanish&#x27;),\n (&#x27;es-mx&#x27;, &#x27;Mexican Spanish&#x27;),\n (&#x27;es-ni&#x27;, &#x27;Nicaraguan Spanish&#x27;),\n (&#x27;es-ve&#x27;, &#x27;Venezuelan Spanish&#x27;),\n (&#x27;et&#x27;, &#x27;Estonian&#x27;),\n (&#x27;eu&#x27;, &#x27;Basque&#x27;),\n (&#x27;fa&#x27;, &#x27;Persian&#x27;),\n (&#x27;fi&#x27;, &#x27;Finnish&#x27;),\n (&#x27;fr&#x27;, &#x27;French&#x27;),\n (&#x27;fy&#x27;, &#x27;Frisian&#x27;),\n (&#x27;ga&#x27;, &#x27;Irish&#x27;),\n (&#x27;gd&#x27;, &#x27;Scottish Gaelic&#x27;),\n (&#x27;gl&#x27;, &#x27;Galician&#x27;),\n (&#x27;he&#x27;, &#x27;Hebrew&#x27;),\n (&#x27;hi&#x27;, &#x27;Hindi&#x27;),\n (&#x27;hr&#x27;, &#x27;Croatian&#x27;),\n (&#x27;hsb&#x27;, &#x27;Upper Sorbian&#x27;),\n (&#x27;hu&#x27;, &#x27;Hungarian&#x27;),\n (&#x27;hy&#x27;, &#x27;Armenian&#x27;),\n (&#x27;ia&#x27;, &#x27;Interlingua&#x27;),\n (&#x27;id&#x27;, &#x27;Indonesian&#x27;),\n (&#x27;ig&#x27;, &#x27;Igbo&#x27;),\n (&#x27;io&#x27;, &#x27;Ido&#x27;),\n (&#x27;is&#x27;, &#x27;Icelandic&#x27;),\n (&#x27;it&#x27;, &#x27;Italian&#x27;),\n (&#x27;ja&#x27;, &#x27;Japanese&#x27;),\n (&#x27;ka&#x27;, &#x27;Georgian&#x27;),\n (&#x27;kab&#x27;, &#x27;Kabyle&#x27;),\n (&#x27;kk&#x27;, &#x27;Kazakh&#x27;),\n (&#x27;km&#x27;, &#x27;Khmer&#x27;),\n (&#x27;kn&#x27;, &#x27;Kannada&#x27;),\n (&#x27;ko&#x27;, &#x27;Korean&#x27;),\n (&#x27;ky&#x27;, &#x27;Kyrgyz&#x27;),\n (&#x27;lb&#x27;, &#x27;Luxembourgish&#x27;),\n (&#x27;lt&#x27;, &#x27;Lithuanian&#x27;),\n (&#x27;lv&#x27;, &#x27;Latvian&#x27;),\n (&#x27;mk&#x27;, &#x27;Macedonian&#x27;),\n (&#x27;ml&#x27;, &#x27;Malayalam&#x27;),\n (&#x27;mn&#x27;, &#x27;Mongolian&#x27;),\n (&#x27;mr&#x27;, &#x27;Marathi&#x27;),\n (&#x27;ms&#x27;, &#x27;Malay&#x27;),\n (&#x27;my&#x27;, &#x27;Burmese&#x27;),\n (&#x27;nb&#x27;, &#x27;Norwegian Bokmål&#x27;),\n (&#x27;ne&#x27;, &#x27;Nepali&#x27;),\n (&#x27;nl&#x27;, &#x27;Dutch&#x27;),\n (&#x27;nn&#x27;, &#x27;Norwegian Nynorsk&#x27;),\n (&#x27;os&#x27;, &#x27;Ossetic&#x27;),\n (&#x27;pa&#x27;, &#x27;Punjabi&#x27;),\n (&#x27;pl&#x27;, &#x27;Polish&#x27;),\n (&#x27;pt&#x27;, &#x27;Portuguese&#x27;),\n (&#x27;pt-br&#x27;, &#x27;Brazilian Portuguese&#x27;),\n (&#x27;ro&#x27;, &#x27;Romanian&#x27;),\n (&#x27;ru&#x27;, &#x27;Russian&#x27;),\n (&#x27;sk&#x27;, &#x27;Slovak&#x27;),\n (&#x27;sl&#x27;, &#x27;Slovenian&#x27;),\n (&#x27;sq&#x27;, &#x27;Albanian&#x27;),\n (&#x27;sr&#x27;, &#x27;Serbian&#x27;),\n (&#x27;sr-latn&#x27;, &#x27;Serbian Latin&#x27;),\n (&#x27;sv&#x27;, &#x27;Swedish&#x27;),\n (&#x27;sw&#x27;, &#x27;Swahili&#x27;),\n (&#x27;ta&#x27;, &#x27;Tamil&#x27;),\n (&#x27;te&#x27;, &#x27;Telugu&#x27;),\n (&#x27;tg&#x27;, &#x27;Tajik&#x27;),\n (&#x27;th&#x27;, &#x27;Thai&#x27;),\n (&#x27;tk&#x27;, &#x27;Turkmen&#x27;),\n (&#x27;tr&#x27;, &#x27;Turkish&#x27;),\n (&#x27;tt&#x27;, &#x27;Tatar&#x27;),\n (&#x27;udm&#x27;, &#x27;Udmurt&#x27;),\n (&#x27;uk&#x27;, &#x27;Ukrainian&#x27;),\n (&#x27;ur&#x27;, &#x27;Urdu&#x27;),\n (&#x27;uz&#x27;, &#x27;Uzbek&#x27;),\n (&#x27;vi&#x27;, &#x27;Vietnamese&#x27;),\n (&#x27;zh-hans&#x27;, &#x27;Simplified Chinese&#x27;),\n (&#x27;zh-hant&#x27;, &#x27;Traditional Chinese&#x27;)]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGES_BIDI</td>\n          <td class=\"code\"><pre>[&#x27;he&#x27;, &#x27;ar&#x27;, &#x27;ar-dz&#x27;, &#x27;fa&#x27;, &#x27;ur&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_CODE</td>\n          <td class=\"code\"><pre>&#x27;en-us&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_AGE</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_DOMAIN</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_HTTPONLY</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_NAME</td>\n          <td class=\"code\"><pre>&#x27;django_language&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_PATH</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_SAMESITE</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_SECURE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOCALE_PATHS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGGING</td>\n          <td class=\"code\"><pre>{&#x27;disable_existing_loggers&#x27;: False,\n &#x27;filters&#x27;: {&#x27;require_debug_true&#x27;: {&#x27;()&#x27;: &#x27;django.utils.log.RequireDebugTrue&#x27;}},\n &#x27;formatters&#x27;: {&#x27;django.server&#x27;: {&#x27;()&#x27;: &#x27;django.utils.log.ServerFormatter&#x27;,\n                                  &#x27;format&#x27;: &#x27;[%(server_time)s] %(message)s&#x27;},\n                &#x27;simple&#x27;: {&#x27;format&#x27;: &#x27;%(levelname)s %(message)s&#x27;},\n                &#x27;verbose&#x27;: {&#x27;format&#x27;: &#x27;%(levelname)s %(asctime)s &#x27;\n                                      &#x27;%(pathname)s-&gt;%(module)s:%(lineno)s &#x27;\n                                      &#x27;%(process)d %(thread)d %(message)s&#x27;}},\n &#x27;handlers&#x27;: {&#x27;console&#x27;: {&#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,\n                          &#x27;formatter&#x27;: &#x27;simple&#x27;,\n                          &#x27;level&#x27;: &#x27;DEBUG&#x27;},\n              &#x27;django.server&#x27;: {&#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,\n                                &#x27;formatter&#x27;: &#x27;django.server&#x27;,\n                                &#x27;level&#x27;: &#x27;INFO&#x27;},\n              &#x27;message&#x27;: {&#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,\n                          &#x27;formatter&#x27;: &#x27;verbose&#x27;,\n                          &#x27;level&#x27;: &#x27;DEBUG&#x27;}},\n &#x27;loggers&#x27;: {&#x27;django&#x27;: {&#x27;handlers&#x27;: [&#x27;console&#x27;], &#x27;propagate&#x27;: True},\n             &#x27;django.db.backends&#x27;: {&#x27;handlers&#x27;: [&#x27;console&#x27;], &#x27;level&#x27;: &#x27;INFO&#x27;},\n             &#x27;django.message.log&#x27;: {&#x27;handlers&#x27;: [&#x27;message&#x27;],\n                                    &#x27;level&#x27;: &#x27;INFO&#x27;,\n                                    &#x27;propagate&#x27;: False},\n             &#x27;django.request&#x27;: {&#x27;handlers&#x27;: [&#x27;console&#x27;],\n                                &#x27;level&#x27;: &#x27;ERROR&#x27;,\n                                &#x27;propagate&#x27;: False},\n             &#x27;django.server&#x27;: {&#x27;handlers&#x27;: [&#x27;django.server&#x27;],\n                               &#x27;level&#x27;: &#x27;INFO&#x27;,\n                               &#x27;propagate&#x27;: False}},\n &#x27;version&#x27;: 1}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGGING_CONFIG</td>\n          <td class=\"code\"><pre>&#x27;logging.config.dictConfig&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGIN_REDIRECT_URL</td>\n          <td class=\"code\"><pre>&#x27;/accounts/profile/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGIN_URL</td>\n          <td class=\"code\"><pre>&#x27;/accounts/login/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGOUT_REDIRECT_URL</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MANAGERS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MEDIA_ROOT</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MEDIA_URL</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MESSAGE_STORAGE</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.messages.storage.fallback.FallbackStorage&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MIDDLEWARE</td>\n          <td class=\"code\"><pre>[&#x27;django.middleware.security.SecurityMiddleware&#x27;,\n &#x27;django.contrib.sessions.middleware.SessionMiddleware&#x27;,\n &#x27;django.middleware.common.CommonMiddleware&#x27;,\n &#x27;django.middleware.csrf.CsrfViewMiddleware&#x27;,\n &#x27;django.contrib.auth.middleware.AuthenticationMiddleware&#x27;,\n &#x27;django.contrib.messages.middleware.MessageMiddleware&#x27;,\n &#x27;django.middleware.clickjacking.XFrameOptionsMiddleware&#x27;,\n &#x27;corsheaders.middleware.CorsMiddleware&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MIGRATION_MODULES</td>\n          <td class=\"code\"><pre>{}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MONTH_DAY_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;F j&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>NUMBER_GROUPING</td>\n          <td class=\"code\"><pre>0</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PASSWORD_HASHERS</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PASSWORD_RESET_TIMEOUT</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PREPEND_WWW</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>ROOT_URLCONF</td>\n          <td class=\"code\"><pre>&#x27;api_saving.urls&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECRET_KEY</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECRET_KEY_FALLBACKS</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_CONTENT_TYPE_NOSNIFF</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_CROSS_ORIGIN_OPENER_POLICY</td>\n          <td class=\"code\"><pre>&#x27;same-origin&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_HSTS_INCLUDE_SUBDOMAINS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_HSTS_PRELOAD</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_HSTS_SECONDS</td>\n          <td class=\"code\"><pre>0</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_PROXY_SSL_HEADER</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_REDIRECT_EXEMPT</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_REFERRER_POLICY</td>\n          <td class=\"code\"><pre>&#x27;same-origin&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_SSL_HOST</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_SSL_REDIRECT</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_EMAIL</td>\n          <td class=\"code\"><pre>&#x27;root@localhost&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_CACHE_ALIAS</td>\n          <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_AGE</td>\n          <td class=\"code\"><pre>1209600</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_DOMAIN</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_HTTPONLY</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_NAME</td>\n          <td class=\"code\"><pre>&#x27;sessionid&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_PATH</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_SAMESITE</td>\n          <td class=\"code\"><pre>&#x27;Lax&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_SECURE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_ENGINE</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.sessions.backends.db&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_EXPIRE_AT_BROWSER_CLOSE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_FILE_PATH</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_SAVE_EVERY_REQUEST</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_SERIALIZER</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.sessions.serializers.JSONSerializer&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SETTINGS_MODULE</td>\n          <td class=\"code\"><pre>&#x27;api_saving.settings&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SHORT_DATETIME_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;m/d/Y P&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SHORT_DATE_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;m/d/Y&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SIGNING_BACKEND</td>\n          <td class=\"code\"><pre>&#x27;django.core.signing.TimestampSigner&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SILENCED_SYSTEM_CHECKS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATICFILES_DIRS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATICFILES_FINDERS</td>\n          <td class=\"code\"><pre>[&#x27;django.contrib.staticfiles.finders.FileSystemFinder&#x27;,\n &#x27;django.contrib.staticfiles.finders.AppDirectoriesFinder&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATICFILES_STORAGE</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.staticfiles.storage.StaticFilesStorage&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATIC_ROOT</td>\n          <td class=\"code\"><pre>&#x27;./static/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATIC_URL</td>\n          <td class=\"code\"><pre>&#x27;/static/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TEMPLATES</td>\n          <td class=\"code\"><pre>[{&#x27;APP_DIRS&#x27;: True,\n  &#x27;BACKEND&#x27;: &#x27;django.template.backends.django.DjangoTemplates&#x27;,\n  &#x27;DIRS&#x27;: [&#x27;/code/src/templates&#x27;],\n  &#x27;OPTIONS&#x27;: {&#x27;context_processors&#x27;: [&#x27;django.template.context_processors.debug&#x27;,\n                                     &#x27;django.template.context_processors.request&#x27;,\n                                     &#x27;django.contrib.auth.context_processors.auth&#x27;,\n                                     &#x27;django.contrib.messages.context_processors.messages&#x27;]}}]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TEST_NON_SERIALIZED_APPS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TEST_RUNNER</td>\n          <td class=\"code\"><pre>&#x27;django.test.runner.DiscoverRunner&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>THOUSAND_SEPARATOR</td>\n          <td class=\"code\"><pre>&#x27;,&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TIME_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;P&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TIME_INPUT_FORMATS</td>\n          <td class=\"code\"><pre>[&#x27;%H:%M:%S&#x27;, &#x27;%H:%M:%S.%f&#x27;, &#x27;%H:%M&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TIME_ZONE</td>\n          <td class=\"code\"><pre>&#x27;America/Mexico_City&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_DEPRECATED_PYTZ</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_I18N</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_L10N</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_THOUSAND_SEPARATOR</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_TZ</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_X_FORWARDED_HOST</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_X_FORWARDED_PORT</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>WSGI_APPLICATION</td>\n          <td class=\"code\"><pre>&#x27;api_saving.wsgi.application&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>X_FRAME_OPTIONS</td>\n          <td class=\"code\"><pre>&#x27;DENY&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>YEAR_MONTH_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;F Y&#x27;</pre></td>\n        </tr>\n      \n    </tbody>\n  </table>\n\n</div>\n\n  <div id=\"explanation\">\n    <p>\n      You’re seeing this error because you have <code>DEBUG = True</code> in your\n      Django settings file. Change that to <code>False</code>, and Django will\n      display a standard page generated by the handler for this status code.\n    </p>\n  </div>\n\n</body>\n</html>\n"}],"_postman_id":"7d62465b-4d32-477c-840a-8f6d6c3035bb"},{"name":"Crear meta con saldo previo","event":[{"listen":"test","script":{"id":"5d0d4b70-267f-4b9b-9481-7562952d0557","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulPost();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const projectProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    project_name: 'string',\r","    total: 'string',\r","    progress: 'string',\r","    processing: 'string',\r","    pending: 'string',\r","    from_account: ['string', 'null'],\r","    to_account: ['string', 'null'],\r","    goal_date: 'string',\r","    created_at: 'string',\r","    updated_at: 'string',\r","    deleted_at: ['string', 'null'],\r","    project_category: 'string',\r","    project_status: 'string'\r","};\r","\r","// Check project properties\r","pm.test(\"Project has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, projectProperties);\r","});\r","// Test to check if the goal date is in the future\r","pm.test(\"Goal date is in the future\", function () {\r","    const responseJson = pm.response.json();\r","    const goalDate = new Date(responseJson.goal_date);\r","    const currentDate = new Date();\r","\r","    pm.expect(goalDate.getTime()).to.be.greaterThan(currentDate.getTime());\r","});\r","var template = `\r","<style type=\"text/css\">\r","    .tftable {font-size:14px;color:#333333;width:100%;border-width: 1px;border-color: #87ceeb;border-collapse: collapse;}\r","    .tftable th {font-size:18px;background-color:#87ceeb;border-width: 1px;padding: 8px;border-style: solid;border-color: #87ceeb;text-align:left;}\r","    .tftable tr {background-color:#ffffff;}\r","    .tftable td {font-size:14px;border-width: 1px;padding: 8px;border-style: solid;border-color: #87ceeb;}\r","    .tftable tr:hover {background-color:#e0ffff;}\r","</style>\r","\r","<table class=\"tftable\" border=\"1\">\r","    <tr>\r","        <th>ID</th>\r","        <th>User ID</th>\r","        <th>Project Name</th>\r","        <th>Total</th>\r","        <th>Progress</th>\r","        <th>Processing</th>\r","        <th>Pending</th>\r","        <th>From Account</th>\r","        <th>To Account</th>\r","        <th>Goal Date</th>\r","        <th>Created At</th>\r","        <th>Updated At</th>\r","        <th>Deleted At</th>\r","        <th>Project Category</th>\r","        <th>Project Status</th>\r","    </tr>\r","    \r","    {{#each response}}\r","        <tr>\r","            <td>{{id}}</td>\r","            <td>{{user_id}}</td>\r","            <td>{{project_name}}</td>\r","            <td>{{total}}</td>\r","            <td>{{progress}}</td>\r","            <td>{{processing}}</td>\r","            <td>{{pending}}</td>\r","            <td>{{from_account}}</td>\r","            <td>{{to_account}}</td>\r","            <td>{{goal_date}}</td>\r","            <td>{{created_at}}</td>\r","            <td>{{updated_at}}</td>\r","            <td>{{deleted_at}}</td>\r","            <td>{{project_category}}</td>\r","            <td>{{project_status}}</td>\r","        </tr>\r","    {{/each}}\r","</table>\r","`;\r","\r","function constructVisualizerPayload() {\r","    return {response: pm.response.json()}\r","}\r","\r","pm.visualizer.set(template, constructVisualizerPayload());"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"f7208c0e-29d9-442d-be01-ce2e172643bf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"Viaje a japon\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"\",\r\n    \"to_account\": \"\", \r\n    \"total\": 20000,\r\n    \"progress\": 1500 //saldo previo en la cuenta destino (opcional)\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/","description":"<p>Este endpoint permite al usuario crear una nueva meta de ahorro (proyecto) para un usuario específico.</p>\n<img src=\"https://content.pstmn.io/158f3791-52af-4b86-b6b1-4b741f1e0fdb/Q3JlYXIucG5n\" width=\"100\" height=\"110\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Metodo: POST</p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>user_id</code> (string): ID del usuario asociado al proyecto.</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body\">Request body</h4>\n<ul>\n<li><p><code>project_name</code> (string): Nombre del proyecto. No puede ser vacío.</p>\n</li>\n<li><p><code>project_category_id</code> (string) (Opcional): ID de la categoría del proyecto.</p>\n</li>\n<li><p><code>goal_date</code> (string): Fecha objetivo para completar el proyecto. Esta fecha debe ser posterior al día en que se realiza la solicitud.</p>\n</li>\n<li><p><code>from_account</code> (string) (Opcional): Cuenta de origen de los fondos del proyecto.</p>\n</li>\n<li><p><code>to_account</code> (string) (Opcional): Cuenta destino para los fondos del proyecto.</p>\n</li>\n<li><p><code>total</code> (number): Monto total asignado al proyecto, este debe ser un número mayor o igual a cero.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body-example\">Request Body Example</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"project_name\": \"Viaje a japon\",\n    \"project_category_id\": \"xxx-xxx-xxx-xxx-xxx\",\n    \"goal_date\": \"2030-10-30\",\n    \"from_account\": \"account_1\",\n    \"to_account\": \"account_2\",\n    \"total\": 20000\n}\n\n</code></pre>\n<hr />\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p><code>id</code> (string): ID del proyecto.</p>\n</li>\n<li><p><code>goal_date</code> (string): Fecha objetivo del proyecto.</p>\n</li>\n<li><p><code>total</code> (string): Monto total asociado al proyecto.</p>\n</li>\n<li><p><code>project_name</code> (string): Nombre del proyecto.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario propietario del proyecto.</p>\n</li>\n<li><p><code>progress</code> (number): Monto ya ahorrado o progresado en el proyecto.</p>\n</li>\n<li><p><code>processing</code> (number): Monto actualmente en proceso de ahorro.</p>\n</li>\n<li><p><code>pending</code> (number): Monto pendiente por ahorrar.</p>\n</li>\n<li><p><code>from_account</code> (string): Cuenta de origen de los fondos.</p>\n</li>\n<li><p><code>to_account</code> (string): Cuenta destino del ahorro.</p>\n</li>\n<li><p><code>investment_returns</code>(number): Importe ganado por las inversiones.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha de creación del proyecto.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de última actualización.</p>\n</li>\n<li><p><code>deleted_at</code> (null or string): Fecha de eliminación, si aplica.</p>\n</li>\n<li><p><code>proyect_category</code> (string): ID de la categoría del proyecto.</p>\n</li>\n<li><p><code>proyect_status</code> (string): ID del status del proyecto.</p>\n</li>\n<li><p><code>proyect_config</code> (string): ID de la configuración del proyecto.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\"type\": \"string\"},\n    \"user_id\": {\"type\": \"string\"},\n    \"project_name\": {\"type\": \"string\"},\n    \"total\": {\"type\": \"string\"},\n    \"progress\": {\"type\": \"string\"},\n    \"processing\": {\"type\": \"string\"},\n    \"pending\": {\"type\": \"string\"},\n    \"from_account\": {\"type\": \"string\"},\n    \"to_account\": {\"type\": \"string\"},\n    \"goal_date\": {\"type\": \"string\"},\n    \"created_at\": {\"type\": \"string\"},\n    \"updated_at\": {\"type\": \"string\"},\n    \"deleted_at\": {\"type\": [\"string\", \"null\"]},\n    \"project_category\": {\"type\": \"string\"},\n    \"project_status\": {\"type\": \"string\"}\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"68765cf5-6364-4bbb-b11b-e6dd5200560d","name":"Successful Response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"Viaje a japon\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"test_user_api_2_account_1\",\r\n    \"to_account\": \"test_user_api_2_account_2\",\r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 16:24:51 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"620"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"451285ba-56fc-4e72-813d-e255ca604bc4"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LVqNBGd1oAMEW3w="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68388a52-3a3e78557d86b7d30030f32a;Parent=5b654f158cd80543;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n    \"goal_date\": \"2030-10-30\",\n    \"total\": \"20000.00\",\n    \"project_name\": \"Viaje a japon\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"progress\": \"0.00\",\n    \"processing\": \"0.00\",\n    \"pending\": \"0.00\",\n    \"from_account\": \"test_user_api_2_account_1\",\n    \"to_account\": \"test_user_api_2_account_2\",\n    \"investment_returns\": \"0.00\",\n    \"created_at\": \"2025-05-29T10:24:51.224698-06:00\",\n    \"updated_at\": \"2025-05-29T10:24:51.224717-06:00\",\n    \"deleted_at\": null,\n    \"project_category\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n    \"project_status\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n    \"project_config\": \"deead368-205e-464b-9d8c-82cb93517eef\"\n}"},{"id":"c2fd5298-ae16-41bb-a1a8-b86bc30d0433","name":"Bad Request - Invalid project name","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"test_user_api_2_account_1\",\r\n    \"to_account\": \"test_user_api_2_account_2\",\r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 16:30:43 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"49"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"27541f12-21d9-4a98-b6e9-5d64cdc1cc7c"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LVrEAH68IAMEI7g="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68388bb2-1e55b06062eb77015f7a857a;Parent=00b0e929fb97db61;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"project_name\": [\n        \"This field may not be blank.\"\n    ]\n}"},{"id":"e14c69dd-cc3c-4661-896c-f12604b30d02","name":"Bad Request - Invalid category ID","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"Viaje a japon\",\r\n    \"project_category_id\": \"invalid-uuid\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"test_user_api_2_account_1\",\r\n    \"to_account\": \"test_user_api_2_account_2\",\r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 16:31:37 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"64"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"13d96e29-ae52-4b56-80fc-4ae8677925ce"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LVrMfGUbIAMEB7A="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68388be9-46e413850a39a0e47d372810;Parent=1b2febba60ba9bea;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"project_category\": [\n        \"“invalid-uuid” is not a valid UUID.\"\n    ]\n}"},{"id":"3a47188e-a133-4f5a-895e-c7322b9ccf95","name":"Bad Request - Invalid goal date","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"Viaje a japon\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2000-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"test_user_api_2_account_1\",\r\n    \"to_account\": \"test_user_api_2_account_2\",\r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 16:32:23 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"16"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"5c3b32ea-75e4-49e2-bc56-e58b295e3ed6"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LVrTuHsToAMEOhA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68388c17-6b0de13c6def201178b221c5;Parent=26b905370d48a9c2;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"\"Invalid fields\""},{"id":"280a06bf-5298-40fb-a9a8-6fd136a8e69a","name":"Bad Request - Invalid total","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"Viaje a japon\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"test_user_api_2_account_1\",\r\n    \"to_account\": \"test_user_api_2_account_2\",\r\n    \"total\": -9999\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 16:33:45 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"16"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"b1f98f61-629b-4041-a80a-0905eac7376e"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LVrgiGYYoAMET8A="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68388c69-00782e34062f1abb4a9cff5f;Parent=3ebce20108d060e0;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"\"Invalid fields\""},{"id":"69b86d52-ea9f-4973-9d15-22353be7c6fd","name":"Bad Request - Empty body fields","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 16:37:49 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"57"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"07221adf-a3ae-45cc-8bfe-67b71cb3d6b5"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LVsGkENDoAMEDzQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68388d5c-05e1a2911b86237806e99a8e;Parent=0b17891d71fbf464;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"\"Missing required fields: project_name, goal_date, total\""},{"id":"46abae45-4376-4320-a408-8791218deff3","name":"Bad Request - Invalid project name","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"test_user_api_2_account_1\",\r\n    \"to_account\": \"test_user_api_2_account_2\",\r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 18:29:43 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"49"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"5f7542dc-dcf5-42d2-bdd0-600e53c26714"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LV8fwHOUIAMEFpg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838a797-59fde1882e5c8e5e4730ce3c;Parent=09a4445cc4f306f0;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"project_name\": [\n        \"This field may not be blank.\"\n    ]\n}"},{"id":"e1fb96ad-fff7-41b9-b8e5-0d584aaacfaf","name":"Crear proyecto","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"Viaje a japon\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"\",\r\n    \"to_account\": \"\", \r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Internal Server Error","code":500,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 27 Jun 2025 19:08:26 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"181052"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"35477876-b4ca-4e01-be3b-628cc5864e3f"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"M1nWfHuqIAMEaiw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-685eec29-581096721dee9c7a5b9962ea;Parent=7f24724090a9ce73;Sampled=0;Lineage=1:d25c5fda:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n  <meta name=\"robots\" content=\"NONE,NOARCHIVE\">\n  <title>ProgrammingError\n          at /api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/</title>\n  <style type=\"text/css\">\n    html * { padding:0; margin:0; }\n    body * { padding:10px 20px; }\n    body * * { padding:0; }\n    body { font:small sans-serif; background-color:#fff; color:#000; }\n    body>div { border-bottom:1px solid #ddd; }\n    h1 { font-weight:normal; }\n    h2 { margin-bottom:.8em; }\n    h3 { margin:1em 0 .5em 0; }\n    h4 { margin:0 0 .5em 0; font-weight: normal; }\n    code, pre { font-size: 100%; white-space: pre-wrap; word-break: break-word; }\n    summary { cursor: pointer; }\n    table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }\n    tbody td, tbody th { vertical-align:top; padding:2px 3px; }\n    thead th {\n      padding:1px 6px 1px 3px; background:#fefefe; text-align:left;\n      font-weight:normal; font-size:11px; border:1px solid #ddd;\n    }\n    tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }\n    table.vars { margin:5px 10px 2px 40px; width: auto; }\n    table.vars td, table.req td { font-family:monospace; }\n    table td.code { width:100%; }\n    table td.code pre { overflow:hidden; }\n    table.source th { color:#666; }\n    table.source td { font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }\n    ul.traceback { list-style-type:none; color: #222; }\n    ul.traceback li.cause { word-break: break-word; }\n    ul.traceback li.frame { padding-bottom:1em; color:#4f4f4f; }\n    ul.traceback li.user { background-color:#e0e0e0; color:#000 }\n    div.context { padding:10px 0; overflow:hidden; }\n    div.context ol { padding-left:30px; margin:0 10px; list-style-position: inside; }\n    div.context ol li { font-family:monospace; white-space:pre; color:#777; cursor:pointer; padding-left: 2px; }\n    div.context ol li pre { display:inline; }\n    div.context ol.context-line li { color:#464646; background-color:#dfdfdf; padding: 3px 2px; }\n    div.context ol.context-line li span { position:absolute; right:32px; }\n    .user div.context ol.context-line li { background-color:#bbb; color:#000; }\n    .user div.context ol li { color:#666; }\n    div.commands, summary.commands { margin-left: 40px; }\n    div.commands a, summary.commands { color:#555; text-decoration:none; }\n    .user div.commands a { color: black; }\n    #summary { background: #ffc; }\n    #summary h2 { font-weight: normal; color: #666; }\n    #explanation { background:#eee; }\n    #template, #template-not-exist { background:#f6f6f6; }\n    #template-not-exist ul { margin: 0 0 10px 20px; }\n    #template-not-exist .postmortem-section { margin-bottom: 3px; }\n    #unicode-hint { background:#eee; }\n    #traceback { background:#eee; }\n    #requestinfo { background:#f6f6f6; padding-left:120px; }\n    #summary table { border:none; background:transparent; }\n    #requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }\n    #requestinfo h3 { margin-bottom:-1em; }\n    .error { background: #ffc; }\n    .specific { color:#cc3300; font-weight:bold; }\n    h2 span.commands { font-size:.7em; font-weight:normal; }\n    span.commands a:link {color:#5E5694;}\n    pre.exception_value { font-family: sans-serif; color: #575757; font-size: 1.5em; margin: 10px 0 10px 0; }\n    .append-bottom { margin-bottom: 10px; }\n    .fname { user-select: all; }\n  </style>\n  \n  <script>\n    function hideAll(elems) {\n      for (var e = 0; e < elems.length; e++) {\n        elems[e].style.display = 'none';\n      }\n    }\n    window.onload = function() {\n      hideAll(document.querySelectorAll('ol.pre-context'));\n      hideAll(document.querySelectorAll('ol.post-context'));\n      hideAll(document.querySelectorAll('div.pastebin'));\n    }\n    function toggle() {\n      for (var i = 0; i < arguments.length; i++) {\n        var e = document.getElementById(arguments[i]);\n        if (e) {\n          e.style.display = e.style.display == 'none' ? 'block': 'none';\n        }\n      }\n      return false;\n    }\n    function switchPastebinFriendly(link) {\n      s1 = \"Switch to copy-and-paste view\";\n      s2 = \"Switch back to interactive view\";\n      link.textContent = link.textContent.trim() == s1 ? s2: s1;\n      toggle('browserTraceback', 'pastebinTraceback');\n      return false;\n    }\n  </script>\n  \n</head>\n<body>\n<div id=\"summary\">\n  <h1>ProgrammingError\n       at /api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/</h1>\n  <pre class=\"exception_value\">permission denied for table projects_metrics\n</pre>\n  <table class=\"meta\">\n\n    <tr>\n      <th>Request Method:</th>\n      <td>POST</td>\n    </tr>\n    <tr>\n      <th>Request URL:</th>\n      <td>http://ftv7r7kk66.execute-api.us-east-1.amazonaws.com/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/</td>\n    </tr>\n\n    <tr>\n      <th>Django Version:</th>\n      <td>4.1.10</td>\n    </tr>\n\n    <tr>\n      <th>Exception Type:</th>\n      <td>ProgrammingError</td>\n    </tr>\n\n\n    <tr>\n      <th>Exception Value:</th>\n      <td><pre>permission denied for table projects_metrics\n</pre></td>\n    </tr>\n\n\n    <tr>\n      <th>Exception Location:</th>\n      <td><span class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</span>, line 89, in _execute</td>\n    </tr>\n\n\n    <tr>\n      <th>Raised during:</th>\n      <td>project.views.views.ProjectView</td>\n    </tr>\n\n    <tr>\n      <th>Python Executable:</th>\n      <td>/usr/local/bin/python</td>\n    </tr>\n    <tr>\n      <th>Python Version:</th>\n      <td>3.11.3</td>\n    </tr>\n    <tr>\n      <th>Python Path:</th>\n      <td><pre>[&#x27;/code/src&#x27;,\n &#x27;/code&#x27;,\n &#x27;/usr/local/bin&#x27;,\n &#x27;/usr/local/lib/python311.zip&#x27;,\n &#x27;/usr/local/lib/python3.11&#x27;,\n &#x27;/usr/local/lib/python3.11/lib-dynload&#x27;,\n &#x27;/usr/local/lib/python3.11/site-packages&#x27;]</pre></td>\n    </tr>\n    <tr>\n      <th>Server time:</th>\n      <td>Fri, 27 Jun 2025 13:08:25 -0600</td>\n    </tr>\n  </table>\n</div>\n\n\n\n\n<div id=\"traceback\">\n  <h2>Traceback <span class=\"commands\"><a href=\"#\" onclick=\"return switchPastebinFriendly(this);\">\n    Switch to copy-and-paste view</a></span>\n  </h2>\n  <div id=\"browserTraceback\">\n    <ul class=\"traceback\">\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 89, in _execute\n          \n\n          \n            <div class=\"context\" id=\"c140390588266496\">\n              \n                <ol start=\"82\" class=\"pre-context\" id=\"pre140390588266496\">\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>            if params is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>                # params default might be backend specific.</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>                return self.cursor.execute(sql)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>            else:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"89\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>                return self.cursor.execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='90' class=\"post-context\" id=\"post140390588266496\">\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>    def _executemany(self, sql, param_list, *ignored_wrapper_args):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>            return self.cursor.executemany(sql, param_list)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588266496\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>ignored_wrapper_args</td>\n                    <td class=\"code\"><pre>(False,\n {&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n  &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;})</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;485bb147-77c1-4e6c-9118-28cd363f45a6&#x27;),\n UUID(&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;),\n UUID(&#x27;6f3e32b4-2c0a-42da-babe-089467bec030&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 19, 8, 25, 885458, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n          <li class=\"cause\"><h3>\n          \n            The above exception (permission denied for table projects_metrics\n) was the direct cause of the following exception:\n          \n        </h3></li>\n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py</code>, line 56, in inner\n          \n\n          \n            <div class=\"context\" id=\"c140390588271104\">\n              \n                <ol start=\"49\" class=\"pre-context\" id=\"pre140390588271104\">\n                \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>        return inner</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>    else:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>        @wraps(get_response)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>        def inner(request):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>            try:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"56\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>                response = get_response(request)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='57' class=\"post-context\" id=\"post140390588271104\">\n                  \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>            except Exception as exc:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>                response = response_for_exception(request, exc)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>            return response</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre>        return inner</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271104', 'post140390588271104')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588271104\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>exc</td>\n                    <td class=\"code\"><pre>ProgrammingError(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>get_response</td>\n                    <td class=\"code\"><pre>&lt;bound method BaseHandler._get_response of &lt;django.core.handlers.wsgi.WSGIHandler object at 0x7faf3c218a50&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;WSGIRequest: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py</code>, line 197, in _get_response\n          \n\n          \n            <div class=\"context\" id=\"c140390588006016\">\n              \n                <ol start=\"190\" class=\"pre-context\" id=\"pre140390588006016\">\n                \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>        if response is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>            wrapped_callback = self.make_view_atomic(callback)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>            # If it is an asynchronous view, run it in a subthread.</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>            if asyncio.iscoroutinefunction(wrapped_callback):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>                wrapped_callback = async_to_sync(wrapped_callback)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>            try:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"197\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>                response = wrapped_callback(request, *callback_args, **callback_kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='198' class=\"post-context\" id=\"post140390588006016\">\n                  \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>            except Exception as e:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>                response = self.process_exception_by_middleware(e, request)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>                if response is None:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>                    raise</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588006016', 'post140390588006016')\"><pre>        # Complain if the view returned None (a common error).</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588006016\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>callback</td>\n                    <td class=\"code\"><pre>&lt;function View.as_view.&lt;locals&gt;.view at 0x7faf3bac7740&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>callback_args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>callback_kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>middleware_method</td>\n                    <td class=\"code\"><pre>&lt;bound method CorsMiddleware.process_view of &lt;CorsMiddleware get_response=BaseHandler._get_response&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;WSGIRequest: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>response</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.core.handlers.wsgi.WSGIHandler object at 0x7faf3c218a50&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>wrapped_callback</td>\n                    <td class=\"code\"><pre>&lt;function View.as_view.&lt;locals&gt;.view at 0x7faf3bac7740&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/views/decorators/csrf.py</code>, line 55, in wrapped_view\n          \n\n          \n            <div class=\"context\" id=\"c140390588231936\">\n              \n                <ol start=\"48\" class=\"pre-context\" id=\"pre140390588231936\">\n                \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre>def csrf_exempt(view_func):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre>    &quot;&quot;&quot;Mark a view function as being exempt from the CSRF view protection.&quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre>    # view_func.csrf_exempt = True would also work, but decorators are nicer</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre>    # if they don&#x27;t have side effects, so return a new function.</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre>    def wrapped_view(*args, **kwargs):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"55\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre>        return view_func(*args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='56' class=\"post-context\" id=\"post140390588231936\">\n                  \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre>    wrapped_view.csrf_exempt = True</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588231936', 'post140390588231936')\"><pre>    return wraps(view_func)(wrapped_view)</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588231936\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>(&lt;WSGIRequest: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;,)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>view_func</td>\n                    <td class=\"code\"><pre>&lt;function View.as_view.&lt;locals&gt;.view at 0x7faf3be05440&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/views/generic/base.py</code>, line 103, in view\n          \n\n          \n            <div class=\"context\" id=\"c140390589925632\">\n              \n                <ol start=\"96\" class=\"pre-context\" id=\"pre140390589925632\">\n                \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>            self = cls(**initkwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>            self.setup(request, *args, **kwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>            if not hasattr(self, &quot;request&quot;):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>                raise AttributeError(</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>                    &quot;%s instance has no &#x27;request&#x27; attribute. Did you override &quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>                    &quot;setup() and forget to call super()?&quot; % cls.__name__</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>                )</pre></li>\n                \n                </ol>\n              \n              <ol start=\"103\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>            return self.dispatch(request, *args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='104' class=\"post-context\" id=\"post140390589925632\">\n                  \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>        view.view_class = cls</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>        view.view_initkwargs = initkwargs</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>        # __name__ and __qualname__ are intentionally left unchanged as</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589925632', 'post140390589925632')\"><pre>        # view_class should be used to robustly determine the name of the view</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390589925632\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>cls</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;project.views.views.ProjectView&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>initkwargs</td>\n                    <td class=\"code\"><pre>{}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;WSGIRequest: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 509, in dispatch\n          \n\n          \n            <div class=\"context\" id=\"c140390589931200\">\n              \n                <ol start=\"502\" class=\"pre-context\" id=\"pre140390589931200\">\n                \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>                                  self.http_method_not_allowed)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>            else:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>                handler = self.http_method_not_allowed</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>            response = handler(request, *args, **kwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>        except Exception as exc:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"509\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>            response = self.handle_exception(exc)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='510' class=\"post-context\" id=\"post140390589931200\">\n                  \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>        self.response = self.finalize_response(request, response, *args, **kwargs)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>        return self.response</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>    def options(self, request, *args, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589931200', 'post140390589931200')\"><pre>        &quot;&quot;&quot;</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390589931200\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>handler</td>\n                    <td class=\"code\"><pre>&lt;bound method ProjectView.post of &lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 469, in handle_exception\n          \n\n          \n            <div class=\"context\" id=\"c140390588271360\">\n              \n                <ol start=\"462\" class=\"pre-context\" id=\"pre140390588271360\">\n                \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>        exception_handler = self.get_exception_handler()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>        context = self.get_exception_handler_context()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>        response = exception_handler(exc, context)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>        if response is None:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"469\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>            self.raise_uncaught_exception(exc)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='470' class=\"post-context\" id=\"post140390588271360\">\n                  \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>        response.exception = True</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>        return response</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>    def raise_uncaught_exception(self, exc):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271360', 'post140390588271360')\"><pre>        if settings.DEBUG:</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588271360\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>context</td>\n                    <td class=\"code\"><pre>{&#x27;args&#x27;: (),\n &#x27;kwargs&#x27;: {&#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;},\n &#x27;request&#x27;: &lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;,\n &#x27;view&#x27;: &lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exc</td>\n                    <td class=\"code\"><pre>ProgrammingError(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exception_handler</td>\n                    <td class=\"code\"><pre>&lt;function exception_handler at 0x7faf3bdcb7e0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>response</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 480, in raise_uncaught_exception\n          \n\n          \n            <div class=\"context\" id=\"c140390588262336\">\n              \n                <ol start=\"473\" class=\"pre-context\" id=\"pre140390588262336\">\n                \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>    def raise_uncaught_exception(self, exc):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>        if settings.DEBUG:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>            request = self.request</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>            renderer_format = getattr(request.accepted_renderer, &#x27;format&#x27;)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>            use_plaintext_traceback = renderer_format not in (&#x27;html&#x27;, &#x27;api&#x27;, &#x27;admin&#x27;)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>            request.force_plaintext_errors(use_plaintext_traceback)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"480\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>        raise exc</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='481' class=\"post-context\" id=\"post140390588262336\">\n                  \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>    # Note: Views are made CSRF exempt from within `as_view` as to prevent</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>    # accidental removal of this exemption in cases where `dispatch` needs to</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>    # be overridden.</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>    def dispatch(self, request, *args, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262336', 'post140390588262336')\"><pre>        &quot;&quot;&quot;</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588262336\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>exc</td>\n                    <td class=\"code\"><pre>ProgrammingError(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>renderer_format</td>\n                    <td class=\"code\"><pre>&#x27;json&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>use_plaintext_traceback</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 506, in dispatch\n          \n\n          \n            <div class=\"context\" id=\"c140390588229760\">\n              \n                <ol start=\"499\" class=\"pre-context\" id=\"pre140390588229760\">\n                \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>            # Get the appropriate handler method</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>            if request.method.lower() in self.http_method_names:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>                handler = getattr(self, request.method.lower(),</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>                                  self.http_method_not_allowed)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>            else:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>                handler = self.http_method_not_allowed</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre></pre></li>\n                \n                </ol>\n              \n              <ol start=\"506\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>            response = handler(request, *args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='507' class=\"post-context\" id=\"post140390588229760\">\n                  \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>        except Exception as exc:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>            response = self.handle_exception(exc)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>        self.response = self.finalize_response(request, response, *args, **kwargs)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229760', 'post140390588229760')\"><pre>        return self.response</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588229760\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>handler</td>\n                    <td class=\"code\"><pre>&lt;bound method ProjectView.post of &lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/code/src/project/views/views.py</code>, line 173, in post\n          \n\n          \n            <div class=\"context\" id=\"c140390588221888\">\n              \n                <ol start=\"166\" class=\"pre-context\" id=\"pre140390588221888\">\n                \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>            valid_fields = validator.validate_fields()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>        if not valid_fields:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>            return Response(&#x27;Invalid fields&#x27;, status=status.HTTP_400_BAD_REQUEST)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>        serializer.save()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre></pre></li>\n                \n                </ol>\n              \n              <ol start=\"173\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>        ProjectMetric.create_project_metric(serializer.instance.project_status_id, user_id, serializer.instance)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='174' class=\"post-context\" id=\"post140390588221888\">\n                  \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>        </pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>        return Response(serializer.data, status=status.HTTP_201_CREATED)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>class ProjectDetail(RetrieveUpdateDestroyAPIView):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588221888', 'post140390588221888')\"><pre>    &quot;&quot;&quot;Gets or updates a project.&quot;&quot;&quot;</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588221888\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>account_validation</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>have_required_fields</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>missing_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project</td>\n                    <td class=\"code\"><pre>{&#x27;from_account&#x27;: None,\n &#x27;goal_date&#x27;: &#x27;2030-10-30&#x27;,\n &#x27;id&#x27;: &#x27;2372e77f-20da-4b48-96cf-9b1e43d5e962&#x27;,\n &#x27;project_category&#x27;: &#x27;b95487f8-4d83-4e24-ad1a-951870596539&#x27;,\n &#x27;project_category_id&#x27;: &#x27;b95487f8-4d83-4e24-ad1a-951870596539&#x27;,\n &#x27;project_config&#x27;: UUID(&#x27;deead368-205e-464b-9d8c-82cb93517eef&#x27;),\n &#x27;project_name&#x27;: &#x27;Viaje a japon&#x27;,\n &#x27;project_status&#x27;: &#x27;8df908b6-8ab3-11ed-a1eb-0242ac120002&#x27;,\n &#x27;to_account&#x27;: None,\n &#x27;total&#x27;: 20000,\n &#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_config_id</td>\n                    <td class=\"code\"><pre>UUID(&#x27;deead368-205e-464b-9d8c-82cb93517eef&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_status_active_id</td>\n                    <td class=\"code\"><pre>&#x27;f2a34b3c-5eea-4bfd-a18e-06d675826486&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_status_setup_id</td>\n                    <td class=\"code\"><pre>&#x27;8df908b6-8ab3-11ed-a1eb-0242ac120002&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>required_fields</td>\n                    <td class=\"code\"><pre>[&#x27;project_name&#x27;, &#x27;goal_date&#x27;, &#x27;total&#x27;]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7faf3b3e02d0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>serializer</td>\n                    <td class=\"code\"><pre>ProjectPostSerializer(data={&#x27;project_name&#x27;: &#x27;Viaje a japon&#x27;, &#x27;project_category_id&#x27;: &#x27;b95487f8-4d83-4e24-ad1a-951870596539&#x27;, &#x27;goal_date&#x27;: &#x27;2030-10-30&#x27;, &#x27;from_account&#x27;: None, &#x27;to_account&#x27;: None, &#x27;total&#x27;: 20000, &#x27;id&#x27;: &#x27;2372e77f-20da-4b48-96cf-9b1e43d5e962&#x27;, &#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;, &#x27;project_status&#x27;: &#x27;8df908b6-8ab3-11ed-a1eb-0242ac120002&#x27;, &#x27;project_category&#x27;: &#x27;b95487f8-4d83-4e24-ad1a-951870596539&#x27;, &#x27;project_config&#x27;: UUID(&#x27;deead368-205e-464b-9d8c-82cb93517eef&#x27;)}):\n    id = UUIDField(read_only=True)\n    goal_date = DateField(allow_null=True, required=False)\n    total = DecimalField(allow_null=True, decimal_places=2, default=1, max_digits=14, required=False)\n    project_name = CharField(allow_null=True)\n    user_id = UUIDField()\n    progress = DecimalField(decimal_places=2, max_digits=14, required=False)\n    processing = DecimalField(decimal_places=2, max_digits=14, required=False)\n    pending = DecimalField(decimal_places=2, max_digits=14, required=False)\n    from_account = CharField(allow_null=True, max_length=60, required=False)\n    to_account = CharField(allow_null=True, max_length=60, required=False)\n    investment_returns = DecimalField(decimal_places=2, max_digits=14, required=False)\n    created_at = DateTimeField(read_only=True)\n    updated_at = DateTimeField(read_only=True)\n    deleted_at = DateTimeField(allow_null=True, required=False)\n    project_category = PrimaryKeyRelatedField(queryset=Item.objects.all(), required=False)\n    project_status = PrimaryKeyRelatedField(queryset=Item.objects.all(), required=False)\n    project_config = PrimaryKeyRelatedField(queryset=Item.objects.all())</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>user_id</td>\n                    <td class=\"code\"><pre>&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>valid_fields</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>validator</td>\n                    <td class=\"code\"><pre>&lt;project.validators.ProjectValidator object at 0x7faf3c2501d0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/code/src/metric/service/project_metric_service.py</code>, line 14, in create_project_metric\n          \n\n          \n            <div class=\"context\" id=\"c140390588234944\">\n              \n                <ol start=\"7\" class=\"pre-context\" id=\"pre140390588234944\">\n                \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>    @staticmethod</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>    def create_project_metric(project_status_id, user_id, project ):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>        config_completed_datetime = None</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>        if str(project_status_id) == PROJECT_STATUS_ACTIVE_ID:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>            config_completed_datetime = datetime.now()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>        </pre></li>\n                \n                </ol>\n              \n              <ol start=\"14\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>        ProjectsMetrics.objects.create(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='15' class=\"post-context\" id=\"post140390588234944\">\n                  \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>            user_id=user_id,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>            project=project,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>            config_completed_datetime = config_completed_datetime</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>        )</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234944', 'post140390588234944')\"><pre>    @staticmethod</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588234944\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>config_completed_datetime</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project</td>\n                    <td class=\"code\"><pre>&lt;Project: Project object (6f3e32b4-2c0a-42da-babe-089467bec030)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_status_id</td>\n                    <td class=\"code\"><pre>UUID(&#x27;8df908b6-8ab3-11ed-a1eb-0242ac120002&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>user_id</td>\n                    <td class=\"code\"><pre>&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/manager.py</code>, line 85, in manager_method\n          \n\n          \n            <div class=\"context\" id=\"c140390589859328\">\n              \n                <ol start=\"78\" class=\"pre-context\" id=\"pre140390589859328\">\n                \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>    def check(self, **kwargs):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>        return []</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>    @classmethod</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>    def _get_queryset_methods(cls, queryset_class):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>        def create_method(name, method):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>            def manager_method(self, *args, **kwargs):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"85\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>                return getattr(self.get_queryset(), name)(*args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='86' class=\"post-context\" id=\"post140390589859328\">\n                  \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>            manager_method.__name__ = method.__name__</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>            manager_method.__doc__ = method.__doc__</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>            return manager_method</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589859328', 'post140390589859328')\"><pre>        new_methods = {}</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390589859328\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;config_completed_datetime&#x27;: None,\n &#x27;project&#x27;: &lt;Project: Project object (6f3e32b4-2c0a-42da-babe-089467bec030)&gt;,\n &#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>name</td>\n                    <td class=\"code\"><pre>&#x27;create&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.manager.Manager object at 0x7faf3bfc3d50&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/query.py</code>, line 671, in create\n          \n\n          \n            <div class=\"context\" id=\"c140390588233920\">\n              \n                <ol start=\"664\" class=\"pre-context\" id=\"pre140390588233920\">\n                \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>    def create(self, **kwargs):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        Create a new object with the given kwargs, saving it to the database</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        and returning the created object.</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        obj = self.model(**kwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        self._for_write = True</pre></li>\n                \n                </ol>\n              \n              <ol start=\"671\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        obj.save(force_insert=True, using=self.db)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='672' class=\"post-context\" id=\"post140390588233920\">\n                  \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        return obj</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>    async def acreate(self, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>        return await sync_to_async(self.create)(**kwargs)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233920', 'post140390588233920')\"><pre>    def _prepare_for_bulk_create(self, objs):</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588233920\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;config_completed_datetime&#x27;: None,\n &#x27;project&#x27;: &lt;Project: Project object (6f3e32b4-2c0a-42da-babe-089467bec030)&gt;,\n &#x27;user_id&#x27;: &#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>obj</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (485bb147-77c1-4e6c-9118-28cd363f45a6)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>Error in formatting: ProgrammingError: permission denied for table projects_metrics\n</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 812, in save\n          \n\n          \n            <div class=\"context\" id=\"c140390589906560\">\n              \n                <ol start=\"805\" class=\"pre-context\" id=\"pre140390589906560\">\n                \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>            for field in self._meta.concrete_fields:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>                if not field.primary_key and not hasattr(field, &quot;through&quot;):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>                    field_names.add(field.attname)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>            loaded_fields = field_names.difference(deferred_fields)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>            if loaded_fields:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>                update_fields = frozenset(loaded_fields)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre></pre></li>\n                \n                </ol>\n              \n              <ol start=\"812\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>        self.save_base(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='813' class=\"post-context\" id=\"post140390589906560\">\n                  \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>            using=using,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>            force_insert=force_insert,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>            force_update=force_update,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>            update_fields=update_fields,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre>        )</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589906560', 'post140390589906560')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390589906560\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>deferred_fields</td>\n                    <td class=\"code\"><pre>set()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_insert</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_update</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (485bb147-77c1-4e6c-9118-28cd363f45a6)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 863, in save_base\n          \n\n          \n            <div class=\"context\" id=\"c140390588229504\">\n              \n                <ol start=\"856\" class=\"pre-context\" id=\"pre140390588229504\">\n                \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>            context_manager = transaction.atomic(using=using, savepoint=False)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>        else:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>            context_manager = transaction.mark_for_rollback_on_error(using=using)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>        with context_manager:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>            parent_inserted = False</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>            if not raw:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>                parent_inserted = self._save_parents(cls, using, update_fields)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"863\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>            updated = self._save_table(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='864' class=\"post-context\" id=\"post140390588229504\">\n                  \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>                raw,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>                cls,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>                force_insert or parent_inserted,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>                force_update,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>                using,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588229504', 'post140390588229504')\"><pre>                update_fields,</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588229504\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>cls</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;metric.models.ProjectsMetrics&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>context_manager</td>\n                    <td class=\"code\"><pre>&lt;contextlib._GeneratorContextManager object at 0x7faf3b3e4890&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_insert</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_update</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>meta</td>\n                    <td class=\"code\"><pre>&lt;Options for ProjectsMetrics&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>origin</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;metric.models.ProjectsMetrics&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>parent_inserted</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (485bb147-77c1-4e6c-9118-28cd363f45a6)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 1006, in _save_table\n          \n\n          \n            <div class=\"context\" id=\"c140390588282688\">\n              \n                <ol start=\"999\" class=\"pre-context\" id=\"pre140390588282688\">\n                \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>                    )[&quot;_order__max&quot;]</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>                )</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>            fields = meta.local_concrete_fields</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>            if not pk_set:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>                fields = [f for f in fields if f is not meta.auto_field]</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>            returning_fields = meta.db_returning_fields</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1006\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>            results = self._do_insert(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1007' class=\"post-context\" id=\"post140390588282688\">\n                  \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>                cls._base_manager, using, fields, returning_fields, raw</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>            )</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>            if results:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>                for value, field in zip(results[0], returning_fields):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>                    setattr(self, field.attname, value)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588282688', 'post140390588282688')\"><pre>        return updated</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588282688\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>cls</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;metric.models.ProjectsMetrics&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>fields</td>\n                    <td class=\"code\"><pre>(&lt;django.db.models.fields.UUIDField: id&gt;,\n &lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.DateTimeField: updated_at&gt;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_insert</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_update</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>meta</td>\n                    <td class=\"code\"><pre>&lt;Options for ProjectsMetrics&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>non_pks</td>\n                    <td class=\"code\"><pre>[&lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.DateTimeField: updated_at&gt;]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>pk_set</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>pk_val</td>\n                    <td class=\"code\"><pre>UUID(&#x27;485bb147-77c1-4e6c-9118-28cd363f45a6&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (485bb147-77c1-4e6c-9118-28cd363f45a6)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>updated</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 1047, in _do_insert\n          \n\n          \n            <div class=\"context\" id=\"c140390588270208\">\n              \n                <ol start=\"1040\" class=\"pre-context\" id=\"pre140390588270208\">\n                \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>        return filtered._update(values) &gt; 0</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>    def _do_insert(self, manager, using, fields, returning_fields, raw):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>        Do an INSERT. If returning_fields is defined then this method should</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>        return the newly created data for the model.</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1047\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>        return manager._insert(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1048' class=\"post-context\" id=\"post140390588270208\">\n                  \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>            [self],</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>            fields=fields,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>            returning_fields=returning_fields,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>            using=using,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>            raw=raw,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588270208', 'post140390588270208')\"><pre>        )</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588270208\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>fields</td>\n                    <td class=\"code\"><pre>(&lt;django.db.models.fields.UUIDField: id&gt;,\n &lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.DateTimeField: updated_at&gt;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>manager</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.manager.Manager object at 0x7faf3b3d9cd0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (485bb147-77c1-4e6c-9118-28cd363f45a6)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/manager.py</code>, line 85, in manager_method\n          \n\n          \n            <div class=\"context\" id=\"c140390588206400\">\n              \n                <ol start=\"78\" class=\"pre-context\" id=\"pre140390588206400\">\n                \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>    def check(self, **kwargs):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>        return []</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>    @classmethod</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>    def _get_queryset_methods(cls, queryset_class):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>        def create_method(name, method):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>            def manager_method(self, *args, **kwargs):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"85\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>                return getattr(self.get_queryset(), name)(*args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='86' class=\"post-context\" id=\"post140390588206400\">\n                  \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>            manager_method.__name__ = method.__name__</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>            manager_method.__doc__ = method.__doc__</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>            return manager_method</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588206400', 'post140390588206400')\"><pre>        new_methods = {}</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588206400\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>([&lt;ProjectsMetrics: ProjectsMetrics object (485bb147-77c1-4e6c-9118-28cd363f45a6)&gt;],)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;fields&#x27;: (&lt;django.db.models.fields.UUIDField: id&gt;,\n            &lt;django.db.models.fields.UUIDField: user_id&gt;,\n            &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n            &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n            &lt;django.db.models.fields.DateTimeField: updated_at&gt;),\n &#x27;raw&#x27;: False,\n &#x27;returning_fields&#x27;: [],\n &#x27;using&#x27;: &#x27;default&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>name</td>\n                    <td class=\"code\"><pre>&#x27;_insert&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.manager.Manager object at 0x7faf3b3d9cd0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/query.py</code>, line 1791, in _insert\n          \n\n          \n            <div class=\"context\" id=\"c140390588269568\">\n              \n                <ol start=\"1784\" class=\"pre-context\" id=\"pre140390588269568\">\n                \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>        query = sql.InsertQuery(</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>            self.model,</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>            on_conflict=on_conflict,</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>            update_fields=update_fields,</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>            unique_fields=unique_fields,</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>        )</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>        query.insert_values(fields, objs, raw=raw)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1791\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>        return query.get_compiler(using=using).execute_sql(returning_fields)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1792' class=\"post-context\" id=\"post140390588269568\">\n                  \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>    _insert.alters_data = True</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>    _insert.queryset_only = False</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>    def _batched_insert(</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588269568', 'post140390588269568')\"><pre>        self,</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588269568\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>fields</td>\n                    <td class=\"code\"><pre>(&lt;django.db.models.fields.UUIDField: id&gt;,\n &lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.DateTimeField: updated_at&gt;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>objs</td>\n                    <td class=\"code\"><pre>[&lt;ProjectsMetrics: ProjectsMetrics object (485bb147-77c1-4e6c-9118-28cd363f45a6)&gt;]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>on_conflict</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>query</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.sql.subqueries.InsertQuery object at 0x7faf3b23fb10&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>Error in formatting: ProgrammingError: permission denied for table projects_metrics\n</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>unique_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py</code>, line 1660, in execute_sql\n          \n\n          \n            <div class=\"context\" id=\"c140390589937600\">\n              \n                <ol start=\"1653\" class=\"pre-context\" id=\"pre140390589937600\">\n                \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>            and len(self.query.objs) != 1</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>            and not self.connection.features.can_return_rows_from_bulk_insert</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>        )</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>        opts = self.query.get_meta()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>        self.returning_fields = returning_fields</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>        with self.connection.cursor() as cursor:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>            for sql, params in self.as_sql():</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1660\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>                cursor.execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1661' class=\"post-context\" id=\"post140390589937600\">\n                  \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>            if not self.returning_fields:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>                return []</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>            if (</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>                self.connection.features.can_return_rows_from_bulk_insert</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>                and len(self.query.objs) &gt; 1</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390589937600', 'post140390589937600')\"><pre>            ):</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390589937600\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>cursor</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>opts</td>\n                    <td class=\"code\"><pre>&lt;Options for ProjectsMetrics&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;485bb147-77c1-4e6c-9118-28cd363f45a6&#x27;),\n UUID(&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;),\n UUID(&#x27;6f3e32b4-2c0a-42da-babe-089467bec030&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 19, 8, 25, 885458, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;SQLInsertCompiler model=ProjectsMetrics connection=&lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt; using=&#x27;default&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 102, in execute\n          \n\n          \n            <div class=\"context\" id=\"c140390588224128\">\n              \n                <ol start=\"95\" class=\"pre-context\" id=\"pre140390588224128\">\n                \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>class CursorDebugWrapper(CursorWrapper):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>    # XXX callproc isn&#x27;t instrumented at this time.</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>    def execute(self, sql, params=None):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>        with self.debug_sql(sql, params, use_last_executed_query=True):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"102\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>            return super().execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='103' class=\"post-context\" id=\"post140390588224128\">\n                  \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>    def executemany(self, sql, param_list):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>        with self.debug_sql(sql, param_list, many=True):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>            return super().executemany(sql, param_list)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588224128', 'post140390588224128')\"><pre>    @contextmanager</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588224128\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>__class__</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;django.db.backends.utils.CursorDebugWrapper&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;485bb147-77c1-4e6c-9118-28cd363f45a6&#x27;),\n UUID(&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;),\n UUID(&#x27;6f3e32b4-2c0a-42da-babe-089467bec030&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 19, 8, 25, 885458, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 67, in execute\n          \n\n          \n            <div class=\"context\" id=\"c140390588233408\">\n              \n                <ol start=\"60\" class=\"pre-context\" id=\"pre140390588233408\">\n                \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>            elif kparams is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>                return self.cursor.callproc(procname, params)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>            else:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>                params = params or ()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>                return self.cursor.callproc(procname, params, kparams)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>    def execute(self, sql, params=None):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"67\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>        return self._execute_with_wrappers(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='68' class=\"post-context\" id=\"post140390588233408\">\n                  \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>            sql, params, many=False, executor=self._execute</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>        )</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>    def executemany(self, sql, param_list):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>        return self._execute_with_wrappers(</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588233408', 'post140390588233408')\"><pre>            sql, param_list, many=True, executor=self._executemany</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588233408\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;485bb147-77c1-4e6c-9118-28cd363f45a6&#x27;),\n UUID(&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;),\n UUID(&#x27;6f3e32b4-2c0a-42da-babe-089467bec030&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 19, 8, 25, 885458, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 80, in _execute_with_wrappers\n          \n\n          \n            <div class=\"context\" id=\"c140390588271744\">\n              \n                <ol start=\"73\" class=\"pre-context\" id=\"pre140390588271744\">\n                \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>            sql, param_list, many=True, executor=self._executemany</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>        )</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>    def _execute_with_wrappers(self, sql, params, many, executor):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>        context = {&quot;connection&quot;: self.db, &quot;cursor&quot;: self}</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>        for wrapper in reversed(self.db.execute_wrappers):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>            executor = functools.partial(wrapper, executor)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"80\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>        return executor(sql, params, many, context)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='81' class=\"post-context\" id=\"post140390588271744\">\n                  \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>            if params is None:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588271744', 'post140390588271744')\"><pre>                # params default might be backend specific.</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588271744\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>context</td>\n                    <td class=\"code\"><pre>{&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>executor</td>\n                    <td class=\"code\"><pre>&lt;bound method CursorWrapper._execute of &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>many</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;485bb147-77c1-4e6c-9118-28cd363f45a6&#x27;),\n UUID(&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;),\n UUID(&#x27;6f3e32b4-2c0a-42da-babe-089467bec030&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 19, 8, 25, 885458, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 84, in _execute\n          \n\n          \n            <div class=\"context\" id=\"c140390588234816\">\n              \n                <ol start=\"77\" class=\"pre-context\" id=\"pre140390588234816\">\n                \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>        context = {&quot;connection&quot;: self.db, &quot;cursor&quot;: self}</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>        for wrapper in reversed(self.db.execute_wrappers):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>            executor = functools.partial(wrapper, executor)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>        return executor(sql, params, many, context)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                \n                </ol>\n              \n              <ol start=\"84\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>        with self.db.wrap_database_errors:</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='85' class=\"post-context\" id=\"post140390588234816\">\n                  \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>            if params is None:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>                # params default might be backend specific.</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>                return self.cursor.execute(sql)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>            else:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre>                return self.cursor.execute(sql, params)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588234816', 'post140390588234816')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588234816\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>ignored_wrapper_args</td>\n                    <td class=\"code\"><pre>(False,\n {&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n  &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;})</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;485bb147-77c1-4e6c-9118-28cd363f45a6&#x27;),\n UUID(&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;),\n UUID(&#x27;6f3e32b4-2c0a-42da-babe-089467bec030&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 19, 8, 25, 885458, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/utils.py</code>, line 91, in __exit__\n          \n\n          \n            <div class=\"context\" id=\"c140390588262016\">\n              \n                <ol start=\"84\" class=\"pre-context\" id=\"pre140390588262016\">\n                \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>            db_exc_type = getattr(self.wrapper.Database, dj_exc_type.__name__)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>            if issubclass(exc_type, db_exc_type):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>                dj_exc_value = dj_exc_type(*exc_value.args)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>                # Only set the &#x27;errors_occurred&#x27; flag for errors that may make</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>                # the connection unusable.</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>                if dj_exc_type not in (DataError, IntegrityError):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>                    self.wrapper.errors_occurred = True</pre></li>\n                \n                </ol>\n              \n              <ol start=\"91\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>                raise dj_exc_value.with_traceback(traceback) from exc_value</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='92' class=\"post-context\" id=\"post140390588262016\">\n                  \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>    def __call__(self, func):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>        # Note that we are intentionally not using @wraps here for performance</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>        # reasons. Refs #21109.</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>        def inner(*args, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588262016', 'post140390588262016')\"><pre>            with self:</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588262016\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>db_exc_type</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;psycopg2.ProgrammingError&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>dj_exc_type</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;django.db.utils.ProgrammingError&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>dj_exc_value</td>\n                    <td class=\"code\"><pre>ProgrammingError(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exc_type</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;psycopg2.errors.InsufficientPrivilege&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exc_value</td>\n                    <td class=\"code\"><pre>InsufficientPrivilege(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.utils.DatabaseErrorWrapper object at 0x7faf3b20af90&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>traceback</td>\n                    <td class=\"code\"><pre>&lt;traceback object at 0x7faf3b24b800&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 89, in _execute\n          \n\n          \n            <div class=\"context\" id=\"c140390588266496\">\n              \n                <ol start=\"82\" class=\"pre-context\" id=\"pre140390588266496\">\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>            if params is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>                # params default might be backend specific.</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>                return self.cursor.execute(sql)</pre></li>\n                \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>            else:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"89\" class=\"context-line\">\n                <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>                return self.cursor.execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='90' class=\"post-context\" id=\"post140390588266496\">\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>    def _executemany(self, sql, param_list, *ignored_wrapper_args):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre>            return self.cursor.executemany(sql, param_list)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140390588266496', 'post140390588266496')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140390588266496\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>ignored_wrapper_args</td>\n                    <td class=\"code\"><pre>(False,\n {&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n  &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;})</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;485bb147-77c1-4e6c-9118-28cd363f45a6&#x27;),\n UUID(&#x27;562fb9c7-2cce-45c2-b90e-f517163080c7&#x27;),\n UUID(&#x27;6f3e32b4-2c0a-42da-babe-089467bec030&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 19, 8, 25, 885458, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7faf3b24e150&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n    </ul>\n  </div>\n\n  <form action=\"https://dpaste.com/\" name=\"pasteform\" id=\"pasteform\" method=\"post\">\n  <div id=\"pastebinTraceback\" class=\"pastebin\">\n    <input type=\"hidden\" name=\"language\" value=\"PythonConsole\">\n    <input type=\"hidden\" name=\"title\"\n      value=\"ProgrammingError at /api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/\">\n    <input type=\"hidden\" name=\"source\" value=\"Django Dpaste Agent\">\n    <input type=\"hidden\" name=\"poster\" value=\"Django\">\n    <textarea name=\"content\" id=\"traceback_area\" cols=\"140\" rows=\"25\">\nEnvironment:\n\n\nRequest Method: POST\nRequest URL: http://ftv7r7kk66.execute-api.us-east-1.amazonaws.com/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/\n\nDjango Version: 4.1.10\nPython Version: 3.11.3\nInstalled Applications:\n[&#x27;django.contrib.admin&#x27;,\n &#x27;django.contrib.auth&#x27;,\n &#x27;django.contrib.contenttypes&#x27;,\n &#x27;django.contrib.sessions&#x27;,\n &#x27;django.contrib.messages&#x27;,\n &#x27;django.contrib.staticfiles&#x27;,\n &#x27;django_extensions&#x27;,\n &#x27;corsheaders&#x27;,\n &#x27;rest_framework&#x27;,\n &#x27;django_filters&#x27;,\n &#x27;monitoring&#x27;,\n &#x27;saving&#x27;,\n &#x27;payment&#x27;,\n &#x27;catalog&#x27;,\n &#x27;project&#x27;,\n &#x27;rule&#x27;,\n &#x27;activity&#x27;,\n &#x27;transaction&#x27;,\n &#x27;user&#x27;,\n &#x27;dashboard&#x27;,\n &#x27;metric&#x27;,\n &#x27;config&#x27;,\n &#x27;report&#x27;]\nInstalled Middleware:\n[&#x27;django.middleware.security.SecurityMiddleware&#x27;,\n &#x27;django.contrib.sessions.middleware.SessionMiddleware&#x27;,\n &#x27;django.middleware.common.CommonMiddleware&#x27;,\n &#x27;django.middleware.csrf.CsrfViewMiddleware&#x27;,\n &#x27;django.contrib.auth.middleware.AuthenticationMiddleware&#x27;,\n &#x27;django.contrib.messages.middleware.MessageMiddleware&#x27;,\n &#x27;django.middleware.clickjacking.XFrameOptionsMiddleware&#x27;,\n &#x27;corsheaders.middleware.CorsMiddleware&#x27;]\n\n\n\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 89, in _execute\n    return self.cursor.execute(sql, params)\n\nThe above exception (permission denied for table projects_metrics\n) was the direct cause of the following exception:\n  File \"/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py\", line 56, in inner\n    response = get_response(request)\n  File \"/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py\", line 197, in _get_response\n    response = wrapped_callback(request, *callback_args, **callback_kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/views/decorators/csrf.py\", line 55, in wrapped_view\n    return view_func(*args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/views/generic/base.py\", line 103, in view\n    return self.dispatch(request, *args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 509, in dispatch\n    response = self.handle_exception(exc)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 469, in handle_exception\n    self.raise_uncaught_exception(exc)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 480, in raise_uncaught_exception\n    raise exc\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 506, in dispatch\n    response = handler(request, *args, **kwargs)\n  File \"/code/src/project/views/views.py\", line 173, in post\n    ProjectMetric.create_project_metric(serializer.instance.project_status_id, user_id, serializer.instance)\n  File \"/code/src/metric/service/project_metric_service.py\", line 14, in create_project_metric\n    ProjectsMetrics.objects.create(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/manager.py\", line 85, in manager_method\n    return getattr(self.get_queryset(), name)(*args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\", line 671, in create\n    obj.save(force_insert=True, using=self.db)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 812, in save\n    self.save_base(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 863, in save_base\n    updated = self._save_table(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 1006, in _save_table\n    results = self._do_insert(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 1047, in _do_insert\n    return manager._insert(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/manager.py\", line 85, in manager_method\n    return getattr(self.get_queryset(), name)(*args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\", line 1791, in _insert\n    return query.get_compiler(using=using).execute_sql(returning_fields)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\", line 1660, in execute_sql\n    cursor.execute(sql, params)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 102, in execute\n    return super().execute(sql, params)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 67, in execute\n    return self._execute_with_wrappers(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 80, in _execute_with_wrappers\n    return executor(sql, params, many, context)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 84, in _execute\n    with self.db.wrap_database_errors:\n  File \"/usr/local/lib/python3.11/site-packages/django/db/utils.py\", line 91, in __exit__\n    raise dj_exc_value.with_traceback(traceback) from exc_value\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 89, in _execute\n    return self.cursor.execute(sql, params)\n\nException Type: ProgrammingError at /api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/\nException Value: permission denied for table projects_metrics\n\n</textarea>\n  <br><br>\n  <input type=\"submit\" value=\"Share this traceback on a public website\">\n  </div>\n</form>\n\n</div>\n\n\n<div id=\"requestinfo\">\n  <h2>Request information</h2>\n\n\n  \n    <h3 id=\"user-info\">USER</h3>\n    <p>AnonymousUser</p>\n  \n\n  <h3 id=\"get-info\">GET</h3>\n  \n    <p>No GET data</p>\n  \n\n  <h3 id=\"post-info\">POST</h3>\n  \n    <p>No POST data</p>\n  \n  <h3 id=\"files-info\">FILES</h3>\n  \n    <p>No FILES data</p>\n  \n\n\n  <h3 id=\"cookie-info\">COOKIES</h3>\n  \n    <p>No cookie data</p>\n  \n\n  <h3 id=\"meta-info\">META</h3>\n  <table class=\"req\">\n    <thead>\n      <tr>\n        <th>Variable</th>\n        <th>Value</th>\n      </tr>\n    </thead>\n    <tbody>\n      \n        <tr>\n          <td>CONTENT_LENGTH</td>\n          <td class=\"code\"><pre>&#x27;211&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CONTENT_TYPE</td>\n          <td class=\"code\"><pre>&#x27;application/json&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_ACCEPT</td>\n          <td class=\"code\"><pre>&#x27;*/*&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_ACCEPT_ENCODING</td>\n          <td class=\"code\"><pre>&#x27;gzip, deflate, br&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_AUTHORIZATION</td>\n          <td class=\"code\"><pre>(&#x27;Bearer &#x27;\n &#x27;eyJraWQiOiJtMERLaG9wdHBGQ3V3eGVXU2VTd2ZqMDJoZlZ4NDd3WStPaXdMQjN2dnJVPSIsImFsZyI6IlJTMjU2In0.eyJvcmlnaW5fanRpIjoiZWQ0YjBlM2ItZjdkMy00ZWNlLTg2MmYtMmU1ZWFmYThhN2Y0Iiwic3ViIjoiMzQ0ODc0OTgtMzA4MS03MDVjLWY5YTMtYjdlMmViZjY2NzY4IiwiYXVkIjoiMzFscWdvZmpvcGwwajF1MHFvNWszbDh1dTYiLCJldmVudF9pZCI6IjY4ZjBmNzk0LTk5OGItNGMwNi1iMjc0LWU5N2I3ZWMxMGM5MyIsInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNzI3MzU3OTMzLCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAudXMtZWFzdC0xLmFtYXpvbmF3cy5jb21cL3VzLWVhc3QtMV9sREFka3dLajAiLCJjb2duaXRvOnVzZXJuYW1lIjoieGgtdXNlci1xYS0xIiwiZXhwIjoxNzI3MzYxNTMzLCJpYXQiOjE3MjczNTc5MzMsImp0aSI6IjcxMTNjYTY4LTA1M2MtNDg0Mi04MWQyLTc3NzNjMzcwY2I0MiJ9.scD5yJLxwLULacwV6fiA5qW3FeMeuIV52ugrlIo9v4nMztSBHLCRxXs9sS-qNRVD9jmuirmgBkS5Hie-N4BXMrIv_Xo9FRWPfuBvC0YJbssh5KVvbWlLuSsvyuQL36YpTGM1fFzX5gEyNL8nSigyxFxvFlabNAzAiEYSZ3KrByNCUXiZx8NvkF7FjVP6taBSQ33lyBrnrVUPuul2IEp6Vq-2PvnIxbVDt2LKZB-2nfIADzZj6DhAGnWcbPdIpUKNpeFqDWg971oazl3wQ7IqU_0wfrvPFOo5nC_y2VwKiI7xvZyHOH0l8-bLAchBp98WsyN7mX-UAUyDYV5MHv9jJw&#x27;)</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_HOST</td>\n          <td class=\"code\"><pre>&#x27;ftv7r7kk66.execute-api.us-east-1.amazonaws.com&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_POSTMAN_TOKEN</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_USER_AGENT</td>\n          <td class=\"code\"><pre>&#x27;PostmanRuntime/7.44.1&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_AMZN_TRACE_ID</td>\n          <td class=\"code\"><pre>&#x27;Self=1-685eec29-2b3c707c53388f54561f33f7;Root=1-685eec29-581096721dee9c7a5b9962ea&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_FORWARDED_FOR</td>\n          <td class=\"code\"><pre>&#x27;190.21.240.254, 192.168.99.114&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_FORWARDED_PORT</td>\n          <td class=\"code\"><pre>&#x27;80&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_FORWARDED_PROTO</td>\n          <td class=\"code\"><pre>&#x27;http&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PATH_INFO</td>\n          <td class=\"code\"><pre>&#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>QUERY_STRING</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>RAW_URI</td>\n          <td class=\"code\"><pre>&#x27;/api-saving/v1/saving-service/users/562fb9c7-2cce-45c2-b90e-f517163080c7/projects/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>REMOTE_ADDR</td>\n          <td class=\"code\"><pre>&#x27;192.168.105.226&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>REMOTE_PORT</td>\n          <td class=\"code\"><pre>&#x27;26942&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>REQUEST_METHOD</td>\n          <td class=\"code\"><pre>&#x27;POST&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SCRIPT_NAME</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_NAME</td>\n          <td class=\"code\"><pre>&#x27;0.0.0.0&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_PORT</td>\n          <td class=\"code\"><pre>&#x27;8000&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_PROTOCOL</td>\n          <td class=\"code\"><pre>&#x27;HTTP/1.1&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_SOFTWARE</td>\n          <td class=\"code\"><pre>&#x27;gunicorn/20.1.0&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>gunicorn.socket</td>\n          <td class=\"code\"><pre>&lt;socket.socket fd=9, family=2, type=1, proto=0, laddr=(&#x27;192.168.66.61&#x27;, 8000), raddr=(&#x27;192.168.105.226&#x27;, 26942)&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.errors</td>\n          <td class=\"code\"><pre>&lt;gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7faf3b3bf970&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.file_wrapper</td>\n          <td class=\"code\"><pre>&lt;class &#x27;gunicorn.http.wsgi.FileWrapper&#x27;&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.input</td>\n          <td class=\"code\"><pre>&lt;gunicorn.http.body.Body object at 0x7faf3b23dc50&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.input_terminated</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.multiprocess</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.multithread</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.run_once</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.url_scheme</td>\n          <td class=\"code\"><pre>&#x27;http&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.version</td>\n          <td class=\"code\"><pre>(1, 0)</pre></td>\n        </tr>\n      \n    </tbody>\n  </table>\n\n\n  <h3 id=\"settings-info\">Settings</h3>\n  <h4>Using settings module <code>api_saving.settings</code></h4>\n  <table class=\"req\">\n    <thead>\n      <tr>\n        <th>Setting</th>\n        <th>Value</th>\n      </tr>\n    </thead>\n    <tbody>\n      \n        <tr>\n          <td>ABSOLUTE_URL_OVERRIDES</td>\n          <td class=\"code\"><pre>{}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>ADMINS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>ALLOWED_HOSTS</td>\n          <td class=\"code\"><pre>[&#x27;*&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>APPEND_SLASH</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>AUTHENTICATION_BACKENDS</td>\n          <td class=\"code\"><pre>[&#x27;django.contrib.auth.backends.ModelBackend&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>AUTH_PASSWORD_VALIDATORS</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>AUTH_USER_MODEL</td>\n          <td class=\"code\"><pre>&#x27;auth.User&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>BASE_DIR</td>\n          <td class=\"code\"><pre>PosixPath(&#x27;/code/src&#x27;)</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHES</td>\n          <td class=\"code\"><pre>{&#x27;default&#x27;: {&#x27;BACKEND&#x27;: &#x27;django.core.cache.backends.locmem.LocMemCache&#x27;}}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHE_MIDDLEWARE_ALIAS</td>\n          <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHE_MIDDLEWARE_KEY_PREFIX</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHE_MIDDLEWARE_SECONDS</td>\n          <td class=\"code\"><pre>600</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CORS_ORIGIN_ALLOW_ALL</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_AGE</td>\n          <td class=\"code\"><pre>31449600</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_DOMAIN</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_HTTPONLY</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_MASKED</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_NAME</td>\n          <td class=\"code\"><pre>&#x27;csrftoken&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_PATH</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_SAMESITE</td>\n          <td class=\"code\"><pre>&#x27;Lax&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_SECURE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_FAILURE_VIEW</td>\n          <td class=\"code\"><pre>&#x27;django.views.csrf.csrf_failure&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_HEADER_NAME</td>\n          <td class=\"code\"><pre>&#x27;HTTP_X_CSRFTOKEN&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_TRUSTED_ORIGINS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_USE_SESSIONS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATABASES</td>\n          <td class=\"code\"><pre>{&#x27;default&#x27;: {&#x27;ATOMIC_REQUESTS&#x27;: False,\n             &#x27;AUTOCOMMIT&#x27;: True,\n             &#x27;CONN_HEALTH_CHECKS&#x27;: False,\n             &#x27;CONN_MAX_AGE&#x27;: 0,\n             &#x27;ENGINE&#x27;: &#x27;django.db.backends.postgresql_psycopg2&#x27;,\n             &#x27;HOST&#x27;: &#x27;xerpabank-dev.ckdom9c6kdbz.us-east-1.rds.amazonaws.com&#x27;,\n             &#x27;NAME&#x27;: &#x27;saving_service_db&#x27;,\n             &#x27;OPTIONS&#x27;: {},\n             &#x27;PASSWORD&#x27;: &#x27;********************&#x27;,\n             &#x27;PORT&#x27;: &#x27;5432&#x27;,\n             &#x27;TEST&#x27;: {&#x27;CHARSET&#x27;: None,\n                      &#x27;COLLATION&#x27;: None,\n                      &#x27;MIGRATE&#x27;: True,\n                      &#x27;MIRROR&#x27;: None,\n                      &#x27;NAME&#x27;: None},\n             &#x27;TIME_ZONE&#x27;: None,\n             &#x27;USER&#x27;: &#x27;django&#x27;}}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATABASE_ROUTERS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATA_UPLOAD_MAX_MEMORY_SIZE</td>\n          <td class=\"code\"><pre>2621440</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATA_UPLOAD_MAX_NUMBER_FIELDS</td>\n          <td class=\"code\"><pre>1000</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATA_UPLOAD_MAX_NUMBER_FILES</td>\n          <td class=\"code\"><pre>100</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATETIME_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;N j, Y, P&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATETIME_INPUT_FORMATS</td>\n          <td class=\"code\"><pre>[&#x27;%Y-%m-%d %H:%M:%S&#x27;,\n &#x27;%Y-%m-%d %H:%M:%S.%f&#x27;,\n &#x27;%Y-%m-%d %H:%M&#x27;,\n &#x27;%m/%d/%Y %H:%M:%S&#x27;,\n &#x27;%m/%d/%Y %H:%M:%S.%f&#x27;,\n &#x27;%m/%d/%Y %H:%M&#x27;,\n &#x27;%m/%d/%y %H:%M:%S&#x27;,\n &#x27;%m/%d/%y %H:%M:%S.%f&#x27;,\n &#x27;%m/%d/%y %H:%M&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATE_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;N j, Y&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATE_INPUT_FORMATS</td>\n          <td class=\"code\"><pre>[&#x27;%Y-%m-%d&#x27;,\n &#x27;%m/%d/%Y&#x27;,\n &#x27;%m/%d/%y&#x27;,\n &#x27;%b %d %Y&#x27;,\n &#x27;%b %d, %Y&#x27;,\n &#x27;%d %b %Y&#x27;,\n &#x27;%d %b, %Y&#x27;,\n &#x27;%B %d %Y&#x27;,\n &#x27;%B %d, %Y&#x27;,\n &#x27;%d %B %Y&#x27;,\n &#x27;%d %B, %Y&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEBUG</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEBUG_PROPAGATE_EXCEPTIONS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DECIMAL_SEPARATOR</td>\n          <td class=\"code\"><pre>&#x27;.&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_AUTO_FIELD</td>\n          <td class=\"code\"><pre>&#x27;django.db.models.BigAutoField&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_CHARSET</td>\n          <td class=\"code\"><pre>&#x27;utf-8&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_EXCEPTION_REPORTER</td>\n          <td class=\"code\"><pre>&#x27;django.views.debug.ExceptionReporter&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_EXCEPTION_REPORTER_FILTER</td>\n          <td class=\"code\"><pre>&#x27;django.views.debug.SafeExceptionReporterFilter&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_FILE_STORAGE</td>\n          <td class=\"code\"><pre>&#x27;django.core.files.storage.FileSystemStorage&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_FROM_EMAIL</td>\n          <td class=\"code\"><pre>&#x27;webmaster@localhost&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_INDEX_TABLESPACE</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_TABLESPACE</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DISALLOWED_USER_AGENTS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_BACKEND</td>\n          <td class=\"code\"><pre>&#x27;django.core.mail.backends.smtp.EmailBackend&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_HOST</td>\n          <td class=\"code\"><pre>&#x27;localhost&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_HOST_PASSWORD</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_HOST_USER</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_PORT</td>\n          <td class=\"code\"><pre>25</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_SSL_CERTFILE</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_SSL_KEYFILE</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_SUBJECT_PREFIX</td>\n          <td class=\"code\"><pre>&#x27;[Django] &#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_TIMEOUT</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_USE_LOCALTIME</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_USE_SSL</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_USE_TLS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_DIRECTORY_PERMISSIONS</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_HANDLERS</td>\n          <td class=\"code\"><pre>[&#x27;django.core.files.uploadhandler.MemoryFileUploadHandler&#x27;,\n &#x27;django.core.files.uploadhandler.TemporaryFileUploadHandler&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_MAX_MEMORY_SIZE</td>\n          <td class=\"code\"><pre>2621440</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_PERMISSIONS</td>\n          <td class=\"code\"><pre>420</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_TEMP_DIR</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FIRST_DAY_OF_WEEK</td>\n          <td class=\"code\"><pre>0</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FIXTURE_DIRS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FORCE_SCRIPT_NAME</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FORMAT_MODULE_PATH</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FORM_RENDERER</td>\n          <td class=\"code\"><pre>&#x27;django.forms.renderers.DjangoTemplates&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>IGNORABLE_404_URLS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>IMPORT_USER_DATA_MODE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>INSTALLED_APPS</td>\n          <td class=\"code\"><pre>[&#x27;django.contrib.admin&#x27;,\n &#x27;django.contrib.auth&#x27;,\n &#x27;django.contrib.contenttypes&#x27;,\n &#x27;django.contrib.sessions&#x27;,\n &#x27;django.contrib.messages&#x27;,\n &#x27;django.contrib.staticfiles&#x27;,\n &#x27;django_extensions&#x27;,\n &#x27;corsheaders&#x27;,\n &#x27;rest_framework&#x27;,\n &#x27;django_filters&#x27;,\n &#x27;monitoring&#x27;,\n &#x27;saving&#x27;,\n &#x27;payment&#x27;,\n &#x27;catalog&#x27;,\n &#x27;project&#x27;,\n &#x27;rule&#x27;,\n &#x27;activity&#x27;,\n &#x27;transaction&#x27;,\n &#x27;user&#x27;,\n &#x27;dashboard&#x27;,\n &#x27;metric&#x27;,\n &#x27;config&#x27;,\n &#x27;report&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>INTERNAL_IPS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGES</td>\n          <td class=\"code\"><pre>[(&#x27;af&#x27;, &#x27;Afrikaans&#x27;),\n (&#x27;ar&#x27;, &#x27;Arabic&#x27;),\n (&#x27;ar-dz&#x27;, &#x27;Algerian Arabic&#x27;),\n (&#x27;ast&#x27;, &#x27;Asturian&#x27;),\n (&#x27;az&#x27;, &#x27;Azerbaijani&#x27;),\n (&#x27;bg&#x27;, &#x27;Bulgarian&#x27;),\n (&#x27;be&#x27;, &#x27;Belarusian&#x27;),\n (&#x27;bn&#x27;, &#x27;Bengali&#x27;),\n (&#x27;br&#x27;, &#x27;Breton&#x27;),\n (&#x27;bs&#x27;, &#x27;Bosnian&#x27;),\n (&#x27;ca&#x27;, &#x27;Catalan&#x27;),\n (&#x27;cs&#x27;, &#x27;Czech&#x27;),\n (&#x27;cy&#x27;, &#x27;Welsh&#x27;),\n (&#x27;da&#x27;, &#x27;Danish&#x27;),\n (&#x27;de&#x27;, &#x27;German&#x27;),\n (&#x27;dsb&#x27;, &#x27;Lower Sorbian&#x27;),\n (&#x27;el&#x27;, &#x27;Greek&#x27;),\n (&#x27;en&#x27;, &#x27;English&#x27;),\n (&#x27;en-au&#x27;, &#x27;Australian English&#x27;),\n (&#x27;en-gb&#x27;, &#x27;British English&#x27;),\n (&#x27;eo&#x27;, &#x27;Esperanto&#x27;),\n (&#x27;es&#x27;, &#x27;Spanish&#x27;),\n (&#x27;es-ar&#x27;, &#x27;Argentinian Spanish&#x27;),\n (&#x27;es-co&#x27;, &#x27;Colombian Spanish&#x27;),\n (&#x27;es-mx&#x27;, &#x27;Mexican Spanish&#x27;),\n (&#x27;es-ni&#x27;, &#x27;Nicaraguan Spanish&#x27;),\n (&#x27;es-ve&#x27;, &#x27;Venezuelan Spanish&#x27;),\n (&#x27;et&#x27;, &#x27;Estonian&#x27;),\n (&#x27;eu&#x27;, &#x27;Basque&#x27;),\n (&#x27;fa&#x27;, &#x27;Persian&#x27;),\n (&#x27;fi&#x27;, &#x27;Finnish&#x27;),\n (&#x27;fr&#x27;, &#x27;French&#x27;),\n (&#x27;fy&#x27;, &#x27;Frisian&#x27;),\n (&#x27;ga&#x27;, &#x27;Irish&#x27;),\n (&#x27;gd&#x27;, &#x27;Scottish Gaelic&#x27;),\n (&#x27;gl&#x27;, &#x27;Galician&#x27;),\n (&#x27;he&#x27;, &#x27;Hebrew&#x27;),\n (&#x27;hi&#x27;, &#x27;Hindi&#x27;),\n (&#x27;hr&#x27;, &#x27;Croatian&#x27;),\n (&#x27;hsb&#x27;, &#x27;Upper Sorbian&#x27;),\n (&#x27;hu&#x27;, &#x27;Hungarian&#x27;),\n (&#x27;hy&#x27;, &#x27;Armenian&#x27;),\n (&#x27;ia&#x27;, &#x27;Interlingua&#x27;),\n (&#x27;id&#x27;, &#x27;Indonesian&#x27;),\n (&#x27;ig&#x27;, &#x27;Igbo&#x27;),\n (&#x27;io&#x27;, &#x27;Ido&#x27;),\n (&#x27;is&#x27;, &#x27;Icelandic&#x27;),\n (&#x27;it&#x27;, &#x27;Italian&#x27;),\n (&#x27;ja&#x27;, &#x27;Japanese&#x27;),\n (&#x27;ka&#x27;, &#x27;Georgian&#x27;),\n (&#x27;kab&#x27;, &#x27;Kabyle&#x27;),\n (&#x27;kk&#x27;, &#x27;Kazakh&#x27;),\n (&#x27;km&#x27;, &#x27;Khmer&#x27;),\n (&#x27;kn&#x27;, &#x27;Kannada&#x27;),\n (&#x27;ko&#x27;, &#x27;Korean&#x27;),\n (&#x27;ky&#x27;, &#x27;Kyrgyz&#x27;),\n (&#x27;lb&#x27;, &#x27;Luxembourgish&#x27;),\n (&#x27;lt&#x27;, &#x27;Lithuanian&#x27;),\n (&#x27;lv&#x27;, &#x27;Latvian&#x27;),\n (&#x27;mk&#x27;, &#x27;Macedonian&#x27;),\n (&#x27;ml&#x27;, &#x27;Malayalam&#x27;),\n (&#x27;mn&#x27;, &#x27;Mongolian&#x27;),\n (&#x27;mr&#x27;, &#x27;Marathi&#x27;),\n (&#x27;ms&#x27;, &#x27;Malay&#x27;),\n (&#x27;my&#x27;, &#x27;Burmese&#x27;),\n (&#x27;nb&#x27;, &#x27;Norwegian Bokmål&#x27;),\n (&#x27;ne&#x27;, &#x27;Nepali&#x27;),\n (&#x27;nl&#x27;, &#x27;Dutch&#x27;),\n (&#x27;nn&#x27;, &#x27;Norwegian Nynorsk&#x27;),\n (&#x27;os&#x27;, &#x27;Ossetic&#x27;),\n (&#x27;pa&#x27;, &#x27;Punjabi&#x27;),\n (&#x27;pl&#x27;, &#x27;Polish&#x27;),\n (&#x27;pt&#x27;, &#x27;Portuguese&#x27;),\n (&#x27;pt-br&#x27;, &#x27;Brazilian Portuguese&#x27;),\n (&#x27;ro&#x27;, &#x27;Romanian&#x27;),\n (&#x27;ru&#x27;, &#x27;Russian&#x27;),\n (&#x27;sk&#x27;, &#x27;Slovak&#x27;),\n (&#x27;sl&#x27;, &#x27;Slovenian&#x27;),\n (&#x27;sq&#x27;, &#x27;Albanian&#x27;),\n (&#x27;sr&#x27;, &#x27;Serbian&#x27;),\n (&#x27;sr-latn&#x27;, &#x27;Serbian Latin&#x27;),\n (&#x27;sv&#x27;, &#x27;Swedish&#x27;),\n (&#x27;sw&#x27;, &#x27;Swahili&#x27;),\n (&#x27;ta&#x27;, &#x27;Tamil&#x27;),\n (&#x27;te&#x27;, &#x27;Telugu&#x27;),\n (&#x27;tg&#x27;, &#x27;Tajik&#x27;),\n (&#x27;th&#x27;, &#x27;Thai&#x27;),\n (&#x27;tk&#x27;, &#x27;Turkmen&#x27;),\n (&#x27;tr&#x27;, &#x27;Turkish&#x27;),\n (&#x27;tt&#x27;, &#x27;Tatar&#x27;),\n (&#x27;udm&#x27;, &#x27;Udmurt&#x27;),\n (&#x27;uk&#x27;, &#x27;Ukrainian&#x27;),\n (&#x27;ur&#x27;, &#x27;Urdu&#x27;),\n (&#x27;uz&#x27;, &#x27;Uzbek&#x27;),\n (&#x27;vi&#x27;, &#x27;Vietnamese&#x27;),\n (&#x27;zh-hans&#x27;, &#x27;Simplified Chinese&#x27;),\n (&#x27;zh-hant&#x27;, &#x27;Traditional Chinese&#x27;)]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGES_BIDI</td>\n          <td class=\"code\"><pre>[&#x27;he&#x27;, &#x27;ar&#x27;, &#x27;ar-dz&#x27;, &#x27;fa&#x27;, &#x27;ur&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_CODE</td>\n          <td class=\"code\"><pre>&#x27;en-us&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_AGE</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_DOMAIN</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_HTTPONLY</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_NAME</td>\n          <td class=\"code\"><pre>&#x27;django_language&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_PATH</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_SAMESITE</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_SECURE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOCALE_PATHS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGGING</td>\n          <td class=\"code\"><pre>{&#x27;disable_existing_loggers&#x27;: False,\n &#x27;filters&#x27;: {&#x27;require_debug_true&#x27;: {&#x27;()&#x27;: &#x27;django.utils.log.RequireDebugTrue&#x27;}},\n &#x27;formatters&#x27;: {&#x27;django.server&#x27;: {&#x27;()&#x27;: &#x27;django.utils.log.ServerFormatter&#x27;,\n                                  &#x27;format&#x27;: &#x27;[%(server_time)s] %(message)s&#x27;},\n                &#x27;simple&#x27;: {&#x27;format&#x27;: &#x27;%(levelname)s %(message)s&#x27;},\n                &#x27;verbose&#x27;: {&#x27;format&#x27;: &#x27;%(levelname)s %(asctime)s &#x27;\n                                      &#x27;%(pathname)s-&gt;%(module)s:%(lineno)s &#x27;\n                                      &#x27;%(process)d %(thread)d %(message)s&#x27;}},\n &#x27;handlers&#x27;: {&#x27;console&#x27;: {&#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,\n                          &#x27;formatter&#x27;: &#x27;simple&#x27;,\n                          &#x27;level&#x27;: &#x27;DEBUG&#x27;},\n              &#x27;django.server&#x27;: {&#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,\n                                &#x27;formatter&#x27;: &#x27;django.server&#x27;,\n                                &#x27;level&#x27;: &#x27;INFO&#x27;},\n              &#x27;message&#x27;: {&#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,\n                          &#x27;formatter&#x27;: &#x27;verbose&#x27;,\n                          &#x27;level&#x27;: &#x27;DEBUG&#x27;}},\n &#x27;loggers&#x27;: {&#x27;django&#x27;: {&#x27;handlers&#x27;: [&#x27;console&#x27;], &#x27;propagate&#x27;: True},\n             &#x27;django.db.backends&#x27;: {&#x27;handlers&#x27;: [&#x27;console&#x27;], &#x27;level&#x27;: &#x27;INFO&#x27;},\n             &#x27;django.message.log&#x27;: {&#x27;handlers&#x27;: [&#x27;message&#x27;],\n                                    &#x27;level&#x27;: &#x27;INFO&#x27;,\n                                    &#x27;propagate&#x27;: False},\n             &#x27;django.request&#x27;: {&#x27;handlers&#x27;: [&#x27;console&#x27;],\n                                &#x27;level&#x27;: &#x27;ERROR&#x27;,\n                                &#x27;propagate&#x27;: False},\n             &#x27;django.server&#x27;: {&#x27;handlers&#x27;: [&#x27;django.server&#x27;],\n                               &#x27;level&#x27;: &#x27;INFO&#x27;,\n                               &#x27;propagate&#x27;: False}},\n &#x27;version&#x27;: 1}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGGING_CONFIG</td>\n          <td class=\"code\"><pre>&#x27;logging.config.dictConfig&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGIN_REDIRECT_URL</td>\n          <td class=\"code\"><pre>&#x27;/accounts/profile/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGIN_URL</td>\n          <td class=\"code\"><pre>&#x27;/accounts/login/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGOUT_REDIRECT_URL</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MANAGERS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MEDIA_ROOT</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MEDIA_URL</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MESSAGE_STORAGE</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.messages.storage.fallback.FallbackStorage&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MIDDLEWARE</td>\n          <td class=\"code\"><pre>[&#x27;django.middleware.security.SecurityMiddleware&#x27;,\n &#x27;django.contrib.sessions.middleware.SessionMiddleware&#x27;,\n &#x27;django.middleware.common.CommonMiddleware&#x27;,\n &#x27;django.middleware.csrf.CsrfViewMiddleware&#x27;,\n &#x27;django.contrib.auth.middleware.AuthenticationMiddleware&#x27;,\n &#x27;django.contrib.messages.middleware.MessageMiddleware&#x27;,\n &#x27;django.middleware.clickjacking.XFrameOptionsMiddleware&#x27;,\n &#x27;corsheaders.middleware.CorsMiddleware&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MIGRATION_MODULES</td>\n          <td class=\"code\"><pre>{}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MONTH_DAY_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;F j&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>NUMBER_GROUPING</td>\n          <td class=\"code\"><pre>0</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PASSWORD_HASHERS</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PASSWORD_RESET_TIMEOUT</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PREPEND_WWW</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>ROOT_URLCONF</td>\n          <td class=\"code\"><pre>&#x27;api_saving.urls&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECRET_KEY</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECRET_KEY_FALLBACKS</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_CONTENT_TYPE_NOSNIFF</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_CROSS_ORIGIN_OPENER_POLICY</td>\n          <td class=\"code\"><pre>&#x27;same-origin&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_HSTS_INCLUDE_SUBDOMAINS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_HSTS_PRELOAD</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_HSTS_SECONDS</td>\n          <td class=\"code\"><pre>0</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_PROXY_SSL_HEADER</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_REDIRECT_EXEMPT</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_REFERRER_POLICY</td>\n          <td class=\"code\"><pre>&#x27;same-origin&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_SSL_HOST</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_SSL_REDIRECT</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_EMAIL</td>\n          <td class=\"code\"><pre>&#x27;root@localhost&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_CACHE_ALIAS</td>\n          <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_AGE</td>\n          <td class=\"code\"><pre>1209600</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_DOMAIN</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_HTTPONLY</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_NAME</td>\n          <td class=\"code\"><pre>&#x27;sessionid&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_PATH</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_SAMESITE</td>\n          <td class=\"code\"><pre>&#x27;Lax&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_SECURE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_ENGINE</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.sessions.backends.db&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_EXPIRE_AT_BROWSER_CLOSE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_FILE_PATH</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_SAVE_EVERY_REQUEST</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_SERIALIZER</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.sessions.serializers.JSONSerializer&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SETTINGS_MODULE</td>\n          <td class=\"code\"><pre>&#x27;api_saving.settings&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SHORT_DATETIME_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;m/d/Y P&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SHORT_DATE_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;m/d/Y&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SIGNING_BACKEND</td>\n          <td class=\"code\"><pre>&#x27;django.core.signing.TimestampSigner&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SILENCED_SYSTEM_CHECKS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATICFILES_DIRS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATICFILES_FINDERS</td>\n          <td class=\"code\"><pre>[&#x27;django.contrib.staticfiles.finders.FileSystemFinder&#x27;,\n &#x27;django.contrib.staticfiles.finders.AppDirectoriesFinder&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATICFILES_STORAGE</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.staticfiles.storage.StaticFilesStorage&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATIC_ROOT</td>\n          <td class=\"code\"><pre>&#x27;./static/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATIC_URL</td>\n          <td class=\"code\"><pre>&#x27;/static/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TEMPLATES</td>\n          <td class=\"code\"><pre>[{&#x27;APP_DIRS&#x27;: True,\n  &#x27;BACKEND&#x27;: &#x27;django.template.backends.django.DjangoTemplates&#x27;,\n  &#x27;DIRS&#x27;: [&#x27;/code/src/templates&#x27;],\n  &#x27;OPTIONS&#x27;: {&#x27;context_processors&#x27;: [&#x27;django.template.context_processors.debug&#x27;,\n                                     &#x27;django.template.context_processors.request&#x27;,\n                                     &#x27;django.contrib.auth.context_processors.auth&#x27;,\n                                     &#x27;django.contrib.messages.context_processors.messages&#x27;]}}]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TEST_NON_SERIALIZED_APPS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TEST_RUNNER</td>\n          <td class=\"code\"><pre>&#x27;django.test.runner.DiscoverRunner&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>THOUSAND_SEPARATOR</td>\n          <td class=\"code\"><pre>&#x27;,&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TIME_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;P&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TIME_INPUT_FORMATS</td>\n          <td class=\"code\"><pre>[&#x27;%H:%M:%S&#x27;, &#x27;%H:%M:%S.%f&#x27;, &#x27;%H:%M&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TIME_ZONE</td>\n          <td class=\"code\"><pre>&#x27;America/Mexico_City&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_DEPRECATED_PYTZ</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_I18N</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_L10N</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_THOUSAND_SEPARATOR</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_TZ</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_X_FORWARDED_HOST</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_X_FORWARDED_PORT</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>WSGI_APPLICATION</td>\n          <td class=\"code\"><pre>&#x27;api_saving.wsgi.application&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>X_FRAME_OPTIONS</td>\n          <td class=\"code\"><pre>&#x27;DENY&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>YEAR_MONTH_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;F Y&#x27;</pre></td>\n        </tr>\n      \n    </tbody>\n  </table>\n\n</div>\n\n  <div id=\"explanation\">\n    <p>\n      You’re seeing this error because you have <code>DEBUG = True</code> in your\n      Django settings file. Change that to <code>False</code>, and Django will\n      display a standard page generated by the handler for this status code.\n    </p>\n  </div>\n\n</body>\n</html>\n"},{"id":"077ea490-b061-4663-ab69-a2ebafd5474c","name":"Crear proyecto","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"Viaje a japon\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"\",\r\n    \"to_account\": \"\", \r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Internal Server Error","code":500,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 27 Jun 2025 20:03:52 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"180013"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"a1c4aa28-7e8e-4faa-8833-9a2406ce6de7"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"M1veTEyBIAMEa8A="},{"key":"X-Amzn-Trace-Id","value":"Root=1-685ef927-41ae7314208a8d8365a058da;Parent=3bc05eb8a7e17876;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n  <meta name=\"robots\" content=\"NONE,NOARCHIVE\">\n  <title>ProgrammingError\n          at /api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/</title>\n  <style type=\"text/css\">\n    html * { padding:0; margin:0; }\n    body * { padding:10px 20px; }\n    body * * { padding:0; }\n    body { font:small sans-serif; background-color:#fff; color:#000; }\n    body>div { border-bottom:1px solid #ddd; }\n    h1 { font-weight:normal; }\n    h2 { margin-bottom:.8em; }\n    h3 { margin:1em 0 .5em 0; }\n    h4 { margin:0 0 .5em 0; font-weight: normal; }\n    code, pre { font-size: 100%; white-space: pre-wrap; word-break: break-word; }\n    summary { cursor: pointer; }\n    table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }\n    tbody td, tbody th { vertical-align:top; padding:2px 3px; }\n    thead th {\n      padding:1px 6px 1px 3px; background:#fefefe; text-align:left;\n      font-weight:normal; font-size:11px; border:1px solid #ddd;\n    }\n    tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }\n    table.vars { margin:5px 10px 2px 40px; width: auto; }\n    table.vars td, table.req td { font-family:monospace; }\n    table td.code { width:100%; }\n    table td.code pre { overflow:hidden; }\n    table.source th { color:#666; }\n    table.source td { font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }\n    ul.traceback { list-style-type:none; color: #222; }\n    ul.traceback li.cause { word-break: break-word; }\n    ul.traceback li.frame { padding-bottom:1em; color:#4f4f4f; }\n    ul.traceback li.user { background-color:#e0e0e0; color:#000 }\n    div.context { padding:10px 0; overflow:hidden; }\n    div.context ol { padding-left:30px; margin:0 10px; list-style-position: inside; }\n    div.context ol li { font-family:monospace; white-space:pre; color:#777; cursor:pointer; padding-left: 2px; }\n    div.context ol li pre { display:inline; }\n    div.context ol.context-line li { color:#464646; background-color:#dfdfdf; padding: 3px 2px; }\n    div.context ol.context-line li span { position:absolute; right:32px; }\n    .user div.context ol.context-line li { background-color:#bbb; color:#000; }\n    .user div.context ol li { color:#666; }\n    div.commands, summary.commands { margin-left: 40px; }\n    div.commands a, summary.commands { color:#555; text-decoration:none; }\n    .user div.commands a { color: black; }\n    #summary { background: #ffc; }\n    #summary h2 { font-weight: normal; color: #666; }\n    #explanation { background:#eee; }\n    #template, #template-not-exist { background:#f6f6f6; }\n    #template-not-exist ul { margin: 0 0 10px 20px; }\n    #template-not-exist .postmortem-section { margin-bottom: 3px; }\n    #unicode-hint { background:#eee; }\n    #traceback { background:#eee; }\n    #requestinfo { background:#f6f6f6; padding-left:120px; }\n    #summary table { border:none; background:transparent; }\n    #requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }\n    #requestinfo h3 { margin-bottom:-1em; }\n    .error { background: #ffc; }\n    .specific { color:#cc3300; font-weight:bold; }\n    h2 span.commands { font-size:.7em; font-weight:normal; }\n    span.commands a:link {color:#5E5694;}\n    pre.exception_value { font-family: sans-serif; color: #575757; font-size: 1.5em; margin: 10px 0 10px 0; }\n    .append-bottom { margin-bottom: 10px; }\n    .fname { user-select: all; }\n  </style>\n  \n  <script>\n    function hideAll(elems) {\n      for (var e = 0; e < elems.length; e++) {\n        elems[e].style.display = 'none';\n      }\n    }\n    window.onload = function() {\n      hideAll(document.querySelectorAll('ol.pre-context'));\n      hideAll(document.querySelectorAll('ol.post-context'));\n      hideAll(document.querySelectorAll('div.pastebin'));\n    }\n    function toggle() {\n      for (var i = 0; i < arguments.length; i++) {\n        var e = document.getElementById(arguments[i]);\n        if (e) {\n          e.style.display = e.style.display == 'none' ? 'block': 'none';\n        }\n      }\n      return false;\n    }\n    function switchPastebinFriendly(link) {\n      s1 = \"Switch to copy-and-paste view\";\n      s2 = \"Switch back to interactive view\";\n      link.textContent = link.textContent.trim() == s1 ? s2: s1;\n      toggle('browserTraceback', 'pastebinTraceback');\n      return false;\n    }\n  </script>\n  \n</head>\n<body>\n<div id=\"summary\">\n  <h1>ProgrammingError\n       at /api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/</h1>\n  <pre class=\"exception_value\">permission denied for table projects_metrics\n</pre>\n  <table class=\"meta\">\n\n    <tr>\n      <th>Request Method:</th>\n      <td>POST</td>\n    </tr>\n    <tr>\n      <th>Request URL:</th>\n      <td>http://internal-k8s-xerpaheadlessgrou-205ab0f1be-396527338.us-east-1.elb.amazonaws.com/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/</td>\n    </tr>\n\n    <tr>\n      <th>Django Version:</th>\n      <td>4.1.10</td>\n    </tr>\n\n    <tr>\n      <th>Exception Type:</th>\n      <td>ProgrammingError</td>\n    </tr>\n\n\n    <tr>\n      <th>Exception Value:</th>\n      <td><pre>permission denied for table projects_metrics\n</pre></td>\n    </tr>\n\n\n    <tr>\n      <th>Exception Location:</th>\n      <td><span class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</span>, line 89, in _execute</td>\n    </tr>\n\n\n    <tr>\n      <th>Raised during:</th>\n      <td>project.views.views.ProjectView</td>\n    </tr>\n\n    <tr>\n      <th>Python Executable:</th>\n      <td>/usr/local/bin/python</td>\n    </tr>\n    <tr>\n      <th>Python Version:</th>\n      <td>3.11.3</td>\n    </tr>\n    <tr>\n      <th>Python Path:</th>\n      <td><pre>[&#x27;/code/src&#x27;,\n &#x27;/code&#x27;,\n &#x27;/usr/local/bin&#x27;,\n &#x27;/usr/local/lib/python311.zip&#x27;,\n &#x27;/usr/local/lib/python3.11&#x27;,\n &#x27;/usr/local/lib/python3.11/lib-dynload&#x27;,\n &#x27;/usr/local/lib/python3.11/site-packages&#x27;]</pre></td>\n    </tr>\n    <tr>\n      <th>Server time:</th>\n      <td>Fri, 27 Jun 2025 14:03:52 -0600</td>\n    </tr>\n  </table>\n</div>\n\n\n\n\n<div id=\"traceback\">\n  <h2>Traceback <span class=\"commands\"><a href=\"#\" onclick=\"return switchPastebinFriendly(this);\">\n    Switch to copy-and-paste view</a></span>\n  </h2>\n  <div id=\"browserTraceback\">\n    <ul class=\"traceback\">\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 89, in _execute\n          \n\n          \n            <div class=\"context\" id=\"c139882793061760\">\n              \n                <ol start=\"82\" class=\"pre-context\" id=\"pre139882793061760\">\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>            if params is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>                # params default might be backend specific.</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>                return self.cursor.execute(sql)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>            else:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"89\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>                return self.cursor.execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='90' class=\"post-context\" id=\"post139882793061760\">\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>    def _executemany(self, sql, param_list, *ignored_wrapper_args):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>            return self.cursor.executemany(sql, param_list)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793061760\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>ignored_wrapper_args</td>\n                    <td class=\"code\"><pre>(False,\n {&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n  &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;})</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c&#x27;),\n UUID(&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;),\n UUID(&#x27;64c5159f-12bd-4e50-b208-172ddd7e2ebd&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 20, 3, 52, 99354, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n          <li class=\"cause\"><h3>\n          \n            The above exception (permission denied for table projects_metrics\n) was the direct cause of the following exception:\n          \n        </h3></li>\n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py</code>, line 56, in inner\n          \n\n          \n            <div class=\"context\" id=\"c139882793067264\">\n              \n                <ol start=\"49\" class=\"pre-context\" id=\"pre139882793067264\">\n                \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>        return inner</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>    else:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>        @wraps(get_response)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>        def inner(request):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>            try:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"56\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>                response = get_response(request)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='57' class=\"post-context\" id=\"post139882793067264\">\n                  \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>            except Exception as exc:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>                response = response_for_exception(request, exc)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>            return response</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre>        return inner</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067264', 'post139882793067264')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793067264\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>exc</td>\n                    <td class=\"code\"><pre>ProgrammingError(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>get_response</td>\n                    <td class=\"code\"><pre>&lt;bound method BaseHandler._get_response of &lt;django.core.handlers.wsgi.WSGIHandler object at 0x7f390143a210&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;WSGIRequest: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py</code>, line 197, in _get_response\n          \n\n          \n            <div class=\"context\" id=\"c139882793069952\">\n              \n                <ol start=\"190\" class=\"pre-context\" id=\"pre139882793069952\">\n                \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>        if response is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>            wrapped_callback = self.make_view_atomic(callback)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>            # If it is an asynchronous view, run it in a subthread.</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>            if asyncio.iscoroutinefunction(wrapped_callback):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>                wrapped_callback = async_to_sync(wrapped_callback)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>            try:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"197\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>                response = wrapped_callback(request, *callback_args, **callback_kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='198' class=\"post-context\" id=\"post139882793069952\">\n                  \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>            except Exception as e:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>                response = self.process_exception_by_middleware(e, request)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>                if response is None:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>                    raise</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069952', 'post139882793069952')\"><pre>        # Complain if the view returned None (a common error).</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793069952\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>callback</td>\n                    <td class=\"code\"><pre>&lt;function View.as_view.&lt;locals&gt;.view at 0x7f3900ccf6a0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>callback_args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>callback_kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>middleware_method</td>\n                    <td class=\"code\"><pre>&lt;bound method CorsMiddleware.process_view of &lt;CorsMiddleware get_response=BaseHandler._get_response&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;WSGIRequest: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>response</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.core.handlers.wsgi.WSGIHandler object at 0x7f390143a210&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>wrapped_callback</td>\n                    <td class=\"code\"><pre>&lt;function View.as_view.&lt;locals&gt;.view at 0x7f3900ccf6a0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/views/decorators/csrf.py</code>, line 55, in wrapped_view\n          \n\n          \n            <div class=\"context\" id=\"c139882793069888\">\n              \n                <ol start=\"48\" class=\"pre-context\" id=\"pre139882793069888\">\n                \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre>def csrf_exempt(view_func):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre>    &quot;&quot;&quot;Mark a view function as being exempt from the CSRF view protection.&quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre>    # view_func.csrf_exempt = True would also work, but decorators are nicer</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre>    # if they don&#x27;t have side effects, so return a new function.</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre>    def wrapped_view(*args, **kwargs):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"55\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre>        return view_func(*args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='56' class=\"post-context\" id=\"post139882793069888\">\n                  \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre>    wrapped_view.csrf_exempt = True</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069888', 'post139882793069888')\"><pre>    return wraps(view_func)(wrapped_view)</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793069888\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>(&lt;WSGIRequest: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;,)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>view_func</td>\n                    <td class=\"code\"><pre>&lt;function View.as_view.&lt;locals&gt;.view at 0x7f39010153a0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/views/generic/base.py</code>, line 103, in view\n          \n\n          \n            <div class=\"context\" id=\"c139882794940288\">\n              \n                <ol start=\"96\" class=\"pre-context\" id=\"pre139882794940288\">\n                \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>            self = cls(**initkwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>            self.setup(request, *args, **kwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>            if not hasattr(self, &quot;request&quot;):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>                raise AttributeError(</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>                    &quot;%s instance has no &#x27;request&#x27; attribute. Did you override &quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>                    &quot;setup() and forget to call super()?&quot; % cls.__name__</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>                )</pre></li>\n                \n                </ol>\n              \n              <ol start=\"103\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>            return self.dispatch(request, *args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='104' class=\"post-context\" id=\"post139882794940288\">\n                  \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>        view.view_class = cls</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>        view.view_initkwargs = initkwargs</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>        # __name__ and __qualname__ are intentionally left unchanged as</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794940288', 'post139882794940288')\"><pre>        # view_class should be used to robustly determine the name of the view</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794940288\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>cls</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;project.views.views.ProjectView&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>initkwargs</td>\n                    <td class=\"code\"><pre>{}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;WSGIRequest: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 509, in dispatch\n          \n\n          \n            <div class=\"context\" id=\"c139882794718720\">\n              \n                <ol start=\"502\" class=\"pre-context\" id=\"pre139882794718720\">\n                \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>                                  self.http_method_not_allowed)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>            else:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>                handler = self.http_method_not_allowed</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>            response = handler(request, *args, **kwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>        except Exception as exc:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"509\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>            response = self.handle_exception(exc)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='510' class=\"post-context\" id=\"post139882794718720\">\n                  \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>        self.response = self.finalize_response(request, response, *args, **kwargs)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>        return self.response</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>    def options(self, request, *args, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794718720', 'post139882794718720')\"><pre>        &quot;&quot;&quot;</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794718720\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>handler</td>\n                    <td class=\"code\"><pre>&lt;bound method ProjectView.post of &lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 469, in handle_exception\n          \n\n          \n            <div class=\"context\" id=\"c139882794716992\">\n              \n                <ol start=\"462\" class=\"pre-context\" id=\"pre139882794716992\">\n                \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>        exception_handler = self.get_exception_handler()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>        context = self.get_exception_handler_context()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>        response = exception_handler(exc, context)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>        if response is None:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"469\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>            self.raise_uncaught_exception(exc)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='470' class=\"post-context\" id=\"post139882794716992\">\n                  \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>        response.exception = True</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>        return response</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>    def raise_uncaught_exception(self, exc):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794716992', 'post139882794716992')\"><pre>        if settings.DEBUG:</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794716992\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>context</td>\n                    <td class=\"code\"><pre>{&#x27;args&#x27;: (),\n &#x27;kwargs&#x27;: {&#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;},\n &#x27;request&#x27;: &lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;,\n &#x27;view&#x27;: &lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exc</td>\n                    <td class=\"code\"><pre>ProgrammingError(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exception_handler</td>\n                    <td class=\"code\"><pre>&lt;function exception_handler at 0x7f3900fdf740&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>response</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 480, in raise_uncaught_exception\n          \n\n          \n            <div class=\"context\" id=\"c139882794861056\">\n              \n                <ol start=\"473\" class=\"pre-context\" id=\"pre139882794861056\">\n                \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>    def raise_uncaught_exception(self, exc):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>        if settings.DEBUG:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>            request = self.request</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>            renderer_format = getattr(request.accepted_renderer, &#x27;format&#x27;)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>            use_plaintext_traceback = renderer_format not in (&#x27;html&#x27;, &#x27;api&#x27;, &#x27;admin&#x27;)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>            request.force_plaintext_errors(use_plaintext_traceback)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"480\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>        raise exc</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='481' class=\"post-context\" id=\"post139882794861056\">\n                  \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>    # Note: Views are made CSRF exempt from within `as_view` as to prevent</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>    # accidental removal of this exemption in cases where `dispatch` needs to</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>    # be overridden.</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>    def dispatch(self, request, *args, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794861056', 'post139882794861056')\"><pre>        &quot;&quot;&quot;</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794861056\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>exc</td>\n                    <td class=\"code\"><pre>ProgrammingError(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>renderer_format</td>\n                    <td class=\"code\"><pre>&#x27;json&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>use_plaintext_traceback</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 506, in dispatch\n          \n\n          \n            <div class=\"context\" id=\"c139882793067328\">\n              \n                <ol start=\"499\" class=\"pre-context\" id=\"pre139882793067328\">\n                \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>            # Get the appropriate handler method</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>            if request.method.lower() in self.http_method_names:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>                handler = getattr(self, request.method.lower(),</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>                                  self.http_method_not_allowed)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>            else:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>                handler = self.http_method_not_allowed</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre></pre></li>\n                \n                </ol>\n              \n              <ol start=\"506\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>            response = handler(request, *args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='507' class=\"post-context\" id=\"post139882793067328\">\n                  \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>        except Exception as exc:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>            response = self.handle_exception(exc)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>        self.response = self.finalize_response(request, response, *args, **kwargs)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067328', 'post139882793067328')\"><pre>        return self.response</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793067328\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>handler</td>\n                    <td class=\"code\"><pre>&lt;bound method ProjectView.post of &lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/code/src/project/views/views.py</code>, line 173, in post\n          \n\n          \n            <div class=\"context\" id=\"c139882793066816\">\n              \n                <ol start=\"166\" class=\"pre-context\" id=\"pre139882793066816\">\n                \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>            valid_fields = validator.validate_fields()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>        if not valid_fields:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>            return Response(&#x27;Invalid fields&#x27;, status=status.HTTP_400_BAD_REQUEST)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>        serializer.save()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre></pre></li>\n                \n                </ol>\n              \n              <ol start=\"173\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>        ProjectMetric.create_project_metric(serializer.instance.project_status_id, user_id, serializer.instance)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='174' class=\"post-context\" id=\"post139882793066816\">\n                  \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>        </pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>        return Response(serializer.data, status=status.HTTP_201_CREATED)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>class ProjectDetail(RetrieveUpdateDestroyAPIView):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066816', 'post139882793066816')\"><pre>    &quot;&quot;&quot;Gets or updates a project.&quot;&quot;&quot;</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793066816\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>account_validation</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>have_required_fields</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>missing_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project</td>\n                    <td class=\"code\"><pre>{&#x27;from_account&#x27;: None,\n &#x27;goal_date&#x27;: &#x27;2030-10-30&#x27;,\n &#x27;id&#x27;: &#x27;6dd5bbb8-12a8-4205-83eb-66a6d55cebf4&#x27;,\n &#x27;project_category&#x27;: &#x27;b95487f8-4d83-4e24-ad1a-951870596539&#x27;,\n &#x27;project_category_id&#x27;: &#x27;b95487f8-4d83-4e24-ad1a-951870596539&#x27;,\n &#x27;project_config&#x27;: UUID(&#x27;deead368-205e-464b-9d8c-82cb93517eef&#x27;),\n &#x27;project_name&#x27;: &#x27;Viaje a japon&#x27;,\n &#x27;project_status&#x27;: &#x27;8df908b6-8ab3-11ed-a1eb-0242ac120002&#x27;,\n &#x27;to_account&#x27;: None,\n &#x27;total&#x27;: 20000,\n &#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_config_id</td>\n                    <td class=\"code\"><pre>UUID(&#x27;deead368-205e-464b-9d8c-82cb93517eef&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_status_active_id</td>\n                    <td class=\"code\"><pre>&#x27;f2a34b3c-5eea-4bfd-a18e-06d675826486&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_status_setup_id</td>\n                    <td class=\"code\"><pre>&#x27;8df908b6-8ab3-11ed-a1eb-0242ac120002&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: POST &#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>required_fields</td>\n                    <td class=\"code\"><pre>[&#x27;project_name&#x27;, &#x27;goal_date&#x27;, &#x27;total&#x27;]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectView object at 0x7f39004d7110&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>serializer</td>\n                    <td class=\"code\"><pre>ProjectPostSerializer(data={&#x27;project_name&#x27;: &#x27;Viaje a japon&#x27;, &#x27;project_category_id&#x27;: &#x27;b95487f8-4d83-4e24-ad1a-951870596539&#x27;, &#x27;goal_date&#x27;: &#x27;2030-10-30&#x27;, &#x27;from_account&#x27;: None, &#x27;to_account&#x27;: None, &#x27;total&#x27;: 20000, &#x27;id&#x27;: &#x27;6dd5bbb8-12a8-4205-83eb-66a6d55cebf4&#x27;, &#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;, &#x27;project_status&#x27;: &#x27;8df908b6-8ab3-11ed-a1eb-0242ac120002&#x27;, &#x27;project_category&#x27;: &#x27;b95487f8-4d83-4e24-ad1a-951870596539&#x27;, &#x27;project_config&#x27;: UUID(&#x27;deead368-205e-464b-9d8c-82cb93517eef&#x27;)}):\n    id = UUIDField(read_only=True)\n    goal_date = DateField(allow_null=True, required=False)\n    total = DecimalField(allow_null=True, decimal_places=2, default=1, max_digits=14, required=False)\n    project_name = CharField(allow_null=True)\n    user_id = UUIDField()\n    progress = DecimalField(decimal_places=2, max_digits=14, required=False)\n    processing = DecimalField(decimal_places=2, max_digits=14, required=False)\n    pending = DecimalField(decimal_places=2, max_digits=14, required=False)\n    from_account = CharField(allow_null=True, max_length=60, required=False)\n    to_account = CharField(allow_null=True, max_length=60, required=False)\n    investment_returns = DecimalField(decimal_places=2, max_digits=14, required=False)\n    created_at = DateTimeField(read_only=True)\n    updated_at = DateTimeField(read_only=True)\n    deleted_at = DateTimeField(allow_null=True, required=False)\n    project_category = PrimaryKeyRelatedField(queryset=Item.objects.all(), required=False)\n    project_status = PrimaryKeyRelatedField(queryset=Item.objects.all(), required=False)\n    project_config = PrimaryKeyRelatedField(queryset=Item.objects.all())</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>user_id</td>\n                    <td class=\"code\"><pre>&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>valid_fields</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>validator</td>\n                    <td class=\"code\"><pre>&lt;project.validators.ProjectValidator object at 0x7f39004aded0&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/code/src/metric/service/project_metric_service.py</code>, line 14, in create_project_metric\n          \n\n          \n            <div class=\"context\" id=\"c139882793067200\">\n              \n                <ol start=\"7\" class=\"pre-context\" id=\"pre139882793067200\">\n                \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>    @staticmethod</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>    def create_project_metric(project_status_id, user_id, project ):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>        config_completed_datetime = None</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>        if str(project_status_id) == PROJECT_STATUS_ACTIVE_ID:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>            config_completed_datetime = datetime.now()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>        </pre></li>\n                \n                </ol>\n              \n              <ol start=\"14\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>        ProjectsMetrics.objects.create(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='15' class=\"post-context\" id=\"post139882793067200\">\n                  \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>            user_id=user_id,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>            project=project,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>            config_completed_datetime = config_completed_datetime</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>        )</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067200', 'post139882793067200')\"><pre>    @staticmethod</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793067200\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>config_completed_datetime</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project</td>\n                    <td class=\"code\"><pre>&lt;Project: Project object (64c5159f-12bd-4e50-b208-172ddd7e2ebd)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_status_id</td>\n                    <td class=\"code\"><pre>UUID(&#x27;8df908b6-8ab3-11ed-a1eb-0242ac120002&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>user_id</td>\n                    <td class=\"code\"><pre>&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/manager.py</code>, line 85, in manager_method\n          \n\n          \n            <div class=\"context\" id=\"c139882796059264\">\n              \n                <ol start=\"78\" class=\"pre-context\" id=\"pre139882796059264\">\n                \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>    def check(self, **kwargs):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>        return []</pre></li>\n                \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>    @classmethod</pre></li>\n                \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>    def _get_queryset_methods(cls, queryset_class):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>        def create_method(name, method):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>            def manager_method(self, *args, **kwargs):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"85\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>                return getattr(self.get_queryset(), name)(*args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='86' class=\"post-context\" id=\"post139882796059264\">\n                  \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>            manager_method.__name__ = method.__name__</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>            manager_method.__doc__ = method.__doc__</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>            return manager_method</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882796059264', 'post139882796059264')\"><pre>        new_methods = {}</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882796059264\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;config_completed_datetime&#x27;: None,\n &#x27;project&#x27;: &lt;Project: Project object (64c5159f-12bd-4e50-b208-172ddd7e2ebd)&gt;,\n &#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>name</td>\n                    <td class=\"code\"><pre>&#x27;create&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.manager.Manager object at 0x7f39004ae350&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/query.py</code>, line 671, in create\n          \n\n          \n            <div class=\"context\" id=\"c139882793067008\">\n              \n                <ol start=\"664\" class=\"pre-context\" id=\"pre139882793067008\">\n                \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>    def create(self, **kwargs):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        Create a new object with the given kwargs, saving it to the database</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        and returning the created object.</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        obj = self.model(**kwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        self._for_write = True</pre></li>\n                \n                </ol>\n              \n              <ol start=\"671\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        obj.save(force_insert=True, using=self.db)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='672' class=\"post-context\" id=\"post139882793067008\">\n                  \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        return obj</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>    async def acreate(self, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>        return await sync_to_async(self.create)(**kwargs)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793067008', 'post139882793067008')\"><pre>    def _prepare_for_bulk_create(self, objs):</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793067008\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;config_completed_datetime&#x27;: None,\n &#x27;project&#x27;: &lt;Project: Project object (64c5159f-12bd-4e50-b208-172ddd7e2ebd)&gt;,\n &#x27;user_id&#x27;: &#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>obj</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>Error in formatting: ProgrammingError: permission denied for table projects_metrics\n</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 812, in save\n          \n\n          \n            <div class=\"context\" id=\"c139882794876096\">\n              \n                <ol start=\"805\" class=\"pre-context\" id=\"pre139882794876096\">\n                \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>            for field in self._meta.concrete_fields:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>                if not field.primary_key and not hasattr(field, &quot;through&quot;):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>                    field_names.add(field.attname)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>            loaded_fields = field_names.difference(deferred_fields)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>            if loaded_fields:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>                update_fields = frozenset(loaded_fields)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre></pre></li>\n                \n                </ol>\n              \n              <ol start=\"812\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>        self.save_base(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='813' class=\"post-context\" id=\"post139882794876096\">\n                  \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>            using=using,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>            force_insert=force_insert,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>            force_update=force_update,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>            update_fields=update_fields,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre>        )</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794876096', 'post139882794876096')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794876096\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>deferred_fields</td>\n                    <td class=\"code\"><pre>set()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_insert</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_update</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 863, in save_base\n          \n\n          \n            <div class=\"context\" id=\"c139882793066176\">\n              \n                <ol start=\"856\" class=\"pre-context\" id=\"pre139882793066176\">\n                \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>            context_manager = transaction.atomic(using=using, savepoint=False)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>        else:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>            context_manager = transaction.mark_for_rollback_on_error(using=using)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>        with context_manager:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>            parent_inserted = False</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>            if not raw:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>                parent_inserted = self._save_parents(cls, using, update_fields)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"863\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>            updated = self._save_table(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='864' class=\"post-context\" id=\"post139882793066176\">\n                  \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>                raw,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>                cls,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>                force_insert or parent_inserted,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>                force_update,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>                using,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793066176', 'post139882793066176')\"><pre>                update_fields,</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793066176\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>cls</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;metric.models.ProjectsMetrics&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>context_manager</td>\n                    <td class=\"code\"><pre>&lt;contextlib._GeneratorContextManager object at 0x7f3900458490&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_insert</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_update</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>meta</td>\n                    <td class=\"code\"><pre>&lt;Options for ProjectsMetrics&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>origin</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;metric.models.ProjectsMetrics&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>parent_inserted</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 1006, in _save_table\n          \n\n          \n            <div class=\"context\" id=\"c139882794989568\">\n              \n                <ol start=\"999\" class=\"pre-context\" id=\"pre139882794989568\">\n                \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>                    )[&quot;_order__max&quot;]</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>                )</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>            fields = meta.local_concrete_fields</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>            if not pk_set:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>                fields = [f for f in fields if f is not meta.auto_field]</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>            returning_fields = meta.db_returning_fields</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1006\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>            results = self._do_insert(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1007' class=\"post-context\" id=\"post139882794989568\">\n                  \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>                cls._base_manager, using, fields, returning_fields, raw</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>            )</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>            if results:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>                for value, field in zip(results[0], returning_fields):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>                    setattr(self, field.attname, value)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794989568', 'post139882794989568')\"><pre>        return updated</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794989568\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>cls</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;metric.models.ProjectsMetrics&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>fields</td>\n                    <td class=\"code\"><pre>(&lt;django.db.models.fields.UUIDField: id&gt;,\n &lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.DateTimeField: updated_at&gt;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_insert</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_update</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>meta</td>\n                    <td class=\"code\"><pre>&lt;Options for ProjectsMetrics&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>non_pks</td>\n                    <td class=\"code\"><pre>[&lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.DateTimeField: updated_at&gt;]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>pk_set</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>pk_val</td>\n                    <td class=\"code\"><pre>UUID(&#x27;72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>updated</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 1047, in _do_insert\n          \n\n          \n            <div class=\"context\" id=\"c139882795035840\">\n              \n                <ol start=\"1040\" class=\"pre-context\" id=\"pre139882795035840\">\n                \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>        return filtered._update(values) &gt; 0</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>    def _do_insert(self, manager, using, fields, returning_fields, raw):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>        Do an INSERT. If returning_fields is defined then this method should</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>        return the newly created data for the model.</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1047\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>        return manager._insert(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1048' class=\"post-context\" id=\"post139882795035840\">\n                  \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>            [self],</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>            fields=fields,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>            returning_fields=returning_fields,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>            using=using,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>            raw=raw,</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795035840', 'post139882795035840')\"><pre>        )</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882795035840\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>fields</td>\n                    <td class=\"code\"><pre>(&lt;django.db.models.fields.UUIDField: id&gt;,\n &lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.DateTimeField: updated_at&gt;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>manager</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.manager.Manager object at 0x7f39004adf90&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;ProjectsMetrics: ProjectsMetrics object (72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/manager.py</code>, line 85, in manager_method\n          \n\n          \n            <div class=\"context\" id=\"c139882794865920\">\n              \n                <ol start=\"78\" class=\"pre-context\" id=\"pre139882794865920\">\n                \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>    def check(self, **kwargs):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>        return []</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>    @classmethod</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>    def _get_queryset_methods(cls, queryset_class):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>        def create_method(name, method):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>            def manager_method(self, *args, **kwargs):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"85\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>                return getattr(self.get_queryset(), name)(*args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='86' class=\"post-context\" id=\"post139882794865920\">\n                  \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>            manager_method.__name__ = method.__name__</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>            manager_method.__doc__ = method.__doc__</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>            return manager_method</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794865920', 'post139882794865920')\"><pre>        new_methods = {}</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794865920\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>([&lt;ProjectsMetrics: ProjectsMetrics object (72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c)&gt;],)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;fields&#x27;: (&lt;django.db.models.fields.UUIDField: id&gt;,\n            &lt;django.db.models.fields.UUIDField: user_id&gt;,\n            &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n            &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n            &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n            &lt;django.db.models.fields.DateTimeField: updated_at&gt;),\n &#x27;raw&#x27;: False,\n &#x27;returning_fields&#x27;: [],\n &#x27;using&#x27;: &#x27;default&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>name</td>\n                    <td class=\"code\"><pre>&#x27;_insert&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.manager.Manager object at 0x7f39004adf90&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/query.py</code>, line 1791, in _insert\n          \n\n          \n            <div class=\"context\" id=\"c139882794491712\">\n              \n                <ol start=\"1784\" class=\"pre-context\" id=\"pre139882794491712\">\n                \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>        query = sql.InsertQuery(</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>            self.model,</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>            on_conflict=on_conflict,</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>            update_fields=update_fields,</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>            unique_fields=unique_fields,</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>        )</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>        query.insert_values(fields, objs, raw=raw)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1791\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>        return query.get_compiler(using=using).execute_sql(returning_fields)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1792' class=\"post-context\" id=\"post139882794491712\">\n                  \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>    _insert.alters_data = True</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>    _insert.queryset_only = False</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>    def _batched_insert(</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794491712', 'post139882794491712')\"><pre>        self,</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794491712\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>fields</td>\n                    <td class=\"code\"><pre>(&lt;django.db.models.fields.UUIDField: id&gt;,\n &lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.DateTimeField: config_completed_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_payment_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_done_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_low_balance_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: last_payment_error_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: first_total_amount_achieved_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: deleted_datetime&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.DateTimeField: updated_at&gt;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>objs</td>\n                    <td class=\"code\"><pre>[&lt;ProjectsMetrics: ProjectsMetrics object (72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c)&gt;]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>on_conflict</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>query</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.sql.subqueries.InsertQuery object at 0x7f3901012ad0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>Error in formatting: ProgrammingError: permission denied for table projects_metrics\n</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>unique_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py</code>, line 1660, in execute_sql\n          \n\n          \n            <div class=\"context\" id=\"c139882794710912\">\n              \n                <ol start=\"1653\" class=\"pre-context\" id=\"pre139882794710912\">\n                \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>            and len(self.query.objs) != 1</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>            and not self.connection.features.can_return_rows_from_bulk_insert</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>        )</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>        opts = self.query.get_meta()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>        self.returning_fields = returning_fields</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>        with self.connection.cursor() as cursor:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>            for sql, params in self.as_sql():</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1660\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>                cursor.execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1661' class=\"post-context\" id=\"post139882794710912\">\n                  \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>            if not self.returning_fields:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>                return []</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>            if (</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>                self.connection.features.can_return_rows_from_bulk_insert</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>                and len(self.query.objs) &gt; 1</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794710912', 'post139882794710912')\"><pre>            ):</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794710912\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>cursor</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>opts</td>\n                    <td class=\"code\"><pre>&lt;Options for ProjectsMetrics&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c&#x27;),\n UUID(&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;),\n UUID(&#x27;64c5159f-12bd-4e50-b208-172ddd7e2ebd&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 20, 3, 52, 99354, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;SQLInsertCompiler model=ProjectsMetrics connection=&lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt; using=&#x27;default&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 102, in execute\n          \n\n          \n            <div class=\"context\" id=\"c139882793064192\">\n              \n                <ol start=\"95\" class=\"pre-context\" id=\"pre139882793064192\">\n                \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>class CursorDebugWrapper(CursorWrapper):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>    # XXX callproc isn&#x27;t instrumented at this time.</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>    def execute(self, sql, params=None):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>        with self.debug_sql(sql, params, use_last_executed_query=True):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"102\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>            return super().execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='103' class=\"post-context\" id=\"post139882793064192\">\n                  \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>    def executemany(self, sql, param_list):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>        with self.debug_sql(sql, param_list, many=True):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>            return super().executemany(sql, param_list)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793064192', 'post139882793064192')\"><pre>    @contextmanager</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793064192\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>__class__</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;django.db.backends.utils.CursorDebugWrapper&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c&#x27;),\n UUID(&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;),\n UUID(&#x27;64c5159f-12bd-4e50-b208-172ddd7e2ebd&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 20, 3, 52, 99354, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 67, in execute\n          \n\n          \n            <div class=\"context\" id=\"c139882793069440\">\n              \n                <ol start=\"60\" class=\"pre-context\" id=\"pre139882793069440\">\n                \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>            elif kparams is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>                return self.cursor.callproc(procname, params)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>            else:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>                params = params or ()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>                return self.cursor.callproc(procname, params, kparams)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>    def execute(self, sql, params=None):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"67\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>        return self._execute_with_wrappers(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='68' class=\"post-context\" id=\"post139882793069440\">\n                  \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>            sql, params, many=False, executor=self._execute</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>        )</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>    def executemany(self, sql, param_list):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>        return self._execute_with_wrappers(</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793069440', 'post139882793069440')\"><pre>            sql, param_list, many=True, executor=self._executemany</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793069440\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c&#x27;),\n UUID(&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;),\n UUID(&#x27;64c5159f-12bd-4e50-b208-172ddd7e2ebd&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 20, 3, 52, 99354, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 80, in _execute_with_wrappers\n          \n\n          \n            <div class=\"context\" id=\"c139882794711424\">\n              \n                <ol start=\"73\" class=\"pre-context\" id=\"pre139882794711424\">\n                \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>            sql, param_list, many=True, executor=self._executemany</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>        )</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>    def _execute_with_wrappers(self, sql, params, many, executor):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>        context = {&quot;connection&quot;: self.db, &quot;cursor&quot;: self}</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>        for wrapper in reversed(self.db.execute_wrappers):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>            executor = functools.partial(wrapper, executor)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"80\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>        return executor(sql, params, many, context)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='81' class=\"post-context\" id=\"post139882794711424\">\n                  \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>            if params is None:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882794711424', 'post139882794711424')\"><pre>                # params default might be backend specific.</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882794711424\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>context</td>\n                    <td class=\"code\"><pre>{&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>executor</td>\n                    <td class=\"code\"><pre>&lt;bound method CursorWrapper._execute of &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>many</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c&#x27;),\n UUID(&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;),\n UUID(&#x27;64c5159f-12bd-4e50-b208-172ddd7e2ebd&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 20, 3, 52, 99354, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 84, in _execute\n          \n\n          \n            <div class=\"context\" id=\"c139882795036992\">\n              \n                <ol start=\"77\" class=\"pre-context\" id=\"pre139882795036992\">\n                \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>        context = {&quot;connection&quot;: self.db, &quot;cursor&quot;: self}</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>        for wrapper in reversed(self.db.execute_wrappers):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>            executor = functools.partial(wrapper, executor)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>        return executor(sql, params, many, context)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                \n                </ol>\n              \n              <ol start=\"84\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>        with self.db.wrap_database_errors:</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='85' class=\"post-context\" id=\"post139882795036992\">\n                  \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>            if params is None:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>                # params default might be backend specific.</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>                return self.cursor.execute(sql)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>            else:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre>                return self.cursor.execute(sql, params)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882795036992', 'post139882795036992')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882795036992\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>ignored_wrapper_args</td>\n                    <td class=\"code\"><pre>(False,\n {&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n  &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;})</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c&#x27;),\n UUID(&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;),\n UUID(&#x27;64c5159f-12bd-4e50-b208-172ddd7e2ebd&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 20, 3, 52, 99354, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/utils.py</code>, line 91, in __exit__\n          \n\n          \n            <div class=\"context\" id=\"c139882792984128\">\n              \n                <ol start=\"84\" class=\"pre-context\" id=\"pre139882792984128\">\n                \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>            db_exc_type = getattr(self.wrapper.Database, dj_exc_type.__name__)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>            if issubclass(exc_type, db_exc_type):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>                dj_exc_value = dj_exc_type(*exc_value.args)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>                # Only set the &#x27;errors_occurred&#x27; flag for errors that may make</pre></li>\n                \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>                # the connection unusable.</pre></li>\n                \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>                if dj_exc_type not in (DataError, IntegrityError):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>                    self.wrapper.errors_occurred = True</pre></li>\n                \n                </ol>\n              \n              <ol start=\"91\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>                raise dj_exc_value.with_traceback(traceback) from exc_value</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='92' class=\"post-context\" id=\"post139882792984128\">\n                  \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>    def __call__(self, func):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>        # Note that we are intentionally not using @wraps here for performance</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>        # reasons. Refs #21109.</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>        def inner(*args, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882792984128', 'post139882792984128')\"><pre>            with self:</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882792984128\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>db_exc_type</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;psycopg2.ProgrammingError&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>dj_exc_type</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;django.db.utils.ProgrammingError&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>dj_exc_value</td>\n                    <td class=\"code\"><pre>ProgrammingError(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exc_type</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;psycopg2.errors.InsufficientPrivilege&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exc_value</td>\n                    <td class=\"code\"><pre>InsufficientPrivilege(&#x27;permission denied for table projects_metrics\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.utils.DatabaseErrorWrapper object at 0x7f39005ea910&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>traceback</td>\n                    <td class=\"code\"><pre>&lt;traceback object at 0x7f390030cd80&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 89, in _execute\n          \n\n          \n            <div class=\"context\" id=\"c139882793061760\">\n              \n                <ol start=\"82\" class=\"pre-context\" id=\"pre139882793061760\">\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>            if params is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>                # params default might be backend specific.</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>                return self.cursor.execute(sql)</pre></li>\n                \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>            else:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"89\" class=\"context-line\">\n                <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>                return self.cursor.execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='90' class=\"post-context\" id=\"post139882793061760\">\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>    def _executemany(self, sql, param_list, *ignored_wrapper_args):</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre>            return self.cursor.executemany(sql, param_list)</pre></li>\n                  \n                  <li onclick=\"toggle('pre139882793061760', 'post139882793061760')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v139882793061760\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>ignored_wrapper_args</td>\n                    <td class=\"code\"><pre>(False,\n {&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n  &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;})</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;72b3f68f-50d2-4b4e-a5bb-c9951c4cd51c&#x27;),\n UUID(&#x27;7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e&#x27;),\n UUID(&#x27;64c5159f-12bd-4e50-b208-172ddd7e2ebd&#x27;),\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n datetime.datetime(2025, 6, 27, 20, 3, 52, 99354, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f390046bdd0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;projects_metrics&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &#x27;\n &#x27;&quot;config_completed_datetime&quot;, &quot;first_payment_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_done_datetime&quot;, &quot;last_payment_low_balance_datetime&quot;, &#x27;\n &#x27;&quot;last_payment_error_datetime&quot;, &quot;first_total_amount_achieved_datetime&quot;, &#x27;\n &#x27;&quot;deleted_datetime&quot;, &quot;created_at&quot;, &quot;updated_at&quot;) VALUES (%s, %s, %s, %s, %s, &#x27;\n &#x27;%s, %s, %s, %s, %s, %s, %s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n    </ul>\n  </div>\n\n  <form action=\"https://dpaste.com/\" name=\"pasteform\" id=\"pasteform\" method=\"post\">\n  <div id=\"pastebinTraceback\" class=\"pastebin\">\n    <input type=\"hidden\" name=\"language\" value=\"PythonConsole\">\n    <input type=\"hidden\" name=\"title\"\n      value=\"ProgrammingError at /api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/\">\n    <input type=\"hidden\" name=\"source\" value=\"Django Dpaste Agent\">\n    <input type=\"hidden\" name=\"poster\" value=\"Django\">\n    <textarea name=\"content\" id=\"traceback_area\" cols=\"140\" rows=\"25\">\nEnvironment:\n\n\nRequest Method: POST\nRequest URL: http://internal-k8s-xerpaheadlessgrou-205ab0f1be-396527338.us-east-1.elb.amazonaws.com/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/\n\nDjango Version: 4.1.10\nPython Version: 3.11.3\nInstalled Applications:\n[&#x27;django.contrib.admin&#x27;,\n &#x27;django.contrib.auth&#x27;,\n &#x27;django.contrib.contenttypes&#x27;,\n &#x27;django.contrib.sessions&#x27;,\n &#x27;django.contrib.messages&#x27;,\n &#x27;django.contrib.staticfiles&#x27;,\n &#x27;django_extensions&#x27;,\n &#x27;corsheaders&#x27;,\n &#x27;rest_framework&#x27;,\n &#x27;django_filters&#x27;,\n &#x27;monitoring&#x27;,\n &#x27;saving&#x27;,\n &#x27;payment&#x27;,\n &#x27;catalog&#x27;,\n &#x27;project&#x27;,\n &#x27;rule&#x27;,\n &#x27;activity&#x27;,\n &#x27;transaction&#x27;,\n &#x27;user&#x27;,\n &#x27;dashboard&#x27;,\n &#x27;metric&#x27;,\n &#x27;config&#x27;,\n &#x27;report&#x27;]\nInstalled Middleware:\n[&#x27;django.middleware.security.SecurityMiddleware&#x27;,\n &#x27;django.contrib.sessions.middleware.SessionMiddleware&#x27;,\n &#x27;django.middleware.common.CommonMiddleware&#x27;,\n &#x27;django.middleware.csrf.CsrfViewMiddleware&#x27;,\n &#x27;django.contrib.auth.middleware.AuthenticationMiddleware&#x27;,\n &#x27;django.contrib.messages.middleware.MessageMiddleware&#x27;,\n &#x27;django.middleware.clickjacking.XFrameOptionsMiddleware&#x27;,\n &#x27;corsheaders.middleware.CorsMiddleware&#x27;]\n\n\n\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 89, in _execute\n    return self.cursor.execute(sql, params)\n\nThe above exception (permission denied for table projects_metrics\n) was the direct cause of the following exception:\n  File \"/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py\", line 56, in inner\n    response = get_response(request)\n  File \"/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py\", line 197, in _get_response\n    response = wrapped_callback(request, *callback_args, **callback_kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/views/decorators/csrf.py\", line 55, in wrapped_view\n    return view_func(*args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/views/generic/base.py\", line 103, in view\n    return self.dispatch(request, *args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 509, in dispatch\n    response = self.handle_exception(exc)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 469, in handle_exception\n    self.raise_uncaught_exception(exc)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 480, in raise_uncaught_exception\n    raise exc\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 506, in dispatch\n    response = handler(request, *args, **kwargs)\n  File \"/code/src/project/views/views.py\", line 173, in post\n    ProjectMetric.create_project_metric(serializer.instance.project_status_id, user_id, serializer.instance)\n  File \"/code/src/metric/service/project_metric_service.py\", line 14, in create_project_metric\n    ProjectsMetrics.objects.create(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/manager.py\", line 85, in manager_method\n    return getattr(self.get_queryset(), name)(*args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\", line 671, in create\n    obj.save(force_insert=True, using=self.db)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 812, in save\n    self.save_base(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 863, in save_base\n    updated = self._save_table(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 1006, in _save_table\n    results = self._do_insert(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 1047, in _do_insert\n    return manager._insert(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/manager.py\", line 85, in manager_method\n    return getattr(self.get_queryset(), name)(*args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\", line 1791, in _insert\n    return query.get_compiler(using=using).execute_sql(returning_fields)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\", line 1660, in execute_sql\n    cursor.execute(sql, params)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 102, in execute\n    return super().execute(sql, params)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 67, in execute\n    return self._execute_with_wrappers(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 80, in _execute_with_wrappers\n    return executor(sql, params, many, context)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 84, in _execute\n    with self.db.wrap_database_errors:\n  File \"/usr/local/lib/python3.11/site-packages/django/db/utils.py\", line 91, in __exit__\n    raise dj_exc_value.with_traceback(traceback) from exc_value\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 89, in _execute\n    return self.cursor.execute(sql, params)\n\nException Type: ProgrammingError at /api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/\nException Value: permission denied for table projects_metrics\n\n</textarea>\n  <br><br>\n  <input type=\"submit\" value=\"Share this traceback on a public website\">\n  </div>\n</form>\n\n</div>\n\n\n<div id=\"requestinfo\">\n  <h2>Request information</h2>\n\n\n  \n    <h3 id=\"user-info\">USER</h3>\n    <p>AnonymousUser</p>\n  \n\n  <h3 id=\"get-info\">GET</h3>\n  \n    <p>No GET data</p>\n  \n\n  <h3 id=\"post-info\">POST</h3>\n  \n    <p>No POST data</p>\n  \n  <h3 id=\"files-info\">FILES</h3>\n  \n    <p>No FILES data</p>\n  \n\n\n  <h3 id=\"cookie-info\">COOKIES</h3>\n  \n    <p>No cookie data</p>\n  \n\n  <h3 id=\"meta-info\">META</h3>\n  <table class=\"req\">\n    <thead>\n      <tr>\n        <th>Variable</th>\n        <th>Value</th>\n      </tr>\n    </thead>\n    <tbody>\n      \n        <tr>\n          <td>CONTENT_LENGTH</td>\n          <td class=\"code\"><pre>&#x27;211&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CONTENT_TYPE</td>\n          <td class=\"code\"><pre>&#x27;application/json&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_ACCEPT_ENCODING</td>\n          <td class=\"code\"><pre>&#x27;identity&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_ACCESS_CONTROL_ALLOW_CREDENTIALS</td>\n          <td class=\"code\"><pre>&#x27;True&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_ACCESS_CONTROL_ALLOW_ORIGIN</td>\n          <td class=\"code\"><pre>&#x27;*&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_HOST</td>\n          <td class=\"code\"><pre>&#x27;internal-k8s-xerpaheadlessgrou-205ab0f1be-396527338.us-east-1.elb.amazonaws.com&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_USER_AGENT</td>\n          <td class=\"code\"><pre>&#x27;python-urllib3/1.26.19&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_AMZN_TRACE_ID</td>\n          <td class=\"code\"><pre>&#x27;Root=1-685ef927-3f7e6a0533510b4b05bf71ef&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_FORWARDED_FOR</td>\n          <td class=\"code\"><pre>&#x27;10.1.2.104&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_FORWARDED_PORT</td>\n          <td class=\"code\"><pre>&#x27;80&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_FORWARDED_PROTO</td>\n          <td class=\"code\"><pre>&#x27;http&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PATH_INFO</td>\n          <td class=\"code\"><pre>&#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>QUERY_STRING</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>RAW_URI</td>\n          <td class=\"code\"><pre>&#x27;/api-saving/v1/saving-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/projects/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>REMOTE_ADDR</td>\n          <td class=\"code\"><pre>&#x27;10.1.1.43&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>REMOTE_PORT</td>\n          <td class=\"code\"><pre>&#x27;34984&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>REQUEST_METHOD</td>\n          <td class=\"code\"><pre>&#x27;POST&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SCRIPT_NAME</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_NAME</td>\n          <td class=\"code\"><pre>&#x27;0.0.0.0&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_PORT</td>\n          <td class=\"code\"><pre>&#x27;8000&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_PROTOCOL</td>\n          <td class=\"code\"><pre>&#x27;HTTP/1.1&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_SOFTWARE</td>\n          <td class=\"code\"><pre>&#x27;gunicorn/20.1.0&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>gunicorn.socket</td>\n          <td class=\"code\"><pre>&lt;socket.socket fd=9, family=2, type=1, proto=0, laddr=(&#x27;10.1.1.120&#x27;, 8000), raddr=(&#x27;10.1.1.43&#x27;, 34984)&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.errors</td>\n          <td class=\"code\"><pre>&lt;gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f39004280a0&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.file_wrapper</td>\n          <td class=\"code\"><pre>&lt;class &#x27;gunicorn.http.wsgi.FileWrapper&#x27;&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.input</td>\n          <td class=\"code\"><pre>&lt;gunicorn.http.body.Body object at 0x7f39005dd090&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.input_terminated</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.multiprocess</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.multithread</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.run_once</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.url_scheme</td>\n          <td class=\"code\"><pre>&#x27;http&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.version</td>\n          <td class=\"code\"><pre>(1, 0)</pre></td>\n        </tr>\n      \n    </tbody>\n  </table>\n\n\n  <h3 id=\"settings-info\">Settings</h3>\n  <h4>Using settings module <code>api_saving.settings</code></h4>\n  <table class=\"req\">\n    <thead>\n      <tr>\n        <th>Setting</th>\n        <th>Value</th>\n      </tr>\n    </thead>\n    <tbody>\n      \n        <tr>\n          <td>ABSOLUTE_URL_OVERRIDES</td>\n          <td class=\"code\"><pre>{}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>ADMINS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>ALLOWED_HOSTS</td>\n          <td class=\"code\"><pre>[&#x27;*&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>APPEND_SLASH</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>AUTHENTICATION_BACKENDS</td>\n          <td class=\"code\"><pre>[&#x27;django.contrib.auth.backends.ModelBackend&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>AUTH_PASSWORD_VALIDATORS</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>AUTH_USER_MODEL</td>\n          <td class=\"code\"><pre>&#x27;auth.User&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>BASE_DIR</td>\n          <td class=\"code\"><pre>PosixPath(&#x27;/code/src&#x27;)</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHES</td>\n          <td class=\"code\"><pre>{&#x27;default&#x27;: {&#x27;BACKEND&#x27;: &#x27;django.core.cache.backends.locmem.LocMemCache&#x27;}}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHE_MIDDLEWARE_ALIAS</td>\n          <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHE_MIDDLEWARE_KEY_PREFIX</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHE_MIDDLEWARE_SECONDS</td>\n          <td class=\"code\"><pre>600</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CORS_ORIGIN_ALLOW_ALL</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_AGE</td>\n          <td class=\"code\"><pre>31449600</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_DOMAIN</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_HTTPONLY</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_MASKED</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_NAME</td>\n          <td class=\"code\"><pre>&#x27;csrftoken&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_PATH</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_SAMESITE</td>\n          <td class=\"code\"><pre>&#x27;Lax&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_SECURE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_FAILURE_VIEW</td>\n          <td class=\"code\"><pre>&#x27;django.views.csrf.csrf_failure&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_HEADER_NAME</td>\n          <td class=\"code\"><pre>&#x27;HTTP_X_CSRFTOKEN&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_TRUSTED_ORIGINS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_USE_SESSIONS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATABASES</td>\n          <td class=\"code\"><pre>{&#x27;default&#x27;: {&#x27;ATOMIC_REQUESTS&#x27;: False,\n             &#x27;AUTOCOMMIT&#x27;: True,\n             &#x27;CONN_HEALTH_CHECKS&#x27;: False,\n             &#x27;CONN_MAX_AGE&#x27;: 0,\n             &#x27;ENGINE&#x27;: &#x27;django.db.backends.postgresql_psycopg2&#x27;,\n             &#x27;HOST&#x27;: &#x27;xerpa-headless-us-east-1-xerpaheadless-rds-instance.ckdom9c6kdbz.us-east-1.rds.amazonaws.com&#x27;,\n             &#x27;NAME&#x27;: &#x27;saving_service_db&#x27;,\n             &#x27;OPTIONS&#x27;: {},\n             &#x27;PASSWORD&#x27;: &#x27;********************&#x27;,\n             &#x27;PORT&#x27;: &#x27;5432&#x27;,\n             &#x27;TEST&#x27;: {&#x27;CHARSET&#x27;: None,\n                      &#x27;COLLATION&#x27;: None,\n                      &#x27;MIGRATE&#x27;: True,\n                      &#x27;MIRROR&#x27;: None,\n                      &#x27;NAME&#x27;: None},\n             &#x27;TIME_ZONE&#x27;: None,\n             &#x27;USER&#x27;: &#x27;xerpaheadless_saving_service_user&#x27;}}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATABASE_ROUTERS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATA_UPLOAD_MAX_MEMORY_SIZE</td>\n          <td class=\"code\"><pre>2621440</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATA_UPLOAD_MAX_NUMBER_FIELDS</td>\n          <td class=\"code\"><pre>1000</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATA_UPLOAD_MAX_NUMBER_FILES</td>\n          <td class=\"code\"><pre>100</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATETIME_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;N j, Y, P&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATETIME_INPUT_FORMATS</td>\n          <td class=\"code\"><pre>[&#x27;%Y-%m-%d %H:%M:%S&#x27;,\n &#x27;%Y-%m-%d %H:%M:%S.%f&#x27;,\n &#x27;%Y-%m-%d %H:%M&#x27;,\n &#x27;%m/%d/%Y %H:%M:%S&#x27;,\n &#x27;%m/%d/%Y %H:%M:%S.%f&#x27;,\n &#x27;%m/%d/%Y %H:%M&#x27;,\n &#x27;%m/%d/%y %H:%M:%S&#x27;,\n &#x27;%m/%d/%y %H:%M:%S.%f&#x27;,\n &#x27;%m/%d/%y %H:%M&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATE_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;N j, Y&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATE_INPUT_FORMATS</td>\n          <td class=\"code\"><pre>[&#x27;%Y-%m-%d&#x27;,\n &#x27;%m/%d/%Y&#x27;,\n &#x27;%m/%d/%y&#x27;,\n &#x27;%b %d %Y&#x27;,\n &#x27;%b %d, %Y&#x27;,\n &#x27;%d %b %Y&#x27;,\n &#x27;%d %b, %Y&#x27;,\n &#x27;%B %d %Y&#x27;,\n &#x27;%B %d, %Y&#x27;,\n &#x27;%d %B %Y&#x27;,\n &#x27;%d %B, %Y&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEBUG</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEBUG_PROPAGATE_EXCEPTIONS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DECIMAL_SEPARATOR</td>\n          <td class=\"code\"><pre>&#x27;.&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_AUTO_FIELD</td>\n          <td class=\"code\"><pre>&#x27;django.db.models.BigAutoField&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_CHARSET</td>\n          <td class=\"code\"><pre>&#x27;utf-8&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_EXCEPTION_REPORTER</td>\n          <td class=\"code\"><pre>&#x27;django.views.debug.ExceptionReporter&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_EXCEPTION_REPORTER_FILTER</td>\n          <td class=\"code\"><pre>&#x27;django.views.debug.SafeExceptionReporterFilter&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_FILE_STORAGE</td>\n          <td class=\"code\"><pre>&#x27;django.core.files.storage.FileSystemStorage&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_FROM_EMAIL</td>\n          <td class=\"code\"><pre>&#x27;webmaster@localhost&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_INDEX_TABLESPACE</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_TABLESPACE</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DISALLOWED_USER_AGENTS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_BACKEND</td>\n          <td class=\"code\"><pre>&#x27;django.core.mail.backends.smtp.EmailBackend&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_HOST</td>\n          <td class=\"code\"><pre>&#x27;localhost&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_HOST_PASSWORD</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_HOST_USER</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_PORT</td>\n          <td class=\"code\"><pre>25</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_SSL_CERTFILE</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_SSL_KEYFILE</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_SUBJECT_PREFIX</td>\n          <td class=\"code\"><pre>&#x27;[Django] &#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_TIMEOUT</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_USE_LOCALTIME</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_USE_SSL</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_USE_TLS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_DIRECTORY_PERMISSIONS</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_HANDLERS</td>\n          <td class=\"code\"><pre>[&#x27;django.core.files.uploadhandler.MemoryFileUploadHandler&#x27;,\n &#x27;django.core.files.uploadhandler.TemporaryFileUploadHandler&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_MAX_MEMORY_SIZE</td>\n          <td class=\"code\"><pre>2621440</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_PERMISSIONS</td>\n          <td class=\"code\"><pre>420</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_TEMP_DIR</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FIRST_DAY_OF_WEEK</td>\n          <td class=\"code\"><pre>0</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FIXTURE_DIRS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FORCE_SCRIPT_NAME</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FORMAT_MODULE_PATH</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FORM_RENDERER</td>\n          <td class=\"code\"><pre>&#x27;django.forms.renderers.DjangoTemplates&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>IGNORABLE_404_URLS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>IMPORT_USER_DATA_MODE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>INSTALLED_APPS</td>\n          <td class=\"code\"><pre>[&#x27;django.contrib.admin&#x27;,\n &#x27;django.contrib.auth&#x27;,\n &#x27;django.contrib.contenttypes&#x27;,\n &#x27;django.contrib.sessions&#x27;,\n &#x27;django.contrib.messages&#x27;,\n &#x27;django.contrib.staticfiles&#x27;,\n &#x27;django_extensions&#x27;,\n &#x27;corsheaders&#x27;,\n &#x27;rest_framework&#x27;,\n &#x27;django_filters&#x27;,\n &#x27;monitoring&#x27;,\n &#x27;saving&#x27;,\n &#x27;payment&#x27;,\n &#x27;catalog&#x27;,\n &#x27;project&#x27;,\n &#x27;rule&#x27;,\n &#x27;activity&#x27;,\n &#x27;transaction&#x27;,\n &#x27;user&#x27;,\n &#x27;dashboard&#x27;,\n &#x27;metric&#x27;,\n &#x27;config&#x27;,\n &#x27;report&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>INTERNAL_IPS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGES</td>\n          <td class=\"code\"><pre>[(&#x27;af&#x27;, &#x27;Afrikaans&#x27;),\n (&#x27;ar&#x27;, &#x27;Arabic&#x27;),\n (&#x27;ar-dz&#x27;, &#x27;Algerian Arabic&#x27;),\n (&#x27;ast&#x27;, &#x27;Asturian&#x27;),\n (&#x27;az&#x27;, &#x27;Azerbaijani&#x27;),\n (&#x27;bg&#x27;, &#x27;Bulgarian&#x27;),\n (&#x27;be&#x27;, &#x27;Belarusian&#x27;),\n (&#x27;bn&#x27;, &#x27;Bengali&#x27;),\n (&#x27;br&#x27;, &#x27;Breton&#x27;),\n (&#x27;bs&#x27;, &#x27;Bosnian&#x27;),\n (&#x27;ca&#x27;, &#x27;Catalan&#x27;),\n (&#x27;cs&#x27;, &#x27;Czech&#x27;),\n (&#x27;cy&#x27;, &#x27;Welsh&#x27;),\n (&#x27;da&#x27;, &#x27;Danish&#x27;),\n (&#x27;de&#x27;, &#x27;German&#x27;),\n (&#x27;dsb&#x27;, &#x27;Lower Sorbian&#x27;),\n (&#x27;el&#x27;, &#x27;Greek&#x27;),\n (&#x27;en&#x27;, &#x27;English&#x27;),\n (&#x27;en-au&#x27;, &#x27;Australian English&#x27;),\n (&#x27;en-gb&#x27;, &#x27;British English&#x27;),\n (&#x27;eo&#x27;, &#x27;Esperanto&#x27;),\n (&#x27;es&#x27;, &#x27;Spanish&#x27;),\n (&#x27;es-ar&#x27;, &#x27;Argentinian Spanish&#x27;),\n (&#x27;es-co&#x27;, &#x27;Colombian Spanish&#x27;),\n (&#x27;es-mx&#x27;, &#x27;Mexican Spanish&#x27;),\n (&#x27;es-ni&#x27;, &#x27;Nicaraguan Spanish&#x27;),\n (&#x27;es-ve&#x27;, &#x27;Venezuelan Spanish&#x27;),\n (&#x27;et&#x27;, &#x27;Estonian&#x27;),\n (&#x27;eu&#x27;, &#x27;Basque&#x27;),\n (&#x27;fa&#x27;, &#x27;Persian&#x27;),\n (&#x27;fi&#x27;, &#x27;Finnish&#x27;),\n (&#x27;fr&#x27;, &#x27;French&#x27;),\n (&#x27;fy&#x27;, &#x27;Frisian&#x27;),\n (&#x27;ga&#x27;, &#x27;Irish&#x27;),\n (&#x27;gd&#x27;, &#x27;Scottish Gaelic&#x27;),\n (&#x27;gl&#x27;, &#x27;Galician&#x27;),\n (&#x27;he&#x27;, &#x27;Hebrew&#x27;),\n (&#x27;hi&#x27;, &#x27;Hindi&#x27;),\n (&#x27;hr&#x27;, &#x27;Croatian&#x27;),\n (&#x27;hsb&#x27;, &#x27;Upper Sorbian&#x27;),\n (&#x27;hu&#x27;, &#x27;Hungarian&#x27;),\n (&#x27;hy&#x27;, &#x27;Armenian&#x27;),\n (&#x27;ia&#x27;, &#x27;Interlingua&#x27;),\n (&#x27;id&#x27;, &#x27;Indonesian&#x27;),\n (&#x27;ig&#x27;, &#x27;Igbo&#x27;),\n (&#x27;io&#x27;, &#x27;Ido&#x27;),\n (&#x27;is&#x27;, &#x27;Icelandic&#x27;),\n (&#x27;it&#x27;, &#x27;Italian&#x27;),\n (&#x27;ja&#x27;, &#x27;Japanese&#x27;),\n (&#x27;ka&#x27;, &#x27;Georgian&#x27;),\n (&#x27;kab&#x27;, &#x27;Kabyle&#x27;),\n (&#x27;kk&#x27;, &#x27;Kazakh&#x27;),\n (&#x27;km&#x27;, &#x27;Khmer&#x27;),\n (&#x27;kn&#x27;, &#x27;Kannada&#x27;),\n (&#x27;ko&#x27;, &#x27;Korean&#x27;),\n (&#x27;ky&#x27;, &#x27;Kyrgyz&#x27;),\n (&#x27;lb&#x27;, &#x27;Luxembourgish&#x27;),\n (&#x27;lt&#x27;, &#x27;Lithuanian&#x27;),\n (&#x27;lv&#x27;, &#x27;Latvian&#x27;),\n (&#x27;mk&#x27;, &#x27;Macedonian&#x27;),\n (&#x27;ml&#x27;, &#x27;Malayalam&#x27;),\n (&#x27;mn&#x27;, &#x27;Mongolian&#x27;),\n (&#x27;mr&#x27;, &#x27;Marathi&#x27;),\n (&#x27;ms&#x27;, &#x27;Malay&#x27;),\n (&#x27;my&#x27;, &#x27;Burmese&#x27;),\n (&#x27;nb&#x27;, &#x27;Norwegian Bokmål&#x27;),\n (&#x27;ne&#x27;, &#x27;Nepali&#x27;),\n (&#x27;nl&#x27;, &#x27;Dutch&#x27;),\n (&#x27;nn&#x27;, &#x27;Norwegian Nynorsk&#x27;),\n (&#x27;os&#x27;, &#x27;Ossetic&#x27;),\n (&#x27;pa&#x27;, &#x27;Punjabi&#x27;),\n (&#x27;pl&#x27;, &#x27;Polish&#x27;),\n (&#x27;pt&#x27;, &#x27;Portuguese&#x27;),\n (&#x27;pt-br&#x27;, &#x27;Brazilian Portuguese&#x27;),\n (&#x27;ro&#x27;, &#x27;Romanian&#x27;),\n (&#x27;ru&#x27;, &#x27;Russian&#x27;),\n (&#x27;sk&#x27;, &#x27;Slovak&#x27;),\n (&#x27;sl&#x27;, &#x27;Slovenian&#x27;),\n (&#x27;sq&#x27;, &#x27;Albanian&#x27;),\n (&#x27;sr&#x27;, &#x27;Serbian&#x27;),\n (&#x27;sr-latn&#x27;, &#x27;Serbian Latin&#x27;),\n (&#x27;sv&#x27;, &#x27;Swedish&#x27;),\n (&#x27;sw&#x27;, &#x27;Swahili&#x27;),\n (&#x27;ta&#x27;, &#x27;Tamil&#x27;),\n (&#x27;te&#x27;, &#x27;Telugu&#x27;),\n (&#x27;tg&#x27;, &#x27;Tajik&#x27;),\n (&#x27;th&#x27;, &#x27;Thai&#x27;),\n (&#x27;tk&#x27;, &#x27;Turkmen&#x27;),\n (&#x27;tr&#x27;, &#x27;Turkish&#x27;),\n (&#x27;tt&#x27;, &#x27;Tatar&#x27;),\n (&#x27;udm&#x27;, &#x27;Udmurt&#x27;),\n (&#x27;uk&#x27;, &#x27;Ukrainian&#x27;),\n (&#x27;ur&#x27;, &#x27;Urdu&#x27;),\n (&#x27;uz&#x27;, &#x27;Uzbek&#x27;),\n (&#x27;vi&#x27;, &#x27;Vietnamese&#x27;),\n (&#x27;zh-hans&#x27;, &#x27;Simplified Chinese&#x27;),\n (&#x27;zh-hant&#x27;, &#x27;Traditional Chinese&#x27;)]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGES_BIDI</td>\n          <td class=\"code\"><pre>[&#x27;he&#x27;, &#x27;ar&#x27;, &#x27;ar-dz&#x27;, &#x27;fa&#x27;, &#x27;ur&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_CODE</td>\n          <td class=\"code\"><pre>&#x27;en-us&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_AGE</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_DOMAIN</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_HTTPONLY</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_NAME</td>\n          <td class=\"code\"><pre>&#x27;django_language&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_PATH</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_SAMESITE</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_SECURE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOCALE_PATHS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGGING</td>\n          <td class=\"code\"><pre>{&#x27;disable_existing_loggers&#x27;: False,\n &#x27;filters&#x27;: {&#x27;require_debug_true&#x27;: {&#x27;()&#x27;: &#x27;django.utils.log.RequireDebugTrue&#x27;}},\n &#x27;formatters&#x27;: {&#x27;django.server&#x27;: {&#x27;()&#x27;: &#x27;django.utils.log.ServerFormatter&#x27;,\n                                  &#x27;format&#x27;: &#x27;[%(server_time)s] %(message)s&#x27;},\n                &#x27;simple&#x27;: {&#x27;format&#x27;: &#x27;%(levelname)s %(message)s&#x27;},\n                &#x27;verbose&#x27;: {&#x27;format&#x27;: &#x27;%(levelname)s %(asctime)s &#x27;\n                                      &#x27;%(pathname)s-&gt;%(module)s:%(lineno)s &#x27;\n                                      &#x27;%(process)d %(thread)d %(message)s&#x27;}},\n &#x27;handlers&#x27;: {&#x27;console&#x27;: {&#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,\n                          &#x27;formatter&#x27;: &#x27;simple&#x27;,\n                          &#x27;level&#x27;: &#x27;DEBUG&#x27;},\n              &#x27;django.server&#x27;: {&#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,\n                                &#x27;formatter&#x27;: &#x27;django.server&#x27;,\n                                &#x27;level&#x27;: &#x27;INFO&#x27;},\n              &#x27;message&#x27;: {&#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,\n                          &#x27;formatter&#x27;: &#x27;verbose&#x27;,\n                          &#x27;level&#x27;: &#x27;DEBUG&#x27;}},\n &#x27;loggers&#x27;: {&#x27;django&#x27;: {&#x27;handlers&#x27;: [&#x27;console&#x27;], &#x27;propagate&#x27;: True},\n             &#x27;django.db.backends&#x27;: {&#x27;handlers&#x27;: [&#x27;console&#x27;], &#x27;level&#x27;: &#x27;INFO&#x27;},\n             &#x27;django.message.log&#x27;: {&#x27;handlers&#x27;: [&#x27;message&#x27;],\n                                    &#x27;level&#x27;: &#x27;INFO&#x27;,\n                                    &#x27;propagate&#x27;: False},\n             &#x27;django.request&#x27;: {&#x27;handlers&#x27;: [&#x27;console&#x27;],\n                                &#x27;level&#x27;: &#x27;ERROR&#x27;,\n                                &#x27;propagate&#x27;: False},\n             &#x27;django.server&#x27;: {&#x27;handlers&#x27;: [&#x27;django.server&#x27;],\n                               &#x27;level&#x27;: &#x27;INFO&#x27;,\n                               &#x27;propagate&#x27;: False}},\n &#x27;version&#x27;: 1}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGGING_CONFIG</td>\n          <td class=\"code\"><pre>&#x27;logging.config.dictConfig&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGIN_REDIRECT_URL</td>\n          <td class=\"code\"><pre>&#x27;/accounts/profile/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGIN_URL</td>\n          <td class=\"code\"><pre>&#x27;/accounts/login/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGOUT_REDIRECT_URL</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MANAGERS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MEDIA_ROOT</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MEDIA_URL</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MESSAGE_STORAGE</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.messages.storage.fallback.FallbackStorage&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MIDDLEWARE</td>\n          <td class=\"code\"><pre>[&#x27;django.middleware.security.SecurityMiddleware&#x27;,\n &#x27;django.contrib.sessions.middleware.SessionMiddleware&#x27;,\n &#x27;django.middleware.common.CommonMiddleware&#x27;,\n &#x27;django.middleware.csrf.CsrfViewMiddleware&#x27;,\n &#x27;django.contrib.auth.middleware.AuthenticationMiddleware&#x27;,\n &#x27;django.contrib.messages.middleware.MessageMiddleware&#x27;,\n &#x27;django.middleware.clickjacking.XFrameOptionsMiddleware&#x27;,\n &#x27;corsheaders.middleware.CorsMiddleware&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MIGRATION_MODULES</td>\n          <td class=\"code\"><pre>{}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MONTH_DAY_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;F j&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>NUMBER_GROUPING</td>\n          <td class=\"code\"><pre>0</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PASSWORD_HASHERS</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PASSWORD_RESET_TIMEOUT</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PREPEND_WWW</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>ROOT_URLCONF</td>\n          <td class=\"code\"><pre>&#x27;api_saving.urls&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECRET_KEY</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECRET_KEY_FALLBACKS</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_CONTENT_TYPE_NOSNIFF</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_CROSS_ORIGIN_OPENER_POLICY</td>\n          <td class=\"code\"><pre>&#x27;same-origin&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_HSTS_INCLUDE_SUBDOMAINS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_HSTS_PRELOAD</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_HSTS_SECONDS</td>\n          <td class=\"code\"><pre>0</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_PROXY_SSL_HEADER</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_REDIRECT_EXEMPT</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_REFERRER_POLICY</td>\n          <td class=\"code\"><pre>&#x27;same-origin&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_SSL_HOST</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_SSL_REDIRECT</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_EMAIL</td>\n          <td class=\"code\"><pre>&#x27;root@localhost&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_CACHE_ALIAS</td>\n          <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_AGE</td>\n          <td class=\"code\"><pre>1209600</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_DOMAIN</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_HTTPONLY</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_NAME</td>\n          <td class=\"code\"><pre>&#x27;sessionid&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_PATH</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_SAMESITE</td>\n          <td class=\"code\"><pre>&#x27;Lax&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_SECURE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_ENGINE</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.sessions.backends.db&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_EXPIRE_AT_BROWSER_CLOSE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_FILE_PATH</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_SAVE_EVERY_REQUEST</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_SERIALIZER</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.sessions.serializers.JSONSerializer&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SETTINGS_MODULE</td>\n          <td class=\"code\"><pre>&#x27;api_saving.settings&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SHORT_DATETIME_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;m/d/Y P&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SHORT_DATE_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;m/d/Y&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SIGNING_BACKEND</td>\n          <td class=\"code\"><pre>&#x27;django.core.signing.TimestampSigner&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SILENCED_SYSTEM_CHECKS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATICFILES_DIRS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATICFILES_FINDERS</td>\n          <td class=\"code\"><pre>[&#x27;django.contrib.staticfiles.finders.FileSystemFinder&#x27;,\n &#x27;django.contrib.staticfiles.finders.AppDirectoriesFinder&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATICFILES_STORAGE</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.staticfiles.storage.StaticFilesStorage&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATIC_ROOT</td>\n          <td class=\"code\"><pre>&#x27;./static/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATIC_URL</td>\n          <td class=\"code\"><pre>&#x27;/static/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TEMPLATES</td>\n          <td class=\"code\"><pre>[{&#x27;APP_DIRS&#x27;: True,\n  &#x27;BACKEND&#x27;: &#x27;django.template.backends.django.DjangoTemplates&#x27;,\n  &#x27;DIRS&#x27;: [&#x27;/code/src/templates&#x27;],\n  &#x27;OPTIONS&#x27;: {&#x27;context_processors&#x27;: [&#x27;django.template.context_processors.debug&#x27;,\n                                     &#x27;django.template.context_processors.request&#x27;,\n                                     &#x27;django.contrib.auth.context_processors.auth&#x27;,\n                                     &#x27;django.contrib.messages.context_processors.messages&#x27;]}}]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TEST_NON_SERIALIZED_APPS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TEST_RUNNER</td>\n          <td class=\"code\"><pre>&#x27;django.test.runner.DiscoverRunner&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>THOUSAND_SEPARATOR</td>\n          <td class=\"code\"><pre>&#x27;,&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TIME_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;P&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TIME_INPUT_FORMATS</td>\n          <td class=\"code\"><pre>[&#x27;%H:%M:%S&#x27;, &#x27;%H:%M:%S.%f&#x27;, &#x27;%H:%M&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TIME_ZONE</td>\n          <td class=\"code\"><pre>&#x27;America/Mexico_City&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_DEPRECATED_PYTZ</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_I18N</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_L10N</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_THOUSAND_SEPARATOR</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_TZ</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_X_FORWARDED_HOST</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_X_FORWARDED_PORT</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>WSGI_APPLICATION</td>\n          <td class=\"code\"><pre>&#x27;api_saving.wsgi.application&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>X_FRAME_OPTIONS</td>\n          <td class=\"code\"><pre>&#x27;DENY&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>YEAR_MONTH_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;F Y&#x27;</pre></td>\n        </tr>\n      \n    </tbody>\n  </table>\n\n</div>\n\n  <div id=\"explanation\">\n    <p>\n      You’re seeing this error because you have <code>DEBUG = True</code> in your\n      Django settings file. Change that to <code>False</code>, and Django will\n      display a standard page generated by the handler for this status code.\n    </p>\n  </div>\n\n</body>\n</html>\n"}],"_postman_id":"f7208c0e-29d9-442d-be01-ce2e172643bf"},{"name":"Editar meta","event":[{"listen":"test","script":{"id":"01df2008-ee50-4821-a5f7-c4d05236de7e","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    project_category: 'object',\r","    project_status: 'object',\r","    project_name: 'string',\r","    total: 'number',\r","    progress: 'number',\r","    processing: 'number',\r","    pending: 'number',\r","    from_account: { type: 'string', optional: true },\r","    to_account: { type: 'string', optional: true },\r","    goal_date: 'string',\r","    updated_at: 'string',\r","    deleted_at: { type: 'string', optional: true },\r","    created_at: 'string',\r","    rules: 'array'\r","};\r","\r","const projectCategoryProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const projectStatusProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: { type: 'object', optional: true }\r","};\r","\r","const metadataProperties = {\r","    icon: { type: 'string', optional: true },\r","    name: { type: 'string', optional: true },\r","    color: { type: 'string', optional: true },\r","    order: { type: 'number', optional: true },\r","    active: { type: 'boolean', optional: true },\r","    short_name: { type: 'string', optional: true },\r","    description: { type: 'string', optional: true }\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the project_category object\r","pm.test(\"Project category object has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.project_category, projectCategoryProperties);\r","});\r","\r","// Check metadata properties of the project_category object\r","pm.test(\"Metadata of project category object has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.project_category.metadata, metadataProperties);\r","});\r","\r","// Check properties of the project_status object\r","pm.test(\"Project status object has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.project_status, projectStatusProperties);\r","});\r","\r","// Check metadata properties of the project_status object if it exists\r","pm.test(\"Metadata of project status object has expected properties with correct types\", () => {\r","    if (responseJson.project_status.metadata) {\r","        xerpaTestApi.checkObjectProperties(responseJson.project_status.metadata, metadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}},"requests":{}}}],"id":"b158dfb6-7215-4d51-82cd-ba03e81c0134","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"total\": \"1000\",\r\n    \"goal_date\": \"2027-12-30\",\r\n    \"project_name\": \"meta para ahorra pasajes\",\r\n    \"project_category_id\": \"5d8862bf-b1b2-492f-b198-ae14ddef822e\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/","description":"<p>Este endpoint se utiliza para actualizar un proyecto específico de un usuario dentro del servicio de ahorro.</p>\n<img src=\"https://content.pstmn.io/25c84683-14c6-44c0-bb59-aee6d5daacec/RWRpdGFyLnBuZw==\" width=\"100\" height=\"110\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Metodo: PATCH</p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_id</code> (string): ID del proyecto.</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body\">Request Body</h4>\n<p>Debe enviarse en formato JSON e incluir los siguientes campos:</p>\n<ul>\n<li><p><code>total</code> (number) (Opcional): Nuevo monto total asignado al proyecto. Tiene que ser un valor mayor o igual a uno.</p>\n</li>\n<li><p><code>goal_date</code> (string) (Opcional): Nueva fecha objetivo del proyecto. Esta fecha debe ser posterior al día en que se realiza la solicitud.</p>\n</li>\n<li><p><code>project_name</code> (string) (Opcional): Nuevo nombre del proyecto. Este campo tiene que ser un valor con caracteres.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body-example\">Request Body Example</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"total\": 1000,\n  \"goal_date\": \"2024-12-30\",\n  \"project_name\": \"meta para ahorra pasajes\"\n}\n\n</code></pre>\n<hr />\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un <strong>objeto JSON</strong> con los detalles actualizados del proyecto , incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del proyecto.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario.</p>\n</li>\n<li><p><code>project_category</code> (object): Detalles de la categoría del proyecto, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID de la categoría.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la categoría.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>, <code>name</code>, <code>color</code>, <code>order</code>, <code>active</code>, <code>short_name</code>, <code>description</code>.</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>project_status</code> (object): Detalles del estado actual del proyecto, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del estado.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo del estado.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem de estado.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del estado.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>, <code>color</code>, <code>active</code>, <code>short_name</code>.</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>project_config</code> (object): Información sobre el estado la configuración del proyecto, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID de la configuración.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo de la configuración.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem de la configuración.</p>\n</li>\n<li><p><code>description</code>(string): Descripción de la configuración.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>limit</code>, <code>default</code>, <code>available</code>, <code>access_denied</code>, <code>permission_edit_field</code>, <code>allows_recieve_transfers</code>, <code>fields_required_to_create</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>project_name</code> (string): Nombre del proyecto.</p>\n</li>\n<li><p><code>total</code> (number): Monto total del proyecto.</p>\n</li>\n<li><p><code>progress</code> (number): Monto ahorrado hasta el momento.</p>\n</li>\n<li><p><code>processing</code> (number): Monto en proceso.</p>\n</li>\n<li><p><code>pending</code> (number): Monto pendiente por ahorrar.</p>\n</li>\n<li><p><code>investment_returns</code>(number): Importe ganado por las inversiones.</p>\n</li>\n<li><p><code>from_account</code> (string): Cuenta de origen de los fondos.</p>\n</li>\n<li><p><code>to_account</code> (string): Cuenta destino de los fondos.</p>\n</li>\n<li><p><code>goal_date</code> (string): Fecha objetivo del proyecto.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha y hora de la última actualización.</p>\n</li>\n<li><p><code>deleted_at</code> (string): Fecha de eliminación (si aplica).</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha de creación del proyecto.</p>\n</li>\n<li><p><code>rules</code> (array of object): Arreglo de reglas asociadas al proyecto, cada una con sus propios detalles.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\" },\n    \"user_id\": { \"type\": \"string\" },\n    \"project_category\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": { \"type\": \"string\" },\n        \"catalog\": { \"type\": \"string\" },\n        \"item_name\": { \"type\": \"string\" },\n        \"description\": { \"type\": \"string\" },\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"icon\": { \"type\": \"string\" },\n            \"name\": { \"type\": \"string\" },\n            \"color\": { \"type\": \"string\" },\n            \"group\": { \"type\": \"string\" },\n            \"order\": { \"type\": \"integer\" },\n            \"active\": { \"type\": \"boolean\" },\n            \"short_name\": { \"type\": \"string\" },\n            \"description\": { \"type\": \"string\" }\n          }\n        }\n      }\n    },\n    \"project_status\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": { \"type\": \"string\" },\n        \"catalog\": { \"type\": \"string\" },\n        \"item_name\": { \"type\": \"string\" },\n        \"description\": { \"type\": \"string\" },\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"icon\": { \"type\": \"string\" },\n            \"color\": { \"type\": \"string\" },\n            \"active\": { \"type\": \"boolean\" },\n            \"short_name\": { \"type\": \"string\" }\n          }\n        }\n      }\n    },\n    \"project_config\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": { \"type\": \"string\" },\n        \"catalog\": { \"type\": \"string\" },\n        \"item_name\": { \"type\": \"string\" },\n        \"description\": { \"type\": \"string\" },\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"limit\": { \"type\": [\"number\", \"null\"] },\n            \"default\": { \"type\": \"boolean\" },\n            \"available\": { \"type\": \"boolean\" },\n            \"access_denied\": { \"type\": \"object\" },\n            \"permission_edit_fields\": {\n              \"type\": \"array\",\n              \"items\": { \"type\": \"string\" }\n            },\n            \"allows_receive_transfers\": { \"type\": \"boolean\" },\n            \"fields_required_to_create\": {\n              \"type\": \"array\",\n              \"items\": { \"type\": \"string\" }\n            }\n          }\n        }\n      }\n    },\n    \"project_name\": { \"type\": \"string\" },\n    \"total\": { \"type\": \"number\" },\n    \"progress\": { \"type\": \"number\" },\n    \"processing\": { \"type\": \"number\" },\n    \"pending\": { \"type\": \"number\" },\n    \"investment_returns\": { \"type\": \"number\" },\n    \"from_account\": { \"type\": \"string\" },\n    \"to_account\": { \"type\": \"string\" },\n    \"goal_date\": { \"type\": \"string\", \"format\": \"date\" },\n    \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"deleted_at\": { \"type\": [\"string\", \"null\"], \"format\": \"date-time\" },\n    \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"rules\": {\n      \"type\": \"array\",\n      \"items\": { \"type\": \"object\" }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"09d065b8-af35-4e6a-8d2c-e3443fc21e34","name":"Successful Response","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"total\": \"1000\",\r\n    \"goal_date\": \"2027-12-30\",\r\n    \"project_name\": \"meta para ahorra pasajes\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 18:19:53 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"2606"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"e6efe104-0ac5-4260-99d8-135e1306de1c"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LV7DeGc3oAMEjfw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838a549-1cbff06201baf3b03cdff6eb;Parent=48698edb5395fa69;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"project_category\": {\n        \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n        \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n        \"item_name\": \"project_type_holidays\",\n        \"description\": \"Meta de ahorro para vacaciones\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n            \"name\": \"Vacaciones\",\n            \"color\": \"#7C2582\",\n            \"group\": \"premium\",\n            \"order\": 1,\n            \"active\": true,\n            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n            \"description\": \"\"\n        }\n    },\n    \"project_status\": {\n        \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n        \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n        \"item_name\": \"project_status_active\",\n        \"description\": \"Meta activa\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n        }\n    },\n    \"project_config\": {\n        \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n        \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n        \"item_name\": \"xerpa_project\",\n        \"description\": \"Meta default 212\",\n        \"metadata\": {\n            \"limit\": null,\n            \"default\": true,\n            \"available\": true,\n            \"access_denied\": {},\n            \"permission_edit_fields\": [\n                \"project_name\",\n                \"goal_date\",\n                \"total\"\n            ],\n            \"allows_receive_transfers\": true,\n            \"fields_required_to_create\": [\n                \"project_name\",\n                \"goal_date\",\n                \"total\"\n            ]\n        }\n    },\n    \"project_name\": \"meta para ahorra pasajes\",\n    \"total\": 1000,\n    \"progress\": 9000,\n    \"processing\": 0,\n    \"pending\": 0,\n    \"investment_returns\": 0,\n    \"from_account\": \"test_user_api_2_account_1\",\n    \"to_account\": \"test_user_api_2_account_2\",\n    \"goal_date\": \"2027-12-30\",\n    \"updated_at\": \"2025-05-29T12:19:53.137192-06:00\",\n    \"deleted_at\": null,\n    \"created_at\": \"2025-05-29T10:24:51.224698-06:00\",\n    \"rules\": [\n        {\n            \"id\": \"63750bb3-3ec8-496f-b330-8de60b3690e6\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"amount\": 0,\n            \"salary_percentage\": 0,\n            \"execution_frequency\": null,\n            \"soccer_condition\": null,\n            \"soccer_team\": null,\n            \"weather_city\": null,\n            \"temperature\": 0,\n            \"created_at\": \"2025-05-29T10:24:51.238649-06:00\",\n            \"rule_type\": {\n                \"id\": \"3665326e-994b-4706-a705-f8356d2b4a47\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_internal_transfer\",\n                \"description\": \"Regla transferencia interna\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                }\n            },\n            \"rule_status\": {\n                \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n                \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                \"item_name\": \"rule_status_active\",\n                \"description\": \"Regla activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_STATUS_ACTIVE\"\n                }\n            },\n            \"transaction_category\": null,\n            \"spend_less_limit_amount\": 0,\n            \"spend_less_category_id\": null,\n            \"deleted_at\": null\n        }\n    ]\n}"},{"id":"5a31c189-f4e2-4a47-bec0-a6740fa9a600","name":"Bad Request - Invalid total","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"total\": \"-1\",\r\n    \"goal_date\": \"2027-12-30\",\r\n    \"project_name\": \"meta para ahorra pasajes\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 18:27:50 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"62"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"07dc37a0-9105-481f-ae28-2886b40695bd"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LV8N_EiBIAMEjCg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838a725-59f45f6f770ee90b133f3a82;Parent=3e26555dd3922483;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"total\": [\n        \"Ensure this value is greater than or equal to 1.\"\n    ]\n}"},{"id":"178c3bdc-1fed-4bb9-8cc0-9d6c510827b2","name":"Bad Request - Invalid goal date","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"total\": \"1000\",\r\n    \"goal_date\": \"2021-12-30\",\r\n    \"project_name\": \"meta para ahorra pasajes\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 18:28:23 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"33"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"8e196caf-b835-4975-84f6-52ad90954648"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LV8TGHSGoAMEVJQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838a746-0114ef57380d3b995616c407;Parent=0ae2b545879d4bdf;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"goal_date\": [\n        \"goal date error\"\n    ]\n}"},{"id":"c4f9e3cc-804d-4e9e-bba6-d683287afabf","name":"Bad Request - Invalid project name","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"total\": \"1000\",\r\n    \"goal_date\": \"2027-12-30\",\r\n    \"project_name\": \"\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 18:28:47 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"49"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"8faefe0d-8970-4007-a5c3-3e2688ab3038"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LV8W7GUFIAMEjkw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838a75f-3d789bb5626e91d2762c67c7;Parent=0d365fdb0a356e0c;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"project_name\": [\n        \"This field may not be blank.\"\n    ]\n}"}],"_postman_id":"b158dfb6-7215-4d51-82cd-ba03e81c0134"},{"name":"Detalles de la meta","event":[{"listen":"test","script":{"id":"8804dc0b-29b1-4cf3-ab5a-23765bee726c","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const projectProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    project_category: 'object',\r","    project_status: 'object',\r","    project_name: 'string',\r","    total: 'number',\r","    progress: 'number',\r","    processing: 'number',\r","    pending: 'number',\r","    from_account: 'string',\r","    to_account: 'string',\r","    goal_date: 'string',\r","    updated_at: 'string',\r","    deleted_at: 'string',\r","    created_at: 'string',\r","    rules: 'array'\r","};\r","\r","const categoryProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const statusProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const categoryMetadataProperties = {\r","    icon: 'string',\r","    name: 'string',\r","    color: 'string',\r","    order: 'number',\r","    active: 'boolean',\r","    short_name: 'string',\r","    description: 'string'\r","};\r","\r","const statusMetadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","// Check project properties\r","pm.test(\"Project has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, projectProperties);\r","});\r","\r","// Check project_category properties\r","pm.test(\"Project category has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.project_category, categoryProperties);\r","});\r","\r","// Check project_status properties\r","pm.test(\"Project status has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.project_status, statusProperties);\r","});\r","\r","// Check project_category metadata properties\r","pm.test(\"Project category metadata has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.project_category.metadata, categoryMetadataProperties);\r","});\r","\r","// Check project_status metadata properties\r","pm.test(\"Project status metadata has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.project_status.metadata, statusMetadataProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"9b6d06eb-45b7-4bb3-8e2b-3fd408a6f1de","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/","description":"<p>Este endpoint permite obtener los detalles de un proyecto específico perteneciente a un <strong>usuario</strong>.</p>\n<img src=\"https://content.pstmn.io/a68cf452-f951-43dc-8902-ca6c8f7f33be/T2J0ZW5lci5wbmc=\" width=\"100\" height=\"110\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Metodo: GET</p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_id</code> (string): ID del proyecto.</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<hr />\n<h4 id=\"response\">Response</h4>\n<p>La respuesta incluirá los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): ID del proyecto.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_category</code> (object): Detalles de la categoría del proyecto, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID de la categoría.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la categoría.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>, <code>name</code>, <code>color</code>, <code>group</code>, <code>order</code>, <code>active</code>, <code>short_name</code>, <code>description</code>.</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>project_status</code> (object): Detalles del estado actual del proyecto, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del estado.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo del estado.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem de estado.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del estado.</p>\n</li>\n<li><p><code>metadata</code> (objeto): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>, <code>color</code>, <code>active</code>, <code>short_name</code>.</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>project_config</code> (object): Información sobre el estado la configuración del proyecto, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID de la configuración.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo de la configuración.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem de la configuración.</p>\n</li>\n<li><p><code>description</code>(string): Descripción de la configuración.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>limit</code>, <code>default</code>, <code>available</code>, <code>access_denied</code>, <code>permission_edit_field</code>, <code>allows_recieve_transfers</code>, <code>fields_required_to_create</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>project_name</code> (string): Nombre del proyecto.</p>\n</li>\n<li><p><code>total</code> (number): Monto total asignado al proyecto.</p>\n</li>\n<li><p><code>progress</code> (number): Monto ya ahorrado.</p>\n</li>\n<li><p><code>processing</code> (number): Monto en proceso.</p>\n</li>\n<li><p><code>pending</code> (number): Monto pendiente.</p>\n</li>\n<li><p><code>investment_returns</code>(number): Importe ganado por las inversiones.</p>\n</li>\n<li><p><code>from_account</code> (string): Cuenta de origen de los fondos.</p>\n</li>\n<li><p><code>to_account</code> (string): Cuenta destino de los fondos.</p>\n</li>\n<li><p><code>goal_date</code> (string): Fecha objetivo del proyecto.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de última actualización.</p>\n</li>\n<li><p><code>deleted_at</code> (null or string): Fecha de eliminación, si aplica.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha de creación del proyecto.</p>\n</li>\n<li><p><code>rules</code> (array of object): Arreglo de reglas asociadas al proyecto.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Response Example\n{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\" },\n    \"user_id\": { \"type\": \"string\" },\n    \"project_category\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": { \"type\": \"string\" },\n        \"catalog\": { \"type\": \"string\" },\n        \"item_name\": { \"type\": \"string\" },\n        \"description\": { \"type\": \"string\" },\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"icon\": { \"type\": \"string\" },\n            \"name\": { \"type\": \"string\" },\n            \"color\": { \"type\": \"string\" },\n            \"group\": { \"type\": \"string\" },\n            \"order\": { \"type\": \"integer\" },\n            \"active\": { \"type\": \"boolean\" },\n            \"short_name\": { \"type\": \"string\" },\n            \"description\": { \"type\": \"string\" }\n          }\n        }\n      }\n    },\n    \"project_status\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": { \"type\": \"string\" },\n        \"catalog\": { \"type\": \"string\" },\n        \"item_name\": { \"type\": \"string\" },\n        \"description\": { \"type\": \"string\" },\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"icon\": { \"type\": \"string\" },\n            \"color\": { \"type\": \"string\" },\n            \"active\": { \"type\": \"boolean\" },\n            \"short_name\": { \"type\": \"string\" }\n          }\n        }\n      }\n    },\n    \"project_config\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": { \"type\": \"string\" },\n        \"catalog\": { \"type\": \"string\" },\n        \"item_name\": { \"type\": \"string\" },\n        \"description\": { \"type\": \"string\" },\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"limit\": { \"type\": [\"number\", \"null\"] },\n            \"default\": { \"type\": \"boolean\" },\n            \"available\": { \"type\": \"boolean\" },\n            \"access_denied\": { \"type\": \"object\" },\n            \"permission_edit_fields\": {\n              \"type\": \"array\",\n              \"items\": { \"type\": \"string\" }\n            },\n            \"allows_receive_transfers\": { \"type\": \"boolean\" },\n            \"fields_required_to_create\": {\n              \"type\": \"array\",\n              \"items\": { \"type\": \"string\" }\n            }\n          }\n        }\n      }\n    },\n    \"project_name\": { \"type\": \"string\" },\n    \"total\": { \"type\": \"number\" },\n    \"progress\": { \"type\": \"number\" },\n    \"processing\": { \"type\": \"number\" },\n    \"pending\": { \"type\": \"number\" },\n    \"investment_returns\": { \"type\": \"number\" },\n    \"from_account\": { \"type\": \"string\" },\n    \"to_account\": { \"type\": \"string\" },\n    \"goal_date\": { \"type\": \"string\", \"format\": \"date\" },\n    \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"deleted_at\": { \"type\": [\"string\", \"null\"], \"format\": \"date-time\" },\n    \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"rules\": {\n      \"type\": \"array\",\n      \"items\": { \"type\": \"object\" }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"fc6d50b9-6817-4ac8-a184-806b5d43e9a2","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 17:26:07 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"1567"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"6b6c99ab-0234-4171-b18e-c8f50b58f8ca"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LVzLSGDlIAMErdA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-683898ae-3bfa2e6f33aa2d3a55b9ba5a;Parent=229c99569ea0cb93;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"project_category\": {\n        \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n        \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n        \"item_name\": \"project_type_holidays\",\n        \"description\": \"Meta de ahorro para vacaciones\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n            \"name\": \"Vacaciones\",\n            \"color\": \"#7C2582\",\n            \"group\": \"premium\",\n            \"order\": 1,\n            \"active\": true,\n            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n            \"description\": \"\"\n        }\n    },\n    \"project_status\": {\n        \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n        \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n        \"item_name\": \"project_status_active\",\n        \"description\": \"Meta activa\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n        }\n    },\n    \"project_config\": {\n        \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n        \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n        \"item_name\": \"xerpa_project\",\n        \"description\": \"Meta default 212\",\n        \"metadata\": {\n            \"limit\": null,\n            \"default\": true,\n            \"available\": true,\n            \"access_denied\": {},\n            \"permission_edit_fields\": [\n                \"project_name\",\n                \"goal_date\",\n                \"total\"\n            ],\n            \"allows_receive_transfers\": true,\n            \"fields_required_to_create\": [\n                \"project_name\",\n                \"goal_date\",\n                \"total\"\n            ]\n        }\n    },\n    \"project_name\": \"Viaje a japon\",\n    \"total\": 20000,\n    \"progress\": 9000,\n    \"processing\": 0,\n    \"pending\": 0,\n    \"investment_returns\": 0,\n    \"from_account\": \"test_user_api_2_account_1\",\n    \"to_account\": \"test_user_api_2_account_2\",\n    \"goal_date\": \"2030-10-30\",\n    \"updated_at\": \"2025-05-29T10:48:55.119651-06:00\",\n    \"deleted_at\": null,\n    \"created_at\": \"2025-05-29T10:24:51.224698-06:00\",\n    \"rules\": []\n}"},{"id":"a5851083-bd14-4707-9a2b-76b0a1579dd7","name":"Bad Request - Invalid proyect ID","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 17:45:17 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"23"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"2843d285-5042-4839-bc8d-a37abc65b65c"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LV1_HGuhoAMERlQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68389d2d-2d7fa530791609065596fdf3;Parent=6cc7717a583b06ba;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Not found.\"\n}"}],"_postman_id":"9b6d06eb-45b7-4bb3-8e2b-3fd408a6f1de"},{"name":"Editar cuentas de la meta","event":[{"listen":"test","script":{"id":"2ab08bd4-92a3-40f6-b612-8fbbda119cce","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime()\r","xerpaTestApi.testSuccessfulPut()"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"d0e5a60c-446f-4f6b-a876-bcaded6bbe37","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"from_account\": \"{{from_account}}\",\r\n    \"to_account\": \"{{to_account}}\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/set-accounts/","description":"<p>Este endpoint permite <strong>actualizar las cuentas asociadas a un proyecto específico</strong> de un usuario.</p>\n<img src=\"https://content.pstmn.io/9d7569a2-4a50-4dc4-8a84-e10e2fb3c560/Y3VlbnRhcy5wbmc=\" width=\"100\" height=\"110\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Metodo: PATCH</p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/set-accounts/</p>\n</li>\n<li><p>Parametros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_id</code> (string): ID del proyecto.</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body\">Request Body</h4>\n<p>Debe enviarse en formato JSON e incluir los siguientes campos:</p>\n<ul>\n<li><p><code>from_account</code> (string): Cuenta de origen desde la cual se realizará la transferencia.</p>\n</li>\n<li><p><code>to_account</code> (string): Cuenta destino a la cual se transferirán los fondos.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body-example\">Request Body Example</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"from_account\": \"account_id_1\",\n    \"to_account\": \"account_id_2\"\n}\n\n</code></pre>\n<hr />\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON vacío, indicando que la operación se completó correctamente.</p>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","set-accounts",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"8ad59dbb-8d30-4bd0-b5d8-bd552c66c45d","name":"Successful Response","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"from_account\": \"XX-1234581\",\r\n    \"to_account\": \"XX-1234561\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/set-accounts/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{}"},{"id":"29dc89a8-2d99-4440-9e44-985f38904396","name":"Bad Request - Invalid accounts","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"from_account\": \"XX-1234581\",\r\n    \"to_account\": \"XX-1234561\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/set-accounts/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"\"Invalid accounts.\""}],"_postman_id":"d0e5a60c-446f-4f6b-a876-bcaded6bbe37"},{"name":"Activar meta","event":[{"listen":"test","script":{"id":"f572cb93-40be-4480-afe9-ea1d96024209","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    project_category: 'object',\r","    project_status: 'object',\r","    project_name: 'string',\r","    total: 'number',\r","    progress: 'number',\r","    processing: 'number',\r","    pending: 'number',\r","    from_account: { type: 'string', optional: true },\r","    to_account: { type: 'string', optional: true },\r","    goal_date: 'string',\r","    updated_at: 'string',\r","    deleted_at: { type: 'string', optional: true },\r","    created_at: 'string',\r","    rules: 'array'\r","};\r","\r","const projectCategoryProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const projectStatusProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    name: { type: 'string', optional: true },\r","    color: 'string',\r","    order: { type: 'number', optional: true },\r","    active: 'boolean',\r","    short_name: 'string',\r","    description: { type: 'string', optional: true }\r","};\r","\r","const ruleProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    amount: 'number',\r","    salary_percentage: 'number',\r","    execution_frequency: { type: 'string', optional: true },\r","    soccer_condition: { type: 'string', optional: true },\r","    soccer_team: { type: 'string', optional: true },\r","    weather_city: { type: 'string', optional: true },\r","    temperature: 'number',\r","    created_at: 'string',\r","    rule_type: 'object',\r","    rule_status: 'object',\r","    transaction_category: { type: 'string', optional: true },\r","    spend_less_limit_amount: 'number',\r","    spend_less_category_id: { type: 'string', optional: true },\r","    deleted_at: { type: 'string', optional: true }\r","};\r","\r","const ruleTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const ruleStatusProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson) {\r","        xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","\r","        // Check properties of the project_category object\r","        xerpaTestApi.checkObjectProperties(responseJson.project_category, projectCategoryProperties);\r","\r","        // Check properties of the project_status object\r","        xerpaTestApi.checkObjectProperties(responseJson.project_status, projectStatusProperties);\r","\r","        // Check metadata properties of the project_category object\r","        xerpaTestApi.checkObjectProperties(responseJson.project_category.metadata, metadataProperties);\r","\r","        // Check metadata properties of the project_status object\r","        xerpaTestApi.checkObjectProperties(responseJson.project_status.metadata, metadataProperties);\r","\r","        // Check properties of the rules array\r","        if (responseJson.rules && responseJson.rules.length > 0) {\r","            xerpaTestApi.checkObjectProperties(responseJson.rules[0], ruleProperties);\r","\r","            // Check properties of the rule_type object in the first rule\r","            xerpaTestApi.checkObjectProperties(responseJson.rules[0].rule_type, ruleTypeProperties);\r","\r","            // Check properties of the rule_status object in the first rule\r","            xerpaTestApi.checkObjectProperties(responseJson.rules[0].rule_status, ruleStatusProperties);\r","\r","            // Check metadata properties of the rule_type object in the first rule\r","            xerpaTestApi.checkObjectProperties(responseJson.rules[0].rule_type.metadata, metadataProperties);\r","\r","            // Check metadata properties of the rule_status object in the first rule\r","            xerpaTestApi.checkObjectProperties(responseJson.rules[0].rule_status.metadata, metadataProperties);\r","        }\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"17a6b511-c74c-4088-a92b-ccb408999e8d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n\n    \n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/activate/","description":"<p>El endpoint tiene la funcion de activar un proyecto específico para un usuario.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Metodo: <code>PATCH</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/activate/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_id</code>(string): ID del proyecto a activar.</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body\">Request body</h4>\n<ul>\n<li>Este request de tipo <code>PATCH</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<ul>\n<li><p><code>id</code> (string): ID del proyecto.</p>\n</li>\n<li><p><code>goal_date</code> (string): Fecha objetivo del proyecto.</p>\n</li>\n<li><p><code>total</code> (string): Monto total asociado al proyecto.</p>\n</li>\n<li><p><code>project_name</code> (string): Nombre del proyecto.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario propietario del proyecto.</p>\n</li>\n<li><p><code>progress</code> (number): Monto ya ahorrado o progresado en el proyecto.</p>\n</li>\n<li><p><code>processing</code> (number): Monto actualmente en proceso de ahorro.</p>\n</li>\n<li><p><code>pending</code> (number): Monto pendiente por ahorrar.</p>\n</li>\n<li><p><code>from_account</code> (string): Cuenta de origen de los fondos.</p>\n</li>\n<li><p><code>to_account</code> (string): Cuenta destino del ahorro.</p>\n</li>\n<li><p><code>investment_returns</code>(number): Importe ganado por las inversiones.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha de creación del proyecto.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de última actualización.</p>\n</li>\n<li><p><code>deleted_at</code> (null or string): Fecha de eliminación, si aplica.</p>\n</li>\n<li><p><code>proyect_category</code> (string): ID de la categoría del proyecto.</p>\n</li>\n<li><p><code>proyect_status</code> (string): ID del status del proyecto.</p>\n</li>\n<li><p><code>proyect_config</code> (string): ID de la configuración del proyecto.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\"type\": \"string\"},\n    \"user_id\": {\"type\": \"string\"},\n    \"project_name\": {\"type\": \"string\"},\n    \"total\": {\"type\": \"string\"},\n    \"progress\": {\"type\": \"string\"},\n    \"processing\": {\"type\": \"string\"},\n    \"pending\": {\"type\": \"string\"},\n    \"from_account\": {\"type\": \"string\"},\n    \"to_account\": {\"type\": \"string\"},\n    \"goal_date\": {\"type\": \"string\"},\n    \"created_at\": {\"type\": \"string\"},\n    \"updated_at\": {\"type\": \"string\"},\n    \"deleted_at\": {\"type\": [\"string\", \"null\"]},\n    \"project_category\": {\"type\": \"string\"},\n    \"project_status\": {\"type\": \"string\"}\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","activate",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"ec358183-ddaa-498d-aa61-be82a3b8d633","name":"Successful Response","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/activate/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 02 Jun 2025 15:28:19 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"2593"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"bc54fc43-28f4-4553-b796-12356c3e86c6"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LitrGHxGoAMEmQw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-683dc313-490b85417d38be1d46b61c20;Parent=6e4972d4be2d3e88;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"7128da5f-616b-4500-9d51-23eb185e8975\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"project_category\": {\n        \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n        \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n        \"item_name\": \"project_type_holidays\",\n        \"description\": \"Meta de ahorro para vacaciones\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n            \"name\": \"Vacaciones\",\n            \"color\": \"#7C2582\",\n            \"group\": \"premium\",\n            \"order\": 1,\n            \"active\": true,\n            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n            \"description\": \"\"\n        }\n    },\n    \"project_status\": {\n        \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n        \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n        \"item_name\": \"project_status_active\",\n        \"description\": \"Meta activa\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n        }\n    },\n    \"project_config\": {\n        \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n        \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n        \"item_name\": \"xerpa_project\",\n        \"description\": \"Meta default 212\",\n        \"metadata\": {\n            \"limit\": null,\n            \"default\": true,\n            \"available\": true,\n            \"access_denied\": {},\n            \"permission_edit_fields\": [\n                \"project_name\",\n                \"goal_date\",\n                \"total\"\n            ],\n            \"allows_receive_transfers\": true,\n            \"fields_required_to_create\": [\n                \"project_name\",\n                \"goal_date\",\n                \"total\"\n            ]\n        }\n    },\n    \"project_name\": \"Viaje a japon\",\n    \"total\": 20000,\n    \"progress\": 0,\n    \"processing\": 0,\n    \"pending\": 0,\n    \"investment_returns\": 0,\n    \"from_account\": \"test_user_api_2_account_1\",\n    \"to_account\": \"test_user_api_2_account_2\",\n    \"goal_date\": \"2030-10-30\",\n    \"updated_at\": \"2025-06-02T09:28:19.612923-06:00\",\n    \"deleted_at\": null,\n    \"created_at\": \"2025-06-02T09:25:07.257107-06:00\",\n    \"rules\": [\n        {\n            \"id\": \"c4003c6f-1972-44b6-b98a-1357f0be7ab2\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"amount\": 0,\n            \"salary_percentage\": 0,\n            \"execution_frequency\": null,\n            \"soccer_condition\": null,\n            \"soccer_team\": null,\n            \"weather_city\": null,\n            \"temperature\": 0,\n            \"created_at\": \"2025-06-02T09:25:07.269308-06:00\",\n            \"rule_type\": {\n                \"id\": \"3665326e-994b-4706-a705-f8356d2b4a47\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_internal_transfer\",\n                \"description\": \"Regla transferencia interna\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                }\n            },\n            \"rule_status\": {\n                \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n                \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                \"item_name\": \"rule_status_active\",\n                \"description\": \"Regla activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_STATUS_ACTIVE\"\n                }\n            },\n            \"transaction_category\": null,\n            \"spend_less_limit_amount\": 0,\n            \"spend_less_category_id\": null,\n            \"deleted_at\": null\n        }\n    ]\n}"},{"id":"4e867faa-5ed1-4ce4-ba73-f27050c13601","name":"Not Found","originalRequest":{"method":"PATCH","header":[],"url":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/activate/"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"\"Project not found.\""}],"_postman_id":"17a6b511-c74c-4088-a92b-ccb408999e8d"},{"name":"Eliminar meta","event":[{"listen":"test","script":{"id":"5b5bcf6f-33eb-44bf-aa9a-913ef5a84522","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime()\r","xerpaTestApi.testSuccessfulDelete()"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"ccef7dff-dcdf-404a-aa58-6c3dd3560026","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"DELETE","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/","description":"<p>Este endpoint se utiliza para <strong>eliminar un proyecto específico</strong> perteneciente a un usuario.</p>\n<img src=\"https://content.pstmn.io/be01bddd-512c-4420-9b83-e59bf4ce254a/RWxpbWluYXIucG5n\" width=\"100\" height=\"110\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Metodo: DELETE</p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/</p>\n</li>\n<li><p>Parámetros de ruta</p>\n<ul>\n<li><p><code>user_id</code> (string): Identificador único del usuario.</p>\n</li>\n<li><p><code>project_id</code> (string): Identificador único del proyecto que se desea eliminar.</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>DELETE</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<hr />\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON vacío, indicando que la operación se completó correctamente.</p>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"75d0f309-556f-4120-881f-8231853dd0e7","name":"Successful Response","originalRequest":{"method":"DELETE","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/"},"status":"No Content","code":204,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 19:04:03 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"0"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"2a3d01d9-0c45-4532-bb30-820db2c9cef0"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LWBhlHk7oAMEb6w="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838afa3-731a4df22a0d13302f2ad387;Parent=0e7f62c1f2781121;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":null},{"id":"3655a7e3-3271-4bbd-be5b-60d7b7554dae","name":"Bad Request - Delete project with active savings","originalRequest":{"method":"DELETE","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 19:01:35 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"109"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"c6642398-87d7-46ab-aac9-a4bf507054d2"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LWBKhFfroAMERJw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838af0f-34bd6b8d2059ce6b2b1a8b14;Parent=586edcc007567c49;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"error_code\": \"3\",\n    \"error_description\": \"Debes mover tus ahorros a otra cuenta para poder eliminar esta meta.\"\n}"},{"id":"519a25c2-3acd-4777-b185-7cda2e0688a9","name":"Bad Request - Project already deleted","originalRequest":{"method":"DELETE","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 19:05:37 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"65"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"ad7e9df4-f228-4f2d-b92b-d0cc36b3c769"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LWBwUHWzIAMECKg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838b001-275f35d1035f722b5b86c482;Parent=234ef285d1ca1df4;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"error_code\": \"2\",\n    \"error_description\": \"Meta ya estaba eliminada\"\n}"},{"id":"2fec628c-15c5-4176-aa77-595696e65934","name":"Eliminar proyecto","originalRequest":{"method":"DELETE","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/"},"status":"Internal Server Error","code":500,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 26 Jun 2025 15:22:52 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"182515"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"d66a6c60-442c-42e1-ab79-5073d5fef189"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"MxzX7H8cIAMEQnA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-685d65cb-3ef5d9db54b8242c3d57ebc5;Parent=7af17dc2860f6a14;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n  <meta name=\"robots\" content=\"NONE,NOARCHIVE\">\n  <title>IntegrityError\n          at /api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/</title>\n  <style type=\"text/css\">\n    html * { padding:0; margin:0; }\n    body * { padding:10px 20px; }\n    body * * { padding:0; }\n    body { font:small sans-serif; background-color:#fff; color:#000; }\n    body>div { border-bottom:1px solid #ddd; }\n    h1 { font-weight:normal; }\n    h2 { margin-bottom:.8em; }\n    h3 { margin:1em 0 .5em 0; }\n    h4 { margin:0 0 .5em 0; font-weight: normal; }\n    code, pre { font-size: 100%; white-space: pre-wrap; word-break: break-word; }\n    summary { cursor: pointer; }\n    table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; }\n    tbody td, tbody th { vertical-align:top; padding:2px 3px; }\n    thead th {\n      padding:1px 6px 1px 3px; background:#fefefe; text-align:left;\n      font-weight:normal; font-size:11px; border:1px solid #ddd;\n    }\n    tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; }\n    table.vars { margin:5px 10px 2px 40px; width: auto; }\n    table.vars td, table.req td { font-family:monospace; }\n    table td.code { width:100%; }\n    table td.code pre { overflow:hidden; }\n    table.source th { color:#666; }\n    table.source td { font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }\n    ul.traceback { list-style-type:none; color: #222; }\n    ul.traceback li.cause { word-break: break-word; }\n    ul.traceback li.frame { padding-bottom:1em; color:#4f4f4f; }\n    ul.traceback li.user { background-color:#e0e0e0; color:#000 }\n    div.context { padding:10px 0; overflow:hidden; }\n    div.context ol { padding-left:30px; margin:0 10px; list-style-position: inside; }\n    div.context ol li { font-family:monospace; white-space:pre; color:#777; cursor:pointer; padding-left: 2px; }\n    div.context ol li pre { display:inline; }\n    div.context ol.context-line li { color:#464646; background-color:#dfdfdf; padding: 3px 2px; }\n    div.context ol.context-line li span { position:absolute; right:32px; }\n    .user div.context ol.context-line li { background-color:#bbb; color:#000; }\n    .user div.context ol li { color:#666; }\n    div.commands, summary.commands { margin-left: 40px; }\n    div.commands a, summary.commands { color:#555; text-decoration:none; }\n    .user div.commands a { color: black; }\n    #summary { background: #ffc; }\n    #summary h2 { font-weight: normal; color: #666; }\n    #explanation { background:#eee; }\n    #template, #template-not-exist { background:#f6f6f6; }\n    #template-not-exist ul { margin: 0 0 10px 20px; }\n    #template-not-exist .postmortem-section { margin-bottom: 3px; }\n    #unicode-hint { background:#eee; }\n    #traceback { background:#eee; }\n    #requestinfo { background:#f6f6f6; padding-left:120px; }\n    #summary table { border:none; background:transparent; }\n    #requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }\n    #requestinfo h3 { margin-bottom:-1em; }\n    .error { background: #ffc; }\n    .specific { color:#cc3300; font-weight:bold; }\n    h2 span.commands { font-size:.7em; font-weight:normal; }\n    span.commands a:link {color:#5E5694;}\n    pre.exception_value { font-family: sans-serif; color: #575757; font-size: 1.5em; margin: 10px 0 10px 0; }\n    .append-bottom { margin-bottom: 10px; }\n    .fname { user-select: all; }\n  </style>\n  \n  <script>\n    function hideAll(elems) {\n      for (var e = 0; e < elems.length; e++) {\n        elems[e].style.display = 'none';\n      }\n    }\n    window.onload = function() {\n      hideAll(document.querySelectorAll('ol.pre-context'));\n      hideAll(document.querySelectorAll('ol.post-context'));\n      hideAll(document.querySelectorAll('div.pastebin'));\n    }\n    function toggle() {\n      for (var i = 0; i < arguments.length; i++) {\n        var e = document.getElementById(arguments[i]);\n        if (e) {\n          e.style.display = e.style.display == 'none' ? 'block': 'none';\n        }\n      }\n      return false;\n    }\n    function switchPastebinFriendly(link) {\n      s1 = \"Switch to copy-and-paste view\";\n      s2 = \"Switch back to interactive view\";\n      link.textContent = link.textContent.trim() == s1 ? s2: s1;\n      toggle('browserTraceback', 'pastebinTraceback');\n      return false;\n    }\n  </script>\n  \n</head>\n<body>\n<div id=\"summary\">\n  <h1>IntegrityError\n       at /api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/</h1>\n  <pre class=\"exception_value\">null value in column &quot;amount&quot; of relation &quot;activities&quot; violates not-null constraint\nDETAIL:  Failing row contains (9bc25df7-d314-4a9a-911f-b87bbf715c07, 72aed580-867d-49c9-96f5-7c3533e35fde, null, Solo ahorrar, null, null, Meta eliminada, Meta eliminada, , 2025-06-26 15:22:52.089497+00, 695136d2-9217-4622-a5f8-9eaf7b99e23e, null, 95ded7d5-23da-444d-b36a-4828ada5c0f0, null, null).\n</pre>\n  <table class=\"meta\">\n\n    <tr>\n      <th>Request Method:</th>\n      <td>DELETE</td>\n    </tr>\n    <tr>\n      <th>Request URL:</th>\n      <td>http://internal-k8s-xerpaheadlessgrou-205ab0f1be-396527338.us-east-1.elb.amazonaws.com/api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/</td>\n    </tr>\n\n    <tr>\n      <th>Django Version:</th>\n      <td>4.1.10</td>\n    </tr>\n\n    <tr>\n      <th>Exception Type:</th>\n      <td>IntegrityError</td>\n    </tr>\n\n\n    <tr>\n      <th>Exception Value:</th>\n      <td><pre>null value in column &quot;amount&quot; of relation &quot;activities&quot; violates not-null constraint\nDETAIL:  Failing row contains (9bc25df7-d314-4a9a-911f-b87bbf715c07, 72aed580-867d-49c9-96f5-7c3533e35fde, null, Solo ahorrar, null, null, Meta eliminada, Meta eliminada, , 2025-06-26 15:22:52.089497+00, 695136d2-9217-4622-a5f8-9eaf7b99e23e, null, 95ded7d5-23da-444d-b36a-4828ada5c0f0, null, null).\n</pre></td>\n    </tr>\n\n\n    <tr>\n      <th>Exception Location:</th>\n      <td><span class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</span>, line 89, in _execute</td>\n    </tr>\n\n\n    <tr>\n      <th>Raised during:</th>\n      <td>project.views.views.ProjectDetail</td>\n    </tr>\n\n    <tr>\n      <th>Python Executable:</th>\n      <td>/usr/local/bin/python</td>\n    </tr>\n    <tr>\n      <th>Python Version:</th>\n      <td>3.11.3</td>\n    </tr>\n    <tr>\n      <th>Python Path:</th>\n      <td><pre>[&#x27;/code/src&#x27;,\n &#x27;/code&#x27;,\n &#x27;/usr/local/bin&#x27;,\n &#x27;/usr/local/lib/python311.zip&#x27;,\n &#x27;/usr/local/lib/python3.11&#x27;,\n &#x27;/usr/local/lib/python3.11/lib-dynload&#x27;,\n &#x27;/usr/local/lib/python3.11/site-packages&#x27;]</pre></td>\n    </tr>\n    <tr>\n      <th>Server time:</th>\n      <td>Thu, 26 Jun 2025 09:22:52 -0600</td>\n    </tr>\n  </table>\n</div>\n\n\n\n\n<div id=\"traceback\">\n  <h2>Traceback <span class=\"commands\"><a href=\"#\" onclick=\"return switchPastebinFriendly(this);\">\n    Switch to copy-and-paste view</a></span>\n  </h2>\n  <div id=\"browserTraceback\">\n    <ul class=\"traceback\">\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 89, in _execute\n          \n\n          \n            <div class=\"context\" id=\"c140168560243776\">\n              \n                <ol start=\"82\" class=\"pre-context\" id=\"pre140168560243776\">\n                \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>            if params is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>                # params default might be backend specific.</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>                return self.cursor.execute(sql)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>            else:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"89\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>                return self.cursor.execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='90' class=\"post-context\" id=\"post140168560243776\">\n                  \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>    def _executemany(self, sql, param_list, *ignored_wrapper_args):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>            return self.cursor.executemany(sql, param_list)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168560243776\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>ignored_wrapper_args</td>\n                    <td class=\"code\"><pre>(False,\n {&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n  &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f7b89e32310&gt;})</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;9bc25df7-d314-4a9a-911f-b87bbf715c07&#x27;),\n UUID(&#x27;72aed580-867d-49c9-96f5-7c3533e35fde&#x27;),\n UUID(&#x27;95ded7d5-23da-444d-b36a-4828ada5c0f0&#x27;),\n None,\n None,\n None,\n UUID(&#x27;695136d2-9217-4622-a5f8-9eaf7b99e23e&#x27;),\n &#x27;Solo ahorrar&#x27;,\n None,\n None,\n &#x27;Meta eliminada&#x27;,\n &#x27;Meta eliminada&#x27;,\n &#x27;&#x27;,\n datetime.datetime(2025, 6, 26, 15, 22, 52, 89497, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f7b89e32310&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;activities&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &quot;rule_id&quot;, &#x27;\n &#x27;&quot;payment_id&quot;, &quot;payment_date&quot;, &quot;activity_type_id&quot;, &quot;project_name&quot;, &#x27;\n &#x27;&quot;rule_name&quot;, &quot;amount&quot;, &quot;title&quot;, &quot;message&quot;, &quot;footer&quot;, &quot;created_at&quot;, &#x27;\n &#x27;&quot;saving_id&quot;) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, &#x27;\n &#x27;%s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n          <li class=\"cause\"><h3>\n          \n            The above exception (null value in column &quot;amount&quot; of relation &quot;activities&quot; violates not-null constraint\nDETAIL:  Failing row contains (9bc25df7-d314-4a9a-911f-b87bbf715c07, 72aed580-867d-49c9-96f5-7c3533e35fde, null, Solo ahorrar, null, null, Meta eliminada, Meta eliminada, , 2025-06-26 15:22:52.089497+00, 695136d2-9217-4622-a5f8-9eaf7b99e23e, null, 95ded7d5-23da-444d-b36a-4828ada5c0f0, null, null).\n) was the direct cause of the following exception:\n          \n        </h3></li>\n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py</code>, line 56, in inner\n          \n\n          \n            <div class=\"context\" id=\"c140168567849024\">\n              \n                <ol start=\"49\" class=\"pre-context\" id=\"pre140168567849024\">\n                \n                  <li onclick=\"toggle('pre140168567849024', 'post140168567849024')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567849024', 'post140168567849024')\"><pre>        return inner</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567849024', 'post140168567849024')\"><pre>    else:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567849024', 'post140168567849024')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567849024', 'post140168567849024')\"><pre>        @wraps(get_response)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567849024', 'post140168567849024')\"><pre>        def inner(request):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567849024', 'post140168567849024')\"><pre>            try:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"56\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168567849024', 'post140168567849024')\"><pre>                response = get_response(request)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='57' class=\"post-context\" id=\"post140168567849024\">\n                  \n                  <li onclick=\"toggle('pre140168567849024', 'post140168567849024')\"><pre>            except Exception as exc:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567849024', 'post140168567849024')\"><pre>                response = response_for_exception(request, exc)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567849024', 'post140168567849024')\"><pre>            return response</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567849024', 'post140168567849024')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567849024', 'post140168567849024')\"><pre>        return inner</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567849024', 'post140168567849024')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168567849024\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>exc</td>\n                    <td class=\"code\"><pre>IntegrityError(&#x27;null value in column &quot;amount&quot; of relation &quot;activities&quot; violates not-null constraint\\nDETAIL:  Failing row contains (9bc25df7-d314-4a9a-911f-b87bbf715c07, 72aed580-867d-49c9-96f5-7c3533e35fde, null, Solo ahorrar, null, null, Meta eliminada, Meta eliminada, , 2025-06-26 15:22:52.089497+00, 695136d2-9217-4622-a5f8-9eaf7b99e23e, null, 95ded7d5-23da-444d-b36a-4828ada5c0f0, null, null).\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>get_response</td>\n                    <td class=\"code\"><pre>&lt;bound method BaseHandler._get_response of &lt;django.core.handlers.wsgi.WSGIHandler object at 0x7f7b8aab4a90&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;WSGIRequest: DELETE &#x27;/api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/&#x27;&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py</code>, line 197, in _get_response\n          \n\n          \n            <div class=\"context\" id=\"c140168567863872\">\n              \n                <ol start=\"190\" class=\"pre-context\" id=\"pre140168567863872\">\n                \n                  <li onclick=\"toggle('pre140168567863872', 'post140168567863872')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567863872', 'post140168567863872')\"><pre>        if response is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567863872', 'post140168567863872')\"><pre>            wrapped_callback = self.make_view_atomic(callback)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567863872', 'post140168567863872')\"><pre>            # If it is an asynchronous view, run it in a subthread.</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567863872', 'post140168567863872')\"><pre>            if asyncio.iscoroutinefunction(wrapped_callback):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567863872', 'post140168567863872')\"><pre>                wrapped_callback = async_to_sync(wrapped_callback)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567863872', 'post140168567863872')\"><pre>            try:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"197\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168567863872', 'post140168567863872')\"><pre>                response = wrapped_callback(request, *callback_args, **callback_kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='198' class=\"post-context\" id=\"post140168567863872\">\n                  \n                  <li onclick=\"toggle('pre140168567863872', 'post140168567863872')\"><pre>            except Exception as e:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567863872', 'post140168567863872')\"><pre>                response = self.process_exception_by_middleware(e, request)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567863872', 'post140168567863872')\"><pre>                if response is None:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567863872', 'post140168567863872')\"><pre>                    raise</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567863872', 'post140168567863872')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567863872', 'post140168567863872')\"><pre>        # Complain if the view returned None (a common error).</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168567863872\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>callback</td>\n                    <td class=\"code\"><pre>&lt;function View.as_view.&lt;locals&gt;.view at 0x7f7b8a383920&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>callback_args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>callback_kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;pk&#x27;: &#x27;95ded7d5-23da-444d-b36a-4828ada5c0f0&#x27;,\n &#x27;user_id&#x27;: &#x27;72aed580-867d-49c9-96f5-7c3533e35fde&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>middleware_method</td>\n                    <td class=\"code\"><pre>&lt;bound method CorsMiddleware.process_view of &lt;CorsMiddleware get_response=BaseHandler._get_response&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;WSGIRequest: DELETE &#x27;/api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>response</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.core.handlers.wsgi.WSGIHandler object at 0x7f7b8aab4a90&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>wrapped_callback</td>\n                    <td class=\"code\"><pre>&lt;function View.as_view.&lt;locals&gt;.view at 0x7f7b8a383920&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/views/decorators/csrf.py</code>, line 55, in wrapped_view\n          \n\n          \n            <div class=\"context\" id=\"c140168567856384\">\n              \n                <ol start=\"48\" class=\"pre-context\" id=\"pre140168567856384\">\n                \n                  <li onclick=\"toggle('pre140168567856384', 'post140168567856384')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567856384', 'post140168567856384')\"><pre>def csrf_exempt(view_func):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567856384', 'post140168567856384')\"><pre>    &quot;&quot;&quot;Mark a view function as being exempt from the CSRF view protection.&quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567856384', 'post140168567856384')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567856384', 'post140168567856384')\"><pre>    # view_func.csrf_exempt = True would also work, but decorators are nicer</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567856384', 'post140168567856384')\"><pre>    # if they don&#x27;t have side effects, so return a new function.</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567856384', 'post140168567856384')\"><pre>    def wrapped_view(*args, **kwargs):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"55\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168567856384', 'post140168567856384')\"><pre>        return view_func(*args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='56' class=\"post-context\" id=\"post140168567856384\">\n                  \n                  <li onclick=\"toggle('pre140168567856384', 'post140168567856384')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567856384', 'post140168567856384')\"><pre>    wrapped_view.csrf_exempt = True</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567856384', 'post140168567856384')\"><pre>    return wraps(view_func)(wrapped_view)</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168567856384\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>(&lt;WSGIRequest: DELETE &#x27;/api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/&#x27;&gt;,)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;pk&#x27;: &#x27;95ded7d5-23da-444d-b36a-4828ada5c0f0&#x27;,\n &#x27;user_id&#x27;: &#x27;72aed580-867d-49c9-96f5-7c3533e35fde&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>view_func</td>\n                    <td class=\"code\"><pre>&lt;function View.as_view.&lt;locals&gt;.view at 0x7f7b8a383880&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/views/generic/base.py</code>, line 103, in view\n          \n\n          \n            <div class=\"context\" id=\"c140168560231808\">\n              \n                <ol start=\"96\" class=\"pre-context\" id=\"pre140168560231808\">\n                \n                  <li onclick=\"toggle('pre140168560231808', 'post140168560231808')\"><pre>            self = cls(**initkwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560231808', 'post140168560231808')\"><pre>            self.setup(request, *args, **kwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560231808', 'post140168560231808')\"><pre>            if not hasattr(self, &quot;request&quot;):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560231808', 'post140168560231808')\"><pre>                raise AttributeError(</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560231808', 'post140168560231808')\"><pre>                    &quot;%s instance has no &#x27;request&#x27; attribute. Did you override &quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560231808', 'post140168560231808')\"><pre>                    &quot;setup() and forget to call super()?&quot; % cls.__name__</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560231808', 'post140168560231808')\"><pre>                )</pre></li>\n                \n                </ol>\n              \n              <ol start=\"103\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168560231808', 'post140168560231808')\"><pre>            return self.dispatch(request, *args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='104' class=\"post-context\" id=\"post140168560231808\">\n                  \n                  <li onclick=\"toggle('pre140168560231808', 'post140168560231808')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560231808', 'post140168560231808')\"><pre>        view.view_class = cls</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560231808', 'post140168560231808')\"><pre>        view.view_initkwargs = initkwargs</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560231808', 'post140168560231808')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560231808', 'post140168560231808')\"><pre>        # __name__ and __qualname__ are intentionally left unchanged as</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560231808', 'post140168560231808')\"><pre>        # view_class should be used to robustly determine the name of the view</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168560231808\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>cls</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;project.views.views.ProjectDetail&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>initkwargs</td>\n                    <td class=\"code\"><pre>{}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;pk&#x27;: &#x27;95ded7d5-23da-444d-b36a-4828ada5c0f0&#x27;,\n &#x27;user_id&#x27;: &#x27;72aed580-867d-49c9-96f5-7c3533e35fde&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;WSGIRequest: DELETE &#x27;/api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectDetail object at 0x7f7b8976b750&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 509, in dispatch\n          \n\n          \n            <div class=\"context\" id=\"c140168567850304\">\n              \n                <ol start=\"502\" class=\"pre-context\" id=\"pre140168567850304\">\n                \n                  <li onclick=\"toggle('pre140168567850304', 'post140168567850304')\"><pre>                                  self.http_method_not_allowed)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567850304', 'post140168567850304')\"><pre>            else:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567850304', 'post140168567850304')\"><pre>                handler = self.http_method_not_allowed</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567850304', 'post140168567850304')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567850304', 'post140168567850304')\"><pre>            response = handler(request, *args, **kwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567850304', 'post140168567850304')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567850304', 'post140168567850304')\"><pre>        except Exception as exc:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"509\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168567850304', 'post140168567850304')\"><pre>            response = self.handle_exception(exc)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='510' class=\"post-context\" id=\"post140168567850304\">\n                  \n                  <li onclick=\"toggle('pre140168567850304', 'post140168567850304')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567850304', 'post140168567850304')\"><pre>        self.response = self.finalize_response(request, response, *args, **kwargs)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567850304', 'post140168567850304')\"><pre>        return self.response</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567850304', 'post140168567850304')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567850304', 'post140168567850304')\"><pre>    def options(self, request, *args, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567850304', 'post140168567850304')\"><pre>        &quot;&quot;&quot;</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168567850304\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>handler</td>\n                    <td class=\"code\"><pre>&lt;bound method RetrieveUpdateDestroyAPIView.delete of &lt;project.views.views.ProjectDetail object at 0x7f7b8976b750&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;pk&#x27;: &#x27;95ded7d5-23da-444d-b36a-4828ada5c0f0&#x27;,\n &#x27;user_id&#x27;: &#x27;72aed580-867d-49c9-96f5-7c3533e35fde&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: DELETE &#x27;/api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectDetail object at 0x7f7b8976b750&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 469, in handle_exception\n          \n\n          \n            <div class=\"context\" id=\"c140168567861696\">\n              \n                <ol start=\"462\" class=\"pre-context\" id=\"pre140168567861696\">\n                \n                  <li onclick=\"toggle('pre140168567861696', 'post140168567861696')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567861696', 'post140168567861696')\"><pre>        exception_handler = self.get_exception_handler()</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567861696', 'post140168567861696')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567861696', 'post140168567861696')\"><pre>        context = self.get_exception_handler_context()</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567861696', 'post140168567861696')\"><pre>        response = exception_handler(exc, context)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567861696', 'post140168567861696')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567861696', 'post140168567861696')\"><pre>        if response is None:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"469\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168567861696', 'post140168567861696')\"><pre>            self.raise_uncaught_exception(exc)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='470' class=\"post-context\" id=\"post140168567861696\">\n                  \n                  <li onclick=\"toggle('pre140168567861696', 'post140168567861696')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567861696', 'post140168567861696')\"><pre>        response.exception = True</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567861696', 'post140168567861696')\"><pre>        return response</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567861696', 'post140168567861696')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567861696', 'post140168567861696')\"><pre>    def raise_uncaught_exception(self, exc):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567861696', 'post140168567861696')\"><pre>        if settings.DEBUG:</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168567861696\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>context</td>\n                    <td class=\"code\"><pre>{&#x27;args&#x27;: (),\n &#x27;kwargs&#x27;: {&#x27;pk&#x27;: &#x27;95ded7d5-23da-444d-b36a-4828ada5c0f0&#x27;,\n            &#x27;user_id&#x27;: &#x27;72aed580-867d-49c9-96f5-7c3533e35fde&#x27;},\n &#x27;request&#x27;: &lt;rest_framework.request.Request: DELETE &#x27;/api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/&#x27;&gt;,\n &#x27;view&#x27;: &lt;project.views.views.ProjectDetail object at 0x7f7b8976b750&gt;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exc</td>\n                    <td class=\"code\"><pre>IntegrityError(&#x27;null value in column &quot;amount&quot; of relation &quot;activities&quot; violates not-null constraint\\nDETAIL:  Failing row contains (9bc25df7-d314-4a9a-911f-b87bbf715c07, 72aed580-867d-49c9-96f5-7c3533e35fde, null, Solo ahorrar, null, null, Meta eliminada, Meta eliminada, , 2025-06-26 15:22:52.089497+00, 695136d2-9217-4622-a5f8-9eaf7b99e23e, null, 95ded7d5-23da-444d-b36a-4828ada5c0f0, null, null).\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exception_handler</td>\n                    <td class=\"code\"><pre>&lt;function exception_handler at 0x7f7b8a7609a0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>response</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectDetail object at 0x7f7b8976b750&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 480, in raise_uncaught_exception\n          \n\n          \n            <div class=\"context\" id=\"c140168567855488\">\n              \n                <ol start=\"473\" class=\"pre-context\" id=\"pre140168567855488\">\n                \n                  <li onclick=\"toggle('pre140168567855488', 'post140168567855488')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567855488', 'post140168567855488')\"><pre>    def raise_uncaught_exception(self, exc):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567855488', 'post140168567855488')\"><pre>        if settings.DEBUG:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567855488', 'post140168567855488')\"><pre>            request = self.request</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567855488', 'post140168567855488')\"><pre>            renderer_format = getattr(request.accepted_renderer, &#x27;format&#x27;)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567855488', 'post140168567855488')\"><pre>            use_plaintext_traceback = renderer_format not in (&#x27;html&#x27;, &#x27;api&#x27;, &#x27;admin&#x27;)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567855488', 'post140168567855488')\"><pre>            request.force_plaintext_errors(use_plaintext_traceback)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"480\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168567855488', 'post140168567855488')\"><pre>        raise exc</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='481' class=\"post-context\" id=\"post140168567855488\">\n                  \n                  <li onclick=\"toggle('pre140168567855488', 'post140168567855488')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567855488', 'post140168567855488')\"><pre>    # Note: Views are made CSRF exempt from within `as_view` as to prevent</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567855488', 'post140168567855488')\"><pre>    # accidental removal of this exemption in cases where `dispatch` needs to</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567855488', 'post140168567855488')\"><pre>    # be overridden.</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567855488', 'post140168567855488')\"><pre>    def dispatch(self, request, *args, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567855488', 'post140168567855488')\"><pre>        &quot;&quot;&quot;</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168567855488\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>exc</td>\n                    <td class=\"code\"><pre>IntegrityError(&#x27;null value in column &quot;amount&quot; of relation &quot;activities&quot; violates not-null constraint\\nDETAIL:  Failing row contains (9bc25df7-d314-4a9a-911f-b87bbf715c07, 72aed580-867d-49c9-96f5-7c3533e35fde, null, Solo ahorrar, null, null, Meta eliminada, Meta eliminada, , 2025-06-26 15:22:52.089497+00, 695136d2-9217-4622-a5f8-9eaf7b99e23e, null, 95ded7d5-23da-444d-b36a-4828ada5c0f0, null, null).\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>renderer_format</td>\n                    <td class=\"code\"><pre>&#x27;json&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: DELETE &#x27;/api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectDetail object at 0x7f7b8976b750&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>use_plaintext_traceback</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/views.py</code>, line 506, in dispatch\n          \n\n          \n            <div class=\"context\" id=\"c140168567863360\">\n              \n                <ol start=\"499\" class=\"pre-context\" id=\"pre140168567863360\">\n                \n                  <li onclick=\"toggle('pre140168567863360', 'post140168567863360')\"><pre>            # Get the appropriate handler method</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567863360', 'post140168567863360')\"><pre>            if request.method.lower() in self.http_method_names:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567863360', 'post140168567863360')\"><pre>                handler = getattr(self, request.method.lower(),</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567863360', 'post140168567863360')\"><pre>                                  self.http_method_not_allowed)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567863360', 'post140168567863360')\"><pre>            else:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567863360', 'post140168567863360')\"><pre>                handler = self.http_method_not_allowed</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567863360', 'post140168567863360')\"><pre></pre></li>\n                \n                </ol>\n              \n              <ol start=\"506\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168567863360', 'post140168567863360')\"><pre>            response = handler(request, *args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='507' class=\"post-context\" id=\"post140168567863360\">\n                  \n                  <li onclick=\"toggle('pre140168567863360', 'post140168567863360')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567863360', 'post140168567863360')\"><pre>        except Exception as exc:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567863360', 'post140168567863360')\"><pre>            response = self.handle_exception(exc)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567863360', 'post140168567863360')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567863360', 'post140168567863360')\"><pre>        self.response = self.finalize_response(request, response, *args, **kwargs)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567863360', 'post140168567863360')\"><pre>        return self.response</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168567863360\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>handler</td>\n                    <td class=\"code\"><pre>&lt;bound method RetrieveUpdateDestroyAPIView.delete of &lt;project.views.views.ProjectDetail object at 0x7f7b8976b750&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;pk&#x27;: &#x27;95ded7d5-23da-444d-b36a-4828ada5c0f0&#x27;,\n &#x27;user_id&#x27;: &#x27;72aed580-867d-49c9-96f5-7c3533e35fde&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: DELETE &#x27;/api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectDetail object at 0x7f7b8976b750&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/generics.py</code>, line 291, in delete\n          \n\n          \n            <div class=\"context\" id=\"c140168584939904\">\n              \n                <ol start=\"284\" class=\"pre-context\" id=\"pre140168584939904\">\n                \n                  <li onclick=\"toggle('pre140168584939904', 'post140168584939904')\"><pre>    def put(self, request, *args, **kwargs):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168584939904', 'post140168584939904')\"><pre>        return self.update(request, *args, **kwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168584939904', 'post140168584939904')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168584939904', 'post140168584939904')\"><pre>    def patch(self, request, *args, **kwargs):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168584939904', 'post140168584939904')\"><pre>        return self.partial_update(request, *args, **kwargs)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168584939904', 'post140168584939904')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168584939904', 'post140168584939904')\"><pre>    def delete(self, request, *args, **kwargs):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"291\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168584939904', 'post140168584939904')\"><pre>        return self.destroy(request, *args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168584939904\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;pk&#x27;: &#x27;95ded7d5-23da-444d-b36a-4828ada5c0f0&#x27;,\n &#x27;user_id&#x27;: &#x27;72aed580-867d-49c9-96f5-7c3533e35fde&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: DELETE &#x27;/api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectDetail object at 0x7f7b8976b750&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/rest_framework/mixins.py</code>, line 91, in destroy\n          \n\n          \n            <div class=\"context\" id=\"c140168567864960\">\n              \n                <ol start=\"84\" class=\"pre-context\" id=\"pre140168567864960\">\n                \n                  <li onclick=\"toggle('pre140168567864960', 'post140168567864960')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567864960', 'post140168567864960')\"><pre>class DestroyModelMixin:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567864960', 'post140168567864960')\"><pre>    &quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567864960', 'post140168567864960')\"><pre>    Destroy a model instance.</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567864960', 'post140168567864960')\"><pre>    &quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567864960', 'post140168567864960')\"><pre>    def destroy(self, request, *args, **kwargs):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567864960', 'post140168567864960')\"><pre>        instance = self.get_object()</pre></li>\n                \n                </ol>\n              \n              <ol start=\"91\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168567864960', 'post140168567864960')\"><pre>        self.perform_destroy(instance)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='92' class=\"post-context\" id=\"post140168567864960\">\n                  \n                  <li onclick=\"toggle('pre140168567864960', 'post140168567864960')\"><pre>        return Response(status=status.HTTP_204_NO_CONTENT)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567864960', 'post140168567864960')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567864960', 'post140168567864960')\"><pre>    def perform_destroy(self, instance):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567864960', 'post140168567864960')\"><pre>        instance.delete()</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168567864960\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>instance</td>\n                    <td class=\"code\"><pre>&lt;Project: Project object (95ded7d5-23da-444d-b36a-4828ada5c0f0)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;pk&#x27;: &#x27;95ded7d5-23da-444d-b36a-4828ada5c0f0&#x27;,\n &#x27;user_id&#x27;: &#x27;72aed580-867d-49c9-96f5-7c3533e35fde&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>request</td>\n                    <td class=\"code\"><pre>&lt;rest_framework.request.Request: DELETE &#x27;/api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectDetail object at 0x7f7b8976b750&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/code/src/project/views/views.py</code>, line 283, in perform_destroy\n          \n\n          \n            <div class=\"context\" id=\"c140168567862208\">\n              \n                <ol start=\"276\" class=\"pre-context\" id=\"pre140168567862208\">\n                \n                  <li onclick=\"toggle('pre140168567862208', 'post140168567862208')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567862208', 'post140168567862208')\"><pre>        configuration_evaluate = delete_project_service.get_configuration_evaluate()</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567862208', 'post140168567862208')\"><pre>        delete_project_service.log_evaluated_fields(configuration_evaluate)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567862208', 'post140168567862208')\"><pre>        delete_project_service.apply_validations(</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567862208', 'post140168567862208')\"><pre>            instance, configuration_evaluate)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567862208', 'post140168567862208')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567862208', 'post140168567862208')\"><pre>        instance.delete()</pre></li>\n                \n                </ol>\n              \n              <ol start=\"283\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168567862208', 'post140168567862208')\"><pre>        ActivityService.delete_project_event(instance)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='284' class=\"post-context\" id=\"post140168567862208\">\n                  \n                  <li onclick=\"toggle('pre140168567862208', 'post140168567862208')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567862208', 'post140168567862208')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567862208', 'post140168567862208')\"><pre>class SetAccountsProjectView(UpdateAPIView):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567862208', 'post140168567862208')\"><pre>    serializer_class = ProjectSerializer</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567862208', 'post140168567862208')\"><pre>    view_name = &quot;set_accounts_project_view&quot;</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567862208', 'post140168567862208')\"><pre>    permission_classes = [ProjectAdmin]</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168567862208\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>configuration_evaluate</td>\n                    <td class=\"code\"><pre>{&#x27;validate_all&#x27;: True,\n &#x27;validate_processing&#x27;: False,\n &#x27;validate_progress&#x27;: False,\n &#x27;validate_savings_processing&#x27;: False}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>delete_project_service</td>\n                    <td class=\"code\"><pre>&lt;project.services.delete_project_service.DeleteProjectService object at 0x7f7b89b430d0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>instance</td>\n                    <td class=\"code\"><pre>&lt;Project: Project object (95ded7d5-23da-444d-b36a-4828ada5c0f0)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;project.views.views.ProjectDetail object at 0x7f7b8976b750&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame user\">\n          \n            <code class=\"fname\">/code/src/activity/services.py</code>, line 56, in delete_project_event\n          \n\n          \n            <div class=\"context\" id=\"c140168567856576\">\n              \n                <ol start=\"49\" class=\"pre-context\" id=\"pre140168567856576\">\n                \n                  <li onclick=\"toggle('pre140168567856576', 'post140168567856576')\"><pre>            amount=project_instance.total,</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567856576', 'post140168567856576')\"><pre>            title=message_dict[&quot;title&quot;],</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567856576', 'post140168567856576')\"><pre>            message=message_dict[&quot;message&quot;],</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567856576', 'post140168567856576')\"><pre>            footer=message_dict[&quot;footer&quot;],</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567856576', 'post140168567856576')\"><pre>            rule_name=None,</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567856576', 'post140168567856576')\"><pre>            activity_type_id=activity_type_event_project_deleted</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567856576', 'post140168567856576')\"><pre>        )</pre></li>\n                \n                </ol>\n              \n              <ol start=\"56\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168567856576', 'post140168567856576')\"><pre>        new_activity.save()</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='57' class=\"post-context\" id=\"post140168567856576\">\n                  \n                  <li onclick=\"toggle('pre140168567856576', 'post140168567856576')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567856576', 'post140168567856576')\"><pre>    @classmethod</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567856576', 'post140168567856576')\"><pre>    def update_project_event(cls, project_instance):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567856576', 'post140168567856576')\"><pre>        &quot;&quot;&quot;</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567856576', 'post140168567856576')\"><pre>        Call this event when a project was update.</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567856576', 'post140168567856576')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168567856576\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>activity_type_event_project_deleted</td>\n                    <td class=\"code\"><pre>&#x27;695136d2-9217-4622-a5f8-9eaf7b99e23e&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>cls</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;activity.services.ActivityService&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>generate_text</td>\n                    <td class=\"code\"><pre>&lt;common.generate_activity_text.GenerateText object at 0x7f7b89a0b390&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>item</td>\n                    <td class=\"code\"><pre>&lt;Item: Item object (695136d2-9217-4622-a5f8-9eaf7b99e23e)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>message_dict</td>\n                    <td class=\"code\"><pre>{&#x27;footer&#x27;: &#x27;&#x27;, &#x27;message&#x27;: &#x27;Meta eliminada&#x27;, &#x27;title&#x27;: &#x27;Meta eliminada&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>model_list</td>\n                    <td class=\"code\"><pre>[{&#x27;model&#x27;: &lt;class &#x27;catalog.models.Item&#x27;&gt;,\n  &#x27;model_name&#x27;: &#x27;item&#x27;,\n  &#x27;pk&#x27;: UUID(&#x27;695136d2-9217-4622-a5f8-9eaf7b99e23e&#x27;)},\n {&#x27;model&#x27;: &lt;class &#x27;project.models.Project&#x27;&gt;,\n  &#x27;model_name&#x27;: &#x27;project&#x27;,\n  &#x27;pk&#x27;: UUID(&#x27;95ded7d5-23da-444d-b36a-4828ada5c0f0&#x27;)}]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>new_activity</td>\n                    <td class=\"code\"><pre>&lt;Activity: Activity object (9bc25df7-d314-4a9a-911f-b87bbf715c07)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>project_instance</td>\n                    <td class=\"code\"><pre>&lt;Project: Project object (95ded7d5-23da-444d-b36a-4828ada5c0f0)&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 812, in save\n          \n\n          \n            <div class=\"context\" id=\"c140168562266944\">\n              \n                <ol start=\"805\" class=\"pre-context\" id=\"pre140168562266944\">\n                \n                  <li onclick=\"toggle('pre140168562266944', 'post140168562266944')\"><pre>            for field in self._meta.concrete_fields:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168562266944', 'post140168562266944')\"><pre>                if not field.primary_key and not hasattr(field, &quot;through&quot;):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168562266944', 'post140168562266944')\"><pre>                    field_names.add(field.attname)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168562266944', 'post140168562266944')\"><pre>            loaded_fields = field_names.difference(deferred_fields)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168562266944', 'post140168562266944')\"><pre>            if loaded_fields:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168562266944', 'post140168562266944')\"><pre>                update_fields = frozenset(loaded_fields)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168562266944', 'post140168562266944')\"><pre></pre></li>\n                \n                </ol>\n              \n              <ol start=\"812\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168562266944', 'post140168562266944')\"><pre>        self.save_base(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='813' class=\"post-context\" id=\"post140168562266944\">\n                  \n                  <li onclick=\"toggle('pre140168562266944', 'post140168562266944')\"><pre>            using=using,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168562266944', 'post140168562266944')\"><pre>            force_insert=force_insert,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168562266944', 'post140168562266944')\"><pre>            force_update=force_update,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168562266944', 'post140168562266944')\"><pre>            update_fields=update_fields,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168562266944', 'post140168562266944')\"><pre>        )</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168562266944', 'post140168562266944')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168562266944\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>deferred_fields</td>\n                    <td class=\"code\"><pre>set()</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_insert</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_update</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;Activity: Activity object (9bc25df7-d314-4a9a-911f-b87bbf715c07)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 863, in save_base\n          \n\n          \n            <div class=\"context\" id=\"c140168567857152\">\n              \n                <ol start=\"856\" class=\"pre-context\" id=\"pre140168567857152\">\n                \n                  <li onclick=\"toggle('pre140168567857152', 'post140168567857152')\"><pre>            context_manager = transaction.atomic(using=using, savepoint=False)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567857152', 'post140168567857152')\"><pre>        else:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567857152', 'post140168567857152')\"><pre>            context_manager = transaction.mark_for_rollback_on_error(using=using)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567857152', 'post140168567857152')\"><pre>        with context_manager:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567857152', 'post140168567857152')\"><pre>            parent_inserted = False</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567857152', 'post140168567857152')\"><pre>            if not raw:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567857152', 'post140168567857152')\"><pre>                parent_inserted = self._save_parents(cls, using, update_fields)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"863\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168567857152', 'post140168567857152')\"><pre>            updated = self._save_table(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='864' class=\"post-context\" id=\"post140168567857152\">\n                  \n                  <li onclick=\"toggle('pre140168567857152', 'post140168567857152')\"><pre>                raw,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567857152', 'post140168567857152')\"><pre>                cls,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567857152', 'post140168567857152')\"><pre>                force_insert or parent_inserted,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567857152', 'post140168567857152')\"><pre>                force_update,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567857152', 'post140168567857152')\"><pre>                using,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567857152', 'post140168567857152')\"><pre>                update_fields,</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168567857152\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>cls</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;activity.models.Activity&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>context_manager</td>\n                    <td class=\"code\"><pre>&lt;contextlib._GeneratorContextManager object at 0x7f7b896b6b50&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_insert</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_update</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>meta</td>\n                    <td class=\"code\"><pre>&lt;Options for Activity&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>origin</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;activity.models.Activity&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>parent_inserted</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;Activity: Activity object (9bc25df7-d314-4a9a-911f-b87bbf715c07)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 1006, in _save_table\n          \n\n          \n            <div class=\"context\" id=\"c140168562270784\">\n              \n                <ol start=\"999\" class=\"pre-context\" id=\"pre140168562270784\">\n                \n                  <li onclick=\"toggle('pre140168562270784', 'post140168562270784')\"><pre>                    )[&quot;_order__max&quot;]</pre></li>\n                \n                  <li onclick=\"toggle('pre140168562270784', 'post140168562270784')\"><pre>                )</pre></li>\n                \n                  <li onclick=\"toggle('pre140168562270784', 'post140168562270784')\"><pre>            fields = meta.local_concrete_fields</pre></li>\n                \n                  <li onclick=\"toggle('pre140168562270784', 'post140168562270784')\"><pre>            if not pk_set:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168562270784', 'post140168562270784')\"><pre>                fields = [f for f in fields if f is not meta.auto_field]</pre></li>\n                \n                  <li onclick=\"toggle('pre140168562270784', 'post140168562270784')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168562270784', 'post140168562270784')\"><pre>            returning_fields = meta.db_returning_fields</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1006\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168562270784', 'post140168562270784')\"><pre>            results = self._do_insert(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1007' class=\"post-context\" id=\"post140168562270784\">\n                  \n                  <li onclick=\"toggle('pre140168562270784', 'post140168562270784')\"><pre>                cls._base_manager, using, fields, returning_fields, raw</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168562270784', 'post140168562270784')\"><pre>            )</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168562270784', 'post140168562270784')\"><pre>            if results:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168562270784', 'post140168562270784')\"><pre>                for value, field in zip(results[0], returning_fields):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168562270784', 'post140168562270784')\"><pre>                    setattr(self, field.attname, value)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168562270784', 'post140168562270784')\"><pre>        return updated</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168562270784\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>cls</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;activity.models.Activity&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>fields</td>\n                    <td class=\"code\"><pre>(&lt;django.db.models.fields.UUIDField: id&gt;,\n &lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.related.ForeignKey: rule&gt;,\n &lt;django.db.models.fields.related.ForeignKey: payment&gt;,\n &lt;django.db.models.fields.DateField: payment_date&gt;,\n &lt;django.db.models.fields.related.ForeignKey: activity_type&gt;,\n &lt;django.db.models.fields.CharField: project_name&gt;,\n &lt;django.db.models.fields.CharField: rule_name&gt;,\n &lt;django.db.models.fields.DecimalField: amount&gt;,\n &lt;django.db.models.fields.CharField: title&gt;,\n &lt;django.db.models.fields.CharField: message&gt;,\n &lt;django.db.models.fields.CharField: footer&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.related.ForeignKey: saving&gt;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_insert</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>force_update</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>meta</td>\n                    <td class=\"code\"><pre>&lt;Options for Activity&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>non_pks</td>\n                    <td class=\"code\"><pre>[&lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.related.ForeignKey: rule&gt;,\n &lt;django.db.models.fields.related.ForeignKey: payment&gt;,\n &lt;django.db.models.fields.DateField: payment_date&gt;,\n &lt;django.db.models.fields.related.ForeignKey: activity_type&gt;,\n &lt;django.db.models.fields.CharField: project_name&gt;,\n &lt;django.db.models.fields.CharField: rule_name&gt;,\n &lt;django.db.models.fields.DecimalField: amount&gt;,\n &lt;django.db.models.fields.CharField: title&gt;,\n &lt;django.db.models.fields.CharField: message&gt;,\n &lt;django.db.models.fields.CharField: footer&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.related.ForeignKey: saving&gt;]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>pk_set</td>\n                    <td class=\"code\"><pre>True</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>pk_val</td>\n                    <td class=\"code\"><pre>UUID(&#x27;9bc25df7-d314-4a9a-911f-b87bbf715c07&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;Activity: Activity object (9bc25df7-d314-4a9a-911f-b87bbf715c07)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>updated</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/base.py</code>, line 1047, in _do_insert\n          \n\n          \n            <div class=\"context\" id=\"c140168562262208\">\n              \n                <ol start=\"1040\" class=\"pre-context\" id=\"pre140168562262208\">\n                \n                  <li onclick=\"toggle('pre140168562262208', 'post140168562262208')\"><pre>        return filtered._update(values) &gt; 0</pre></li>\n                \n                  <li onclick=\"toggle('pre140168562262208', 'post140168562262208')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168562262208', 'post140168562262208')\"><pre>    def _do_insert(self, manager, using, fields, returning_fields, raw):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168562262208', 'post140168562262208')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                  <li onclick=\"toggle('pre140168562262208', 'post140168562262208')\"><pre>        Do an INSERT. If returning_fields is defined then this method should</pre></li>\n                \n                  <li onclick=\"toggle('pre140168562262208', 'post140168562262208')\"><pre>        return the newly created data for the model.</pre></li>\n                \n                  <li onclick=\"toggle('pre140168562262208', 'post140168562262208')\"><pre>        &quot;&quot;&quot;</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1047\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168562262208', 'post140168562262208')\"><pre>        return manager._insert(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1048' class=\"post-context\" id=\"post140168562262208\">\n                  \n                  <li onclick=\"toggle('pre140168562262208', 'post140168562262208')\"><pre>            [self],</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168562262208', 'post140168562262208')\"><pre>            fields=fields,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168562262208', 'post140168562262208')\"><pre>            returning_fields=returning_fields,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168562262208', 'post140168562262208')\"><pre>            using=using,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168562262208', 'post140168562262208')\"><pre>            raw=raw,</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168562262208', 'post140168562262208')\"><pre>        )</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168562262208\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>fields</td>\n                    <td class=\"code\"><pre>(&lt;django.db.models.fields.UUIDField: id&gt;,\n &lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.related.ForeignKey: rule&gt;,\n &lt;django.db.models.fields.related.ForeignKey: payment&gt;,\n &lt;django.db.models.fields.DateField: payment_date&gt;,\n &lt;django.db.models.fields.related.ForeignKey: activity_type&gt;,\n &lt;django.db.models.fields.CharField: project_name&gt;,\n &lt;django.db.models.fields.CharField: rule_name&gt;,\n &lt;django.db.models.fields.DecimalField: amount&gt;,\n &lt;django.db.models.fields.CharField: title&gt;,\n &lt;django.db.models.fields.CharField: message&gt;,\n &lt;django.db.models.fields.CharField: footer&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.related.ForeignKey: saving&gt;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>manager</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.manager.Manager object at 0x7f7b899af050&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;Activity: Activity object (9bc25df7-d314-4a9a-911f-b87bbf715c07)&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/manager.py</code>, line 85, in manager_method\n          \n\n          \n            <div class=\"context\" id=\"c140168559987392\">\n              \n                <ol start=\"78\" class=\"pre-context\" id=\"pre140168559987392\">\n                \n                  <li onclick=\"toggle('pre140168559987392', 'post140168559987392')\"><pre>    def check(self, **kwargs):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168559987392', 'post140168559987392')\"><pre>        return []</pre></li>\n                \n                  <li onclick=\"toggle('pre140168559987392', 'post140168559987392')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168559987392', 'post140168559987392')\"><pre>    @classmethod</pre></li>\n                \n                  <li onclick=\"toggle('pre140168559987392', 'post140168559987392')\"><pre>    def _get_queryset_methods(cls, queryset_class):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168559987392', 'post140168559987392')\"><pre>        def create_method(name, method):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168559987392', 'post140168559987392')\"><pre>            def manager_method(self, *args, **kwargs):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"85\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168559987392', 'post140168559987392')\"><pre>                return getattr(self.get_queryset(), name)(*args, **kwargs)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='86' class=\"post-context\" id=\"post140168559987392\">\n                  \n                  <li onclick=\"toggle('pre140168559987392', 'post140168559987392')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168559987392', 'post140168559987392')\"><pre>            manager_method.__name__ = method.__name__</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168559987392', 'post140168559987392')\"><pre>            manager_method.__doc__ = method.__doc__</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168559987392', 'post140168559987392')\"><pre>            return manager_method</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168559987392', 'post140168559987392')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168559987392', 'post140168559987392')\"><pre>        new_methods = {}</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168559987392\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>args</td>\n                    <td class=\"code\"><pre>([&lt;Activity: Activity object (9bc25df7-d314-4a9a-911f-b87bbf715c07)&gt;],)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>kwargs</td>\n                    <td class=\"code\"><pre>{&#x27;fields&#x27;: (&lt;django.db.models.fields.UUIDField: id&gt;,\n            &lt;django.db.models.fields.UUIDField: user_id&gt;,\n            &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n            &lt;django.db.models.fields.related.ForeignKey: rule&gt;,\n            &lt;django.db.models.fields.related.ForeignKey: payment&gt;,\n            &lt;django.db.models.fields.DateField: payment_date&gt;,\n            &lt;django.db.models.fields.related.ForeignKey: activity_type&gt;,\n            &lt;django.db.models.fields.CharField: project_name&gt;,\n            &lt;django.db.models.fields.CharField: rule_name&gt;,\n            &lt;django.db.models.fields.DecimalField: amount&gt;,\n            &lt;django.db.models.fields.CharField: title&gt;,\n            &lt;django.db.models.fields.CharField: message&gt;,\n            &lt;django.db.models.fields.CharField: footer&gt;,\n            &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n            &lt;django.db.models.fields.related.ForeignKey: saving&gt;),\n &#x27;raw&#x27;: False,\n &#x27;returning_fields&#x27;: [],\n &#x27;using&#x27;: &#x27;default&#x27;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>name</td>\n                    <td class=\"code\"><pre>&#x27;_insert&#x27;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.manager.Manager object at 0x7f7b899af050&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/query.py</code>, line 1791, in _insert\n          \n\n          \n            <div class=\"context\" id=\"c140168563507520\">\n              \n                <ol start=\"1784\" class=\"pre-context\" id=\"pre140168563507520\">\n                \n                  <li onclick=\"toggle('pre140168563507520', 'post140168563507520')\"><pre>        query = sql.InsertQuery(</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563507520', 'post140168563507520')\"><pre>            self.model,</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563507520', 'post140168563507520')\"><pre>            on_conflict=on_conflict,</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563507520', 'post140168563507520')\"><pre>            update_fields=update_fields,</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563507520', 'post140168563507520')\"><pre>            unique_fields=unique_fields,</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563507520', 'post140168563507520')\"><pre>        )</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563507520', 'post140168563507520')\"><pre>        query.insert_values(fields, objs, raw=raw)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1791\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168563507520', 'post140168563507520')\"><pre>        return query.get_compiler(using=using).execute_sql(returning_fields)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1792' class=\"post-context\" id=\"post140168563507520\">\n                  \n                  <li onclick=\"toggle('pre140168563507520', 'post140168563507520')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168563507520', 'post140168563507520')\"><pre>    _insert.alters_data = True</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168563507520', 'post140168563507520')\"><pre>    _insert.queryset_only = False</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168563507520', 'post140168563507520')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168563507520', 'post140168563507520')\"><pre>    def _batched_insert(</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168563507520', 'post140168563507520')\"><pre>        self,</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168563507520\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>fields</td>\n                    <td class=\"code\"><pre>(&lt;django.db.models.fields.UUIDField: id&gt;,\n &lt;django.db.models.fields.UUIDField: user_id&gt;,\n &lt;django.db.models.fields.related.ForeignKey: project&gt;,\n &lt;django.db.models.fields.related.ForeignKey: rule&gt;,\n &lt;django.db.models.fields.related.ForeignKey: payment&gt;,\n &lt;django.db.models.fields.DateField: payment_date&gt;,\n &lt;django.db.models.fields.related.ForeignKey: activity_type&gt;,\n &lt;django.db.models.fields.CharField: project_name&gt;,\n &lt;django.db.models.fields.CharField: rule_name&gt;,\n &lt;django.db.models.fields.DecimalField: amount&gt;,\n &lt;django.db.models.fields.CharField: title&gt;,\n &lt;django.db.models.fields.CharField: message&gt;,\n &lt;django.db.models.fields.CharField: footer&gt;,\n &lt;django.db.models.fields.DateTimeField: created_at&gt;,\n &lt;django.db.models.fields.related.ForeignKey: saving&gt;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>objs</td>\n                    <td class=\"code\"><pre>[&lt;Activity: Activity object (9bc25df7-d314-4a9a-911f-b87bbf715c07)&gt;]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>on_conflict</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>query</td>\n                    <td class=\"code\"><pre>&lt;django.db.models.sql.subqueries.InsertQuery object at 0x7f7b895cc050&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>raw</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;QuerySet [&lt;Activity: Activity object (dcce0d6d-c853-457d-8d8b-48bafcb84a91)&gt;, &lt;Activity: Activity object (43dff30f-3e1b-4987-af73-c28579b29e14)&gt;, &lt;Activity: Activity object (91e2f3de-004f-4e72-9bbc-b282dc774419)&gt;, &lt;Activity: Activity object (9477284d-bae2-4819-b2a8-1b2b912d7f0e)&gt;, &lt;Activity: Activity object (c69f98b6-68c7-4302-b06f-c5c5b1d985b4)&gt;, &lt;Activity: Activity object (25365c5b-ae8b-4632-9226-64868d880fbb)&gt;, &lt;Activity: Activity object (09ffebe6-c4d4-4032-8630-0227928149c6)&gt;, &lt;Activity: Activity object (aa5d39db-7fac-4cfb-976e-353ee0c85af2)&gt;, &lt;Activity: Activity object (7dd09f79-211e-4eaa-90c3-e6747357cd59)&gt;, &lt;Activity: Activity object (701b7b1f-d626-4c30-bfff-8b926b064251)&gt;, &lt;Activity: Activity object (748aface-9c42-4e3d-bb83-6a964cb1920c)&gt;, &lt;Activity: Activity object (5163b3b4-51f7-438b-8cb5-bfe7686c2464)&gt;, &lt;Activity: Activity object (fdbd5786-18e5-40a6-b0b3-3074031a9ee2)&gt;, &lt;Activity: Activity object (301535a2-d137-45a0-80d9-7c58ec345a7e)&gt;, &lt;Activity: Activity object (caf79be8-ad18-4c72-a270-dacdb9f6efcb)&gt;, &lt;Activity: Activity object (d54d9fb1-07e1-4403-92dd-6fbb0e8620ba)&gt;, &lt;Activity: Activity object (dfc52c9b-fa57-4e0c-af70-19be73861df7)&gt;, &lt;Activity: Activity object (9bd9489d-661e-49d8-ae64-d273f8d89702)&gt;, &lt;Activity: Activity object (5fa23867-93df-47a1-b071-584e74ac20eb)&gt;, &lt;Activity: Activity object (321c3836-7881-4f11-8c4e-e550dfcf495b)&gt;, &#x27;...(remaining elements truncated)...&#x27;]&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>unique_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>update_fields</td>\n                    <td class=\"code\"><pre>None</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>using</td>\n                    <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py</code>, line 1660, in execute_sql\n          \n\n          \n            <div class=\"context\" id=\"c140168563512704\">\n              \n                <ol start=\"1653\" class=\"pre-context\" id=\"pre140168563512704\">\n                \n                  <li onclick=\"toggle('pre140168563512704', 'post140168563512704')\"><pre>            and len(self.query.objs) != 1</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563512704', 'post140168563512704')\"><pre>            and not self.connection.features.can_return_rows_from_bulk_insert</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563512704', 'post140168563512704')\"><pre>        )</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563512704', 'post140168563512704')\"><pre>        opts = self.query.get_meta()</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563512704', 'post140168563512704')\"><pre>        self.returning_fields = returning_fields</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563512704', 'post140168563512704')\"><pre>        with self.connection.cursor() as cursor:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563512704', 'post140168563512704')\"><pre>            for sql, params in self.as_sql():</pre></li>\n                \n                </ol>\n              \n              <ol start=\"1660\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168563512704', 'post140168563512704')\"><pre>                cursor.execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='1661' class=\"post-context\" id=\"post140168563512704\">\n                  \n                  <li onclick=\"toggle('pre140168563512704', 'post140168563512704')\"><pre>            if not self.returning_fields:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168563512704', 'post140168563512704')\"><pre>                return []</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168563512704', 'post140168563512704')\"><pre>            if (</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168563512704', 'post140168563512704')\"><pre>                self.connection.features.can_return_rows_from_bulk_insert</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168563512704', 'post140168563512704')\"><pre>                and len(self.query.objs) &gt; 1</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168563512704', 'post140168563512704')\"><pre>            ):</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168563512704\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>cursor</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f7b89e32310&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>opts</td>\n                    <td class=\"code\"><pre>&lt;Options for Activity&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;9bc25df7-d314-4a9a-911f-b87bbf715c07&#x27;),\n UUID(&#x27;72aed580-867d-49c9-96f5-7c3533e35fde&#x27;),\n UUID(&#x27;95ded7d5-23da-444d-b36a-4828ada5c0f0&#x27;),\n None,\n None,\n None,\n UUID(&#x27;695136d2-9217-4622-a5f8-9eaf7b99e23e&#x27;),\n &#x27;Solo ahorrar&#x27;,\n None,\n None,\n &#x27;Meta eliminada&#x27;,\n &#x27;Meta eliminada&#x27;,\n &#x27;&#x27;,\n datetime.datetime(2025, 6, 26, 15, 22, 52, 89497, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>returning_fields</td>\n                    <td class=\"code\"><pre>[]</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;SQLInsertCompiler model=Activity connection=&lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt; using=&#x27;default&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;activities&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &quot;rule_id&quot;, &#x27;\n &#x27;&quot;payment_id&quot;, &quot;payment_date&quot;, &quot;activity_type_id&quot;, &quot;project_name&quot;, &#x27;\n &#x27;&quot;rule_name&quot;, &quot;amount&quot;, &quot;title&quot;, &quot;message&quot;, &quot;footer&quot;, &quot;created_at&quot;, &#x27;\n &#x27;&quot;saving_id&quot;) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, &#x27;\n &#x27;%s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 102, in execute\n          \n\n          \n            <div class=\"context\" id=\"c140168567857344\">\n              \n                <ol start=\"95\" class=\"pre-context\" id=\"pre140168567857344\">\n                \n                  <li onclick=\"toggle('pre140168567857344', 'post140168567857344')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567857344', 'post140168567857344')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567857344', 'post140168567857344')\"><pre>class CursorDebugWrapper(CursorWrapper):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567857344', 'post140168567857344')\"><pre>    # XXX callproc isn&#x27;t instrumented at this time.</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567857344', 'post140168567857344')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567857344', 'post140168567857344')\"><pre>    def execute(self, sql, params=None):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567857344', 'post140168567857344')\"><pre>        with self.debug_sql(sql, params, use_last_executed_query=True):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"102\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168567857344', 'post140168567857344')\"><pre>            return super().execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='103' class=\"post-context\" id=\"post140168567857344\">\n                  \n                  <li onclick=\"toggle('pre140168567857344', 'post140168567857344')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567857344', 'post140168567857344')\"><pre>    def executemany(self, sql, param_list):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567857344', 'post140168567857344')\"><pre>        with self.debug_sql(sql, param_list, many=True):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567857344', 'post140168567857344')\"><pre>            return super().executemany(sql, param_list)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567857344', 'post140168567857344')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567857344', 'post140168567857344')\"><pre>    @contextmanager</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168567857344\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>__class__</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;django.db.backends.utils.CursorDebugWrapper&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;9bc25df7-d314-4a9a-911f-b87bbf715c07&#x27;),\n UUID(&#x27;72aed580-867d-49c9-96f5-7c3533e35fde&#x27;),\n UUID(&#x27;95ded7d5-23da-444d-b36a-4828ada5c0f0&#x27;),\n None,\n None,\n None,\n UUID(&#x27;695136d2-9217-4622-a5f8-9eaf7b99e23e&#x27;),\n &#x27;Solo ahorrar&#x27;,\n None,\n None,\n &#x27;Meta eliminada&#x27;,\n &#x27;Meta eliminada&#x27;,\n &#x27;&#x27;,\n datetime.datetime(2025, 6, 26, 15, 22, 52, 89497, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f7b89e32310&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;activities&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &quot;rule_id&quot;, &#x27;\n &#x27;&quot;payment_id&quot;, &quot;payment_date&quot;, &quot;activity_type_id&quot;, &quot;project_name&quot;, &#x27;\n &#x27;&quot;rule_name&quot;, &quot;amount&quot;, &quot;title&quot;, &quot;message&quot;, &quot;footer&quot;, &quot;created_at&quot;, &#x27;\n &#x27;&quot;saving_id&quot;) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, &#x27;\n &#x27;%s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 67, in execute\n          \n\n          \n            <div class=\"context\" id=\"c140168567853760\">\n              \n                <ol start=\"60\" class=\"pre-context\" id=\"pre140168567853760\">\n                \n                  <li onclick=\"toggle('pre140168567853760', 'post140168567853760')\"><pre>            elif kparams is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567853760', 'post140168567853760')\"><pre>                return self.cursor.callproc(procname, params)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567853760', 'post140168567853760')\"><pre>            else:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567853760', 'post140168567853760')\"><pre>                params = params or ()</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567853760', 'post140168567853760')\"><pre>                return self.cursor.callproc(procname, params, kparams)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567853760', 'post140168567853760')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567853760', 'post140168567853760')\"><pre>    def execute(self, sql, params=None):</pre></li>\n                \n                </ol>\n              \n              <ol start=\"67\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168567853760', 'post140168567853760')\"><pre>        return self._execute_with_wrappers(</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='68' class=\"post-context\" id=\"post140168567853760\">\n                  \n                  <li onclick=\"toggle('pre140168567853760', 'post140168567853760')\"><pre>            sql, params, many=False, executor=self._execute</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567853760', 'post140168567853760')\"><pre>        )</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567853760', 'post140168567853760')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567853760', 'post140168567853760')\"><pre>    def executemany(self, sql, param_list):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567853760', 'post140168567853760')\"><pre>        return self._execute_with_wrappers(</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567853760', 'post140168567853760')\"><pre>            sql, param_list, many=True, executor=self._executemany</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168567853760\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;9bc25df7-d314-4a9a-911f-b87bbf715c07&#x27;),\n UUID(&#x27;72aed580-867d-49c9-96f5-7c3533e35fde&#x27;),\n UUID(&#x27;95ded7d5-23da-444d-b36a-4828ada5c0f0&#x27;),\n None,\n None,\n None,\n UUID(&#x27;695136d2-9217-4622-a5f8-9eaf7b99e23e&#x27;),\n &#x27;Solo ahorrar&#x27;,\n None,\n None,\n &#x27;Meta eliminada&#x27;,\n &#x27;Meta eliminada&#x27;,\n &#x27;&#x27;,\n datetime.datetime(2025, 6, 26, 15, 22, 52, 89497, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f7b89e32310&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;activities&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &quot;rule_id&quot;, &#x27;\n &#x27;&quot;payment_id&quot;, &quot;payment_date&quot;, &quot;activity_type_id&quot;, &quot;project_name&quot;, &#x27;\n &#x27;&quot;rule_name&quot;, &quot;amount&quot;, &quot;title&quot;, &quot;message&quot;, &quot;footer&quot;, &quot;created_at&quot;, &#x27;\n &#x27;&quot;saving_id&quot;) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, &#x27;\n &#x27;%s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 80, in _execute_with_wrappers\n          \n\n          \n            <div class=\"context\" id=\"c140168563514048\">\n              \n                <ol start=\"73\" class=\"pre-context\" id=\"pre140168563514048\">\n                \n                  <li onclick=\"toggle('pre140168563514048', 'post140168563514048')\"><pre>            sql, param_list, many=True, executor=self._executemany</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563514048', 'post140168563514048')\"><pre>        )</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563514048', 'post140168563514048')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168563514048', 'post140168563514048')\"><pre>    def _execute_with_wrappers(self, sql, params, many, executor):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563514048', 'post140168563514048')\"><pre>        context = {&quot;connection&quot;: self.db, &quot;cursor&quot;: self}</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563514048', 'post140168563514048')\"><pre>        for wrapper in reversed(self.db.execute_wrappers):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168563514048', 'post140168563514048')\"><pre>            executor = functools.partial(wrapper, executor)</pre></li>\n                \n                </ol>\n              \n              <ol start=\"80\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168563514048', 'post140168563514048')\"><pre>        return executor(sql, params, many, context)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='81' class=\"post-context\" id=\"post140168563514048\">\n                  \n                  <li onclick=\"toggle('pre140168563514048', 'post140168563514048')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168563514048', 'post140168563514048')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168563514048', 'post140168563514048')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168563514048', 'post140168563514048')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168563514048', 'post140168563514048')\"><pre>            if params is None:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168563514048', 'post140168563514048')\"><pre>                # params default might be backend specific.</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168563514048\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>context</td>\n                    <td class=\"code\"><pre>{&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f7b89e32310&gt;}</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>executor</td>\n                    <td class=\"code\"><pre>&lt;bound method CursorWrapper._execute of &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f7b89e32310&gt;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>many</td>\n                    <td class=\"code\"><pre>False</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;9bc25df7-d314-4a9a-911f-b87bbf715c07&#x27;),\n UUID(&#x27;72aed580-867d-49c9-96f5-7c3533e35fde&#x27;),\n UUID(&#x27;95ded7d5-23da-444d-b36a-4828ada5c0f0&#x27;),\n None,\n None,\n None,\n UUID(&#x27;695136d2-9217-4622-a5f8-9eaf7b99e23e&#x27;),\n &#x27;Solo ahorrar&#x27;,\n None,\n None,\n &#x27;Meta eliminada&#x27;,\n &#x27;Meta eliminada&#x27;,\n &#x27;&#x27;,\n datetime.datetime(2025, 6, 26, 15, 22, 52, 89497, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f7b89e32310&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;activities&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &quot;rule_id&quot;, &#x27;\n &#x27;&quot;payment_id&quot;, &quot;payment_date&quot;, &quot;activity_type_id&quot;, &quot;project_name&quot;, &#x27;\n &#x27;&quot;rule_name&quot;, &quot;amount&quot;, &quot;title&quot;, &quot;message&quot;, &quot;footer&quot;, &quot;created_at&quot;, &#x27;\n &#x27;&quot;saving_id&quot;) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, &#x27;\n &#x27;%s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 84, in _execute\n          \n\n          \n            <div class=\"context\" id=\"c140168567854976\">\n              \n                <ol start=\"77\" class=\"pre-context\" id=\"pre140168567854976\">\n                \n                  <li onclick=\"toggle('pre140168567854976', 'post140168567854976')\"><pre>        context = {&quot;connection&quot;: self.db, &quot;cursor&quot;: self}</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567854976', 'post140168567854976')\"><pre>        for wrapper in reversed(self.db.execute_wrappers):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567854976', 'post140168567854976')\"><pre>            executor = functools.partial(wrapper, executor)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567854976', 'post140168567854976')\"><pre>        return executor(sql, params, many, context)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567854976', 'post140168567854976')\"><pre></pre></li>\n                \n                  <li onclick=\"toggle('pre140168567854976', 'post140168567854976')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168567854976', 'post140168567854976')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                \n                </ol>\n              \n              <ol start=\"84\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168567854976', 'post140168567854976')\"><pre>        with self.db.wrap_database_errors:</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='85' class=\"post-context\" id=\"post140168567854976\">\n                  \n                  <li onclick=\"toggle('pre140168567854976', 'post140168567854976')\"><pre>            if params is None:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567854976', 'post140168567854976')\"><pre>                # params default might be backend specific.</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567854976', 'post140168567854976')\"><pre>                return self.cursor.execute(sql)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567854976', 'post140168567854976')\"><pre>            else:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567854976', 'post140168567854976')\"><pre>                return self.cursor.execute(sql, params)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168567854976', 'post140168567854976')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168567854976\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>ignored_wrapper_args</td>\n                    <td class=\"code\"><pre>(False,\n {&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n  &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f7b89e32310&gt;})</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;9bc25df7-d314-4a9a-911f-b87bbf715c07&#x27;),\n UUID(&#x27;72aed580-867d-49c9-96f5-7c3533e35fde&#x27;),\n UUID(&#x27;95ded7d5-23da-444d-b36a-4828ada5c0f0&#x27;),\n None,\n None,\n None,\n UUID(&#x27;695136d2-9217-4622-a5f8-9eaf7b99e23e&#x27;),\n &#x27;Solo ahorrar&#x27;,\n None,\n None,\n &#x27;Meta eliminada&#x27;,\n &#x27;Meta eliminada&#x27;,\n &#x27;&#x27;,\n datetime.datetime(2025, 6, 26, 15, 22, 52, 89497, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f7b89e32310&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;activities&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &quot;rule_id&quot;, &#x27;\n &#x27;&quot;payment_id&quot;, &quot;payment_date&quot;, &quot;activity_type_id&quot;, &quot;project_name&quot;, &#x27;\n &#x27;&quot;rule_name&quot;, &quot;amount&quot;, &quot;title&quot;, &quot;message&quot;, &quot;footer&quot;, &quot;created_at&quot;, &#x27;\n &#x27;&quot;saving_id&quot;) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, &#x27;\n &#x27;%s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/utils.py</code>, line 91, in __exit__\n          \n\n          \n            <div class=\"context\" id=\"c140168560241472\">\n              \n                <ol start=\"84\" class=\"pre-context\" id=\"pre140168560241472\">\n                \n                  <li onclick=\"toggle('pre140168560241472', 'post140168560241472')\"><pre>            db_exc_type = getattr(self.wrapper.Database, dj_exc_type.__name__)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560241472', 'post140168560241472')\"><pre>            if issubclass(exc_type, db_exc_type):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560241472', 'post140168560241472')\"><pre>                dj_exc_value = dj_exc_type(*exc_value.args)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560241472', 'post140168560241472')\"><pre>                # Only set the &#x27;errors_occurred&#x27; flag for errors that may make</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560241472', 'post140168560241472')\"><pre>                # the connection unusable.</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560241472', 'post140168560241472')\"><pre>                if dj_exc_type not in (DataError, IntegrityError):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560241472', 'post140168560241472')\"><pre>                    self.wrapper.errors_occurred = True</pre></li>\n                \n                </ol>\n              \n              <ol start=\"91\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168560241472', 'post140168560241472')\"><pre>                raise dj_exc_value.with_traceback(traceback) from exc_value</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='92' class=\"post-context\" id=\"post140168560241472\">\n                  \n                  <li onclick=\"toggle('pre140168560241472', 'post140168560241472')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560241472', 'post140168560241472')\"><pre>    def __call__(self, func):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560241472', 'post140168560241472')\"><pre>        # Note that we are intentionally not using @wraps here for performance</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560241472', 'post140168560241472')\"><pre>        # reasons. Refs #21109.</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560241472', 'post140168560241472')\"><pre>        def inner(*args, **kwargs):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560241472', 'post140168560241472')\"><pre>            with self:</pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168560241472\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>db_exc_type</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;psycopg2.IntegrityError&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>dj_exc_type</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;django.db.utils.IntegrityError&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>dj_exc_value</td>\n                    <td class=\"code\"><pre>IntegrityError(&#x27;null value in column &quot;amount&quot; of relation &quot;activities&quot; violates not-null constraint\\nDETAIL:  Failing row contains (9bc25df7-d314-4a9a-911f-b87bbf715c07, 72aed580-867d-49c9-96f5-7c3533e35fde, null, Solo ahorrar, null, null, Meta eliminada, Meta eliminada, , 2025-06-26 15:22:52.089497+00, 695136d2-9217-4622-a5f8-9eaf7b99e23e, null, 95ded7d5-23da-444d-b36a-4828ada5c0f0, null, null).\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exc_type</td>\n                    <td class=\"code\"><pre>&lt;class &#x27;psycopg2.errors.NotNullViolation&#x27;&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>exc_value</td>\n                    <td class=\"code\"><pre>NotNullViolation(&#x27;null value in column &quot;amount&quot; of relation &quot;activities&quot; violates not-null constraint\\nDETAIL:  Failing row contains (9bc25df7-d314-4a9a-911f-b87bbf715c07, 72aed580-867d-49c9-96f5-7c3533e35fde, null, Solo ahorrar, null, null, Meta eliminada, Meta eliminada, , 2025-06-26 15:22:52.089497+00, 695136d2-9217-4622-a5f8-9eaf7b99e23e, null, 95ded7d5-23da-444d-b36a-4828ada5c0f0, null, null).\\n&#x27;)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.utils.DatabaseErrorWrapper object at 0x7f7b89abc5d0&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>traceback</td>\n                    <td class=\"code\"><pre>&lt;traceback object at 0x7f7b893df440&gt;</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n        \n        <li class=\"frame django\">\n          \n            <code class=\"fname\">/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py</code>, line 89, in _execute\n          \n\n          \n            <div class=\"context\" id=\"c140168560243776\">\n              \n                <ol start=\"82\" class=\"pre-context\" id=\"pre140168560243776\">\n                \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>    def _execute(self, sql, params, *ignored_wrapper_args):</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>            if params is None:</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>                # params default might be backend specific.</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>                return self.cursor.execute(sql)</pre></li>\n                \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>            else:</pre></li>\n                \n                </ol>\n              \n              <ol start=\"89\" class=\"context-line\">\n                <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>                return self.cursor.execute(sql, params)</pre> <span>…</span></li>\n              </ol>\n              \n                <ol start='90' class=\"post-context\" id=\"post140168560243776\">\n                  \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre></pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>    def _executemany(self, sql, param_list, *ignored_wrapper_args):</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>        self.db.validate_no_broken_transaction()</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>        with self.db.wrap_database_errors:</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre>            return self.cursor.executemany(sql, param_list)</pre></li>\n                  \n                  <li onclick=\"toggle('pre140168560243776', 'post140168560243776')\"><pre></pre></li>\n                  \n              </ol>\n              \n            </div>\n          \n\n          \n            \n              <details>\n                <summary class=\"commands\">Local vars</summary>\n            \n            <table class=\"vars\" id=\"v140168560243776\">\n              <thead>\n                <tr>\n                  <th>Variable</th>\n                  <th>Value</th>\n                </tr>\n              </thead>\n              <tbody>\n                \n                  <tr>\n                    <td>ignored_wrapper_args</td>\n                    <td class=\"code\"><pre>(False,\n {&#x27;connection&#x27;: &lt;DatabaseWrapper vendor=&#x27;postgresql&#x27; alias=&#x27;default&#x27;&gt;,\n  &#x27;cursor&#x27;: &lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f7b89e32310&gt;})</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>params</td>\n                    <td class=\"code\"><pre>(UUID(&#x27;9bc25df7-d314-4a9a-911f-b87bbf715c07&#x27;),\n UUID(&#x27;72aed580-867d-49c9-96f5-7c3533e35fde&#x27;),\n UUID(&#x27;95ded7d5-23da-444d-b36a-4828ada5c0f0&#x27;),\n None,\n None,\n None,\n UUID(&#x27;695136d2-9217-4622-a5f8-9eaf7b99e23e&#x27;),\n &#x27;Solo ahorrar&#x27;,\n None,\n None,\n &#x27;Meta eliminada&#x27;,\n &#x27;Meta eliminada&#x27;,\n &#x27;&#x27;,\n datetime.datetime(2025, 6, 26, 15, 22, 52, 89497, tzinfo=datetime.timezone.utc),\n None)</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>self</td>\n                    <td class=\"code\"><pre>&lt;django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7f7b89e32310&gt;</pre></td>\n                  </tr>\n                \n                  <tr>\n                    <td>sql</td>\n                    <td class=\"code\"><pre>(&#x27;INSERT INTO &quot;activities&quot; (&quot;id&quot;, &quot;user_id&quot;, &quot;project_id&quot;, &quot;rule_id&quot;, &#x27;\n &#x27;&quot;payment_id&quot;, &quot;payment_date&quot;, &quot;activity_type_id&quot;, &quot;project_name&quot;, &#x27;\n &#x27;&quot;rule_name&quot;, &quot;amount&quot;, &quot;title&quot;, &quot;message&quot;, &quot;footer&quot;, &quot;created_at&quot;, &#x27;\n &#x27;&quot;saving_id&quot;) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, &#x27;\n &#x27;%s)&#x27;)</pre></td>\n                  </tr>\n                \n              </tbody>\n            </table>\n            </details>\n          \n        </li>\n      \n    </ul>\n  </div>\n\n  <form action=\"https://dpaste.com/\" name=\"pasteform\" id=\"pasteform\" method=\"post\">\n  <div id=\"pastebinTraceback\" class=\"pastebin\">\n    <input type=\"hidden\" name=\"language\" value=\"PythonConsole\">\n    <input type=\"hidden\" name=\"title\"\n      value=\"IntegrityError at /api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/\">\n    <input type=\"hidden\" name=\"source\" value=\"Django Dpaste Agent\">\n    <input type=\"hidden\" name=\"poster\" value=\"Django\">\n    <textarea name=\"content\" id=\"traceback_area\" cols=\"140\" rows=\"25\">\nEnvironment:\n\n\nRequest Method: DELETE\nRequest URL: http://internal-k8s-xerpaheadlessgrou-205ab0f1be-396527338.us-east-1.elb.amazonaws.com/api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/\n\nDjango Version: 4.1.10\nPython Version: 3.11.3\nInstalled Applications:\n[&#x27;django.contrib.admin&#x27;,\n &#x27;django.contrib.auth&#x27;,\n &#x27;django.contrib.contenttypes&#x27;,\n &#x27;django.contrib.sessions&#x27;,\n &#x27;django.contrib.messages&#x27;,\n &#x27;django.contrib.staticfiles&#x27;,\n &#x27;django_extensions&#x27;,\n &#x27;corsheaders&#x27;,\n &#x27;rest_framework&#x27;,\n &#x27;django_filters&#x27;,\n &#x27;monitoring&#x27;,\n &#x27;saving&#x27;,\n &#x27;payment&#x27;,\n &#x27;catalog&#x27;,\n &#x27;project&#x27;,\n &#x27;rule&#x27;,\n &#x27;activity&#x27;,\n &#x27;transaction&#x27;,\n &#x27;user&#x27;,\n &#x27;dashboard&#x27;,\n &#x27;metric&#x27;,\n &#x27;config&#x27;,\n &#x27;report&#x27;]\nInstalled Middleware:\n[&#x27;django.middleware.security.SecurityMiddleware&#x27;,\n &#x27;django.contrib.sessions.middleware.SessionMiddleware&#x27;,\n &#x27;django.middleware.common.CommonMiddleware&#x27;,\n &#x27;django.middleware.csrf.CsrfViewMiddleware&#x27;,\n &#x27;django.contrib.auth.middleware.AuthenticationMiddleware&#x27;,\n &#x27;django.contrib.messages.middleware.MessageMiddleware&#x27;,\n &#x27;django.middleware.clickjacking.XFrameOptionsMiddleware&#x27;,\n &#x27;corsheaders.middleware.CorsMiddleware&#x27;]\n\n\n\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 89, in _execute\n    return self.cursor.execute(sql, params)\n\nThe above exception (null value in column &quot;amount&quot; of relation &quot;activities&quot; violates not-null constraint\nDETAIL:  Failing row contains (9bc25df7-d314-4a9a-911f-b87bbf715c07, 72aed580-867d-49c9-96f5-7c3533e35fde, null, Solo ahorrar, null, null, Meta eliminada, Meta eliminada, , 2025-06-26 15:22:52.089497+00, 695136d2-9217-4622-a5f8-9eaf7b99e23e, null, 95ded7d5-23da-444d-b36a-4828ada5c0f0, null, null).\n) was the direct cause of the following exception:\n  File \"/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py\", line 56, in inner\n    response = get_response(request)\n  File \"/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py\", line 197, in _get_response\n    response = wrapped_callback(request, *callback_args, **callback_kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/views/decorators/csrf.py\", line 55, in wrapped_view\n    return view_func(*args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/views/generic/base.py\", line 103, in view\n    return self.dispatch(request, *args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 509, in dispatch\n    response = self.handle_exception(exc)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 469, in handle_exception\n    self.raise_uncaught_exception(exc)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 480, in raise_uncaught_exception\n    raise exc\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/views.py\", line 506, in dispatch\n    response = handler(request, *args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/generics.py\", line 291, in delete\n    return self.destroy(request, *args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/rest_framework/mixins.py\", line 91, in destroy\n    self.perform_destroy(instance)\n  File \"/code/src/project/views/views.py\", line 283, in perform_destroy\n    ActivityService.delete_project_event(instance)\n  File \"/code/src/activity/services.py\", line 56, in delete_project_event\n    new_activity.save()\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 812, in save\n    self.save_base(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 863, in save_base\n    updated = self._save_table(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 1006, in _save_table\n    results = self._do_insert(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/base.py\", line 1047, in _do_insert\n    return manager._insert(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/manager.py\", line 85, in manager_method\n    return getattr(self.get_queryset(), name)(*args, **kwargs)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\", line 1791, in _insert\n    return query.get_compiler(using=using).execute_sql(returning_fields)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\", line 1660, in execute_sql\n    cursor.execute(sql, params)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 102, in execute\n    return super().execute(sql, params)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 67, in execute\n    return self._execute_with_wrappers(\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 80, in _execute_with_wrappers\n    return executor(sql, params, many, context)\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 84, in _execute\n    with self.db.wrap_database_errors:\n  File \"/usr/local/lib/python3.11/site-packages/django/db/utils.py\", line 91, in __exit__\n    raise dj_exc_value.with_traceback(traceback) from exc_value\n  File \"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\", line 89, in _execute\n    return self.cursor.execute(sql, params)\n\nException Type: IntegrityError at /api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/\nException Value: null value in column &quot;amount&quot; of relation &quot;activities&quot; violates not-null constraint\nDETAIL:  Failing row contains (9bc25df7-d314-4a9a-911f-b87bbf715c07, 72aed580-867d-49c9-96f5-7c3533e35fde, null, Solo ahorrar, null, null, Meta eliminada, Meta eliminada, , 2025-06-26 15:22:52.089497+00, 695136d2-9217-4622-a5f8-9eaf7b99e23e, null, 95ded7d5-23da-444d-b36a-4828ada5c0f0, null, null).\n\n</textarea>\n  <br><br>\n  <input type=\"submit\" value=\"Share this traceback on a public website\">\n  </div>\n</form>\n\n</div>\n\n\n<div id=\"requestinfo\">\n  <h2>Request information</h2>\n\n\n  \n    <h3 id=\"user-info\">USER</h3>\n    <p>AnonymousUser</p>\n  \n\n  <h3 id=\"get-info\">GET</h3>\n  \n    <p>No GET data</p>\n  \n\n  <h3 id=\"post-info\">POST</h3>\n  \n    <p>No POST data</p>\n  \n  <h3 id=\"files-info\">FILES</h3>\n  \n    <p>No FILES data</p>\n  \n\n\n  <h3 id=\"cookie-info\">COOKIES</h3>\n  \n    <p>No cookie data</p>\n  \n\n  <h3 id=\"meta-info\">META</h3>\n  <table class=\"req\">\n    <thead>\n      <tr>\n        <th>Variable</th>\n        <th>Value</th>\n      </tr>\n    </thead>\n    <tbody>\n      \n        <tr>\n          <td>CONTENT_LENGTH</td>\n          <td class=\"code\"><pre>&#x27;2&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CONTENT_TYPE</td>\n          <td class=\"code\"><pre>&#x27;application/json&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_ACCEPT_ENCODING</td>\n          <td class=\"code\"><pre>&#x27;identity&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_ACCESS_CONTROL_ALLOW_CREDENTIALS</td>\n          <td class=\"code\"><pre>&#x27;True&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_ACCESS_CONTROL_ALLOW_ORIGIN</td>\n          <td class=\"code\"><pre>&#x27;*&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_HOST</td>\n          <td class=\"code\"><pre>&#x27;internal-k8s-xerpaheadlessgrou-205ab0f1be-396527338.us-east-1.elb.amazonaws.com&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_USER_AGENT</td>\n          <td class=\"code\"><pre>&#x27;python-urllib3/1.26.19&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_AMZN_TRACE_ID</td>\n          <td class=\"code\"><pre>&#x27;Root=1-685d65cc-22e1591638cf46910d554f3a&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_FORWARDED_FOR</td>\n          <td class=\"code\"><pre>&#x27;10.1.2.104&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_FORWARDED_PORT</td>\n          <td class=\"code\"><pre>&#x27;80&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>HTTP_X_FORWARDED_PROTO</td>\n          <td class=\"code\"><pre>&#x27;http&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PATH_INFO</td>\n          <td class=\"code\"><pre>&#x27;/api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>QUERY_STRING</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>RAW_URI</td>\n          <td class=\"code\"><pre>&#x27;/api-saving/v1/saving-service/users/72aed580-867d-49c9-96f5-7c3533e35fde/projects/95ded7d5-23da-444d-b36a-4828ada5c0f0/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>REMOTE_ADDR</td>\n          <td class=\"code\"><pre>&#x27;10.1.3.123&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>REMOTE_PORT</td>\n          <td class=\"code\"><pre>&#x27;28638&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>REQUEST_METHOD</td>\n          <td class=\"code\"><pre>&#x27;DELETE&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SCRIPT_NAME</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_NAME</td>\n          <td class=\"code\"><pre>&#x27;0.0.0.0&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_PORT</td>\n          <td class=\"code\"><pre>&#x27;8000&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_PROTOCOL</td>\n          <td class=\"code\"><pre>&#x27;HTTP/1.1&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_SOFTWARE</td>\n          <td class=\"code\"><pre>&#x27;gunicorn/20.1.0&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>gunicorn.socket</td>\n          <td class=\"code\"><pre>&lt;socket.socket fd=9, family=2, type=1, proto=0, laddr=(&#x27;10.1.1.120&#x27;, 8000), raddr=(&#x27;10.1.3.123&#x27;, 28638)&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.errors</td>\n          <td class=\"code\"><pre>&lt;gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f7b893b8070&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.file_wrapper</td>\n          <td class=\"code\"><pre>&lt;class &#x27;gunicorn.http.wsgi.FileWrapper&#x27;&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.input</td>\n          <td class=\"code\"><pre>&lt;gunicorn.http.body.Body object at 0x7f7b89b20b10&gt;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.input_terminated</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.multiprocess</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.multithread</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.run_once</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.url_scheme</td>\n          <td class=\"code\"><pre>&#x27;http&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>wsgi.version</td>\n          <td class=\"code\"><pre>(1, 0)</pre></td>\n        </tr>\n      \n    </tbody>\n  </table>\n\n\n  <h3 id=\"settings-info\">Settings</h3>\n  <h4>Using settings module <code>api_saving.settings</code></h4>\n  <table class=\"req\">\n    <thead>\n      <tr>\n        <th>Setting</th>\n        <th>Value</th>\n      </tr>\n    </thead>\n    <tbody>\n      \n        <tr>\n          <td>ABSOLUTE_URL_OVERRIDES</td>\n          <td class=\"code\"><pre>{}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>ADMINS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>ALLOWED_HOSTS</td>\n          <td class=\"code\"><pre>[&#x27;*&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>APPEND_SLASH</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>AUTHENTICATION_BACKENDS</td>\n          <td class=\"code\"><pre>[&#x27;django.contrib.auth.backends.ModelBackend&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>AUTH_PASSWORD_VALIDATORS</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>AUTH_USER_MODEL</td>\n          <td class=\"code\"><pre>&#x27;auth.User&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>BASE_DIR</td>\n          <td class=\"code\"><pre>PosixPath(&#x27;/code/src&#x27;)</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHES</td>\n          <td class=\"code\"><pre>{&#x27;default&#x27;: {&#x27;BACKEND&#x27;: &#x27;django.core.cache.backends.locmem.LocMemCache&#x27;}}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHE_MIDDLEWARE_ALIAS</td>\n          <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHE_MIDDLEWARE_KEY_PREFIX</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CACHE_MIDDLEWARE_SECONDS</td>\n          <td class=\"code\"><pre>600</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CORS_ORIGIN_ALLOW_ALL</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_AGE</td>\n          <td class=\"code\"><pre>31449600</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_DOMAIN</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_HTTPONLY</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_MASKED</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_NAME</td>\n          <td class=\"code\"><pre>&#x27;csrftoken&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_PATH</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_SAMESITE</td>\n          <td class=\"code\"><pre>&#x27;Lax&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_COOKIE_SECURE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_FAILURE_VIEW</td>\n          <td class=\"code\"><pre>&#x27;django.views.csrf.csrf_failure&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_HEADER_NAME</td>\n          <td class=\"code\"><pre>&#x27;HTTP_X_CSRFTOKEN&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_TRUSTED_ORIGINS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>CSRF_USE_SESSIONS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATABASES</td>\n          <td class=\"code\"><pre>{&#x27;default&#x27;: {&#x27;ATOMIC_REQUESTS&#x27;: False,\n             &#x27;AUTOCOMMIT&#x27;: True,\n             &#x27;CONN_HEALTH_CHECKS&#x27;: False,\n             &#x27;CONN_MAX_AGE&#x27;: 0,\n             &#x27;ENGINE&#x27;: &#x27;django.db.backends.postgresql_psycopg2&#x27;,\n             &#x27;HOST&#x27;: &#x27;xerpa-headless-us-east-1-xerpaheadless-rds-instance.ckdom9c6kdbz.us-east-1.rds.amazonaws.com&#x27;,\n             &#x27;NAME&#x27;: &#x27;saving_service_db&#x27;,\n             &#x27;OPTIONS&#x27;: {},\n             &#x27;PASSWORD&#x27;: &#x27;********************&#x27;,\n             &#x27;PORT&#x27;: &#x27;5432&#x27;,\n             &#x27;TEST&#x27;: {&#x27;CHARSET&#x27;: None,\n                      &#x27;COLLATION&#x27;: None,\n                      &#x27;MIGRATE&#x27;: True,\n                      &#x27;MIRROR&#x27;: None,\n                      &#x27;NAME&#x27;: None},\n             &#x27;TIME_ZONE&#x27;: None,\n             &#x27;USER&#x27;: &#x27;xerpaheadless_saving_service_user&#x27;}}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATABASE_ROUTERS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATA_UPLOAD_MAX_MEMORY_SIZE</td>\n          <td class=\"code\"><pre>2621440</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATA_UPLOAD_MAX_NUMBER_FIELDS</td>\n          <td class=\"code\"><pre>1000</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATA_UPLOAD_MAX_NUMBER_FILES</td>\n          <td class=\"code\"><pre>100</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATETIME_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;N j, Y, P&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATETIME_INPUT_FORMATS</td>\n          <td class=\"code\"><pre>[&#x27;%Y-%m-%d %H:%M:%S&#x27;,\n &#x27;%Y-%m-%d %H:%M:%S.%f&#x27;,\n &#x27;%Y-%m-%d %H:%M&#x27;,\n &#x27;%m/%d/%Y %H:%M:%S&#x27;,\n &#x27;%m/%d/%Y %H:%M:%S.%f&#x27;,\n &#x27;%m/%d/%Y %H:%M&#x27;,\n &#x27;%m/%d/%y %H:%M:%S&#x27;,\n &#x27;%m/%d/%y %H:%M:%S.%f&#x27;,\n &#x27;%m/%d/%y %H:%M&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATE_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;N j, Y&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DATE_INPUT_FORMATS</td>\n          <td class=\"code\"><pre>[&#x27;%Y-%m-%d&#x27;,\n &#x27;%m/%d/%Y&#x27;,\n &#x27;%m/%d/%y&#x27;,\n &#x27;%b %d %Y&#x27;,\n &#x27;%b %d, %Y&#x27;,\n &#x27;%d %b %Y&#x27;,\n &#x27;%d %b, %Y&#x27;,\n &#x27;%B %d %Y&#x27;,\n &#x27;%B %d, %Y&#x27;,\n &#x27;%d %B %Y&#x27;,\n &#x27;%d %B, %Y&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEBUG</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEBUG_PROPAGATE_EXCEPTIONS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DECIMAL_SEPARATOR</td>\n          <td class=\"code\"><pre>&#x27;.&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_AUTO_FIELD</td>\n          <td class=\"code\"><pre>&#x27;django.db.models.BigAutoField&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_CHARSET</td>\n          <td class=\"code\"><pre>&#x27;utf-8&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_EXCEPTION_REPORTER</td>\n          <td class=\"code\"><pre>&#x27;django.views.debug.ExceptionReporter&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_EXCEPTION_REPORTER_FILTER</td>\n          <td class=\"code\"><pre>&#x27;django.views.debug.SafeExceptionReporterFilter&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_FILE_STORAGE</td>\n          <td class=\"code\"><pre>&#x27;django.core.files.storage.FileSystemStorage&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_FROM_EMAIL</td>\n          <td class=\"code\"><pre>&#x27;webmaster@localhost&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_INDEX_TABLESPACE</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DEFAULT_TABLESPACE</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>DISALLOWED_USER_AGENTS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_BACKEND</td>\n          <td class=\"code\"><pre>&#x27;django.core.mail.backends.smtp.EmailBackend&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_HOST</td>\n          <td class=\"code\"><pre>&#x27;localhost&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_HOST_PASSWORD</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_HOST_USER</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_PORT</td>\n          <td class=\"code\"><pre>25</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_SSL_CERTFILE</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_SSL_KEYFILE</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_SUBJECT_PREFIX</td>\n          <td class=\"code\"><pre>&#x27;[Django] &#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_TIMEOUT</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_USE_LOCALTIME</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_USE_SSL</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>EMAIL_USE_TLS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_DIRECTORY_PERMISSIONS</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_HANDLERS</td>\n          <td class=\"code\"><pre>[&#x27;django.core.files.uploadhandler.MemoryFileUploadHandler&#x27;,\n &#x27;django.core.files.uploadhandler.TemporaryFileUploadHandler&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_MAX_MEMORY_SIZE</td>\n          <td class=\"code\"><pre>2621440</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_PERMISSIONS</td>\n          <td class=\"code\"><pre>420</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FILE_UPLOAD_TEMP_DIR</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FIRST_DAY_OF_WEEK</td>\n          <td class=\"code\"><pre>0</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FIXTURE_DIRS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FORCE_SCRIPT_NAME</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FORMAT_MODULE_PATH</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>FORM_RENDERER</td>\n          <td class=\"code\"><pre>&#x27;django.forms.renderers.DjangoTemplates&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>IGNORABLE_404_URLS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>IMPORT_USER_DATA_MODE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>INSTALLED_APPS</td>\n          <td class=\"code\"><pre>[&#x27;django.contrib.admin&#x27;,\n &#x27;django.contrib.auth&#x27;,\n &#x27;django.contrib.contenttypes&#x27;,\n &#x27;django.contrib.sessions&#x27;,\n &#x27;django.contrib.messages&#x27;,\n &#x27;django.contrib.staticfiles&#x27;,\n &#x27;django_extensions&#x27;,\n &#x27;corsheaders&#x27;,\n &#x27;rest_framework&#x27;,\n &#x27;django_filters&#x27;,\n &#x27;monitoring&#x27;,\n &#x27;saving&#x27;,\n &#x27;payment&#x27;,\n &#x27;catalog&#x27;,\n &#x27;project&#x27;,\n &#x27;rule&#x27;,\n &#x27;activity&#x27;,\n &#x27;transaction&#x27;,\n &#x27;user&#x27;,\n &#x27;dashboard&#x27;,\n &#x27;metric&#x27;,\n &#x27;config&#x27;,\n &#x27;report&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>INTERNAL_IPS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGES</td>\n          <td class=\"code\"><pre>[(&#x27;af&#x27;, &#x27;Afrikaans&#x27;),\n (&#x27;ar&#x27;, &#x27;Arabic&#x27;),\n (&#x27;ar-dz&#x27;, &#x27;Algerian Arabic&#x27;),\n (&#x27;ast&#x27;, &#x27;Asturian&#x27;),\n (&#x27;az&#x27;, &#x27;Azerbaijani&#x27;),\n (&#x27;bg&#x27;, &#x27;Bulgarian&#x27;),\n (&#x27;be&#x27;, &#x27;Belarusian&#x27;),\n (&#x27;bn&#x27;, &#x27;Bengali&#x27;),\n (&#x27;br&#x27;, &#x27;Breton&#x27;),\n (&#x27;bs&#x27;, &#x27;Bosnian&#x27;),\n (&#x27;ca&#x27;, &#x27;Catalan&#x27;),\n (&#x27;cs&#x27;, &#x27;Czech&#x27;),\n (&#x27;cy&#x27;, &#x27;Welsh&#x27;),\n (&#x27;da&#x27;, &#x27;Danish&#x27;),\n (&#x27;de&#x27;, &#x27;German&#x27;),\n (&#x27;dsb&#x27;, &#x27;Lower Sorbian&#x27;),\n (&#x27;el&#x27;, &#x27;Greek&#x27;),\n (&#x27;en&#x27;, &#x27;English&#x27;),\n (&#x27;en-au&#x27;, &#x27;Australian English&#x27;),\n (&#x27;en-gb&#x27;, &#x27;British English&#x27;),\n (&#x27;eo&#x27;, &#x27;Esperanto&#x27;),\n (&#x27;es&#x27;, &#x27;Spanish&#x27;),\n (&#x27;es-ar&#x27;, &#x27;Argentinian Spanish&#x27;),\n (&#x27;es-co&#x27;, &#x27;Colombian Spanish&#x27;),\n (&#x27;es-mx&#x27;, &#x27;Mexican Spanish&#x27;),\n (&#x27;es-ni&#x27;, &#x27;Nicaraguan Spanish&#x27;),\n (&#x27;es-ve&#x27;, &#x27;Venezuelan Spanish&#x27;),\n (&#x27;et&#x27;, &#x27;Estonian&#x27;),\n (&#x27;eu&#x27;, &#x27;Basque&#x27;),\n (&#x27;fa&#x27;, &#x27;Persian&#x27;),\n (&#x27;fi&#x27;, &#x27;Finnish&#x27;),\n (&#x27;fr&#x27;, &#x27;French&#x27;),\n (&#x27;fy&#x27;, &#x27;Frisian&#x27;),\n (&#x27;ga&#x27;, &#x27;Irish&#x27;),\n (&#x27;gd&#x27;, &#x27;Scottish Gaelic&#x27;),\n (&#x27;gl&#x27;, &#x27;Galician&#x27;),\n (&#x27;he&#x27;, &#x27;Hebrew&#x27;),\n (&#x27;hi&#x27;, &#x27;Hindi&#x27;),\n (&#x27;hr&#x27;, &#x27;Croatian&#x27;),\n (&#x27;hsb&#x27;, &#x27;Upper Sorbian&#x27;),\n (&#x27;hu&#x27;, &#x27;Hungarian&#x27;),\n (&#x27;hy&#x27;, &#x27;Armenian&#x27;),\n (&#x27;ia&#x27;, &#x27;Interlingua&#x27;),\n (&#x27;id&#x27;, &#x27;Indonesian&#x27;),\n (&#x27;ig&#x27;, &#x27;Igbo&#x27;),\n (&#x27;io&#x27;, &#x27;Ido&#x27;),\n (&#x27;is&#x27;, &#x27;Icelandic&#x27;),\n (&#x27;it&#x27;, &#x27;Italian&#x27;),\n (&#x27;ja&#x27;, &#x27;Japanese&#x27;),\n (&#x27;ka&#x27;, &#x27;Georgian&#x27;),\n (&#x27;kab&#x27;, &#x27;Kabyle&#x27;),\n (&#x27;kk&#x27;, &#x27;Kazakh&#x27;),\n (&#x27;km&#x27;, &#x27;Khmer&#x27;),\n (&#x27;kn&#x27;, &#x27;Kannada&#x27;),\n (&#x27;ko&#x27;, &#x27;Korean&#x27;),\n (&#x27;ky&#x27;, &#x27;Kyrgyz&#x27;),\n (&#x27;lb&#x27;, &#x27;Luxembourgish&#x27;),\n (&#x27;lt&#x27;, &#x27;Lithuanian&#x27;),\n (&#x27;lv&#x27;, &#x27;Latvian&#x27;),\n (&#x27;mk&#x27;, &#x27;Macedonian&#x27;),\n (&#x27;ml&#x27;, &#x27;Malayalam&#x27;),\n (&#x27;mn&#x27;, &#x27;Mongolian&#x27;),\n (&#x27;mr&#x27;, &#x27;Marathi&#x27;),\n (&#x27;ms&#x27;, &#x27;Malay&#x27;),\n (&#x27;my&#x27;, &#x27;Burmese&#x27;),\n (&#x27;nb&#x27;, &#x27;Norwegian Bokmål&#x27;),\n (&#x27;ne&#x27;, &#x27;Nepali&#x27;),\n (&#x27;nl&#x27;, &#x27;Dutch&#x27;),\n (&#x27;nn&#x27;, &#x27;Norwegian Nynorsk&#x27;),\n (&#x27;os&#x27;, &#x27;Ossetic&#x27;),\n (&#x27;pa&#x27;, &#x27;Punjabi&#x27;),\n (&#x27;pl&#x27;, &#x27;Polish&#x27;),\n (&#x27;pt&#x27;, &#x27;Portuguese&#x27;),\n (&#x27;pt-br&#x27;, &#x27;Brazilian Portuguese&#x27;),\n (&#x27;ro&#x27;, &#x27;Romanian&#x27;),\n (&#x27;ru&#x27;, &#x27;Russian&#x27;),\n (&#x27;sk&#x27;, &#x27;Slovak&#x27;),\n (&#x27;sl&#x27;, &#x27;Slovenian&#x27;),\n (&#x27;sq&#x27;, &#x27;Albanian&#x27;),\n (&#x27;sr&#x27;, &#x27;Serbian&#x27;),\n (&#x27;sr-latn&#x27;, &#x27;Serbian Latin&#x27;),\n (&#x27;sv&#x27;, &#x27;Swedish&#x27;),\n (&#x27;sw&#x27;, &#x27;Swahili&#x27;),\n (&#x27;ta&#x27;, &#x27;Tamil&#x27;),\n (&#x27;te&#x27;, &#x27;Telugu&#x27;),\n (&#x27;tg&#x27;, &#x27;Tajik&#x27;),\n (&#x27;th&#x27;, &#x27;Thai&#x27;),\n (&#x27;tk&#x27;, &#x27;Turkmen&#x27;),\n (&#x27;tr&#x27;, &#x27;Turkish&#x27;),\n (&#x27;tt&#x27;, &#x27;Tatar&#x27;),\n (&#x27;udm&#x27;, &#x27;Udmurt&#x27;),\n (&#x27;uk&#x27;, &#x27;Ukrainian&#x27;),\n (&#x27;ur&#x27;, &#x27;Urdu&#x27;),\n (&#x27;uz&#x27;, &#x27;Uzbek&#x27;),\n (&#x27;vi&#x27;, &#x27;Vietnamese&#x27;),\n (&#x27;zh-hans&#x27;, &#x27;Simplified Chinese&#x27;),\n (&#x27;zh-hant&#x27;, &#x27;Traditional Chinese&#x27;)]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGES_BIDI</td>\n          <td class=\"code\"><pre>[&#x27;he&#x27;, &#x27;ar&#x27;, &#x27;ar-dz&#x27;, &#x27;fa&#x27;, &#x27;ur&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_CODE</td>\n          <td class=\"code\"><pre>&#x27;en-us&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_AGE</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_DOMAIN</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_HTTPONLY</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_NAME</td>\n          <td class=\"code\"><pre>&#x27;django_language&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_PATH</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_SAMESITE</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LANGUAGE_COOKIE_SECURE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOCALE_PATHS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGGING</td>\n          <td class=\"code\"><pre>{&#x27;disable_existing_loggers&#x27;: False,\n &#x27;filters&#x27;: {&#x27;require_debug_true&#x27;: {&#x27;()&#x27;: &#x27;django.utils.log.RequireDebugTrue&#x27;}},\n &#x27;formatters&#x27;: {&#x27;django.server&#x27;: {&#x27;()&#x27;: &#x27;django.utils.log.ServerFormatter&#x27;,\n                                  &#x27;format&#x27;: &#x27;[%(server_time)s] %(message)s&#x27;},\n                &#x27;simple&#x27;: {&#x27;format&#x27;: &#x27;%(levelname)s %(message)s&#x27;},\n                &#x27;verbose&#x27;: {&#x27;format&#x27;: &#x27;%(levelname)s %(asctime)s &#x27;\n                                      &#x27;%(pathname)s-&gt;%(module)s:%(lineno)s &#x27;\n                                      &#x27;%(process)d %(thread)d %(message)s&#x27;}},\n &#x27;handlers&#x27;: {&#x27;console&#x27;: {&#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,\n                          &#x27;formatter&#x27;: &#x27;simple&#x27;,\n                          &#x27;level&#x27;: &#x27;DEBUG&#x27;},\n              &#x27;django.server&#x27;: {&#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,\n                                &#x27;formatter&#x27;: &#x27;django.server&#x27;,\n                                &#x27;level&#x27;: &#x27;INFO&#x27;},\n              &#x27;message&#x27;: {&#x27;class&#x27;: &#x27;logging.StreamHandler&#x27;,\n                          &#x27;formatter&#x27;: &#x27;verbose&#x27;,\n                          &#x27;level&#x27;: &#x27;DEBUG&#x27;}},\n &#x27;loggers&#x27;: {&#x27;django&#x27;: {&#x27;handlers&#x27;: [&#x27;console&#x27;], &#x27;propagate&#x27;: True},\n             &#x27;django.db.backends&#x27;: {&#x27;handlers&#x27;: [&#x27;console&#x27;], &#x27;level&#x27;: &#x27;INFO&#x27;},\n             &#x27;django.message.log&#x27;: {&#x27;handlers&#x27;: [&#x27;message&#x27;],\n                                    &#x27;level&#x27;: &#x27;INFO&#x27;,\n                                    &#x27;propagate&#x27;: False},\n             &#x27;django.request&#x27;: {&#x27;handlers&#x27;: [&#x27;console&#x27;],\n                                &#x27;level&#x27;: &#x27;ERROR&#x27;,\n                                &#x27;propagate&#x27;: False},\n             &#x27;django.server&#x27;: {&#x27;handlers&#x27;: [&#x27;django.server&#x27;],\n                               &#x27;level&#x27;: &#x27;INFO&#x27;,\n                               &#x27;propagate&#x27;: False}},\n &#x27;version&#x27;: 1}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGGING_CONFIG</td>\n          <td class=\"code\"><pre>&#x27;logging.config.dictConfig&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGIN_REDIRECT_URL</td>\n          <td class=\"code\"><pre>&#x27;/accounts/profile/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGIN_URL</td>\n          <td class=\"code\"><pre>&#x27;/accounts/login/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>LOGOUT_REDIRECT_URL</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MANAGERS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MEDIA_ROOT</td>\n          <td class=\"code\"><pre>&#x27;&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MEDIA_URL</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MESSAGE_STORAGE</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.messages.storage.fallback.FallbackStorage&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MIDDLEWARE</td>\n          <td class=\"code\"><pre>[&#x27;django.middleware.security.SecurityMiddleware&#x27;,\n &#x27;django.contrib.sessions.middleware.SessionMiddleware&#x27;,\n &#x27;django.middleware.common.CommonMiddleware&#x27;,\n &#x27;django.middleware.csrf.CsrfViewMiddleware&#x27;,\n &#x27;django.contrib.auth.middleware.AuthenticationMiddleware&#x27;,\n &#x27;django.contrib.messages.middleware.MessageMiddleware&#x27;,\n &#x27;django.middleware.clickjacking.XFrameOptionsMiddleware&#x27;,\n &#x27;corsheaders.middleware.CorsMiddleware&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MIGRATION_MODULES</td>\n          <td class=\"code\"><pre>{}</pre></td>\n        </tr>\n      \n        <tr>\n          <td>MONTH_DAY_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;F j&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>NUMBER_GROUPING</td>\n          <td class=\"code\"><pre>0</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PASSWORD_HASHERS</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PASSWORD_RESET_TIMEOUT</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>PREPEND_WWW</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>ROOT_URLCONF</td>\n          <td class=\"code\"><pre>&#x27;api_saving.urls&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECRET_KEY</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECRET_KEY_FALLBACKS</td>\n          <td class=\"code\"><pre>&#x27;********************&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_CONTENT_TYPE_NOSNIFF</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_CROSS_ORIGIN_OPENER_POLICY</td>\n          <td class=\"code\"><pre>&#x27;same-origin&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_HSTS_INCLUDE_SUBDOMAINS</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_HSTS_PRELOAD</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_HSTS_SECONDS</td>\n          <td class=\"code\"><pre>0</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_PROXY_SSL_HEADER</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_REDIRECT_EXEMPT</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_REFERRER_POLICY</td>\n          <td class=\"code\"><pre>&#x27;same-origin&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_SSL_HOST</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SECURE_SSL_REDIRECT</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SERVER_EMAIL</td>\n          <td class=\"code\"><pre>&#x27;root@localhost&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_CACHE_ALIAS</td>\n          <td class=\"code\"><pre>&#x27;default&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_AGE</td>\n          <td class=\"code\"><pre>1209600</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_DOMAIN</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_HTTPONLY</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_NAME</td>\n          <td class=\"code\"><pre>&#x27;sessionid&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_PATH</td>\n          <td class=\"code\"><pre>&#x27;/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_SAMESITE</td>\n          <td class=\"code\"><pre>&#x27;Lax&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_COOKIE_SECURE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_ENGINE</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.sessions.backends.db&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_EXPIRE_AT_BROWSER_CLOSE</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_FILE_PATH</td>\n          <td class=\"code\"><pre>None</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_SAVE_EVERY_REQUEST</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SESSION_SERIALIZER</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.sessions.serializers.JSONSerializer&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SETTINGS_MODULE</td>\n          <td class=\"code\"><pre>&#x27;api_saving.settings&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SHORT_DATETIME_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;m/d/Y P&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SHORT_DATE_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;m/d/Y&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SIGNING_BACKEND</td>\n          <td class=\"code\"><pre>&#x27;django.core.signing.TimestampSigner&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>SILENCED_SYSTEM_CHECKS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATICFILES_DIRS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATICFILES_FINDERS</td>\n          <td class=\"code\"><pre>[&#x27;django.contrib.staticfiles.finders.FileSystemFinder&#x27;,\n &#x27;django.contrib.staticfiles.finders.AppDirectoriesFinder&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATICFILES_STORAGE</td>\n          <td class=\"code\"><pre>&#x27;django.contrib.staticfiles.storage.StaticFilesStorage&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATIC_ROOT</td>\n          <td class=\"code\"><pre>&#x27;./static/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>STATIC_URL</td>\n          <td class=\"code\"><pre>&#x27;/static/&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TEMPLATES</td>\n          <td class=\"code\"><pre>[{&#x27;APP_DIRS&#x27;: True,\n  &#x27;BACKEND&#x27;: &#x27;django.template.backends.django.DjangoTemplates&#x27;,\n  &#x27;DIRS&#x27;: [&#x27;/code/src/templates&#x27;],\n  &#x27;OPTIONS&#x27;: {&#x27;context_processors&#x27;: [&#x27;django.template.context_processors.debug&#x27;,\n                                     &#x27;django.template.context_processors.request&#x27;,\n                                     &#x27;django.contrib.auth.context_processors.auth&#x27;,\n                                     &#x27;django.contrib.messages.context_processors.messages&#x27;]}}]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TEST_NON_SERIALIZED_APPS</td>\n          <td class=\"code\"><pre>[]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TEST_RUNNER</td>\n          <td class=\"code\"><pre>&#x27;django.test.runner.DiscoverRunner&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>THOUSAND_SEPARATOR</td>\n          <td class=\"code\"><pre>&#x27;,&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TIME_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;P&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TIME_INPUT_FORMATS</td>\n          <td class=\"code\"><pre>[&#x27;%H:%M:%S&#x27;, &#x27;%H:%M:%S.%f&#x27;, &#x27;%H:%M&#x27;]</pre></td>\n        </tr>\n      \n        <tr>\n          <td>TIME_ZONE</td>\n          <td class=\"code\"><pre>&#x27;America/Mexico_City&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_DEPRECATED_PYTZ</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_I18N</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_L10N</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_THOUSAND_SEPARATOR</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_TZ</td>\n          <td class=\"code\"><pre>True</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_X_FORWARDED_HOST</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>USE_X_FORWARDED_PORT</td>\n          <td class=\"code\"><pre>False</pre></td>\n        </tr>\n      \n        <tr>\n          <td>WSGI_APPLICATION</td>\n          <td class=\"code\"><pre>&#x27;api_saving.wsgi.application&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>X_FRAME_OPTIONS</td>\n          <td class=\"code\"><pre>&#x27;DENY&#x27;</pre></td>\n        </tr>\n      \n        <tr>\n          <td>YEAR_MONTH_FORMAT</td>\n          <td class=\"code\"><pre>&#x27;F Y&#x27;</pre></td>\n        </tr>\n      \n    </tbody>\n  </table>\n\n</div>\n\n  <div id=\"explanation\">\n    <p>\n      You’re seeing this error because you have <code>DEBUG = True</code> in your\n      Django settings file. Change that to <code>False</code>, and Django will\n      display a standard page generated by the handler for this status code.\n    </p>\n  </div>\n\n</body>\n</html>\n"}],"_postman_id":"ccef7dff-dcdf-404a-aa58-6c3dd3560026"},{"name":"Listar tipos de proyectos seleccionables","id":"33dc15f9-586e-407c-a4c4-321de6147214","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/project_config_selectable/","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","project_config_selectable",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"33dc15f9-586e-407c-a4c4-321de6147214"},{"name":"Obtener fecha del último ahorro","id":"882a83ac-d95e-481a-b13e-e77458dba70b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/last-savings-update/","description":"<p>Este endpoint permite obtener la última fecha de actualización de los ahorros realizados por el usuario en la plataforma.</p>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Metodo: GET</p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/last-savings-update/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>user_id</code> (string): ID del usuario asociado al proyecto.</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<hr />\n<h4 id=\"response\">Response</h4>\n<p>La respuesta está en forma de un esquema JSON con la siguiente propiedad:</p>\n<ul>\n<li><code>last_savings_update</code>(string): Fecha de la última actualización, la cual está determinada por el último abono automático realizado con éxito en alguno de los proyectos del usuario.</li>\n</ul>\n<hr />\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"last_savings_update\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","last-savings-update",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"9bf037ea-bc8d-4ae9-a00e-29233e9322be","name":"Success Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/last-savings-update/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 08 Nov 2024 18:04:40 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"58"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"6d432c7d-1e50-457a-bc17-ba854738dfa2"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"A8Hc3G7EoAMEBbg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-672e52b8-3ecef87225907a61697d21d3;Parent=3fe82d22698c3454;Sampled=0;Lineage=1:d25c5fda:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"last_savings_update\": \"2024-11-07T21:00:16.947434-06:00\"\n}"},{"id":"471aba7c-8b71-4f17-b1d3-15777ae77e8d","name":"Success Response - Empty","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/last-savings-update/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 08 Nov 2024 18:04:40 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"58"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"6d432c7d-1e50-457a-bc17-ba854738dfa2"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"A8Hc3G7EoAMEBbg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-672e52b8-3ecef87225907a61697d21d3;Parent=3fe82d22698c3454;Sampled=0;Lineage=1:d25c5fda:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"last_savings_update\": null\n}"}],"_postman_id":"882a83ac-d95e-481a-b13e-e77458dba70b"},{"name":"Finalización de metas","id":"f138f141-0523-4f55-9ab1-97bb8558cbde","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/finish/","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","finish",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"f138f141-0523-4f55-9ab1-97bb8558cbde"}],"id":"e0efa93f-d696-4a25-96f6-6dc99bbacc9f","description":"<p>La carpeta agrupa los endpoints relacionados con la administración de metas de ahorro de los usuarios dentro del sistema. Cada proyecto representa una meta personalizada con configuración propia, cuentas asociadas, y operaciones de ahorro o retiro que se pueden realizar sobre ella.</p>\n<p>Esta carpeta contiene todos los endpoints necesarios para que una aplicación cliente pueda gestionar las metas de ahorro de sus usuarios.</p>\n<hr />\n<p>Esta carpeta se divide en dos secciones principales:</p>\n<h4 id=\"📁-proyectos\">📁 <strong>Proyectos</strong></h4>\n<p>Contiene los endpoints para la <strong>creación, edición, consulta y eliminación</strong> de metas de ahorro, así como la administración de cuentas y reglas asociadas.</p>\n<h5 id=\"📌-funcionalidades-incluidas\">📌 Funcionalidades incluidas:</h5>\n<ul>\n<li><p>Crear proyectos estándar o personalizados.</p>\n</li>\n<li><p>Activar y editar metas existentes.</p>\n</li>\n<li><p>Asignar o modificar cuentas bancarias vinculadas a la meta.</p>\n</li>\n<li><p>Consultar y eliminar metas.</p>\n</li>\n<li><p>Gestionar configuraciones especiales según el tipo de proyecto.</p>\n</li>\n</ul>\n<blockquote>\n<p>Estos endpoints permiten que el usuario gestione la estructura de sus metas, sin mover fondos todavía. </p>\n</blockquote>\n<hr />\n<h4 id=\"⚙️-operaciones\">⚙️ <strong>Operaciones</strong></h4>\n<p>Incluye los endpoints para <strong>ejecutar movimientos financieros</strong> sobre los proyectos, como abonos, retiros o transferencias entre metas.</p>\n<h5 id=\"📌-funcionalidades-incluidas-1\">📌 Funcionalidades incluidas:</h5>\n<ul>\n<li><p>Obtener datos necesarios para validar o iniciar un abono/retiro.</p>\n</li>\n<li><p>Registrar abonos o retiros manuales.</p>\n</li>\n<li><p>Realizar transferencias internas entre metas.</p>\n</li>\n<li><p>Consultar la fecha de la última actualización de pagos realizados.</p>\n</li>\n</ul>\n<p>Estas operaciones afectan directamente los saldos de ahorro (<code>progress</code>) y están ligadas a reglas activas, pagos u otros movimientos.</p>\n<hr />\n<h4 id=\"🔐-autenticación-requerida\">🔐 Autenticación requerida</h4>\n<p>Todos los endpoints requieren un <strong>User Token válido</strong> en el header de autorización:</p>\n<blockquote>\n<p><code>Authorization: Bearer {{user_token}}</code> </p>\n</blockquote>\n<h3 id=\"consideraciones\">Consideraciones</h3>\n<ul>\n<li><p>Un usuario puede tener múltiples metas activas simultáneamente.</p>\n</li>\n<li><p>Las metas que llegan a su monto objetivo se modifica su estado a <code>finished</code>.</p>\n</li>\n<li><p>Las metas pueden ser modificadas mientras estén en estado <code>active</code> y <code>finished</code>.</p>\n</li>\n<li><p>Las cuentas de una meta no se puede modificar en una meta <code>active</code>.</p>\n</li>\n<li><p>Un proyecto eliminado pasa a estado <code>deleted</code>, pero los datos asociados se conservan.</p>\n</li>\n</ul>\n","_postman_id":"e0efa93f-d696-4a25-96f6-6dc99bbacc9f"},{"name":"Reglas automáticas","item":[{"name":"Lista de reglas de ahorro","event":[{"listen":"test","script":{"id":"9d61bed3-5291-4951-9c55-5303d88cb1a9","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    next: { type: 'string', optional: true },\r","    previous: { type: 'string', optional: true },\r","    total_pages: 'number',\r","    current_page: 'number',\r","    offset: 'number',\r","    count: 'number',\r","    results: 'array'\r","};\r","\r","const resultProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    amount: 'number',\r","    salary_percentage: 'number',\r","    execution_frequency: { type: 'string', optional: true },\r","    soccer_condition: { type: 'string', optional: true },\r","    soccer_team: { type: 'object', optional: true },\r","    weather_city: { type: 'string', optional: true },\r","    temperature: 'number',\r","    created_at: 'string',\r","    rule_type: 'object',\r","    rule_status: 'object',\r","    transaction_category: { type: 'object', optional: true },\r","    spend_less_limit_amount: 'number',\r","    spend_less_category_id: { type: 'string', optional: true },\r","    deleted_at: { type: 'string', optional: true }\r","};\r","\r","const soccerTeamProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const ruleTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const ruleStatusProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const transactionCategoryProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: { type: 'string', optional: true },\r","    name: { type: 'string', optional: true },\r","    color: { type: 'string', optional: true },\r","    active: { type: 'boolean', optional: true },\r","    short_name: { type: 'string', optional: true },\r","    description: { type: 'string', optional: true },\r","    icon_pause: { type: 'string', optional: true },\r","    icon_primary: { type: 'string', optional: true },\r","    frequency_description: { type: 'string', optional: true },\r","    img_url: { type: 'string', optional: true }\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the results array\r","pm.test(\"Results have expected properties with correct types\", () => {\r","    if (responseJson.results && responseJson.results.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0], resultProperties);\r","        \r","        // Check properties of the soccer_team object in the first result\r","        if (responseJson.results[0].soccer_team) {\r","            xerpaTestApi.checkObjectProperties(responseJson.results[0].soccer_team, soccerTeamProperties);\r","            xerpaTestApi.checkObjectProperties(responseJson.results[0].soccer_team.metadata, metadataProperties);\r","        }\r","        \r","        // Check properties of the rule_type object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].rule_type, ruleTypeProperties);\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].rule_type.metadata, metadataProperties);\r","        \r","        // Check properties of the rule_status object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].rule_status, ruleStatusProperties);\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].rule_status.metadata, metadataProperties);\r","        \r","        // Check properties of the transaction_category object in the first result\r","        if (responseJson.results[0].transaction_category) {\r","            xerpaTestApi.checkObjectProperties(responseJson.results[0].transaction_category, transactionCategoryProperties);\r","            xerpaTestApi.checkObjectProperties(responseJson.results[0].transaction_category.metadata, metadataProperties);\r","        }\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"04815ef0-9a63-4b77-9299-64aa5d3c2f13","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/","description":"<p>El endpoint recupera una lista de reglas asociadas con un usuario y proyecto específico, con la paginación habilitada.</p>\n<h4 id=\"request\"><strong>Request</strong></h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_id</code> (string): ID del proyecto</p>\n</li>\n</ul>\n</li>\n<li><p>Parámetros de query: Se agregan al final de la ruta, sirven principalmente para manejar la paginación de la petición. Ejm: <code>/payments/?page=1&amp;page_size=10</code></p>\n<ul>\n<li><p><code>page</code>(number): Número de página para la paginación de resultados.</p>\n</li>\n<li><p><code>page_size</code>(number): Cantidad de resultados que se incluirán por página.</p>\n</li>\n<li><p><code>paginate</code>(bool): Booleano que indica si se desea paginar la respuesta.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>Entrega un array de <code>rules</code>, en donde cada una de ellas incluye:</p>\n<ul>\n<li><p><code>id</code>(string): ID de la regla.</p>\n</li>\n<li><p><code>user_id</code>(string): ID del usuario asociado a la regla.</p>\n</li>\n<li><p><code>amount</code>(number): Monto configurado para la regla.</p>\n</li>\n<li><p><code>salary_percentage</code>(number or null): Porcentaje del salario (si aplica a la regla).</p>\n</li>\n<li><p><code>execution_frequency</code> (string): Frecuencia de ejecución.</p>\n</li>\n<li><p><code>soccer_condition</code> (string or null): Condición relacionada con el fútbol (si aplica).</p>\n</li>\n<li><p><code>soccer_team</code> (object): Detalles del equipo de fútbol, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del equipo de futbol.</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del equipo de futbol.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>img_url</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>weather_city</code> (string o null): Ciudad relacionada al clima (si aplica).</p>\n</li>\n<li><p><code>temperature</code> (number): Temperatura configurada como condición.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha y hora de creación de la regla.</p>\n</li>\n<li><p><code>rule_type</code> (object): Información detallada del tipo de regla:</p>\n<ul>\n<li><p><code>id</code> (string): ID del tipo de regla.</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del tipo de regla.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del tipo de regla</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>,<code>name</code>,<code>color</code>,<code>active</code>,<code>icon_pause</code>,<code>short_name</code>,<code>description</code>,<code>icon_primary</code>,<code>frequency_description</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>rule_status</code> (object): Estado de la regla:</p>\n<ul>\n<li><p><code>id</code> (string): ID del estado de la regla</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del estado de la regla.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del estado de la regla</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>,<code>color</code>,<code>active</code>,<code>short_name</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>transaction_category</code> (string or null): Categoría de transacción asociada.</p>\n</li>\n<li><p><code>spend_less_limit_amount</code>(string): Límite de gasto para la categoría \"gastar menos\"</p>\n</li>\n<li><p><code>spend_less_category_id</code>(string or null): Categoría de la regla \"gastar menos\"</p>\n</li>\n<li><p><code>deleted_at</code> (string or null): Fecha de eliminación, si la regla fue eliminada.</p>\n</li>\n<li><p><code>rule_execution_days</code> (objeto or null): Indica las dias de ejecucion que tendra la regla (solo aplica para el caso de que sea monto fijo).</p>\n</li>\n</ul>\n<p>La respuesta también incluye información de paginación, como:</p>\n<ul>\n<li><p><code>next</code>(string or null): URL de la siguiente página</p>\n</li>\n<li><p><code>previous</code>(string or null): URL de la página anterior</p>\n</li>\n<li><p><code>total_pages</code>(number): Total de páginas disponibles</p>\n</li>\n<li><p><code>current_page</code>(number): Página actual</p>\n</li>\n<li><p><code>offset</code>(number): Índice de desplazamiento</p>\n</li>\n<li><p><code>count</code>(number): Total de elementos</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<p>La respuesta para esta solicitud se puede documentar como un esquema JSON de la siguiente manera:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"next\": { \"type\": [\"string\", \"null\"] },\n    \"previous\": { \"type\": [\"string\", \"null\"] },\n    \"total_pages\": { \"type\": \"integer\" },\n    \"current_page\": { \"type\": \"integer\" },\n    \"offset\": { \"type\": \"integer\" },\n    \"count\": { \"type\": \"integer\" },\n    \"results\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"amount\": { \"type\": \"string\" },\n          \"salary_percentage\": { \"type\": \"integer\" },\n          \"execution_frequency\": { \"type\": [\"string\", \"null\"] },\n          \"soccer_condition\": { \"type\": [\"string\", \"null\"] },\n          \"soccer_team\": {\n            \"type\": [\"object\", \"null\"],\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"img_url\": { \"type\": \"string\" }\n                }\n              }\n            }\n          },\n          \"weather_city\": { \"type\": [\"string\", \"null\"] },\n          \"temperature\": { \"type\": \"integer\" },\n          \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"rule_type\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"icon\": { \"type\": \"string\" },\n                  \"name\": { \"type\": \"string\" },\n                  \"color\": { \"type\": \"string\" },\n                  \"active\": { \"type\": \"boolean\" },\n                  \"icon_pause\": { \"type\": \"string\" },\n                  \"short_name\": { \"type\": \"string\" },\n                  \"description\": { \"type\": \"string\" },\n                  \"icon_primary\": { \"type\": \"string\" },\n                  \"frequency_description\": { \"type\": \"string\" }\n                }\n              }\n            }\n          },\n          \"rule_status\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"icon\": { \"type\": \"string\" },\n                  \"color\": { \"type\": \"string\" },\n                  \"active\": { \"type\": \"boolean\" },\n                  \"short_name\": { \"type\": \"string\" }\n                }\n              }\n            }\n          },\n          \"transaction_category\": { \"type\": [\"string\", \"null\"] },\n          \"spend_less_limit_amount\": { \"type\": \"string\" },\n          \"spend_less_category_id\": { \"type\": [\"string\", \"null\"] },\n          \"deleted_at\": { \"type\": [\"string\", \"null\"], \"format\": \"date-time\" },\n          \"rule_execution_days\": { \"type\": \"object\", \"properties\": { \"days\":\"list\" } }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","rules",""],"host":["{{host_app}}"],"query":[{"disabled":true,"key":"page_size","value":"1"},{"disabled":true,"key":"page","value":"1"},{"disabled":true,"key":"paginate","value":"true"}],"variable":[]}},"response":[{"id":"28a53d4c-d107-4ffe-869b-a4fd73f6828c","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","rules",""],"query":[{"key":"page_size","value":"1","disabled":true},{"key":"page","value":"2","disabled":true},{"key":"paginate","value":"true","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 15:52:28 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"8663"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"2f1cb53e-abb6-4a90-b590-dbf7d4c20684"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LY4ZdHFKoAMEimg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839d43c-6ea35b40031c5db50e887394;Parent=71f6612be88ed860;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"next\": null,\n    \"previous\": null,\n    \"total_pages\": 1,\n    \"current_page\": 1,\n    \"offset\": 0,\n    \"count\": 6,\n    \"results\": [\n        {\n            \"id\": \"cd82525a-ff38-48bf-ad35-cc79ff19ff4a\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"amount\": 666,\n            \"salary_percentage\": 0,\n            \"execution_frequency\": null,\n            \"soccer_condition\": \"G\",\n            \"soccer_team\": {\n                \"id\": \"9ec44086-78ad-4900-9112-72d98f86a8e4\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"174\",\n                \"description\": \"AS Monaco\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/174.png\"\n                }\n            },\n            \"weather_city\": null,\n            \"temperature\": 0,\n            \"created_at\": \"2025-05-30T09:52:24.234821-06:00\",\n            \"rule_type\": {\n                \"id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_soccer\",\n                \"description\": \"Regla pasión futbolera\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                    \"name\": \"Pasion futbolera\",\n                    \"color\": \"#7C2582\",\n                    \"active\": false,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_SOCCER\",\n                    \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                    \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                }\n            },\n            \"rule_status\": {\n                \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n                \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                \"item_name\": \"rule_status_active\",\n                \"description\": \"Regla activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_STATUS_ACTIVE\"\n                }\n            },\n            \"transaction_category\": null,\n            \"spend_less_limit_amount\": 0,\n            \"spend_less_category_id\": null,\n            \"deleted_at\": null\n        },\n        {\n            \"id\": \"908d07cc-d976-4b29-95ca-f5646a52bca3\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"amount\": 0,\n            \"salary_percentage\": 5,\n            \"execution_frequency\": null,\n            \"soccer_condition\": null,\n            \"soccer_team\": null,\n            \"weather_city\": null,\n            \"temperature\": 0,\n            \"created_at\": \"2025-05-30T09:52:24.200721-06:00\",\n            \"rule_type\": {\n                \"id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_fixed_salary\",\n                \"description\": \"Regla % sueldo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                    \"name\": \"Porcentaje de sueldo\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                    \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                    \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                }\n            },\n            \"rule_status\": {\n                \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n                \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                \"item_name\": \"rule_status_active\",\n                \"description\": \"Regla activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_STATUS_ACTIVE\"\n                }\n            },\n            \"transaction_category\": null,\n            \"spend_less_limit_amount\": 0,\n            \"spend_less_category_id\": null,\n            \"deleted_at\": null\n        },\n        {\n            \"id\": \"a59b816f-caf7-4279-87be-2652f1a98842\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"amount\": 444,\n            \"salary_percentage\": 0,\n            \"execution_frequency\": null,\n            \"soccer_condition\": null,\n            \"soccer_team\": null,\n            \"weather_city\": null,\n            \"temperature\": 0,\n            \"created_at\": \"2025-05-30T09:52:24.163491-06:00\",\n            \"rule_type\": {\n                \"id\": \"229011e5-fb7a-447c-bada-bb48010175ce\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_guilty_pleasure\",\n                \"description\": \"Regla placer culpable\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                    \"name\": \"Placer culpable\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                    \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                    \"frequency_description\": \"Ahorra {amount} en {description}\"\n                }\n            },\n            \"rule_status\": {\n                \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n                \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                \"item_name\": \"rule_status_active\",\n                \"description\": \"Regla activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_STATUS_ACTIVE\"\n                }\n            },\n            \"transaction_category\": {\n                \"id\": \"84e6fa2f-8790-4d94-8f65-6944c7bcba10\",\n                \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n                \"item_name\": \"Vacaciones & Viajes\",\n                \"description\": \"Plataformas de viajes, hoteles, cabañas, arriendo de auto\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/viajes.svg\",\n                    \"color\": \"#FFC700\",\n                    \"active\": true,\n                    \"short_name\": \"VACACION_VIAJE\"\n                }\n            },\n            \"spend_less_limit_amount\": 0,\n            \"spend_less_category_id\": null,\n            \"deleted_at\": null\n        },\n        {\n            \"id\": \"034f9e1e-a3aa-49a1-b287-4ce495a03999\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"amount\": 0,\n            \"salary_percentage\": 0,\n            \"execution_frequency\": null,\n            \"soccer_condition\": null,\n            \"soccer_team\": null,\n            \"weather_city\": null,\n            \"temperature\": 0,\n            \"created_at\": \"2025-05-30T09:52:24.125333-06:00\",\n            \"rule_type\": {\n                \"id\": \"90832d0a-3879-40b5-a45b-729e4a964749\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_52_weeks\",\n                \"description\": \"Regla 52 semanas\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                    \"name\": \"Desafío 52 semanas\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                    \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                    \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                }\n            },\n            \"rule_status\": {\n                \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n                \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                \"item_name\": \"rule_status_active\",\n                \"description\": \"Regla activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_STATUS_ACTIVE\"\n                }\n            },\n            \"transaction_category\": null,\n            \"spend_less_limit_amount\": 0,\n            \"spend_less_category_id\": null,\n            \"deleted_at\": null\n        },\n        {\n            \"id\": \"302a8dee-452f-42b5-8f92-f7003a503d9e\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"amount\": 222,\n            \"salary_percentage\": 0,\n            \"execution_frequency\": null,\n            \"soccer_condition\": null,\n            \"soccer_team\": null,\n            \"weather_city\": null,\n            \"temperature\": 0,\n            \"created_at\": \"2025-05-30T09:52:24.095097-06:00\",\n            \"rule_type\": {\n                \"id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_round_up\",\n                \"description\": \"Regla redondeo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                    \"name\": \"Redondear\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                    \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                    \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                }\n            },\n            \"rule_status\": {\n                \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n                \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                \"item_name\": \"rule_status_active\",\n                \"description\": \"Regla activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_STATUS_ACTIVE\"\n                }\n            },\n            \"transaction_category\": null,\n            \"spend_less_limit_amount\": 0,\n            \"spend_less_category_id\": null,\n            \"deleted_at\": null\n        },\n        {\n            \"id\": \"38c0e6be-feea-48e0-b698-1ce063e03126\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"amount\": 111,\n            \"salary_percentage\": 0,\n            \"execution_frequency\": \"D\",\n            \"soccer_condition\": null,\n            \"soccer_team\": null,\n            \"weather_city\": null,\n            \"temperature\": 0,\n            \"created_at\": \"2025-05-30T09:52:24.055891-06:00\",\n            \"rule_type\": {\n                \"id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_fixed_amount\",\n                \"description\": \"Regla monto fijo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                    \"name\": \"Monto fijo\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                    \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                    \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                }\n            },\n            \"rule_status\": {\n                \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n                \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                \"item_name\": \"rule_status_active\",\n                \"description\": \"Regla activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_STATUS_ACTIVE\"\n                }\n            },\n            \"transaction_category\": null,\n            \"spend_less_limit_amount\": 0,\n            \"spend_less_category_id\": null,\n            \"deleted_at\": null\n        }\n    ]\n}"},{"id":"3b9f8220-cc24-4e9b-be63-b2a8466d41de","name":"Bad Request - Invalid page size","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/?page_size=asdasdasd&page=2","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","rules",""],"query":[{"key":"page_size","value":"asdasdasd"},{"key":"page","value":"2"},{"key":"paginate","value":"true","disabled":true}]}},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 16:17:32 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"26"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"756c1cd1-c27f-4266-976a-60eddaedff1b"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LY8EeGMmoAMEeNA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839da1c-7ec9b0600c12cf1a5ba6fed0;Parent=6264d87f4c46abc5;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Invalid page.\"\n}"},{"id":"56c0310d-b380-4ccd-816d-0def463e72a0","name":"Bad Request - Invalid page","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/?page_size=1&page=-2","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","rules",""],"query":[{"key":"page_size","value":"1"},{"key":"page","value":"-2"},{"key":"paginate","value":"true","disabled":true}]}},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 16:17:58 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"26"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"5615caa8-131c-4779-b819-5b3580ee554e"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LY8IkG9XIAMEMDg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839da36-14a5505b1485cb7101ee9383;Parent=014b5d43899d5b6b;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Invalid page.\"\n}"}],"_postman_id":"04815ef0-9a63-4b77-9299-64aa5d3c2f13"},{"name":"Crear regla de ahorro","event":[{"listen":"test","script":{"id":"7e8e24ec-5142-4b5b-8322-5f2703b46cd2","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulPost();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    amount: 'number',\r","    salary_percentage: 'number',\r","    execution_frequency: { type: 'string', optional: true },\r","    soccer_condition: { type: 'string', optional: true },\r","    soccer_team: { type: 'object', optional: true },\r","    weather_city: { type: 'string', optional: true },\r","    temperature: 'number',\r","    created_at: 'string',\r","    rule_type: 'object',\r","    rule_status: 'object',\r","    transaction_category: { type: 'object', optional: true },\r","    spend_less_limit_amount: 'number',\r","    spend_less_category_id: { type: 'string', optional: true },\r","    deleted_at: { type: 'string', optional: true }\r","};\r","\r","const ruleTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const ruleStatusProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    name: { type: 'string', optional: true },\r","    color: 'string',\r","    active: 'boolean',\r","    icon_pause: { type: 'string', optional: true },\r","    short_name: 'string',\r","    description: { type: 'string', optional: true },\r","    icon_primary: { type: 'string', optional: true },\r","    frequency_description: { type: 'string', optional: true }\r","};\r","\r","const soccerTeamProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const transactionCategoryProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson.length > 0) {\r","        const firstItem = responseJson[0];\r","        xerpaTestApi.checkObjectProperties(firstItem, topLevelProperties);\r","\r","        // Check properties of the rule_type object\r","        xerpaTestApi.checkObjectProperties(firstItem.rule_type, ruleTypeProperties);\r","\r","        // Check metadata properties of the rule_type object\r","        xerpaTestApi.checkObjectProperties(firstItem.rule_type.metadata, metadataProperties);\r","\r","        // Check properties of the rule_status object\r","        xerpaTestApi.checkObjectProperties(firstItem.rule_status, ruleStatusProperties);\r","\r","        // Check metadata properties of the rule_status object\r","        xerpaTestApi.checkObjectProperties(firstItem.rule_status.metadata, metadataProperties);\r","\r","        // Check properties of the soccer_team object if it exists\r","        if (firstItem.soccer_team) {\r","            xerpaTestApi.checkObjectProperties(firstItem.soccer_team, soccerTeamProperties);\r","        }\r","\r","        // Check properties of the transaction_category object if it exists\r","        if (firstItem.transaction_category) {\r","            xerpaTestApi.checkObjectProperties(firstItem.transaction_category, transactionCategoryProperties);\r","        }\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}},"requests":{}}}],"id":"2261d532-896f-4940-9fac-4a61faa1e20e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"[\r\n    {\r\n        \"rule_type\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\", // fixed_amount\r\n        \"amount\": 111,\r\n        \"execution_frequency\": \"D\" // D, S, Q ,M\r\n    },\r\n    {\r\n        \"rule_type\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\", // round_up\r\n        \"amount\": 222\r\n    },\r\n    {\r\n        \"rule_type\": \"90832d0a-3879-40b5-a45b-729e4a964749\" // 52_weeks\r\n    },\r\n    {\r\n        \"rule_type\": \"229011e5-fb7a-447c-bada-bb48010175ce\", // guilty_pleasure\r\n        \"amount\": 444,\r\n        \"transaction_category\":\"84e6fa2f-8790-4d94-8f65-6944c7bcba10\"\r\n    },\r\n    {\r\n        \"rule_type\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\", // fixed_salary\r\n        \"salary_percentage\": 5\r\n    },\r\n    {\r\n        \"rule_type\": \"a3125075-ff44-4b8b-be29-6c73fd846872\", // soccer_passion\r\n        \"soccer_team\": \"9ec44086-78ad-4900-9112-72d98f86a8e4\",\r\n        \"soccer_condition\": \"G\", // J,G, A, E\r\n        \"amount\": 666\r\n    }\r\n\r\n]","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/","description":"<p>Este endpoint permite agregar una nueva regla de ahorro a un proyecto específico dentro de la cuenta de ahorro de un usuario.</p>\n<h4 id=\"request\"><strong>Request</strong></h4>\n<ul>\n<li><p>Método: <code>POST</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_id</code> (string): ID del proyecto</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>La solicitud debe enviarse en formato JSON como <strong>un arreglo de objetos</strong>, donde cada objeto representa una regla a crear y debe contener los siguientes parámetros:</p>\n<ul>\n<li><p><code>rule_type</code>(string): ID del tipo de regla que se desea agregar.</p>\n</li>\n<li><p><code>amount</code>(number) (opcional): Monto asociado a la regla. Tiene que ser un valor mayor a 0.</p>\n</li>\n<li><p><code>execution_frequency</code>(string) (opcional): La frecuencia de ejecución del ahorro. Puede tomar los valores</p>\n<ul>\n<li><p>Abono Único: \"U\"</p>\n</li>\n<li><p>Abono Diario: \"D\"</p>\n</li>\n<li><p>Abono Semanal: \"S\"</p>\n</li>\n<li><p>Abono Quincenal: \"Q\"</p>\n</li>\n<li><p>Abono Mensual: \"M\"</p>\n</li>\n</ul>\n</li>\n<li><p><code>transaction_category</code>(string) (opcional): ID de la categoría de transacción.</p>\n</li>\n<li><p><code>salary_percentage</code> (number) (opcional): Porcentaje del salario relacionado, este tiene que ser un valor entre 1 - 50 (si aplica).</p>\n</li>\n<li><p><code>soccer_team</code>(string) (opcional): ID del equipo de futbol.</p>\n</li>\n<li><p><code>soccer_condition</code>(string) (opcional): Condición relacionada con fútbol. Puede tomar los valores</p>\n<ul>\n<li><p>Cada vez que el equipo juegue \"J\"</p>\n</li>\n<li><p>Cada vez que el equipo gane. \"G\"</p>\n</li>\n<li><p>Cada vez que el equipo empate \"E\"</p>\n</li>\n<li><p>Cada vez que el equipo anote un gol \"A\"</p>\n</li>\n</ul>\n</li>\n<li><p><code>rule_execution_days</code>(array) (opcional): Dias en que se ejecutara la regla. Los posibles valores a ingresar dependen del tipo de frecuencia a utilizar para el abono.</p>\n<ul>\n<li><p><strong>Diario</strong>: La lista debe quedar vacia, o nula.</p>\n</li>\n<li><p><strong>Semanal</strong>: La lista debe contener <strong>un</strong> entero entre 1-7, donde indica el dia de la semana que se ejecutara la regla. (En formato ISO)</p>\n</li>\n<li><p><strong>Mensual</strong>: La lista debe contener <strong>un</strong> entero entre 1-31, indicando el dia del mes que se ejecutara la rega.</p>\n</li>\n<li><p><strong>Quincenal</strong>: La lista debe contener <strong>dos</strong> enteros, el primero entre 1-14 y el segundo entre 16-31. Ambos indican que dias del mes se ejecutara la regla.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-example\"><strong>Request Example</strong></h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n    {\n        \"rule_type\": \"id_rule_type1\",\n        \"amount\": 111,\n        \"execution_frequency\": \"S\",\n        \"rule_execution_days\": [5]\n    },\n    {\n        \"rule_type\": \"id_rule_type2\",\n        \"soccer_team\": \"id_soccer_team\",\n        \"soccer_condition\": \"G\",\n        \"amount\": 666\n    }\n]\n\n</code></pre>\n<h4 id=\"response\"><strong>Response</strong></h4>\n<p>La respuesta incluirá los detalles de la(s) regla(s) creada(s), con los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): ID único de la regla.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario asociado a la regla.</p>\n</li>\n<li><p><code>amount</code> (number): Monto configurado para la regla.</p>\n</li>\n<li><p><code>salary_percentage</code> (number): Porcentaje del salario (si aplica a la regla).</p>\n</li>\n<li><p><code>execution_frequency</code> (string): Frecuencia de ejecución.</p>\n</li>\n<li><p><code>soccer_condition</code> (string): Condición relacionada al fútbol (si aplica).</p>\n</li>\n<li><p><code>soccer_team</code> (object): Detalles del equipo de fútbol, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del equipo de futbol.</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del equipo de futbol.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>img_url</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>weather_city</code> (string or null): Ciudad relacionada al clima (si aplica).</p>\n</li>\n<li><p><code>temperature</code> (number): Temperatura configurada como condición.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha y hora de creación de la regla.</p>\n</li>\n<li><p><code>rule_type</code> (object): Información detallada del tipo de regla:</p>\n<ul>\n<li><p><code>id</code> (string): ID del tipo de regla.</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del tipo de regla.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del tipo de regla</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>,<code>name</code>,<code>color</code>,<code>active</code>,<code>icon_pause</code>,<code>short_name</code>,<code>description</code>,<code>icon_primary</code>,<code>frequency_description</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>rule_status</code> (object): Estado de la regla:</p>\n<ul>\n<li><p><code>id</code> (string): ID del estado de la regla</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del estado de la regla.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del estado de la regla</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>,<code>color</code>,<code>active</code>,<code>short_name</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>transaction_category</code> (string or null): Categoría de transacción asociada.</p>\n</li>\n<li><p><code>spend_less_limit_amount</code>(string): Limite de gasto para la categoria \"gastar menos\"</p>\n</li>\n<li><p><code>spend_less_category_id</code>(string or null): Categoría de la regla \"gastar menos\"</p>\n</li>\n<li><p><code>deleted_at</code> (string or null): Fecha de eliminación, si la regla fue eliminada.</p>\n</li>\n<li><p><code>rule_execution_days</code> (objeto or null): Indica las dias de ejecucion que tendra la regla (solo aplica para el caso de que sea monto fijo).</p>\n</li>\n</ul>\n<h4 id=\"response-format\"><strong>Response Format</strong></h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n      \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n      \"amount\": { \"type\": \"number\" },\n      \"salary_percentage\": { \"type\": \"integer\" },\n      \"execution_frequency\": { \"type\": [\"string\", \"null\"] },\n      \"soccer_condition\": { \"type\": [\"string\", \"null\"] },\n      \"soccer_team\": { \"type\": [\"object\", \"null\"] },\n      \"weather_city\": { \"type\": [\"string\", \"null\"] },\n      \"temperature\": { \"type\": \"integer\" },\n      \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n      \"rule_execution_days\": { \"type\": \"object\", \"properties\": { \"days\":\"array\" } }\n      \"rule_type\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"item_name\": { \"type\": \"string\" },\n          \"description\": { \"type\": \"string\" },\n          \"metadata\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"icon\": { \"type\": \"string\" },\n              \"name\": { \"type\": \"string\" },\n              \"color\": { \"type\": \"string\" },\n              \"active\": { \"type\": \"boolean\" },\n              \"icon_pause\": { \"type\": \"string\" },\n              \"short_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"icon_primary\": { \"type\": \"string\" },\n              \"frequency_description\": { \"type\": \"string\" }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","rules",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"88cc3b7d-017e-48f4-b173-32b5b413895e","name":"Successful Response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"[\r\n    {\r\n        \"rule_type\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\", // fixed_amount\r\n        \"amount\": 111,\r\n        \"execution_frequency\": \"D\" // D, S, Q ,M\r\n    },\r\n    {\r\n        \"rule_type\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\", // round_up\r\n        \"amount\": 222\r\n    },\r\n    {\r\n        \"rule_type\": \"90832d0a-3879-40b5-a45b-729e4a964749\" // 52_weeks\r\n    },\r\n    {\r\n        \"rule_type\": \"229011e5-fb7a-447c-bada-bb48010175ce\", // guilty_pleasure\r\n        \"amount\": 444,\r\n        \"transaction_category\":\"84e6fa2f-8790-4d94-8f65-6944c7bcba10\"\r\n    },\r\n    {\r\n        \"rule_type\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\", // fixed_salary\r\n        \"salary_percentage\": 5\r\n    },\r\n    {\r\n        \"rule_type\": \"a3125075-ff44-4b8b-be29-6c73fd846872\", // soccer_passion\r\n        \"soccer_team\": \"9ec44086-78ad-4900-9112-72d98f86a8e4\",\r\n        \"soccer_condition\": \"G\", // J,G, A, E\r\n        \"amount\": 666\r\n    }\r\n\r\n]","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 16:36:37 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"8569"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"8af8a97b-f7ac-451f-b0d7-f6736fc23d7e"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LY-3WH9MoAMEBdw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839de95-1f3d2c442d68a95c0181834d;Parent=5d69248e032edf74;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"8fd2f319-8273-4c5c-8a98-b0b8f3cf0f3c\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"amount\": 111,\n        \"salary_percentage\": 0,\n        \"execution_frequency\": \"D\",\n        \"soccer_condition\": null,\n        \"soccer_team\": null,\n        \"weather_city\": null,\n        \"temperature\": 0,\n        \"created_at\": \"2025-05-30T10:36:37.236622-06:00\",\n        \"rule_type\": {\n            \"id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_fixed_amount\",\n            \"description\": \"Regla monto fijo\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                \"name\": \"Monto fijo\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                \"frequency_description\": \"Ahorra {amount} cada {description}\"\n            }\n        },\n        \"rule_status\": {\n            \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_active\",\n            \"description\": \"Regla activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_ACTIVE\"\n            }\n        },\n        \"transaction_category\": null,\n        \"spend_less_limit_amount\": 0,\n        \"spend_less_category_id\": null,\n        \"deleted_at\": null\n    },\n    {\n        \"id\": \"dff2857c-3db9-4fb1-8010-1b7dc9a86f62\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"amount\": 222,\n        \"salary_percentage\": 0,\n        \"execution_frequency\": null,\n        \"soccer_condition\": null,\n        \"soccer_team\": null,\n        \"weather_city\": null,\n        \"temperature\": 0,\n        \"created_at\": \"2025-05-30T10:36:37.302002-06:00\",\n        \"rule_type\": {\n            \"id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_round_up\",\n            \"description\": \"Regla redondeo\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                \"name\": \"Redondear\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n            }\n        },\n        \"rule_status\": {\n            \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_active\",\n            \"description\": \"Regla activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_ACTIVE\"\n            }\n        },\n        \"transaction_category\": null,\n        \"spend_less_limit_amount\": 0,\n        \"spend_less_category_id\": null,\n        \"deleted_at\": null\n    },\n    {\n        \"id\": \"d89eacbe-0789-44ca-95a6-eb26aa01f97f\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"amount\": 0,\n        \"salary_percentage\": 0,\n        \"execution_frequency\": null,\n        \"soccer_condition\": null,\n        \"soccer_team\": null,\n        \"weather_city\": null,\n        \"temperature\": 0,\n        \"created_at\": \"2025-05-30T10:36:37.342343-06:00\",\n        \"rule_type\": {\n            \"id\": \"90832d0a-3879-40b5-a45b-729e4a964749\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_52_weeks\",\n            \"description\": \"Regla 52 semanas\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                \"name\": \"Desafío 52 semanas\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n            }\n        },\n        \"rule_status\": {\n            \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_active\",\n            \"description\": \"Regla activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_ACTIVE\"\n            }\n        },\n        \"transaction_category\": null,\n        \"spend_less_limit_amount\": 0,\n        \"spend_less_category_id\": null,\n        \"deleted_at\": null\n    },\n    {\n        \"id\": \"9662d9a2-e575-4a5c-86ff-7e5a6d46cfd1\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"amount\": 444,\n        \"salary_percentage\": 0,\n        \"execution_frequency\": null,\n        \"soccer_condition\": null,\n        \"soccer_team\": null,\n        \"weather_city\": null,\n        \"temperature\": 0,\n        \"created_at\": \"2025-05-30T10:36:37.380773-06:00\",\n        \"rule_type\": {\n            \"id\": \"229011e5-fb7a-447c-bada-bb48010175ce\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_guilty_pleasure\",\n            \"description\": \"Regla placer culpable\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                \"name\": \"Placer culpable\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                \"frequency_description\": \"Ahorra {amount} en {description}\"\n            }\n        },\n        \"rule_status\": {\n            \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_active\",\n            \"description\": \"Regla activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_ACTIVE\"\n            }\n        },\n        \"transaction_category\": {\n            \"id\": \"84e6fa2f-8790-4d94-8f65-6944c7bcba10\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Vacaciones & Viajes\",\n            \"description\": \"Plataformas de viajes, hoteles, cabañas, arriendo de auto\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/viajes.svg\",\n                \"color\": \"#FFC700\",\n                \"active\": true,\n                \"short_name\": \"VACACION_VIAJE\"\n            }\n        },\n        \"spend_less_limit_amount\": 0,\n        \"spend_less_category_id\": null,\n        \"deleted_at\": null\n    },\n    {\n        \"id\": \"0f284a22-d61c-4236-ba4e-8e34140c6093\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"amount\": 0,\n        \"salary_percentage\": 5,\n        \"execution_frequency\": null,\n        \"soccer_condition\": null,\n        \"soccer_team\": null,\n        \"weather_city\": null,\n        \"temperature\": 0,\n        \"created_at\": \"2025-05-30T10:36:37.410951-06:00\",\n        \"rule_type\": {\n            \"id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_fixed_salary\",\n            \"description\": \"Regla % sueldo\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                \"name\": \"Porcentaje de sueldo\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n            }\n        },\n        \"rule_status\": {\n            \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_active\",\n            \"description\": \"Regla activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_ACTIVE\"\n            }\n        },\n        \"transaction_category\": null,\n        \"spend_less_limit_amount\": 0,\n        \"spend_less_category_id\": null,\n        \"deleted_at\": null\n    },\n    {\n        \"id\": \"fab3c0c0-c7b8-4819-b208-eb7ce986d900\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"amount\": 666,\n        \"salary_percentage\": 0,\n        \"execution_frequency\": null,\n        \"soccer_condition\": \"G\",\n        \"soccer_team\": {\n            \"id\": \"9ec44086-78ad-4900-9112-72d98f86a8e4\",\n            \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n            \"item_name\": \"174\",\n            \"description\": \"AS Monaco\",\n            \"metadata\": {\n                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/174.png\"\n            }\n        },\n        \"weather_city\": null,\n        \"temperature\": 0,\n        \"created_at\": \"2025-05-30T10:36:37.448101-06:00\",\n        \"rule_type\": {\n            \"id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_soccer\",\n            \"description\": \"Regla pasión futbolera\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                \"name\": \"Pasion futbolera\",\n                \"color\": \"#7C2582\",\n                \"active\": false,\n                \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                \"short_name\": \"RULE_TYPE_SOCCER\",\n                \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n            }\n        },\n        \"rule_status\": {\n            \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_active\",\n            \"description\": \"Regla activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_ACTIVE\"\n            }\n        },\n        \"transaction_category\": null,\n        \"spend_less_limit_amount\": 0,\n        \"spend_less_category_id\": null,\n        \"deleted_at\": null\n    }\n]"},{"id":"b78db091-bbf5-4735-98fd-cffe1b9ec315","name":"Bad Request - Invalid type rule id","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"[\r\n    {\r\n        \"rule_type\": \"invalid\",\r\n        \"amount\": 111,\r\n        \"execution_frequency\": \"D\" // D, S, Q ,M\r\n    }\r\n]","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 16:46:26 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"37"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"edbbb345-239b-48a4-84c7-202ebec376e2"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZATVFsJoAMEFKA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839e0e1-3c83666e5c09bc95582febdb;Parent=479d69f4a1c88c34;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"Validation of rule failed\"\n}"},{"id":"28fa5617-eeeb-4b02-848d-c39b260fcb05","name":"Bad request - Invalid amount","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"[\r\n    {\r\n        \"rule_type\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\",\r\n        \"amount\": -1,\r\n        \"execution_frequency\": \"D\" // D, S, Q ,M\r\n    }\r\n]","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 16:47:02 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"37"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"82f1ff53-3fa7-4853-b114-8ba88d9c68c6"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZAZCHehoAMEeUw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839e106-5cda159c23714a855029b988;Parent=132dd3356c2c196b;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"Validation of rule failed\"\n}"},{"id":"e2387b06-4dd4-43ff-938f-9408dc8b0a50","name":"Bad Request - Invalid execution frequency","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"[\r\n    {\r\n        \"rule_type\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\",\r\n        \"amount\": 111,\r\n        \"execution_frequency\": \"invalid\" // D, S, Q ,M\r\n    }\r\n]","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 16:47:27 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"37"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"b78979fc-5626-4153-a937-3e8ef8975ad6"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZAc4GxuIAMEW3w="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839e11e-75781b146a73acc00ad2dc92;Parent=4793662a7969b977;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"Validation of rule failed\"\n}"},{"id":"6764f2f0-c912-477d-ab52-48f76f873874","name":"Bad Request - Invalid salary porcentage","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"[\r\n    {\r\n        \"rule_type\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\", // fixed_salary\r\n        \"salary_percentage\": 51\r\n    }\r\n\r\n]","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 16:53:46 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"37"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"16aa328c-487c-4905-a76e-f596ab44a14a"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZBYOGWqIAMEW8A="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839e29a-47c97116456576a5550be74b;Parent=2566ef693522fefd;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"Validation of rule failed\"\n}"}],"_postman_id":"2261d532-896f-4940-9fac-4a61faa1e20e"},{"name":"Crear múltiples reglas de ahorro","event":[{"listen":"test","script":{"id":"7e8e24ec-5142-4b5b-8322-5f2703b46cd2","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulPost();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    amount: 'number',\r","    salary_percentage: 'number',\r","    execution_frequency: { type: 'string', optional: true },\r","    soccer_condition: { type: 'string', optional: true },\r","    soccer_team: { type: 'object', optional: true },\r","    weather_city: { type: 'string', optional: true },\r","    temperature: 'number',\r","    created_at: 'string',\r","    rule_type: 'object',\r","    rule_status: 'object',\r","    transaction_category: { type: 'object', optional: true },\r","    spend_less_limit_amount: 'number',\r","    spend_less_category_id: { type: 'string', optional: true },\r","    deleted_at: { type: 'string', optional: true }\r","};\r","\r","const ruleTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const ruleStatusProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    name: { type: 'string', optional: true },\r","    color: 'string',\r","    active: 'boolean',\r","    icon_pause: { type: 'string', optional: true },\r","    short_name: 'string',\r","    description: { type: 'string', optional: true },\r","    icon_primary: { type: 'string', optional: true },\r","    frequency_description: { type: 'string', optional: true }\r","};\r","\r","const soccerTeamProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const transactionCategoryProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson.length > 0) {\r","        const firstItem = responseJson[0];\r","        xerpaTestApi.checkObjectProperties(firstItem, topLevelProperties);\r","\r","        // Check properties of the rule_type object\r","        xerpaTestApi.checkObjectProperties(firstItem.rule_type, ruleTypeProperties);\r","\r","        // Check metadata properties of the rule_type object\r","        xerpaTestApi.checkObjectProperties(firstItem.rule_type.metadata, metadataProperties);\r","\r","        // Check properties of the rule_status object\r","        xerpaTestApi.checkObjectProperties(firstItem.rule_status, ruleStatusProperties);\r","\r","        // Check metadata properties of the rule_status object\r","        xerpaTestApi.checkObjectProperties(firstItem.rule_status.metadata, metadataProperties);\r","\r","        // Check properties of the soccer_team object if it exists\r","        if (firstItem.soccer_team) {\r","            xerpaTestApi.checkObjectProperties(firstItem.soccer_team, soccerTeamProperties);\r","        }\r","\r","        // Check properties of the transaction_category object if it exists\r","        if (firstItem.transaction_category) {\r","            xerpaTestApi.checkObjectProperties(firstItem.transaction_category, transactionCategoryProperties);\r","        }\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"ef75d6ec-58c4-4a76-8e1a-2eec9346f094","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"[\r\n    {\r\n        \"rule_type\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\", // fixed_amount\r\n        \"amount\": 111,\r\n        \"execution_frequency\": \"D\" // D, S, Q ,M\r\n    },\r\n    {\r\n        \"rule_type\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\", // round_up\r\n        \"amount\": 222\r\n    },\r\n    {\r\n        \"rule_type\": \"90832d0a-3879-40b5-a45b-729e4a964749\" // 52_weeks\r\n    },\r\n    {\r\n        \"rule_type\": \"229011e5-fb7a-447c-bada-bb48010175ce\", // guilty_pleasure\r\n        \"amount\": 444,\r\n        \"transaction_category\":\"84e6fa2f-8790-4d94-8f65-6944c7bcba10\"\r\n    },\r\n    {\r\n        \"rule_type\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\", // fixed_salary\r\n        \"salary_percentage\": 5\r\n    },\r\n    {\r\n        \"rule_type\": \"a3125075-ff44-4b8b-be29-6c73fd846872\", // soccer_passion\r\n        \"soccer_team\": \"9ec44086-78ad-4900-9112-72d98f86a8e4\",\r\n        \"soccer_condition\": \"G\", // J,G, A, E\r\n        \"amount\": 0\r\n    }\r\n\r\n]","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/","description":"<p>Este endpoint permite agregar una nueva regla de ahorro a un proyecto específico dentro de la cuenta de ahorro de un usuario.</p>\n<h4 id=\"request\"><strong>Request</strong></h4>\n<ul>\n<li><p>Método: <code>POST</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_id</code> (string): ID del proyecto</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>La solicitud debe enviarse en formato JSON como <strong>un arreglo de objetos</strong>, donde cada objeto representa una regla a crear y debe contener los siguientes parámetros:</p>\n<ul>\n<li><p><code>rule_type</code>(string): ID del tipo de regla que se desea agregar.</p>\n</li>\n<li><p><code>amount</code>(number) (opcional): Monto asociado a la regla. Tiene que ser un valor mayor a 0.</p>\n</li>\n<li><p><code>execution_frequency</code>(string) (opcional): La frecuencia de ejecución del ahorro. Puede tomar los valores</p>\n<ul>\n<li><p>Abono Único: \"U\"</p>\n</li>\n<li><p>Abono Diario: \"D\"</p>\n</li>\n<li><p>Abono Semanal: \"S\"</p>\n</li>\n<li><p>Abono Quincenal: \"Q\"</p>\n</li>\n<li><p>Abono Mensual: \"M\"</p>\n</li>\n</ul>\n</li>\n<li><p><code>transaction_category</code>(string) (opcional): ID de la categoría de transacción.</p>\n</li>\n<li><p><code>salary_percentage</code> (number) (opcional): Porcentaje del salario relacionado, este tiene que ser un valor entre 1 - 50 (si aplica).</p>\n</li>\n<li><p><code>soccer_team</code>(string) (opcional): ID del equipo de futbol.</p>\n</li>\n<li><p><code>soccer_condition</code>(string) (opcional): Condición relacionada con fútbol. Puede tomar los valores</p>\n<ul>\n<li><p>Cada vez que el equipo juegue \"J\"</p>\n</li>\n<li><p>Cada vez que el equipo gane. \"G\"</p>\n</li>\n<li><p>Cada vez que el equipo empate \"E\"</p>\n</li>\n<li><p>Cada vez que el equipo anote un gol \"A\"</p>\n</li>\n</ul>\n</li>\n<li><p><code>rule_execution_days</code>(array) (opcional): Dias en que se ejecutara la regla. Los posibles valores a ingresar dependen del tipo de frecuencia a utilizar para el abono.</p>\n<ul>\n<li><p><strong>Diario</strong>: La lista debe quedar vacia, o nula.</p>\n</li>\n<li><p><strong>Semanal</strong>: La lista debe contener <strong>un</strong> entero entre 1-7.</p>\n</li>\n<li><p><strong>Mensual</strong>: La lista debe contener <strong>un</strong> entero entre 1-31.</p>\n</li>\n<li><p><strong>Quincenal</strong>: La lista debe contener <strong>dos</strong> enteros, el primero entre 1-15 y el segundo entre 16-31.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-example\"><strong>Request Example</strong></h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n    {\n        \"rule_type\": \"id_rule_type1\",\n        \"amount\": 111,\n        \"execution_frequency\": \"D\"\n    },\n    {\n        \"rule_type\": \"id_rule_type2\",\n        \"soccer_team\": \"id_soccer_team\",\n        \"soccer_condition\": \"G\",\n        \"amount\": 666\n    }\n]\n\n</code></pre>\n<h4 id=\"response\"><strong>Response</strong></h4>\n<p>La respuesta incluirá los detalles de la(s) regla(s) creada(s), con los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): ID único de la regla.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario asociado a la regla.</p>\n</li>\n<li><p><code>amount</code> (number): Monto configurado para la regla.</p>\n</li>\n<li><p><code>salary_percentage</code> (number): Porcentaje del salario (si aplica a la regla).</p>\n</li>\n<li><p><code>execution_frequency</code> (string): Frecuencia de ejecución.</p>\n</li>\n<li><p><code>soccer_condition</code> (string): Condición relacionada al fútbol (si aplica).</p>\n</li>\n<li><p><code>soccer_team</code> (object): Detalles del equipo de fútbol, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del equipo de futbol.</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del equipo de futbol.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>img_url</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>weather_city</code> (string or null): Ciudad relacionada al clima (si aplica).</p>\n</li>\n<li><p><code>temperature</code> (number): Temperatura configurada como condición.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha y hora de creación de la regla.</p>\n</li>\n<li><p><code>rule_type</code> (object): Información detallada del tipo de regla:</p>\n<ul>\n<li><p><code>id</code> (string): ID del tipo de regla.</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del tipo de regla.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del tipo de regla</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>,<code>name</code>,<code>color</code>,<code>active</code>,<code>icon_pause</code>,<code>short_name</code>,<code>description</code>,<code>icon_primary</code>,<code>frequency_description</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>rule_status</code> (object): Estado de la regla:</p>\n<ul>\n<li><p><code>id</code> (string): ID del estado de la regla</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del estado de la regla.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del estado de la regla</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>,<code>color</code>,<code>active</code>,<code>short_name</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>transaction_category</code> (string or null): Categoría de transacción asociada.</p>\n</li>\n<li><p><code>spend_less_limit_amount</code>(string): Limite de gasto para la categoria \"gastar menos\"</p>\n</li>\n<li><p><code>spend_less_category_id</code>(string or null): Categoría de la regla \"gastar menos\"</p>\n</li>\n<li><p><code>deleted_at</code> (string or null): Fecha de eliminación, si la regla fue eliminada.</p>\n</li>\n<li><p><code>rule_execution_days</code> (objeto or null): Indica las dias de ejecucion que tendra la regla (solo aplica para el caso de que sea monto fijo).</p>\n</li>\n</ul>\n<h4 id=\"response-format\"><strong>Response Format</strong></h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n      \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n      \"amount\": { \"type\": \"number\" },\n      \"salary_percentage\": { \"type\": \"integer\" },\n      \"execution_frequency\": { \"type\": [\"string\", \"null\"] },\n      \"soccer_condition\": { \"type\": [\"string\", \"null\"] },\n      \"soccer_team\": { \"type\": [\"object\", \"null\"] },\n      \"weather_city\": { \"type\": [\"string\", \"null\"] },\n      \"temperature\": { \"type\": \"integer\" },\n      \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n      \"rule_execution_days\": { \"type\": \"object\", \"properties\": { \"days\":\"array\" } },\n      \"rule_type\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"item_name\": { \"type\": \"string\" },\n          \"description\": { \"type\": \"string\" },\n          \"metadata\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"icon\": { \"type\": \"string\" },\n              \"name\": { \"type\": \"string\" },\n              \"color\": { \"type\": \"string\" },\n              \"active\": { \"type\": \"boolean\" },\n              \"icon_pause\": { \"type\": \"string\" },\n              \"short_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"icon_primary\": { \"type\": \"string\" },\n              \"frequency_description\": { \"type\": \"string\" }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","rules",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"20c785cc-b2a6-402e-be30-8e6ab1f3e75d","name":"Successful Response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"[\r\n    {\r\n        \"rule_type\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\", // fixed_amount\r\n        \"amount\": 111,\r\n        \"execution_frequency\": \"D\" // D, S, Q ,M\r\n    },\r\n    {\r\n        \"rule_type\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\", // round_up\r\n        \"amount\": 222\r\n    },\r\n    {\r\n        \"rule_type\": \"90832d0a-3879-40b5-a45b-729e4a964749\" // 52_weeks\r\n    },\r\n    {\r\n        \"rule_type\": \"229011e5-fb7a-447c-bada-bb48010175ce\", // guilty_pleasure\r\n        \"amount\": 444,\r\n        \"transaction_category\":\"84e6fa2f-8790-4d94-8f65-6944c7bcba10\"\r\n    },\r\n    {\r\n        \"rule_type\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\", // fixed_salary\r\n        \"salary_percentage\": 5\r\n    },\r\n    {\r\n        \"rule_type\": \"a3125075-ff44-4b8b-be29-6c73fd846872\", // soccer_passion\r\n        \"soccer_team\": \"9ec44086-78ad-4900-9112-72d98f86a8e4\",\r\n        \"soccer_condition\": \"G\", // J,G, A, E\r\n        \"amount\": 666\r\n    }\r\n\r\n]","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 16:36:37 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"8569"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"8af8a97b-f7ac-451f-b0d7-f6736fc23d7e"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LY-3WH9MoAMEBdw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839de95-1f3d2c442d68a95c0181834d;Parent=5d69248e032edf74;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"8fd2f319-8273-4c5c-8a98-b0b8f3cf0f3c\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"amount\": 111,\n        \"salary_percentage\": 0,\n        \"execution_frequency\": \"D\",\n        \"soccer_condition\": null,\n        \"soccer_team\": null,\n        \"weather_city\": null,\n        \"temperature\": 0,\n        \"created_at\": \"2025-05-30T10:36:37.236622-06:00\",\n        \"rule_type\": {\n            \"id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_fixed_amount\",\n            \"description\": \"Regla monto fijo\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                \"name\": \"Monto fijo\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                \"frequency_description\": \"Ahorra {amount} cada {description}\"\n            }\n        },\n        \"rule_status\": {\n            \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_active\",\n            \"description\": \"Regla activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_ACTIVE\"\n            }\n        },\n        \"transaction_category\": null,\n        \"spend_less_limit_amount\": 0,\n        \"spend_less_category_id\": null,\n        \"deleted_at\": null\n    },\n    {\n        \"id\": \"dff2857c-3db9-4fb1-8010-1b7dc9a86f62\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"amount\": 222,\n        \"salary_percentage\": 0,\n        \"execution_frequency\": null,\n        \"soccer_condition\": null,\n        \"soccer_team\": null,\n        \"weather_city\": null,\n        \"temperature\": 0,\n        \"created_at\": \"2025-05-30T10:36:37.302002-06:00\",\n        \"rule_type\": {\n            \"id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_round_up\",\n            \"description\": \"Regla redondeo\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                \"name\": \"Redondear\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n            }\n        },\n        \"rule_status\": {\n            \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_active\",\n            \"description\": \"Regla activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_ACTIVE\"\n            }\n        },\n        \"transaction_category\": null,\n        \"spend_less_limit_amount\": 0,\n        \"spend_less_category_id\": null,\n        \"deleted_at\": null\n    },\n    {\n        \"id\": \"d89eacbe-0789-44ca-95a6-eb26aa01f97f\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"amount\": 0,\n        \"salary_percentage\": 0,\n        \"execution_frequency\": null,\n        \"soccer_condition\": null,\n        \"soccer_team\": null,\n        \"weather_city\": null,\n        \"temperature\": 0,\n        \"created_at\": \"2025-05-30T10:36:37.342343-06:00\",\n        \"rule_type\": {\n            \"id\": \"90832d0a-3879-40b5-a45b-729e4a964749\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_52_weeks\",\n            \"description\": \"Regla 52 semanas\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                \"name\": \"Desafío 52 semanas\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n            }\n        },\n        \"rule_status\": {\n            \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_active\",\n            \"description\": \"Regla activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_ACTIVE\"\n            }\n        },\n        \"transaction_category\": null,\n        \"spend_less_limit_amount\": 0,\n        \"spend_less_category_id\": null,\n        \"deleted_at\": null\n    },\n    {\n        \"id\": \"9662d9a2-e575-4a5c-86ff-7e5a6d46cfd1\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"amount\": 444,\n        \"salary_percentage\": 0,\n        \"execution_frequency\": null,\n        \"soccer_condition\": null,\n        \"soccer_team\": null,\n        \"weather_city\": null,\n        \"temperature\": 0,\n        \"created_at\": \"2025-05-30T10:36:37.380773-06:00\",\n        \"rule_type\": {\n            \"id\": \"229011e5-fb7a-447c-bada-bb48010175ce\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_guilty_pleasure\",\n            \"description\": \"Regla placer culpable\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                \"name\": \"Placer culpable\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                \"frequency_description\": \"Ahorra {amount} en {description}\"\n            }\n        },\n        \"rule_status\": {\n            \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_active\",\n            \"description\": \"Regla activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_ACTIVE\"\n            }\n        },\n        \"transaction_category\": {\n            \"id\": \"84e6fa2f-8790-4d94-8f65-6944c7bcba10\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Vacaciones & Viajes\",\n            \"description\": \"Plataformas de viajes, hoteles, cabañas, arriendo de auto\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/viajes.svg\",\n                \"color\": \"#FFC700\",\n                \"active\": true,\n                \"short_name\": \"VACACION_VIAJE\"\n            }\n        },\n        \"spend_less_limit_amount\": 0,\n        \"spend_less_category_id\": null,\n        \"deleted_at\": null\n    },\n    {\n        \"id\": \"0f284a22-d61c-4236-ba4e-8e34140c6093\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"amount\": 0,\n        \"salary_percentage\": 5,\n        \"execution_frequency\": null,\n        \"soccer_condition\": null,\n        \"soccer_team\": null,\n        \"weather_city\": null,\n        \"temperature\": 0,\n        \"created_at\": \"2025-05-30T10:36:37.410951-06:00\",\n        \"rule_type\": {\n            \"id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_fixed_salary\",\n            \"description\": \"Regla % sueldo\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                \"name\": \"Porcentaje de sueldo\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n            }\n        },\n        \"rule_status\": {\n            \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_active\",\n            \"description\": \"Regla activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_ACTIVE\"\n            }\n        },\n        \"transaction_category\": null,\n        \"spend_less_limit_amount\": 0,\n        \"spend_less_category_id\": null,\n        \"deleted_at\": null\n    },\n    {\n        \"id\": \"fab3c0c0-c7b8-4819-b208-eb7ce986d900\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"amount\": 666,\n        \"salary_percentage\": 0,\n        \"execution_frequency\": null,\n        \"soccer_condition\": \"G\",\n        \"soccer_team\": {\n            \"id\": \"9ec44086-78ad-4900-9112-72d98f86a8e4\",\n            \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n            \"item_name\": \"174\",\n            \"description\": \"AS Monaco\",\n            \"metadata\": {\n                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/174.png\"\n            }\n        },\n        \"weather_city\": null,\n        \"temperature\": 0,\n        \"created_at\": \"2025-05-30T10:36:37.448101-06:00\",\n        \"rule_type\": {\n            \"id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_soccer\",\n            \"description\": \"Regla pasión futbolera\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                \"name\": \"Pasion futbolera\",\n                \"color\": \"#7C2582\",\n                \"active\": false,\n                \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                \"short_name\": \"RULE_TYPE_SOCCER\",\n                \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n            }\n        },\n        \"rule_status\": {\n            \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_active\",\n            \"description\": \"Regla activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_ACTIVE\"\n            }\n        },\n        \"transaction_category\": null,\n        \"spend_less_limit_amount\": 0,\n        \"spend_less_category_id\": null,\n        \"deleted_at\": null\n    }\n]"},{"id":"211d811b-3a57-429c-a7e2-275a28158f88","name":"Bad Request - Invalid type rule id","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"[\r\n    {\r\n        \"rule_type\": \"invalid\",\r\n        \"amount\": 111,\r\n        \"execution_frequency\": \"D\" // D, S, Q ,M\r\n    }\r\n]","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 16:46:26 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"37"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"edbbb345-239b-48a4-84c7-202ebec376e2"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZATVFsJoAMEFKA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839e0e1-3c83666e5c09bc95582febdb;Parent=479d69f4a1c88c34;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"Validation of rule failed\"\n}"},{"id":"2bb752a0-5e44-4ced-9fab-1642dc206a74","name":"Bad request - Invalid amount","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"[\r\n    {\r\n        \"rule_type\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\",\r\n        \"amount\": -1,\r\n        \"execution_frequency\": \"D\" // D, S, Q ,M\r\n    }\r\n]","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 16:47:02 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"37"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"82f1ff53-3fa7-4853-b114-8ba88d9c68c6"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZAZCHehoAMEeUw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839e106-5cda159c23714a855029b988;Parent=132dd3356c2c196b;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"Validation of rule failed\"\n}"},{"id":"43470d03-2b8d-4f89-9138-e6faa12f2b89","name":"Bad Request - Invalid execution frequency","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"[\r\n    {\r\n        \"rule_type\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\",\r\n        \"amount\": 111,\r\n        \"execution_frequency\": \"invalid\" // D, S, Q ,M\r\n    }\r\n]","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 16:47:27 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"37"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"b78979fc-5626-4153-a937-3e8ef8975ad6"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZAc4GxuIAMEW3w="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839e11e-75781b146a73acc00ad2dc92;Parent=4793662a7969b977;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"Validation of rule failed\"\n}"},{"id":"6f38accc-b9e4-404a-b309-e250244158a0","name":"Bad Request - Invalid salary porcentage","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"[\r\n    {\r\n        \"rule_type\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\", // fixed_salary\r\n        \"salary_percentage\": 51\r\n    }\r\n\r\n]","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 16:53:46 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"37"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"16aa328c-487c-4905-a76e-f596ab44a14a"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZBYOGWqIAMEW8A="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839e29a-47c97116456576a5550be74b;Parent=2566ef693522fefd;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"Validation of rule failed\"\n}"}],"_postman_id":"ef75d6ec-58c4-4a76-8e1a-2eec9346f094"},{"name":"Obtener detalles de una regla","event":[{"listen":"test","script":{"id":"0fd0074d-a23d-4fbb-9ef4-f6df9d881817","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    amount: 'number',\r","    salary_percentage: 'number',\r","    execution_frequency: { type: 'string', optional: true },\r","    soccer_condition: { type: 'string', optional: true },\r","    soccer_team: { type: 'object', optional: true },\r","    weather_city: { type: 'string', optional: true },\r","    temperature: 'number',\r","    created_at: 'string',\r","    rule_type: 'object',\r","    rule_status: 'object',\r","    transaction_category: { type: 'object', optional: true },\r","    spend_less_limit_amount: 'number',\r","    spend_less_category_id: { type: 'string', optional: true },\r","    deleted_at: { type: 'string', optional: true }\r","};\r","\r","const ruleTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const ruleStatusProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    name: { type: 'string', optional: true },\r","    color: 'string',\r","    active: 'boolean',\r","    icon_pause: { type: 'string', optional: true },\r","    short_name: 'string',\r","    description: { type: 'string', optional: true },\r","    icon_primary: { type: 'string', optional: true },\r","    frequency_description: { type: 'string', optional: true }\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","\r","    // Check properties of the rule_type object\r","    xerpaTestApi.checkObjectProperties(responseJson.rule_type, ruleTypeProperties);\r","\r","    // Check metadata properties of the rule_type object\r","    xerpaTestApi.checkObjectProperties(responseJson.rule_type.metadata, metadataProperties);\r","\r","    // Check properties of the rule_status object\r","    xerpaTestApi.checkObjectProperties(responseJson.rule_status, ruleStatusProperties);\r","\r","    // Check metadata properties of the rule_status object\r","    xerpaTestApi.checkObjectProperties(responseJson.rule_status.metadata, metadataProperties);\r","\r","    // Check properties of the soccer_team object if it exists\r","    if (responseJson.soccer_team) {\r","        xerpaTestApi.checkObjectProperties(responseJson.soccer_team, {\r","            id: 'string',\r","            catalog: 'string',\r","            item_name: 'string',\r","            description: 'string',\r","            metadata: 'object'\r","        });\r","    }\r","\r","    // Check properties of the transaction_category object if it exists\r","    if (responseJson.transaction_category) {\r","        xerpaTestApi.checkObjectProperties(responseJson.transaction_category, {\r","            id: 'string',\r","            catalog: 'string',\r","            item_name: 'string',\r","            description: 'string',\r","            metadata: 'object'\r","        });\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"7f382aea-3c5e-4301-99bc-1d61131e6166","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/","description":"<p>Este endpoint permite obtener los detalles de una regla específica asociada a un proyecto dentro del servicio de ahorro de un usuario.</p>\n<h4 id=\"request\"><strong>Request</strong></h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_id</code> (string): ID del proyecto</p>\n</li>\n<li><p><code>rule_id</code>(string): ID de la regla</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response:</h4>\n<p>La respuesta de esta solicitud devuelve un objeto JSON con los detalles completos de la regla.</p>\n<ul>\n<li><p><code>id</code>(string): ID de la regla.</p>\n</li>\n<li><p><code>user_id</code>(string): ID del usuario asociado a la regla.</p>\n</li>\n<li><p><code>amount</code>(number): Monto configurado para la regla.</p>\n</li>\n<li><p><code>salary_percentage</code>(number or null): Porcentaje del salario (si aplica a la regla).</p>\n</li>\n<li><p><code>execution_frequency</code> (string): Frecuencia de ejecución.</p>\n</li>\n<li><p><code>soccer_condition</code> (string or null): Condición relacionada con el fútbol (si aplica).</p>\n</li>\n<li><p><code>soccer_team</code> (object): Detalles del equipo de fútbol, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del equipo de futbol.</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del equipo de futbol.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>img_url</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>weather_city</code> (string or null): Ciudad relacionada con el clima (si aplica).</p>\n</li>\n<li><p><code>temperature</code> (number): Temperatura configurada como condición.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha y hora de creación de la regla.</p>\n</li>\n<li><p><code>rule_type</code> (object): Información detallada del tipo de regla:</p>\n<ul>\n<li><p><code>id</code> (string): ID del tipo de regla.</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del tipo de regla.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del tipo de regla</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>,<code>name</code>,<code>color</code>,<code>active</code>,<code>icon_pause</code>,<code>short_name</code>,<code>description</code>,<code>icon_primary</code>,<code>frequency_description</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>rule_status</code> (object): Estado de la regla:</p>\n<ul>\n<li><p><code>id</code> (string): ID del estado de la regla</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del estado de la regla.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del estado de la regla</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>,<code>color</code>,<code>active</code>,<code>short_name</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>transaction_category</code> (string or null): Categoría de transacción asociada.</p>\n</li>\n<li><p><code>spend_less_limit_amount</code>(string): Límite de gasto para la categoría \"gastar menos\"</p>\n</li>\n<li><p><code>spend_less_category_id</code>(string or null): Categoría de la regla \"gastar menos\"</p>\n</li>\n<li><p><code>deleted_at</code> (string or null): Fecha de eliminación, si la regla fue eliminada.</p>\n</li>\n<li><p><code>rule_execution_days</code> (objeto or null): Indica las dias de ejecucion que tendra la regla (solo aplica para el caso de que sea monto fijo).</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\"type\": \"string\"},\n    \"user_id\": {\"type\": \"string\"},\n    \"amount\": {\"type\": \"number\"},\n    \"salary_percentage\": {\"type\": \"number\"},\n    \"execution_frequency\": {\"type\": \"string\"},\n    \"soccer_condition\": {\"type\": \"string\"},\n    \"soccer_team\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\"type\": \"string\"},\n        \"catalog\": {\"type\": \"string\"},\n        \"item_name\": {\"type\": \"string\"},\n        \"description\": {\"type\": \"string\"},\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"img_url\": {\"type\": \"string\"}\n          }\n        }\n      }\n    },\n    \"weather_city\": {\"type\": [\"string\", \"null\"]},\n    \"temperature\": {\"type\": \"number\"},\n    \"created_at\": {\"type\": \"string\"},\n    \"rule_type\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\"type\": \"string\"},\n        \"catalog\": {\"type\": \"string\"},\n        \"item_name\": {\"type\": \"string\"},\n        \"description\": {\"type\": \"string\"},\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"icon\": {\"type\": \"string\"},\n            \"name\": {\"type\": \"string\"},\n            \"color\": {\"type\": \"string\"},\n            \"active\": {\"type\": \"boolean\"},\n            \"icon_pause\": {\"type\": \"string\"},\n            \"short_name\": {\"type\": \"string\"},\n            \"frequency_description\": {\"type\": \"string\"}\n          }\n        }\n      }\n    },\n    \"rule_status\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\"type\": \"string\"},\n        \"catalog\": {\"type\": \"string\"},\n        \"item_name\": {\"type\": \"string\"},\n        \"description\": {\"type\": \"string\"},\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"icon\": {\"type\": \"string\"},\n            \"color\": {\"type\": \"string\"},\n            \"active\": {\"type\": \"boolean\"},\n            \"short_name\": {\"type\": \"string\"}\n          }\n        }\n      }\n    },\n    \"transaction_category\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\"type\": \"string\"},\n        \"catalog\": {\"type\": \"string\"},\n        \"item_name\": {\"type\": \"string\"},\n        \"description\": {\"type\": \"string\"},\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"icon\": {\"type\": \"string\"},\n            \"color\": {\"type\": \"string\"},\n            \"active\": {\"type\": \"boolean\"},\n            \"short_name\": {\"type\": \"string\"}\n          }\n        }\n      }\n    },\n    \"transaction_category\": { \"type\": [\"string\", \"null\"] },\n    \"spend_less_limit_amount\": { \"type\": \"string\" },\n    \"spend_less_category_id\": { \"type\": [\"string\", \"null\"] },\n    \"deleted_at\": { \"type\": [\"string\", \"null\"], \"format\": \"date-time\" },\n    \"rule_execution_days\": { \"type\": \"object\", \"properties\": { \"days\":\"array\" } }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","rules","{{rule_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"bd1e1cd6-97a8-4f9e-a081-e4404615bb75","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 16:55:21 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"1355"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"a031941d-1c90-4e83-bded-c8141adf04bf"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZBnEHH5oAMEGSg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839e2f9-10232a0109decacf104f2b1e;Parent=6a90fc255b009e47;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"be5974ed-80dc-4243-97fa-d2f629c99273\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"amount\": 0,\n    \"salary_percentage\": 5,\n    \"execution_frequency\": null,\n    \"soccer_condition\": null,\n    \"soccer_team\": null,\n    \"weather_city\": null,\n    \"temperature\": 0,\n    \"created_at\": \"2025-05-30T10:39:47.242709-06:00\",\n    \"rule_type\": {\n        \"id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\",\n        \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n        \"item_name\": \"rule_type_fixed_salary\",\n        \"description\": \"Regla % sueldo\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n            \"name\": \"Porcentaje de sueldo\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n            \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n            \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n            \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n            \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n        }\n    },\n    \"rule_status\": {\n        \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n        \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n        \"item_name\": \"rule_status_active\",\n        \"description\": \"Regla activa\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"RULE_STATUS_ACTIVE\"\n        }\n    },\n    \"transaction_category\": null,\n    \"spend_less_limit_amount\": 0,\n    \"spend_less_category_id\": null,\n    \"deleted_at\": null\n}"}],"_postman_id":"7f382aea-3c5e-4301-99bc-1d61131e6166"},{"name":"Actualizar regla de ahorro","event":[{"listen":"test","script":{"id":"0674dd63-bfff-4b64-8cfc-3ae978735511","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulPatch();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const resultProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    amount: 'number',\r","    salary_percentage: 'number',\r","    execution_frequency: { type: 'string', optional: true },\r","    soccer_condition: { type: 'string', optional: true },\r","    soccer_team: { type: 'object', optional: true },\r","    weather_city: { type: 'string', optional: true },\r","    temperature: 'number',\r","    created_at: 'string',\r","    rule_type: 'object',\r","    rule_status: 'object',\r","    transaction_category: { type: 'object', optional: true },\r","    spend_less_limit_amount: 'number',\r","    spend_less_category_id: { type: 'string', optional: true },\r","    deleted_at: { type: 'string', optional: true }\r","};\r","\r","const ruleTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const ruleStatusProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    name: { type: 'string', optional: true },\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string',\r","    description: { type: 'string', optional: true },\r","    icon_pause: { type: 'string', optional: true },\r","    icon_primary: { type: 'string', optional: true },\r","    frequency_description: { type: 'string', optional: true },\r","    img_url: { type: 'string', optional: true }\r","};\r","\r","// Check properties of the result object\r","pm.test(\"Response has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, resultProperties);\r","    \r","    // Check properties of the rule_type object\r","    xerpaTestApi.checkObjectProperties(responseJson.rule_type, ruleTypeProperties);\r","    xerpaTestApi.checkObjectProperties(responseJson.rule_type.metadata, metadataProperties);\r","    \r","    // Check properties of the rule_status object\r","    xerpaTestApi.checkObjectProperties(responseJson.rule_status, ruleStatusProperties);\r","    xerpaTestApi.checkObjectProperties(responseJson.rule_status.metadata, metadataProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"80a29558-5184-42ad-9dec-76f89bf7c4d1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"raw","raw":" {\r\n   \"amount\": 1500,\r\n   \"execution_frequency\" : \"D\"\r\n    // \"transaction_category\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b1\",\r\n    // \"salary_percentage\": 15,\r\n    // \"soccer_team\": \"6a664924-25ed-4a63-99ea-f67807112205\",\r\n    // \"soccer_condition\": \"A\",\r\n    // \"rule_status\": \"94bcd197-0d33-40e4-8793-78aa42ad3220\",\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/","description":"<p>Este endpoint se utiliza para actualizar una regla específica asociada a un proyecto dentro del servicio de ahorro de un usuario.</p>\n<h4 id=\"request\"><strong>Request</strong></h4>\n<ul>\n<li><p>Método: <code>PATCH</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_id</code> (string): ID del proyecto</p>\n</li>\n<li><p><code>rule_id</code>(string): ID de la regla</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>La solicitud debe enviarse en formato JSON como <strong>un arreglo de objetos</strong>, donde cada objeto representa una regla a crear y debe contener los siguientes parámetros:</p>\n<ul>\n<li><p><code>amount</code>(number) (opcional): Monto asociado a la regla. Tiene que ser un valor mayor a 0.</p>\n</li>\n<li><p><code>execution_frequency</code>(string) (opcional): La frecuencia de ejecución del ahorro. Puede tomar los valores</p>\n<ul>\n<li><p>Abono Único: \"U\"</p>\n</li>\n<li><p>Abono Diario: \"D\"</p>\n</li>\n<li><p>Abono Semanal: \"S\"</p>\n</li>\n<li><p>Abono Quincenal: \"Q\"</p>\n</li>\n<li><p>Abono Mensual: \"M\"</p>\n</li>\n</ul>\n</li>\n<li><p><code>transaction_category</code>(string) (opcional): ID de la categoría de transacción.</p>\n</li>\n<li><p><code>salary_percentage</code> (number) (opcional): Porcentaje del salario relacionado, este tiene que ser un valor entre 1 - 50 (si aplica).</p>\n</li>\n<li><p><code>soccer_team</code>(string) (opcional): ID del equipo de futbol.</p>\n</li>\n<li><p><code>soccer_condition</code>(string) (opcional): Condición relacionada con fútbol. Puede tomar los valores</p>\n<ul>\n<li><p>Cada vez que el equipo juegue \"J\"</p>\n</li>\n<li><p>Cada vez que el equipo gane. \"G\"</p>\n</li>\n<li><p>Cada vez que el equipo empate \"E\"</p>\n</li>\n<li><p>Cada vez que el equipo anote un gol \"A\"</p>\n</li>\n</ul>\n</li>\n<li><p><code>rule_status</code>(string) (opcional): ID del estado de la regla.</p>\n</li>\n<li><p><code>rule_execution_days</code>(array) (opcional): Dias en que se ejecutara la regla. Los posibles valores a ingresar dependen del tipo de frecuencia a utilizar para el abono.</p>\n<ul>\n<li><p><strong>Diario</strong>: La lista debe quedar vacia, o nula.</p>\n</li>\n<li><p><strong>Semanal</strong>: La lista debe contener <strong>un</strong> entero entre 1-7.</p>\n</li>\n<li><p><strong>Mensual</strong>: La lista debe contener <strong>un</strong> entero entre 1-31.</p>\n</li>\n<li><p><strong>Quincenal</strong>: La lista debe contener <strong>dos</strong> enteros, el primero entre 1-15 y el segundo entre 16-31.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-example\"><strong>Request Example</strong></h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">    {\n        \"rule_status\": \"94bcd197-0d33-40e4-8793-78aa42ad3220\",\n        \"amount\": 111,\n        \"execution_frequency\": \"D\"\n    }\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta incluirá los detalles de la regla modificada, con los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): ID único de la regla.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario asociado a la regla.</p>\n</li>\n<li><p><code>amount</code> (number): Monto configurado para la regla.</p>\n</li>\n<li><p><code>salary_percentage</code> (number): Porcentaje del salario (si aplica a la regla).</p>\n</li>\n<li><p><code>execution_frequency</code> (string): Frecuencia de ejecución.</p>\n</li>\n<li><p><code>soccer_condition</code> (string): Condición relacionada con el fútbol (si aplica).</p>\n</li>\n<li><p><code>soccer_team</code> (object): Detalles del equipo de fútbol, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del equipo de futbol.</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del equipo de futbol.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>img_url</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>weather_city</code> (string or null): Ciudad relacionada con el clima (si aplica).</p>\n</li>\n<li><p><code>temperature</code> (number): Temperatura configurada como condición.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha y hora de creación de la regla.</p>\n</li>\n<li><p><code>rule_type</code> (object): Información detallada del tipo de regla:</p>\n<ul>\n<li><p><code>id</code> (string): ID del tipo de regla.</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del tipo de regla.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del tipo de regla</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>,<code>name</code>,<code>color</code>,<code>active</code>,<code>icon_pause</code>,<code>short_name</code>,<code>description</code>,<code>icon_primary</code>,<code>frequency_description</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>rule_status</code> (object): Estado de la regla:</p>\n<ul>\n<li><p><code>id</code> (string): ID del estado de la regla</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del estado de la regla.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del estado de la regla</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>,<code>color</code>,<code>active</code>,<code>short_name</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>transaction_category</code> (string or null): Categoría de transacción asociada.</p>\n</li>\n<li><p><code>spend_less_limit_amount</code>(string): Limite de gasto para la categoria \"gastar menos\"</p>\n</li>\n<li><p><code>spend_less_category_id</code>(string or null): Categoría de la regla \"gastar menos\"</p>\n</li>\n<li><p><code>deleted_at</code> (string or null): Fecha de eliminación, si la regla fue eliminada.</p>\n</li>\n<li><p><code>rule_execution_days</code> (objeto or null): Indica las dias de ejecucion que tendra la regla (solo aplica para el caso de que sea monto fijo).</p>\n</li>\n</ul>\n<h4 id=\"response-format\"><strong>Response Format</strong></h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\"type\": \"string\"},\n    \"user_id\": {\"type\": \"string\"},\n    \"amount\": {\"type\": \"number\"},\n    \"salary_percentage\": {\"type\": \"number\"},\n    \"execution_frequency\": {\"type\": \"string\"},\n    \"soccer_condition\": {\"type\": \"string\"},\n    \"soccer_team\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\"type\": \"string\"},\n        \"catalog\": {\"type\": \"string\"},\n        \"item_name\": {\"type\": \"string\"},\n        \"description\": {\"type\": \"string\"},\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"img_url\": {\"type\": \"string\"}\n          }\n        }\n      }\n    },\n    \"weather_city\": {\"type\": [\"string\", \"null\"]},\n    \"temperature\": {\"type\": \"number\"},\n    \"created_at\": {\"type\": \"string\"},\n    \"rule_type\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\"type\": \"string\"},\n        \"catalog\": {\"type\": \"string\"},\n        \"item_name\": {\"type\": \"string\"},\n        \"description\": {\"type\": \"string\"},\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"icon\": {\"type\": \"string\"},\n            \"name\": {\"type\": \"string\"},\n            \"color\": {\"type\": \"string\"},\n            \"active\": {\"type\": \"boolean\"},\n            \"icon_pause\": {\"type\": \"string\"},\n            \"short_name\": {\"type\": \"string\"},\n            \"frequency_description\": {\"type\": \"string\"}\n          }\n        }\n      }\n    },\n    \"rule_status\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\"type\": \"string\"},\n        \"catalog\": {\"type\": \"string\"},\n        \"item_name\": {\"type\": \"string\"},\n        \"description\": {\"type\": \"string\"},\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"icon\": {\"type\": \"string\"},\n            \"color\": {\"type\": \"string\"},\n            \"active\": {\"type\": \"boolean\"},\n            \"short_name\": {\"type\": \"string\"}\n          }\n        }\n      }\n    },\n    \"transaction_category\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\"type\": \"string\"},\n        \"catalog\": {\"type\": \"string\"},\n        \"item_name\": {\"type\": \"string\"},\n        \"description\": {\"type\": \"string\"},\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"icon\": {\"type\": \"string\"},\n            \"color\": {\"type\": \"string\"},\n            \"active\": {\"type\": \"boolean\"},\n            \"short_name\": {\"type\": \"string\"}\n          }\n        }\n      }\n    },\n    \"transaction_category\": { \"type\": [\"string\", \"null\"] },\n    \"spend_less_limit_amount\": { \"type\": \"string\" },\n    \"spend_less_category_id\": { \"type\": [\"string\", \"null\"] },\n    \"deleted_at\": { \"type\": [\"string\", \"null\"], \"format\": \"date-time\" },\n    \"rule_execution_days\": { \"type\": \"object\", \"properties\": { \"days\":\"array\" } }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","rules","{{rule_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"818f53e4-6ac2-4f33-b60c-cd4d6bb6b37e","name":"Successful Response","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":" {\r\n   \"amount\": 1500\r\n    // \"execution_frequency\" : \"D\"\r\n    // \"transaction_category\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b1\",\r\n    // \"salary_percentage\": 15,\r\n    // \"soccer_team\": \"6a664924-25ed-4a63-99ea-f67807112205\"\r\n    // \"soccer_condition\": \"A\"\r\n    // \"rule_status\": \"94bcd197-0d33-40e4-8793-78aa42ad3220\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 16:59:00 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"1358"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"4430588d-4529-4ba9-aba2-150ccc66812e"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZCJPFAroAMEn3g="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839e3d4-08ee4dbc75a462c36454eaed;Parent=79660e275075af83;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"be5974ed-80dc-4243-97fa-d2f629c99273\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"amount\": 1500,\n    \"salary_percentage\": 5,\n    \"execution_frequency\": null,\n    \"soccer_condition\": null,\n    \"soccer_team\": null,\n    \"weather_city\": null,\n    \"temperature\": 0,\n    \"created_at\": \"2025-05-30T10:39:47.242709-06:00\",\n    \"rule_type\": {\n        \"id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\",\n        \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n        \"item_name\": \"rule_type_fixed_salary\",\n        \"description\": \"Regla % sueldo\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n            \"name\": \"Porcentaje de sueldo\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n            \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n            \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n            \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n            \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n        }\n    },\n    \"rule_status\": {\n        \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n        \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n        \"item_name\": \"rule_status_active\",\n        \"description\": \"Regla activa\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"RULE_STATUS_ACTIVE\"\n        }\n    },\n    \"transaction_category\": null,\n    \"spend_less_limit_amount\": 0,\n    \"spend_less_category_id\": null,\n    \"deleted_at\": null\n}"},{"id":"5970f577-880f-4cd3-bd46-27416f7b150a","name":"Bad Request - Invalid amount","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":" {\r\n   \"amount\": -1\r\n    // \"execution_frequency\" : \"D\"\r\n    // \"transaction_category\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b1\",\r\n    // \"salary_percentage\": 15,\r\n    // \"soccer_team\": \"6a664924-25ed-4a63-99ea-f67807112205\"\r\n    // \"soccer_condition\": \"A\"\r\n    // \"rule_status\": \"94bcd197-0d33-40e4-8793-78aa42ad3220\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 17:10:26 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"27"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"a7556f2f-b512-41fe-8af5-af7026ea84d8"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZD0THh1IAMEKDw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839e681-55f513ce7a22b7d175953bb1;Parent=53978489223d5f65;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"amount\": [\n        \"Amount error\"\n    ]\n}"},{"id":"b46be075-9d60-4c6b-b3a6-cfc0fc93f801","name":"Bad Request - Invalid execution frequency","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":" {\r\n    \"amount\": 1500,\r\n    \"execution_frequency\" : \"invalid\"\r\n    // \"transaction_category\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b1\",\r\n    // \"salary_percentage\": 15,\r\n    // \"soccer_team\": \"6a664924-25ed-4a63-99ea-f67807112205\"\r\n    // \"soccer_condition\": \"A\"\r\n    // \"rule_status\": \"94bcd197-0d33-40e4-8793-78aa42ad3220\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 17:10:50 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"40"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"76f12e8b-cadd-437d-ad67-979b6efff406"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZD4QFakoAMETRg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839e69a-0f22bffa113ba6a877cbf5f9;Parent=0b3e6f36163a4e6f;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"execution_frequency\": [\n        \"option error\"\n    ]\n}"},{"id":"393ca8bf-7900-413a-9d0d-ed23090ea209","name":"Bad Request - Invalid transaction category id","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":" {\r\n    \"amount\": 1500,\r\n    \"execution_frequency\" : \"D\",\r\n    \"transaction_category\": \"invalid-id\"\r\n    // \"salary_percentage\": 15,\r\n    // \"soccer_team\": \"6a664924-25ed-4a63-99ea-f67807112205\"\r\n    // \"soccer_condition\": \"A\"\r\n    // \"rule_status\": \"94bcd197-0d33-40e4-8793-78aa42ad3220\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 17:11:44 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"50"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"b3018447-e18a-4383-ba4d-66a575044d63"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZEAnHDioAMEFVw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839e6d0-1abef4ce66743737648a6d9e;Parent=7452d9ee7c532786;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction_category\": [\n        \"Must be a valid UUID.\"\n    ]\n}"},{"id":"b17c1de5-bdb8-4703-a7b3-67f4ffee4281","name":"Bad Request - Invalid soccer team id","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":" {\r\n    \"amount\": 1500,\r\n    \"execution_frequency\" : \"D\",\r\n    \"transaction_category\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b1\",\r\n    \"salary_percentage\": 15,\r\n    \"soccer_team\": \"invalid-soccer-id\"\r\n    // \"soccer_condition\": \"A\"\r\n    // \"rule_status\": \"94bcd197-0d33-40e4-8793-78aa42ad3220\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 17:16:23 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"41"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"e942e508-f3e0-4ac1-be01-0add6902dddc"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZEsIHD2oAMEk0A="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839e7e6-1ac7c311388dc69d3350daf9;Parent=22802f2530333d30;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"soccer_team\": [\n        \"Must be a valid UUID.\"\n    ]\n}"}],"_postman_id":"80a29558-5184-42ad-9dec-76f89bf7c4d1"},{"name":"Eliminar regla de ahorro","event":[{"listen":"test","script":{"id":"484b9a6f-3ab0-41bc-ad33-35a2aee8976e","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulDelete();\r",""],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"ee02cf40-7f59-448a-acd4-555a5a3272f1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"DELETE","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/","description":"<p>Este endpoint envía una solicitud HTTP <code>DELETE</code> para <strong>eliminar una regla específica</strong> asociada a un proyecto de ahorro de un usuario en la API de Saving Service.</p>\n<h4 id=\"request\"><strong>Request</strong></h4>\n<ul>\n<li><p>Método: <code>DELETE</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_id</code> (string): ID del proyecto</p>\n</li>\n<li><p><code>rule_id</code>(string): ID de la regla</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>DELETE</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON vacío, indicando que la operación se completó correctamente.</p>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","rules","{{rule_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"f7dd3009-7925-4757-8113-e700f19cd0a6","name":"Successful Response","originalRequest":{"method":"DELETE","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/"},"status":"No Content","code":204,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 17:20:42 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"0"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"3bfe1b12-ed81-4554-88c8-338e1694dc1e"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZFUpFShIAMEtUQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839e8ea-51047e290e299bf818dba1da;Parent=6e4ef840d349ad51;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":null},{"id":"a8d89958-7447-43bb-ae33-63c11ecb1489","name":"Bad Request - Delete non existent rule","originalRequest":{"method":"DELETE","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 17:21:03 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"17"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"dbbfdca9-4930-4c2a-b337-e08cb029a94f"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZFX6HmWIAMETRg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839e8ff-6c70462511d345cd72209329;Parent=2d1c3cd6698f801d;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"\"Rule not found.\""}],"_postman_id":"ee02cf40-7f59-448a-acd4-555a5a3272f1"},{"name":"Obtener actividad de una regla","event":[{"listen":"test","script":{"id":"075d9208-2e76-486c-b5c8-c01c7cc62e8b","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    next: { type: 'string', optional: true },\r","    previous: { type: 'string', optional: true },\r","    total_pages: 'number',\r","    current_page: 'number',\r","    offset: 'number',\r","    count: 'number',\r","    results: 'array'\r","};\r","\r","const resultProperties = {\r","    id: 'string',\r","    activity_type: 'object',\r","    user_id: 'string',\r","    payment_date: { type: 'string', optional: true },\r","    project_name: 'string',\r","    rule_name: 'string',\r","    amount: 'string',\r","    title: 'string',\r","    message: 'string',\r","    footer: 'string',\r","    created_at: 'string',\r","    project: 'string',\r","    rule: 'string',\r","    payment: { type: 'string', optional: true },\r","    saving: { type: 'string', optional: true }\r","};\r","\r","const activityTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    title: 'string',\r","    message: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the results array\r","pm.test(\"Results have expected properties with correct types\", () => {\r","    if (responseJson.results && responseJson.results.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0], resultProperties);\r","        \r","        // Check properties of the activity_type object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].activity_type, activityTypeProperties);\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].activity_type.metadata, metadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"2743bf18-d431-4fa2-b2b8-3e997d14721d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/activities/","description":"<p>Este endpoint permite consultar las actividades asociadas a una regla específica dentro de un proyecto de ahorro de un usuario.</p>\n<h4 id=\"request\"><strong>Request</strong></h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/activities/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_id</code> (string): ID del proyecto</p>\n</li>\n<li><p><code>rule_id</code>(string): ID de la regla</p>\n</li>\n</ul>\n</li>\n<li><p>Parámetros de query: Se agregan al final de la ruta, sirven principalmente para manejar la paginación de la petición. Ejm: <code>/payments/?page=1&amp;page_size=10</code></p>\n<ul>\n<li><p><code>page</code>(number): Número de página para la paginación de resultados.</p>\n</li>\n<li><p><code>page_size</code>(number): Cantidad de resultados que se incluirán por página.</p>\n</li>\n<li><p><code>paginate</code>(bool): Booleano que indica si se desea paginar la respuesta.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>Entrega un array de <code>activity</code>, en donde cada una de ellos incluye:</p>\n<ul>\n<li><p><code>id</code>(string): Identificador único de la actividad.</p>\n</li>\n<li><p><code>activity_type</code>(object): Objeto con detalles del tipo de actividad, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del tipo de actividad</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del tipo de actividad</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>,<code>title</code>,<code>message</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>user_id</code>(string): ID del usuario asociado a la actividad.</p>\n</li>\n<li><p><code>payment_date</code>(string): Fecha del pago, si aplica.</p>\n</li>\n<li><p><code>project_name</code>(string): Nombre del proyecto relacionado.</p>\n</li>\n<li><p><code>rule_name</code>(string): Nombre de la regla asociada a la actividad.</p>\n</li>\n<li><p><code>amount</code>(number): Monto relacionado con la actividad.</p>\n</li>\n<li><p><code>title</code>(string): Título de la actividad.</p>\n</li>\n<li><p><code>message</code>(string): Mensaje asociado a la actividad.</p>\n</li>\n<li><p><code>footer</code>(string): Información adicional que aparece al pie de la actividad.</p>\n</li>\n<li><p><code>created_at</code>(string): Fecha y hora en la que se creó la actividad.</p>\n</li>\n<li><p><code>project</code>(string or null): ID del proyecto vinculado.</p>\n</li>\n<li><p><code>rule</code>(string or null): ID de la regla asociada.</p>\n</li>\n<li><p><code>payment</code>(string or null): ID del pago relacionado (si aplica).</p>\n</li>\n<li><p><code>saving</code>(string or null): ID del ahorro relacionado (si aplica).</p>\n</li>\n</ul>\n<p>La respuesta también incluye información de paginación, como:</p>\n<ul>\n<li><p><code>next</code>(string or null): URL de la siguiente página</p>\n</li>\n<li><p><code>previous</code>(string or null): URL de la página anterior</p>\n</li>\n<li><p><code>total_pages</code>(number): Total de páginas disponibles</p>\n</li>\n<li><p><code>current_page</code>(number): Página actual</p>\n</li>\n<li><p><code>offset</code>(number): Índice de desplazamiento</p>\n</li>\n<li><p><code>count</code>(number): Total de elementos</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"next\": { \"type\": [\"string\", \"null\"] },\n    \"previous\": { \"type\": [\"string\", \"null\"] },\n    \"total_pages\": { \"type\": \"integer\" },\n    \"current_page\": { \"type\": \"integer\" },\n    \"offset\": { \"type\": \"integer\" },\n    \"count\": { \"type\": \"integer\" },\n    \"results\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"activity_type\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"icon\": { \"type\": \"string\" },\n                  \"title\": { \"type\": \"string\" },\n                  \"message\": { \"type\": \"string\" }\n                },\n                \"required\": [\"icon\", \"title\", \"message\"]\n              }\n            }\n          },\n          \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"payment_date\": { \"type\": [\"string\", \"null\"], \"format\": \"date-time\" },\n          \"project_name\": { \"type\": [\"string\", \"null\"] },\n          \"rule_name\": { \"type\": [\"string\", \"null\"] },\n          \"amount\": { \"type\": [\"string\", \"null\"] },\n          \"title\": { \"type\": \"string\" },\n          \"message\": { \"type\": \"string\" },\n          \"footer\": { \"type\": \"string\" },\n          \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"project\": { \"type\": [\"string\", \"null\"], \"format\": \"uuid\" },\n          \"rule\": { \"type\": [\"string\", \"null\"], \"format\": \"uuid\" },\n          \"payment\": { \"type\": [\"string\", \"null\"], \"format\": \"uuid\" },\n          \"saving\": { \"type\": [\"string\", \"null\"], \"format\": \"uuid\" }\n        }\n        ]\n      }\n    }\n  }\n  ]\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","rules","{{rule_id}}","activities",""],"host":["{{host_app}}"],"query":[{"disabled":true,"key":"page_size","value":"1"},{"disabled":true,"key":"page","value":"1"},{"disabled":true,"key":"paginate","value":"false"}],"variable":[]}},"response":[{"id":"f817ab64-f475-460c-bc92-0765c7ae7b4b","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/activities/","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","rules","{{rule_id}}","activities",""],"query":[{"key":"page_size","value":"1","disabled":true},{"key":"page","value":"2","disabled":true},{"key":"paginate","value":"false","type":"text","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 17:27:51 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"1686"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"65ee5162-4524-4959-87c0-e865f4e1313d"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZGXoEdoIAMEY1g="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839ea96-565b7a806068009839c45c94;Parent=6a88b368d4505f98;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"next\": null,\n    \"previous\": null,\n    \"total_pages\": 1,\n    \"current_page\": 1,\n    \"offset\": 0,\n    \"count\": 2,\n    \"results\": [\n        {\n            \"id\": \"116fcf9b-872d-4f97-9146-a44a496d6693\",\n            \"activity_type\": {\n                \"id\": \"54c4c77a-f678-4be9-8fd5-d1b25f1a8323\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_rule_deleted\",\n                \"description\": \"Regla eliminada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/add_circle.svg\",\n                    \"title\": \"Regla eliminada\",\n                    \"message\": \"La regla {rule.rule_type.metadata.name} fue eliminada.\"\n                }\n            },\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"payment_date\": null,\n            \"project_name\": \"Viaje a japon\",\n            \"rule_name\": \"Regla monto fijo\",\n            \"amount\": \"111.00\",\n            \"title\": \"Regla eliminada\",\n            \"message\": \"La regla Monto fijo fue eliminada.\",\n            \"footer\": \"\",\n            \"created_at\": \"2025-05-30T11:20:42.373007-06:00\",\n            \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n            \"rule\": \"8c7e426c-f3d9-4c64-8333-e7bd770a5106\",\n            \"payment\": null,\n            \"saving\": null\n        },\n        {\n            \"id\": \"b6b43060-5e73-47f6-8a7b-50d3ff0dc5d6\",\n            \"activity_type\": {\n                \"id\": \"ae84eb55-038c-4297-bc6d-34afcbec6730\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_rule_created\",\n                \"description\": \"Regla creada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/add_circle.svg\",\n                    \"title\": \"Regla creada\",\n                    \"message\": \"La regla {rule.rule_type.metadata.name} fue creada.\"\n                }\n            },\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"payment_date\": null,\n            \"project_name\": \"Viaje a japon\",\n            \"rule_name\": \"Regla monto fijo\",\n            \"amount\": \"111.00\",\n            \"title\": \"Regla creada\",\n            \"message\": \"La regla Monto fijo fue creada.\",\n            \"footer\": \"\",\n            \"created_at\": \"2025-05-30T11:20:33.643522-06:00\",\n            \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n            \"rule\": \"8c7e426c-f3d9-4c64-8333-e7bd770a5106\",\n            \"payment\": null,\n            \"saving\": null\n        }\n    ]\n}"},{"id":"f0ef058c-c5de-4cde-97eb-6b04ce1791f8","name":"Bad Request - Invalid page","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/rules/{{rule_id}}/activities/?page=-2","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","rules","{{rule_id}}","activities",""],"query":[{"key":"page_size","value":"1","disabled":true},{"key":"page","value":"-2"},{"key":"paginate","value":"false","type":"text","disabled":true}]}},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 18:02:37 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"26"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"451c836a-b721-4964-b735-1dc25700fd56"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZLdtEYjoAMENDQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839f2bd-3a6eb3527073cd762140bd4d;Parent=17bcd99218def627;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Invalid page.\"\n}"}],"_postman_id":"2743bf18-d431-4fa2-b2b8-3e997d14721d"},{"name":"Reglas disponibles","id":"4bd3e33a-08e7-46b7-ba8d-6598180125a4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/rules/availability/","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","rules","availability",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"3a25df96-6e10-48cf-88f8-4de7df44d67f","name":"200 ok","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/rules/availability/"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"destinations\": {\n        \"user_test_falabella_account_1\": {\n            \"rule_type_fixed_amount\": {\n                \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\",\n                \"enabled\": true,\n                \"by_origin\": {\n                    \"user_test_falabella_account_3\": true,\n                    \"user_test_falabella_account_2\": true\n                },\n                \"max_per_origin_destination\": 1\n            },\n            \"rule_type_round_up\": {\n                \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\",\n                \"enabled\": true,\n                \"by_origin\": {\n                    \"user_test_falabella_account_3\": true,\n                    \"user_test_falabella_account_2\": true\n                },\n                \"max_per_origin\": 1\n            },\n            \"rule_type_guilty_pleasure\": {\n                \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\",\n                \"enabled\": true,\n                \"by_origin\": {\n                    \"user_test_falabella_account_3\": true,\n                    \"user_test_falabella_account_2\": true\n                },\n                \"max_rules\": 5,\n                \"remaining_rules\": 3,\n                \"categories\": {\n                    \"used\": [\n                        \"Automóvil & Transporte\",\n                        \"Vacaciones & Viajes\"\n                    ],\n                    \"available\": [\n                        \"Supermercados\",\n                        \"Entretenimiento\",\n                        \"Shopping\",\n                        \"Restaurantes\"\n                    ]\n                }\n            },\n            \"rule_type_52_weeks\": {\n                \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\",\n                \"enabled\": true,\n                \"by_origin\": {\n                    \"user_test_falabella_account_3\": true,\n                    \"user_test_falabella_account_2\": false\n                },\n                \"max_per_origin_destination\": 1\n            }\n        }\n    }\n}"}],"_postman_id":"4bd3e33a-08e7-46b7-ba8d-6598180125a4"}],"id":"65d17d6c-9f86-4711-990a-86627e16d645","description":"<p>La carpeta contiene los endpoints que permiten a los usuarios configurar, consultar y administrar sus <strong>reglas de ahorro programadas</strong>, las cuales definen condiciones bajo las que se realizan abonos automáticos a sus metas (proyectos).</p>\n<p>Estas reglas pueden estar basadas en condiciones temporales (diarias, semanales), financieras (por monto), o incluso en eventos externos como resultados de fútbol.</p>\n<hr />\n<h4 id=\"📌-funcionalidades-disponibles\">📌 Funcionalidades disponibles</h4>\n<ul>\n<li><p>Recupera todas las reglas activas o configuradas por un usuario para sus distintos proyectos de ahorro.</p>\n</li>\n<li><p>Permite registrar una o varias nuevas reglas, especificando tipo, frecuencia, monto, condición y destino (meta).</p>\n</li>\n<li><p>Devuelve la información detallada de una regla específica, incluyendo configuración, estado y condiciones externas (si las hay).</p>\n</li>\n<li><p>Permite modificar atributos de una regla existente, como el monto o frecuencia de ejecución.</p>\n</li>\n<li><p>Desactiva o elimina lógicamente una regla de ahorro configurada por el usuario.</p>\n</li>\n<li><p>Devuelve el historial de actividades generadas por una regla específica: cada ejecución, monto abonado, resultado, y vínculo con un pago o ahorro.</p>\n</li>\n<li><p>Consulta el catálogo de ligas y equipos disponibles para las reglas basadas en eventos deportivos, útil para configurar condiciones como \"ahorra si gana tu equipo\".</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🎯-consideraciones\">🎯 Consideraciones</h4>\n<ul>\n<li><p>Cada regla se asocia a <strong>un proyecto (meta de ahorro)</strong>.</p>\n</li>\n<li><p>Un usuario puede tener <strong>múltiples reglas activas simultáneamente</strong>, incluso con distintos tipos o condiciones.</p>\n</li>\n<li><p>Las ejecuciones de reglas generan <strong>actividades, ahorros y pagos</strong>, que quedan registrados con trazabilidad.</p>\n</li>\n<li><p>Algunas reglas pueden usar <strong>eventos externos</strong> como resultados deportivos, o transacciones bancarias del usuario, para lo cual es necesario configurar correctamente el ítem del catálogo asociado.</p>\n</li>\n<li><p>Si bien las reglas pueden modificarse, las <strong>actividades históricas no se actualizan retroactivamente</strong>.</p>\n</li>\n<li><p>Se recomienda consultar primero los catálogos (<code>rule_type</code>, <code>execution_frequency</code>, <code>activity_type</code>, etc.) para mostrar opciones válidas en el frontend.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🔐-autenticación-requerida\">🔐 Autenticación requerida</h4>\n<p>Todos los endpoints requieren un <strong>User Token válido</strong>:</p>\n<blockquote>\n<p>Authorization: Bearer {{user_token}}</p>\n</blockquote>\n","_postman_id":"65d17d6c-9f86-4711-990a-86627e16d645"},{"name":"Actividad y movimientos","item":[{"name":"Lista de actividades","event":[{"listen":"test","script":{"id":"29063aae-a3e8-4aa1-ba60-bf9014fe6145","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    next: ['string', 'null'],\r","    previous: 'string',\r","    total_pages: 'number',\r","    current_page: 'number',\r","    offset: 'number',\r","    count: 'number',\r","    results: 'array'\r","};\r","\r","const activityProperties = {\r","    id: 'string',\r","    activity_type: 'object',\r","    user_id: 'string',\r","    payment_date: ['string', 'null'],\r","    project_name: 'string',\r","    rule_name: ['string', 'null'],\r","    amount: 'string',\r","    title: 'string',\r","    message: 'string',\r","    footer: 'string',\r","    created_at: 'string',\r","    project: 'string',\r","    rule: ['string', 'null'],\r","    payment: ['string', 'null'],\r","    saving: ['string', 'null']\r","};\r","\r","const activityTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const activityTypeMetadataProperties = {\r","    icon: 'string',\r","    title: 'string',\r","    message: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the first activity in results\r","pm.test(\"First activity has expected properties with correct types\", () => {\r","    if (responseJson.results && responseJson.results.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0], activityProperties);\r","        \r","        // Check activity_type properties\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].activity_type, activityTypeProperties);\r","        \r","        // Check activity_type metadata properties\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].activity_type.metadata, activityTypeMetadataProperties);\r","    } else {\r","        pm.expect.fail('No activities found in the results');\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"07ece258-96f7-4abb-9731-131733ec58d3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/activities/","description":"<p>Este endpoint permite recuperar las actividades asociadas a un proyecto específico de un usuario.</p>\n<img src=\"https://content.pstmn.io/bcdb4df3-b325-4deb-845b-449b92492d61/TUV0YS1BQ3RpdmlkYWQucG5n\" width=\"100\" height=\"110\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/activities/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_id</code> (string): ID del proyecto</p>\n</li>\n</ul>\n</li>\n<li><p>Parámetros de query: Se agregan al final de la ruta, sirven principalmente para manejar la paginación de la petición. Ejm: <code>/activities/?page=1&amp;page_size=10</code></p>\n<ul>\n<li><p><code>page</code>(entero): Número de página para la paginación de resultados.</p>\n</li>\n<li><p><code>page_size</code>(entero): Cantidad de resultados que se incluirán por página.</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body\"><strong>Request Body:</strong></h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<hr />\n<h4 id=\"response\">Response</h4>\n<p>La respuesta incluirá un arreglo de objetos <code>activity</code>, cada uno con los siguientes campos:</p>\n<ul>\n<li><p><code>id</code>(string): ID de la actividad</p>\n</li>\n<li><p><code>activity_type</code>(object): Detalles del tipo de actividad, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del tipo de actividad</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del tipo de actividad</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>, <code>title</code>, <code>message</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>user_id</code>(string): ID del usuario</p>\n</li>\n<li><p><code>payment_date</code>(string): Fecha de pago (si aplica)</p>\n</li>\n<li><p><code>project_name</code>(string): Nombre del proyecto asociado</p>\n</li>\n<li><p><code>rule_name</code>(string): Nombre de la regla (si aplica)</p>\n</li>\n<li><p><code>amount</code>(string): Monto relacionado con la actividad</p>\n</li>\n<li><p><code>title</code>(string): Título descriptivo</p>\n</li>\n<li><p><code>message</code>(string): Mensaje explicativo</p>\n</li>\n<li><p><code>footer</code>(string): Texto complementario (si existe)</p>\n</li>\n<li><p><code>created_at</code>(string): Fecha de creación de la actividad</p>\n</li>\n<li><p><code>project</code>(string): ID del proyecto asociado</p>\n</li>\n<li><p><code>rule</code>(string): ID de la regla asociada con la actividad</p>\n</li>\n<li><p><code>payment</code>(string or null): ID del pago asociado con la actividad</p>\n</li>\n<li><p><code>saving</code>(string): ID del ahorro asociado con la actividad.</p>\n</li>\n</ul>\n<p>La respuesta también incluye información de paginación, como:</p>\n<ul>\n<li><p><code>next</code>(string or null): URL de la siguiente página</p>\n</li>\n<li><p><code>previous</code>(string or null): URL de la página anterior</p>\n</li>\n<li><p><code>total_pages</code>(number): Total de páginas disponibles</p>\n</li>\n<li><p><code>current_page</code>(number): Página actual</p>\n</li>\n<li><p><code>offset</code>(number): Índice de desplazamiento</p>\n</li>\n<li><p><code>count</code>(number): Total de elementos</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"next\": { \"type\": [\"string\", \"null\"] },\n    \"previous\": { \"type\": [\"string\", \"null\"] },\n    \"total_pages\": { \"type\": \"integer\" },\n    \"current_page\": { \"type\": \"integer\" },\n    \"offset\": { \"type\": \"integer\" },\n    \"count\": { \"type\": \"integer\" },\n    \"results\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\" },\n          \"activity_type\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\" },\n              \"catalog\": { \"type\": \"string\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"icon\": { \"type\": \"string\" },\n                  \"title\": { \"type\": \"string\" },\n                  \"message\": { \"type\": \"string\" }\n                }\n              }\n            }\n          },\n          \"user_id\": { \"type\": \"string\" },\n          \"payment_date\": { \"type\": [\"string\", \"null\"] },\n          \"project_name\": { \"type\": \"string\" },\n          \"rule_name\": { \"type\": \"string\" },\n          \"amount\": { \"type\": \"string\" },\n          \"title\": { \"type\": \"string\" },\n          \"message\": { \"type\": \"string\" },\n          \"footer\": { \"type\": \"string\" },\n          \"created_at\": { \"type\": \"string\" },\n          \"project\": { \"type\": \"string\" },\n          \"rule\": { \"type\": \"string\" },\n          \"payment\": { \"type\": [\"string\", \"null\"] },\n          \"saving\": { \"type\": \"string\" }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","activities",""],"host":["{{host_app}}"],"query":[{"disabled":true,"key":"page_size","value":"1"},{"disabled":true,"key":"paginate","value":"false"}],"variable":[]}},"response":[{"id":"48b7e409-4616-404a-b32d-c0bdbe71fabe","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/activities/","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","activities",""],"query":[{"key":"page_size","value":"1","disabled":true},{"key":"paginate","value":"false","type":"text","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 22:20:19 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"4585"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"42f1549d-2edd-4258-b494-0581100fe6c1"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LWeRkFTzoAMEZhw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838dda3-13006a36019bfc28247fd096;Parent=79e57e5ec9e2ab54;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"next\": null,\n    \"previous\": null,\n    \"total_pages\": 1,\n    \"current_page\": 1,\n    \"offset\": 0,\n    \"count\": 6,\n    \"results\": [\n        {\n            \"id\": \"b83f991d-0196-490b-84a7-6640db61037b\",\n            \"activity_type\": {\n                \"id\": \"191ff7c3-29a7-4974-8d5a-0a777cf00e51\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_manual_withdrawal\",\n                \"description\": \"Regla ejecutada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/withdrawal.svg\",\n                    \"title\": \"Retiro manual\",\n                    \"message\": \"Retiró de la meta\"\n                }\n            },\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"payment_date\": null,\n            \"project_name\": \"\",\n            \"rule_name\": \"Ahorro manual\",\n            \"amount\": \"-1000.00\",\n            \"title\": \"Retiro manual\",\n            \"message\": \"Retiró de la meta\",\n            \"footer\": \"\",\n            \"created_at\": \"2025-05-29T15:50:24.919641-06:00\",\n            \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n            \"rule\": \"52e86035-4347-49bc-9996-a072b45f2ddb\",\n            \"payment\": null,\n            \"saving\": \"5126f70a-cb8c-4fff-b474-0ef29dc728ea\"\n        },\n        {\n            \"id\": \"202e7996-7dce-4f23-9be0-4fd75c6c70d4\",\n            \"activity_type\": {\n                \"id\": \"191ff7c3-29a7-4974-8d5a-0a777cf00e51\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_manual_withdrawal\",\n                \"description\": \"Regla ejecutada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/withdrawal.svg\",\n                    \"title\": \"Retiro manual\",\n                    \"message\": \"Retiró de la meta\"\n                }\n            },\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"payment_date\": null,\n            \"project_name\": \"\",\n            \"rule_name\": \"Ahorro manual\",\n            \"amount\": \"-1000.00\",\n            \"title\": \"Retiro manual\",\n            \"message\": \"Retiró de la meta\",\n            \"footer\": \"\",\n            \"created_at\": \"2025-05-29T15:41:39.962119-06:00\",\n            \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n            \"rule\": \"52e86035-4347-49bc-9996-a072b45f2ddb\",\n            \"payment\": null,\n            \"saving\": \"61abf1d8-2b1d-41c6-b4d1-d8f7015d05f5\"\n        },\n        {\n            \"id\": \"f4635aec-e56a-4046-b69b-922ef99fbf7b\",\n            \"activity_type\": {\n                \"id\": \"fb472d6a-3916-4836-bbf8-3433b03213fe\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_project_edited\",\n                \"description\": \"Meta modificada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/edit_circle.svg\",\n                    \"title\": \"Meta editada\",\n                    \"message\": \"La meta fue editada.\"\n                }\n            },\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"payment_date\": null,\n            \"project_name\": \"Viaje a japon\",\n            \"rule_name\": null,\n            \"amount\": \"20000.00\",\n            \"title\": \"Meta editada\",\n            \"message\": \"La meta fue editada.\",\n            \"footer\": \"\",\n            \"created_at\": \"2025-05-29T15:40:57.425845-06:00\",\n            \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n            \"rule\": null,\n            \"payment\": null,\n            \"saving\": null\n        },\n        {\n            \"id\": \"5179819b-cadf-4938-863c-0596707ce30d\",\n            \"activity_type\": {\n                \"id\": \"7e98b933-a77a-41a7-ad23-425531770cfb\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_manual_saving\",\n                \"description\": \"Regla ejecutada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/payment.svg\",\n                    \"title\": \"Abono manual\",\n                    \"message\": \"Abonó a una meta\"\n                }\n            },\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"payment_date\": null,\n            \"project_name\": \"\",\n            \"rule_name\": \"Ahorro manual\",\n            \"amount\": \"155.00\",\n            \"title\": \"Abono manual\",\n            \"message\": \"Abonó a una meta\",\n            \"footer\": \"\",\n            \"created_at\": \"2025-05-29T15:21:12.218022-06:00\",\n            \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n            \"rule\": \"52e86035-4347-49bc-9996-a072b45f2ddb\",\n            \"payment\": null,\n            \"saving\": \"16f16ece-ccb3-4381-bc02-a2906de1fe14\"\n        },\n        {\n            \"id\": \"05b3e3cb-00c9-497b-bb0c-1617f39450df\",\n            \"activity_type\": {\n                \"id\": \"7e98b933-a77a-41a7-ad23-425531770cfb\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_manual_saving\",\n                \"description\": \"Regla ejecutada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/payment.svg\",\n                    \"title\": \"Abono manual\",\n                    \"message\": \"Abonó a una meta\"\n                }\n            },\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"payment_date\": null,\n            \"project_name\": \"\",\n            \"rule_name\": \"Ahorro manual\",\n            \"amount\": \"155.00\",\n            \"title\": \"Abono manual\",\n            \"message\": \"Abonó a una meta\",\n            \"footer\": \"\",\n            \"created_at\": \"2025-05-29T14:23:05.313988-06:00\",\n            \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n            \"rule\": \"52e86035-4347-49bc-9996-a072b45f2ddb\",\n            \"payment\": null,\n            \"saving\": \"f1b974da-2d13-46fd-a32e-ee35d1e9679a\"\n        },\n        {\n            \"id\": \"8c84e348-40a1-4c3c-8ed0-01256625315c\",\n            \"activity_type\": {\n                \"id\": \"087febc2-6f28-4f64-810f-e358019efba6\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_project_created\",\n                \"description\": \"Meta creada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/add_circle.svg\",\n                    \"title\": \"Meta creada\",\n                    \"message\": \"Creaste una meta {project.project_category.metadata.name}.\"\n                }\n            },\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"payment_date\": null,\n            \"project_name\": \"Viaje a japon\",\n            \"rule_name\": null,\n            \"amount\": \"20000.00\",\n            \"title\": \"Meta creada\",\n            \"message\": \"Creaste una meta Vacaciones.\",\n            \"footer\": \"\",\n            \"created_at\": \"2025-05-29T13:08:05.447377-06:00\",\n            \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n            \"rule\": null,\n            \"payment\": null,\n            \"saving\": null\n        }\n    ]\n}"}],"_postman_id":"07ece258-96f7-4abb-9731-131733ec58d3"},{"name":"Lista de movimientos","event":[{"listen":"test","script":{"id":"2bac18e0-bb3c-4750-aa3c-8174010563fb","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    next: { type: 'string', optional: true },\r","    previous: { type: 'string', optional: true },\r","    total_pages: 'number',\r","    current_page: 'number',\r","    offset: 'number',\r","    count: 'number',\r","    results: 'array'\r","};\r","\r","const resultProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    amount: 'string',\r","    payment_date: 'string',\r","    from_account: 'string',\r","    to_account: 'string',\r","    created_at: 'string',\r","    updated_at: 'string',\r","    user_external_id: 'string',\r","    retries: 'number',\r","    project: 'object',\r","    payment_status: 'object',\r","    savings: 'array'\r","};\r","\r","const projectProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    project_name: 'string',\r","    total: 'string',\r","    progress: 'string',\r","    processing: 'string',\r","    pending: 'string',\r","    from_account: 'string',\r","    to_account: 'string',\r","    goal_date: 'string',\r","    created_at: 'string',\r","    updated_at: 'string',\r","    deleted_at: { type: 'string', optional: true },\r","    project_category: 'string',\r","    project_status: 'string'\r","};\r","\r","const paymentStatusProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    title: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the results array\r","pm.test(\"Results have expected properties with correct types\", () => {\r","    if (responseJson.results && responseJson.results.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0], resultProperties);\r","        \r","        // Check properties of the project object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].project, projectProperties);\r","        \r","        // Check properties of the payment_status object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].payment_status, paymentStatusProperties);\r","        \r","        // Check metadata properties of the payment_status object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].payment_status.metadata, metadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"db2e874d-769a-4a44-88f9-4f2d9f295d94","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/payments/","description":"<p>Este endpoint permite recuperar la información de pagos asociados a un proyecto específico perteneciente a un usuario.</p>\n<img src=\"https://content.pstmn.io/f51a98c6-35a5-4ee7-bc93-e9fce1ba0ba9/TWV0YS1QYXltZW50cy5wbmc=\" width=\"100\" height=\"110\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/payments/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_id</code> (string): ID del proyecto</p>\n</li>\n</ul>\n</li>\n<li><p>Parámetros de query: Se agregan al final de la ruta, sirven principalmente para manejar la paginación de la petición. Ejm: <code>/payments/?page=1&amp;page_size=10</code></p>\n<ul>\n<li><p><code>page</code>(entero): Número de página para la paginación de resultados.</p>\n</li>\n<li><p><code>page_size</code>(number): Cantidad de resultados que se incluirán por página.</p>\n</li>\n<li><p><code>date_month</code>(string): Fecha en formato \"YYYY-mm\" de la cual se realizara la consulta.</p>\n</li>\n<li><p><code>paginate</code>(bool): Booleano que indica si se desea paginar la respuesta.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\"><strong>Request Body:</strong></h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\"><strong>Response</strong></h4>\n<ul>\n<li><p><code>id</code>(string): ID del pago.</p>\n</li>\n<li><p><code>user_id</code>(string): ID del usuario.</p>\n</li>\n<li><p><code>amount</code>(string): Monto que pago el usuario</p>\n</li>\n<li><p><code>payment_date</code>(string): Fecha de creación del pago</p>\n</li>\n<li><p><code>from_account</code> (string): Cuenta de origen de los fondos.</p>\n</li>\n<li><p><code>to_account</code> (string): Cuenta destino de los fondos.</p>\n</li>\n<li><p><code>created_at</code>(string): Fecha de creación del abono.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de última actualización.</p>\n</li>\n<li><p><code>user_external_id</code>(string or null): Identificador externo del usuario.</p>\n</li>\n<li><p><code>retries</code>(string): Cantidad de intentos hechos para realizar el pago.</p>\n</li>\n<li><p><code>project</code>(object): Detalles del proyecto asociado al pago, incluyendo:</p>\n<ul>\n<li><p><code>id</code>(string): ID del proyecto</p>\n</li>\n<li><p><code>goal_date</code> (string): Fecha objetivo del proyecto.</p>\n</li>\n<li><p><code>total</code> (number): Monto total asociado al proyecto.</p>\n</li>\n<li><p><code>project_name</code> (string): Nombre del proyecto.</p>\n</li>\n<li><p><code>user_id</code>(string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>progress</code> (number): Monto ya ahorrado o progresado en el proyecto.</p>\n</li>\n<li><p><code>processing</code> (number): Monto actualmente en proceso de ahorro.</p>\n</li>\n<li><p><code>pending</code> (number): Monto pendiente por ahorrar.</p>\n</li>\n<li><p><code>from_account</code> (string): Cuenta de origen de los fondos.</p>\n</li>\n<li><p><code>to_account</code> (string): Cuenta destino del ahorro.</p>\n</li>\n<li><p><code>investment_returns</code>(number): Importe ganado por las inversiones.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha de creación del proyecto.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de última actualización.</p>\n</li>\n<li><p><code>deleted_at</code> (null or string): Fecha de eliminación, si aplica.</p>\n</li>\n<li><p><code>project_category</code> (string): ID de la categoría del proyecto.</p>\n</li>\n<li><p><code>project_status</code> (string): ID del estado actual del proyecto.</p>\n</li>\n<li><p><code>project_config</code> (string): ID del estado la configuración del proyecto.</p>\n</li>\n</ul>\n</li>\n<li><p><code>payment_status</code>(object): Detalles del estado del pago, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del estado del pago.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del estado del pago.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>, <code>color</code>, <code>title.</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>payment_source</code>(object): Detalles del origen del pago, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del origen del pago.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del origen del pago.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>, <code>color</code>, <code>title.</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>savings</code>(array of objects): Lista de objetos <code>saving</code>, donde cada uno de estos incluye:</p>\n<ul>\n<li><p><code>id</code>(string): ID del ahorro</p>\n</li>\n<li><p><code>saving_status</code>(object): Detalle del estado del ahorro, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del estado del ahorro.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del estado de ahorro.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional.</p>\n</li>\n</ul>\n</li>\n<li><p><code>activity</code>(object): Detalle de la actividad asociada, incluyendo:</p>\n<ul>\n<li><p><code>id</code>(string): ID de la actividad</p>\n</li>\n<li><p><code>activity_type</code>(object): Detalles del tipo de actividad, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del tipo de actividad</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del tipo de actividad</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>, <code>title</code>, <code>message</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>user_id</code>(string): ID del usuario</p>\n</li>\n<li><p><code>payment_date</code>(string): Fecha de pago (si aplica)</p>\n</li>\n<li><p><code>project_name</code>(string): Nombre del proyecto asociado</p>\n</li>\n<li><p><code>rule_name</code>(string): Nombre de la regla (si aplica)</p>\n</li>\n<li><p><code>amount</code>(string): Monto relacionado con la actividad</p>\n</li>\n<li><p><code>title</code>(string): Título descriptivo</p>\n</li>\n<li><p><code>message</code>(string): Mensaje explicativo</p>\n</li>\n<li><p><code>footer</code>(string): Texto complementario (si existe)</p>\n</li>\n<li><p><code>created_at</code>(string): Fecha de creación de la actividad</p>\n</li>\n<li><p><code>project</code>(string): ID del proyecto asociado</p>\n</li>\n<li><p><code>rule</code>(string): ID de la regla asociada con la actividad</p>\n</li>\n<li><p><code>payment</code>(string or null): ID del pago asociado con la actividad</p>\n</li>\n<li><p><code>saving</code>(string): ID del ahorro asociado con la actividad.</p>\n</li>\n</ul>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario relacionado al ahorro.</p>\n</li>\n<li><p><code>payment_date</code> (string): Fecha del pago asociado al ahorro.</p>\n</li>\n<li><p><code>amount</code> (string): Monto del ahorro.</p>\n</li>\n<li><p><code>saving_date</code> (string): Fecha del ahorro.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha de creación del registro de ahorro.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de última actualización.</p>\n</li>\n<li><p><code>project</code> (string): Proyecto al que pertenece el ahorro.</p>\n</li>\n<li><p><code>rule</code> (string): Regla asociada.</p>\n</li>\n<li><p><code>payment</code> (string): Pago relacionado.</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>La respuesta también incluye información de paginación, como:</p>\n<ul>\n<li><p><code>next</code>(string or null): URL de la siguiente página</p>\n</li>\n<li><p><code>previous</code>(string or null): URL de la página anterior</p>\n</li>\n<li><p><code>total_pages</code>(number): Total de páginas disponibles</p>\n</li>\n<li><p><code>current_page</code>(number): Página actual</p>\n</li>\n<li><p><code>offset</code>(number): Índice de desplazamiento</p>\n</li>\n<li><p><code>count</code>(number): Total de elementos</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"next\": { \"type\": [\"string\", \"null\"] },\n    \"previous\": { \"type\": [\"string\", \"null\"] },\n    \"total_pages\": { \"type\": \"integer\" },\n    \"current_page\": { \"type\": \"integer\" },\n    \"offset\": { \"type\": \"integer\" },\n    \"count\": { \"type\": \"integer\" },\n    \"results\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"amount\": { \"type\": \"string\" },\n          \"payment_date\": { \"type\": \"string\", \"format\": \"date\" },\n          \"from_account\": { \"type\": \"string\" },\n          \"to_account\": { \"type\": \"string\" },\n          \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"user_external_id\": { \"type\": [\"string\", \"null\"] },\n          \"retries\": { \"type\": \"integer\" },\n          \"project\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"goal_date\": { \"type\": \"string\", \"format\": \"date\" },\n              \"total\": { \"type\": \"string\" },\n              \"project_name\": { \"type\": \"string\" },\n              \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"progress\": { \"type\": \"string\" },\n              \"processing\": { \"type\": \"string\" },\n              \"pending\": { \"type\": \"string\" },\n              \"from_account\": { \"type\": \"string\" },\n              \"to_account\": { \"type\": \"string\" },\n              \"investment_returns\": { \"type\": \"string\" },\n              \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n              \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n              \"deleted_at\": { \"type\": [\"string\", \"null\"], \"format\": \"date-time\" },\n              \"project_category\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"project_status\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"project_config\": { \"type\": \"string\", \"format\": \"uuid\" }\n            }\n          },\n          \"payment_status\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"icon\": { \"type\": \"string\" },\n                  \"color\": { \"type\": \"string\" },\n                  \"title\": { \"type\": \"string\" }\n                }\n              }\n            }\n          },\n          \"payment_source\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"icon\": { \"type\": \"string\" },\n                  \"color\": { \"type\": \"string\" },\n                  \"title\": { \"type\": \"string\" }\n                }\n              }\n            }\n          },\n          \"savings\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n                \"saving_status\": {\n                  \"type\": \"object\",\n                  \"properties\": {\n                    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n                    \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n                    \"item_name\": { \"type\": \"string\" },\n                    \"description\": { \"type\": \"string\" },\n                    \"metadata\": { \"type\": \"object\" }\n                  }\n                },\n                \"activity\": {\n                  \"type\": \"object\",\n                  \"properties\": {\n                    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n                    \"activity_type\": {\n                      \"type\": \"object\",\n                      \"properties\": {\n                        \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n                        \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n                        \"item_name\": { \"type\": \"string\" },\n                        \"description\": { \"type\": \"string\" },\n                        \"metadata\": {\n                          \"type\": \"object\",\n                          \"properties\": {\n                            \"icon\": { \"type\": \"string\" },\n                            \"title\": { \"type\": \"string\" },\n                            \"message\": { \"type\": \"string\" }\n                          }\n                        }\n                      }\n                    },\n                    \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n                    \"payment_date\": { \"type\": [\"string\", \"null\"] },\n                    \"project_name\": { \"type\": \"string\" },\n                    \"rule_name\": { \"type\": \"string\" },\n                    \"amount\": { \"type\": \"string\" },\n                    \"title\": { \"type\": \"string\" },\n                    \"message\": { \"type\": \"string\" },\n                    \"footer\": { \"type\": \"string\" },\n                    \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n                    \"project\": { \"type\": \"string\", \"format\": \"uuid\" },\n                    \"rule\": { \"type\": \"string\", \"format\": \"uuid\" },\n                    \"payment\": { \"type\": [\"string\", \"null\"], \"format\": \"uuid\" },\n                    \"saving\": { \"type\": \"string\", \"format\": \"uuid\" }\n                  }\n                },\n                \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n                \"payment_date\": { \"type\": \"string\", \"format\": \"date\" },\n                \"amount\": { \"type\": \"string\" },\n                \"saving_date\": { \"type\": \"string\", \"format\": \"date-time\" },\n                \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n                \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n                \"project\": { \"type\": \"string\", \"format\": \"uuid\" },\n                \"rule\": { \"type\": \"string\", \"format\": \"uuid\" },\n                \"payment\": { \"type\": \"string\", \"format\": \"uuid\" }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","payments",""],"host":["{{host_app}}"],"query":[{"disabled":true,"key":"page","value":"1"},{"disabled":true,"key":"page_size","value":"1"},{"disabled":true,"key":"paginate","value":"true"},{"disabled":true,"key":"date_month","value":"2024-10"}],"variable":[]}},"response":[{"id":"c11f68bc-8795-45bc-b66e-f7b071180726","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/payments/","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","payments",""],"query":[{"key":"page","value":"1","disabled":true},{"key":"page_size","value":"1","disabled":true},{"key":"paginate","value":"false","type":"text","disabled":true},{"key":"date_month","value":"2024-10","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 22:35:15 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"12547"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"de9c5eed-7d98-46db-8b0e-85b35f36dbac"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LWgdgF5-IAMEkHA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838e122-1ce094dd2f93bef827adb645;Parent=5041f9a6bf0ebd71;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"next\": null,\n    \"previous\": null,\n    \"total_pages\": 1,\n    \"current_page\": 1,\n    \"offset\": 0,\n    \"count\": 4,\n    \"results\": [\n        {\n            \"id\": \"28a8868a-233d-4bbd-b7ff-387ad28168c5\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"amount\": \"-1000.00\",\n            \"payment_date\": \"2025-05-29\",\n            \"from_account\": \"test_user_api_2_account_1\",\n            \"to_account\": \"test_user_api_2_account_2\",\n            \"created_at\": \"2025-05-29T15:50:24.892614-06:00\",\n            \"updated_at\": \"2025-05-29T15:50:24.892631-06:00\",\n            \"user_external_id\": null,\n            \"retries\": 0,\n            \"project\": {\n                \"id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                \"goal_date\": \"2030-10-30\",\n                \"total\": \"20000.00\",\n                \"project_name\": \"Viaje a japon\",\n                \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n                \"progress\": \"7000.00\",\n                \"processing\": \"0.00\",\n                \"pending\": \"0.00\",\n                \"from_account\": \"test_user_api_2_account_1\",\n                \"to_account\": \"test_user_api_2_account_2\",\n                \"investment_returns\": \"0.00\",\n                \"created_at\": \"2025-05-29T13:08:05.428608-06:00\",\n                \"updated_at\": \"2025-05-29T15:50:24.913710-06:00\",\n                \"deleted_at\": null,\n                \"project_category\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                \"project_status\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"project_config\": \"deead368-205e-464b-9d8c-82cb93517eef\"\n            },\n            \"payment_status\": {\n                \"id\": \"fbbb15cf-258a-4736-b72d-6f73362799d0\",\n                \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n                \"item_name\": \"payment_status_done\",\n                \"description\": \"Ahorro enviado a cuenta\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\",\n                    \"color\": \"#191B1D\",\n                    \"title\": \"Ahorro exitoso\"\n                }\n            },\n            \"payment_source\": {\n                \"id\": \"f6adcf1e-d2cb-466c-89fb-f906148d37b1\",\n                \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n                \"item_name\": \"manual_withdrawal\",\n                \"description\": \"Pagos generados automaticamente cuando los usuarios realizan retiros manuales de sus metas\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/manual_withdrawal.svg\",\n                    \"color\": \"#FF5F54\",\n                    \"title\": \"Retiro exitoso\"\n                }\n            },\n            \"savings\": [\n                {\n                    \"id\": \"5126f70a-cb8c-4fff-b474-0ef29dc728ea\",\n                    \"saving_status\": {\n                        \"id\": \"7660bd44-e4f8-42e8-8969-10d120bfbe9f\",\n                        \"catalog\": \"fe431414-e746-48cb-ac16-4d06db2b85e8\",\n                        \"item_name\": \"saving_status_done\",\n                        \"description\": \"El monto del ahorro generado se transfirió a la cuenta de destino\",\n                        \"metadata\": {}\n                    },\n                    \"activity\": {\n                        \"id\": \"b83f991d-0196-490b-84a7-6640db61037b\",\n                        \"activity_type\": {\n                            \"id\": \"191ff7c3-29a7-4974-8d5a-0a777cf00e51\",\n                            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                            \"item_name\": \"activity_type_manual_withdrawal\",\n                            \"description\": \"Regla ejecutada\",\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/icons/withdrawal.svg\",\n                                \"title\": \"Retiro manual\",\n                                \"message\": \"Retiró de la meta\"\n                            }\n                        },\n                        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n                        \"payment_date\": null,\n                        \"project_name\": \"\",\n                        \"rule_name\": \"Ahorro manual\",\n                        \"amount\": \"-1000.00\",\n                        \"title\": \"Retiro manual\",\n                        \"message\": \"Retiró de la meta\",\n                        \"footer\": \"\",\n                        \"created_at\": \"2025-05-29T15:50:24.919641-06:00\",\n                        \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                        \"rule\": \"52e86035-4347-49bc-9996-a072b45f2ddb\",\n                        \"payment\": null,\n                        \"saving\": \"5126f70a-cb8c-4fff-b474-0ef29dc728ea\"\n                    },\n                    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n                    \"payment_date\": \"2025-05-29\",\n                    \"amount\": \"-1000.00\",\n                    \"saving_date\": \"2025-05-29T15:50:24.909093-06:00\",\n                    \"created_at\": \"2025-05-29T15:50:24.909108-06:00\",\n                    \"updated_at\": \"2025-05-29T15:50:24.909116-06:00\",\n                    \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                    \"rule\": \"52e86035-4347-49bc-9996-a072b45f2ddb\",\n                    \"payment\": \"28a8868a-233d-4bbd-b7ff-387ad28168c5\"\n                }\n            ]\n        },\n        {\n            \"id\": \"7d82d3fe-5e77-4615-90fb-d236f27f97ea\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"amount\": \"-1000.00\",\n            \"payment_date\": \"2025-05-29\",\n            \"from_account\": \"test_user_api_2_account_1\",\n            \"to_account\": \"test_user_api_2_account_2\",\n            \"created_at\": \"2025-05-29T15:41:39.932337-06:00\",\n            \"updated_at\": \"2025-05-29T15:41:39.932354-06:00\",\n            \"user_external_id\": null,\n            \"retries\": 0,\n            \"project\": {\n                \"id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                \"goal_date\": \"2030-10-30\",\n                \"total\": \"20000.00\",\n                \"project_name\": \"Viaje a japon\",\n                \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n                \"progress\": \"7000.00\",\n                \"processing\": \"0.00\",\n                \"pending\": \"0.00\",\n                \"from_account\": \"test_user_api_2_account_1\",\n                \"to_account\": \"test_user_api_2_account_2\",\n                \"investment_returns\": \"0.00\",\n                \"created_at\": \"2025-05-29T13:08:05.428608-06:00\",\n                \"updated_at\": \"2025-05-29T15:50:24.913710-06:00\",\n                \"deleted_at\": null,\n                \"project_category\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                \"project_status\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"project_config\": \"deead368-205e-464b-9d8c-82cb93517eef\"\n            },\n            \"payment_status\": {\n                \"id\": \"fbbb15cf-258a-4736-b72d-6f73362799d0\",\n                \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n                \"item_name\": \"payment_status_done\",\n                \"description\": \"Ahorro enviado a cuenta\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\",\n                    \"color\": \"#191B1D\",\n                    \"title\": \"Ahorro exitoso\"\n                }\n            },\n            \"payment_source\": {\n                \"id\": \"f6adcf1e-d2cb-466c-89fb-f906148d37b1\",\n                \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n                \"item_name\": \"manual_withdrawal\",\n                \"description\": \"Pagos generados automaticamente cuando los usuarios realizan retiros manuales de sus metas\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/manual_withdrawal.svg\",\n                    \"color\": \"#FF5F54\",\n                    \"title\": \"Retiro exitoso\"\n                }\n            },\n            \"savings\": [\n                {\n                    \"id\": \"61abf1d8-2b1d-41c6-b4d1-d8f7015d05f5\",\n                    \"saving_status\": {\n                        \"id\": \"7660bd44-e4f8-42e8-8969-10d120bfbe9f\",\n                        \"catalog\": \"fe431414-e746-48cb-ac16-4d06db2b85e8\",\n                        \"item_name\": \"saving_status_done\",\n                        \"description\": \"El monto del ahorro generado se transfirió a la cuenta de destino\",\n                        \"metadata\": {}\n                    },\n                    \"activity\": {\n                        \"id\": \"202e7996-7dce-4f23-9be0-4fd75c6c70d4\",\n                        \"activity_type\": {\n                            \"id\": \"191ff7c3-29a7-4974-8d5a-0a777cf00e51\",\n                            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                            \"item_name\": \"activity_type_manual_withdrawal\",\n                            \"description\": \"Regla ejecutada\",\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/icons/withdrawal.svg\",\n                                \"title\": \"Retiro manual\",\n                                \"message\": \"Retiró de la meta\"\n                            }\n                        },\n                        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n                        \"payment_date\": null,\n                        \"project_name\": \"\",\n                        \"rule_name\": \"Ahorro manual\",\n                        \"amount\": \"-1000.00\",\n                        \"title\": \"Retiro manual\",\n                        \"message\": \"Retiró de la meta\",\n                        \"footer\": \"\",\n                        \"created_at\": \"2025-05-29T15:41:39.962119-06:00\",\n                        \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                        \"rule\": \"52e86035-4347-49bc-9996-a072b45f2ddb\",\n                        \"payment\": null,\n                        \"saving\": \"61abf1d8-2b1d-41c6-b4d1-d8f7015d05f5\"\n                    },\n                    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n                    \"payment_date\": \"2025-05-29\",\n                    \"amount\": \"-1000.00\",\n                    \"saving_date\": \"2025-05-29T15:41:39.951514-06:00\",\n                    \"created_at\": \"2025-05-29T15:41:39.951531-06:00\",\n                    \"updated_at\": \"2025-05-29T15:41:39.951538-06:00\",\n                    \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                    \"rule\": \"52e86035-4347-49bc-9996-a072b45f2ddb\",\n                    \"payment\": \"7d82d3fe-5e77-4615-90fb-d236f27f97ea\"\n                }\n            ]\n        },\n        {\n            \"id\": \"512c1cf1-ba26-40d5-b711-b3d2a4d099e5\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"amount\": \"155.00\",\n            \"payment_date\": \"2025-05-29\",\n            \"from_account\": \"test_user_api_2_account_1\",\n            \"to_account\": \"test_user_api_2_account_2\",\n            \"created_at\": \"2025-05-29T15:21:12.190920-06:00\",\n            \"updated_at\": \"2025-05-29T15:21:12.190937-06:00\",\n            \"user_external_id\": null,\n            \"retries\": 0,\n            \"project\": {\n                \"id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                \"goal_date\": \"2030-10-30\",\n                \"total\": \"20000.00\",\n                \"project_name\": \"Viaje a japon\",\n                \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n                \"progress\": \"7000.00\",\n                \"processing\": \"0.00\",\n                \"pending\": \"0.00\",\n                \"from_account\": \"test_user_api_2_account_1\",\n                \"to_account\": \"test_user_api_2_account_2\",\n                \"investment_returns\": \"0.00\",\n                \"created_at\": \"2025-05-29T13:08:05.428608-06:00\",\n                \"updated_at\": \"2025-05-29T15:50:24.913710-06:00\",\n                \"deleted_at\": null,\n                \"project_category\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                \"project_status\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"project_config\": \"deead368-205e-464b-9d8c-82cb93517eef\"\n            },\n            \"payment_status\": {\n                \"id\": \"fbbb15cf-258a-4736-b72d-6f73362799d0\",\n                \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n                \"item_name\": \"payment_status_done\",\n                \"description\": \"Ahorro enviado a cuenta\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\",\n                    \"color\": \"#191B1D\",\n                    \"title\": \"Ahorro exitoso\"\n                }\n            },\n            \"payment_source\": {\n                \"id\": \"636057ca-a138-4450-88fe-18252fac506e\",\n                \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n                \"item_name\": \"manual_saving\",\n                \"description\": \"Payments que se generan bajo demanda ante los retiros o abonos manuales de los usuarios en las metas\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\",\n                    \"color\": \"#329B0B\",\n                    \"title\": \"Abono exitoso\"\n                }\n            },\n            \"savings\": [\n                {\n                    \"id\": \"16f16ece-ccb3-4381-bc02-a2906de1fe14\",\n                    \"saving_status\": {\n                        \"id\": \"7660bd44-e4f8-42e8-8969-10d120bfbe9f\",\n                        \"catalog\": \"fe431414-e746-48cb-ac16-4d06db2b85e8\",\n                        \"item_name\": \"saving_status_done\",\n                        \"description\": \"El monto del ahorro generado se transfirió a la cuenta de destino\",\n                        \"metadata\": {}\n                    },\n                    \"activity\": {\n                        \"id\": \"5179819b-cadf-4938-863c-0596707ce30d\",\n                        \"activity_type\": {\n                            \"id\": \"7e98b933-a77a-41a7-ad23-425531770cfb\",\n                            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                            \"item_name\": \"activity_type_manual_saving\",\n                            \"description\": \"Regla ejecutada\",\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/icons/payment.svg\",\n                                \"title\": \"Abono manual\",\n                                \"message\": \"Abonó a una meta\"\n                            }\n                        },\n                        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n                        \"payment_date\": null,\n                        \"project_name\": \"\",\n                        \"rule_name\": \"Ahorro manual\",\n                        \"amount\": \"155.00\",\n                        \"title\": \"Abono manual\",\n                        \"message\": \"Abonó a una meta\",\n                        \"footer\": \"\",\n                        \"created_at\": \"2025-05-29T15:21:12.218022-06:00\",\n                        \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                        \"rule\": \"52e86035-4347-49bc-9996-a072b45f2ddb\",\n                        \"payment\": null,\n                        \"saving\": \"16f16ece-ccb3-4381-bc02-a2906de1fe14\"\n                    },\n                    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n                    \"payment_date\": \"2025-05-29\",\n                    \"amount\": \"155.00\",\n                    \"saving_date\": \"2025-05-29T15:21:12.207448-06:00\",\n                    \"created_at\": \"2025-05-29T15:21:12.207464-06:00\",\n                    \"updated_at\": \"2025-05-29T15:21:12.207471-06:00\",\n                    \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                    \"rule\": \"52e86035-4347-49bc-9996-a072b45f2ddb\",\n                    \"payment\": \"512c1cf1-ba26-40d5-b711-b3d2a4d099e5\"\n                }\n            ]\n        },\n        {\n            \"id\": \"fb3b6a62-8bcf-48e4-a5bc-a2ae0e7fedfd\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"amount\": \"155.00\",\n            \"payment_date\": \"2025-05-29\",\n            \"from_account\": \"test_user_api_2_account_1\",\n            \"to_account\": \"test_user_api_2_account_2\",\n            \"created_at\": \"2025-05-29T14:23:05.282132-06:00\",\n            \"updated_at\": \"2025-05-29T14:23:05.282159-06:00\",\n            \"user_external_id\": null,\n            \"retries\": 0,\n            \"project\": {\n                \"id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                \"goal_date\": \"2030-10-30\",\n                \"total\": \"20000.00\",\n                \"project_name\": \"Viaje a japon\",\n                \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n                \"progress\": \"7000.00\",\n                \"processing\": \"0.00\",\n                \"pending\": \"0.00\",\n                \"from_account\": \"test_user_api_2_account_1\",\n                \"to_account\": \"test_user_api_2_account_2\",\n                \"investment_returns\": \"0.00\",\n                \"created_at\": \"2025-05-29T13:08:05.428608-06:00\",\n                \"updated_at\": \"2025-05-29T15:50:24.913710-06:00\",\n                \"deleted_at\": null,\n                \"project_category\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                \"project_status\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"project_config\": \"deead368-205e-464b-9d8c-82cb93517eef\"\n            },\n            \"payment_status\": {\n                \"id\": \"fbbb15cf-258a-4736-b72d-6f73362799d0\",\n                \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n                \"item_name\": \"payment_status_done\",\n                \"description\": \"Ahorro enviado a cuenta\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\",\n                    \"color\": \"#191B1D\",\n                    \"title\": \"Ahorro exitoso\"\n                }\n            },\n            \"payment_source\": {\n                \"id\": \"636057ca-a138-4450-88fe-18252fac506e\",\n                \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n                \"item_name\": \"manual_saving\",\n                \"description\": \"Payments que se generan bajo demanda ante los retiros o abonos manuales de los usuarios en las metas\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\",\n                    \"color\": \"#329B0B\",\n                    \"title\": \"Abono exitoso\"\n                }\n            },\n            \"savings\": [\n                {\n                    \"id\": \"f1b974da-2d13-46fd-a32e-ee35d1e9679a\",\n                    \"saving_status\": {\n                        \"id\": \"7660bd44-e4f8-42e8-8969-10d120bfbe9f\",\n                        \"catalog\": \"fe431414-e746-48cb-ac16-4d06db2b85e8\",\n                        \"item_name\": \"saving_status_done\",\n                        \"description\": \"El monto del ahorro generado se transfirió a la cuenta de destino\",\n                        \"metadata\": {}\n                    },\n                    \"activity\": {\n                        \"id\": \"05b3e3cb-00c9-497b-bb0c-1617f39450df\",\n                        \"activity_type\": {\n                            \"id\": \"7e98b933-a77a-41a7-ad23-425531770cfb\",\n                            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                            \"item_name\": \"activity_type_manual_saving\",\n                            \"description\": \"Regla ejecutada\",\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/icons/payment.svg\",\n                                \"title\": \"Abono manual\",\n                                \"message\": \"Abonó a una meta\"\n                            }\n                        },\n                        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n                        \"payment_date\": null,\n                        \"project_name\": \"\",\n                        \"rule_name\": \"Ahorro manual\",\n                        \"amount\": \"155.00\",\n                        \"title\": \"Abono manual\",\n                        \"message\": \"Abonó a una meta\",\n                        \"footer\": \"\",\n                        \"created_at\": \"2025-05-29T14:23:05.313988-06:00\",\n                        \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                        \"rule\": \"52e86035-4347-49bc-9996-a072b45f2ddb\",\n                        \"payment\": null,\n                        \"saving\": \"f1b974da-2d13-46fd-a32e-ee35d1e9679a\"\n                    },\n                    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n                    \"payment_date\": \"2025-05-29\",\n                    \"amount\": \"155.00\",\n                    \"saving_date\": \"2025-05-29T14:23:05.303433-06:00\",\n                    \"created_at\": \"2025-05-29T14:23:05.303450-06:00\",\n                    \"updated_at\": \"2025-05-29T14:23:05.303512-06:00\",\n                    \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                    \"rule\": \"52e86035-4347-49bc-9996-a072b45f2ddb\",\n                    \"payment\": \"fb3b6a62-8bcf-48e4-a5bc-a2ae0e7fedfd\"\n                }\n            ]\n        }\n    ]\n}"},{"id":"27c1c0a7-4075-4b02-b420-fc0353430fb4","name":"Successful Response - Empty","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/payments/?date_month=2024-10","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","payments",""],"query":[{"key":"page","value":"1","disabled":true},{"key":"page_size","value":"1","disabled":true},{"key":"paginate","value":"false","type":"text","disabled":true},{"key":"date_month","value":"2024-10"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 14:38:17 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"96"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"d1631944-2eae-4acc-abf9-d6c8a40c3303"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LYtiAGc1IAMEnlQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839c2d9-77d2ea527e72cfdf001af4d3;Parent=182de4a061679996;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"next\": null,\n    \"previous\": null,\n    \"total_pages\": 1,\n    \"current_page\": 1,\n    \"offset\": 0,\n    \"count\": 0,\n    \"results\": []\n}"},{"id":"34a591f6-b268-434b-8b21-82eacba29949","name":"Bad Request - Invalid date","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/payments/?date_month=2024-083&page=2&page_size=1","host":["{{host_app}}api-saving"],"path":["v1","saving-service","users","{{user_id}}","projects","{{project_id}}","payments",""],"query":[{"key":"date_month","value":"2024-083"},{"key":"page","value":"2"},{"key":"page_size","value":"1"}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Invalid date format.\"\n}"},{"id":"4e1d3f8b-a8cc-4231-920b-3de8aef65b86","name":"Bad Request - Invalid page","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/payments/?page=112421412","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","payments",""],"query":[{"key":"page","value":"112421412"},{"key":"page_size","value":"1","disabled":true},{"key":"paginate","value":"false","type":"text","disabled":true},{"key":"date_month","value":"2024-10","disabled":true}]}},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 14:37:41 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"26"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"b535ee5d-4de8-46d4-bbab-93d104b56ca8"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LYtcYGT-IAMEKtQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839c2b5-78a9bc9f7213fea925b7b08a;Parent=72a5df06e28532c2;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Invalid page.\"\n}"}],"_postman_id":"db2e874d-769a-4a44-88f9-4f2d9f295d94"},{"name":"Obtener detalles de un movimiento de ahorro","event":[{"listen":"test","script":{"id":"f9fabbe7-27eb-4ba7-b269-cd53d978ae53","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    amount: 'string',\r","    payment_date: 'string',\r","    from_account: 'string',\r","    to_account: 'string',\r","    created_at: 'string',\r","    updated_at: 'string',\r","    user_external_id: 'string',\r","    retries: 'number',\r","    project: 'object',\r","    payment_status: 'object',\r","    savings: 'array'\r","};\r","\r","const projectProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    project_name: 'string',\r","    total: 'string',\r","    progress: 'string',\r","    processing: 'string',\r","    pending: 'string',\r","    from_account: 'string',\r","    to_account: 'string',\r","    goal_date: 'string',\r","    created_at: 'string',\r","    updated_at: 'string',\r","    deleted_at: { type: 'string', optional: true },\r","    project_category: 'string',\r","    project_status: 'string'\r","};\r","\r","const paymentStatusProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    title: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the project object\r","pm.test(\"Project has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.project, projectProperties);\r","});\r","\r","// Check properties of the payment_status object\r","pm.test(\"Payment status has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.payment_status, paymentStatusProperties);\r","    \r","    // Check metadata properties of the payment_status object\r","    xerpaTestApi.checkObjectProperties(responseJson.payment_status.metadata, metadataProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"71acb418-d6f5-4a5c-b56c-e00c382dcfba","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/payments/{{payment_id}}/","description":"<p>Este endpoint permite obtener los detalles de un pago específico asociado a un proyecto de un usuario determinado.</p>\n<img src=\"https://content.pstmn.io/efd60349-79a4-4c3f-9983-fa84601724c8/TWV0YS1wYXltZW50LnBuZw==\" width=\"100\" height=\"110\" />\n\n<hr />\n<p>Request:</p>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/payments/{{payment_id}}/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): Identificador único del usuario.</p>\n</li>\n<li><p><code>project_id</code> (string): Identificador del proyecto.</p>\n</li>\n<li><p><code>payment_id</code> (string): Identificador del pago.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\"><strong>Request Body:</strong></h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta contendrá un JSON con los detalles del pago, en donde se incluye:</p>\n<ul>\n<li><p><code>id</code> (string): ID único del pago.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario asociado al pago.</p>\n</li>\n<li><p><code>amount</code> (string): Monto del pago.</p>\n</li>\n<li><p><code>payment_date</code> (string): Fecha del pago.</p>\n</li>\n<li><p><code>from_account</code> (string): Cuenta de origen del pago.</p>\n</li>\n<li><p><code>to_account</code> (string): Cuenta destino del pago.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha y hora de creación del registro del pago.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha y hora de la última actualización del registro.</p>\n</li>\n<li><p><code>user_external_id</code> (string): ID externo del usuario asociado al pago.</p>\n</li>\n<li><p><code>retries</code> (integer): Número de intentos de ejecución del pago.</p>\n</li>\n<li><p><code>project</code>(object): Detalle del proyecto asociado, este incluye:</p>\n<ul>\n<li><p><code>id</code>(string): ID único del proyecto.</p>\n</li>\n<li><p><code>goal_date</code>(string): Fecha objetivo del proyecto.</p>\n</li>\n<li><p><code>total</code>(string): Monto total de la meta.</p>\n</li>\n<li><p><code>project_name</code>(string): Nombre del proyecto.</p>\n</li>\n<li><p><code>user_id</code>(string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>progress</code>(string): Progreso del ahorro.</p>\n</li>\n<li><p><code>processing</code>(string): Monto en proceso.</p>\n</li>\n<li><p><code>pending</code>(string): Monto pendiente.</p>\n</li>\n<li><p><code>from_account</code>(string): Cuenta de origen de los fondos.</p>\n</li>\n<li><p><code>to_account</code>(string): Cuenta destino de los fondos.</p>\n</li>\n<li><p><code>investment_returns</code>(string): Importe ganado por las inversiones.</p>\n</li>\n<li><p><code>created_at</code>(string): Fecha de creación del proyecto.</p>\n</li>\n<li><p><code>updated_at</code>(string): Fecha de última actualización.</p>\n</li>\n<li><p><code>deleted_at</code>(string): Fecha de eliminación (si aplica).</p>\n</li>\n<li><p><code>project_category</code>(string): ID de la categoría del proyecto.</p>\n</li>\n<li><p><code>project_status</code>(string): ID del estado actual del proyecto.</p>\n</li>\n<li><p><code>project_config</code>(string): ID de la configuración actual del proyecto.</p>\n</li>\n</ul>\n</li>\n<li><p><code>payment_status</code>(object): Detalle del estado del pago, este incluye:</p>\n<ul>\n<li><p><code>id</code> (string): ID del estado del pago.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo al que pertenece el estado.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del estado.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del estado.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>, <code>color</code>, <code>title.</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>payment_source</code>(object): Detalle del origen del pago, este incluye:</p>\n<ul>\n<li><p><code>id</code> (string): ID del origen del pago.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del origen del pago.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del origen del pago.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>, <code>color</code>, <code>title.</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>savings</code>(array de objects): Lista de objetos <code>saving</code>, donde cada uno de estos incluye:</p>\n<ul>\n<li><p><code>id</code>(string): ID del ahorro</p>\n</li>\n<li><p><code>saving_status</code>(object): Detalle del estado del ahorro, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del estado del ahorro.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del estado de ahorro.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional.</p>\n</li>\n</ul>\n</li>\n<li><p><code>activity</code>(object): Detalle de la actividad asociada, incluyendo:</p>\n<ul>\n<li><p><code>id</code>(string): ID de la actividad</p>\n</li>\n<li><p><code>activity_type</code>(object): Detalles del tipo de actividad, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del tipo de actividad</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del tipo de actividad</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, como:</p>\n<ul>\n<li><code>icon</code>, <code>title</code>, <code>message</code></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>user_id</code>(string): ID del usuario</p>\n</li>\n<li><p><code>payment_date</code>(string): Fecha de pago (si aplica)</p>\n</li>\n<li><p><code>project_name</code>(string): Nombre del proyecto asociado</p>\n</li>\n<li><p><code>rule_name</code>(string): Nombre de la regla (si aplica)</p>\n</li>\n<li><p><code>amount</code>(string): Monto relacionado con la actividad</p>\n</li>\n<li><p><code>title</code>(string): Título descriptivo</p>\n</li>\n<li><p><code>message</code>(string): Mensaje explicativo</p>\n</li>\n<li><p><code>footer</code>(string): Texto complementario (si existe)</p>\n</li>\n<li><p><code>created_at</code>(string): Fecha de creación de la actividad</p>\n</li>\n<li><p><code>project</code>(string): ID del proyecto asociado</p>\n</li>\n<li><p><code>rule</code>(string): ID de la regla asociada con la actividad</p>\n</li>\n<li><p><code>payment</code>(string or null): ID del pago asociado con la actividad</p>\n</li>\n<li><p><code>saving</code>(string): ID del ahorro asociado con la actividad.</p>\n</li>\n</ul>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario relacionado al ahorro.</p>\n</li>\n<li><p><code>payment_date</code> (string): Fecha del pago asociado al ahorro.</p>\n</li>\n<li><p><code>amount</code> (string): Monto del ahorro.</p>\n</li>\n<li><p><code>saving_date</code> (string): Fecha del ahorro.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha de creación del registro de ahorro.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de última actualización.</p>\n</li>\n<li><p><code>project</code> (string): Proyecto al que pertenece el ahorro.</p>\n</li>\n<li><p><code>rule</code> (string): Regla asociada.</p>\n</li>\n<li><p><code>payment</code> (string): Pago relacionado.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"amount\": { \"type\": \"string\" },\n    \"payment_date\": { \"type\": \"string\", \"format\": \"date\" },\n    \"from_account\": { \"type\": \"string\" },\n    \"to_account\": { \"type\": \"string\" },\n    \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"user_external_id\": { \"type\": \"string\", \"nullable\": true },\n    \"retries\": { \"type\": \"integer\" },\n    \"project\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"goal_date\": { \"type\": \"string\", \"format\": \"date\" },\n        \"total\": { \"type\": \"string\" },\n        \"project_name\": { \"type\": \"string\" },\n        \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"progress\": { \"type\": \"string\" },\n        \"processing\": { \"type\": \"string\" },\n        \"pending\": { \"type\": \"string\" },\n        \"from_account\": { \"type\": \"string\" },\n        \"to_account\": { \"type\": \"string\" },\n        \"investment_returns\": { \"type\": \"string\" },\n        \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n        \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n        \"deleted_at\": { \"type\": \"string\", \"format\": \"date-time\", \"nullable\": true },\n        \"project_category\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"project_status\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"project_config\": { \"type\": \"string\", \"format\": \"uuid\" }\n      }\n    },\n    \"payment_status\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"item_name\": { \"type\": \"string\" },\n        \"description\": { \"type\": \"string\" },\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"icon\": { \"type\": \"string\" },\n            \"color\": { \"type\": \"string\" },\n            \"title\": { \"type\": \"string\" }\n          }\n        }\n      }\n    },\n    \"payment_source\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"item_name\": { \"type\": \"string\" },\n        \"description\": { \"type\": \"string\" },\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"icon\": { \"type\": \"string\" },\n            \"color\": { \"type\": \"string\" },\n            \"title\": { \"type\": \"string\" }\n          }\n        }\n      }\n    },\n    \"savings\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"saving_status\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": { \"type\": \"object\" }\n            }\n          },\n          \"activity\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"activity_type\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n                  \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n                  \"item_name\": { \"type\": \"string\" },\n                  \"description\": { \"type\": \"string\" },\n                  \"metadata\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"icon\": { \"type\": \"string\" },\n                      \"title\": { \"type\": \"string\" },\n                      \"message\": { \"type\": \"string\" }\n                    }\n                  }\n                }\n              },\n              \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"payment_date\": { \"type\": [\"string\", \"null\"], \"format\": \"date\" },\n              \"project_name\": { \"type\": \"string\" },\n              \"rule_name\": { \"type\": \"string\" },\n              \"amount\": { \"type\": \"string\" },\n              \"title\": { \"type\": \"string\" },\n              \"message\": { \"type\": \"string\" },\n              \"footer\": { \"type\": \"string\" },\n              \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n              \"project\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"rule\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"payment\": { \"type\": [\"string\", \"null\"], \"format\": \"uuid\" },\n              \"saving\": { \"type\": \"string\", \"format\": \"uuid\" }\n            }\n          },\n          \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"payment_date\": { \"type\": \"string\", \"format\": \"date\" },\n          \"amount\": { \"type\": \"string\" },\n          \"saving_date\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"project\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"rule\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"payment\": { \"type\": \"string\", \"format\": \"uuid\" }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","payments","{{payment_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"ce2c7f38-56ea-4e5e-958c-d0118239a136","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/payments/{{payment_id}}/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 15:39:18 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"3121"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"f7668ad3-826b-48a9-b602-c7ba57f5381e"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LY2eHHgOoAMEBCA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839d126-06f8796678c302240454d520;Parent=211c23134ecba8a8;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"28a8868a-233d-4bbd-b7ff-387ad28168c5\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"amount\": \"-1000.00\",\n    \"payment_date\": \"2025-05-29\",\n    \"from_account\": \"test_user_api_2_account_1\",\n    \"to_account\": \"test_user_api_2_account_2\",\n    \"created_at\": \"2025-05-29T15:50:24.892614-06:00\",\n    \"updated_at\": \"2025-05-29T15:50:24.892631-06:00\",\n    \"user_external_id\": null,\n    \"retries\": 0,\n    \"project\": {\n        \"id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n        \"goal_date\": \"2030-10-30\",\n        \"total\": \"20000.00\",\n        \"project_name\": \"Viaje a japon\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"progress\": \"9000.00\",\n        \"processing\": \"0.00\",\n        \"pending\": \"0.00\",\n        \"from_account\": \"test_user_api_2_account_1\",\n        \"to_account\": \"test_user_api_2_account_2\",\n        \"investment_returns\": \"0.00\",\n        \"created_at\": \"2025-05-29T13:08:05.428608-06:00\",\n        \"updated_at\": \"2025-05-30T09:38:56.852598-06:00\",\n        \"deleted_at\": null,\n        \"project_category\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n        \"project_status\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n        \"project_config\": \"deead368-205e-464b-9d8c-82cb93517eef\"\n    },\n    \"payment_status\": {\n        \"id\": \"fbbb15cf-258a-4736-b72d-6f73362799d0\",\n        \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n        \"item_name\": \"payment_status_done\",\n        \"description\": \"Ahorro enviado a cuenta\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\",\n            \"color\": \"#191B1D\",\n            \"title\": \"Ahorro exitoso\"\n        }\n    },\n    \"payment_source\": {\n        \"id\": \"f6adcf1e-d2cb-466c-89fb-f906148d37b1\",\n        \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n        \"item_name\": \"manual_withdrawal\",\n        \"description\": \"Pagos generados automaticamente cuando los usuarios realizan retiros manuales de sus metas\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/icons/manual_withdrawal.svg\",\n            \"color\": \"#FF5F54\",\n            \"title\": \"Retiro exitoso\"\n        }\n    },\n    \"savings\": [\n        {\n            \"id\": \"5126f70a-cb8c-4fff-b474-0ef29dc728ea\",\n            \"saving_status\": {\n                \"id\": \"7660bd44-e4f8-42e8-8969-10d120bfbe9f\",\n                \"catalog\": \"fe431414-e746-48cb-ac16-4d06db2b85e8\",\n                \"item_name\": \"saving_status_done\",\n                \"description\": \"El monto del ahorro generado se transfirió a la cuenta de destino\",\n                \"metadata\": {}\n            },\n            \"activity\": {\n                \"id\": \"b83f991d-0196-490b-84a7-6640db61037b\",\n                \"activity_type\": {\n                    \"id\": \"191ff7c3-29a7-4974-8d5a-0a777cf00e51\",\n                    \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                    \"item_name\": \"activity_type_manual_withdrawal\",\n                    \"description\": \"Regla ejecutada\",\n                    \"metadata\": {\n                        \"icon\": \"/assets/xerpa/global/img/icons/withdrawal.svg\",\n                        \"title\": \"Retiro manual\",\n                        \"message\": \"Retiró de la meta\"\n                    }\n                },\n                \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n                \"payment_date\": null,\n                \"project_name\": \"\",\n                \"rule_name\": \"Ahorro manual\",\n                \"amount\": \"-1000.00\",\n                \"title\": \"Retiro manual\",\n                \"message\": \"Retiró de la meta\",\n                \"footer\": \"\",\n                \"created_at\": \"2025-05-29T15:50:24.919641-06:00\",\n                \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                \"rule\": \"52e86035-4347-49bc-9996-a072b45f2ddb\",\n                \"payment\": null,\n                \"saving\": \"5126f70a-cb8c-4fff-b474-0ef29dc728ea\"\n            },\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"payment_date\": \"2025-05-29\",\n            \"amount\": \"-1000.00\",\n            \"saving_date\": \"2025-05-29T15:50:24.909093-06:00\",\n            \"created_at\": \"2025-05-29T15:50:24.909108-06:00\",\n            \"updated_at\": \"2025-05-29T15:50:24.909116-06:00\",\n            \"project\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n            \"rule\": \"52e86035-4347-49bc-9996-a072b45f2ddb\",\n            \"payment\": \"28a8868a-233d-4bbd-b7ff-387ad28168c5\"\n        }\n    ]\n}"}],"_postman_id":"71acb418-d6f5-4a5c-b56c-e00c382dcfba"}],"id":"45f36aec-dfa1-4677-a945-ca581cbcf698","description":"<p>Esta sección contiene los endpoints necesarios para consultar la <strong>actividad transaccional y financiera</strong> relacionada con los proyectos (metas de ahorro) de un usuario dentro del ecosistema de Xerpa. Incluye el historial de movimientos generados por reglas automáticas, abonos manuales, retiros, y otros movimientos realizados.</p>\n<blockquote>\n<p>Todos los endpoints requieren un <strong>User Token</strong> válido en el encabezado:<br /><code>Authorization: Bearer {{user_token}}</code> </p>\n</blockquote>\n<hr />\n<h4 id=\"📌-funcionalidades-disponibles\">📌 Funcionalidades disponibles</h4>\n<ul>\n<li><p>Devuelve el historial de actividades del usuario, incluyendo abonos automáticos, retiros, transferencias y otros eventos relacionados con sus metas de ahorro.</p>\n</li>\n<li><p>Retorna una lista de pagos ejecutados por el usuario, indicando detalles como monto, fecha, cuenta de destino y proyecto asociado.</p>\n</li>\n<li><p>Permite obtener información detallada de un pago específico, útil para visualización, conciliación o auditoría.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🎯consideraciones\">🎯Consideraciones</h4>\n<ul>\n<li><p>El historial de pagos está ordenado cronológicamente y puede incluir transacciones completadas, en proceso o fallidas.</p>\n</li>\n<li><p>Los pagos pueden estar vinculados a metas específicas.</p>\n</li>\n<li><p>Un pago puede estar relaciona a varias solicitudes de ahorro.</p>\n</li>\n<li><p>Todos los datos retornados están filtrados por el contexto del usuario autenticado.</p>\n</li>\n<li><p>Todos los listados se encuentran paginados.</p>\n</li>\n</ul>\n","_postman_id":"45f36aec-dfa1-4677-a945-ca581cbcf698"},{"name":"Abonos y retiros en línea","item":[{"name":"Datos de la meta para abonos","event":[{"listen":"test","script":{"id":"e5585634-95e4-46ce-b907-429ea4ec2483","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    project_name: 'string',\r","    from_account: { type: 'string', optional: true },\r","    to_account: { type: 'string', optional: true },\r","    options: 'object',\r","    accounts: 'array'\r","};\r","\r","const optionsProperties = {\r","    currency: 'string',\r","    amounts_currencies: 'array'\r","};\r","\r","const amountsCurrenciesProperties = 'number';\r","\r","const accountsProperties = 'string';\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the options object\r","pm.test(\"Options object has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.options, optionsProperties);\r","});\r","\r","// Check properties within the amounts_currencies array\r","pm.test(\"Amounts currencies have expected properties with correct types\", () => {\r","    if (responseJson.options.amounts_currencies && responseJson.options.amounts_currencies.length > 0) {\r","        // Test only the first item in the amounts_currencies array\r","        xerpaTestApi.checkProperty(responseJson.options.amounts_currencies, '0', amountsCurrenciesProperties);\r","    }\r","});\r","\r","// Check properties within the accounts array\r","pm.test(\"Accounts have expected properties with correct types\", () => {\r","    if (responseJson.accounts && responseJson.accounts.length > 0) {\r","        // Test only the first item in the accounts array\r","        xerpaTestApi.checkProperty(responseJson.accounts, '0', accountsProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"f8de73f7-8532-43b9-8ed4-5b409e059256","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-saving/","description":"<p>Este endpoint recupera los detalles del ahorro manual para un proyecto específico perteneciente a un usuario.</p>\n<img src=\"https://content.pstmn.io/08a5f769-1a45-4def-b27c-c88c78567a78/TGlzdGFyX01ldGFzLnBuZw==\" width=\"129\" height=\"142\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Metodo: GET</p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-saving/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p>project_id (string): ID del proyecto</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta está en forma de un esquema JSON con las siguientes propiedades:</p>\n<ul>\n<li><p><code>id</code> (string): El ID del ahorro manual.</p>\n</li>\n<li><p><code>project_name</code> (string): El nombre del proyecto asociado con el ahorro manual.</p>\n</li>\n<li><p><code>from_account</code> (string): La cuenta desde la cual se realiza el ahorro manual.</p>\n</li>\n<li><p><code>to_account</code> (string): La cuenta a la cual se transfiere el ahorro manual.</p>\n</li>\n<li><p><code>options</code> (object): Opciones adicionales relacionadas con el ahorro manual.</p>\n<ul>\n<li><p><code>currency</code>(string): Tipo de moneda asociada con el ahorro manual</p>\n</li>\n<li><p><code>amount_currencies</code>(array de numbers): cantidades monetarias estándar de la moneda especificada en currency.</p>\n</li>\n</ul>\n</li>\n<li><p><code>accounts</code> (array de strings): Lista de identificadores de las cuentas asociadas con el ahorro manual.</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"project_name\": { \"type\": \"string\" },\n    \"from_account\": { \"type\": \"string\" },\n    \"to_account\": { \"type\": \"string\" },\n    \"options\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"currency\": { \"type\": \"string\" },\n        \"amounts_currencies\": {\n          \"type\": \"array\",\n          \"items\": { \"type\": \"number\" }\n        }\n      }\n    },\n    \"accounts\": {\n      \"type\": \"array\",\n      \"items\": { \"type\": \"string\" }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","manual-saving",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"70777883-99dc-482f-9806-d3e34fe2633a","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-saving/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 20:00:39 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"356"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"d4cc265d-8254-450d-ab57-68552df04d81"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LWJ0KGxaoAMECwA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838bce7-7f9189db2f22bea704ebf36e;Parent=065d33c06e53b0b7;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n    \"project_name\": \"Viaje a japon\",\n    \"from_account\": \"test_user_api_2_account_1\",\n    \"to_account\": \"test_user_api_2_account_2\",\n    \"options\": {\n        \"currency\": \"USD\",\n        \"amounts_currencies\": [\n            1,\n            2,\n            5,\n            10,\n            20,\n            50,\n            100\n        ]\n    },\n    \"accounts\": [\n        \"test_user_api_2_account_1\",\n        \"test_user_api_2_account_3\",\n        \"test_user_api_2_account_2\",\n        \"test_user_api_2_account_4\"\n    ]\n}"},{"id":"7a7c0eab-b110-45e1-a828-baa20638cef8","name":"Bad Request - Invalid project id","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-saving/"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 20:17:21 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"23"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"42fc2d68-b8b0-494f-8818-35e50d74ad96"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LWMQzGh7oAMEVJQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838c0d1-37e279b564b07a496edb681a;Parent=4799869e85642a21;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Not found.\"\n}"}],"_postman_id":"f8de73f7-8532-43b9-8ed4-5b409e059256"},{"name":"Abono manual","id":"dabd5b08-2d0e-40e7-bd21-92a370bf6cb6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"155.00\",\r\n    \"execution_frequency\": \"U\", // D, S, Q ,M\r\n    \"from_account\": \"{{from_account}}\",\r\n    \"to_account\": \"{{to_account}}\",\r\n    \"authorization\":{\r\n        \"jwToken\": \"token\"\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-saving/","description":"<p>Este endpoint permite al usuario crear un ahorro manual para un proyecto específico.</p>\n<img src=\"https://content.pstmn.io/c51ded3b-3bf4-4e38-af84-ae9cbb4a38ad/QWJvbm8ucG5n\" width=\"100\" height=\"110\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Metodo: POST</p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-saving/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p>project_id (string): ID del proyecto</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li><p><code>amount</code> (string) - El monto a ser ahorrado.</p>\n</li>\n<li><p><code>execution_frequency</code> (string) - La frecuencia de ejecución del ahorro. Puede tomar los valores</p>\n<ul>\n<li><p>Abono Unico: \"U\"</p>\n</li>\n<li><p>Abono Diario: \"D\"</p>\n</li>\n<li><p>Abono Semanal: \"S\"</p>\n</li>\n<li><p>Abono Quincenal: \"Q\"</p>\n</li>\n<li><p>Abono Mensual: \"M\"</p>\n</li>\n</ul>\n</li>\n<li><p><code>from_account</code> (string) - La cuenta de origen para el ahorro.</p>\n</li>\n<li><p><code>to_account</code> (string) - La cuenta de destino para el ahorro.</p>\n</li>\n<li><p><code>authorization.jwToken</code> (string) - El token JWT para la autorización.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body-example\">Request Body Example</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"amount\": \"155.00\",\n    \"execution_frequency\": \"U\", \n    \"from_account\": \"user_account_1\",\n    \"to_account\": \"user_account_2\",\n    \"authorization\":{\n        \"jwToken\": \"token\"\n    }\n}\n\n</code></pre>\n<hr />\n<h4 id=\"response\"><strong>Response</strong></h4>\n<p>La respuesta está en forma de un esquema JSON con las siguientes propiedades:</p>\n<ul>\n<li><p><code>message</code> (string) - Un mensaje relacionado con el proceso de ahorro.</p>\n</li>\n<li><p><code>payment</code> (object) - Detalles del pago realizado</p>\n<ul>\n<li><p><code>id</code>(string): ID del pago.</p>\n</li>\n<li><p><code>project</code>(object): Detalles del proyecto relacionado con el pago.</p>\n<ul>\n<li><p><code>id</code>(string): ID del proyecto</p>\n</li>\n<li><p><code>project_name</code>(string): Nombre del proyecto</p>\n</li>\n<li><p><code>user_id</code>(string): ID del usuario asociado al proyecto.</p>\n</li>\n</ul>\n</li>\n<li><p><code>user_id</code>(string): ID del usuario que realizo el pago</p>\n</li>\n<li><p><code>amount</code>(string): Monto que pago el usuario</p>\n</li>\n<li><p><code>payment_date</code>(string): Fecha de creación del pago</p>\n</li>\n<li><p><code>from_account</code> (string): Cuenta de origen de los fondos.</p>\n</li>\n<li><p><code>to_account</code> (string): Cuenta destino de los fondos.</p>\n</li>\n<li><p><code>created_at</code>(string): Fecha de creación del abono.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de última actualización.</p>\n</li>\n<li><p><code>user_external_id</code>(string o null): Identificador externo del usuario.</p>\n</li>\n<li><p><code>retries</code>(string): Cantidad de intentos hechos para realizar el pago.</p>\n</li>\n<li><p><code>payment_status</code>(string): ID del estado del pago</p>\n</li>\n<li><p><code>payment_source</code>(string): ID del origen del pago</p>\n</li>\n</ul>\n</li>\n<li><p><code>rule</code>(object) - Detalles de la regla de ahorro</p>\n<ul>\n<li>execution_frequency (string): Frecuencia de ejecución del pago.</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"message\": { \"type\": \"string\" },\n    \"payment\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"project\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n            \"project_name\": { \"type\": \"string\" },\n            \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" }\n          }\n        },\n        \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"amount\": { \"type\": \"string\" },\n        \"payment_date\": { \"type\": \"string\", \"format\": \"date\" },\n        \"from_account\": { \"type\": \"string\" },\n        \"to_account\": { \"type\": \"string\" },\n        \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n        \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n        \"user_external_id\": { \"type\": [\"string\", \"null\"] },\n        \"retries\": { \"type\": \"integer\" },\n        \"payment_status\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"payment_source\": { \"type\": \"string\", \"format\": \"uuid\" }\n      }\n    },\n    \"rule\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"execution_frequency\": { \"type\": \"string\" }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","manual-saving",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"5d73adc6-9486-441c-b665-cb698533ccd9","name":"Successful Response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"155.00\",\r\n    \"execution_frequency\": \"U\", // D, S, Q ,M\r\n    \"from_account\": \"test_user_api_2_account_1\",\r\n    \"to_account\": \"test_user_api_2_account_2\",\r\n    \"authorization\":{\r\n        \"jwToken\": \"token\"\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-saving/"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 20:23:05 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"673"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"f2337dd9-0e2e-468a-99cb-5f160cadc3b0"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LWNGXHtQoAMEXMw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838c228-46230cda0630983e09bfd66c;Parent=48e6c6b4fbf1f77e;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"Processed\",\n    \"payment\": {\n        \"id\": \"fb3b6a62-8bcf-48e4-a5bc-a2ae0e7fedfd\",\n        \"project\": {\n            \"id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n            \"project_name\": \"Viaje a japon\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\"\n        },\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"amount\": \"155.00\",\n        \"payment_date\": \"2025-05-29\",\n        \"from_account\": \"test_user_api_2_account_1\",\n        \"to_account\": \"test_user_api_2_account_2\",\n        \"created_at\": \"2025-05-29T14:23:05.282132-06:00\",\n        \"updated_at\": \"2025-05-29T14:23:05.282159-06:00\",\n        \"user_external_id\": null,\n        \"retries\": 0,\n        \"payment_status\": \"fbbb15cf-258a-4736-b72d-6f73362799d0\",\n        \"payment_source\": \"636057ca-a138-4450-88fe-18252fac506e\"\n    },\n    \"rule\": {\n        \"execution_frequency\": \"U\"\n    }\n}"},{"id":"1025188e-7903-4b42-8a63-59b5943eff5f","name":"Bad Request - Invalid external account","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"1.00\",\r\n    \"execution_frequency\": \"D\", // D, S, Q ,M\r\n    \"from_account\": \"FROM_ACCOUNT\",\r\n    \"to_account\": \"TO_ACCOUNT\",\r\n    \"authorization\":{\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-saving/"},"status":"Internal Server Error","code":500,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 17 Oct 2024 17:32:20 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"66"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"35469223-9dc2-4358-8542-dc90a4433e77"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"fziFqEKNoAMEIUg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-67114a23-6892827e1fb2c0bc2001d92a;Parent=06ba6ad811bcd447;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"error_code\": \"4\",\n    \"error_message\": \"External account id not found\"\n}"},{"id":"b476cee0-412b-476e-adca-b47caa1141a3","name":"Bad Request - Invalid amount","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"-1.00\",\r\n    \"execution_frequency\": \"U\", // D, S, Q ,M\r\n    \"from_account\": \"test_user_api_2_account_1\",\r\n    \"to_account\": \"test_user_api_2_account_2\",\r\n    \"authorization\":{\r\n        \"jwToken\": \"token\"\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-saving/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 21:19:20 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"14"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"5fb67847-86b5-4ea0-810c-70d9006f57d5"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LWVVwGu_IAMEp4g="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838cf57-3e2b9aef3c71e48b53a89f97;Parent=5500468332b042d7;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"\"Bad Request.\""},{"id":"93422998-d546-4763-a9e5-f9ca745923db","name":"Bad Request - Invalid execution frequency","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"155.00\",\r\n    \"execution_frequency\": \"X\", // D, S, Q ,M\r\n    \"from_account\": \"test_user_api_2_account_1\",\r\n    \"to_account\": \"test_user_api_2_account_2\",\r\n    \"authorization\":{\r\n        \"jwToken\": \"token\"\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-saving/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 21:19:51 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"14"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"20d96bc3-b7be-43f1-99f8-8f6d4b4060bb"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LWVasHv0IAMEPTw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838cf77-0a47a0862437cf467ee12b64;Parent=26e990730c0dd9e9;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"\"Bad Request.\""},{"id":"2b10e495-1dc6-480f-9689-da3d8e462394","name":"Bad Request - Invalid accounts","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"155.00\",\r\n    \"execution_frequency\": \"U\", // D, S, Q ,M\r\n    \"from_account\": \"\",\r\n    \"to_account\": \"\",\r\n    \"authorization\":{\r\n        \"jwToken\": \"token\"\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-saving/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 21:20:44 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"14"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"71e1b6f1-7e60-4344-9343-7dfdd76ee46d"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LWVjAF0VoAMEbaw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838cfac-5ab05cf054258d6f363cae75;Parent=01588a324c26efdd;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"\"Bad Request.\""}],"_postman_id":"dabd5b08-2d0e-40e7-bd21-92a370bf6cb6"},{"name":"Datos de proyecto para retiro","event":[{"listen":"test","script":{"id":"05098336-061f-4e97-ad1c-a09e6f64aeea","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    total: 'string',\r","    progress: 'string',\r","    project_name: 'string',\r","    from_account: { type: 'string', optional: true },\r","    to_account: { type: 'string', optional: true },\r","    accounts: 'array'\r","};\r","\r","const accountsProperties = 'string';\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the accounts array\r","pm.test(\"Accounts have expected properties with correct types\", () => {\r","    if (responseJson.accounts && responseJson.accounts.length > 0) {\r","        // Test only the first item in the accounts array\r","        xerpaTestApi.checkProperty(responseJson.accounts, '0', accountsProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"171ce9e6-f457-4285-af4d-d40b32eea929","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-withdrawal/","description":"<p>Este endpoint recupera los detalles del retiro manual para un proyecto específico perteneciente a un usuario.</p>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Metodo: GET</p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-withdrawal/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_id</code> (string): ID del proyecto</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<hr />\n<h4 id=\"response\">Response</h4>\n<p>La respuesta está en forma de un esquema JSON con las siguientes propiedades:</p>\n<ul>\n<li><p><code>id</code>(string): ID del proyecto</p>\n</li>\n<li><p><code>total</code>(string): Monto total del proyecto.</p>\n</li>\n<li><p><code>progress</code>(string): Monto que lleva acumulado el usuario para completar el proyecto.</p>\n</li>\n<li><p><code>project_name</code>(string): Nombre del proyecto.</p>\n</li>\n<li><p><code>from_account</code> (string): Cuenta de origen de los fondos.</p>\n</li>\n<li><p><code>to_account</code> (string): Cuenta destino de los fondos.</p>\n</li>\n<li><p><code>accouns</code>(array of strings): Arreglo con las cuentas del usuario.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"total\": { \"type\": \"string\" },\n    \"progress\": { \"type\": \"string\" },\n    \"project_name\": { \"type\": \"string\" },\n    \"from_account\": { \"type\": \"string\" },\n    \"to_account\": { \"type\": \"string\" },\n    \"accounts\": {\n      \"type\": \"array\",\n      \"items\": { \"type\": \"string\" }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","manual-withdrawal",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"8cc18f3e-50d1-4a5a-b641-9de3ce8929f4","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-withdrawal/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 21:22:56 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"325"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"c0557097-ffde-407d-a90a-75986834cf74"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LWV3pFNiIAMEkVQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838d030-6c2601f60416f9856550086d;Parent=4f613cbdab1e95e6;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n    \"total\": \"20000.00\",\n    \"progress\": \"9155.00\",\n    \"project_name\": \"Viaje a japon\",\n    \"from_account\": \"test_user_api_2_account_1\",\n    \"to_account\": \"test_user_api_2_account_2\",\n    \"accounts\": [\n        \"test_user_api_2_account_1\",\n        \"test_user_api_2_account_3\",\n        \"test_user_api_2_account_2\",\n        \"test_user_api_2_account_4\"\n    ]\n}"}],"_postman_id":"171ce9e6-f457-4285-af4d-d40b32eea929"},{"name":"Retiro manual","id":"32c793b3-54d2-4bbe-bdef-2026defa3143","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"10000\",\r\n    \"from_account\": \"{{from_account}}\",\r\n    \"to_account\": \"{{to_account}}\",\r\n    \"authorization\":{\r\n        \"jwToken\": \"Test\"\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-withdrawal/","description":"<p>Este endpoint permite al usuario iniciar un retiro manual de un proyecto específico.</p>\n<img src=\"https://content.pstmn.io/b1b2aa4c-d6f9-4672-80ef-a2cb9ade2f67/UmV0aXJvLnBuZw==\" width=\"100\" height=\"110\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Metodo: POST</p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-withdrawal/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_id</code> (string): ID del proyecto</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li><p><code>amount</code> (string) - El monto a ser retirado.</p>\n</li>\n<li><p><code>from_account</code> (string) - La cuenta desde la cual el monto será retirado.</p>\n</li>\n<li><p><code>to_account</code> (string) - La cuenta a la cual el monto será transferido.</p>\n</li>\n<li><p><code>authorization</code> (object) - Contiene el token JWT para la autorización.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body-example\">Request Body Example</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"amount\": \"1000\",\n    \"from_account\": \"user_account_1\",\n    \"to_account\": \"user_account_2\",\n    \"authorization\":{\n        \"jwToken\": \"Test\"\n    }\n}\n\n</code></pre>\n<hr />\n<h4 id=\"response\">Response</h4>\n<p>La respuesta está en forma de un esquema JSON con las siguientes propiedades:</p>\n<ul>\n<li><p><code>message</code> (string) - Un mensaje relacionado con el proceso de ahorro.</p>\n</li>\n<li><p><code>payment</code> (object) - Detalles del pago realizado</p>\n<ul>\n<li><p><code>id</code>(string): ID del pago.</p>\n</li>\n<li><p><code>project</code>(object): Detalles del proyecto relacionado con el pago.</p>\n<ul>\n<li><p><code>id</code>(string): ID del proyecto</p>\n</li>\n<li><p><code>project_name</code>(string): Nombre del proyecto</p>\n</li>\n<li><p><code>user_id</code>(string): ID del usuario asociado al proyecto.</p>\n</li>\n</ul>\n</li>\n<li><p><code>user_id</code>(string): ID del usuario que realizo el pago</p>\n</li>\n<li><p><code>amount</code>(string): Monto retirado el usuario</p>\n</li>\n<li><p><code>payment_date</code>(string): Fecha de creación del pago</p>\n</li>\n<li><p><code>from_account</code> (string): Cuenta de origen de los fondos.</p>\n</li>\n<li><p><code>to_account</code> (string): Cuenta destino de los fondos.</p>\n</li>\n<li><p><code>created_at</code>(string): Fecha de creación del abono.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de última actualización.</p>\n</li>\n<li><p><code>user_external_id</code>(string o null): Identificador externo del usuario.</p>\n</li>\n<li><p><code>retries</code>(string): Cantidad de intentos hechos para realizar el pago.</p>\n</li>\n<li><p><code>payment_status</code>(string): ID del estado del pago</p>\n</li>\n<li><p><code>payment_source</code>(string): ID del origen del pago</p>\n</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">Response Example\n{\n  \"type\": \"object\",\n  \"properties\": {\n    \"message\": { \"type\": \"string\" },\n    \"payment\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"project\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n            \"project_name\": { \"type\": \"string\" },\n            \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" }\n          }\n        },\n        \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"amount\": { \"type\": \"string\" },\n        \"payment_date\": { \"type\": \"string\", \"format\": \"date\" },\n        \"from_account\": { \"type\": \"string\" },\n        \"to_account\": { \"type\": \"string\" },\n        \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n        \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n        \"user_external_id\": { \"type\": [\"string\", \"null\"] },\n        \"retries\": { \"type\": \"integer\" },\n        \"payment_status\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"payment_source\": { \"type\": \"string\", \"format\": \"uuid\" }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","manual-withdrawal",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"59408b28-d271-4287-9b3f-88067ac36798","name":"Successful Response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"1000\",\r\n    \"from_account\": \"{{from_account}}\",\r\n    \"to_account\": \"{{to_account}}\",\r\n    \"authorization\":{\r\n        \"jwToken\": \"Test\"\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-withdrawal/"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 21:41:39 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"640"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"a15d18c9-8b43-454b-9d12-57ef86c96305"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LWYnCE37IAMEVqw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838d493-09bc96a73b9fb2064dea2b0a;Parent=1ceef048242ce408;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"Processed\",\n    \"payment\": {\n        \"id\": \"7d82d3fe-5e77-4615-90fb-d236f27f97ea\",\n        \"project\": {\n            \"id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n            \"project_name\": \"Viaje a japon\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\"\n        },\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"amount\": \"-1000.00\",\n        \"payment_date\": \"2025-05-29\",\n        \"from_account\": \"test_user_api_2_account_1\",\n        \"to_account\": \"test_user_api_2_account_2\",\n        \"created_at\": \"2025-05-29T15:41:39.932337-06:00\",\n        \"updated_at\": \"2025-05-29T15:41:39.932354-06:00\",\n        \"user_external_id\": null,\n        \"retries\": 0,\n        \"payment_status\": \"fbbb15cf-258a-4736-b72d-6f73362799d0\",\n        \"payment_source\": \"f6adcf1e-d2cb-466c-89fb-f906148d37b1\"\n    }\n}"},{"id":"95778267-7c6a-4a85-92c6-aea030f1f9a8","name":"Bad Request - Invalid amount","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"-1000\",\r\n    \"from_account\": \"{{from_account}}\",\r\n    \"to_account\": \"{{to_account}}\",\r\n    \"authorization\":{\r\n        \"jwToken\": \"Test\"\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-withdrawal/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 21:49:38 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"14"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"ec2c1bb6-5eb0-4996-a169-eeb6107a2fbe"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LWZx3HJLIAMEFGg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838d671-527eb2703d9b84a00d91efb0;Parent=2b6ffd065c08f9dd;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"\"Bad Request.\""},{"id":"a43e1bee-7580-4eb6-993b-b30284f9287b","name":"Bad Request - Invalid accounts","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"1000\",\r\n    \"from_account\": \"\",\r\n    \"to_account\": \"\",\r\n    \"authorization\":{\r\n        \"jwToken\": \"Test\"\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-withdrawal/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 29 May 2025 21:50:05 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"14"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"3433a3f5-ca77-435a-935c-6885a7bb238f"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LWZ2IG6_oAMEtnA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6838d68d-49ae0b204c5f5f1363cf3086;Parent=7d633a472b1941fe;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"\"Bad Request.\""}],"_postman_id":"32c793b3-54d2-4bbe-bdef-2026defa3143"},{"name":"(async) Datos de proyecto para abono","event":[{"listen":"test","script":{"id":"e5585634-95e4-46ce-b907-429ea4ec2483","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    project_name: 'string',\r","    from_account: { type: 'string', optional: true },\r","    to_account: { type: 'string', optional: true },\r","    options: 'object',\r","    accounts: 'array'\r","};\r","\r","const optionsProperties = {\r","    currency: 'string',\r","    amounts_currencies: 'array'\r","};\r","\r","const amountsCurrenciesProperties = 'number';\r","\r","const accountsProperties = 'string';\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the options object\r","pm.test(\"Options object has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.options, optionsProperties);\r","});\r","\r","// Check properties within the amounts_currencies array\r","pm.test(\"Amounts currencies have expected properties with correct types\", () => {\r","    if (responseJson.options.amounts_currencies && responseJson.options.amounts_currencies.length > 0) {\r","        // Test only the first item in the amounts_currencies array\r","        xerpaTestApi.checkProperty(responseJson.options.amounts_currencies, '0', amountsCurrenciesProperties);\r","    }\r","});\r","\r","// Check properties within the accounts array\r","pm.test(\"Accounts have expected properties with correct types\", () => {\r","    if (responseJson.accounts && responseJson.accounts.length > 0) {\r","        // Test only the first item in the accounts array\r","        xerpaTestApi.checkProperty(responseJson.accounts, '0', accountsProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"1f5a9665-89fd-4674-aae4-14121a70c35d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-saving-async/","description":"<p>Este endpoint recupera los detalles del ahorro manual para un proyecto específico perteneciente a un usuario. La respuesta está en forma de un esquema JSON con las siguientes propiedades:</p>\n<ul>\n<li><p><code>id</code> (string): El ID del ahorro manual.</p>\n</li>\n<li><p><code>project_name</code> (string): El nombre del proyecto asociado con el ahorro manual.</p>\n</li>\n<li><p><code>from_account</code> (string): La cuenta desde la cual se realiza el ahorro manual.</p>\n</li>\n<li><p><code>to_account</code> (string): La cuenta a la cual se transfiere el ahorro manual.</p>\n</li>\n<li><p><code>options</code> (object): Opciones adicionales relacionadas con el ahorro manual.</p>\n</li>\n<li><p><code>accounts</code> (array de strings): Lista de cuentas asociadas con el ahorro manual.</p>\n</li>\n</ul>\n<p><strong>Nota:</strong> La respuesta real puede contener más propiedades basadas en los datos específicos del ahorro manual.</p>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","manual-saving-async",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"9b4176c8-618b-470b-8ecf-7eb6607001eb","name":"200 OK","originalRequest":{"method":"GET","header":[]},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"3cb17971-e530-4070-b37f-c7b164699283\",\n    \"project_name\": \"Meta 3\",\n    \"from_account\": \"FROM_ACCOUNT\",\n    \"to_account\": \"TO_ACCOUNT\",\n    \"options\": {},\n    \"accounts\": [\n        \"TO_ACCOUNT\",\n        \"FROM_ACCOUNT\"\n    ]\n}"},{"id":"112a0959-f243-43de-ab25-21afda59b2ae","name":"Not Found","originalRequest":{"method":"GET","header":[]},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"\"Project not found.\""}],"_postman_id":"1f5a9665-89fd-4674-aae4-14121a70c35d"},{"name":"(async) Abono manual","event":[{"listen":"test","script":{"id":"e1f489d7-98a4-4b86-88aa-3d88fdcccac4","exec":["const response = pm.response.json();","pm.environment.set(\"job_id\", response.job.id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"b2191b2b-e92b-4cb8-98d3-88dd759824df","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"50.00\",\r\n    \"execution_frequency\": \"U\", // D, S, Q ,M\r\n    \"from_account\": \"{{from_account}}\",\r\n    \"to_account\": \"{{to_account}}\",\r\n    \"authorization\": {\r\n        \"jwToken\": \"token\",\r\n        \"delay_time\": 5 // genera un delay en infra headless\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-saving-async/","description":"<p>Este endpoint permite al usuario crear un ahorro manual para un proyecto específico.</p>\n<img src=\"https://content.pstmn.io/c51ded3b-3bf4-4e38-af84-ae9cbb4a38ad/QWJvbm8ucG5n\" width=\"100\" height=\"110\" />\n\n<hr />\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li><p><code>amount</code> (string) - El monto a ser ahorrado.</p>\n</li>\n<li><p><code>execution_frequency</code> (string) - La frecuencia de ejecución del ahorro.</p>\n</li>\n<li><p><code>from_account</code> (string) - La cuenta de origen para el ahorro.</p>\n</li>\n<li><p><code>to_account</code> (string) - La cuenta de destino para el ahorro.</p>\n</li>\n<li><p><code>authorization.jwToken</code> (string) - El token JWT para la autorización.</p>\n</li>\n</ul>\n<h4 id=\"response\"><strong>Response:</strong></h4>\n<ul>\n<li><p><code>message</code> (string) - Un mensaje relacionado con el proceso de ahorro.</p>\n</li>\n<li><p><code>payment</code> (object) - Detalles del pago realizado, incluyendo ID, monto, fecha de pago, cuentas involucradas y estado del pago.</p>\n</li>\n<li><p><code>rule</code> (object) - Detalles de la regla de ahorro, incluyendo la frecuencia de ejecución.</p>\n</li>\n</ul>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","manual-saving-async",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"be6424b2-2503-4e98-bfa9-6d1557a6bf05","name":"404","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"100\",\r\n    \"execution_frequency\": \"D\",\r\n    \"from_account\": \"FROM_ACCOUNT\",\r\n    \"to_account\": \"TO_ACCOUNT\",\r\n    \"authorization\":{\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-saving/"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"\"PROJECT NOT FOUND\""},{"id":"c2834202-fc4f-4f27-a5b5-02a2b7d37ba2","name":"200 OK","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"50.00\",\r\n    \"execution_frequency\": \"U\", // D, S, Q ,M\r\n    \"from_account\": \"user_airflow_3_account_1\",\r\n    \"to_account\": \"user_airflow_3_account_2\",\r\n    \"authorization\":{\r\n        \"jwToken\": \"token\",\r\n        \"delay_time\": 20 // genera un delay en headless  5 = 5 segundos\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-saving-async/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"job\": {\n        \"id\": \"c76923c6-a1af-4a4f-90a1-70f75b97c61c\",\n        \"job_type\": {\n            \"id\": \"09637f57-e3db-4ed1-9f7a-a3cf8c50d96b\",\n            \"catalog\": \"ee23dfd1-9552-4b63-9c8b-a98efb830baa\",\n            \"item_name\": \"job_type_movements_between_accounts\",\n            \"description\": \"Movimientos de dinero entre cuentas\",\n            \"metadata\": {}\n        },\n        \"job_status\": {\n            \"id\": \"619ea30d-1dfc-4717-8bed-2de2fd06ca24\",\n            \"catalog\": \"19855c39-7537-4d4c-92f9-376c19481f2d\",\n            \"item_name\": \"job_status_processing\",\n            \"description\": \"Trabajo en proceso\",\n            \"metadata\": {}\n        },\n        \"external_id\": \"b9ad45a9-0bb9-49e7-8293-7b9d284415c3\",\n        \"user_id\": \"19b4fa59-8d1e-49a6-ac17-10fe0d03bd76\",\n        \"created_at\": \"2025-06-12T20:28:02+0000\",\n        \"updated_at\": \"2025-06-12T20:28:02+0000\",\n        \"metadata\": {}\n    },\n    \"payment\": {\n        \"id\": \"c971dfb9-42e4-45e6-9e07-2bf400eea4c1\",\n        \"project\": {\n            \"id\": \"df6e5b4a-7caf-4388-a808-5beb3674f329\",\n            \"project_name\": \"airflow_3\",\n            \"user_id\": \"19b4fa59-8d1e-49a6-ac17-10fe0d03bd76\"\n        },\n        \"user_id\": \"19b4fa59-8d1e-49a6-ac17-10fe0d03bd76\",\n        \"amount\": \"50.00\",\n        \"payment_date\": \"2025-06-12\",\n        \"from_account\": \"user_airflow_3_account_1\",\n        \"to_account\": \"user_airflow_3_account_2\",\n        \"created_at\": \"2025-06-12T14:28:02.841038-06:00\",\n        \"updated_at\": \"2025-06-12T14:28:02.841058-06:00\",\n        \"user_external_id\": null,\n        \"retries\": 0,\n        \"payment_status\": \"4640ecd9-b2be-4985-9dad-10ce8855b392\",\n        \"payment_source\": \"636057ca-a138-4450-88fe-18252fac506e\"\n    }\n}"}],"_postman_id":"b2191b2b-e92b-4cb8-98d3-88dd759824df"},{"name":"(async) Datos de proyecto para retiro","event":[{"listen":"test","script":{"id":"05098336-061f-4e97-ad1c-a09e6f64aeea","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    total: 'string',\r","    progress: 'string',\r","    project_name: 'string',\r","    from_account: { type: 'string', optional: true },\r","    to_account: { type: 'string', optional: true },\r","    accounts: 'array'\r","};\r","\r","const accountsProperties = 'string';\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the accounts array\r","pm.test(\"Accounts have expected properties with correct types\", () => {\r","    if (responseJson.accounts && responseJson.accounts.length > 0) {\r","        // Test only the first item in the accounts array\r","        xerpaTestApi.checkProperty(responseJson.accounts, '0', accountsProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"3ae5f624-586b-44f1-bd54-c17ab20cf4ec","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-withdrawal-async/","description":"<p>Este endpoint recupera los detalles del retiro manual para un proyecto específico perteneciente a un usuario.</p>\n<h4 id=\"request\">Request</h4>\n<h4 id=\"request-url\">Request URL</h4>\n<ul>\n<li><code>GET /api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-withdrawal/</code></li>\n</ul>\n<h4 id=\"request-description\">Request Description</h4>\n<p>Este endpoint requiere una solicitud GET para obtener los detalles del retiro manual para un proyecto específico de un usuario.</p>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Esta solicitud no requiere un cuerpo de solicitud.</p>\n<h4 id=\"response\">Response</h4>\n<h4 id=\"response-body-json-schema\">Response Body (JSON Schema)</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"withdrawal_id\": {\n      \"type\": \"string\"\n    },\n    \"amount\": {\n      \"type\": \"number\"\n    },\n    \"status\": {\n      \"type\": \"string\"\n    },\n    \"timestamp\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    }\n  }\n}\n\n</code></pre>\n<h4 id=\"response-description\">Response Description</h4>\n<p>La respuesta contendrá los detalles del retiro manual, incluyendo el ID del retiro, el monto, el estado y la marca de tiempo en el proyecto especificado.</p>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","manual-withdrawal-async",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"11995d72-e48e-4813-9fa7-768db354b95d","name":"200 OK","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-withdrawal/"},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":null},{"id":"0892e9fc-03eb-4758-a7a4-c5edbae81aa4","name":"Not Found","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-withdrawal/"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"\"Project not found.\""}],"_postman_id":"3ae5f624-586b-44f1-bd54-c17ab20cf4ec"},{"name":"(async) Retiro manual","event":[{"listen":"test","script":{"id":"802d0e63-ae88-4574-b0d5-2272801e64ab","exec":["const response = pm.response.json();","pm.environment.set(\"job_id\", response.job.id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"7409286b-519b-4caf-8267-166cc92310e4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"35\",\r\n    \"from_account\": \"{{from_account}}\",\r\n    \"to_account\": \"{{to_account}}\",\r\n    \"authorization\":{\r\n        \"jwToken\": \"Test\",\r\n        \"delay_time\": 5 // genera un delay en infra headless  5 = 5 segundos\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-withdrawal-async/","description":"<p>Este endpoint permite al usuario iniciar un retiro manual de un proyecto específico.</p>\n<img src=\"https://content.pstmn.io/b1b2aa4c-d6f9-4672-80ef-a2cb9ade2f67/UmV0aXJvLnBuZw==\" width=\"100\" height=\"110\" />\n\n<hr />\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li><p><code>amount</code> (string) - El monto a ser retirado.</p>\n</li>\n<li><p><code>from_account</code> (string) - La cuenta desde la cual el monto será retirado.</p>\n</li>\n<li><p><code>to_account</code> (string) - La cuenta a la cual el monto será transferido.</p>\n</li>\n<li><p><code>authorization</code> (object) - Contiene el token JWT para la autorización.</p>\n</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta estará en forma de un esquema JSON.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"message\": {\n      \"type\": \"string\"\n    },\n    \"payment\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\"\n        },\n        \"project\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"id\": {\n              \"type\": \"string\"\n            },\n            \"project_name\": {\n              \"type\": \"string\"\n            },\n            \"user_id\": {\n              \"type\": \"string\"\n            }\n          }\n        },\n        \"user_id\": {\n          \"type\": \"string\"\n        },\n        \"amount\": {\n          \"type\": \"string\"\n        },\n        \"payment_date\": {\n          \"type\": \"string\"\n        },\n        \"from_account\": {\n          \"type\": \"string\"\n        },\n        \"to_account\": {\n          \"type\": \"string\"\n        },\n        \"created_at\": {\n          \"type\": \"string\"\n        },\n        \"updated_at\": {\n          \"type\": \"string\"\n        },\n        \"user_external_id\": {\n          \"type\": [\"string\", \"null\"]\n        },\n        \"retries\": {\n          \"type\": \"integer\"\n        },\n        \"payment_status\": {\n          \"type\": \"string\"\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","manual-withdrawal-async",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"b9375cc3-6794-407a-b845-f2150edc6fbb","name":"200 OK","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"1.00\",\r\n      \"from_account\": \"FROM_ACCOUNT\",\r\n    \"to_account\": \"TO_ACCOUNT\",\r\n    \"authorization\":{\r\n\t\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-withdrawal/"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"job\": {\n        \"id\": \"7c2814b6-4735-4c26-9c30-aa7ea09894d1\",\n        \"job_type\": {\n            \"id\": \"09637f57-e3db-4ed1-9f7a-a3cf8c50d96b\",\n            \"catalog\": \"ee23dfd1-9552-4b63-9c8b-a98efb830baa\",\n            \"item_name\": \"job_type_movements_between_accounts\",\n            \"description\": \"Movimientos de dinero entre cuentas\",\n            \"metadata\": {}\n        },\n        \"job_status\": {\n            \"id\": \"619ea30d-1dfc-4717-8bed-2de2fd06ca24\",\n            \"catalog\": \"19855c39-7537-4d4c-92f9-376c19481f2d\",\n            \"item_name\": \"job_status_processing\",\n            \"description\": \"Trabajo en proceso\",\n            \"metadata\": {}\n        },\n        \"external_id\": \"1546879c-1346-4fcf-b855-5900f67ab3d9\",\n        \"user_id\": \"19b4fa59-8d1e-49a6-ac17-10fe0d03bd76\",\n        \"created_at\": \"2025-06-12T20:27:33+0000\",\n        \"updated_at\": \"2025-06-12T20:27:33+0000\",\n        \"metadata\": {}\n    },\n    \"payment\": {\n        \"id\": \"54a1779a-41ab-4937-a2df-94d7f555e03d\",\n        \"project\": {\n            \"id\": \"df6e5b4a-7caf-4388-a808-5beb3674f329\",\n            \"project_name\": \"airflow_3\",\n            \"user_id\": \"19b4fa59-8d1e-49a6-ac17-10fe0d03bd76\"\n        },\n        \"user_id\": \"19b4fa59-8d1e-49a6-ac17-10fe0d03bd76\",\n        \"amount\": \"-4.00\",\n        \"payment_date\": \"2025-06-12\",\n        \"from_account\": \"user_airflow_3_account_1\",\n        \"to_account\": \"user_airflow_3_account_2\",\n        \"created_at\": \"2025-06-12T14:27:33.046623-06:00\",\n        \"updated_at\": \"2025-06-12T14:27:33.046638-06:00\",\n        \"user_external_id\": null,\n        \"retries\": 0,\n        \"payment_status\": \"4640ecd9-b2be-4985-9dad-10ce8855b392\",\n        \"payment_source\": \"f6adcf1e-d2cb-466c-89fb-f906148d37b1\"\n    }\n}"},{"id":"2df28d0f-f4b0-4104-86d0-471d1ac7354c","name":"Bad Request","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"1.00\",\r\n      \"from_account\": \"FROM_ACCOUNT\",\r\n    \"to_account\": \"TO_ACCOUNT\",\r\n    \"authorization\":{\r\n\t\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-withdrawal/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"\"invalid amount\""},{"id":"8fa323d3-a7e2-4d14-9e7f-f4f8509b6726","name":"Not Found","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": \"1.00\",\r\n      \"from_account\": \"FROM_ACCOUNT\",\r\n    \"to_account\": \"TO_ACCOUNT\",\r\n    \"authorization\":{\r\n\t\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/manual-withdrawal/"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"\"PROJECT NOT FOUND\""}],"_postman_id":"7409286b-519b-4caf-8267-166cc92310e4"},{"name":"Transferencia entre metas","event":[{"listen":"test","script":{"id":"5d0d4b70-267f-4b9b-9481-7562952d0557","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulPost();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const projectProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    project_name: 'string',\r","    total: 'string',\r","    progress: 'string',\r","    processing: 'string',\r","    pending: 'string',\r","    from_account: ['string', 'null'],\r","    to_account: ['string', 'null'],\r","    goal_date: 'string',\r","    created_at: 'string',\r","    updated_at: 'string',\r","    deleted_at: ['string', 'null'],\r","    project_category: 'string',\r","    project_status: 'string'\r","};\r","\r","// Check project properties\r","pm.test(\"Project has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, projectProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"52ab1252-57e3-46c2-8da3-923e89c45888","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": 100,\r\n    \"project_id_to\": \"7128da5f-616b-4500-9d51-23eb185e8975\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/internal-transfer","description":"<p>Este endpoint permite al usuario iniciar una transferencia interna desde un proyecto específico hacia otro dentro de su mismo perfil.</p>\n<img src=\"https://content.pstmn.io/bdf8aec3-202e-4bb1-87ad-b838f5634138/VHJhc3Bhc28ucG5n\" width=\"100\" height=\"110\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Metodo: POST</p>\n</li>\n<li><p>URL: {{host_app}}/saving-service/users/{{user_id}}/projects/{{project_id}}/internal-transfer</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>project_id</code> (string): ID del proyecto origen</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li><p><code>amount</code> (number): Monto a transferir.</p>\n</li>\n<li><p><code>project_id_to</code> (string): ID del proyecto al que se realizará la transferencia.</p>\n</li>\n</ul>\n<h4 id=\"request-body-example\">Request Body Example</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"amount\": 100,\n    \"project_id_to\": \"project_id\"\n}\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON con los detalles de la transferencia realizada, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID de la transferencia.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario que realizó la transferencia.</p>\n</li>\n<li><p><code>project_name</code> (string): Nombre del proyecto origen.</p>\n</li>\n<li><p><code>total</code> (string): Monto total involucrado en la transferencia.</p>\n</li>\n<li><p><code>progress</code> (string): Estado de avance de la transferencia.</p>\n</li>\n<li><p><code>processing</code> (string): Estado de procesamiento de la transferencia.</p>\n</li>\n<li><p><code>pending</code> (string): Estado pendiente en la transferencia.</p>\n</li>\n<li><p><code>from_account</code> (string): Cuenta de origen de la transferencia.</p>\n</li>\n<li><p><code>to_account</code> (string): Cuenta destino de la transferencia.</p>\n</li>\n<li><p><code>goal_date</code> (string): Fecha objetivo del proyecto.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha y hora de creación de la transferencia.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha y hora de la última actualización.</p>\n</li>\n<li><p><code>deleted_at</code> (string): Fecha de eliminación (si aplica).</p>\n</li>\n<li><p><code>project_category</code> (string): Categoría del proyecto.</p>\n</li>\n<li><p><code>project_status</code> (string): Estado del proyecto.</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"project_name\": { \"type\": \"string\" },\n    \"total\": { \"type\": \"string\" },\n    \"progress\": { \"type\": \"string\" },\n    \"processing\": { \"type\": \"string\" },\n    \"pending\": { \"type\": \"string\" },\n    \"from_account\": { \"type\": \"string\" },\n    \"to_account\": { \"type\": \"string\" },\n    \"goal_date\": { \"type\": \"string\", \"format\": \"date\" },\n    \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"deleted_at\": {\n      \"anyOf\": [\n        { \"type\": \"string\", \"format\": \"date-time\" },\n        { \"type\": \"null\" }\n      ]\n    },\n    \"project_category\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"project_status\": { \"type\": \"string\", \"format\": \"uuid\" }\n  },\n\n  ]\n}\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","projects","{{project_id}}","internal-transfer"],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"555f69ad-561b-4f68-82a1-c245bf7e280b","name":"Successful Response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": 100,\r\n    \"project_id_to\": \"7128da5f-616b-4500-9d51-23eb185e8975\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/projects/{{project_id}}/internal-transfer"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 02 Jun 2025 15:34:22 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"1534"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"a82c341c-389a-4581-9b10-10efcbe853d1"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LiujzFZeoAMEjMw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-683dc47e-0678ac5c46fdcb7b21afc033;Parent=27c941e966ae17e7;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"Processed\",\n    \"project_from\": {\n        \"id\": \"09029550-2885-4ac0-9fda-b7cef9d55776\",\n        \"project_name\": \"Viaje a japon\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"payment\": {\n            \"id\": \"4218e716-0030-4eb3-b571-228dd3005b81\",\n            \"project\": {\n                \"id\": \"09029550-2885-4ac0-9fda-b7cef9d55776\",\n                \"project_name\": \"Viaje a japon\",\n                \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\"\n            },\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"amount\": \"-100.00\",\n            \"payment_date\": \"2025-06-02\",\n            \"from_account\": \"test_user_api_2_account_1\",\n            \"to_account\": \"test_user_api_2_account_2\",\n            \"created_at\": \"2025-06-02T09:34:22.567396-06:00\",\n            \"updated_at\": \"2025-06-02T09:34:22.567417-06:00\",\n            \"user_external_id\": null,\n            \"retries\": 0,\n            \"payment_status\": \"fbbb15cf-258a-4736-b72d-6f73362799d0\",\n            \"payment_source\": \"42211161-d36d-4e52-9b48-fd677c215101\"\n        }\n    },\n    \"project_to\": {\n        \"id\": \"7128da5f-616b-4500-9d51-23eb185e8975\",\n        \"project_name\": \"Viaje a japon\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"payment\": {\n            \"id\": \"ff0edb50-13e0-4cbd-a5aa-6b53b0a4cb5d\",\n            \"project\": {\n                \"id\": \"7128da5f-616b-4500-9d51-23eb185e8975\",\n                \"project_name\": \"Viaje a japon\",\n                \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\"\n            },\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"amount\": \"100.00\",\n            \"payment_date\": \"2025-06-02\",\n            \"from_account\": \"test_user_api_2_account_1\",\n            \"to_account\": \"test_user_api_2_account_2\",\n            \"created_at\": \"2025-06-02T09:34:22.567470-06:00\",\n            \"updated_at\": \"2025-06-02T09:34:22.567477-06:00\",\n            \"user_external_id\": null,\n            \"retries\": 0,\n            \"payment_status\": \"fbbb15cf-258a-4736-b72d-6f73362799d0\",\n            \"payment_source\": \"862f49cf-acc0-48df-ae6d-0ac26e8a8afc\"\n        }\n    }\n}"},{"id":"f95f16b7-a6f5-4abf-bf14-953ddc3a3b14","name":"Bad Request - Invalid id","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"Meta viaje\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-95187059653\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"xh-user-qa-1-dev\",\r\n    \"to_account\": \"xh-user-qa-1-dev2\",\r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"project_category\": [\n        \"Invalid pk \\\"b95487f8-4d83-4e24-ad1a-951870596537\\\" - object does not exist.\"\n    ]\n}"},{"id":"96e1387c-4e20-4306-b6ca-0dfd5d05043d","name":"Bad Request - Invalid fields","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"project_name\": \"Meta viaje\",\r\n    \"project_category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\r\n    \"goal_date\": \"2030-10-30\", //debe ser posterir a fecha actual\r\n    \"from_account\": \"xh-user-qa-1-dev\",\r\n    \"to_account\": \"xh-user-qa-1-dev2\",\r\n    \"total\": 20000\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/projects/"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"Invalid fields\""}],"_postman_id":"52ab1252-57e3-46c2-8da3-923e89c45888"}],"id":"5b1cc29e-4fe6-44e8-a924-03e1bd3f1f64","description":"<p>Esta sección agrupa los endpoints relacionados con las <strong>operaciones financieras que afectan directamente el saldo de las metas de ahorro</strong> del usuario. Incluye funcionalidades para realizar abonos, retiros y transferencias entre metas.</p>\n<blockquote>\n<p>Todos los endpoints requieren un <strong>User Token</strong> válido:<br /><code>Authorization: Bearer {{user_token}}</code> </p>\n</blockquote>\n<hr />\n<h4 id=\"📌-funcionalidades-disponibles\">📌 Funcionalidades disponibles</h4>\n<ul>\n<li><p>Registra un movimiento de abono realizado manualmente por el usuario hacia una meta específica.</p>\n</li>\n<li><p>Ejecuta un retiro de fondos de una meta de ahorro activa.</p>\n</li>\n<li><p>Permite mover fondos entre dos metas del mismo usuario, transfiriendo el saldo disponible de una a otra.</p>\n</li>\n<li><p>Devuelve la fecha y hora del último abono automático exitóso realizadado a alguna de las metas de un usuario.</p>\n</li>\n</ul>\n<img src=\"https://content.pstmn.io/804abf3c-8b11-45ad-8ce9-0a2fb71422a8/T3BlcmFjaW9uZXMucG5n\" />\n\n<hr />\n<h4 id=\"🎯-consideraciones\">🎯 Consideraciones</h4>\n<ul>\n<li><p>Estas operaciones afectan directamente el saldo (<code>progress</code>) del proyecto.</p>\n</li>\n<li><p>Solo se pueden llevar a cabo estas operaciones en proyectos con los estados <code>active</code> y <code>finished</code>.</p>\n</li>\n<li><p>Las transferencias internas entre metas no generan movimientos bancarios, pero sí se reflejan en el backend financiero del usuario.</p>\n</li>\n</ul>\n","_postman_id":"5b1cc29e-4fe6-44e8-a924-03e1bd3f1f64"},{"name":"Métricas y reportes","item":[{"name":"Ahorros totales del usuario","item":[{"name":"Métricas","id":"66c85be8-b1cb-4322-883d-86cbd24b44d2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/metrics/savings/","description":"<p>Endoint para obtener las métricas de ahorros de un usuario y el detalle por proyecto.</p>\n<p>Los parámetros de date_from y date_to son opcionales.</p>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","metrics","savings",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"4ab34312-fff6-4643-b59f-982c9eaefcd3","name":"Métricas","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/metrics/savings/?date_from=2026-01&date_to=2026-06","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","users","{{user_id}}","metrics","savings",""],"query":[{"key":"date_from","value":"2026-01"},{"key":"date_to","value":"2026-06"}]}},"status":"OK","code":200,"_postman_previewlanguage":"","header":[{"key":"Date","value":"Thu, 19 Mar 2026 17:08:21 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"5990"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"36f7c718-77f3-4739-9244-4ded45fb0750"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"aewM4Hr8IAMEMIQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-69bc2d85-4ef654976fbae00441539291;Parent=22b3fb2f4e75f10c;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"user\": {\n        \"total_savings\": \"100620.00\",\n        \"count_savings\": 93,\n        \"count_withdrawals\": 0,\n        \"total_withdrawals\": \"0.00\",\n        \"balance\": \"100620.00\"\n    },\n    \"projects\": [\n        {\n            \"project_id\": \"e0092539-0c64-4f4c-8642-2448e9b25af5\",\n            \"project_name\": \"Viaje a japon\",\n            \"total_savings\": \"0.00\",\n            \"count_savings\": 0,\n            \"count_withdrawals\": 0,\n            \"total_withdrawals\": \"0.00\",\n            \"balance\": \"0.00\"\n        },\n        {\n            \"project_id\": \"9c183ea2-d7ac-4a01-a369-12844706c264\",\n            \"project_name\": \"final\",\n            \"total_savings\": \"8015.00\",\n            \"count_savings\": 77,\n            \"count_withdrawals\": 0,\n            \"total_withdrawals\": \"0.00\",\n            \"balance\": \"8015.00\"\n        },\n        {\n            \"project_id\": \"edacd15b-108a-4edb-b28c-37e07ccacbd8\",\n            \"project_name\": \"meta para ahorra pasajes\",\n            \"total_savings\": \"5106.00\",\n            \"count_savings\": 16,\n            \"count_withdrawals\": 0,\n            \"total_withdrawals\": \"0.00\",\n            \"balance\": \"5106.00\"\n        },\n    ]\n}"}],"_postman_id":"66c85be8-b1cb-4322-883d-86cbd24b44d2"}],"id":"34f627f3-5543-4f22-adfb-5cc7fda737ce","description":"<p>Contiene los endpoints necesarios para obtener un <strong>resumen consolidado</strong> de los ahorros acumulados por el usuario a través de todas sus metas activas e históricas en la plataforma Xerpa.</p>\n<p>En la documentación técnica, este módulo puede denominarse también como <strong>\"Savings Summary\"</strong>.</p>\n<blockquote>\n<p>Todos los endpoints de esta carpeta requieren un <code>User Token</code> válido.<br /><code>Authorization: Bearer {{user_token}}</code> </p>\n</blockquote>\n<hr />\n<h4 id=\"📌-propósito-del-módulo\">📌 Propósito del módulo</h4>\n<p>Permite a los integradores mostrar al usuario final una <strong>visión unificada de su progreso financiero</strong>, ideal para secciones de dashboard o resumen mensual en una app bancaria.</p>\n<p>Incluye datos como:</p>\n<ul>\n<li><p>Total ahorrado en todas las metas.</p>\n</li>\n<li><p>Total ahorrado en el último mes.</p>\n</li>\n<li><p>Número de metas activas.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🎯-consideraciones\">🎯 Consideraciones</h4>\n<ul>\n<li><p>Este resumen se construye a partir de todas las metas, activas o finalizadas.</p>\n</li>\n<li><p>Puede usarse como <strong>entrada para mostrar progreso, estadísticas o motivadores visuales</strong> al usuario.</p>\n</li>\n<li><p>No requiere parámetros adicionales, ya que el usuario queda identificado por el <code>user_token</code>.</p>\n</li>\n<li><p>La sumatoria de ahorros del ultimo mes considera todos los abonos y retiros del mes exitosos, por lo cual si tiene más retiros que abonos podría arrojar un balance <strong>negativo</strong> en el mes.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"❗errores-comunes\">❗Errores comunes</h4>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Código</th>\n<th>Descripción</th>\n<th>Causa posible</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>401</td>\n<td>Token ausente o inválido</td>\n<td>El <code>user_token</code> ha expirado o es incorrecto</td>\n</tr>\n<tr>\n<td>500</td>\n<td>Error interno</td>\n<td>Fallo al calcular el resumen o acceder a datos</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"34f627f3-5543-4f22-adfb-5cc7fda737ce"},{"name":"Lista de reportes","event":[{"listen":"test","script":{"id":"e1bacf7c-1bc4-461e-8491-a8f3127114b9","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    next: { type: 'string', optional: true },\r","    previous: { type: 'string', optional: true },\r","    total_pages: 'number',\r","    current_page: 'number',\r","    offset: 'number',\r","    results: 'array'\r","};\r","\r","const resultProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    metadata: 'object',\r","    year: 'number',\r","    month: 'number',\r","    week: 'number',\r","    day: 'number',\r","    is_read: 'boolean',\r","    created_at: 'string',\r","    updated_at: 'string',\r","    report_type: 'string'\r","};\r","\r","const metadataProperties = {\r","    no_show: 'boolean',\r","    balance_short: 'object',\r","    configuration: 'array'\r","};\r","\r","const balanceShortProperties = {\r","    type: 'string',\r","    year: 'number',\r","    month: 'number',\r","    month_name: 'string',\r","    monthly_grow: 'number',\r","    monthly_saving: 'number',\r","    monthly_balance: 'number',\r","    monthly_withdrawal: 'number',\r","    monthly_projects_count: 'number'\r","};\r","\r","const configurationProperties = {\r","    page: 'string',\r","    type: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the results array\r","pm.test(\"Results have expected properties with correct types\", () => {\r","    if (responseJson.results && responseJson.results.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0], resultProperties);\r","        \r","        // Check properties of the metadata object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].metadata, metadataProperties);\r","        \r","        // Check properties of the balance_short object in the metadata\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].metadata.balance_short, balanceShortProperties);\r","        \r","        // Check properties of the configuration array in the metadata\r","        if (responseJson.results[0].metadata.configuration && responseJson.results[0].metadata.configuration.length > 0) {\r","            xerpaTestApi.checkObjectProperties(responseJson.results[0].metadata.configuration[0], configurationProperties);\r","        }\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"9bd0a74d-ffb1-48a9-899b-a3288ffbf9cd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/reports/","description":"<p>Este endpoint entrega una lista de reportes asociados al usuario consultado.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/reports/</p>\n</li>\n<li><p>Parámetros de query: Se agregan al final de la ruta, sirven principalmente para manejar la paginación de la petición. Ejm: <code>/payments/?page=1&amp;page_size=10</code></p>\n<ul>\n<li><p><code>page</code>(number): Número de página para la paginación de resultados.</p>\n</li>\n<li><p><code>page_size</code>(number): Cantidad de resultados que se incluirán por página.</p>\n</li>\n<li><p><code>paginate</code>(bool): Booleano que indica si se desea paginar la respuesta.</p>\n</li>\n<li><p><code>year</code>(number): Especifica que año se desea obtener.</p>\n</li>\n<li><p><code>month</code>(number): Especifica que mes que desea obtener.</p>\n</li>\n<li><p><code>day</code>(number): Especifica que mes se desea obtener.</p>\n</li>\n<li><p><code>report_type</code>(string): ID del tipo de reporte.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\"><strong>Request Body:</strong></h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto paginado en formato JSON, que incluye un arreglo de <code>reports</code>con la siguiente estructura:</p>\n<ul>\n<li><p><code>id</code>(string): ID del reporte.</p>\n</li>\n<li><p><code>user_id</code>(string): ID del usuario asociado al reporte.</p>\n</li>\n<li><p><code>metadata</code>(object): Información adicional asociada al reporte, este incluye:</p>\n<ul>\n<li><p><code>no_show</code>(string): Indica si el reporte está marcado como no mostrado.</p>\n</li>\n<li><p><code>balance_short</code>(object): Detalles del resumen financiero mensual:</p>\n<ul>\n<li><p><code>type</code>(string): Tipo de balance.</p>\n</li>\n<li><p><code>year</code>(number): Año del reporte</p>\n</li>\n<li><p><code>month</code>(number): Mes del reporte</p>\n</li>\n<li><p><code>month_name</code>(string): Nombre del mes</p>\n</li>\n<li><p><code>monthly_grow</code>(number): Crecimiento del ahorro.</p>\n</li>\n<li><p><code>monthly_saving</code>(number): Total ahorrado en el mes.</p>\n</li>\n<li><p><code>monthly_balance</code>(number): Saldo total del mes.</p>\n</li>\n<li><p><code>monthly_withdrawal</code>(number): Total de retiros.</p>\n</li>\n<li><p><code>monthly_projects_count</code>(number): Número de metas activas en el mes.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>configuration</code>(array de objects): Este contiene una lista de diferentes configuraciones visuales o lógicas del reporte. Estas se componen de:</p>\n<ul>\n<li><p><code>page</code>(string): Página del reporte.</p>\n</li>\n<li><p><code>type</code>(string): Tipo de diseño o reporte.</p>\n</li>\n</ul>\n</li>\n<li><p><code>page</code> (string): Página o sección del reporte.</p>\n</li>\n<li><p><code>type</code> (string): Tipo de contenido configurado para esa sección.</p>\n</li>\n<li><p><code>year</code> (number): Año del reporte.</p>\n</li>\n<li><p><code>month</code> (number): Mes del reporte.</p>\n</li>\n<li><p><code>week</code> (number): Semana del reporte (si aplica).</p>\n</li>\n<li><p><code>day</code> (number): Día del reporte (si aplica).</p>\n</li>\n<li><p><code>is_read</code> (boolean): Indica si el reporte fue leído por el usuario.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha de creación del reporte.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de última actualización.</p>\n</li>\n<li><p><code>report_type</code> (string): ID de tipo de reporte (por ejemplo: semanal, mensual, etc.).</p>\n</li>\n</ul>\n<p>La respuesta también incluye información de paginación, como:</p>\n<ul>\n<li><p><code>next</code>(string or null): URL de la siguiente página</p>\n</li>\n<li><p><code>previous</code>(string or null): URL de la página anterior</p>\n</li>\n<li><p><code>total_pages</code>(number): Total de páginas disponibles</p>\n</li>\n<li><p><code>current_page</code>(number): Página actual</p>\n</li>\n<li><p><code>offset</code>(number): Índice de desplazamiento</p>\n</li>\n<li><p><code>count</code>(number): Total de elementos</p>\n</li>\n</ul>\n<h4 id=\"report-format\">Report Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"next\": { \"type\": [\"string\", \"null\"] },\n    \"previous\": { \"type\": [\"string\", \"null\"] },\n    \"total_pages\": { \"type\": \"integer\" },\n    \"current_page\": { \"type\": \"integer\" },\n    \"count\": { \"type\": \"integer\" },\n    \"offset\": { \"type\": \"integer\" },\n    \"results\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"metadata\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"no_show\": { \"type\": \"boolean\" },\n              \"balance_short\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"type\": { \"type\": \"string\" },\n                  \"year\": { \"type\": \"integer\" },\n                  \"month\": { \"type\": \"integer\" },\n                  \"month_name\": { \"type\": \"string\" },\n                  \"monthly_grow\": { \"type\": \"number\" },\n                  \"monthly_saving\": { \"type\": \"number\" },\n                  \"monthly_balance\": { \"type\": \"number\" },\n                  \"monthly_withdrawal\": { \"type\": \"number\" },\n                  \"monthly_projects_count\": { \"type\": \"integer\" }\n                },\n              },\n              \"configuration\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"properties\": {\n                    \"page\": { \"type\": \"string\" },\n                    \"type\": { \"type\": \"string\" }\n                  },\n                }\n              }\n            },\n          },\n          \"year\": { \"type\": \"integer\" },\n          \"month\": { \"type\": \"integer\" },\n          \"week\": { \"type\": \"integer\" },\n          \"day\": { \"type\": \"integer\" },\n          \"is_read\": { \"type\": \"boolean\" },\n          \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"report_type\": { \"type\": \"string\", \"format\": \"uuid\" }\n        }\n      }\n    }\n  },\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","reports",""],"host":["{{host_app}}"],"query":[{"disabled":true,"key":"page","value":"1"},{"disabled":true,"key":"page_size","value":"1"},{"disabled":true,"key":"paginate","value":"true"},{"disabled":true,"key":"year","value":"2025"},{"disabled":true,"key":"month","value":"4"},{"disabled":true,"key":"day","value":"28"},{"disabled":true,"key":"report_type","value":"956a5ecf-090e-43b8-be02-1027e783e2b1"}],"variable":[]}},"response":[{"id":"3afc0069-4820-459d-848e-f35127094fe7","name":"Successful Response","originalRequest":{"method":"GET","header":[]},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"56ea95a7-adc4-4596-8bf2-ba66e587533a\",\n        \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"balance_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"year\": 2024,\n                \"month\": 3,\n                \"month_name\": \"marzo\",\n                \"monthly_grow\": 350,\n                \"monthly_saving\": 350,\n                \"monthly_balance\": 290,\n                \"monthly_withdrawal\": 0,\n                \"monthly_projects_count\": 1\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"balance_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2024,\n        \"month\": 3,\n        \"week\": 13,\n        \"day\": 31,\n        \"is_read\": false,\n        \"created_at\": \"2024-04-24T10:58:32.272957-06:00\",\n        \"updated_at\": \"2024-04-24T10:58:32.272981-06:00\",\n        \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n    }\n]"},{"id":"ffd49356-5697-4cd7-b8b2-38b40e0cd9ae","name":"Successful Response - paginate","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/reports/?paginate=true","host":["{{host_app}}api-saving"],"path":["v1","saving-service","users","{{user_id}}","reports",""],"query":[{"key":"paginate","value":"true"},{"key":"page","value":"1","disabled":true},{"key":"page_size","value":"1","disabled":true},{"key":"year","value":"2024","disabled":true},{"key":"month","value":"4","disabled":true},{"key":"day","value":"30","disabled":true},{"key":"report_type","value":"956a5ecf-090e-43b8-be02-1027e783e2b1","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"next\": null,\n    \"previous\": null,\n    \"total_pages\": 1,\n    \"current_page\": 1,\n    \"offset\": 0,\n    \"results\": [\n        {\n            \"id\": \"56ea95a7-adc4-4596-8bf2-ba66e587533a\",\n            \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"balance_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"year\": 2024,\n                    \"month\": 3,\n                    \"month_name\": \"marzo\",\n                    \"monthly_grow\": 350,\n                    \"monthly_saving\": 350,\n                    \"monthly_balance\": 290,\n                    \"monthly_withdrawal\": 0,\n                    \"monthly_projects_count\": 1\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"balance_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2024,\n            \"month\": 3,\n            \"week\": 13,\n            \"day\": 31,\n            \"is_read\": false,\n            \"created_at\": \"2024-04-24T10:58:32.272957-06:00\",\n            \"updated_at\": \"2024-04-24T10:58:32.272981-06:00\",\n            \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n        }\n    ]\n}"},{"id":"cfec7dda-e5f6-4c1a-b067-44dc61a779d9","name":"Bad Request - Invalid page","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/reports/?paginate=true","host":["{{host_app}}api-saving"],"path":["v1","saving-service","users","{{user_id}}","reports",""],"query":[{"key":"paginate","value":"true"},{"key":"page","value":"1","disabled":true},{"key":"page_size","value":"1","disabled":true},{"key":"year","value":"2024","disabled":true},{"key":"month","value":"4","disabled":true},{"key":"day","value":"30","disabled":true},{"key":"report_type","value":"956a5ecf-090e-43b8-be02-1027e783e2b1","disabled":true}]}},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Invalid page.\"\n}"}],"_postman_id":"9bd0a74d-ffb1-48a9-899b-a3288ffbf9cd"},{"name":"Obtener reporte","event":[{"listen":"test","script":{"id":"6a96b0d8-b4b1-434b-9d20-1eddeed13533","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    metadata: 'object',\r","    year: 'number',\r","    month: 'number',\r","    week: 'number',\r","    day: 'number',\r","    is_read: 'boolean',\r","    created_at: 'string',\r","    updated_at: 'string',\r","    report_type: 'string'\r","};\r","\r","const metadataProperties = {\r","    no_show: 'boolean',\r","    balance_short: 'object',\r","    configuration: 'array'\r","};\r","\r","const balanceShortProperties = {\r","    type: 'string',\r","    year: 'number',\r","    month: 'number',\r","    month_name: 'string',\r","    monthly_grow: 'number',\r","    monthly_saving: 'number',\r","    monthly_balance: 'number',\r","    monthly_withdrawal: 'number',\r","    monthly_projects_count: 'number'\r","};\r","\r","const configurationProperties = {\r","    page: 'string',\r","    type: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the metadata object\r","pm.test(\"Metadata has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.metadata, metadataProperties);\r","    \r","    // Check properties of the balance_short object in the metadata\r","    xerpaTestApi.checkObjectProperties(responseJson.metadata.balance_short, balanceShortProperties);\r","    \r","    // Check properties of the configuration array in the metadata\r","    if (responseJson.metadata.configuration && responseJson.metadata.configuration.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.metadata.configuration[0], configurationProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"338cc0e7-45ab-4467-8e30-d16d42907f65","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/reports/{{report_id}}","description":"<p>Este endpoint permite <strong>consultar el contenido completo de un reporte de ahorro específico</strong> asociado a un usuario.</p>\n<h4 id=\"request\"><strong>Request</strong></h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/reports/{{report_id}}/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>report_id</code>(string): ID del reporte asociado al usuario.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON con los detalles del reporte, con la siguiente estructura:</p>\n<ul>\n<li><p><code>id</code> (string): ID del reporte.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario asociado.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, incluyendo:</p>\n<ul>\n<li><p><code>no_show</code> (boolean): Indica si el reporte fue marcado como no mostrado.</p>\n</li>\n<li><p><code>balance_short</code> (object): Resumen del comportamiento financiero del mes:</p>\n<ul>\n<li><p><code>type</code> (string): Tipo de balance.</p>\n</li>\n<li><p><code>year</code> (number): Año del reporte.</p>\n</li>\n<li><p><code>month</code> (number): Mes del reporte.</p>\n</li>\n<li><p><code>month_name</code> (string): Nombre del mes.</p>\n</li>\n<li><p><code>monthly_grow</code> (number): Crecimiento del ahorro.</p>\n</li>\n<li><p><code>monthly_saving</code> (number): Total ahorrado en el mes.</p>\n</li>\n<li><p><code>monthly_balance</code> (number): Saldo mensual final.</p>\n</li>\n<li><p><code>monthly_withdrawal</code> (number): Total de retiros.</p>\n</li>\n<li><p><code>monthly_projects_count</code> (number): Número de metas activas ese mes.</p>\n</li>\n</ul>\n</li>\n<li><p><code>configuration</code>(array of objects): Este contiene una lista de diferentes configuraciones visuales o lógicas del reporte. Estas se componen de:</p>\n<ul>\n<li><p><code>page</code>(string): Página del reporte.</p>\n</li>\n<li><p><code>type</code>(string): Tipo de diseño o reporte.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>year</code> (number): Año del reporte.</p>\n</li>\n<li><p><code>month</code> (number): Mes del reporte.</p>\n</li>\n<li><p><code>week</code> (number): Semana del reporte (si aplica).</p>\n</li>\n<li><p><code>day</code> (number): Día del reporte (si aplica).</p>\n</li>\n<li><p><code>is_read</code> (boolean): Indica si el reporte fue leído por el usuario.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha de creación del reporte.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de última actualización.</p>\n</li>\n<li><p><code>report_type</code> (string): ID de tipo de reporte (por ejemplo: semanal, mensual, etc.).</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"metadata\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"no_show\": { \"type\": \"boolean\" },\n        \"balance_short\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"type\": { \"type\": \"string\" },\n            \"year\": { \"type\": \"integer\" },\n            \"month\": { \"type\": \"integer\" },\n            \"month_name\": { \"type\": \"string\" },\n            \"monthly_grow\": { \"type\": \"number\" },\n            \"monthly_saving\": { \"type\": \"number\" },\n            \"monthly_balance\": { \"type\": \"number\" },\n            \"monthly_withdrawal\": { \"type\": \"number\" },\n            \"monthly_projects_count\": { \"type\": \"integer\" }\n          },\n          \"required\": [\n            \"type\",\n            \"year\",\n            \"month\",\n            \"month_name\",\n            \"monthly_grow\",\n            \"monthly_saving\",\n            \"monthly_balance\",\n            \"monthly_withdrawal\",\n            \"monthly_projects_count\"\n          ]\n        },\n        \"configuration\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"page\": { \"type\": \"string\" },\n              \"type\": { \"type\": \"string\" }\n            },\n            \"required\": [\"page\", \"type\"]\n          }\n        }\n      },\n    },\n    \"year\": { \"type\": \"integer\" },\n    \"month\": { \"type\": \"integer\" },\n    \"week\": { \"type\": \"integer\" },\n    \"day\": { \"type\": \"integer\" },\n    \"is_read\": { \"type\": \"boolean\" },\n    \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"report_type\": { \"type\": \"string\", \"format\": \"uuid\" }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","reports","{{report_id}}"],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"95d017bc-2c4c-41ab-8f33-93c5e6c9a3d4","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/reports/56ea95a7-adc4-4596-8bf2-ba66e587533a/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"56ea95a7-adc4-4596-8bf2-ba66e587533a\",\n    \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n    \"metadata\": {\n        \"no_show\": false,\n        \"balance_short\": {\n            \"type\": \"growth_no_withdrawals\",\n            \"year\": 2024,\n            \"month\": 3,\n            \"month_name\": \"marzo\",\n            \"monthly_grow\": 350,\n            \"monthly_saving\": 350,\n            \"monthly_balance\": 290,\n            \"monthly_withdrawal\": 0,\n            \"monthly_projects_count\": 1\n        },\n        \"configuration\": [\n            {\n                \"page\": \"balance_short\",\n                \"type\": \"growth_no_withdrawals\"\n            }\n        ]\n    },\n    \"year\": 2024,\n    \"month\": 3,\n    \"week\": 13,\n    \"day\": 31,\n    \"is_read\": false,\n    \"created_at\": \"2024-04-24T10:58:32.272957-06:00\",\n    \"updated_at\": \"2024-04-24T10:58:32.272981-06:00\",\n    \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n}"}],"_postman_id":"338cc0e7-45ab-4467-8e30-d16d42907f65"},{"name":"Marcar reporte como leído","event":[{"listen":"test","script":{"id":"4fd1354e-ad0b-4a1c-bbdc-26d10e298973","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulPost();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    metadata: 'object',\r","    year: 'number',\r","    month: 'number',\r","    week: 'number',\r","    day: 'number',\r","    is_read: 'boolean',\r","    created_at: 'string',\r","    updated_at: 'string',\r","    report_type: 'string'\r","};\r","\r","const metadataProperties = {\r","    no_show: 'boolean',\r","    balance_short: 'object',\r","    configuration: 'array'\r","};\r","\r","const balanceShortProperties = {\r","    type: 'string',\r","    year: 'number',\r","    month: 'number',\r","    month_name: 'string',\r","    monthly_grow: 'number',\r","    monthly_saving: 'number',\r","    monthly_balance: 'number',\r","    monthly_withdrawal: 'number',\r","    monthly_projects_count: 'number'\r","};\r","\r","const configurationProperties = {\r","    page: 'string',\r","    type: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the metadata object\r","pm.test(\"Metadata has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.metadata, metadataProperties);\r","    \r","    // Check properties of the balance_short object in the metadata\r","    xerpaTestApi.checkObjectProperties(responseJson.metadata.balance_short, balanceShortProperties);\r","    \r","    // Check properties of the configuration array in the metadata\r","    if (responseJson.metadata.configuration && responseJson.metadata.configuration.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.metadata.configuration[0], configurationProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"80dc40ba-8725-41d2-ad1c-4748a9a598bf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"is_read\": true\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/reports/{{report_id}}/is-read/","description":"<p>Este endpoint permite <strong>actualizar el estado de lectura</strong> de un reporte específico para un usuario.</p>\n<h4 id=\"request\"><strong>Request</strong></h4>\n<ul>\n<li><p>Método: <code>POST</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/reports/{{report_id}}/is-read/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado al proyecto.</p>\n</li>\n<li><p><code>report_id</code>(string): ID del reporte asociado al usuario.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>La solicitud debe enviarse en formato JSON con el siguiente campo:</p>\n<ul>\n<li><code>is_read</code> (boolean): Indica si el reporte ha sido leído (<code>true</code>) o no (<code>false</code>).</li>\n</ul>\n<h4 id=\"request-body-example\"><strong>Request Body Example</strong></h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"is_read\": true\n}\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta incluirá los <strong>detalles actualizados del reporte</strong>, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del reporte.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario asociado.</p>\n</li>\n<li><p><code>metadata</code> (objet): Información adicional, incluyendo:</p>\n<ul>\n<li><p><code>no_show</code> (boolean): Indica si el reporte fue marcado como no mostrado.</p>\n</li>\n<li><p><code>balance_short</code> (objeto): Resumen del comportamiento financiero del mes:</p>\n<ul>\n<li><p><code>type</code> (string): Tipo de balance.</p>\n</li>\n<li><p><code>year</code> (number): Año del reporte.</p>\n</li>\n<li><p><code>month</code> (number): Mes del reporte.</p>\n</li>\n<li><p><code>month_name</code> (string): Nombre del mes.</p>\n</li>\n<li><p><code>monthly_grow</code> (number): Crecimiento del ahorro.</p>\n</li>\n<li><p><code>monthly_saving</code> (number): Total ahorrado en el mes.</p>\n</li>\n<li><p><code>monthly_balance</code> (number): Saldo mensual final.</p>\n</li>\n<li><p><code>monthly_withdrawal</code> (number): Total de retiros.</p>\n</li>\n<li><p><code>monthly_projects_count</code> (number): Número de metas activas ese mes.</p>\n</li>\n</ul>\n</li>\n<li><p><code>configuration</code>(array de objects): Este contiene una lista de diferentes configuraciones visuales o logicas del reporte. Estas se componen se:</p>\n<ul>\n<li><p><code>page</code>(string): Página del reporte.</p>\n</li>\n<li><p><code>type</code>(string): Tipo de diseño o reporte.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>year</code> (number): Año del reporte.</p>\n</li>\n<li><p><code>month</code> (number): Mes del reporte.</p>\n</li>\n<li><p><code>week</code> (number): Semana del reporte (si aplica).</p>\n</li>\n<li><p><code>day</code> (number): Día del reporte (si aplica).</p>\n</li>\n<li><p><code>is_read</code> (boolean): Indica si el reporte fue leído por el usuario.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha de creación del reporte.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de última actualización.</p>\n</li>\n<li><p><code>report_type</code> (string): ID de tipo de reporte (por ejemplo: semanal, mensual, etc.).</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"metadata\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"no_show\": { \"type\": \"boolean\" },\n        \"balance_short\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"type\": { \"type\": \"string\" },\n            \"year\": { \"type\": \"integer\" },\n            \"month\": { \"type\": \"integer\" },\n            \"month_name\": { \"type\": \"string\" },\n            \"monthly_grow\": { \"type\": \"number\" },\n            \"monthly_saving\": { \"type\": \"number\" },\n            \"monthly_balance\": { \"type\": \"number\" },\n            \"monthly_withdrawal\": { \"type\": \"number\" },\n            \"monthly_projects_count\": { \"type\": \"integer\" }\n          },\n          \"required\": [\n            \"type\",\n            \"year\",\n            \"month\",\n            \"month_name\",\n            \"monthly_grow\",\n            \"monthly_saving\",\n            \"monthly_balance\",\n            \"monthly_withdrawal\",\n            \"monthly_projects_count\"\n          ]\n        },\n        \"configuration\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"page\": { \"type\": \"string\" },\n              \"type\": { \"type\": \"string\" }\n            },\n            \"required\": [\"page\", \"type\"]\n          }\n        }\n      },\n    },\n    \"year\": { \"type\": \"integer\" },\n    \"month\": { \"type\": \"integer\" },\n    \"week\": { \"type\": \"integer\" },\n    \"day\": { \"type\": \"integer\" },\n    \"is_read\": { \"type\": \"boolean\" },\n    \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"report_type\": { \"type\": \"string\", \"format\": \"uuid\" }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","reports","{{report_id}}","is-read",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"a68a0c66-99aa-44a7-9d3f-27c4a8c90009","name":"Successful Response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"is_read\": false\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/reports/56ea95a7-adc4-4596-8bf2-ba66e587533a/is-read/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"56ea95a7-adc4-4596-8bf2-ba66e587533a\",\n    \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n    \"metadata\": {\n        \"no_show\": false,\n        \"balance_short\": {\n            \"type\": \"growth_no_withdrawals\",\n            \"year\": 2024,\n            \"month\": 3,\n            \"month_name\": \"marzo\",\n            \"monthly_grow\": 350,\n            \"monthly_saving\": 350,\n            \"monthly_balance\": 290,\n            \"monthly_withdrawal\": 0,\n            \"monthly_projects_count\": 1\n        },\n        \"configuration\": [\n            {\n                \"page\": \"balance_short\",\n                \"type\": \"growth_no_withdrawals\"\n            }\n        ]\n    },\n    \"year\": 2024,\n    \"month\": 3,\n    \"week\": 13,\n    \"day\": 31,\n    \"is_read\": false,\n    \"created_at\": \"2024-04-24T10:58:32.272957-06:00\",\n    \"updated_at\": \"2024-04-24T10:58:32.272981-06:00\",\n    \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n}"},{"id":"6817e52d-069b-4e0b-a5c2-16d66ed947fc","name":"Bad Request - Invalid is_read","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"is_read\": invalid\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/reports/{{report_id}}/is-read/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 21:05:31 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"75"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"d1207b97-125e-4030-8982-cfe61354cded"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZmQXF3UIAMEtYA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-683a1d9b-098da67e46fb31e109f23aa4;Parent=5861a2d57ae54929;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"JSON parse error - Expecting value: line 2 column 16 (char 18)\"\n}"}],"_postman_id":"80dc40ba-8725-41d2-ad1c-4748a9a598bf"},{"name":"Metricas de ahorro en home unificado","id":"999e9001-dbb4-4ccb-84af-74c6904d816e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/metrics/views/unified-home-saving-data/?status_name=project_status_active","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","metrics","views","unified-home-saving-data",""],"host":["{{host_app}}"],"query":[{"key":"status_name","value":"project_status_active"}],"variable":[]}},"response":[],"_postman_id":"999e9001-dbb4-4ccb-84af-74c6904d816e"},{"name":"metricas de ahorros/depositos y retiros","id":"d8fe816e-9a28-4eb6-b42d-95161f5c2a17","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/metrics/savings/?date_from=2026-01&date_to=2026-06","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","metrics","savings",""],"host":["{{host_app}}"],"query":[{"key":"date_from","value":"2026-01"},{"key":"date_to","value":"2026-06"}],"variable":[]}},"response":[],"_postman_id":"d8fe816e-9a28-4eb6-b42d-95161f5c2a17"}],"id":"01730ee2-64d9-4e3b-98d0-d01c5e77d5d1","description":"<p>Esta sección contiene los endpoints relacionados con los <strong>reportes periódicos de ahorro</strong> generados para los usuarios. Estos reportes resumen el desempeño del usuario en función de sus metas de ahorro, reglas activas y movimientos registrados durante un período determinado (semana o mes).</p>\n<blockquote>\n<p>Todos los endpoints requieren autenticación con User Token.<br />Authorization: Bearer {{user_token}} </p>\n</blockquote>\n<hr />\n<h4 id=\"📌-funcionalidades-disponibles\">📌 Funcionalidades disponibles</h4>\n<ul>\n<li><p>Devuelve la lista de reportes generados para el usuario, organizados por período y tipo (semanal o mensual).</p>\n</li>\n<li><p>Permite consultar el contenido detallado de un reporte específico, incluyendo métricas de ahorro, número de reglas activas, progreso en metas, y comparativas con períodos anteriores.</p>\n</li>\n<li><p>Marca un reporte como \"leído\" por parte del usuario, permitiendo a la plataforma registrar esta acción y generar lógica condicional (por ejemplo: evitar enviar recordatorios duplicados).</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🎯-consideraciones\">🎯 Consideraciones</h4>\n<ul>\n<li><p>Cada reporte puede incluir <strong>gráficas, indicadores clave y recomendaciones personalizadas</strong> según el comportamiento del usuario.</p>\n</li>\n<li><p>El campo <code>read</code> puede utilizarse para personalizar la experiencia del usuario en la app (mostrar banners, alertas, etc.).</p>\n</li>\n<li><p>La lógica de generación de reportes está automatizada en backend, pero estos endpoints permiten su consulta e interacción desde frontend.</p>\n</li>\n</ul>\n<hr />\n<p>Utiliza esta sección para integrar la funcionalidad de reportes en tus aplicaciones o flujos de trabajo.</p>\n<hr />\n","_postman_id":"01730ee2-64d9-4e3b-98d0-d01c5e77d5d1"},{"name":"Catálogos de ahorro automático","item":[{"name":"Catálogos disponibles","item":[{"name":"Tipos de metas de ahorro","id":"33eaad18-4098-43c9-8ef8-53e1b4f4b10a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=project_type","description":"<p>Esta solicitud HTTP <strong>GET</strong> obtiene una lista de catálogos de <strong>project_type</strong> relacionados con ahorro.</p>\n<p>El propósito de esta solicitud es obtener información detallada sobre los diferentes tipos de proyectos disponibles en el sistema.</p>\n<h3 id=\"formato-de-la-solicitud\">Formato de la Solicitud</h3>\n<ul>\n<li><p><strong>Endpoint</strong>: <code>{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=project_type</code></p>\n</li>\n<li><p><strong>Método</strong>: GET</p>\n</li>\n</ul>\n<h3 id=\"formato-de-la-respuesta\">Formato de la Respuesta</h3>\n<p>Cuando se ejecuta correctamente (código HTTP 200), la respuesta estará en formato JSON y contendrá un arreglo (array) de tipos de proyectos.</p>\n<p>Cada objeto de tipo de proyecto incluye las siguientes propiedades:</p>\n<ul>\n<li><p><strong>id</strong>: Identificador único del tipo de proyecto.</p>\n</li>\n<li><p><strong>catalog</strong>: Catálogo al que pertenece el tipo de proyecto.</p>\n</li>\n<li><p><strong>item_name</strong>: Nombre del tipo de proyecto.</p>\n</li>\n<li><p><strong>description</strong>: Breve descripción del tipo de proyecto.</p>\n</li>\n<li><p><strong>metadata</strong>: Objeto que contiene información adicional sobre el tipo de proyecto:</p>\n<ul>\n<li><p><strong>icon</strong>: URL del ícono o imagen que representa el tipo de proyecto.</p>\n</li>\n<li><p><strong>name</strong>: Nombre mostrado en el frontend.</p>\n</li>\n<li><p><strong>color</strong>: Código de color RGB (si aplica).</p>\n</li>\n<li><p><strong>order</strong>: Orden de presentación en la lista.</p>\n</li>\n<li><p><strong>active</strong>: Indica si el tipo de proyecto está activo.</p>\n</li>\n<li><p><strong>short_name</strong>: Versión abreviada del nombre del tipo de proyecto.</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>Todas las propiedades dentro de <strong>metadata</strong> pueden ajustarse según las necesidades de implementación, permitiendo añadir nuevas propiedades o modificar las existentes.</p>\n","urlObject":{"path":["api-saving","v1","saving-service","catalogs",""],"host":["{{host_app}}"],"query":[{"key":"catalog","value":"project_type"}],"variable":[]}},"response":[{"id":"257ad7f4-a606-451e-9ce2-115ab67612b7","name":"Tipos de metas de ahorro","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=project_type","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":"project_type"}]}},"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"project_type\": [\n        {\n            \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_holidays\",\n            \"description\": \"Meta de ahorro para vacaciones\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                \"name\": \"Vacaciones\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 1,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"eeb4ccdb-f90e-4b96-888c-d8937185d96c\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_house\",\n            \"description\": \"Meta de ahorro para casa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/casa.png\",\n                \"name\": \"Casa\",\n                \"color\": \"#7C2582\",\n                \"group\": \"vivienda\",\n                \"order\": 1,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_HOUSE\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"6e274ad2-d035-40d6-af56-24ced37c9020\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_foot_house\",\n            \"description\": \"Meta de ahorro para pie de la casa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/pie_casa.png\",\n                \"name\": \"Pie de la casa\",\n                \"group\": \"vivienda\",\n                \"order\": 2,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_FOOT_HOUSE\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"7c1521e9-6d06-4c6e-9aa5-db4414afe71f\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_car\",\n            \"description\": \"Meta de ahorro para vehículo\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/vehiculo.png\",\n                \"name\": \"Vehículo\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 2,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_CAR\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"d86ae508-1b79-40e8-aa9f-a26c7c222d01\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_house_arrangement\",\n            \"description\": \"Meta de ahorro para arreglos para la casa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/arreglo_casa.png\",\n                \"name\": \"Arreglos para la casa\",\n                \"group\": \"vivienda\",\n                \"order\": 3,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_HOUSE_ARRANGEMENT\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"5d8862bf-b1b2-492f-b198-ae14ddef822e\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_education\",\n            \"description\": \"Meta de ahorro para educación\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/educacion.png\",\n                \"name\": \"Educación\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 3,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_EDUCATION\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"54b06832-c855-4717-99ef-5a7568d277f2\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_subsidy\",\n            \"description\": \"Meta de ahorro para subsidio\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/subsidio.png\",\n                \"name\": \"Subsidio\",\n                \"group\": \"vivienda\",\n                \"order\": 4,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_SUBSIDY\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"a7409f6a-e6ba-4ed2-8f67-ba6d945681f6\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_shopping\",\n            \"description\": \"Meta de ahorro para compras\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/compras.png\",\n                \"name\": \"Compras\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 4,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_SHOPPING\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"461a96b0-96d1-4259-a965-c599e1d7da1b\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_debts\",\n            \"description\": \"Meta de ahorro para deudas\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/deudas.png\",\n                \"name\": \"Deudas\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 5,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_DEBTS\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"5877afb7-c6d8-4023-8498-9280890f3154\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_health\",\n            \"description\": \"Meta de ahorro para salud\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/salud.png\",\n                \"name\": \"Salud\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 6,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_HEALTH\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"bc92eb07-f119-4440-a3c9-79f89dd3bdb0\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_event\",\n            \"description\": \"Meta de ahorro para evento\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/evento.png\",\n                \"name\": \"Eventos\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 7,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_EVENT\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"5877afb7-c6d8-4023-8498-9280890f3155\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_other\",\n            \"description\": \"Meta de ahorro para otro\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/otros.png\",\n                \"name\": \"Otros ahorros\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 8,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_OTHER\",\n                \"description\": \"\"\n            }\n        }\n    ]\n}"}],"_postman_id":"33eaad18-4098-43c9-8ef8-53e1b4f4b10a"},{"name":"Estados de las metas de ahorro","event":[{"listen":"test","script":{"id":"c418fd5c-2f4e-429d-8b58-dc1c1ff81c25","exec":["// Stores the first project status id in an environment variable","var jsonData = pm.response.json();","if (jsonData.project_status.length > 0) {","    pm.environment.set(\"projectStatusId\", jsonData.project_status[0].id);","}"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"a7970a2a-204f-43eb-842b-4a061201d9da","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=project_status","description":"<p>Este endpoint permite recuperar la lista de estados de metas disponibles en el servicio de catálogos. Cada estado representa una etapa del ciclo de vida de la meta, la cual sólo puede tener un estado asociado.</p>\n<p>En este catálogo no pueden agregarse ni quitarse registros, solo se puede modificar la información de la metadata</p>\n<h2 id=\"método\">Método</h2>\n<p>GET</p>\n<h2 id=\"url\">URL</h2>\n<p><code>{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=project_status</code></p>\n<h2 id=\"parámetros-de-solicitud\">Parámetros de Solicitud</h2>\n<ul>\n<li><strong>catalog</strong> (query string): Este parámetro es obligatorio y debe tener el valor <code>project_status</code> para obtener la lista de estados de proyecto.</li>\n</ul>\n<h2 id=\"respuesta-esperada\">Respuesta Esperada</h2>\n<p>La respuesta de este endpoint es un objeto JSON con el siguiente formato:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"project_status\": [\n    {\n      \"id\": \"\",\n      \"catalog\": \"\",\n      \"item_name\": \"\",\n      \"description\": \"\",\n      \"metadata\": {\n        \"icon\": \"\",\n        \"color\": \"\",\n        \"active\": true,\n        \"short_name\": \"\"\n      }\n    }\n  ]\n}\n\n</code></pre>\n<h3 id=\"detalles-de-la-respuesta\">Detalles de la Respuesta</h3>\n<ul>\n<li><p><strong>project_status</strong>: Es una lista de objetos que representan cada estado de proyecto.</p>\n<ul>\n<li><p><strong>id</strong>: Identificador único del estado del proyecto.</p>\n</li>\n<li><p><strong>catalog</strong>: Nombre del catálogo al que pertenece el estado.</p>\n</li>\n<li><p><strong>item_name</strong>: Nombre del estado del proyecto.</p>\n</li>\n<li><p><strong>description</strong>: Descripción del estado del proyecto.</p>\n</li>\n<li><p><strong>metadata</strong>: Un objeto que contiene información adicional sobre el estado del proyecto.</p>\n<ul>\n<li><p><strong>icon</strong>: Icono asociado con el estado.</p>\n</li>\n<li><p><strong>color</strong>: Color representativo del estado.</p>\n</li>\n<li><p><strong>active</strong>: Indica si el estado está activo (booleano).</p>\n</li>\n<li><p><strong>short_name</strong>: Nombre corto del estado del proyecto.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h2 id=\"código-de-estado\">Código de Estado</h2>\n<ul>\n<li><strong>200 OK</strong>: Indica que la solicitud fue exitosa y se devolvió la lista de estados de proyecto.</li>\n</ul>\n<h3 id=\"notas\">Notas</h3>\n<p>Asegúrese de que el parámetro <code>catalog</code> esté correctamente configurado para obtener la respuesta deseada. La respuesta incluirá una lista de estados de proyecto, cada uno con su respectiva información.</p>\n<h3 id=\"estados-de-metas-de-ahorros\">Estados de metas de ahorros</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Status</strong></th>\n<th><strong>id</strong></th>\n<th><strong>Descripción</strong></th>\n<th><strong>Ejecución de reglas</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>project_status_setup</strong></td>\n<td>8df908b6-8ab3-11ed-a1eb-0242ac120002</td>\n<td>Este estado sólo se asigna a las metas creadas pero que les falta algún parámetro para su configuración (reglas, cuentas, etc). Una vez finalizado correctamente, la meta debe pasar al estado activa</td>\n<td>No</td>\n</tr>\n<tr>\n<td><strong>project_status_active</strong></td>\n<td>f2a34b3c-5eea-4bfd-a18e-06d675826486</td>\n<td>Son las metas que están operando de forma regular, sus reglas generando ahorros y con todas las funcionalidades activas.</td>\n<td>Si</td>\n</tr>\n<tr>\n<td><strong>project_status_finished</strong></td>\n<td>794fb606-84d0-4b65-9e95-5057a5e24ef5</td>\n<td>Son metas donde se alcanzó el monto objetivo de ahorro y todas sus reglas se detienen. El dinero aún se encuentra de forma total o parcial dentro del producto de destino. Solo permite el retiro de dinero</td>\n<td>No</td>\n</tr>\n<tr>\n<td><strong>project_status_deleted</strong></td>\n<td>487dd0e9-7294-416d-b06f-828e2ecf25bf</td>\n<td>Metas que el usuario no alcanzó a finalizar pero ya no quiere seguir ahorrando. El usuario solo la puede eliminar cuando hace el retiro total del dinero.</td>\n<td>No</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["api-saving","v1","saving-service","catalogs",""],"host":["{{host_app}}"],"query":[{"key":"catalog","value":"project_status"}],"variable":[]}},"response":[{"id":"6ce94ebf-3cb5-48d4-afa5-99c222baeab1","name":"Estados de las metas de ahorro","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=project_status","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":"project_status"}]}},"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"project_status\": [\n        {\n            \"id\": \"2691c3e2-08d4-4413-aa3e-eafccd9e9d49\",\n            \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n            \"item_name\": \"project_status_completed\",\n            \"description\": \"Meta completada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/completed.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"PROJECT_STATUS_COMPLETED\"\n            }\n        },\n        {\n            \"id\": \"8df908b6-8ab3-11ed-a1eb-0242ac120002\",\n            \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n            \"item_name\": \"project_status_setup\",\n            \"description\": \"Meta en configuracion\",\n            \"metadata\": {}\n        },\n        {\n            \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n            \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n            \"item_name\": \"project_status_active\",\n            \"description\": \"Meta activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n            }\n        },\n        {\n            \"id\": \"487dd0e9-7294-416d-b06f-828e2ecf25bf\",\n            \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n            \"item_name\": \"project_status_deleted\",\n            \"description\": \"Meta eliminada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/deleted.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"PROJECT_STATUS_DELETED\"\n            }\n        },\n        {\n            \"id\": \"794fb606-84d0-4b65-9e95-5057a5e24ef5\",\n            \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n            \"item_name\": \"project_status_finished\",\n            \"description\": \"Meta finalizada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/finished.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"PROJECT_STATUS_FINISHED\"\n            }\n        }\n    ]\n}"}],"_postman_id":"a7970a2a-204f-43eb-842b-4a061201d9da"},{"name":"Tipos de reglas de ahorro","id":"4f365ccc-6243-4780-bbae-015d8dcb7318","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=rule_types","description":"<p>Se retorna un listado de reglas de ahorro o <strong>rule_types</strong>. Cada objeto de este catálogo tiene las propiedades de id, catalog, item_name y description, los que se pueden ajustar de acuerdo a la implementación.</p>\n<p>En cada registro del catálogo en la metadata se encuentran los siguientes datos:</p>\n<ul>\n<li><p><strong>icon</strong>: url del ícono o imagen de la regla</p>\n</li>\n<li><p><strong>color</strong>: color RGB en caso de ser necesario</p>\n</li>\n<li><p><strong>active</strong>: para mostrar la regla como activa o no en el frontend</p>\n</li>\n</ul>\n<p>Todas las propiedades de la metadata se pueden cambiar de acuerdo a las necesidades de la implementación, agregando nuevas propiedades o bien modificándolas en caso de ser necesaria.</p>\n<p>Otros datos que se pueden incorporar:</p>\n<ul>\n<li><p><strong>order</strong>: para controla el orden de presentación de los elementos</p>\n</li>\n<li><p><strong>inactive_icon</strong>: para registrar la url del ícono cuando la regla no este activa</p>\n</li>\n</ul>\n<p>No se pueden agregar registros a este catálogo. Las reglas que se desean disponibilizar deben coordinarse con Xerpa para activar los procesos que las monitorean.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Tipo de regla</strong></th>\n<th><strong>Descripción</strong></th>\n<th><strong>id</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Monto fijo</td>\n<td>Fija un monto y ahorra de forma automática cada día, semana o mes.</td>\n<td></td>\n</tr>\n<tr>\n<td>Redondeo</td>\n<td>Aproxima tus compras al monto superior y ahorra la diferencia</td>\n<td></td>\n</tr>\n<tr>\n<td>Placer culpable</td>\n<td>Ahorra cada vez que compras en ese comercio o categoría culpable</td>\n<td></td>\n</tr>\n<tr>\n<td>Desafío 52 semanas</td>\n<td>Ahorra $1 la semana 1, $2 la segunda semana y asi</td>\n<td></td>\n</tr>\n<tr>\n<td>Pasión futbolera</td>\n<td>Ahorra cada vez que juegue, gane o cada gol que anote tu equipo favorito</td>\n<td></td>\n</tr>\n<tr>\n<td>Porcentaje del salario</td>\n<td>Ahorra un % de tu salario</td>\n<td></td>\n</tr>\n<tr>\n<td></td>\n<td></td>\n<td></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["api-saving","v1","saving-service","catalogs",""],"host":["{{host_app}}"],"query":[{"key":"catalog","value":"rule_types"}],"variable":[]}},"response":[{"id":"ee5069bb-2996-477d-9688-b58173db5172","name":"Tipos de reglas de ahorro","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=rule_types","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":"rule_types"}]}},"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"rule_types\": [\n        {\n            \"id\": \"13028acf-27df-42d7-b4f8-9861523cbada\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_manual_saving\",\n            \"description\": \"Regla ahorro manual\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_TYPE_MANUAL_SAVING\"\n            }\n        },\n        {\n            \"id\": \"229011e5-fb7a-447c-bada-bb48010175ce\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_guilty_pleasure\",\n            \"description\": \"Regla placer culpable\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                \"name\": \"Darse un gustito\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                \"description\": \"Ahorra cuando compres algo que te guste en tus comercios favoritos.\",\n                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                \"frequency_description\": \"Ahorra {amount} por cada compra en {description}.\"\n            }\n        },\n        {\n            \"id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_fixed_amount\",\n            \"description\": \"Regla monto fijo\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                \"name\": \"Monto fijo\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                \"description\": \"Fija un monto y ahorra de forma automática cada día, semana o mes.\",\n                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                \"frequency_description\": \"Ahorra cada {description}  {amount} para cumplir tu meta a tiempo.\"\n            }\n        },\n        {\n            \"id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_round_up\",\n            \"description\": \"Regla redondeo\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                \"name\": \"Redondeo\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                \"description\": \"Redondea tus compras al siguiente múltiplo de $1.000. La diferencia será tu ahorro.\",\n                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                \"frequency_description\": \"Redondea hacia el siguiente múltiplo de {amount}.\"\n            }\n        },\n        {\n            \"id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\",\n            \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n            \"item_name\": \"rule_type_soccer\",\n            \"description\": \"Regla pasión futbolera\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                \"name\": \"Pasión futbolera\",\n                \"color\": \"#7C2582\",\n                \"active\": false,\n                \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                \"short_name\": \"RULE_TYPE_SOCCER\",\n                \"description\": \"Ahorra cada vez que tu equipo favorito juega, gana o anota un gol.\",\n                \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                \"frequency_description\": \"Ahorra {amount} cuando {description}.\"\n            }\n        }\n    ]\n}"}],"_postman_id":"4f365ccc-6243-4780-bbae-015d8dcb7318"},{"name":"Tipos de orígenes de ahorro","id":"52bf1445-ed7c-4948-a551-f0271c5dd746","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=payment_source","description":"<h2 id=\"endpoint-overview\">Endpoint Overview</h2>\n<p>Este endpoint permite obtener el catálogo de los distintos orígenes que puede tener un ahorro. Los orígenes pueden incluir ahorros creados a través de reglas de ahorro, ahorros manuales, movimientos internos entre metas o importados desde otras plataformas del banco.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p><strong>Method</strong>: GET</p>\n</li>\n<li><p><strong>URL</strong>: <code>{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=payment_source</code></p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<ul>\n<li><p><strong>Status</strong>: 200 OK</p>\n</li>\n<li><p><strong>Content-Type</strong>: application/json</p>\n</li>\n</ul>\n<h4 id=\"response-body\">Response Body</h4>\n<p>El cuerpo de la respuesta contiene un objeto JSON con la siguiente estructura:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"payment_source\": [\n    {\n      \"id\": \"\",\n      \"catalog\": \"\",\n      \"item_name\": \"\",\n      \"description\": \"\",\n      \"metadata\": {}\n    }\n  ]\n}\n\n</code></pre>\n<ul>\n<li><p><strong>payment_source</strong>: Un arreglo que incluye objetos que representan los diferentes orígenes de ahorro. Cada objeto puede contener:</p>\n<ul>\n<li><p><strong>id</strong>: Identificador único del origen.</p>\n</li>\n<li><p><strong>catalog</strong>: Nombre del catálogo.</p>\n</li>\n<li><p><strong>item_name</strong>: Nombre del ítem del origen.</p>\n</li>\n<li><p><strong>description</strong>: Descripción del origen.</p>\n</li>\n<li><p><strong>metadata</strong>: Información adicional relacionada con el origen.</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>Asegúrese de manejar adecuadamente los datos devueltos para integrar los orígenes de ahorro en su aplicación.</p>\n","urlObject":{"path":["api-saving","v1","saving-service","catalogs",""],"host":["{{host_app}}"],"query":[{"key":"catalog","value":"payment_source"}],"variable":[]}},"response":[{"id":"aa946304-ce93-4b7f-a0a7-57130924dab6","name":"Tipos de orígenes de ahorro","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=payment_source","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":"payment_source"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"payment_source\": [\n        {\n            \"id\": \"dc7fa382-d3a7-4900-9af3-d633b8cfb8d2\",\n            \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n            \"item_name\": \"migrated_payment\",\n            \"description\": \"Payments que se generaron al momento de importar los usuarios y toda su información por primera vez.\",\n            \"metadata\": {}\n        },\n        {\n            \"id\": \"62fee3fe-6484-44e0-bb73-3c308f0b055d\",\n            \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n            \"item_name\": \"external_movements\",\n            \"description\": \"Pagos que reflejan movimientos realizados en cuentas meta a traves de otros canales bancarios\",\n            \"metadata\": {}\n        },\n        {\n            \"id\": \"862f49cf-acc0-48df-ae6d-0ac26e8a8afc\",\n            \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n            \"item_name\": \"internal_transfer\",\n            \"description\": \"Payments generados por movimientos internos entre metas del usuario\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/internal_transfer.svg\",\n                \"color\": \"#329B0B\",\n                \"title\": \"Transferencia a meta\"\n            }\n        },\n        {\n            \"id\": \"726bdff2-d3fb-4c08-82eb-fcd824a8669e\",\n            \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n            \"item_name\": \"finantial_readjustment\",\n            \"description\": \"Payments generados por procesos de reajustes de inflación en las cuenta\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/readjustment.svg\",\n                \"color\": \"#329B0B\",\n                \"title\": \"Reajuste\"\n            }\n        },\n        {\n            \"id\": \"2c8bf67d-5730-48cc-ac0b-0e8207b99519\",\n            \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n            \"item_name\": \"automated_rules\",\n            \"description\": \"Pagos automaticos generados por el sistema para capturar los ahorros de las reglas automaticas\",\n            \"metadata\": {}\n        },\n        {\n            \"id\": \"35d30395-135e-4b97-b24d-cbe5ad2354ca\",\n            \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n            \"item_name\": \"finantial_interests\",\n            \"description\": \"Payments generedados por procesos de intereses financieros en las cuentas\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/interests.svg\",\n                \"color\": \"#329B0B\",\n                \"title\": \"Intereses\"\n            }\n        },\n        {\n            \"id\": \"f6adcf1e-d2cb-466c-89fb-f906148d37b1\",\n            \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n            \"item_name\": \"manual_withdrawal\",\n            \"description\": \"Pagos generados automaticamente cuando los usuarios realizan retiros manuales de sus metas\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/manual_withdrawal.svg\",\n                \"color\": \"#FF5F54\",\n                \"title\": \"Retiro exitoso\"\n            }\n        },\n        {\n            \"id\": \"636057ca-a138-4450-88fe-18252fac506e\",\n            \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n            \"item_name\": \"manual_saving\",\n            \"description\": \"Payments que se generan bajo demanda ante los retiros o abonos manuales de los usuarios en las metas\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\",\n                \"color\": \"#329B0B\",\n                \"title\": \"Abono exitoso\"\n            }\n        },\n        {\n            \"id\": \"42211161-d36d-4e52-9b48-fd677c215101\",\n            \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n            \"item_name\": \"internal_transfer_withdrawal\",\n            \"description\": \"Payments generados por procesos de reajustes de inflación en las cuenta\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/internal_transfer.svg\",\n                \"color\": \"#329B0B\",\n                \"title\": \"Transferencia a meta\"\n            }\n        }\n    ]\n}"}],"_postman_id":"52bf1445-ed7c-4948-a551-f0271c5dd746"},{"name":"Tipos de configuraciones de metas","id":"be28a57e-c856-4262-89fb-3b10fa2a5102","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=project_config","description":"<p>Este endpoint obtiene los detalles de configuración para un catálogo de proyectos específico, concretamente para <strong>project_config</strong>.  </p>\n<p>Define las capacidades y restricciones asociadas a un tipo de meta.  </p>\n<p>La respuesta describe cómo el comportamiento y los procesos relacionados con esta meta se ven afectados.</p>\n<h3 id=\"solicitud\">Solicitud</h3>\n<ul>\n<li><p><strong>Método</strong>: GET</p>\n</li>\n<li><p><strong>URL</strong>: <code>{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=project_config</code></p>\n</li>\n</ul>\n<h3 id=\"respuesta\">Respuesta</h3>\n<ul>\n<li><p><strong>Código de estado</strong>: 200</p>\n</li>\n<li><p><strong>Content-Type</strong>: <code>application/json</code></p>\n</li>\n</ul>\n<h4 id=\"estructura-de-la-respuesta\">Estructura de la Respuesta</h4>\n<p>La respuesta contiene un objeto JSON con la siguiente estructura:</p>\n<ul>\n<li><p><strong>project_config</strong>: Un arreglo (array) de objetos, cada uno representando una configuración de proyecto con los siguientes campos:</p>\n<ul>\n<li><p><strong>id</strong>: Identificador único de la configuración del proyecto.</p>\n</li>\n<li><p><strong>catalog</strong>: Catálogo al que pertenece esta configuración.</p>\n</li>\n<li><p><strong>item_name</strong>: Nombre del elemento dentro de la configuración.</p>\n</li>\n<li><p><strong>description</strong>: Breve descripción del elemento.</p>\n</li>\n<li><p><strong>metadata</strong>: Objeto que contiene propiedades adicionales que gobiernan el comportamiento de la configuración:</p>\n<ul>\n<li><p><strong>limit</strong>: Especifica limitaciones (si aplica).</p>\n</li>\n<li><p><strong>default</strong>: Indica si esta configuración es la predeterminada.</p>\n</li>\n<li><p><strong>available</strong>: Indica si la configuración está disponible para su uso.</p>\n</li>\n<li><p><strong>access_denied</strong>: Detalles sobre las restricciones de acceso.</p>\n</li>\n<li><p><strong>permission_edit_fields</strong>: Lista de campos que pueden editarse.</p>\n</li>\n<li><p><strong>fields_required_to_create</strong>: Requisitos mínimos para crear una nueva meta.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"notas-importantes\">Notas Importantes</h3>\n<p>Este endpoint permite controlar diversas características relacionadas con la meta, incluyendo:</p>\n<ul>\n<li><p>Requisitos mínimos para crear una meta.</p>\n</li>\n<li><p>Permisos para la edición de la meta.</p>\n</li>\n<li><p>Campos que pueden ser editados por el usuario.</p>\n</li>\n<li><p>Permisos del usuario para eliminar la meta.</p>\n</li>\n<li><p>Procesos internos como el cálculo de métricas de progreso y la generación de reportes.</p>\n</li>\n</ul>\n","urlObject":{"path":["api-saving","v1","saving-service","catalogs",""],"host":["{{host_app}}"],"query":[{"key":"catalog","value":"project_config"}],"variable":[]}},"response":[{"id":"c63461b5-8217-4cd8-8488-49281d6ef3a4","name":"Tipos de configuraciones de metas","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=project_config","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":"project_config"}]}},"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"project_config\": [\n        {\n            \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n            \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n            \"item_name\": \"project_config_default\",\n            \"description\": \"Configuracion por defecto para una meta, sin restricciones.\",\n            \"metadata\": {\n                \"limit\": null,\n                \"default\": true,\n                \"available\": true,\n                \"access_denied\": {},\n                \"permission_edit_fields\": [\n                    \"project_name\",\n                    \"goal_date\",\n                    \"total\"\n                ],\n                \"fields_required_to_create\": [\n                    \"project_name\",\n                    \"goal_date\",\n                    \"total\"\n                ]\n            }\n        }\n    ]\n}"}],"_postman_id":"be28a57e-c856-4262-89fb-3b10fa2a5102"},{"name":"Tipos de actividades","id":"3e88b961-e87d-4e84-b719-150ef118a860","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=project_config","description":"<p>Este endpoint obtiene los detalles de configuración para un catálogo de proyectos específico, concretamente para <strong>project_config</strong>.  </p>\n<p>Define las capacidades y restricciones asociadas a un tipo de meta.  </p>\n<p>La respuesta describe cómo el comportamiento y los procesos relacionados con esta meta se ven afectados.</p>\n<h3 id=\"solicitud\">Solicitud</h3>\n<ul>\n<li><p><strong>Método</strong>: GET</p>\n</li>\n<li><p><strong>URL</strong>: <code>{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=project_config</code></p>\n</li>\n</ul>\n<h3 id=\"respuesta\">Respuesta</h3>\n<ul>\n<li><p><strong>Código de estado</strong>: 200</p>\n</li>\n<li><p><strong>Content-Type</strong>: <code>application/json</code></p>\n</li>\n</ul>\n<h4 id=\"estructura-de-la-respuesta\">Estructura de la Respuesta</h4>\n<p>La respuesta contiene un objeto JSON con la siguiente estructura:</p>\n<ul>\n<li><p><strong>project_config</strong>: Un arreglo (array) de objetos, cada uno representando una configuración de proyecto con los siguientes campos:</p>\n<ul>\n<li><p><strong>id</strong>: Identificador único de la configuración del proyecto.</p>\n</li>\n<li><p><strong>catalog</strong>: Catálogo al que pertenece esta configuración.</p>\n</li>\n<li><p><strong>item_name</strong>: Nombre del elemento dentro de la configuración.</p>\n</li>\n<li><p><strong>description</strong>: Breve descripción del elemento.</p>\n</li>\n<li><p><strong>metadata</strong>: Objeto que contiene propiedades adicionales que gobiernan el comportamiento de la configuración:</p>\n<ul>\n<li><p><strong>limit</strong>: Especifica limitaciones (si aplica).</p>\n</li>\n<li><p><strong>default</strong>: Indica si esta configuración es la predeterminada.</p>\n</li>\n<li><p><strong>available</strong>: Indica si la configuración está disponible para su uso.</p>\n</li>\n<li><p><strong>access_denied</strong>: Detalles sobre las restricciones de acceso.</p>\n</li>\n<li><p><strong>permission_edit_fields</strong>: Lista de campos que pueden editarse.</p>\n</li>\n<li><p><strong>fields_required_to_create</strong>: Requisitos mínimos para crear una nueva meta.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"notas-importantes\">Notas Importantes</h3>\n<p>Este endpoint permite controlar diversas características relacionadas con la meta, incluyendo:</p>\n<ul>\n<li><p>Requisitos mínimos para crear una meta.</p>\n</li>\n<li><p>Permisos para la edición de la meta.</p>\n</li>\n<li><p>Campos que pueden ser editados por el usuario.</p>\n</li>\n<li><p>Permisos del usuario para eliminar la meta.</p>\n</li>\n<li><p>Procesos internos como el cálculo de métricas de progreso y la generación de reportes.</p>\n</li>\n</ul>\n","urlObject":{"path":["api-saving","v1","saving-service","catalogs",""],"host":["{{host_app}}"],"query":[{"key":"catalog","value":"project_config"}],"variable":[]}},"response":[{"id":"1f1ecf99-b571-42bb-821f-13e1f411ca56","name":"Tipos de configuraciones de metas","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=project_config","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":"project_config"}]}},"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"project_config\": [\n        {\n            \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n            \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n            \"item_name\": \"project_config_default\",\n            \"description\": \"Configuracion por defecto para una meta, sin restricciones.\",\n            \"metadata\": {\n                \"limit\": null,\n                \"default\": true,\n                \"available\": true,\n                \"access_denied\": {},\n                \"permission_edit_fields\": [\n                    \"project_name\",\n                    \"goal_date\",\n                    \"total\"\n                ],\n                \"fields_required_to_create\": [\n                    \"project_name\",\n                    \"goal_date\",\n                    \"total\"\n                ]\n            }\n        }\n    ]\n}"}],"_postman_id":"3e88b961-e87d-4e84-b719-150ef118a860"},{"name":"Estados reglas de ahorros","id":"d38fe362-4ab2-4bf9-b003-9299820e2707","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=rule_status","description":"<p>Este endpoint obtiene el catálogo de estados de reglas (<strong>rule_status</strong>) del servicio de ahorro.</p>\n<p>Este catálogo no puede modificarse.</p>\n<h3 id=\"solicitud\">Solicitud</h3>\n<ul>\n<li><p><strong>Método</strong>: GET</p>\n</li>\n<li><p><strong>URL</strong>: <code>{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=rule_status</code></p>\n</li>\n</ul>\n<p><strong>Parámetros de consulta (Query Parameters):</strong></p>\n<ul>\n<li><strong>catalog</strong> (string): Especifica el tipo de catálogo que se desea obtener. En este caso, se establece como <code>rule_status</code>.</li>\n</ul>\n<h3 id=\"respuesta\">Respuesta</h3>\n<ul>\n<li><p><strong>Código de estado</strong>: 200</p>\n</li>\n<li><p><strong>Content-Type</strong>: <code>application/json</code></p>\n</li>\n</ul>\n<p><strong>Cuerpo de la respuesta (Response Body):</strong></p>\n<p>La respuesta contendrá un arreglo (array) de objetos de estado de regla, cada uno con la siguiente estructura:</p>\n<ul>\n<li><p><strong>id</strong> (string): Identificador único del estado de la regla.</p>\n</li>\n<li><p><strong>catalog</strong> (string): Tipo de catálogo.</p>\n</li>\n<li><p><strong>item_name</strong> (string): Nombre del elemento.</p>\n</li>\n<li><p><strong>description</strong> (string): Breve descripción del elemento.</p>\n</li>\n<li><p><strong>metadata</strong> (object): Información adicional sobre el elemento, que incluye:</p>\n<ul>\n<li><p><strong>icon</strong> (string): Ícono asociado al elemento.</p>\n</li>\n<li><p><strong>color</strong> (string): Representación de color del elemento.</p>\n</li>\n<li><p><strong>active</strong> (boolean): Indica si el elemento está activo actualmente.</p>\n</li>\n<li><p><strong>short_name</strong> (string): Nombre abreviado del elemento.</p>\n</li>\n</ul>\n</li>\n</ul>\n<blockquote>\n<p><strong>IMPORTANTE</strong><br />Solo las reglas con <strong>rule_status_active</strong> se monitorean y tienen la capacidad de generar ahorros</p>\n</blockquote>\n","urlObject":{"path":["api-saving","v1","saving-service","catalogs",""],"host":["{{host_app}}"],"query":[{"key":"catalog","value":"rule_status"}],"variable":[]}},"response":[{"id":"4108ad1d-8fc9-4593-a43a-e7952b5ea0ab","name":"Estados reglas de ahorros","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=rule_status","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":"rule_status"}]}},"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"rule_status\": [\n        {\n            \"id\": \"94bcd197-0d33-40e4-8793-78aa42ad3220\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_paused\",\n            \"description\": \"Regla pausada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/paused.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_PAUSED\"\n            }\n        },\n        {\n            \"id\": \"b482fbc2-83eb-4847-bdea-1b5e27794032\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_deleted\",\n            \"description\": \"Regla eliminada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/deleted.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_DELETED\"\n            }\n        },\n        {\n            \"id\": \"bdb1f431-0fd9-4c24-8dd3-d026ad6d6ba3\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_finished\",\n            \"description\": \"Regla finalizada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/paused.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_FINISHED\"\n            }\n        },\n        {\n            \"id\": \"ec3c9b31-4c60-426b-bd90-6fcf3cdf28e4\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_suspended\",\n            \"description\": \"Regla suspendida\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/paused.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_SUSPENDED\"\n            }\n        },\n        {\n            \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n            \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n            \"item_name\": \"rule_status_active\",\n            \"description\": \"Regla activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"RULE_STATUS_ACTIVE\"\n            }\n        }\n    ]\n}"}],"_postman_id":"d38fe362-4ab2-4bf9-b003-9299820e2707"},{"name":"Estados de los ahorros","id":"ee8ad968-f5ba-454b-98a3-cc60a93f2d0d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=payment_status","description":"<p>Este endpoint permite obtener diversos catálogos relacionados con los <strong>estados de ahorros (payments)</strong>.<br />Es especialmente útil para obtener información sobre los diferentes estados de ahorros disponibles en el sistema.</p>\n<blockquote>\n<p>No se pueden agregar ni quitar registros de este catálogo, solo modificar la metadata. </p>\n</blockquote>\n<h3 id=\"solicitud\">Solicitud</h3>\n<ul>\n<li><p><strong>Método</strong>: GET</p>\n</li>\n<li><p><strong>URL</strong>: <code>{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=payment_status</code></p>\n</li>\n</ul>\n<p><strong>Parámetros de consulta (Query Parameters):</strong></p>\n<ul>\n<li><p><strong>catalog</strong> (obligatorio): Parámetro de tipo string que especifica el tipo de catálogo que se desea obtener.  </p>\n<p>  En este caso, el valor debe ser <code>payment_status</code>.</p>\n</li>\n</ul>\n<h3 id=\"respuesta\">Respuesta</h3>\n<p>Si la solicitud se realiza correctamente, la API devolverá un objeto JSON con código de estado <strong>200</strong>.  </p>\n<p>La estructura de la respuesta incluirá:</p>\n<ul>\n<li><p><strong>payment_status</strong>: Un arreglo (array) de objetos, cada uno representando un estado de pago con las siguientes propiedades:</p>\n<ul>\n<li><p><strong>id</strong>: Identificador único del estado de pago.</p>\n</li>\n<li><p><strong>catalog</strong>: Nombre del catálogo.</p>\n</li>\n<li><p><strong>item_name</strong>: Nombre del elemento asociado al estado de pago.</p>\n</li>\n<li><p><strong>description</strong>: Breve descripción del estado de pago.</p>\n</li>\n<li><p><strong>metadata</strong>: Objeto que contiene información adicional sobre el estado de pago:</p>\n<ul>\n<li><p><strong>icon</strong>: Cadena de texto que representa el ícono asociado al estado de pago.</p>\n</li>\n<li><p><strong>color</strong>: Cadena de texto que representa el código de color del estado de pago.</p>\n</li>\n<li><p><strong>title</strong>: Cadena de texto que representa el título del estado de pago.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"ejemplo-de-respuesta\">Ejemplo de respuesta</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>jsonCopiarEditar{\n  \"payment_status\": [\n    {\n      \"id\": \"\",\n      \"catalog\": \"\",\n      \"item_name\": \"\",\n      \"description\": \"\",\n      \"metadata\": {\n        \"icon\": \"\",\n        \"color\": \"\",\n        \"title\": \"\"\n      }\n    }\n  ]\n}\n\n</code></pre>","urlObject":{"path":["api-saving","v1","saving-service","catalogs",""],"host":["{{host_app}}"],"query":[{"key":"catalog","value":"payment_status"}],"variable":[]}},"response":[{"id":"96f4b83f-7caf-47f4-bf57-b3b368260702","name":"Estados de los ahorros","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=payment_status","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":"payment_status"}]}},"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"payment_status\": [\n        {\n            \"id\": \"6e9e124c-bba1-4fbd-b0a4-3761026c2625\",\n            \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n            \"item_name\": \"payment_status_deleted\",\n            \"description\": \"Ahorro borrado\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/expired_circle.svg\",\n                \"color\": \"#F54752\",\n                \"title\": \"Ahorro eliminado\"\n            }\n        },\n        {\n            \"id\": \"4b1c7b5d-a992-4344-9323-abca11aab5f2\",\n            \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n            \"item_name\": \"payment_status_processing\",\n            \"description\": \"Ahorro en proceso de ser enviado a cuenta\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/alert_circle.svg\",\n                \"color\": \"#191B1D\",\n                \"title\": \"Ahorro en proceso\"\n            }\n        },\n        {\n            \"id\": \"fbbb15cf-258a-4736-b72d-6f73362799d0\",\n            \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n            \"item_name\": \"payment_status_done\",\n            \"description\": \"Ahorro realizado\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\",\n                \"color\": \"#191B1D\",\n                \"title\": \"Ahorro realizado\"\n            }\n        },\n        {\n            \"id\": \"a06a0253-2daa-4fe9-ae4e-2fbbae81b75b\",\n            \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n            \"item_name\": \"payment_status_expired_by_error\",\n            \"description\": \"Ahorro expirado por error\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/expired_circle.svg\",\n                \"color\": \"#F54752\",\n                \"title\": \"No se pudo ahorrar\"\n            }\n        },\n        {\n            \"id\": \"d19ec1e3-30fb-4fa3-a3d6-5f2624839858\",\n            \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n            \"item_name\": \"payment_status_expired_by_low_balance\",\n            \"description\": \"Ahorro expirado por balance bajo\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/expired_circle.svg\",\n                \"color\": \"#F54752\",\n                \"title\": \"No se pudo ahorrar\"\n            }\n        },\n        {\n            \"id\": \"fefe5c88-a4b2-4808-a897-7780a6720a16\",\n            \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n            \"item_name\": \"payment_status_error\",\n            \"description\": \"No se pudo ahorrar\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/alert_circle.svg\",\n                \"color\": \"#191B1D\",\n                \"title\": \"Ahorro con error\"\n            }\n        },\n        {\n            \"id\": \"097a68d1-0662-4ec6-ad89-3cd4af8aff41\",\n            \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n            \"item_name\": \"payment_status_pending\",\n            \"description\": \"Ahorro pendiente\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/alert_circle.svg\",\n                \"color\": \"#191B1D\",\n                \"title\": \"Ahorro pendiente\"\n            }\n        },\n        {\n            \"id\": \"8987b1ee-d507-45ea-bdb7-e3a019f8f8d1\",\n            \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n            \"item_name\": \"payment_status_lowbalance\",\n            \"description\": \"Ahorro con respusta de saldo bajo\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/alert_circle.svg\",\n                \"color\": \"#191B1D\",\n                \"title\": \"No se pudo ahorrar\"\n            }\n        },\n        {\n            \"id\": \"621d1a04-f6f9-43bc-80d2-24ecabfd253e\",\n            \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n            \"item_name\": \"payment_status_lowbalance_limit\",\n            \"description\": \"Ahorro con respuesta de saldo bajo el límite definido\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/alert_circle.svg\",\n                \"color\": \"#191B1D\",\n                \"title\": \"Ahorro con saldo bajo el límite definido\"\n            }\n        },\n        {\n            \"id\": \"145479c5-3144-4a26-8292-8f44e42b8276\",\n            \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n            \"item_name\": \"payment_status_expired_by_low_balance_limit\",\n            \"description\": \"Ahorro expirado por balance bajo el limite\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/expired_circle.svg\",\n                \"color\": \"#F54752\",\n                \"title\": \"No se pudo ahorrar\"\n            }\n        }\n    ]\n}"}],"_postman_id":"ee8ad968-f5ba-454b-98a3-cc60a93f2d0d"},{"name":"Lista de ligas y equipos para pasión futbolera","event":[{"listen":"test","script":{"id":"ad6dd6c3-383d-4e6c-8685-ef5076b72470","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object',\r","    active: 'boolean',\r","    process_name: { type: 'string', optional: true },\r","    catalog: 'string'\r","};\r","\r","const metadataProperties = {\r","    fbid: 'string',\r","    teams: 'array',\r","    img_url: 'string'\r","};\r","\r","const teamProperties = {\r","    id: 'string',\r","    metadata: 'object',\r","    item_name: 'string',\r","    catalog_id: 'string',\r","    description: 'string'\r","};\r","\r","const teamMetadataProperties = {\r","    img_url: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties of the metadata object\r","pm.test(\"Metadata object has expected properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0].metadata, metadataProperties);\r","    }\r","});\r","\r","// Check properties within the teams array\r","pm.test(\"Teams have expected properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0 && responseJson[0].metadata.teams && responseJson[0].metadata.teams.length > 0) {\r","        // Test only the first item in the teams array\r","        xerpaTestApi.checkObjectProperties(responseJson[0].metadata.teams[0], teamProperties);\r","        \r","        // Check properties of the metadata object in the first team\r","        xerpaTestApi.checkObjectProperties(responseJson[0].metadata.teams[0].metadata, teamMetadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"4c491aee-f690-48b0-a725-ee9029d44b86","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/soccer-leagues/","description":"<p>Este endpoint permite recuperar una lista de ligas de fútbol 🏆 disponibles en el catálogo del servicio de ahorro.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/catalogs/soccer-leagues/</p>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta se entrega en formato JSON e incluye los siguientes campos:</p>\n<p>Entrega un array de <code>soccer_league</code>, en donde cada una de ellos incluye:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único de la liga.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre de la liga de fútbol.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la liga.</p>\n</li>\n<li><p><code>active</code> (boolean): Indica si la liga está activa.</p>\n</li>\n<li><p><code>process_name</code> (string): Nombre del proceso asociado a la liga (si aplica).</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece la liga.</p>\n</li>\n<li><p><code>metadata</code>(object): Información adicional de la liga, esto incluye:</p>\n<ul>\n<li><p><code>fbid</code> (string): ID de Facebook asociado a la liga.</p>\n</li>\n<li><p><code>img_url</code>(string): URL de la imagen de la liga.</p>\n</li>\n<li><p><code>teams</code> (array): Arreglo de equipos asociados a la liga. Cada equipo contiene:</p>\n<ul>\n<li><p><code>id</code> (string): ID del equipo.</p>\n</li>\n<li><p><code>metadata.img_url</code> (string): URL de la imagen del equipo.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del equipo.</p>\n</li>\n<li><p><code>catalog_id</code> (string): ID del catálogo al que pertenece el equipo.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del equipo.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n      \"item_name\": { \"type\": \"string\" },\n      \"description\": { \"type\": \"string\" },\n      \"metadata\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"fbid\": { \"type\": \"string\" },\n          \"img_url\": { \"type\": \"string\", \"format\": \"uri\" },\n          \"teams\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n                \"item_name\": { \"type\": \"string\" },\n                \"description\": { \"type\": \"string\" },\n                \"catalog_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n                \"metadata\": {\n                  \"type\": \"object\",\n                  \"properties\": {\n                    \"img_url\": { \"type\": \"string\", \"format\": \"uri\" }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"active\": { \"type\": \"boolean\" },\n      \"process_name\": { \"type\": [\"string\", \"null\"] },\n      \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","catalogs","soccer-leagues",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"2d6597ec-412e-49e1-9464-c810e151807a","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/soccer-leagues/","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs","soccer-leagues",""],"query":[{"key":"page_size","value":"1","disabled":true},{"key":"page","value":"2","disabled":true},{"key":"paginate","value":"false","type":"text","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 18:02:15 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"91726"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"13c04dad-9212-4e6d-b0eb-bba023a1d511"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZLaHGbBoAMEe4Q="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839f2a6-04246e4938102e2e5bab8493;Parent=2474380015a3dafa;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"293a8cf9-d20f-4560-9820-9541dbce722d\",\n        \"item_name\": \"ita.1\",\n        \"description\": \"Serie A (Italiana)\",\n        \"metadata\": {\n            \"fbid\": \"ita.1\",\n            \"teams\": [\n                {\n                    \"id\": \"78feb88f-536a-40ff-940c-c73ec9876624\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/103.png\"\n                    },\n                    \"item_name\": \"103\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"AC Milan\"\n                },\n                {\n                    \"id\": \"e7b40fa0-ff0d-4663-a468-5c3ee1abf775\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/104.png\"\n                    },\n                    \"item_name\": \"104\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"AS Roma\"\n                },\n                {\n                    \"id\": \"b0e4c1eb-02ee-47d0-9712-732d239737cb\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/105.png\"\n                    },\n                    \"item_name\": \"105\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Atalanta\"\n                },\n                {\n                    \"id\": \"b9e016a2-be79-44b3-9631-b7e1974fc293\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/107.png\"\n                    },\n                    \"item_name\": \"107\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bologna\"\n                },\n                {\n                    \"id\": \"60672e90-0105-4bf8-9dd2-04848de2cdeb\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2925.png\"\n                    },\n                    \"item_name\": \"2925\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Cagliari\"\n                },\n                {\n                    \"id\": \"5d05071b-1bb4-4329-a496-6b53bd4bf759\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2574.png\"\n                    },\n                    \"item_name\": \"2574\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Empoli\"\n                },\n                {\n                    \"id\": \"c88ff97e-15f2-471d-9dfe-2617ce26382a\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/109.png\"\n                    },\n                    \"item_name\": \"109\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Fiorentina\"\n                },\n                {\n                    \"id\": \"3310a809-16b0-42fb-9d50-c55f18558194\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4057.png\"\n                    },\n                    \"item_name\": \"4057\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Frosinone\"\n                },\n                {\n                    \"id\": \"179fc9c7-38b0-4fe0-95b3-ac1b16bce082\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3263.png\"\n                    },\n                    \"item_name\": \"3263\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Genoa\"\n                },\n                {\n                    \"id\": \"34237a2a-a95a-44e2-a457-0ab13f3dd982\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/119.png\"\n                    },\n                    \"item_name\": \"119\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Hellas Verona\"\n                },\n                {\n                    \"id\": \"2a4f537e-2aee-41f0-96e1-ebe412a93260\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/110.png\"\n                    },\n                    \"item_name\": \"110\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Internazionale\"\n                },\n                {\n                    \"id\": \"ba4bddaa-7136-48cd-a584-e49e5330ab57\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/111.png\"\n                    },\n                    \"item_name\": \"111\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Juventus\"\n                },\n                {\n                    \"id\": \"5b4efe85-cca1-48c0-9638-fef823d8bd39\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/112.png\"\n                    },\n                    \"item_name\": \"112\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Lazio\"\n                },\n                {\n                    \"id\": \"51c03b59-5a98-4cfa-9571-6064fd72a9ed\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/113.png\"\n                    },\n                    \"item_name\": \"113\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Lecce\"\n                },\n                {\n                    \"id\": \"a59877d0-11a5-4a66-aa82-c7c9cbbd6009\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4007.png\"\n                    },\n                    \"item_name\": \"4007\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Monza\"\n                },\n                {\n                    \"id\": \"8fe6d9bb-61d8-4a84-88c5-5ae99b98e966\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/114.png\"\n                    },\n                    \"item_name\": \"114\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Napoli\"\n                },\n                {\n                    \"id\": \"3df39f3a-ce57-4485-8b62-ce0adc35f282\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3240.png\"\n                    },\n                    \"item_name\": \"3240\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Salernitana\"\n                },\n                {\n                    \"id\": \"2420aa7b-5c0d-4f77-96de-0820acce17e8\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3997.png\"\n                    },\n                    \"item_name\": \"3997\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Sassuolo\"\n                },\n                {\n                    \"id\": \"be65f0b0-c9ac-487f-afd2-ba6758965010\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/239.png\"\n                    },\n                    \"item_name\": \"239\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Torino\"\n                },\n                {\n                    \"id\": \"6795fe2e-0e44-46ef-be89-6762d447a7f5\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/118.png\"\n                    },\n                    \"item_name\": \"118\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Udinese\"\n                }\n            ],\n            \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/12.png\"\n        },\n        \"active\": true,\n        \"process_name\": null,\n        \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\"\n    },\n    {\n        \"id\": \"3db56957-9cbe-403c-be81-d607f7b1b81c\",\n        \"item_name\": \"eng.1\",\n        \"description\": \"Premier League (Inglesa)\",\n        \"metadata\": {\n            \"fbid\": \"eng.1\",\n            \"teams\": [\n                {\n                    \"id\": \"aae1a4e2-ed31-41f9-bb01-ea4169cf7564\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/349.png\"\n                    },\n                    \"item_name\": \"349\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"AFC Bournemouth\"\n                },\n                {\n                    \"id\": \"e08ee200-2d89-4b32-ba8c-111732fbc501\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/359.png\"\n                    },\n                    \"item_name\": \"359\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Arsenal\"\n                },\n                {\n                    \"id\": \"7bf32603-5801-41df-a69b-95a05571d7c9\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/362.png\"\n                    },\n                    \"item_name\": \"362\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Aston Villa\"\n                },\n                {\n                    \"id\": \"a99de1c1-15e8-4b07-b1f2-d715075a2ea6\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/337.png\"\n                    },\n                    \"item_name\": \"337\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Brentford\"\n                },\n                {\n                    \"id\": \"5f1a10fc-ad45-431f-a031-a2189d78f933\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/331.png\"\n                    },\n                    \"item_name\": \"331\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Brighton & Hove Albion\"\n                },\n                {\n                    \"id\": \"c03d200f-1905-4e19-b2e0-376f9d67be92\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/379.png\"\n                    },\n                    \"item_name\": \"379\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Burnley\"\n                },\n                {\n                    \"id\": \"a9f0dc37-b46b-47b6-b7b2-3f8bb61bbd56\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/363.png\"\n                    },\n                    \"item_name\": \"363\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Chelsea\"\n                },\n                {\n                    \"id\": \"c5a1819f-dde6-4662-8ecc-3eef6f3b1646\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/384.png\"\n                    },\n                    \"item_name\": \"384\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Crystal Palace\"\n                },\n                {\n                    \"id\": \"400e0c95-7acc-494b-ab62-f700e74db40e\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/368.png\"\n                    },\n                    \"item_name\": \"368\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Everton\"\n                },\n                {\n                    \"id\": \"db6bd379-52ae-4fbd-919a-0dcb0bc09cb0\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/370.png\"\n                    },\n                    \"item_name\": \"370\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Fulham\"\n                },\n                {\n                    \"id\": \"bb909bee-7322-4bec-8f62-f63155467791\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/364.png\"\n                    },\n                    \"item_name\": \"364\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Liverpool\"\n                },\n                {\n                    \"id\": \"ab92756f-71db-4762-8540-21bd5b289f70\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/301.png\"\n                    },\n                    \"item_name\": \"301\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Luton Town\"\n                },\n                {\n                    \"id\": \"f07b9539-924e-4ad3-88d5-2837028e1926\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/382.png\"\n                    },\n                    \"item_name\": \"382\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Manchester City\"\n                },\n                {\n                    \"id\": \"551dd47f-994a-4780-816d-f2670206553e\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/360.png\"\n                    },\n                    \"item_name\": \"360\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Manchester United\"\n                },\n                {\n                    \"id\": \"de825955-8147-413d-8ae3-b6cb6be7c44e\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/361.png\"\n                    },\n                    \"item_name\": \"361\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Newcastle United\"\n                },\n                {\n                    \"id\": \"be998e03-7cba-4fcf-a5c5-25603bfd7ee5\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/393.png\"\n                    },\n                    \"item_name\": \"393\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Nottingham Forest\"\n                },\n                {\n                    \"id\": \"e49bb518-1423-4b00-8b88-c0f02336e247\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/398.png\"\n                    },\n                    \"item_name\": \"398\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Sheffield United\"\n                },\n                {\n                    \"id\": \"8c545db0-b390-4d49-a61f-6ac118c69d4e\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/367.png\"\n                    },\n                    \"item_name\": \"367\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Tottenham Hotspur\"\n                },\n                {\n                    \"id\": \"df202595-cb1e-40a0-bb9f-71af5085ce51\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/371.png\"\n                    },\n                    \"item_name\": \"371\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"West Ham United\"\n                },\n                {\n                    \"id\": \"4d0f47cc-2136-41ae-be27-b6c810f25b58\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/380.png\"\n                    },\n                    \"item_name\": \"380\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Wolverhampton Wanderers\"\n                }\n            ],\n            \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/23.png\"\n        },\n        \"active\": true,\n        \"process_name\": null,\n        \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\"\n    },\n    {\n        \"id\": \"4ed43216-6ce2-4b1f-8335-a379cd8bd921\",\n        \"item_name\": \"arg.1\",\n        \"description\": \"Primera División de Argentina\",\n        \"metadata\": {\n            \"fbid\": \"arg.1\",\n            \"teams\": [\n                {\n                    \"id\": \"7014b07f-88ba-4bc6-93bb-897f8d72ee5f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3.png\"\n                    },\n                    \"item_name\": \"3\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Argentinos Juniors\"\n                },\n                {\n                    \"id\": \"76e0592a-4347-4b17-abc5-334ef5c24f5f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9785.png\"\n                    },\n                    \"item_name\": \"9785\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Atlético Tucumán\"\n                },\n                {\n                    \"id\": \"2874a98c-4957-4fc2-a78b-35a69c7fa390\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/235.png\"\n                    },\n                    \"item_name\": \"235\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Banfield\"\n                },\n                {\n                    \"id\": \"eb8eb349-8cc0-4e50-9f26-7ecf62a0848b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10060.png\"\n                    },\n                    \"item_name\": \"10060\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Barracas Central\"\n                },\n                {\n                    \"id\": \"3a456c5e-6fce-458c-a825-2cc58708016d\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4.png\"\n                    },\n                    \"item_name\": \"4\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Belgrano (Córdoba)\"\n                },\n                {\n                    \"id\": \"3d2f325d-49a7-4dde-aeed-e4a03463f182\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5.png\"\n                    },\n                    \"item_name\": \"5\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Boca Juniors\"\n                },\n                {\n                    \"id\": \"ed0a063b-ab57-4fb8-8627-e7c0c1d34ac8\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11989.png\"\n                    },\n                    \"item_name\": \"11989\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Central Córdoba (Santiago del Estero)\"\n                },\n                {\n                    \"id\": \"6f6bfae6-e582-4893-aac8-439428de72bf\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/8950.png\"\n                    },\n                    \"item_name\": \"8950\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Defensa y Justicia\"\n                },\n                {\n                    \"id\": \"f5d2a5da-337b-4be2-a1df-39702f63b5f1\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/17702.png\"\n                    },\n                    \"item_name\": \"17702\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Deportivo Riestra\"\n                },\n                {\n                    \"id\": \"f2ecc9ca-0ba4-429b-9614-b96d573c1e59\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/8.png\"\n                    },\n                    \"item_name\": \"8\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Estudiantes de La Plata\"\n                },\n                {\n                    \"id\": \"0b0b2f2b-9b60-4510-8a02-ea9d43c624b3\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9.png\"\n                    },\n                    \"item_name\": \"9\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Gimnasia La Plata\"\n                },\n                {\n                    \"id\": \"d9bccdef-3da0-45b5-9157-1316ab2692c7\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6756.png\"\n                    },\n                    \"item_name\": \"6756\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Godoy Cruz Antonio Tomba\"\n                },\n                {\n                    \"id\": \"aede3158-05f2-4ad2-ac78-455e7a3ff4f3\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10.png\"\n                    },\n                    \"item_name\": \"10\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Huracán\"\n                },\n                {\n                    \"id\": \"0b662faf-db62-480d-89f3-90f6c0b4d7e8\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11.png\"\n                    },\n                    \"item_name\": \"11\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Independiente\"\n                },\n                {\n                    \"id\": \"5b5cb785-a375-4c26-b564-d3a7c3010838\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9744.png\"\n                    },\n                    \"item_name\": \"9744\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Independiente Rivadavia\"\n                },\n                {\n                    \"id\": \"e0655e81-30a6-4cef-abff-d05275752beb\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2975.png\"\n                    },\n                    \"item_name\": \"2975\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Instituto (Córdoba)\"\n                },\n                {\n                    \"id\": \"ad4b8b86-9b7a-4104-9a22-d80ba6bd8767\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/12.png\"\n                    },\n                    \"item_name\": \"12\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Lanús\"\n                },\n                {\n                    \"id\": \"0777f8ba-6b58-4e6e-b3d3-c1c4748fca5e\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/14.png\"\n                    },\n                    \"item_name\": \"14\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Newell`s Old Boys\"\n                },\n                {\n                    \"id\": \"ffbdc08c-0791-4b24-ac9c-a8c7b97a2841\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/7764.png\"\n                    },\n                    \"item_name\": \"7764\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Platense\"\n                },\n                {\n                    \"id\": \"cc706042-d0de-49a4-85a6-929f832b0895\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/15.png\"\n                    },\n                    \"item_name\": \"15\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Racing Club\"\n                },\n                {\n                    \"id\": \"18b2a32b-bb6d-4963-9571-64014567d4fb\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/16.png\"\n                    },\n                    \"item_name\": \"16\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"River Plate\"\n                },\n                {\n                    \"id\": \"6ad8af44-c82c-4a97-b370-9c908c4d6cf4\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/17.png\"\n                    },\n                    \"item_name\": \"17\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Rosario Central\"\n                },\n                {\n                    \"id\": \"614245d7-1b29-40f6-8f98-0b6cf99bc22f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/18.png\"\n                    },\n                    \"item_name\": \"18\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"San Lorenzo\"\n                },\n                {\n                    \"id\": \"298b8c6e-6685-4cf6-bc28-c2e9e3f772c0\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10158.png\"\n                    },\n                    \"item_name\": \"10158\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Sarmiento (Junín)\"\n                },\n                {\n                    \"id\": \"9062ee82-da89-4ab8-88ad-382747553089\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/19.png\"\n                    },\n                    \"item_name\": \"19\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Talleres (Córdoba)\"\n                },\n                {\n                    \"id\": \"a6e5b3c6-706e-4fd4-9b89-6552562f463d\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/7767.png\"\n                    },\n                    \"item_name\": \"7767\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Tigre\"\n                },\n                {\n                    \"id\": \"0c256711-9e78-41af-b2de-5ec053b2c77f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/20.png\"\n                    },\n                    \"item_name\": \"20\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Unión (Santa Fe)\"\n                },\n                {\n                    \"id\": \"1020a9a7-25c9-4a20-b1ef-653517ab1a3e\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/21.png\"\n                    },\n                    \"item_name\": \"21\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Vélez Sarsfield\"\n                }\n            ],\n            \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/1.png\"\n        },\n        \"active\": true,\n        \"process_name\": null,\n        \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\"\n    },\n    {\n        \"id\": \"5964d72b-a7a6-4190-8769-f7799f523726\",\n        \"item_name\": \"fra.1\",\n        \"description\": \"Ligue 1 (Francesa)\",\n        \"metadata\": {\n            \"fbid\": \"fra.1\",\n            \"teams\": [\n                {\n                    \"id\": \"9ec44086-78ad-4900-9112-72d98f86a8e4\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/174.png\"\n                    },\n                    \"item_name\": \"174\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"AS Monaco\"\n                },\n                {\n                    \"id\": \"1fafe2c3-fcd6-48e4-a8e3-929db98c0d9f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6997.png\"\n                    },\n                    \"item_name\": \"6997\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Brest\"\n                },\n                {\n                    \"id\": \"c55dc30c-cd38-4d1a-bd8f-826e01b84f41\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3171.png\"\n                    },\n                    \"item_name\": \"3171\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Clermont Foot\"\n                },\n                {\n                    \"id\": \"5b422a5b-690f-49b2-b248-d870e343669c\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3236.png\"\n                    },\n                    \"item_name\": \"3236\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Le Havre AC\"\n                },\n                {\n                    \"id\": \"eb294949-04ec-4303-ad80-47242a15da09\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/175.png\"\n                    },\n                    \"item_name\": \"175\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Lens\"\n                },\n                {\n                    \"id\": \"b1c0469b-8596-4535-95d4-61c20f3cbdfe\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/166.png\"\n                    },\n                    \"item_name\": \"166\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Lille\"\n                },\n                {\n                    \"id\": \"2272dffe-1edb-4ae0-99d6-b745c1b82f34\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/273.png\"\n                    },\n                    \"item_name\": \"273\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Lorient\"\n                },\n                {\n                    \"id\": \"bbf647f9-66e2-4a95-b664-86492b469cbc\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/167.png\"\n                    },\n                    \"item_name\": \"167\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Lyon\"\n                },\n                {\n                    \"id\": \"f0dd15f0-69c5-4f24-b560-efad4a1c121b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/176.png\"\n                    },\n                    \"item_name\": \"176\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Marseille\"\n                },\n                {\n                    \"id\": \"5eeea8b2-8a53-439a-b147-69d270f76709\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/177.png\"\n                    },\n                    \"item_name\": \"177\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Metz\"\n                },\n                {\n                    \"id\": \"0de57956-8821-47b0-8138-24371e68b9cc\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/274.png\"\n                    },\n                    \"item_name\": \"274\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Montpellier\"\n                },\n                {\n                    \"id\": \"fd437f88-e5a7-4f87-84ee-857d1c4ea1a9\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/165.png\"\n                    },\n                    \"item_name\": \"165\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Nantes\"\n                },\n                {\n                    \"id\": \"118e8fff-e835-4f17-9bc6-a1a3cf03e419\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2502.png\"\n                    },\n                    \"item_name\": \"2502\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Nice\"\n                },\n                {\n                    \"id\": \"c161134a-ce97-4021-a130-9995d3b26978\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/160.png\"\n                    },\n                    \"item_name\": \"160\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Paris Saint-Germain\"\n                },\n                {\n                    \"id\": \"809f2616-4ca4-43bb-a91a-de52b328497f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/169.png\"\n                    },\n                    \"item_name\": \"169\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Stade Rennais\"\n                },\n                {\n                    \"id\": \"809c9481-0abc-477a-8884-bf3e85a7651f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3243.png\"\n                    },\n                    \"item_name\": \"3243\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Stade de Reims\"\n                },\n                {\n                    \"id\": \"4d06b368-9363-48c5-9246-5f8d198b95ed\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/180.png\"\n                    },\n                    \"item_name\": \"180\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Strasbourg\"\n                },\n                {\n                    \"id\": \"522d9757-444b-4aa2-9a84-95bbd38b7f61\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/179.png\"\n                    },\n                    \"item_name\": \"179\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Toulouse\"\n                }\n            ],\n            \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/9.png\"\n        },\n        \"active\": true,\n        \"process_name\": null,\n        \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\"\n    },\n    {\n        \"id\": \"59d64735-c04d-4efd-a292-fd20bbbf592b\",\n        \"item_name\": \"esp.1\",\n        \"description\": \"LaLiga (Española)\",\n        \"metadata\": {\n            \"fbid\": \"esp.1\",\n            \"teams\": [\n                {\n                    \"id\": \"2e70f2ad-cfb5-4b10-825c-880e9469a7b9\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/96.png\"\n                    },\n                    \"item_name\": \"96\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Alavés\"\n                },\n                {\n                    \"id\": \"1a1725ad-2dde-41c5-9b90-794673d1978b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6832.png\"\n                    },\n                    \"item_name\": \"6832\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Almería\"\n                },\n                {\n                    \"id\": \"2a700cf9-f428-4771-b6a9-79db9fd769fd\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/93.png\"\n                    },\n                    \"item_name\": \"93\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Athletic Club\"\n                },\n                {\n                    \"id\": \"c8a4ed8c-b1f4-449e-b755-996bde9c0e70\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/1068.png\"\n                    },\n                    \"item_name\": \"1068\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Atlético Madrid\"\n                },\n                {\n                    \"id\": \"ce430e8f-d3ba-4b51-a599-fee3295d49e2\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/83.png\"\n                    },\n                    \"item_name\": \"83\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Barcelona\"\n                },\n                {\n                    \"id\": \"1266d21f-fff6-44cd-91b3-3183f7c5ea4d\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/85.png\"\n                    },\n                    \"item_name\": \"85\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Celta Vigo\"\n                },\n                {\n                    \"id\": \"49a1165a-b5dc-43d2-a96e-f98d14ef641d\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3842.png\"\n                    },\n                    \"item_name\": \"3842\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Cádiz\"\n                },\n                {\n                    \"id\": \"5b8388c2-7d1c-4ade-ad11-c854d491b9ae\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2922.png\"\n                    },\n                    \"item_name\": \"2922\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Getafe\"\n                },\n                {\n                    \"id\": \"87fd56fd-f61e-496a-959f-124d7bc30eb4\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9812.png\"\n                    },\n                    \"item_name\": \"9812\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Girona\"\n                },\n                {\n                    \"id\": \"786a3f9c-d0b6-4a41-a18e-0229f9c2fb5d\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3747.png\"\n                    },\n                    \"item_name\": \"3747\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Granada\"\n                },\n                {\n                    \"id\": \"dba96ff9-2e83-4b18-b280-6af2123c05aa\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/98.png\"\n                    },\n                    \"item_name\": \"98\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Las Palmas\"\n                },\n                {\n                    \"id\": \"f995179f-b49d-42eb-8e8a-24db1ebcd158\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/84.png\"\n                    },\n                    \"item_name\": \"84\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Mallorca\"\n                },\n                {\n                    \"id\": \"e710df19-6933-4c69-b0de-5129baf95957\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/97.png\"\n                    },\n                    \"item_name\": \"97\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Osasuna\"\n                },\n                {\n                    \"id\": \"5d470ac3-ef50-4f5e-b99d-37cbd4834a38\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/101.png\"\n                    },\n                    \"item_name\": \"101\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Rayo Vallecano\"\n                },\n                {\n                    \"id\": \"43e6ae3b-4458-4480-959a-5524d9060d67\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/244.png\"\n                    },\n                    \"item_name\": \"244\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Real Betis\"\n                },\n                {\n                    \"id\": \"509b6efc-26bc-4fb6-8a19-7ad7fbf8cfab\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/86.png\"\n                    },\n                    \"item_name\": \"86\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Real Madrid\"\n                },\n                {\n                    \"id\": \"2d84bd2a-4db5-48cf-833f-6874ac4fb4c4\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/89.png\"\n                    },\n                    \"item_name\": \"89\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Real Sociedad\"\n                },\n                {\n                    \"id\": \"0329530a-6191-4778-8c64-2b330ffcf263\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/243.png\"\n                    },\n                    \"item_name\": \"243\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Sevilla\"\n                },\n                {\n                    \"id\": \"636ab078-b4d8-42bc-8d39-07dd8dcb4bd5\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/94.png\"\n                    },\n                    \"item_name\": \"94\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Valencia\"\n                },\n                {\n                    \"id\": \"7a84d2f7-a640-43e6-966b-a0e865ee01a3\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/102.png\"\n                    },\n                    \"item_name\": \"102\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Villarreal\"\n                }\n            ],\n            \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/15.png\"\n        },\n        \"active\": true,\n        \"process_name\": null,\n        \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\"\n    },\n    {\n        \"id\": \"6580f67e-c7f0-4a88-aa25-018d363ae6d3\",\n        \"item_name\": \"chi.1\",\n        \"description\": \"Liga Chilena\",\n        \"metadata\": {\n            \"fbid\": \"chi.1\",\n            \"teams\": [\n                {\n                    \"id\": \"7c78a738-9ac3-4d86-b959-68727e4d7f20\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4138.png\"\n                    },\n                    \"item_name\": \"4138\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Audax Italiano\"\n                },\n                {\n                    \"id\": \"4f63ec86-e7f5-4326-b332-13c40983b3fd\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2678.png\"\n                    },\n                    \"item_name\": \"2678\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Cobreloa\"\n                },\n                {\n                    \"id\": \"6913fb5b-b46e-43ae-b21a-485327d68207\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4133.png\"\n                    },\n                    \"item_name\": \"4133\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Cobresal\"\n                },\n                {\n                    \"id\": \"6afa3018-6b8b-4671-ad84-f1fce1b7a45c\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2688.png\"\n                    },\n                    \"item_name\": \"2688\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Colo Colo\"\n                },\n                {\n                    \"id\": \"b87b428a-ff0f-41a9-b6c2-3110e8930334\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10139.png\"\n                    },\n                    \"item_name\": \"10139\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Copiapó\"\n                },\n                {\n                    \"id\": \"d060d1ad-8bc0-42ae-96d8-3f41ffd04726\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/8186.png\"\n                    },\n                    \"item_name\": \"8186\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Coquimbo Unido\"\n                },\n                {\n                    \"id\": \"d5832d04-a29b-4361-9421-0f27386c8af5\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10142.png\"\n                    },\n                    \"item_name\": \"10142\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Deportes Iquique\"\n                },\n                {\n                    \"id\": \"97cef699-eb04-476e-b89f-6e293ab8b1dd\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4129.png\"\n                    },\n                    \"item_name\": \"4129\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Everton CD\"\n                },\n                {\n                    \"id\": \"744870f1-e254-4574-bd86-10072051f670\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4134.png\"\n                    },\n                    \"item_name\": \"4134\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Huachipato\"\n                },\n                {\n                    \"id\": \"272c519b-1f89-44e3-999a-142d9c4e487e\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6072.png\"\n                    },\n                    \"item_name\": \"6072\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"O`Higgins\"\n                },\n                {\n                    \"id\": \"3b1859ab-0be6-422e-9730-7091df5b3b3d\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4422.png\"\n                    },\n                    \"item_name\": \"4422\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Palestino\"\n                },\n                {\n                    \"id\": \"3f36596b-76b1-4124-8b86-aaf1ec829c76\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/885.png\"\n                    },\n                    \"item_name\": \"885\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Universidad Católica\"\n                },\n                {\n                    \"id\": \"2b8230e4-0300-4e49-a009-c97320bc5971\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4139.png\"\n                    },\n                    \"item_name\": \"4139\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Universidad de Chile\"\n                },\n                {\n                    \"id\": \"f9989726-7583-481c-a310-eb562b69cab4\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4132.png\"\n                    },\n                    \"item_name\": \"4132\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Unión Española\"\n                },\n                {\n                    \"id\": \"37ec179f-9e18-4be9-a7c5-4c579c7bd53a\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10144.png\"\n                    },\n                    \"item_name\": \"10144\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Unión La Calera\"\n                },\n                {\n                    \"id\": \"bfadfbf4-dac4-4238-bacf-3c370942bdec\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/7427.png\"\n                    },\n                    \"item_name\": \"7427\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Ñublense\"\n                }\n            ],\n            \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/86.png\"\n        },\n        \"active\": true,\n        \"process_name\": null,\n        \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\"\n    },\n    {\n        \"id\": \"71568a86-3ef8-413d-9911-12c8beba2ded\",\n        \"item_name\": \"uefa.euroq\",\n        \"description\": \"Selecciones UEFA\",\n        \"metadata\": {\n            \"fbid\": \"uefa.euroq\",\n            \"teams\": [\n                {\n                    \"id\": \"8cd20108-9af5-4f0e-b7b9-1c7efb5baa07\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/alb.png\"\n                    },\n                    \"item_name\": \"585\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Albania\"\n                },\n                {\n                    \"id\": \"9b42c289-c020-4386-aaaf-d6d25b397288\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/and.png\"\n                    },\n                    \"item_name\": \"587\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Andorra\"\n                },\n                {\n                    \"id\": \"96cf608e-09d9-448c-8612-6c85ef741566\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fifa.armenia.png\"\n                    },\n                    \"item_name\": \"579\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Armenia\"\n                },\n                {\n                    \"id\": \"782c9957-cdc1-4de3-ac83-ecd33e351307\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aut.png\"\n                    },\n                    \"item_name\": \"474\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Austria\"\n                },\n                {\n                    \"id\": \"361956e3-c393-4f85-b0e8-491592892bb1\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aze.png\"\n                    },\n                    \"item_name\": \"581\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Azerbaiyán\"\n                },\n                {\n                    \"id\": \"cd39fc0a-1730-4898-9c03-39a6a46e04fc\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/blr.png\"\n                    },\n                    \"item_name\": \"583\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bielorrusia\"\n                },\n                {\n                    \"id\": \"cf08b52c-25bb-496b-beee-c09886593721\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bel.png\"\n                    },\n                    \"item_name\": \"459\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bélgica\"\n                },\n                {\n                    \"id\": \"daf0cf18-414c-46bd-9fac-17035f2bef83\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bih.png\"\n                    },\n                    \"item_name\": \"452\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bosnia-herzegovina\"\n                },\n                {\n                    \"id\": \"caf1c407-33b1-4cbd-bc35-b4b6d8928710\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bul.png\"\n                    },\n                    \"item_name\": \"462\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bulgaria\"\n                },\n                {\n                    \"id\": \"d4c883db-6ded-4ab3-af67-35ec30a85cf7\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cro.png\"\n                    },\n                    \"item_name\": \"477\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Croacia\"\n                },\n                {\n                    \"id\": \"95e995bc-38ee-4711-86fa-2f74bc6fadf9\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cyp.png\"\n                    },\n                    \"item_name\": \"445\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Chipre\"\n                },\n                {\n                    \"id\": \"19bc6e13-d059-43a1-8adb-4781851f5de4\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cze.png\"\n                    },\n                    \"item_name\": \"450\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"República checa\"\n                },\n                {\n                    \"id\": \"b8363b81-3b2e-454c-b873-1a27100ea52b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/den.png\"\n                    },\n                    \"item_name\": \"479\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Dinamarca\"\n                },\n                {\n                    \"id\": \"eff32061-1077-465c-af39-1eb6f3a2ede9\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/eng.png\"\n                    },\n                    \"item_name\": \"448\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Inglaterra\"\n                },\n                {\n                    \"id\": \"0dd6659e-bd92-4b69-aa12-21ff6f2e662f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/est.png\"\n                    },\n                    \"item_name\": \"444\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Estonia\"\n                },\n                {\n                    \"id\": \"e00d55b3-1e2e-41d1-b6f8-8ac49bd07f19\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fro.png\"\n                    },\n                    \"item_name\": \"447\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Islas feroe\"\n                },\n                {\n                    \"id\": \"8d7652a4-1e1f-4e54-a939-c14ce24e465f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fin.png\"\n                    },\n                    \"item_name\": \"458\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Finlandia\"\n                },\n                {\n                    \"id\": \"74028b95-7002-4f9a-a7d2-cf0780621258\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fra.png\"\n                    },\n                    \"item_name\": \"478\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Francia\"\n                },\n                {\n                    \"id\": \"d0912621-8853-4f8b-aab9-bd67a5c8e544\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/geo.png\"\n                    },\n                    \"item_name\": \"584\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Georgia\"\n                },\n                {\n                    \"id\": \"a9f2c5be-a616-4ec1-ac50-fb50b35cdbcb\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ger.png\"\n                    },\n                    \"item_name\": \"481\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Alemania\"\n                },\n                {\n                    \"id\": \"777d3065-5ff2-45a7-8bf7-bddff06195c0\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/16721.png\"\n                    },\n                    \"item_name\": \"16721\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Gibraltar\"\n                },\n                {\n                    \"id\": \"51fc5da1-369b-40c4-a6aa-a911c17b04a0\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/gre.png\"\n                    },\n                    \"item_name\": \"455\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Grecia\"\n                },\n                {\n                    \"id\": \"88ba42ca-ee03-4ab3-a631-b270bd8b238b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/hun.png\"\n                    },\n                    \"item_name\": \"480\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Hungría\"\n                },\n                {\n                    \"id\": \"a40b1555-8ea5-4786-8c05-df4ae7b7622e\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/isl.png\"\n                    },\n                    \"item_name\": \"470\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Islandia\"\n                },\n                {\n                    \"id\": \"ef924732-b56b-4db9-9d80-0526e581971c\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/isr.png\"\n                    },\n                    \"item_name\": \"461\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Israel\"\n                },\n                {\n                    \"id\": \"005b0598-c5a7-4038-9cc6-b4f7eef5c5ca\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ita.png\"\n                    },\n                    \"item_name\": \"162\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Italia\"\n                },\n                {\n                    \"id\": \"3d89c667-d38d-4d72-9af6-85e6ab9c5fbe\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/kaz.png\"\n                    },\n                    \"item_name\": \"2619\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Kazajstán\"\n                },\n                {\n                    \"id\": \"c35cbb36-86c0-4508-b788-032c9520fc8b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/18272.png\"\n                    },\n                    \"item_name\": \"18272\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Kosovo\"\n                },\n                {\n                    \"id\": \"8dac7b76-3882-4fde-a38e-eeeaec30fd65\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lva.png\"\n                    },\n                    \"item_name\": \"456\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Letonia\"\n                },\n                {\n                    \"id\": \"7ddc00b8-5935-4f72-b39b-8f8453035bde\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lie.png\"\n                    },\n                    \"item_name\": \"589\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Liechtenstein\"\n                },\n                {\n                    \"id\": \"370fcb42-949c-4400-9055-443330da0772\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ltu.png\"\n                    },\n                    \"item_name\": \"460\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Lituania\"\n                },\n                {\n                    \"id\": \"59379f24-e8fd-4e3e-ae3e-b53818dbc189\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lux.png\"\n                    },\n                    \"item_name\": \"582\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Luxemburgo\"\n                },\n                {\n                    \"id\": \"0d80a4b2-b21d-450e-ae79-5b69f0041882\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mlt.png\"\n                    },\n                    \"item_name\": \"453\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Malta\"\n                },\n                {\n                    \"id\": \"6f088596-ec15-4c5f-a5bb-67a54657ada6\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mda.png\"\n                    },\n                    \"item_name\": \"483\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Moldavia\"\n                },\n                {\n                    \"id\": \"ea49c96a-deac-4484-84c0-0fbfc69f81f7\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mtg.png\"\n                    },\n                    \"item_name\": \"6775\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Montenegro\"\n                },\n                {\n                    \"id\": \"8610f144-74a3-4b6d-8f56-074910e4f44c\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ned.png\"\n                    },\n                    \"item_name\": \"449\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Holanda\"\n                },\n                {\n                    \"id\": \"309c797f-6c92-40b2-b5f2-679202eed720\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mkd.png\"\n                    },\n                    \"item_name\": \"463\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Macedonia del norte\"\n                },\n                {\n                    \"id\": \"1dc0fc97-ef52-4d79-afa9-dc6b6bf3b292\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nir.png\"\n                    },\n                    \"item_name\": \"586\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Ireland del norte\"\n                },\n                {\n                    \"id\": \"36c0d7a8-503b-43f5-b270-1c62dc85fdbf\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nor.png\"\n                    },\n                    \"item_name\": \"464\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Noruega\"\n                },\n                {\n                    \"id\": \"9a8d1895-66f6-413f-aeca-df8c1427ccd1\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/pol.png\"\n                    },\n                    \"item_name\": \"471\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Polonia\"\n                },\n                {\n                    \"id\": \"452c9497-160b-4067-8c1e-e43953b07e5a\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/por.png\"\n                    },\n                    \"item_name\": \"482\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Portugal\"\n                },\n                {\n                    \"id\": \"490a3e59-d55c-4cbb-ae1c-f0e89f260f1d\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/irl.png\"\n                    },\n                    \"item_name\": \"476\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Irlanda\"\n                },\n                {\n                    \"id\": \"abd00d4b-d954-4edb-a62c-b7e36b72a645\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/rom.png\"\n                    },\n                    \"item_name\": \"473\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Rumanía\"\n                },\n                {\n                    \"id\": \"91333c70-a546-466d-b6c7-d83640e67675\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/rus.png\"\n                    },\n                    \"item_name\": \"454\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Rusia\"\n                },\n                {\n                    \"id\": \"6ac19be7-44be-45c2-a365-9e50bb04434f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/smr.png\"\n                    },\n                    \"item_name\": \"588\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"San marino\"\n                },\n                {\n                    \"id\": \"203a28ce-cf49-48a1-80e2-7632d6842b9b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sco.png\"\n                    },\n                    \"item_name\": \"580\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Escocia\"\n                },\n                {\n                    \"id\": \"4a4a11ce-8041-46a6-852b-581d7fce1714\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sba.png\"\n                    },\n                    \"item_name\": \"6757\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Serbia\"\n                },\n                {\n                    \"id\": \"e2e3fd85-58f0-40bf-a187-8dc6b5d15200\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/svk.png\"\n                    },\n                    \"item_name\": \"468\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Eslovaquía\"\n                },\n                {\n                    \"id\": \"c3ffd993-58fb-4612-b918-b445ac8549eb\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/svn.png\"\n                    },\n                    \"item_name\": \"472\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Eslovenia\"\n                },\n                {\n                    \"id\": \"8d9cabe1-b294-4f45-9168-9df5c1f4d443\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/esp.png\"\n                    },\n                    \"item_name\": \"164\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"España\"\n                },\n                {\n                    \"id\": \"c664ad48-63e6-4c5d-8fa7-7359061c0e6a\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/swe.png\"\n                    },\n                    \"item_name\": \"466\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Suecia\"\n                },\n                {\n                    \"id\": \"5bf103b0-625d-4b7a-bfe5-c2287c52abb8\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sui.png\"\n                    },\n                    \"item_name\": \"475\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Suiza\"\n                },\n                {\n                    \"id\": \"4ddb378a-618a-4146-b175-a4f6126e3661\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/tur.png\"\n                    },\n                    \"item_name\": \"465\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Turquía\"\n                },\n                {\n                    \"id\": \"07784531-62d8-42e8-8bd0-4fad77be0bdb\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ukr.png\"\n                    },\n                    \"item_name\": \"457\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Ucrania\"\n                },\n                {\n                    \"id\": \"50aeeb90-7484-4c26-a268-e91b9deff7a1\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/wal.png\"\n                    },\n                    \"item_name\": \"578\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Gales\"\n                }\n            ],\n            \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/56.png\"\n        },\n        \"active\": true,\n        \"process_name\": null,\n        \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\"\n    },\n    {\n        \"id\": \"8d41abec-9087-43be-ba6b-a1a17f13e557\",\n        \"item_name\": \"mex.1\",\n        \"description\": \"Liga MX (Mexicana)\",\n        \"metadata\": {\n            \"fbid\": \"mex.1\",\n            \"teams\": [\n                {\n                    \"id\": \"dd8fab7d-d21f-42e7-8705-03fd4c728db6\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/227.png\"\n                    },\n                    \"item_name\": \"227\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"América\"\n                },\n                {\n                    \"id\": \"ca161347-3e0c-492e-9f17-1c073b6061ba\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/216.png\"\n                    },\n                    \"item_name\": \"216\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Atlas\"\n                },\n                {\n                    \"id\": \"7ffc035e-4335-487c-9dff-b5da7fb76d50\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/15720.png\"\n                    },\n                    \"item_name\": \"15720\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Atlético de San Luis\"\n                },\n                {\n                    \"id\": \"64cffdef-0afc-43f4-8ed8-419b84d60f76\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/218.png\"\n                    },\n                    \"item_name\": \"218\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Cruz Azul\"\n                },\n                {\n                    \"id\": \"2b95ccff-5a26-4111-8c1e-ff6099843971\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/17851.png\"\n                    },\n                    \"item_name\": \"17851\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"FC Juarez\"\n                },\n                {\n                    \"id\": \"cf631983-21d5-408e-9a33-a4be6357499b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/219.png\"\n                    },\n                    \"item_name\": \"219\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Guadalajara\"\n                },\n                {\n                    \"id\": \"aece61f8-8d9c-4945-a6b5-4cdf282aa894\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/228.png\"\n                    },\n                    \"item_name\": \"228\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"León\"\n                },\n                {\n                    \"id\": \"e1866ceb-7a2f-4f4e-b24e-a63c5c694a78\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/20702.png\"\n                    },\n                    \"item_name\": \"20702\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Mazatlán FC\"\n                },\n                {\n                    \"id\": \"b5ef9a15-1004-4dd9-90b8-88cb0e7aaf82\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/220.png\"\n                    },\n                    \"item_name\": \"220\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Monterrey\"\n                },\n                {\n                    \"id\": \"7ba9e52d-3f4f-4d9f-9605-f6183f4f7d25\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/229.png\"\n                    },\n                    \"item_name\": \"229\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Necaxa\"\n                },\n                {\n                    \"id\": \"ca419376-835d-4b54-b898-cf3318fe8898\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/234.png\"\n                    },\n                    \"item_name\": \"234\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Pachuca\"\n                },\n                {\n                    \"id\": \"a5d1c8f3-eba4-41bc-b7d5-ef27caedfd03\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/231.png\"\n                    },\n                    \"item_name\": \"231\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Puebla\"\n                },\n                {\n                    \"id\": \"f26f27c0-c9c2-4f06-ba0c-2519a44fdc04\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/233.png\"\n                    },\n                    \"item_name\": \"233\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Pumas UNAM\"\n                },\n                {\n                    \"id\": \"0502a8d5-5f92-4420-8ee5-8f4e6f6921c4\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/222.png\"\n                    },\n                    \"item_name\": \"222\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Querétaro\"\n                },\n                {\n                    \"id\": \"1311321f-4eb8-42dc-a8ed-9996448a6f7f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/225.png\"\n                    },\n                    \"item_name\": \"225\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Santos\"\n                },\n                {\n                    \"id\": \"7daf77b1-2478-4473-9f6f-b0b8dd4ee951\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/232.png\"\n                    },\n                    \"item_name\": \"232\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Tigres UANL\"\n                },\n                {\n                    \"id\": \"4e477564-ed85-4d89-a9d8-66a8341d8730\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10125.png\"\n                    },\n                    \"item_name\": \"10125\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Tijuana\"\n                },\n                {\n                    \"id\": \"daae1667-895f-4350-8393-0fb04ab0e47e\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/223.png\"\n                    },\n                    \"item_name\": \"223\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Toluca\"\n                }\n            ],\n            \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/22.png\"\n        },\n        \"active\": true,\n        \"process_name\": null,\n        \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\"\n    },\n    {\n        \"id\": \"8e462b15-1493-4075-b704-1aa9bf3c7d7f\",\n        \"item_name\": \"uefa.champions\",\n        \"description\": \"UEFA Champions League\",\n        \"metadata\": {\n            \"fbid\": \"uefa.champions\",\n            \"teams\": [\n                {\n                    \"id\": \"78feb88f-536a-40ff-940c-c73ec9876624\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/103.png\"\n                    },\n                    \"item_name\": \"103\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"AC Milan\"\n                },\n                {\n                    \"id\": \"9ec44086-78ad-4900-9112-72d98f86a8e4\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/174.png\"\n                    },\n                    \"item_name\": \"174\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"AS Monaco\"\n                },\n                {\n                    \"id\": \"e08ee200-2d89-4b32-ba8c-111732fbc501\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/359.png\"\n                    },\n                    \"item_name\": \"359\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Arsenal\"\n                },\n                {\n                    \"id\": \"7bf32603-5801-41df-a69b-95a05571d7c9\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/362.png\"\n                    },\n                    \"item_name\": \"362\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Aston Villa\"\n                },\n                {\n                    \"id\": \"b0e4c1eb-02ee-47d0-9712-732d239737cb\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/105.png\"\n                    },\n                    \"item_name\": \"105\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Atalanta\"\n                },\n                {\n                    \"id\": \"c8a4ed8c-b1f4-449e-b755-996bde9c0e70\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/1068.png\"\n                    },\n                    \"item_name\": \"1068\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Atlético Madrid\"\n                },\n                {\n                    \"id\": \"ce430e8f-d3ba-4b51-a599-fee3295d49e2\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/83.png\"\n                    },\n                    \"item_name\": \"83\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Barcelona\"\n                },\n                {\n                    \"id\": \"5aee861f-d1bd-4004-9bf0-a044f027d935\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/131.png\"\n                    },\n                    \"item_name\": \"131\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bayer Leverkusen\"\n                },\n                {\n                    \"id\": \"4513e759-de54-477b-83dd-9122c7008b43\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/132.png\"\n                    },\n                    \"item_name\": \"132\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bayern Munich\"\n                },\n                {\n                    \"id\": \"378b4fe7-7328-4e09-bc1d-427939bef951\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/1929.png\"\n                    },\n                    \"item_name\": \"1929\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Benfica\"\n                },\n                {\n                    \"id\": \"b9e016a2-be79-44b3-9631-b7e1974fc293\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/107.png\"\n                    },\n                    \"item_name\": \"107\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bologna\"\n                },\n                {\n                    \"id\": \"0aaeb3a2-071b-40c5-a661-e5129483b513\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/124.png\"\n                    },\n                    \"item_name\": \"124\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Borussia Dortmund\"\n                },\n                {\n                    \"id\": \"1fafe2c3-fcd6-48e4-a8e3-929db98c0d9f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6997.png\"\n                    },\n                    \"item_name\": \"6997\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Brest\"\n                },\n                {\n                    \"id\": \"39725ef4-79ed-4326-ab7c-da423f45a964\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/256.png\"\n                    },\n                    \"item_name\": \"256\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Celtic\"\n                },\n                {\n                    \"id\": \"c7a6628b-7404-4864-8bda-96e63a559e4a\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/570.png\"\n                    },\n                    \"item_name\": \"570\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Club Brugge\"\n                },\n                {\n                    \"id\": \"8d64b981-229c-46b8-b0d2-8bc0d189b75d\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/597.png\"\n                    },\n                    \"item_name\": \"597\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Dinamo Zagreb\"\n                },\n                {\n                    \"id\": \"8aa2aad9-8453-4ea0-b4df-3bff96a4f5c8\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/142.png\"\n                    },\n                    \"item_name\": \"142\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Feyenoord Rotterdam\"\n                },\n                {\n                    \"id\": \"87fd56fd-f61e-496a-959f-124d7bc30eb4\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9812.png\"\n                    },\n                    \"item_name\": \"9812\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Girona\"\n                },\n                {\n                    \"id\": \"2a4f537e-2aee-41f0-96e1-ebe412a93260\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/110.png\"\n                    },\n                    \"item_name\": \"110\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Internazionale\"\n                },\n                {\n                    \"id\": \"ba4bddaa-7136-48cd-a584-e49e5330ab57\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/111.png\"\n                    },\n                    \"item_name\": \"111\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Juventus\"\n                },\n                {\n                    \"id\": \"b1c0469b-8596-4535-95d4-61c20f3cbdfe\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/166.png\"\n                    },\n                    \"item_name\": \"166\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Lille\"\n                },\n                {\n                    \"id\": \"bb909bee-7322-4bec-8f62-f63155467791\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/364.png\"\n                    },\n                    \"item_name\": \"364\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Liverpool\"\n                },\n                {\n                    \"id\": \"f07b9539-924e-4ad3-88d5-2837028e1926\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/382.png\"\n                    },\n                    \"item_name\": \"382\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Manchester City\"\n                },\n                {\n                    \"id\": \"56999891-ffa7-433c-91a4-49861d1aa313\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/148.png\"\n                    },\n                    \"item_name\": \"148\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"PSV Eindhoven\"\n                },\n                {\n                    \"id\": \"c161134a-ce97-4021-a130-9995d3b26978\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/160.png\"\n                    },\n                    \"item_name\": \"160\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Paris Saint-Germain\"\n                },\n                {\n                    \"id\": \"34197deb-0903-4395-8739-4e97ebfa6c78\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11420.png\"\n                    },\n                    \"item_name\": \"11420\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"RB Leipzig\"\n                },\n                {\n                    \"id\": \"f27ddf2d-4dd9-4ffd-bdc8-0a6bdbabd2f6\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2790.png\"\n                    },\n                    \"item_name\": \"2790\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"RB Salzburg\"\n                },\n                {\n                    \"id\": \"509b6efc-26bc-4fb6-8a19-7ad7fbf8cfab\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/86.png\"\n                    },\n                    \"item_name\": \"86\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Real Madrid\"\n                },\n                {\n                    \"id\": \"8f580e54-478c-4eb4-9bd3-ce6e04e38ae6\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2290.png\"\n                    },\n                    \"item_name\": \"2290\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Red Star Belgrade\"\n                },\n                {\n                    \"id\": \"1c3fb3d3-99bc-4095-ab00-0acd62606551\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3746.png\"\n                    },\n                    \"item_name\": \"3746\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"SK Sturm Graz\"\n                },\n                {\n                    \"id\": \"5e4ebacb-0bde-43de-af56-b1295d2b59bd\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/493.png\"\n                    },\n                    \"item_name\": \"493\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Shakhtar Donetsk\"\n                },\n                {\n                    \"id\": \"9648c841-1449-4453-bf5c-b18585fd7b38\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/521.png\"\n                    },\n                    \"item_name\": \"521\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Slovan Bratislava\"\n                },\n                {\n                    \"id\": \"238279c8-fb09-4681-a4ac-bf0617e161e5\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/433.png\"\n                    },\n                    \"item_name\": \"433\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Sparta Prague\"\n                },\n                {\n                    \"id\": \"45b5adf9-20bd-4129-a3dd-6d174746402b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2250.png\"\n                    },\n                    \"item_name\": \"2250\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Sporting CP\"\n                },\n                {\n                    \"id\": \"c919ac5b-fd94-49c1-afaf-d28d9eca831f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/134.png\"\n                    },\n                    \"item_name\": \"134\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"VfB Stuttgart\"\n                },\n                {\n                    \"id\": \"99f39be8-2f8b-4535-8504-6b5cde5e8170\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2722.png\"\n                    },\n                    \"item_name\": \"2722\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Young Boys\"\n                }\n            ],\n            \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/2.png\"\n        },\n        \"active\": true,\n        \"process_name\": null,\n        \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\"\n    },\n    {\n        \"id\": \"9ffc1dd1-e1fc-4ca0-a7fb-889af6a2539d\",\n        \"item_name\": \"uefa.nations\",\n        \"description\": \"UEFA Nations League\",\n        \"metadata\": {\n            \"fbid\": \"uefa.nations\",\n            \"teams\": [\n                {\n                    \"id\": \"8cd20108-9af5-4f0e-b7b9-1c7efb5baa07\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/alb.png\"\n                    },\n                    \"item_name\": \"585\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Albania\"\n                },\n                {\n                    \"id\": \"9b42c289-c020-4386-aaaf-d6d25b397288\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/and.png\"\n                    },\n                    \"item_name\": \"587\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Andorra\"\n                },\n                {\n                    \"id\": \"96cf608e-09d9-448c-8612-6c85ef741566\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fifa.armenia.png\"\n                    },\n                    \"item_name\": \"579\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Armenia\"\n                },\n                {\n                    \"id\": \"782c9957-cdc1-4de3-ac83-ecd33e351307\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aut.png\"\n                    },\n                    \"item_name\": \"474\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Austria\"\n                },\n                {\n                    \"id\": \"361956e3-c393-4f85-b0e8-491592892bb1\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aze.png\"\n                    },\n                    \"item_name\": \"581\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Azerbaiyán\"\n                },\n                {\n                    \"id\": \"cd39fc0a-1730-4898-9c03-39a6a46e04fc\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/blr.png\"\n                    },\n                    \"item_name\": \"583\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bielorrusia\"\n                },\n                {\n                    \"id\": \"cf08b52c-25bb-496b-beee-c09886593721\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bel.png\"\n                    },\n                    \"item_name\": \"459\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bélgica\"\n                },\n                {\n                    \"id\": \"daf0cf18-414c-46bd-9fac-17035f2bef83\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bih.png\"\n                    },\n                    \"item_name\": \"452\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bosnia-herzegovina\"\n                },\n                {\n                    \"id\": \"caf1c407-33b1-4cbd-bc35-b4b6d8928710\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bul.png\"\n                    },\n                    \"item_name\": \"462\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bulgaria\"\n                },\n                {\n                    \"id\": \"d4c883db-6ded-4ab3-af67-35ec30a85cf7\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cro.png\"\n                    },\n                    \"item_name\": \"477\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Croacia\"\n                },\n                {\n                    \"id\": \"95e995bc-38ee-4711-86fa-2f74bc6fadf9\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cyp.png\"\n                    },\n                    \"item_name\": \"445\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Chipre\"\n                },\n                {\n                    \"id\": \"19bc6e13-d059-43a1-8adb-4781851f5de4\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cze.png\"\n                    },\n                    \"item_name\": \"450\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"República checa\"\n                },\n                {\n                    \"id\": \"b8363b81-3b2e-454c-b873-1a27100ea52b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/den.png\"\n                    },\n                    \"item_name\": \"479\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Dinamarca\"\n                },\n                {\n                    \"id\": \"eff32061-1077-465c-af39-1eb6f3a2ede9\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/eng.png\"\n                    },\n                    \"item_name\": \"448\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Inglaterra\"\n                },\n                {\n                    \"id\": \"0dd6659e-bd92-4b69-aa12-21ff6f2e662f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/est.png\"\n                    },\n                    \"item_name\": \"444\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Estonia\"\n                },\n                {\n                    \"id\": \"e00d55b3-1e2e-41d1-b6f8-8ac49bd07f19\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fro.png\"\n                    },\n                    \"item_name\": \"447\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Islas feroe\"\n                },\n                {\n                    \"id\": \"8d7652a4-1e1f-4e54-a939-c14ce24e465f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fin.png\"\n                    },\n                    \"item_name\": \"458\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Finlandia\"\n                },\n                {\n                    \"id\": \"74028b95-7002-4f9a-a7d2-cf0780621258\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fra.png\"\n                    },\n                    \"item_name\": \"478\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Francia\"\n                },\n                {\n                    \"id\": \"d0912621-8853-4f8b-aab9-bd67a5c8e544\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/geo.png\"\n                    },\n                    \"item_name\": \"584\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Georgia\"\n                },\n                {\n                    \"id\": \"a9f2c5be-a616-4ec1-ac50-fb50b35cdbcb\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ger.png\"\n                    },\n                    \"item_name\": \"481\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Alemania\"\n                },\n                {\n                    \"id\": \"777d3065-5ff2-45a7-8bf7-bddff06195c0\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/16721.png\"\n                    },\n                    \"item_name\": \"16721\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Gibraltar\"\n                },\n                {\n                    \"id\": \"51fc5da1-369b-40c4-a6aa-a911c17b04a0\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/gre.png\"\n                    },\n                    \"item_name\": \"455\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Grecia\"\n                },\n                {\n                    \"id\": \"88ba42ca-ee03-4ab3-a631-b270bd8b238b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/hun.png\"\n                    },\n                    \"item_name\": \"480\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Hungría\"\n                },\n                {\n                    \"id\": \"a40b1555-8ea5-4786-8c05-df4ae7b7622e\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/isl.png\"\n                    },\n                    \"item_name\": \"470\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Islandia\"\n                },\n                {\n                    \"id\": \"ef924732-b56b-4db9-9d80-0526e581971c\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/isr.png\"\n                    },\n                    \"item_name\": \"461\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Israel\"\n                },\n                {\n                    \"id\": \"005b0598-c5a7-4038-9cc6-b4f7eef5c5ca\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ita.png\"\n                    },\n                    \"item_name\": \"162\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Italia\"\n                },\n                {\n                    \"id\": \"3d89c667-d38d-4d72-9af6-85e6ab9c5fbe\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/kaz.png\"\n                    },\n                    \"item_name\": \"2619\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Kazajstán\"\n                },\n                {\n                    \"id\": \"c35cbb36-86c0-4508-b788-032c9520fc8b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/18272.png\"\n                    },\n                    \"item_name\": \"18272\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Kosovo\"\n                },\n                {\n                    \"id\": \"8dac7b76-3882-4fde-a38e-eeeaec30fd65\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lva.png\"\n                    },\n                    \"item_name\": \"456\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Letonia\"\n                },\n                {\n                    \"id\": \"7ddc00b8-5935-4f72-b39b-8f8453035bde\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lie.png\"\n                    },\n                    \"item_name\": \"589\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Liechtenstein\"\n                },\n                {\n                    \"id\": \"370fcb42-949c-4400-9055-443330da0772\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ltu.png\"\n                    },\n                    \"item_name\": \"460\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Lituania\"\n                },\n                {\n                    \"id\": \"59379f24-e8fd-4e3e-ae3e-b53818dbc189\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lux.png\"\n                    },\n                    \"item_name\": \"582\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Luxemburgo\"\n                },\n                {\n                    \"id\": \"0d80a4b2-b21d-450e-ae79-5b69f0041882\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mlt.png\"\n                    },\n                    \"item_name\": \"453\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Malta\"\n                },\n                {\n                    \"id\": \"6f088596-ec15-4c5f-a5bb-67a54657ada6\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mda.png\"\n                    },\n                    \"item_name\": \"483\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Moldavia\"\n                },\n                {\n                    \"id\": \"ea49c96a-deac-4484-84c0-0fbfc69f81f7\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mtg.png\"\n                    },\n                    \"item_name\": \"6775\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Montenegro\"\n                },\n                {\n                    \"id\": \"8610f144-74a3-4b6d-8f56-074910e4f44c\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ned.png\"\n                    },\n                    \"item_name\": \"449\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Holanda\"\n                },\n                {\n                    \"id\": \"309c797f-6c92-40b2-b5f2-679202eed720\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mkd.png\"\n                    },\n                    \"item_name\": \"463\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Macedonia del norte\"\n                },\n                {\n                    \"id\": \"1dc0fc97-ef52-4d79-afa9-dc6b6bf3b292\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nir.png\"\n                    },\n                    \"item_name\": \"586\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Ireland del norte\"\n                },\n                {\n                    \"id\": \"36c0d7a8-503b-43f5-b270-1c62dc85fdbf\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nor.png\"\n                    },\n                    \"item_name\": \"464\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Noruega\"\n                },\n                {\n                    \"id\": \"9a8d1895-66f6-413f-aeca-df8c1427ccd1\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/pol.png\"\n                    },\n                    \"item_name\": \"471\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Polonia\"\n                },\n                {\n                    \"id\": \"452c9497-160b-4067-8c1e-e43953b07e5a\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/por.png\"\n                    },\n                    \"item_name\": \"482\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Portugal\"\n                },\n                {\n                    \"id\": \"490a3e59-d55c-4cbb-ae1c-f0e89f260f1d\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/irl.png\"\n                    },\n                    \"item_name\": \"476\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Irlanda\"\n                },\n                {\n                    \"id\": \"abd00d4b-d954-4edb-a62c-b7e36b72a645\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/rom.png\"\n                    },\n                    \"item_name\": \"473\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Rumanía\"\n                },\n                {\n                    \"id\": \"91333c70-a546-466d-b6c7-d83640e67675\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/rus.png\"\n                    },\n                    \"item_name\": \"454\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Rusia\"\n                },\n                {\n                    \"id\": \"6ac19be7-44be-45c2-a365-9e50bb04434f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/smr.png\"\n                    },\n                    \"item_name\": \"588\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"San marino\"\n                },\n                {\n                    \"id\": \"203a28ce-cf49-48a1-80e2-7632d6842b9b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sco.png\"\n                    },\n                    \"item_name\": \"580\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Escocia\"\n                },\n                {\n                    \"id\": \"4a4a11ce-8041-46a6-852b-581d7fce1714\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sba.png\"\n                    },\n                    \"item_name\": \"6757\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Serbia\"\n                },\n                {\n                    \"id\": \"e2e3fd85-58f0-40bf-a187-8dc6b5d15200\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/svk.png\"\n                    },\n                    \"item_name\": \"468\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Eslovaquía\"\n                },\n                {\n                    \"id\": \"c3ffd993-58fb-4612-b918-b445ac8549eb\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/svn.png\"\n                    },\n                    \"item_name\": \"472\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Eslovenia\"\n                },\n                {\n                    \"id\": \"8d9cabe1-b294-4f45-9168-9df5c1f4d443\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/esp.png\"\n                    },\n                    \"item_name\": \"164\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"España\"\n                },\n                {\n                    \"id\": \"c664ad48-63e6-4c5d-8fa7-7359061c0e6a\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/swe.png\"\n                    },\n                    \"item_name\": \"466\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Suecia\"\n                },\n                {\n                    \"id\": \"5bf103b0-625d-4b7a-bfe5-c2287c52abb8\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sui.png\"\n                    },\n                    \"item_name\": \"475\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Suiza\"\n                },\n                {\n                    \"id\": \"4ddb378a-618a-4146-b175-a4f6126e3661\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/tur.png\"\n                    },\n                    \"item_name\": \"465\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Turquía\"\n                },\n                {\n                    \"id\": \"07784531-62d8-42e8-8bd0-4fad77be0bdb\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ukr.png\"\n                    },\n                    \"item_name\": \"457\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Ucrania\"\n                },\n                {\n                    \"id\": \"50aeeb90-7484-4c26-a268-e91b9deff7a1\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/wal.png\"\n                    },\n                    \"item_name\": \"578\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Gales\"\n                }\n            ],\n            \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/2395.png\"\n        },\n        \"active\": true,\n        \"process_name\": null,\n        \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\"\n    },\n    {\n        \"id\": \"a91570fc-3b18-4c00-a323-de1e38b47ef0\",\n        \"item_name\": \"bra.1\",\n        \"description\": \"Serie A (Brasileña)\",\n        \"metadata\": {\n            \"fbid\": \"bra.1\",\n            \"teams\": [\n                {\n                    \"id\": \"e3147518-5e91-4251-af71-279b3827aff0\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3458.png\"\n                    },\n                    \"item_name\": \"3458\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Athletico-PR\"\n                },\n                {\n                    \"id\": \"c0d21b50-f585-4631-b0eb-e9540eadf9b9\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10357.png\"\n                    },\n                    \"item_name\": \"10357\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Atlético-GO\"\n                },\n                {\n                    \"id\": \"a651f252-443d-4ef2-84be-6c3546635d9e\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/7632.png\"\n                    },\n                    \"item_name\": \"7632\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Atlético-MG\"\n                },\n                {\n                    \"id\": \"a2dab197-7fff-49a7-8987-8d417b4b5792\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9967.png\"\n                    },\n                    \"item_name\": \"9967\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bahia\"\n                },\n                {\n                    \"id\": \"ce20466b-b9b8-45c1-a608-e60c15ade8ff\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6086.png\"\n                    },\n                    \"item_name\": \"6086\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Botafogo\"\n                },\n                {\n                    \"id\": \"cb5d6a17-fba1-4afe-9f38-64247f532248\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/874.png\"\n                    },\n                    \"item_name\": \"874\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Corinthians\"\n                },\n                {\n                    \"id\": \"a5b6cc38-e2a5-4559-a3d2-bff880b0b9d9\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9971.png\"\n                    },\n                    \"item_name\": \"9971\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Criciúma\"\n                },\n                {\n                    \"id\": \"c1c538f8-95df-4797-a6a9-0382c37a47ed\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2022.png\"\n                    },\n                    \"item_name\": \"2022\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Cruzeiro\"\n                },\n                {\n                    \"id\": \"b86589b4-41d7-4a61-90de-7360397c9573\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/17313.png\"\n                    },\n                    \"item_name\": \"17313\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Cuiabá\"\n                },\n                {\n                    \"id\": \"e2ac9a18-0c0c-422a-a62c-95fa91191c2d\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/819.png\"\n                    },\n                    \"item_name\": \"819\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Flamengo\"\n                },\n                {\n                    \"id\": \"6d80140e-3dec-4ae8-8f86-2a3db6732214\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3445.png\"\n                    },\n                    \"item_name\": \"3445\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Fluminense\"\n                },\n                {\n                    \"id\": \"19d9afe1-f36f-47a0-869e-433963b0b72e\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6272.png\"\n                    },\n                    \"item_name\": \"6272\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Fortaleza\"\n                },\n                {\n                    \"id\": \"00b04ae1-9489-42af-825c-805785c5ea6b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6273.png\"\n                    },\n                    \"item_name\": \"6273\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Grêmio\"\n                },\n                {\n                    \"id\": \"08b0f99d-7b45-4a7f-b599-2eb4d2ad61aa\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/1936.png\"\n                    },\n                    \"item_name\": \"1936\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Internacional\"\n                },\n                {\n                    \"id\": \"7ed31bc2-ba56-4d6d-8cd2-65a11fa21e58\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6270.png\"\n                    },\n                    \"item_name\": \"6270\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Juventude\"\n                },\n                {\n                    \"id\": \"41b036c8-0d2a-4239-b434-9cd5e1b41a3b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2029.png\"\n                    },\n                    \"item_name\": \"2029\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Palmeiras\"\n                },\n                {\n                    \"id\": \"79a40c83-870b-4e79-8b80-2efb3351deaf\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6079.png\"\n                    },\n                    \"item_name\": \"6079\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Red Bull Bragantino\"\n                },\n                {\n                    \"id\": \"4997f32d-72b4-4d26-9cfa-d5e7c7d04520\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2026.png\"\n                    },\n                    \"item_name\": \"2026\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"São Paulo\"\n                },\n                {\n                    \"id\": \"81854f81-d62d-44d1-aba2-cc8950d978cf\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3454.png\"\n                    },\n                    \"item_name\": \"3454\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Vasco da Gama\"\n                },\n                {\n                    \"id\": \"29e3bea3-68f8-41d5-b03e-d8763f193be1\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3457.png\"\n                    },\n                    \"item_name\": \"3457\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Vitória\"\n                }\n            ],\n            \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/85.png\"\n        },\n        \"active\": true,\n        \"process_name\": null,\n        \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\"\n    },\n    {\n        \"id\": \"aacda720-3726-4d39-b8af-2c740cd05b5f\",\n        \"item_name\": \"ger.1\",\n        \"description\": \"Bundesliga (Alemania)\",\n        \"metadata\": {\n            \"fbid\": \"ger.1\",\n            \"teams\": [\n                {\n                    \"id\": \"d6d6619f-f95c-4709-8522-c08020c43808\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6418.png\"\n                    },\n                    \"item_name\": \"6418\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"1. FC Heidenheim 1846\"\n                },\n                {\n                    \"id\": \"42f9e882-a5f6-45eb-9e82-d632ffd3f013\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/598.png\"\n                    },\n                    \"item_name\": \"598\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"1. FC Union Berlin\"\n                },\n                {\n                    \"id\": \"dc4a5e4a-1599-4444-bb6e-e212395c099d\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/131.png\"\n                    },\n                    \"item_name\": \"131\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bayer Leverkusen\"\n                },\n                {\n                    \"id\": \"4513e759-de54-477b-83dd-9122c7008b43\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/132.png\"\n                    },\n                    \"item_name\": \"132\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bayern Munich\"\n                },\n                {\n                    \"id\": \"0aaeb3a2-071b-40c5-a661-e5129483b513\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/124.png\"\n                    },\n                    \"item_name\": \"124\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Borussia Dortmund\"\n                },\n                {\n                    \"id\": \"2ca5b6aa-30e3-44d5-ad18-20fbb7b9613a\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/268.png\"\n                    },\n                    \"item_name\": \"268\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Borussia Monchengladbach\"\n                },\n                {\n                    \"id\": \"34d106a2-47c8-4ad5-b160-4ccfbe2891b7\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/125.png\"\n                    },\n                    \"item_name\": \"125\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Eintracht Frankfurt\"\n                },\n                {\n                    \"id\": \"870708cd-f57b-4978-bf38-de433c977084\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3841.png\"\n                    },\n                    \"item_name\": \"3841\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"FC Augsburg\"\n                },\n                {\n                    \"id\": \"a5eb3f77-63c5-4a18-b52b-c5ce25e59970\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/122.png\"\n                    },\n                    \"item_name\": \"122\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"FC Cologne\"\n                },\n                {\n                    \"id\": \"52254c2a-2f13-449e-9372-e4d901da17a6\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2950.png\"\n                    },\n                    \"item_name\": \"2950\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Mainz\"\n                },\n                {\n                    \"id\": \"34197deb-0903-4395-8739-4e97ebfa6c78\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11420.png\"\n                    },\n                    \"item_name\": \"11420\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"RB Leipzig\"\n                },\n                {\n                    \"id\": \"10e34125-acce-4860-ba0a-f278338f639c\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/126.png\"\n                    },\n                    \"item_name\": \"126\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"SC Freiburg\"\n                },\n                {\n                    \"id\": \"20c96702-fcb4-47cc-aad0-38012d246487\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3812.png\"\n                    },\n                    \"item_name\": \"3812\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"SV Darmstadt 98\"\n                },\n                {\n                    \"id\": \"e58cbf80-9957-4e54-81a9-ed0f4f4276c8\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/7911.png\"\n                    },\n                    \"item_name\": \"7911\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"TSG Hoffenheim\"\n                },\n                {\n                    \"id\": \"c919ac5b-fd94-49c1-afaf-d28d9eca831f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/134.png\"\n                    },\n                    \"item_name\": \"134\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"VfB Stuttgart\"\n                },\n                {\n                    \"id\": \"3a9d6470-199c-4dec-a6e3-54f0de544b8d\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/121.png\"\n                    },\n                    \"item_name\": \"121\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"VfL Bochum\"\n                },\n                {\n                    \"id\": \"dffad294-3d4d-4ad6-a656-98fbad7ec30b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/138.png\"\n                    },\n                    \"item_name\": \"138\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"VfL Wolfsburg\"\n                },\n                {\n                    \"id\": \"2007fbdb-6e73-4096-899d-d8841e8ec5d6\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/137.png\"\n                    },\n                    \"item_name\": \"137\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Werder Bremen\"\n                }\n            ],\n            \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/10.png\"\n        },\n        \"active\": true,\n        \"process_name\": null,\n        \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\"\n    },\n    {\n        \"id\": \"da446125-5702-4e9d-81dc-7ed35258a5be\",\n        \"item_name\": \"fifa.worldq.conmebol\",\n        \"description\": \"Selecciones Conmebol\",\n        \"metadata\": {\n            \"fbid\": \"fifa.worldq.conmebol\",\n            \"teams\": [\n                {\n                    \"id\": \"0a47a857-c9b5-49b3-8604-aa3addd13b8c\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/arg.png\"\n                    },\n                    \"item_name\": \"202\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Argentina\"\n                },\n                {\n                    \"id\": \"5cd5c342-c5e5-428f-b94c-85bf92a9613c\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bol.png\"\n                    },\n                    \"item_name\": \"204\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bolivia\"\n                },\n                {\n                    \"id\": \"3414f4de-b780-43b4-b4d2-489a8feab176\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bra.png\"\n                    },\n                    \"item_name\": \"205\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Brasil\"\n                },\n                {\n                    \"id\": \"337e9ab9-7c10-43fa-bdd2-c0424f486730\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/chi.png\"\n                    },\n                    \"item_name\": \"207\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Chile\"\n                },\n                {\n                    \"id\": \"a49d9a73-efd3-46e3-8150-3c3fd54f2ad1\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/col.png\"\n                    },\n                    \"item_name\": \"208\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Colombia\"\n                },\n                {\n                    \"id\": \"a08eab2e-c9a4-4c06-9794-56ec7996fa31\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ecu.png\"\n                    },\n                    \"item_name\": \"209\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Ecuador\"\n                },\n                {\n                    \"id\": \"2d78206b-020a-4c93-b287-901c8e4ad80a\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/par.png\"\n                    },\n                    \"item_name\": \"210\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Paraguay\"\n                },\n                {\n                    \"id\": \"7ab5539f-b0fd-49fe-8035-2a95d148afba\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/per.png\"\n                    },\n                    \"item_name\": \"211\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Perú\"\n                },\n                {\n                    \"id\": \"c0dd1fac-51ac-406f-a4d3-c43b61bdb5bd\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/uru.png\"\n                    },\n                    \"item_name\": \"212\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Uruguay\"\n                },\n                {\n                    \"id\": \"2ba29bab-b28a-4102-a36b-41533a6e2b68\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ven.png\"\n                    },\n                    \"item_name\": \"213\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Venezuela\"\n                }\n            ],\n            \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/65.png\"\n        },\n        \"active\": true,\n        \"process_name\": null,\n        \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\"\n    },\n    {\n        \"id\": \"e7eccb67-ee9d-4cc3-b527-b118c11a3db4\",\n        \"item_name\": \"uru.1\",\n        \"description\": \"Uruguayan Primera Division\",\n        \"metadata\": {\n            \"fbid\": \"uru.1\",\n            \"teams\": [\n                {\n                    \"id\": \"4ef5da7c-1c96-427c-a808-2928d5e09387\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9999.png\"\n                    },\n                    \"item_name\": \"9999\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Boston River\"\n                },\n                {\n                    \"id\": \"7340b071-34e7-4d3d-84b5-b4914189e05c\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5490.png\"\n                    },\n                    \"item_name\": \"5490\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Cerro\"\n                },\n                {\n                    \"id\": \"ff847103-d4cb-470c-bcf8-15f19b6eb267\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9902.png\"\n                    },\n                    \"item_name\": \"9902\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Cerro Largo\"\n                },\n                {\n                    \"id\": \"6ae7ed2a-ade5-40ad-b240-dc90d639f8b4\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4817.png\"\n                    },\n                    \"item_name\": \"4817\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Danubio\"\n                },\n                {\n                    \"id\": \"144490f2-97ff-4306-9ff8-bd7fd034425c\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/1007.png\"\n                    },\n                    \"item_name\": \"1007\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Defensor Sporting\"\n                },\n                {\n                    \"id\": \"d7da7551-49d9-465f-b7b9-9c0fdea7d7f4\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10000.png\"\n                    },\n                    \"item_name\": \"10000\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Deportivo Maldonado\"\n                },\n                {\n                    \"id\": \"1e62a9d2-a038-4dcc-b86d-59ecb046b552\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2689.png\"\n                    },\n                    \"item_name\": \"2689\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Fénix \"\n                },\n                {\n                    \"id\": \"de71fdf9-622a-4720-8bc2-1db90a135970\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5492.png\"\n                    },\n                    \"item_name\": \"5492\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Liverpool\"\n                },\n                {\n                    \"id\": \"72bc2875-2e81-4e04-bafc-f4745c185703\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5493.png\"\n                    },\n                    \"item_name\": \"5493\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Miramar\"\n                },\n                {\n                    \"id\": \"63df4666-7d08-4ad5-93dd-234bffc1a8e7\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2684.png\"\n                    },\n                    \"item_name\": \"2684\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Nacional\"\n                },\n                {\n                    \"id\": \"416e45b5-aba1-47cf-97d5-669d1a638347\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2683.png\"\n                    },\n                    \"item_name\": \"2683\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Peñarol\"\n                },\n                {\n                    \"id\": \"7e361c84-a026-40aa-8f1e-c097e7f82d3d\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6866.png\"\n                    },\n                    \"item_name\": \"6866\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Progreso\"\n                },\n                {\n                    \"id\": \"063036d3-236d-4f8b-8873-b96b9f265734\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9903.png\"\n                    },\n                    \"item_name\": \"9903\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Racing\"\n                },\n                {\n                    \"id\": \"62377013-c95e-4f8e-8214-0826f5b42fc0\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5496.png\"\n                    },\n                    \"item_name\": \"5496\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Rampla Juniors\"\n                },\n                {\n                    \"id\": \"3259fdcc-b11d-46a6-8172-8f42c7739044\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5498.png\"\n                    },\n                    \"item_name\": \"5498\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"River Plate\"\n                },\n                {\n                    \"id\": \"be13b1ed-4a74-4a4f-b708-31d361b56471\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5501.png\"\n                    },\n                    \"item_name\": \"5501\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Wanderers\"\n                }\n            ],\n            \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/1592.png\"\n        },\n        \"active\": true,\n        \"process_name\": null,\n        \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\"\n    },\n    {\n        \"id\": \"f651cd1d-56c6-4c1a-ad3d-17ffc224f144\",\n        \"item_name\": \"concacaf.nations.league\",\n        \"description\": \"Selecciones Concacaf\",\n        \"metadata\": {\n            \"fbid\": \"concacaf.nations.league\",\n            \"teams\": [\n                {\n                    \"id\": \"135783c8-ef8a-413e-9d86-630634c5c5b4\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aia.png\"\n                    },\n                    \"item_name\": \"8942\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Anguilla\"\n                },\n                {\n                    \"id\": \"5411662f-554c-4c25-93fd-7e8383fafd68\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/atg.png\"\n                    },\n                    \"item_name\": \"2638\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Antigua y barbuda\"\n                },\n                {\n                    \"id\": \"95aa4499-e359-4b61-a6a6-25e88ff8229d\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aru.png\"\n                    },\n                    \"item_name\": \"2642\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Aruba\"\n                },\n                {\n                    \"id\": \"e29fe892-c8fa-4e4c-8be4-6fd84c07fb80\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bah.png\"\n                    },\n                    \"item_name\": \"2640\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bahamas\"\n                },\n                {\n                    \"id\": \"2e3bff2d-630a-45dc-979a-061389717dd9\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/brb.png\"\n                    },\n                    \"item_name\": \"2637\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Barbados\"\n                },\n                {\n                    \"id\": \"8e19d7e3-4749-40e0-bc2b-9b871102a560\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/blz.png\"\n                    },\n                    \"item_name\": \"2641\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Belice\"\n                },\n                {\n                    \"id\": \"3cc35cb9-55e4-43f8-8481-7a40acc857b5\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ber.png\"\n                    },\n                    \"item_name\": \"2643\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bermuda\"\n                },\n                {\n                    \"id\": \"22e72589-4f36-4e08-aa17-72f5a056d179\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/boe.png\"\n                    },\n                    \"item_name\": \"19314\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Bonaire\"\n                },\n                {\n                    \"id\": \"02301f8e-b6b1-4e25-bf7a-b43af2fd788c\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bvr.png\"\n                    },\n                    \"item_name\": \"2644\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Islas vírgenes británicas\"\n                },\n                {\n                    \"id\": \"ae57257a-6083-40e1-94d6-786e30c95950\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/can.png\"\n                    },\n                    \"item_name\": \"206\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Canadá\"\n                },\n                {\n                    \"id\": \"ef96d523-22a2-4efb-8997-8688befdb0dd\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cay.png\"\n                    },\n                    \"item_name\": \"2646\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Islas caimán\"\n                },\n                {\n                    \"id\": \"9aa0f87c-7722-4fe8-ac64-abae12eb242f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/crc.png\"\n                    },\n                    \"item_name\": \"214\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Costa rica\"\n                },\n                {\n                    \"id\": \"fb5ba989-a0f6-45ab-a376-204f7e228bb6\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cub.png\"\n                    },\n                    \"item_name\": \"2647\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Cuba\"\n                },\n                {\n                    \"id\": \"b10e0844-f891-4aee-83f9-1a01485735f1\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11678.png\"\n                    },\n                    \"item_name\": \"11678\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Curacao\"\n                },\n                {\n                    \"id\": \"5639cf6a-8930-40e1-953e-edae2afd857b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/dma.png\"\n                    },\n                    \"item_name\": \"13582\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Dominica\"\n                },\n                {\n                    \"id\": \"b3680756-f8db-44cd-9205-ff075e102ce3\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/dom.png\"\n                    },\n                    \"item_name\": \"2649\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"República dominicana\"\n                },\n                {\n                    \"id\": \"23c552a4-f195-41f7-9490-3f90ba4cb06d\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/slv.png\"\n                    },\n                    \"item_name\": \"2650\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"El salvador\"\n                },\n                {\n                    \"id\": \"fb1ef701-c035-4288-8db3-3fa57f78ec64\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10532.png\"\n                    },\n                    \"item_name\": \"10532\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Guyana francesa\"\n                },\n                {\n                    \"id\": \"22186594-2fb6-49ef-8097-8b0c33c4c3a4\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/grn.png\"\n                    },\n                    \"item_name\": \"2651\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Granada\"\n                },\n                {\n                    \"id\": \"fe99f42a-6c0d-4023-b378-8df502abc144\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/gdl.png\"\n                    },\n                    \"item_name\": \"7657\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Guadalupe\"\n                },\n                {\n                    \"id\": \"4c89f379-265a-433f-83e2-69d58b1bdb42\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/gua.png\"\n                    },\n                    \"item_name\": \"2652\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Guatemala\"\n                },\n                {\n                    \"id\": \"ccb88e11-b9e8-46ec-9190-7fdbfee4c39e\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/guy.png\"\n                    },\n                    \"item_name\": \"2653\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Guyana\"\n                },\n                {\n                    \"id\": \"0fd91465-252f-47a7-8103-acc7126d5825\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/hai.png\"\n                    },\n                    \"item_name\": \"2654\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Haití\"\n                },\n                {\n                    \"id\": \"95a4bcf4-42c1-4f1f-b39a-4556430d27c7\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/hon.png\"\n                    },\n                    \"item_name\": \"215\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Honduras\"\n                },\n                {\n                    \"id\": \"006838be-9a86-4539-87a0-672a7e890bcb\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/jam.png\"\n                    },\n                    \"item_name\": \"1038\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Jamaica\"\n                },\n                {\n                    \"id\": \"29fd6cb3-ab04-4c07-bd43-6e6e703c9549\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/marq.png\"\n                    },\n                    \"item_name\": \"2728\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Martinica\"\n                },\n                {\n                    \"id\": \"ab6eb182-78bc-42bd-a3fa-24b5e6bf2c31\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mex.png\"\n                    },\n                    \"item_name\": \"203\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"México\"\n                },\n                {\n                    \"id\": \"aac0a1b4-01aa-4597-bebc-f4cb5d3eb636\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/msr.png\"\n                    },\n                    \"item_name\": \"2655\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Montserrat\"\n                },\n                {\n                    \"id\": \"6627b422-4a61-4968-b98d-ea83d3bbde70\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nca.png\"\n                    },\n                    \"item_name\": \"2658\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Nicaragua\"\n                },\n                {\n                    \"id\": \"8cb7e928-4fdc-491c-b20f-89aa19234436\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/pan.png\"\n                    },\n                    \"item_name\": \"2659\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Panamá\"\n                },\n                {\n                    \"id\": \"fb603b9b-4317-42d7-9fe4-12448aeaf1f2\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11766.png\"\n                    },\n                    \"item_name\": \"11766\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Puerto rico\"\n                },\n                {\n                    \"id\": \"4414675e-4541-42c9-9a9d-c0f41ca554e6\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sma.png\"\n                    },\n                    \"item_name\": \"18243\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Sint maarten\"\n                },\n                {\n                    \"id\": \"cd809103-ad12-4dec-b67c-1b10f6d0913b\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/skn.png\"\n                    },\n                    \"item_name\": \"2662\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"San cristóbal y nieves\"\n                },\n                {\n                    \"id\": \"82b803c0-3575-4f10-8299-f3fc656d4466\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lca.png\"\n                    },\n                    \"item_name\": \"2661\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"St. Lucia\"\n                },\n                {\n                    \"id\": \"1605e19a-c2fb-4f71-899d-666f88e0e337\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/stm.png\"\n                    },\n                    \"item_name\": \"10596\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"St. Martin\"\n                },\n                {\n                    \"id\": \"0f64fe54-d1cc-4344-8820-0e5f33e2f97d\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/vin.png\"\n                    },\n                    \"item_name\": \"13584\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"St. Vincent and the Grenadines\"\n                },\n                {\n                    \"id\": \"75d4aab4-6021-480c-98e6-a35b25eb69b6\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sur.png\"\n                    },\n                    \"item_name\": \"2664\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Surinam\"\n                },\n                {\n                    \"id\": \"7ad22bd6-ad86-411e-a7a5-f014887f285a\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/tri.png\"\n                    },\n                    \"item_name\": \"2627\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Trinidad y tobago\"\n                },\n                {\n                    \"id\": \"828442cb-7aff-4bd7-b1ff-75ae0a9f9daf\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/tca.png\"\n                    },\n                    \"item_name\": \"2665\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Islas turcas y caicos\"\n                },\n                {\n                    \"id\": \"48d3fec0-4c4f-4813-b504-c70e4935859f\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/vir.png\"\n                    },\n                    \"item_name\": \"2645\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Islas vírgenes americanas\"\n                },\n                {\n                    \"id\": \"04920eb9-5cdd-4d8e-926a-d6e0e5ec8237\",\n                    \"metadata\": {\n                        \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/usa.png\"\n                    },\n                    \"item_name\": \"660\",\n                    \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                    \"description\": \"Estados unidos\"\n                }\n            ],\n            \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/64.png\"\n        },\n        \"active\": true,\n        \"process_name\": null,\n        \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\"\n    }\n]"}],"_postman_id":"4c491aee-f690-48b0-a725-ee9029d44b86"},{"name":"Lista de categorías para placer culpable","event":[{"listen":"test","script":{"id":"ad6dd6c3-383d-4e6c-8685-ef5076b72470","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object',\r","    active: 'boolean',\r","    process_name: { type: 'string', optional: true },\r","    catalog: 'string'\r","};\r","\r","const metadataProperties = {\r","    fbid: 'string',\r","    teams: 'array',\r","    img_url: 'string'\r","};\r","\r","const teamProperties = {\r","    id: 'string',\r","    metadata: 'object',\r","    item_name: 'string',\r","    catalog_id: 'string',\r","    description: 'string'\r","};\r","\r","const teamMetadataProperties = {\r","    img_url: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties of the metadata object\r","pm.test(\"Metadata object has expected properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0].metadata, metadataProperties);\r","    }\r","});\r","\r","// Check properties within the teams array\r","pm.test(\"Teams have expected properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0 && responseJson[0].metadata.teams && responseJson[0].metadata.teams.length > 0) {\r","        // Test only the first item in the teams array\r","        xerpaTestApi.checkObjectProperties(responseJson[0].metadata.teams[0], teamProperties);\r","        \r","        // Check properties of the metadata object in the first team\r","        xerpaTestApi.checkObjectProperties(responseJson[0].metadata.teams[0].metadata, teamMetadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"319762a1-28de-46e2-9d5b-51cd543e8ed0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=guilty_pleasure_categories","description":"<p>Este endpoint permite recuperar una lista de categorías de placeres culpables disponibles en el catálogo del servicio de ahorro.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>URL:</strong> <code>{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=guilty_pleasure_categories</code></p>\n</li>\n</ul>\n<h4 id=\"request-parameters\">Request Parameters</h4>\n<ul>\n<li><strong>catalog</strong> (string): El nombre del catálogo que se desea recuperar. En este caso, debe ser <code>guilty_pleasure_categories</code>.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta se entrega en formato JSON e incluye un array de <code>guilty_pleasure_categories</code>, donde cada uno de ellos incluye:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único de la categoría.</p>\n</li>\n<li><p><code>catalog</code> (string): Nombre del catálogo al que pertenece la categoría.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre de la categoría de placer culpable.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la categoría.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional de la categoría, que incluye:</p>\n<ul>\n<li><p><code>icon</code> (string): Icono asociado a la categoría.</p>\n</li>\n<li><p><code>color</code> (string): Color asociado a la categoría.</p>\n</li>\n<li><p><code>active</code> (boolean): Indica si la categoría está activa.</p>\n</li>\n<li><p><code>short_name</code> (string): Nombre corto de la categoría.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"guilty_pleasure_categories\": [\n    {\n      \"id\": \"\",\n      \"catalog\": \"\",\n      \"item_name\": \"\",\n      \"description\": \"\",\n      \"metadata\": {\n        \"icon\": \"\",\n        \"color\": \"\",\n        \"active\": true,\n        \"short_name\": \"\"\n      }\n    }\n  ]\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","catalogs",""],"host":["{{host_app}}"],"query":[{"key":"catalog","value":"guilty_pleasure_categories"}],"variable":[]}},"response":[{"id":"dd23ce92-7082-4ba0-abe2-95b63190da16","name":"Lista de categorías para placer culpable","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=guilty_pleasure_categories","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":"guilty_pleasure_categories"}]}},"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"guilty_pleasure_categories\": [\n        {\n            \"id\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b1\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Entretenimiento\",\n            \"description\": \"Netflix, spotify, cine, apps store, videojuegos\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/entretenimiento.svg\",\n                \"color\": \"#ED888A\",\n                \"active\": true,\n                \"short_name\": \"ENTRETENIMIENTO\"\n            }\n        },\n        {\n            \"id\": \"84e6fa2f-8790-4d94-8f65-6944c7bcba10\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Vacaciones & Viajes\",\n            \"description\": \"Plataformas de viajes, hoteles, cabañas, arriendo de auto\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/viajes.svg\",\n                \"color\": \"#FFC700\",\n                \"active\": true,\n                \"short_name\": \"VACACION_VIAJE\"\n            }\n        },\n        {\n            \"id\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Shopping\",\n            \"description\": \"Deportes\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"SHOPPING\"\n            }\n        },\n        {\n            \"id\": \"a249c468-bb4d-4365-83f4-108d456bb494\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Restaurantes\",\n            \"description\": \"Apps de pedidos, restaurantes, bares y nightclubs\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/restaurantes.svg\",\n                \"color\": \"#B00009\",\n                \"active\": true,\n                \"short_name\": \"RESTAURANT\"\n            }\n        },\n        {\n            \"id\": \"53566d37-4b4d-4598-8b6c-09f5970c33cd\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Automóvil & Transporte\",\n            \"description\": \"Gasolina, estacionamiento, seguro auto, app taxi\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/transporte.svg\",\n                \"color\": \"#8C6700\",\n                \"active\": true,\n                \"short_name\": \"AUTOMOVIL_TRANSPORTE\"\n            }\n        },\n        {\n            \"id\": \"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Supermercados\",\n            \"description\": \"Tienda de comestibles, panaderia, pasteleria\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/supermercados.svg\",\n                \"color\": \"#E81E2B\",\n                \"active\": true,\n                \"short_name\": \"SUPERMERCADO\"\n            }\n        }\n    ]\n}"}],"_postman_id":"319762a1-28de-46e2-9d5b-51cd543e8ed0"},{"name":"Cuestionario de elminación de meta","event":[{"listen":"test","script":{"id":"ad6dd6c3-383d-4e6c-8685-ef5076b72470","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object',\r","    active: 'boolean',\r","    process_name: { type: 'string', optional: true },\r","    catalog: 'string'\r","};\r","\r","const metadataProperties = {\r","    fbid: 'string',\r","    teams: 'array',\r","    img_url: 'string'\r","};\r","\r","const teamProperties = {\r","    id: 'string',\r","    metadata: 'object',\r","    item_name: 'string',\r","    catalog_id: 'string',\r","    description: 'string'\r","};\r","\r","const teamMetadataProperties = {\r","    img_url: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties of the metadata object\r","pm.test(\"Metadata object has expected properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0].metadata, metadataProperties);\r","    }\r","});\r","\r","// Check properties within the teams array\r","pm.test(\"Teams have expected properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0 && responseJson[0].metadata.teams && responseJson[0].metadata.teams.length > 0) {\r","        // Test only the first item in the teams array\r","        xerpaTestApi.checkObjectProperties(responseJson[0].metadata.teams[0], teamProperties);\r","        \r","        // Check properties of the metadata object in the first team\r","        xerpaTestApi.checkObjectProperties(responseJson[0].metadata.teams[0].metadata, teamMetadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"8b171f9c-20a6-4e2f-8342-6e0ed2b0dc33","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=guilty_pleasure_categories","description":"<p>Este endpoint permite recuperar una lista de categorías de placeres culpables disponibles en el catálogo del servicio de ahorro.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>URL:</strong> <code>{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=guilty_pleasure_categories</code></p>\n</li>\n</ul>\n<h4 id=\"request-parameters\">Request Parameters</h4>\n<ul>\n<li><strong>catalog</strong> (string): El nombre del catálogo que se desea recuperar. En este caso, debe ser <code>guilty_pleasure_categories</code>.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta se entrega en formato JSON e incluye un array de <code>guilty_pleasure_categories</code>, donde cada uno de ellos incluye:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único de la categoría.</p>\n</li>\n<li><p><code>catalog</code> (string): Nombre del catálogo al que pertenece la categoría.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre de la categoría de placer culpable.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la categoría.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional de la categoría, que incluye:</p>\n<ul>\n<li><p><code>icon</code> (string): Icono asociado a la categoría.</p>\n</li>\n<li><p><code>color</code> (string): Color asociado a la categoría.</p>\n</li>\n<li><p><code>active</code> (boolean): Indica si la categoría está activa.</p>\n</li>\n<li><p><code>short_name</code> (string): Nombre corto de la categoría.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"guilty_pleasure_categories\": [\n    {\n      \"id\": \"\",\n      \"catalog\": \"\",\n      \"item_name\": \"\",\n      \"description\": \"\",\n      \"metadata\": {\n        \"icon\": \"\",\n        \"color\": \"\",\n        \"active\": true,\n        \"short_name\": \"\"\n      }\n    }\n  ]\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","catalogs",""],"host":["{{host_app}}"],"query":[{"key":"catalog","value":"guilty_pleasure_categories"}],"variable":[]}},"response":[{"id":"0e2f1275-1c7e-4a63-a844-0a6ae34ab564","name":"Cuestionario de eliminación de meta","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=guilty_pleasure_categories","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":"guilty_pleasure_categories"}]}},"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"guilty_pleasure_categories\": [\n        {\n            \"id\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b1\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Entretenimiento\",\n            \"description\": \"Netflix, spotify, cine, apps store, videojuegos\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/entretenimiento.svg\",\n                \"color\": \"#ED888A\",\n                \"active\": true,\n                \"short_name\": \"ENTRETENIMIENTO\"\n            }\n        },\n        {\n            \"id\": \"84e6fa2f-8790-4d94-8f65-6944c7bcba10\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Vacaciones & Viajes\",\n            \"description\": \"Plataformas de viajes, hoteles, cabañas, arriendo de auto\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/viajes.svg\",\n                \"color\": \"#FFC700\",\n                \"active\": true,\n                \"short_name\": \"VACACION_VIAJE\"\n            }\n        },\n        {\n            \"id\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Shopping\",\n            \"description\": \"Deportes\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"SHOPPING\"\n            }\n        },\n        {\n            \"id\": \"a249c468-bb4d-4365-83f4-108d456bb494\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Restaurantes\",\n            \"description\": \"Apps de pedidos, restaurantes, bares y nightclubs\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/restaurantes.svg\",\n                \"color\": \"#B00009\",\n                \"active\": true,\n                \"short_name\": \"RESTAURANT\"\n            }\n        },\n        {\n            \"id\": \"53566d37-4b4d-4598-8b6c-09f5970c33cd\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Automóvil & Transporte\",\n            \"description\": \"Gasolina, estacionamiento, seguro auto, app taxi\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/transporte.svg\",\n                \"color\": \"#8C6700\",\n                \"active\": true,\n                \"short_name\": \"AUTOMOVIL_TRANSPORTE\"\n            }\n        },\n        {\n            \"id\": \"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Supermercados\",\n            \"description\": \"Tienda de comestibles, panaderia, pasteleria\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/supermercados.svg\",\n                \"color\": \"#E81E2B\",\n                \"active\": true,\n                \"short_name\": \"SUPERMERCADO\"\n            }\n        }\n    ]\n}"}],"_postman_id":"8b171f9c-20a6-4e2f-8342-6e0ed2b0dc33"},{"name":"Cuestionario de retiro de dinero","event":[{"listen":"test","script":{"id":"ad6dd6c3-383d-4e6c-8685-ef5076b72470","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object',\r","    active: 'boolean',\r","    process_name: { type: 'string', optional: true },\r","    catalog: 'string'\r","};\r","\r","const metadataProperties = {\r","    fbid: 'string',\r","    teams: 'array',\r","    img_url: 'string'\r","};\r","\r","const teamProperties = {\r","    id: 'string',\r","    metadata: 'object',\r","    item_name: 'string',\r","    catalog_id: 'string',\r","    description: 'string'\r","};\r","\r","const teamMetadataProperties = {\r","    img_url: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties of the metadata object\r","pm.test(\"Metadata object has expected properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0].metadata, metadataProperties);\r","    }\r","});\r","\r","// Check properties within the teams array\r","pm.test(\"Teams have expected properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0 && responseJson[0].metadata.teams && responseJson[0].metadata.teams.length > 0) {\r","        // Test only the first item in the teams array\r","        xerpaTestApi.checkObjectProperties(responseJson[0].metadata.teams[0], teamProperties);\r","        \r","        // Check properties of the metadata object in the first team\r","        xerpaTestApi.checkObjectProperties(responseJson[0].metadata.teams[0].metadata, teamMetadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"857f8181-a77b-405c-a620-610d5b52c86d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=guilty_pleasure_categories","description":"<p>Este endpoint permite recuperar una lista de categorías de placeres culpables disponibles en el catálogo del servicio de ahorro.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>URL:</strong> <code>{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=guilty_pleasure_categories</code></p>\n</li>\n</ul>\n<h4 id=\"request-parameters\">Request Parameters</h4>\n<ul>\n<li><strong>catalog</strong> (string): El nombre del catálogo que se desea recuperar. En este caso, debe ser <code>guilty_pleasure_categories</code>.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta se entrega en formato JSON e incluye un array de <code>guilty_pleasure_categories</code>, donde cada uno de ellos incluye:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único de la categoría.</p>\n</li>\n<li><p><code>catalog</code> (string): Nombre del catálogo al que pertenece la categoría.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre de la categoría de placer culpable.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la categoría.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional de la categoría, que incluye:</p>\n<ul>\n<li><p><code>icon</code> (string): Icono asociado a la categoría.</p>\n</li>\n<li><p><code>color</code> (string): Color asociado a la categoría.</p>\n</li>\n<li><p><code>active</code> (boolean): Indica si la categoría está activa.</p>\n</li>\n<li><p><code>short_name</code> (string): Nombre corto de la categoría.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"guilty_pleasure_categories\": [\n    {\n      \"id\": \"\",\n      \"catalog\": \"\",\n      \"item_name\": \"\",\n      \"description\": \"\",\n      \"metadata\": {\n        \"icon\": \"\",\n        \"color\": \"\",\n        \"active\": true,\n        \"short_name\": \"\"\n      }\n    }\n  ]\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","catalogs",""],"host":["{{host_app}}"],"query":[{"key":"catalog","value":"guilty_pleasure_categories"}],"variable":[]}},"response":[{"id":"13197101-8243-4be3-91b4-ac177eca86b7","name":"Cuestionario de  retiro de dinero","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=guilty_pleasure_categories","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":"guilty_pleasure_categories"}]}},"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"guilty_pleasure_categories\": [\n        {\n            \"id\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b1\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Entretenimiento\",\n            \"description\": \"Netflix, spotify, cine, apps store, videojuegos\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/entretenimiento.svg\",\n                \"color\": \"#ED888A\",\n                \"active\": true,\n                \"short_name\": \"ENTRETENIMIENTO\"\n            }\n        },\n        {\n            \"id\": \"84e6fa2f-8790-4d94-8f65-6944c7bcba10\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Vacaciones & Viajes\",\n            \"description\": \"Plataformas de viajes, hoteles, cabañas, arriendo de auto\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/viajes.svg\",\n                \"color\": \"#FFC700\",\n                \"active\": true,\n                \"short_name\": \"VACACION_VIAJE\"\n            }\n        },\n        {\n            \"id\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Shopping\",\n            \"description\": \"Deportes\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"SHOPPING\"\n            }\n        },\n        {\n            \"id\": \"a249c468-bb4d-4365-83f4-108d456bb494\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Restaurantes\",\n            \"description\": \"Apps de pedidos, restaurantes, bares y nightclubs\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/restaurantes.svg\",\n                \"color\": \"#B00009\",\n                \"active\": true,\n                \"short_name\": \"RESTAURANT\"\n            }\n        },\n        {\n            \"id\": \"53566d37-4b4d-4598-8b6c-09f5970c33cd\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Automóvil & Transporte\",\n            \"description\": \"Gasolina, estacionamiento, seguro auto, app taxi\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/transporte.svg\",\n                \"color\": \"#8C6700\",\n                \"active\": true,\n                \"short_name\": \"AUTOMOVIL_TRANSPORTE\"\n            }\n        },\n        {\n            \"id\": \"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\n            \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n            \"item_name\": \"Supermercados\",\n            \"description\": \"Tienda de comestibles, panaderia, pasteleria\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/supermercados.svg\",\n                \"color\": \"#E81E2B\",\n                \"active\": true,\n                \"short_name\": \"SUPERMERCADO\"\n            }\n        }\n    ]\n}"}],"_postman_id":"857f8181-a77b-405c-a620-610d5b52c86d"},{"name":"Lista de comercios para placer culpable","event":[{"listen":"test","script":{"id":"ad6dd6c3-383d-4e6c-8685-ef5076b72470","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object',\r","    active: 'boolean',\r","    process_name: { type: 'string', optional: true },\r","    catalog: 'string'\r","};\r","\r","const metadataProperties = {\r","    fbid: 'string',\r","    teams: 'array',\r","    img_url: 'string'\r","};\r","\r","const teamProperties = {\r","    id: 'string',\r","    metadata: 'object',\r","    item_name: 'string',\r","    catalog_id: 'string',\r","    description: 'string'\r","};\r","\r","const teamMetadataProperties = {\r","    img_url: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties of the metadata object\r","pm.test(\"Metadata object has expected properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0].metadata, metadataProperties);\r","    }\r","});\r","\r","// Check properties within the teams array\r","pm.test(\"Teams have expected properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0 && responseJson[0].metadata.teams && responseJson[0].metadata.teams.length > 0) {\r","        // Test only the first item in the teams array\r","        xerpaTestApi.checkObjectProperties(responseJson[0].metadata.teams[0], teamProperties);\r","        \r","        // Check properties of the metadata object in the first team\r","        xerpaTestApi.checkObjectProperties(responseJson[0].metadata.teams[0].metadata, teamMetadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"280ef298-23cb-47ce-ab90-c79fef03a629","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=guilty_pleasure_merchants","description":"<p>Este endpoint permite recuperar una lista de ligas de fútbol 🏆 disponibles en el catálogo del servicio de ahorro.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/catalogs/soccer-leagues/</p>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta se entrega en formato JSON e incluye los siguientes campos:</p>\n<p>Entrega un array de <code>soccer_league</code>, en donde cada una de ellos incluye:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único de la liga.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre de la liga de fútbol.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la liga.</p>\n</li>\n<li><p><code>active</code> (boolean): Indica si la liga está activa.</p>\n</li>\n<li><p><code>process_name</code> (string): Nombre del proceso asociado a la liga (si aplica).</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece la liga.</p>\n</li>\n<li><p><code>metadata</code>(object): Información adicional de la liga, esto incluye:</p>\n<ul>\n<li><p><code>fbid</code> (string): ID de Facebook asociado a la liga.</p>\n</li>\n<li><p><code>img_url</code>(string): URL de la imagen de la liga.</p>\n</li>\n<li><p><code>teams</code> (array): Arreglo de equipos asociados a la liga. Cada equipo contiene:</p>\n<ul>\n<li><p><code>id</code> (string): ID del equipo.</p>\n</li>\n<li><p><code>metadata.img_url</code> (string): URL de la imagen del equipo.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del equipo.</p>\n</li>\n<li><p><code>catalog_id</code> (string): ID del catálogo al que pertenece el equipo.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del equipo.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n      \"item_name\": { \"type\": \"string\" },\n      \"description\": { \"type\": \"string\" },\n      \"metadata\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"fbid\": { \"type\": \"string\" },\n          \"img_url\": { \"type\": \"string\", \"format\": \"uri\" },\n          \"teams\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n                \"item_name\": { \"type\": \"string\" },\n                \"description\": { \"type\": \"string\" },\n                \"catalog_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n                \"metadata\": {\n                  \"type\": \"object\",\n                  \"properties\": {\n                    \"img_url\": { \"type\": \"string\", \"format\": \"uri\" }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"active\": { \"type\": \"boolean\" },\n      \"process_name\": { \"type\": [\"string\", \"null\"] },\n      \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","catalogs",""],"host":["{{host_app}}"],"query":[{"key":"catalog","value":"guilty_pleasure_merchants"}],"variable":[]}},"response":[],"_postman_id":"280ef298-23cb-47ce-ab90-c79fef03a629"}],"id":"05e1b703-6991-4bef-8ba3-1dd8bde5e070","_postman_id":"05e1b703-6991-4bef-8ba3-1dd8bde5e070","description":""},{"name":"Lista de catálogos disponibles","event":[{"listen":"test","script":{"id":"c4017ff1-c426-4bb1-85a7-ef79e1be9291","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');","","xerpaTestApi.testResponseTime();","xerpaTestApi.testSuccessfulGet();","","// Parse the response JSON","const responseJson = pm.response.json();","","// Define the expected property types","const topLevelProperties = {","    id: 'string',","    items: 'array',","    catalog_name: 'string',","    description: 'string'","};","","const itemProperties = {","    id: 'string',","    catalog: 'string',","    item_name: 'string',","    description: 'string',","    metadata: 'object'","};","","const metadataProperties = {","    icon: { type: 'string', optional: true },","    color: 'string',","    active: { type: 'boolean', optional: true },","    short_name: 'string',","    title: { type: 'string', optional: true },","    img_url: { type: 'string', optional: true },","    name: { type: 'string', optional: true },","    order: { type: 'number', optional: true },","    description: { type: 'string', optional: true }","};","","// Check top-level properties","pm.test(\"Response has expected top-level properties with correct types\", () => {","    if (responseJson && responseJson.length > 0) {","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);","    }","});","","// Check properties within the items array","pm.test(\"Items have expected properties with correct types\", () => {","    if (responseJson && responseJson.length > 0 && responseJson[0].items && responseJson[0].items.length > 0) {","        // Test only the first item in the items array","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0], itemProperties);","        ","        // Check properties of the metadata object in the first item","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0].metadata, metadataProperties);","    }","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}},{"listen":"prerequest","script":{"id":"d7499b68-420a-4e8d-85cb-6db28113d712","exec":[""],"type":"text/javascript","packages":{}}}],"id":"d84e94d3-7980-467d-9dfc-b14100d86263","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/all/","description":"<p>Este endpoint permite recuperar todos los <strong>catálogos</strong> disponibles en el sistema de ahorro, incluyendo sus ítems y metadatos.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/catalogs/all/</p>\n</li>\n</ul>\n<h4 id=\"request-body\"><strong>Request Body:</strong></h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta incluirá un arreglo de objetos <code>catalog</code>, cada uno con los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): ID único del catálogo.</p>\n</li>\n<li><p><code>catalog_name</code> (string): Nombre del catálogo.</p>\n</li>\n<li><p><code>description</code> (string): Descripción general del catálogo.</p>\n</li>\n<li><p><code>items</code>(object): Lista de ítems dentro del catálogo, cada ítem incluye:</p>\n<ul>\n<li><p><code>id</code> (string): ID único del ítem.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo al que pertenece el ítem.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del ítem.</p>\n</li>\n<li><p><code>metadata</code> (object): Metadatos visuales y descriptivos:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono representativo del ítem.</p>\n</li>\n<li><p><code>name</code> (string): Nombre visual.</p>\n</li>\n<li><p><code>color</code> (string): Color asignado.</p>\n</li>\n<li><p><code>order</code> (number): Posición dentro del catálogo.</p>\n</li>\n<li><p><code>active</code> (boolean): Indica si el ítem está activo.</p>\n</li>\n<li><p><code>short_name</code> (string): Nombre corto del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción adicional.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"results\": [\n    {\n      \"id\": \"string\",\n      \"items\": [\n        {\n          \"id\": \"string\",\n          \"catalog\": \"string\",\n          \"item_name\": \"string\",\n          \"description\": \"string\",\n          \"metadata\": {\n            \"icon\": \"string\",\n            \"name\": \"string\",\n            \"color\": \"string\",\n            \"order\": 0,\n            \"active\": true,\n            \"short_name\": \"string\",\n            \"description\": \"string\"\n          }\n        }\n      ],\n      \"catalog_name\": \"string\",\n      \"description\": \"string\"\n    }\n  ]\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","catalogs","all",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"3407980e-5ceb-4436-b424-5344ea6ffafb","name":"Succesful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/all/","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs","all",""],"query":[{"key":"page_size","value":"1","disabled":true},{"key":"page","value":"1","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 18:41:29 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"233168"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"c253db9d-4d1a-415d-9ab1-381a1ece2088"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZRJ9HInIAMEoEw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839fbd8-78aec253752f444060a6b207;Parent=713ee2c7049d6f79;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n        \"items\": [\n            {\n                \"id\": \"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\n                \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n                \"item_name\": \"Supermercados\",\n                \"description\": \"Tienda de comestibles, panaderia, pasteleria\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/supermercados.svg\",\n                    \"color\": \"#E81E2B\",\n                    \"active\": true,\n                    \"short_name\": \"SUPERMERCADO\"\n                }\n            },\n            {\n                \"id\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b1\",\n                \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n                \"item_name\": \"Entretenimiento\",\n                \"description\": \"Netflix, spotify, cine, apps store, videojuegos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/entretenimiento.svg\",\n                    \"color\": \"#ED888A\",\n                    \"active\": true,\n                    \"short_name\": \"ENTRETENIMIENTO\"\n                }\n            },\n            {\n                \"id\": \"84e6fa2f-8790-4d94-8f65-6944c7bcba10\",\n                \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n                \"item_name\": \"Vacaciones & Viajes\",\n                \"description\": \"Plataformas de viajes, hoteles, cabañas, arriendo de auto\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/viajes.svg\",\n                    \"color\": \"#FFC700\",\n                    \"active\": true,\n                    \"short_name\": \"VACACION_VIAJE\"\n                }\n            },\n            {\n                \"id\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\",\n                \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n                \"item_name\": \"Shopping\",\n                \"description\": \"Deportes\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"SHOPPING\"\n                }\n            },\n            {\n                \"id\": \"a249c468-bb4d-4365-83f4-108d456bb494\",\n                \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n                \"item_name\": \"Restaurantes\",\n                \"description\": \"Apps de pedidos, restaurantes, bares y nightclubs\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/restaurantes.svg\",\n                    \"color\": \"#B00009\",\n                    \"active\": true,\n                    \"short_name\": \"RESTAURANT\"\n                }\n            },\n            {\n                \"id\": \"53566d37-4b4d-4598-8b6c-09f5970c33cd\",\n                \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n                \"item_name\": \"Automóvil & Transporte\",\n                \"description\": \"Gasolina, estacionamiento, seguro auto, app taxi\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/transporte.svg\",\n                    \"color\": \"#8C6700\",\n                    \"active\": true,\n                    \"short_name\": \"AUTOMOVIL_TRANSPORTE\"\n                }\n            }\n        ],\n        \"catalog_name\": \"guilty_pleasure_categories\",\n        \"description\": \"Categorias placer culpable\"\n    },\n    {\n        \"id\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n        \"items\": [\n            {\n                \"id\": \"097a68d1-0662-4ec6-ad89-3cd4af8aff41\",\n                \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n                \"item_name\": \"payment_status_pending\",\n                \"description\": \"Ahorro sin ser enviado a la cuenta\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/alert_circle.svg\",\n                    \"color\": \"#191B1D\",\n                    \"title\": \"Ahorro pendiente\"\n                }\n            },\n            {\n                \"id\": \"a06a0253-2daa-4fe9-ae4e-2fbbae81b75b\",\n                \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n                \"item_name\": \"payment_status_expired_by_error\",\n                \"description\": \"Ahorro expirado por error\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/expired_circle.svg\",\n                    \"color\": \"#F54752\",\n                    \"title\": \"No se pudo ahorrar\"\n                }\n            },\n            {\n                \"id\": \"d19ec1e3-30fb-4fa3-a3d6-5f2624839858\",\n                \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n                \"item_name\": \"payment_status_expired_by_low_balance\",\n                \"description\": \"Ahorro expirado por balance bajo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/expired_circle.svg\",\n                    \"color\": \"#F54752\",\n                    \"title\": \"No se pudo ahorrar\"\n                }\n            },\n            {\n                \"id\": \"8987b1ee-d507-45ea-bdb7-e3a019f8f8d1\",\n                \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n                \"item_name\": \"payment_status_lowbalance\",\n                \"description\": \"Ahorro con respusta de saldo bajo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/alert_circle.svg\",\n                    \"color\": \"#191B1D\",\n                    \"title\": \"Ahorro con saldo bajo\"\n                }\n            },\n            {\n                \"id\": \"4131de69-c02e-42de-a34c-05ad2bcbd6e6\",\n                \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n                \"item_name\": \"payment_status_expired\",\n                \"description\": \"Ahorro expirado\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/expired_circle.svg\",\n                    \"color\": \"#F54752\",\n                    \"title\": \"Ahorro Expirado\"\n                }\n            },\n            {\n                \"id\": \"fefe5c88-a4b2-4808-a897-7780a6720a16\",\n                \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n                \"item_name\": \"payment_status_error\",\n                \"description\": \"Ahorro con error\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/alert_circle.svg\",\n                    \"color\": \"#191B1D\",\n                    \"title\": \"Ahorro con error\"\n                }\n            },\n            {\n                \"id\": \"6e9e124c-bba1-4fbd-b0a4-3761026c2625\",\n                \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n                \"item_name\": \"payment_status_deleted\",\n                \"description\": \"Ahorro borrado\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/expired_circle.svg\",\n                    \"color\": \"#F54752\",\n                    \"title\": \"Ahorro eliminado\"\n                }\n            },\n            {\n                \"id\": \"4b1c7b5d-a992-4344-9323-abca11aab5f2\",\n                \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n                \"item_name\": \"payment_status_processing\",\n                \"description\": \"Ahorro en proceso de ser enviado a cuenta\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/alert_circle.svg\",\n                    \"color\": \"#191B1D\",\n                    \"title\": \"Ahorro en proceso\"\n                }\n            },\n            {\n                \"id\": \"fbbb15cf-258a-4736-b72d-6f73362799d0\",\n                \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n                \"item_name\": \"payment_status_done\",\n                \"description\": \"Ahorro enviado a cuenta\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\",\n                    \"color\": \"#191B1D\",\n                    \"title\": \"Ahorro exitoso\"\n                }\n            },\n            {\n                \"id\": \"145479c5-3144-4a26-8292-8f44e42b8276\",\n                \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n                \"item_name\": \"payment_status_expired_by_low_balance_limit\",\n                \"description\": \"Ahorro expirado por balance bajo el limite\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/expired_circle.svg\",\n                    \"color\": \"#F54752\",\n                    \"title\": \"Ahorro Expirado\"\n                }\n            },\n            {\n                \"id\": \"621d1a04-f6f9-43bc-80d2-24ecabfd253e\",\n                \"catalog\": \"18764585-6a5f-4548-817d-d59038d8fda5\",\n                \"item_name\": \"payment_status_lowbalance_limit\",\n                \"description\": \"Ahorro con respuesta de saldo bajo el límite definido\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/alert_circle.svg\",\n                    \"color\": \"#191B1D\",\n                    \"title\": \"Ahorro con saldo bajo el límite definido\"\n                }\n            }\n        ],\n        \"catalog_name\": \"payment_status\",\n        \"description\": \"Estado del pago\"\n    },\n    {\n        \"id\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n        \"items\": [\n            {\n                \"id\": \"d26e9eb4-5c2a-45f2-af03-571af93ae7e2\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Transferencias & Retiros\",\n                \"description\": \"Transferencias a terceros, retiros en cajeros, retiros en caja\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/retiros.svg\",\n                    \"color\": \"#C9A71C\",\n                    \"active\": true,\n                    \"short_name\": \"TRANSFERENCIA_RETIRO\"\n                }\n            },\n            {\n                \"id\": \"cf01dce7-6d5e-4ad6-8e5a-8ba5c6d6f94c\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Gastos Financieros & Seguros\",\n                \"description\": \"Seguros, comisiones, impuestos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/finanzas.svg\",\n                    \"color\": \"#420456\",\n                    \"active\": true,\n                    \"short_name\": \"GASTO_FINANCIERO_SEGURO\"\n                }\n            },\n            {\n                \"id\": \"72fb8abb-d236-469d-a511-0e7d81c4af1e\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Hogar & Familia\",\n                \"description\": \"Renta, hipotecario, educación, mascota, veterinario, colegio\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/hogar.svg\",\n                    \"color\": \"#00A1DF\",\n                    \"active\": true,\n                    \"short_name\": \"HOGAR_FAMILIA\"\n                }\n            },\n            {\n                \"id\": \"8442c4fa-64e6-4470-af7c-8d007d5f572f\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Cuentas & Servicios\",\n                \"description\": \"Consumo de luz, agua, gas, internet, telefonía\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/servicios.svg\",\n                    \"color\": \"#BF6100\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTA_SERVICIO\"\n                }\n            },\n            {\n                \"id\": \"f0eae548-64e6-45b4-9bfd-4059d2b9d4df\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Salud & Bienestar\",\n                \"description\": \"Farmacia, doctores, dentista, gimnasio, salon de belleza, peluqueria\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/salud.svg\",\n                    \"color\": \"#870F38\",\n                    \"active\": true,\n                    \"short_name\": \"SALUD_BIENESTAR\"\n                }\n            },\n            {\n                \"id\": \"f7f2f8aa-2297-41a2-9fcf-d65aa9cfb180\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Donaciones & Regalos\",\n                \"description\": \"Donaciones, regalos a terceros\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/donaciones.svg\",\n                    \"color\": \"#9C9A9F\",\n                    \"active\": false,\n                    \"short_name\": \"DONACIONES\"\n                }\n            },\n            {\n                \"id\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"uncategorized\",\n                \"description\": \"Transacción sin categoría\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/ahorro.svg\",\n                    \"color\": \"#9C9A9F\",\n                    \"active\": false,\n                    \"short_name\": \"SIN_CATEGORIA\"\n                }\n            },\n            {\n                \"id\": \"4cdad960-1ec7-4a9b-aae8-71eeb6ba2ad7\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Transferencias entre Cuentas Propias\",\n                \"description\": \"Transferencias entre mis cuentas personales\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/ahorro.svg\",\n                    \"color\": \"#9C9A9F\",\n                    \"active\": true,\n                    \"short_name\": \"OTROS\"\n                }\n            },\n            {\n                \"id\": \"38e570af-1241-426c-afa5-f874b1c49128\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Otros\",\n                \"description\": \"Otros\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/ahorro.svg\",\n                    \"color\": \"#9C9A9F\",\n                    \"active\": true,\n                    \"short_name\": \"OTROS\"\n                }\n            },\n            {\n                \"id\": \"4419f198-e4d5-4352-aba6-c6f173b748b2\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Pago Tarjeta de Crédito\",\n                \"description\": \"Compra de divisas, pago tarjeta de crédito\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/credit_card.svg\",\n                    \"color\": \"#005D8F\",\n                    \"active\": true,\n                    \"short_name\": \"PAGO_TARJETA_CREDITO\"\n                }\n            },\n            {\n                \"id\": \"bf50dc35-43d0-4f60-9860-770b8afc96f4\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Ignorar\",\n                \"description\": \"Transacciones que no quieres que se agreguen a una categoría\",\n                \"metadata\": {\n                    \"icon\": \"/assets/img/category/ignore.svg\",\n                    \"color\": \"#CFA7DC\",\n                    \"active\": true,\n                    \"short_name\": \"IGNORE\"\n                }\n            }\n        ],\n        \"catalog_name\": \"expenses_categories\",\n        \"description\": \"Categorías de egresos\"\n    },\n    {\n        \"id\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n        \"items\": [\n            {\n                \"id\": \"c8150ea6-33fa-4faf-a3dd-6db3e7682e76\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_help\",\n                \"description\": \"Meta de ahorro para ayuda\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/ayuda.png\",\n                    \"name\": \"Finsus Help\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"\",\n                    \"order\": 0,\n                    \"active\": false,\n                    \"short_name\": \"PROJECT_TYPE_HELP\",\n                    \"description\": \"\"\n                }\n            },\n            {\n                \"id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_plus\",\n                \"description\": \"Meta de ahorro plus\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                    \"name\": \"Xerpa +\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"\",\n                    \"order\": 0,\n                    \"active\": false,\n                    \"short_name\": \"PROJECT_TYPE_PLUS\",\n                    \"description\": \"\"\n                }\n            },\n            {\n                \"id\": \"7ec66b89-9331-40ff-b144-813d07b3ccb5\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_employees\",\n                \"description\": \"Meta de ahorro para empleados\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/empleados.png\",\n                    \"name\": \"Ahorro empleados\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"\",\n                    \"order\": 0,\n                    \"active\": false,\n                    \"short_name\": \"PROJECT_TYPE_EMPLOYEES\",\n                    \"description\": \"\"\n                }\n            },\n            {\n                \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_holidays\",\n                \"description\": \"Meta de ahorro para vacaciones\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                    \"name\": \"Vacaciones\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 1,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                    \"description\": \"\"\n                }\n            },\n            {\n                \"id\": \"eeb4ccdb-f90e-4b96-888c-d8937185d96c\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_house\",\n                \"description\": \"Meta de ahorro para casa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/casa.png\",\n                    \"name\": \"Casa\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"vivienda\",\n                    \"order\": 2,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_HOUSE\",\n                    \"description\": \"\"\n                }\n            },\n            {\n                \"id\": \"7c1521e9-6d06-4c6e-9aa5-db4414afe71f\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_car\",\n                \"description\": \"Meta de ahorro para vehículo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/vehiculo.png\",\n                    \"name\": \"Vehículo\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 3,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_CAR\",\n                    \"description\": \"\"\n                }\n            },\n            {\n                \"id\": \"5d8862bf-b1b2-492f-b198-ae14ddef822e\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_education\",\n                \"description\": \"Meta de ahorro para educación\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/educacion.png\",\n                    \"name\": \"Educación\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 4,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_EDUCATION\",\n                    \"description\": \"\"\n                }\n            },\n            {\n                \"id\": \"a7409f6a-e6ba-4ed2-8f67-ba6d945681f6\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_shopping\",\n                \"description\": \"Meta de ahorro para compras\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/compras.png\",\n                    \"name\": \"Compras\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 5,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_SHOPPING\",\n                    \"description\": \"\"\n                }\n            },\n            {\n                \"id\": \"461a96b0-96d1-4259-a965-c599e1d7da1b\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_debts\",\n                \"description\": \"Meta de ahorro para deudas\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/deudas.png\",\n                    \"name\": \"Deudas\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 6,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_DEBTS\",\n                    \"description\": \"\"\n                }\n            },\n            {\n                \"id\": \"5877afb7-c6d8-4023-8498-9280890f3154\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_health\",\n                \"description\": \"Meta de ahorro para salud\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/salud.png\",\n                    \"name\": \"Salud\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 7,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_HEALTH\",\n                    \"description\": \"\"\n                }\n            },\n            {\n                \"id\": \"5877afb7-c6d8-4023-8498-9280890f3155\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_other\",\n                \"description\": \"Meta de ahorro para otro\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/otros.png\",\n                    \"name\": \"Otro\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"vivienda\",\n                    \"order\": 8,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_OTHER\",\n                    \"description\": \"\"\n                }\n            },\n            {\n                \"id\": \"bc92eb07-f119-4440-a3c9-79f89dd3bdb0\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_event\",\n                \"description\": \"Meta de ahorro para evento\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/evento.png\",\n                    \"name\": \"Evento\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 9,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_EVENT\",\n                    \"description\": \"\"\n                }\n            },\n            {\n                \"id\": \"b92de6d7-ae64-4649-bc61-ceb8f46db8f4\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_retirement\",\n                \"description\": \"Meta de ahorro para jubilación\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/jubilacion.png\",\n                    \"name\": \"Jubilacion\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 9,\n                    \"active\": true,\n                    \"iconActive\": \"/assets/xerpa/global/img/projects/jubilacion_active.png\",\n                    \"short_name\": \"PROJECT_TYPE_RETIREMENT\",\n                    \"description\": \"\"\n                }\n            }\n        ],\n        \"catalog_name\": \"project_type\",\n        \"description\": \"Tipo de meta\"\n    },\n    {\n        \"id\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n        \"items\": [\n            {\n                \"id\": \"94bcd197-0d33-40e4-8793-78aa42ad3220\",\n                \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                \"item_name\": \"rule_status_paused\",\n                \"description\": \"Regla pausada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/paused.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_STATUS_PAUSED\"\n                }\n            },\n            {\n                \"id\": \"b482fbc2-83eb-4847-bdea-1b5e27794032\",\n                \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                \"item_name\": \"rule_status_deleted\",\n                \"description\": \"Regla eliminada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/deleted.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_STATUS_DELETED\"\n                }\n            },\n            {\n                \"id\": \"bdb1f431-0fd9-4c24-8dd3-d026ad6d6ba3\",\n                \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                \"item_name\": \"rule_status_finished\",\n                \"description\": \"Regla finalizada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/paused.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_STATUS_PAUSED\"\n                }\n            },\n            {\n                \"id\": \"ec3c9b31-4c60-426b-bd90-6fcf3cdf28e4\",\n                \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                \"item_name\": \"rule_status_suspended\",\n                \"description\": \"Regla suspendida\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/paused.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_STATUS_PAUSED\"\n                }\n            },\n            {\n                \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n                \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                \"item_name\": \"rule_status_active\",\n                \"description\": \"Regla activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_STATUS_ACTIVE\"\n                }\n            }\n        ],\n        \"catalog_name\": \"rule_status\",\n        \"description\": \"Estado de la regla\"\n    },\n    {\n        \"id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n        \"items\": [\n            {\n                \"id\": \"2e3bff2d-630a-45dc-979a-061389717dd9\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2637\",\n                \"description\": \"Barbados\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/brb.png\"\n                }\n            },\n            {\n                \"id\": \"2d84bd2a-4db5-48cf-833f-6874ac4fb4c4\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"89\",\n                \"description\": \"Real Sociedad\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/89.png\"\n                }\n            },\n            {\n                \"id\": \"a08eab2e-c9a4-4c06-9794-56ec7996fa31\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"209\",\n                \"description\": \"Ecuador\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ecu.png\"\n                }\n            },\n            {\n                \"id\": \"006838be-9a86-4539-87a0-672a7e890bcb\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"1038\",\n                \"description\": \"Jamaica\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/jam.png\"\n                }\n            },\n            {\n                \"id\": \"ab6eb182-78bc-42bd-a3fa-24b5e6bf2c31\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"203\",\n                \"description\": \"México\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mex.png\"\n                }\n            },\n            {\n                \"id\": \"8cb7e928-4fdc-491c-b20f-89aa19234436\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2659\",\n                \"description\": \"Panamá\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/pan.png\"\n                }\n            },\n            {\n                \"id\": \"2d78206b-020a-4c93-b287-901c8e4ad80a\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"210\",\n                \"description\": \"Paraguay\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/par.png\"\n                }\n            },\n            {\n                \"id\": \"7ab5539f-b0fd-49fe-8035-2a95d148afba\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"211\",\n                \"description\": \"Perú\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/per.png\"\n                }\n            },\n            {\n                \"id\": \"04920eb9-5cdd-4d8e-926a-d6e0e5ec8237\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"660\",\n                \"description\": \"Estados unidos\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/usa.png\"\n                }\n            },\n            {\n                \"id\": \"c0dd1fac-51ac-406f-a4d3-c43b61bdb5bd\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"212\",\n                \"description\": \"Uruguay\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/uru.png\"\n                }\n            },\n            {\n                \"id\": \"2ba29bab-b28a-4102-a36b-41533a6e2b68\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"213\",\n                \"description\": \"Venezuela\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ven.png\"\n                }\n            },\n            {\n                \"id\": \"135783c8-ef8a-413e-9d86-630634c5c5b4\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"8942\",\n                \"description\": \"Anguilla\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aia.png\"\n                }\n            },\n            {\n                \"id\": \"5411662f-554c-4c25-93fd-7e8383fafd68\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2638\",\n                \"description\": \"Antigua y barbuda\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/atg.png\"\n                }\n            },\n            {\n                \"id\": \"95aa4499-e359-4b61-a6a6-25e88ff8229d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2642\",\n                \"description\": \"Aruba\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aru.png\"\n                }\n            },\n            {\n                \"id\": \"e29fe892-c8fa-4e4c-8be4-6fd84c07fb80\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2640\",\n                \"description\": \"Bahamas\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bah.png\"\n                }\n            },\n            {\n                \"id\": \"0329530a-6191-4778-8c64-2b330ffcf263\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"243\",\n                \"description\": \"Sevilla\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/243.png\"\n                }\n            },\n            {\n                \"id\": \"8e19d7e3-4749-40e0-bc2b-9b871102a560\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2641\",\n                \"description\": \"Belice\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/blz.png\"\n                }\n            },\n            {\n                \"id\": \"3cc35cb9-55e4-43f8-8481-7a40acc857b5\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2643\",\n                \"description\": \"Bermuda\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ber.png\"\n                }\n            },\n            {\n                \"id\": \"22e72589-4f36-4e08-aa17-72f5a056d179\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"19314\",\n                \"description\": \"Bonaire\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/boe.png\"\n                }\n            },\n            {\n                \"id\": \"02301f8e-b6b1-4e25-bf7a-b43af2fd788c\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2644\",\n                \"description\": \"Islas vírgenes británicas\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bvr.png\"\n                }\n            },\n            {\n                \"id\": \"ef96d523-22a2-4efb-8997-8688befdb0dd\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2646\",\n                \"description\": \"Islas caimán\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cay.png\"\n                }\n            },\n            {\n                \"id\": \"fb5ba989-a0f6-45ab-a376-204f7e228bb6\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2647\",\n                \"description\": \"Cuba\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cub.png\"\n                }\n            },\n            {\n                \"id\": \"b10e0844-f891-4aee-83f9-1a01485735f1\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"11678\",\n                \"description\": \"Curacao\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11678.png\"\n                }\n            },\n            {\n                \"id\": \"5639cf6a-8930-40e1-953e-edae2afd857b\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"13582\",\n                \"description\": \"Dominica\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/dma.png\"\n                }\n            },\n            {\n                \"id\": \"b3680756-f8db-44cd-9205-ff075e102ce3\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2649\",\n                \"description\": \"República dominicana\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/dom.png\"\n                }\n            },\n            {\n                \"id\": \"23c552a4-f195-41f7-9490-3f90ba4cb06d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2650\",\n                \"description\": \"El salvador\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/slv.png\"\n                }\n            },\n            {\n                \"id\": \"fb1ef701-c035-4288-8db3-3fa57f78ec64\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"10532\",\n                \"description\": \"Guyana francesa\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10532.png\"\n                }\n            },\n            {\n                \"id\": \"22186594-2fb6-49ef-8097-8b0c33c4c3a4\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2651\",\n                \"description\": \"Granada\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/grn.png\"\n                }\n            },\n            {\n                \"id\": \"fe99f42a-6c0d-4023-b378-8df502abc144\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"7657\",\n                \"description\": \"Guadalupe\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/gdl.png\"\n                }\n            },\n            {\n                \"id\": \"4c89f379-265a-433f-83e2-69d58b1bdb42\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2652\",\n                \"description\": \"Guatemala\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/gua.png\"\n                }\n            },\n            {\n                \"id\": \"ccb88e11-b9e8-46ec-9190-7fdbfee4c39e\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2653\",\n                \"description\": \"Guyana\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/guy.png\"\n                }\n            },\n            {\n                \"id\": \"0fd91465-252f-47a7-8103-acc7126d5825\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2654\",\n                \"description\": \"Haití\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/hai.png\"\n                }\n            },\n            {\n                \"id\": \"95a4bcf4-42c1-4f1f-b39a-4556430d27c7\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"215\",\n                \"description\": \"Honduras\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/hon.png\"\n                }\n            },\n            {\n                \"id\": \"509b6efc-26bc-4fb6-8a19-7ad7fbf8cfab\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"86\",\n                \"description\": \"Real Madrid\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/86.png\"\n                }\n            },\n            {\n                \"id\": \"29fd6cb3-ab04-4c07-bd43-6e6e703c9549\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2728\",\n                \"description\": \"Martinica\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/marq.png\"\n                }\n            },\n            {\n                \"id\": \"aac0a1b4-01aa-4597-bebc-f4cb5d3eb636\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2655\",\n                \"description\": \"Montserrat\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/msr.png\"\n                }\n            },\n            {\n                \"id\": \"6627b422-4a61-4968-b98d-ea83d3bbde70\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2658\",\n                \"description\": \"Nicaragua\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nca.png\"\n                }\n            },\n            {\n                \"id\": \"fb603b9b-4317-42d7-9fe4-12448aeaf1f2\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"11766\",\n                \"description\": \"Puerto rico\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11766.png\"\n                }\n            },\n            {\n                \"id\": \"4414675e-4541-42c9-9a9d-c0f41ca554e6\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"18243\",\n                \"description\": \"Sint maarten\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sma.png\"\n                }\n            },\n            {\n                \"id\": \"cd809103-ad12-4dec-b67c-1b10f6d0913b\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2662\",\n                \"description\": \"San cristóbal y nieves\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/skn.png\"\n                }\n            },\n            {\n                \"id\": \"82b803c0-3575-4f10-8299-f3fc656d4466\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2661\",\n                \"description\": \"St. Lucia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lca.png\"\n                }\n            },\n            {\n                \"id\": \"1605e19a-c2fb-4f71-899d-666f88e0e337\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"10596\",\n                \"description\": \"St. Martin\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/stm.png\"\n                }\n            },\n            {\n                \"id\": \"0f64fe54-d1cc-4344-8820-0e5f33e2f97d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"13584\",\n                \"description\": \"St. Vincent and the Grenadines\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/vin.png\"\n                }\n            },\n            {\n                \"id\": \"75d4aab4-6021-480c-98e6-a35b25eb69b6\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2664\",\n                \"description\": \"Surinam\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sur.png\"\n                }\n            },\n            {\n                \"id\": \"7ad22bd6-ad86-411e-a7a5-f014887f285a\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2627\",\n                \"description\": \"Trinidad y tobago\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/tri.png\"\n                }\n            },\n            {\n                \"id\": \"828442cb-7aff-4bd7-b1ff-75ae0a9f9daf\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2665\",\n                \"description\": \"Islas turcas y caicos\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/tca.png\"\n                }\n            },\n            {\n                \"id\": \"48d3fec0-4c4f-4813-b504-c70e4935859f\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2645\",\n                \"description\": \"Islas vírgenes americanas\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/vir.png\"\n                }\n            },\n            {\n                \"id\": \"a3375113-9243-4e78-9f96-26c6e7de5bf5\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"4398\",\n                \"description\": \"Qatar\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/qat.png\"\n                }\n            },\n            {\n                \"id\": \"6a2e7ecf-d258-4830-b730-3dd3fd3298f1\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2751\",\n                \"description\": \"Australia Fem Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aus.png\"\n                }\n            },\n            {\n                \"id\": \"99814d0b-fadd-47d2-a486-f175c4bcd672\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2752\",\n                \"description\": \"Brasil Fem Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bra.png\"\n                }\n            },\n            {\n                \"id\": \"6864d001-6b2f-498a-98ec-e31ec68904a6\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2753\",\n                \"description\": \"Canadá Fem Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/can.png\"\n                }\n            },\n            {\n                \"id\": \"8f1ac3ab-d195-439e-8286-cf99feac0278\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"11337\",\n                \"description\": \"Colombia Fem Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/col.png\"\n                }\n            },\n            {\n                \"id\": \"40d80317-6892-412d-ae89-4ecec23cc197\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2755\",\n                \"description\": \"Francia Fem Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fra.png\"\n                }\n            },\n            {\n                \"id\": \"b1d30686-aee2-4aac-8f24-b32a5f8ada50\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2756\",\n                \"description\": \"Alemania Fem Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ger.png\"\n                }\n            },\n            {\n                \"id\": \"11d7355b-9ee0-4123-9cda-cec6db0ca34d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2758\",\n                \"description\": \"Japón Fem Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/jpn.png\"\n                }\n            },\n            {\n                \"id\": \"4c33d3b0-83ff-47d3-93f3-37869ef45eaa\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"4153\",\n                \"description\": \"Nueva zelanda Fem Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nzl.png\"\n                }\n            },\n            {\n                \"id\": \"317d62f6-20fe-4ab3-985f-972d1717783d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2761\",\n                \"description\": \"Nigeria Fem Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nga.png\"\n                }\n            },\n            {\n                \"id\": \"712d6eb0-ac71-4eb9-a13e-ac1860a6eb46\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"17640\",\n                \"description\": \"España Fem Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/esp.png\"\n                }\n            },\n            {\n                \"id\": \"f89a0e57-9b48-4944-8091-0f42231c7ce9\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2765\",\n                \"description\": \"Estados unidos Fem Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/usa.png\"\n                }\n            },\n            {\n                \"id\": \"f1174da4-1282-47b4-baf1-0a6f508cb0a9\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"20795\",\n                \"description\": \"Zambia Fem Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/zam.png\"\n                }\n            },\n            {\n                \"id\": \"b793cc3a-c7f1-4692-b5af-100988285308\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"18232\",\n                \"description\": \"Argentina Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/arg.png\"\n                }\n            },\n            {\n                \"id\": \"346702ff-f1cd-4653-93fa-8b8260a7286c\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"20651\",\n                \"description\": \"República dominicana Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/dom.png\"\n                }\n            },\n            {\n                \"id\": \"dfb6a266-5261-4990-bd5b-32b0b7660a66\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"18216\",\n                \"description\": \"Egipto Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/egy.png\"\n                }\n            },\n            {\n                \"id\": \"60f1e452-667e-4276-9e7b-da7f6f056bd0\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"20947\",\n                \"description\": \"Francia Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fra.png\"\n                }\n            },\n            {\n                \"id\": \"86433082-08e0-40c6-b285-46cc8a79ef0a\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"22267\",\n                \"description\": \"Guinea Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"\"\n                }\n            },\n            {\n                \"id\": \"23365790-20ca-4793-85f2-43e75e69fb2c\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"18227\",\n                \"description\": \"Iraq Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/irq.png\"\n                }\n            },\n            {\n                \"id\": \"1daf3d98-28eb-4205-b7e1-87819546f928\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"22241\",\n                \"description\": \"Israel Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/isr.png\"\n                }\n            },\n            {\n                \"id\": \"e040d8e8-d43b-4302-8e2e-f02760cfaf7e\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"18214\",\n                \"description\": \"Japón Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/jpn.png\"\n                }\n            },\n            {\n                \"id\": \"d4080711-e373-4733-b315-5e434dc757a3\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"22239\",\n                \"description\": \"Mali Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mli.png\"\n                }\n            },\n            {\n                \"id\": \"b6c1ffda-a547-41c3-82ce-192a3b7f10bb\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"21931\",\n                \"description\": \"Marruecos Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mar.png\"\n                }\n            },\n            {\n                \"id\": \"939a5ea9-76ae-4ba1-bff4-fe30d62d4319\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"18224\",\n                \"description\": \"Nueva zelanda Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nzl.png\"\n                }\n            },\n            {\n                \"id\": \"ad93e50d-e743-4e72-a3bc-bf3d1d397df9\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"20303\",\n                \"description\": \"Paraguay Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/par.png\"\n                }\n            },\n            {\n                \"id\": \"2223c353-4999-4972-97bc-1a831ac3838e\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"18220\",\n                \"description\": \"España Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/esp.png\"\n                }\n            },\n            {\n                \"id\": \"ae4525a9-a865-4fb4-8d0f-b86a8da2b06c\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"22240\",\n                \"description\": \"Ucrania Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ukr.png\"\n                }\n            },\n            {\n                \"id\": \"c040d5c2-1e3b-48dc-be7e-1e3030533b68\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2829\",\n                \"description\": \"Estados unidos Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/usa.png\"\n                }\n            },\n            {\n                \"id\": \"a5466dec-d0a4-4266-a216-acb6e1b8acf3\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"22266\",\n                \"description\": \"Uzbekistán Sub-23\",\n                \"metadata\": {\n                    \"img_url\": \"\"\n                }\n            },\n            {\n                \"id\": \"aae1a4e2-ed31-41f9-bb01-ea4169cf7564\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"349\",\n                \"description\": \"AFC Bournemouth\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/349.png\"\n                }\n            },\n            {\n                \"id\": \"416e45b5-aba1-47cf-97d5-669d1a638347\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2683\",\n                \"description\": \"Peñarol\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2683.png\"\n                }\n            },\n            {\n                \"id\": \"a99de1c1-15e8-4b07-b1f2-d715075a2ea6\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"337\",\n                \"description\": \"Brentford\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/337.png\"\n                }\n            },\n            {\n                \"id\": \"5f1a10fc-ad45-431f-a031-a2189d78f933\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"331\",\n                \"description\": \"Brighton & Hove Albion\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/331.png\"\n                }\n            },\n            {\n                \"id\": \"c03d200f-1905-4e19-b2e0-376f9d67be92\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"379\",\n                \"description\": \"Burnley\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/379.png\"\n                }\n            },\n            {\n                \"id\": \"a9f0dc37-b46b-47b6-b7b2-3f8bb61bbd56\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"363\",\n                \"description\": \"Chelsea\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/363.png\"\n                }\n            },\n            {\n                \"id\": \"c5a1819f-dde6-4662-8ecc-3eef6f3b1646\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"384\",\n                \"description\": \"Crystal Palace\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/384.png\"\n                }\n            },\n            {\n                \"id\": \"7bf32603-5801-41df-a69b-95a05571d7c9\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"362\",\n                \"description\": \"Aston Villa\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/362.png\"\n                }\n            },\n            {\n                \"id\": \"400e0c95-7acc-494b-ab62-f700e74db40e\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"368\",\n                \"description\": \"Everton\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/368.png\"\n                }\n            },\n            {\n                \"id\": \"db6bd379-52ae-4fbd-919a-0dcb0bc09cb0\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"370\",\n                \"description\": \"Fulham\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/370.png\"\n                }\n            },\n            {\n                \"id\": \"ab92756f-71db-4762-8540-21bd5b289f70\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"301\",\n                \"description\": \"Luton Town\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/301.png\"\n                }\n            },\n            {\n                \"id\": \"551dd47f-994a-4780-816d-f2670206553e\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"360\",\n                \"description\": \"Manchester United\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/360.png\"\n                }\n            },\n            {\n                \"id\": \"de825955-8147-413d-8ae3-b6cb6be7c44e\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"361\",\n                \"description\": \"Newcastle United\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/361.png\"\n                }\n            },\n            {\n                \"id\": \"be998e03-7cba-4fcf-a5c5-25603bfd7ee5\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"393\",\n                \"description\": \"Nottingham Forest\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/393.png\"\n                }\n            },\n            {\n                \"id\": \"e49bb518-1423-4b00-8b88-c0f02336e247\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"398\",\n                \"description\": \"Sheffield United\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/398.png\"\n                }\n            },\n            {\n                \"id\": \"8c545db0-b390-4d49-a61f-6ac118c69d4e\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"367\",\n                \"description\": \"Tottenham Hotspur\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/367.png\"\n                }\n            },\n            {\n                \"id\": \"df202595-cb1e-40a0-bb9f-71af5085ce51\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"371\",\n                \"description\": \"West Ham United\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/371.png\"\n                }\n            },\n            {\n                \"id\": \"4d0f47cc-2136-41ae-be27-b6c810f25b58\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"380\",\n                \"description\": \"Wolverhampton Wanderers\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/380.png\"\n                }\n            },\n            {\n                \"id\": \"c55dc30c-cd38-4d1a-bd8f-826e01b84f41\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"3171\",\n                \"description\": \"Clermont Foot\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3171.png\"\n                }\n            },\n            {\n                \"id\": \"5b422a5b-690f-49b2-b248-d870e343669c\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"3236\",\n                \"description\": \"Le Havre AC\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3236.png\"\n                }\n            },\n            {\n                \"id\": \"eb294949-04ec-4303-ad80-47242a15da09\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"175\",\n                \"description\": \"Lens\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/175.png\"\n                }\n            },\n            {\n                \"id\": \"2272dffe-1edb-4ae0-99d6-b745c1b82f34\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"273\",\n                \"description\": \"Lorient\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/273.png\"\n                }\n            },\n            {\n                \"id\": \"bbf647f9-66e2-4a95-b664-86492b469cbc\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"167\",\n                \"description\": \"Lyon\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/167.png\"\n                }\n            },\n            {\n                \"id\": \"f0dd15f0-69c5-4f24-b560-efad4a1c121b\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"176\",\n                \"description\": \"Marseille\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/176.png\"\n                }\n            },\n            {\n                \"id\": \"5eeea8b2-8a53-439a-b147-69d270f76709\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"177\",\n                \"description\": \"Metz\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/177.png\"\n                }\n            },\n            {\n                \"id\": \"0de57956-8821-47b0-8138-24371e68b9cc\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"274\",\n                \"description\": \"Montpellier\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/274.png\"\n                }\n            },\n            {\n                \"id\": \"fd437f88-e5a7-4f87-84ee-857d1c4ea1a9\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"165\",\n                \"description\": \"Nantes\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/165.png\"\n                }\n            },\n            {\n                \"id\": \"118e8fff-e835-4f17-9bc6-a1a3cf03e419\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2502\",\n                \"description\": \"Nice\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2502.png\"\n                }\n            },\n            {\n                \"id\": \"809f2616-4ca4-43bb-a91a-de52b328497f\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"169\",\n                \"description\": \"Stade Rennais\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/169.png\"\n                }\n            },\n            {\n                \"id\": \"809c9481-0abc-477a-8884-bf3e85a7651f\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"3243\",\n                \"description\": \"Stade de Reims\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3243.png\"\n                }\n            },\n            {\n                \"id\": \"4d06b368-9363-48c5-9246-5f8d198b95ed\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"180\",\n                \"description\": \"Strasbourg\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/180.png\"\n                }\n            },\n            {\n                \"id\": \"522d9757-444b-4aa2-9a84-95bbd38b7f61\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"179\",\n                \"description\": \"Toulouse\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/179.png\"\n                }\n            },\n            {\n                \"id\": \"2a700cf9-f428-4771-b6a9-79db9fd769fd\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"93\",\n                \"description\": \"Athletic Club\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/93.png\"\n                }\n            },\n            {\n                \"id\": \"cf631983-21d5-408e-9a33-a4be6357499b\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"219\",\n                \"description\": \"Guadalajara\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/219.png\"\n                }\n            },\n            {\n                \"id\": \"2e70f2ad-cfb5-4b10-825c-880e9469a7b9\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"96\",\n                \"description\": \"Alavés\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/96.png\"\n                }\n            },\n            {\n                \"id\": \"1a1725ad-2dde-41c5-9b90-794673d1978b\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"6832\",\n                \"description\": \"Almería\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6832.png\"\n                }\n            },\n            {\n                \"id\": \"1266d21f-fff6-44cd-91b3-3183f7c5ea4d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"85\",\n                \"description\": \"Celta Vigo\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/85.png\"\n                }\n            },\n            {\n                \"id\": \"49a1165a-b5dc-43d2-a96e-f98d14ef641d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"3842\",\n                \"description\": \"Cádiz\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3842.png\"\n                }\n            },\n            {\n                \"id\": \"5b8388c2-7d1c-4ade-ad11-c854d491b9ae\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2922\",\n                \"description\": \"Getafe\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2922.png\"\n                }\n            },\n            {\n                \"id\": \"786a3f9c-d0b6-4a41-a18e-0229f9c2fb5d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"3747\",\n                \"description\": \"Granada\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3747.png\"\n                }\n            },\n            {\n                \"id\": \"dba96ff9-2e83-4b18-b280-6af2123c05aa\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"98\",\n                \"description\": \"Las Palmas\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/98.png\"\n                }\n            },\n            {\n                \"id\": \"f995179f-b49d-42eb-8e8a-24db1ebcd158\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"84\",\n                \"description\": \"Mallorca\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/84.png\"\n                }\n            },\n            {\n                \"id\": \"e710df19-6933-4c69-b0de-5129baf95957\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"97\",\n                \"description\": \"Osasuna\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/97.png\"\n                }\n            },\n            {\n                \"id\": \"5d470ac3-ef50-4f5e-b99d-37cbd4834a38\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"101\",\n                \"description\": \"Rayo Vallecano\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/101.png\"\n                }\n            },\n            {\n                \"id\": \"43e6ae3b-4458-4480-959a-5524d9060d67\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"244\",\n                \"description\": \"Real Betis\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/244.png\"\n                }\n            },\n            {\n                \"id\": \"636ab078-b4d8-42bc-8d39-07dd8dcb4bd5\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"94\",\n                \"description\": \"Valencia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/94.png\"\n                }\n            },\n            {\n                \"id\": \"7a84d2f7-a640-43e6-966b-a0e865ee01a3\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"102\",\n                \"description\": \"Villarreal\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/102.png\"\n                }\n            },\n            {\n                \"id\": \"7c78a738-9ac3-4d86-b959-68727e4d7f20\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"4138\",\n                \"description\": \"Audax Italiano\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4138.png\"\n                }\n            },\n            {\n                \"id\": \"4f63ec86-e7f5-4326-b332-13c40983b3fd\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2678\",\n                \"description\": \"Cobreloa\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2678.png\"\n                }\n            },\n            {\n                \"id\": \"6913fb5b-b46e-43ae-b21a-485327d68207\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"4133\",\n                \"description\": \"Cobresal\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4133.png\"\n                }\n            },\n            {\n                \"id\": \"6afa3018-6b8b-4671-ad84-f1fce1b7a45c\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2688\",\n                \"description\": \"Colo Colo\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2688.png\"\n                }\n            },\n            {\n                \"id\": \"b87b428a-ff0f-41a9-b6c2-3110e8930334\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"10139\",\n                \"description\": \"Copiapó\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10139.png\"\n                }\n            },\n            {\n                \"id\": \"d060d1ad-8bc0-42ae-96d8-3f41ffd04726\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"8186\",\n                \"description\": \"Coquimbo Unido\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/8186.png\"\n                }\n            },\n            {\n                \"id\": \"c8a4ed8c-b1f4-449e-b755-996bde9c0e70\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"1068\",\n                \"description\": \"Atlético Madrid\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/1068.png\"\n                }\n            },\n            {\n                \"id\": \"ce430e8f-d3ba-4b51-a599-fee3295d49e2\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"83\",\n                \"description\": \"Barcelona\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/83.png\"\n                }\n            },\n            {\n                \"id\": \"1fafe2c3-fcd6-48e4-a8e3-929db98c0d9f\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"6997\",\n                \"description\": \"Brest\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6997.png\"\n                }\n            },\n            {\n                \"id\": \"87fd56fd-f61e-496a-959f-124d7bc30eb4\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"9812\",\n                \"description\": \"Girona\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9812.png\"\n                }\n            },\n            {\n                \"id\": \"b1c0469b-8596-4535-95d4-61c20f3cbdfe\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"166\",\n                \"description\": \"Lille\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/166.png\"\n                }\n            },\n            {\n                \"id\": \"bb909bee-7322-4bec-8f62-f63155467791\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"364\",\n                \"description\": \"Liverpool\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/364.png\"\n                }\n            },\n            {\n                \"id\": \"c161134a-ce97-4021-a130-9995d3b26978\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"160\",\n                \"description\": \"Paris Saint-Germain\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/160.png\"\n                }\n            },\n            {\n                \"id\": \"d5832d04-a29b-4361-9421-0f27386c8af5\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"10142\",\n                \"description\": \"Deportes Iquique\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10142.png\"\n                }\n            },\n            {\n                \"id\": \"97cef699-eb04-476e-b89f-6e293ab8b1dd\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"4129\",\n                \"description\": \"Everton CD\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4129.png\"\n                }\n            },\n            {\n                \"id\": \"744870f1-e254-4574-bd86-10072051f670\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"4134\",\n                \"description\": \"Huachipato\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4134.png\"\n                }\n            },\n            {\n                \"id\": \"dd8fab7d-d21f-42e7-8705-03fd4c728db6\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"227\",\n                \"description\": \"América\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/227.png\"\n                }\n            },\n            {\n                \"id\": \"7ffc035e-4335-487c-9dff-b5da7fb76d50\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"15720\",\n                \"description\": \"Atlético de San Luis\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/15720.png\"\n                }\n            },\n            {\n                \"id\": \"272c519b-1f89-44e3-999a-142d9c4e487e\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"6072\",\n                \"description\": \"O`Higgins\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6072.png\"\n                }\n            },\n            {\n                \"id\": \"3b1859ab-0be6-422e-9730-7091df5b3b3d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"4422\",\n                \"description\": \"Palestino\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4422.png\"\n                }\n            },\n            {\n                \"id\": \"3f36596b-76b1-4124-8b86-aaf1ec829c76\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"885\",\n                \"description\": \"Universidad Católica\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/885.png\"\n                }\n            },\n            {\n                \"id\": \"2b8230e4-0300-4e49-a009-c97320bc5971\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"4139\",\n                \"description\": \"Universidad de Chile\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4139.png\"\n                }\n            },\n            {\n                \"id\": \"f9989726-7583-481c-a310-eb562b69cab4\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"4132\",\n                \"description\": \"Unión Española\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4132.png\"\n                }\n            },\n            {\n                \"id\": \"37ec179f-9e18-4be9-a7c5-4c579c7bd53a\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"10144\",\n                \"description\": \"Unión La Calera\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10144.png\"\n                }\n            },\n            {\n                \"id\": \"bfadfbf4-dac4-4238-bacf-3c370942bdec\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"7427\",\n                \"description\": \"Ñublense\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/7427.png\"\n                }\n            },\n            {\n                \"id\": \"d6d6619f-f95c-4709-8522-c08020c43808\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"6418\",\n                \"description\": \"1. FC Heidenheim 1846\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6418.png\"\n                }\n            },\n            {\n                \"id\": \"42f9e882-a5f6-45eb-9e82-d632ffd3f013\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"598\",\n                \"description\": \"1. FC Union Berlin\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/598.png\"\n                }\n            },\n            {\n                \"id\": \"dc4a5e4a-1599-4444-bb6e-e212395c099d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"131\",\n                \"description\": \"Bayer Leverkusen\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/131.png\"\n                }\n            },\n            {\n                \"id\": \"2ca5b6aa-30e3-44d5-ad18-20fbb7b9613a\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"268\",\n                \"description\": \"Borussia Monchengladbach\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/268.png\"\n                }\n            },\n            {\n                \"id\": \"34d106a2-47c8-4ad5-b160-4ccfbe2891b7\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"125\",\n                \"description\": \"Eintracht Frankfurt\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/125.png\"\n                }\n            },\n            {\n                \"id\": \"870708cd-f57b-4978-bf38-de433c977084\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"3841\",\n                \"description\": \"FC Augsburg\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3841.png\"\n                }\n            },\n            {\n                \"id\": \"a5eb3f77-63c5-4a18-b52b-c5ce25e59970\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"122\",\n                \"description\": \"FC Cologne\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/122.png\"\n                }\n            },\n            {\n                \"id\": \"52254c2a-2f13-449e-9372-e4d901da17a6\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2950\",\n                \"description\": \"Mainz\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2950.png\"\n                }\n            },\n            {\n                \"id\": \"10e34125-acce-4860-ba0a-f278338f639c\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"126\",\n                \"description\": \"SC Freiburg\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/126.png\"\n                }\n            },\n            {\n                \"id\": \"20c96702-fcb4-47cc-aad0-38012d246487\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"3812\",\n                \"description\": \"SV Darmstadt 98\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3812.png\"\n                }\n            },\n            {\n                \"id\": \"e58cbf80-9957-4e54-81a9-ed0f4f4276c8\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"7911\",\n                \"description\": \"TSG Hoffenheim\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/7911.png\"\n                }\n            },\n            {\n                \"id\": \"3a9d6470-199c-4dec-a6e3-54f0de544b8d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"121\",\n                \"description\": \"VfL Bochum\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/121.png\"\n                }\n            },\n            {\n                \"id\": \"dffad294-3d4d-4ad6-a656-98fbad7ec30b\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"138\",\n                \"description\": \"VfL Wolfsburg\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/138.png\"\n                }\n            },\n            {\n                \"id\": \"2007fbdb-6e73-4096-899d-d8841e8ec5d6\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"137\",\n                \"description\": \"Werder Bremen\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/137.png\"\n                }\n            },\n            {\n                \"id\": \"ca161347-3e0c-492e-9f17-1c073b6061ba\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"216\",\n                \"description\": \"Atlas\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/216.png\"\n                }\n            },\n            {\n                \"id\": \"64cffdef-0afc-43f4-8ed8-419b84d60f76\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"218\",\n                \"description\": \"Cruz Azul\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/218.png\"\n                }\n            },\n            {\n                \"id\": \"2b95ccff-5a26-4111-8c1e-ff6099843971\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"17851\",\n                \"description\": \"FC Juarez\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/17851.png\"\n                }\n            },\n            {\n                \"id\": \"aece61f8-8d9c-4945-a6b5-4cdf282aa894\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"228\",\n                \"description\": \"León\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/228.png\"\n                }\n            },\n            {\n                \"id\": \"e1866ceb-7a2f-4f4e-b24e-a63c5c694a78\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"20702\",\n                \"description\": \"Mazatlán FC\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/20702.png\"\n                }\n            },\n            {\n                \"id\": \"b5ef9a15-1004-4dd9-90b8-88cb0e7aaf82\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"220\",\n                \"description\": \"Monterrey\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/220.png\"\n                }\n            },\n            {\n                \"id\": \"7ba9e52d-3f4f-4d9f-9605-f6183f4f7d25\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"229\",\n                \"description\": \"Necaxa\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/229.png\"\n                }\n            },\n            {\n                \"id\": \"ca419376-835d-4b54-b898-cf3318fe8898\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"234\",\n                \"description\": \"Pachuca\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/234.png\"\n                }\n            },\n            {\n                \"id\": \"a5d1c8f3-eba4-41bc-b7d5-ef27caedfd03\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"231\",\n                \"description\": \"Puebla\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/231.png\"\n                }\n            },\n            {\n                \"id\": \"f26f27c0-c9c2-4f06-ba0c-2519a44fdc04\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"233\",\n                \"description\": \"Pumas UNAM\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/233.png\"\n                }\n            },\n            {\n                \"id\": \"0502a8d5-5f92-4420-8ee5-8f4e6f6921c4\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"222\",\n                \"description\": \"Querétaro\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/222.png\"\n                }\n            },\n            {\n                \"id\": \"1311321f-4eb8-42dc-a8ed-9996448a6f7f\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"225\",\n                \"description\": \"Santos\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/225.png\"\n                }\n            },\n            {\n                \"id\": \"7daf77b1-2478-4473-9f6f-b0b8dd4ee951\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"232\",\n                \"description\": \"Tigres UANL\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/232.png\"\n                }\n            },\n            {\n                \"id\": \"4e477564-ed85-4d89-a9d8-66a8341d8730\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"10125\",\n                \"description\": \"Tijuana\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10125.png\"\n                }\n            },\n            {\n                \"id\": \"daae1667-895f-4350-8393-0fb04ab0e47e\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"223\",\n                \"description\": \"Toluca\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/223.png\"\n                }\n            },\n            {\n                \"id\": \"e7b40fa0-ff0d-4663-a468-5c3ee1abf775\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"104\",\n                \"description\": \"AS Roma\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/104.png\"\n                }\n            },\n            {\n                \"id\": \"60672e90-0105-4bf8-9dd2-04848de2cdeb\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2925\",\n                \"description\": \"Cagliari\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2925.png\"\n                }\n            },\n            {\n                \"id\": \"5d05071b-1bb4-4329-a496-6b53bd4bf759\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2574\",\n                \"description\": \"Empoli\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2574.png\"\n                }\n            },\n            {\n                \"id\": \"c88ff97e-15f2-471d-9dfe-2617ce26382a\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"109\",\n                \"description\": \"Fiorentina\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/109.png\"\n                }\n            },\n            {\n                \"id\": \"b0e4c1eb-02ee-47d0-9712-732d239737cb\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"105\",\n                \"description\": \"Atalanta\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/105.png\"\n                }\n            },\n            {\n                \"id\": \"b9e016a2-be79-44b3-9631-b7e1974fc293\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"107\",\n                \"description\": \"Bologna\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/107.png\"\n                }\n            },\n            {\n                \"id\": \"0aaeb3a2-071b-40c5-a661-e5129483b513\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"124\",\n                \"description\": \"Borussia Dortmund\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/124.png\"\n                }\n            },\n            {\n                \"id\": \"f07b9539-924e-4ad3-88d5-2837028e1926\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"382\",\n                \"description\": \"Manchester City\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/382.png\"\n                }\n            },\n            {\n                \"id\": \"34197deb-0903-4395-8739-4e97ebfa6c78\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"11420\",\n                \"description\": \"RB Leipzig\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11420.png\"\n                }\n            },\n            {\n                \"id\": \"c919ac5b-fd94-49c1-afaf-d28d9eca831f\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"134\",\n                \"description\": \"VfB Stuttgart\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/134.png\"\n                }\n            },\n            {\n                \"id\": \"3310a809-16b0-42fb-9d50-c55f18558194\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"4057\",\n                \"description\": \"Frosinone\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4057.png\"\n                }\n            },\n            {\n                \"id\": \"179fc9c7-38b0-4fe0-95b3-ac1b16bce082\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"3263\",\n                \"description\": \"Genoa\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3263.png\"\n                }\n            },\n            {\n                \"id\": \"34237a2a-a95a-44e2-a457-0ab13f3dd982\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"119\",\n                \"description\": \"Hellas Verona\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/119.png\"\n                }\n            },\n            {\n                \"id\": \"5b4efe85-cca1-48c0-9638-fef823d8bd39\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"112\",\n                \"description\": \"Lazio\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/112.png\"\n                }\n            },\n            {\n                \"id\": \"51c03b59-5a98-4cfa-9571-6064fd72a9ed\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"113\",\n                \"description\": \"Lecce\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/113.png\"\n                }\n            },\n            {\n                \"id\": \"a59877d0-11a5-4a66-aa82-c7c9cbbd6009\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"4007\",\n                \"description\": \"Monza\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4007.png\"\n                }\n            },\n            {\n                \"id\": \"8fe6d9bb-61d8-4a84-88c5-5ae99b98e966\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"114\",\n                \"description\": \"Napoli\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/114.png\"\n                }\n            },\n            {\n                \"id\": \"3df39f3a-ce57-4485-8b62-ce0adc35f282\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"3240\",\n                \"description\": \"Salernitana\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3240.png\"\n                }\n            },\n            {\n                \"id\": \"2420aa7b-5c0d-4f77-96de-0820acce17e8\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"3997\",\n                \"description\": \"Sassuolo\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3997.png\"\n                }\n            },\n            {\n                \"id\": \"be65f0b0-c9ac-487f-afd2-ba6758965010\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"239\",\n                \"description\": \"Torino\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/239.png\"\n                }\n            },\n            {\n                \"id\": \"6795fe2e-0e44-46ef-be89-6762d447a7f5\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"118\",\n                \"description\": \"Udinese\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/118.png\"\n                }\n            },\n            {\n                \"id\": \"69aef47e-ed3d-4b42-87c3-29db3fd58313\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2849\",\n                \"description\": \"Mali\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mli.png\"\n                }\n            },\n            {\n                \"id\": \"e3147518-5e91-4251-af71-279b3827aff0\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"3458\",\n                \"description\": \"Athletico-PR\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3458.png\"\n                }\n            },\n            {\n                \"id\": \"c0d21b50-f585-4631-b0eb-e9540eadf9b9\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"10357\",\n                \"description\": \"Atlético-GO\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10357.png\"\n                }\n            },\n            {\n                \"id\": \"a651f252-443d-4ef2-84be-6c3546635d9e\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"7632\",\n                \"description\": \"Atlético-MG\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/7632.png\"\n                }\n            },\n            {\n                \"id\": \"a2dab197-7fff-49a7-8987-8d417b4b5792\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"9967\",\n                \"description\": \"Bahia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9967.png\"\n                }\n            },\n            {\n                \"id\": \"ce20466b-b9b8-45c1-a608-e60c15ade8ff\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"6086\",\n                \"description\": \"Botafogo\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6086.png\"\n                }\n            },\n            {\n                \"id\": \"cb5d6a17-fba1-4afe-9f38-64247f532248\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"874\",\n                \"description\": \"Corinthians\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/874.png\"\n                }\n            },\n            {\n                \"id\": \"a5b6cc38-e2a5-4559-a3d2-bff880b0b9d9\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"9971\",\n                \"description\": \"Criciúma\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9971.png\"\n                }\n            },\n            {\n                \"id\": \"c1c538f8-95df-4797-a6a9-0382c37a47ed\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2022\",\n                \"description\": \"Cruzeiro\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2022.png\"\n                }\n            },\n            {\n                \"id\": \"b86589b4-41d7-4a61-90de-7360397c9573\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"17313\",\n                \"description\": \"Cuiabá\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/17313.png\"\n                }\n            },\n            {\n                \"id\": \"e2ac9a18-0c0c-422a-a62c-95fa91191c2d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"819\",\n                \"description\": \"Flamengo\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/819.png\"\n                }\n            },\n            {\n                \"id\": \"6d80140e-3dec-4ae8-8f86-2a3db6732214\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"3445\",\n                \"description\": \"Fluminense\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3445.png\"\n                }\n            },\n            {\n                \"id\": \"19d9afe1-f36f-47a0-869e-433963b0b72e\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"6272\",\n                \"description\": \"Fortaleza\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6272.png\"\n                }\n            },\n            {\n                \"id\": \"00b04ae1-9489-42af-825c-805785c5ea6b\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"6273\",\n                \"description\": \"Grêmio\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6273.png\"\n                }\n            },\n            {\n                \"id\": \"08b0f99d-7b45-4a7f-b599-2eb4d2ad61aa\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"1936\",\n                \"description\": \"Internacional\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/1936.png\"\n                }\n            },\n            {\n                \"id\": \"7ed31bc2-ba56-4d6d-8cd2-65a11fa21e58\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"6270\",\n                \"description\": \"Juventude\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6270.png\"\n                }\n            },\n            {\n                \"id\": \"41b036c8-0d2a-4239-b434-9cd5e1b41a3b\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2029\",\n                \"description\": \"Palmeiras\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2029.png\"\n                }\n            },\n            {\n                \"id\": \"79a40c83-870b-4e79-8b80-2efb3351deaf\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"6079\",\n                \"description\": \"Red Bull Bragantino\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6079.png\"\n                }\n            },\n            {\n                \"id\": \"4997f32d-72b4-4d26-9cfa-d5e7c7d04520\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2026\",\n                \"description\": \"São Paulo\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2026.png\"\n                }\n            },\n            {\n                \"id\": \"81854f81-d62d-44d1-aba2-cc8950d978cf\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"3454\",\n                \"description\": \"Vasco da Gama\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3454.png\"\n                }\n            },\n            {\n                \"id\": \"29e3bea3-68f8-41d5-b03e-d8763f193be1\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"3457\",\n                \"description\": \"Vitória\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3457.png\"\n                }\n            },\n            {\n                \"id\": \"7014b07f-88ba-4bc6-93bb-897f8d72ee5f\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"3\",\n                \"description\": \"Argentinos Juniors\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3.png\"\n                }\n            },\n            {\n                \"id\": \"76e0592a-4347-4b17-abc5-334ef5c24f5f\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"9785\",\n                \"description\": \"Atlético Tucumán\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9785.png\"\n                }\n            },\n            {\n                \"id\": \"2874a98c-4957-4fc2-a78b-35a69c7fa390\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"235\",\n                \"description\": \"Banfield\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/235.png\"\n                }\n            },\n            {\n                \"id\": \"eb8eb349-8cc0-4e50-9f26-7ecf62a0848b\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"10060\",\n                \"description\": \"Barracas Central\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10060.png\"\n                }\n            },\n            {\n                \"id\": \"3a456c5e-6fce-458c-a825-2cc58708016d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"4\",\n                \"description\": \"Belgrano (Córdoba)\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4.png\"\n                }\n            },\n            {\n                \"id\": \"3d2f325d-49a7-4dde-aeed-e4a03463f182\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"5\",\n                \"description\": \"Boca Juniors\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5.png\"\n                }\n            },\n            {\n                \"id\": \"ed0a063b-ab57-4fb8-8627-e7c0c1d34ac8\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"11989\",\n                \"description\": \"Central Córdoba (Santiago del Estero)\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11989.png\"\n                }\n            },\n            {\n                \"id\": \"6f6bfae6-e582-4893-aac8-439428de72bf\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"8950\",\n                \"description\": \"Defensa y Justicia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/8950.png\"\n                }\n            },\n            {\n                \"id\": \"f5d2a5da-337b-4be2-a1df-39702f63b5f1\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"17702\",\n                \"description\": \"Deportivo Riestra\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/17702.png\"\n                }\n            },\n            {\n                \"id\": \"f2ecc9ca-0ba4-429b-9614-b96d573c1e59\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"8\",\n                \"description\": \"Estudiantes de La Plata\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/8.png\"\n                }\n            },\n            {\n                \"id\": \"0b0b2f2b-9b60-4510-8a02-ea9d43c624b3\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"9\",\n                \"description\": \"Gimnasia La Plata\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9.png\"\n                }\n            },\n            {\n                \"id\": \"d9bccdef-3da0-45b5-9157-1316ab2692c7\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"6756\",\n                \"description\": \"Godoy Cruz Antonio Tomba\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6756.png\"\n                }\n            },\n            {\n                \"id\": \"aede3158-05f2-4ad2-ac78-455e7a3ff4f3\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"10\",\n                \"description\": \"Huracán\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10.png\"\n                }\n            },\n            {\n                \"id\": \"0b662faf-db62-480d-89f3-90f6c0b4d7e8\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"11\",\n                \"description\": \"Independiente\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11.png\"\n                }\n            },\n            {\n                \"id\": \"5b5cb785-a375-4c26-b564-d3a7c3010838\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"9744\",\n                \"description\": \"Independiente Rivadavia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9744.png\"\n                }\n            },\n            {\n                \"id\": \"e0655e81-30a6-4cef-abff-d05275752beb\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2975\",\n                \"description\": \"Instituto (Córdoba)\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2975.png\"\n                }\n            },\n            {\n                \"id\": \"ad4b8b86-9b7a-4104-9a22-d80ba6bd8767\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"12\",\n                \"description\": \"Lanús\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/12.png\"\n                }\n            },\n            {\n                \"id\": \"0777f8ba-6b58-4e6e-b3d3-c1c4748fca5e\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"14\",\n                \"description\": \"Newell`s Old Boys\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/14.png\"\n                }\n            },\n            {\n                \"id\": \"ba4bddaa-7136-48cd-a584-e49e5330ab57\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"111\",\n                \"description\": \"Juventus\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/111.png\"\n                }\n            },\n            {\n                \"id\": \"ffbdc08c-0791-4b24-ac9c-a8c7b97a2841\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"7764\",\n                \"description\": \"Platense\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/7764.png\"\n                }\n            },\n            {\n                \"id\": \"cc706042-d0de-49a4-85a6-929f832b0895\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"15\",\n                \"description\": \"Racing Club\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/15.png\"\n                }\n            },\n            {\n                \"id\": \"18b2a32b-bb6d-4963-9571-64014567d4fb\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"16\",\n                \"description\": \"River Plate\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/16.png\"\n                }\n            },\n            {\n                \"id\": \"6ad8af44-c82c-4a97-b370-9c908c4d6cf4\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"17\",\n                \"description\": \"Rosario Central\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/17.png\"\n                }\n            },\n            {\n                \"id\": \"614245d7-1b29-40f6-8f98-0b6cf99bc22f\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"18\",\n                \"description\": \"San Lorenzo\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/18.png\"\n                }\n            },\n            {\n                \"id\": \"298b8c6e-6685-4cf6-bc28-c2e9e3f772c0\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"10158\",\n                \"description\": \"Sarmiento (Junín)\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10158.png\"\n                }\n            },\n            {\n                \"id\": \"9062ee82-da89-4ab8-88ad-382747553089\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"19\",\n                \"description\": \"Talleres (Córdoba)\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/19.png\"\n                }\n            },\n            {\n                \"id\": \"a6e5b3c6-706e-4fd4-9b89-6552562f463d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"7767\",\n                \"description\": \"Tigre\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/7767.png\"\n                }\n            },\n            {\n                \"id\": \"0c256711-9e78-41af-b2de-5ec053b2c77f\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"20\",\n                \"description\": \"Unión (Santa Fe)\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/20.png\"\n                }\n            },\n            {\n                \"id\": \"1020a9a7-25c9-4a20-b1ef-653517ab1a3e\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"21\",\n                \"description\": \"Vélez Sarsfield\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/21.png\"\n                }\n            },\n            {\n                \"id\": \"4ef5da7c-1c96-427c-a808-2928d5e09387\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"9999\",\n                \"description\": \"Boston River\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9999.png\"\n                }\n            },\n            {\n                \"id\": \"7340b071-34e7-4d3d-84b5-b4914189e05c\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"5490\",\n                \"description\": \"Cerro\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5490.png\"\n                }\n            },\n            {\n                \"id\": \"ff847103-d4cb-470c-bcf8-15f19b6eb267\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"9902\",\n                \"description\": \"Cerro Largo\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9902.png\"\n                }\n            },\n            {\n                \"id\": \"6ae7ed2a-ade5-40ad-b240-dc90d639f8b4\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"4817\",\n                \"description\": \"Danubio\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4817.png\"\n                }\n            },\n            {\n                \"id\": \"144490f2-97ff-4306-9ff8-bd7fd034425c\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"1007\",\n                \"description\": \"Defensor Sporting\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/1007.png\"\n                }\n            },\n            {\n                \"id\": \"d7da7551-49d9-465f-b7b9-9c0fdea7d7f4\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"10000\",\n                \"description\": \"Deportivo Maldonado\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10000.png\"\n                }\n            },\n            {\n                \"id\": \"1e62a9d2-a038-4dcc-b86d-59ecb046b552\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2689\",\n                \"description\": \"Fénix \",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2689.png\"\n                }\n            },\n            {\n                \"id\": \"de71fdf9-622a-4720-8bc2-1db90a135970\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"5492\",\n                \"description\": \"Liverpool\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5492.png\"\n                }\n            },\n            {\n                \"id\": \"72bc2875-2e81-4e04-bafc-f4745c185703\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"5493\",\n                \"description\": \"Miramar\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5493.png\"\n                }\n            },\n            {\n                \"id\": \"63df4666-7d08-4ad5-93dd-234bffc1a8e7\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2684\",\n                \"description\": \"Nacional\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2684.png\"\n                }\n            },\n            {\n                \"id\": \"7e361c84-a026-40aa-8f1e-c097e7f82d3d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"6866\",\n                \"description\": \"Progreso\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6866.png\"\n                }\n            },\n            {\n                \"id\": \"063036d3-236d-4f8b-8873-b96b9f265734\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"9903\",\n                \"description\": \"Racing\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9903.png\"\n                }\n            },\n            {\n                \"id\": \"62377013-c95e-4f8e-8214-0826f5b42fc0\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"5496\",\n                \"description\": \"Rampla Juniors\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5496.png\"\n                }\n            },\n            {\n                \"id\": \"3259fdcc-b11d-46a6-8172-8f42c7739044\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"5498\",\n                \"description\": \"River Plate\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5498.png\"\n                }\n            },\n            {\n                \"id\": \"be13b1ed-4a74-4a4f-b708-31d361b56471\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"5501\",\n                \"description\": \"Wanderers\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5501.png\"\n                }\n            },\n            {\n                \"id\": \"8cd20108-9af5-4f0e-b7b9-1c7efb5baa07\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"585\",\n                \"description\": \"Albania\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/alb.png\"\n                }\n            },\n            {\n                \"id\": \"782c9957-cdc1-4de3-ac83-ecd33e351307\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"474\",\n                \"description\": \"Austria\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aut.png\"\n                }\n            },\n            {\n                \"id\": \"cf08b52c-25bb-496b-beee-c09886593721\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"459\",\n                \"description\": \"Bélgica\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bel.png\"\n                }\n            },\n            {\n                \"id\": \"d4c883db-6ded-4ab3-af67-35ec30a85cf7\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"477\",\n                \"description\": \"Croacia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cro.png\"\n                }\n            },\n            {\n                \"id\": \"19bc6e13-d059-43a1-8adb-4781851f5de4\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"450\",\n                \"description\": \"República checa\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cze.png\"\n                }\n            },\n            {\n                \"id\": \"b8363b81-3b2e-454c-b873-1a27100ea52b\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"479\",\n                \"description\": \"Dinamarca\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/den.png\"\n                }\n            },\n            {\n                \"id\": \"eff32061-1077-465c-af39-1eb6f3a2ede9\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"448\",\n                \"description\": \"Inglaterra\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/eng.png\"\n                }\n            },\n            {\n                \"id\": \"74028b95-7002-4f9a-a7d2-cf0780621258\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"478\",\n                \"description\": \"Francia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fra.png\"\n                }\n            },\n            {\n                \"id\": \"a9f2c5be-a616-4ec1-ac50-fb50b35cdbcb\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"481\",\n                \"description\": \"Alemania\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ger.png\"\n                }\n            },\n            {\n                \"id\": \"88ba42ca-ee03-4ab3-a631-b270bd8b238b\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"480\",\n                \"description\": \"Hungría\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/hun.png\"\n                }\n            },\n            {\n                \"id\": \"005b0598-c5a7-4038-9cc6-b4f7eef5c5ca\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"162\",\n                \"description\": \"Italia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ita.png\"\n                }\n            },\n            {\n                \"id\": \"8610f144-74a3-4b6d-8f56-074910e4f44c\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"449\",\n                \"description\": \"Holanda\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ned.png\"\n                }\n            },\n            {\n                \"id\": \"452c9497-160b-4067-8c1e-e43953b07e5a\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"482\",\n                \"description\": \"Portugal\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/por.png\"\n                }\n            },\n            {\n                \"id\": \"abd00d4b-d954-4edb-a62c-b7e36b72a645\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"473\",\n                \"description\": \"Rumanía\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/rom.png\"\n                }\n            },\n            {\n                \"id\": \"203a28ce-cf49-48a1-80e2-7632d6842b9b\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"580\",\n                \"description\": \"Escocia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sco.png\"\n                }\n            },\n            {\n                \"id\": \"4a4a11ce-8041-46a6-852b-581d7fce1714\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"6757\",\n                \"description\": \"Serbia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sba.png\"\n                }\n            },\n            {\n                \"id\": \"337e9ab9-7c10-43fa-bdd2-c0424f486730\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"207\",\n                \"description\": \"Chile\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/chi.png\"\n                }\n            },\n            {\n                \"id\": \"e2e3fd85-58f0-40bf-a187-8dc6b5d15200\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"468\",\n                \"description\": \"Eslovaquía\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/svk.png\"\n                }\n            },\n            {\n                \"id\": \"c3ffd993-58fb-4612-b918-b445ac8549eb\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"472\",\n                \"description\": \"Eslovenia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/svn.png\"\n                }\n            },\n            {\n                \"id\": \"8d9cabe1-b294-4f45-9168-9df5c1f4d443\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"164\",\n                \"description\": \"España\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/esp.png\"\n                }\n            },\n            {\n                \"id\": \"5bf103b0-625d-4b7a-bfe5-c2287c52abb8\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"475\",\n                \"description\": \"Suiza\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sui.png\"\n                }\n            },\n            {\n                \"id\": \"4ddb378a-618a-4146-b175-a4f6126e3661\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"465\",\n                \"description\": \"Turquía\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/tur.png\"\n                }\n            },\n            {\n                \"id\": \"9b42c289-c020-4386-aaaf-d6d25b397288\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"587\",\n                \"description\": \"Andorra\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/and.png\"\n                }\n            },\n            {\n                \"id\": \"96cf608e-09d9-448c-8612-6c85ef741566\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"579\",\n                \"description\": \"Armenia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fifa.armenia.png\"\n                }\n            },\n            {\n                \"id\": \"361956e3-c393-4f85-b0e8-491592892bb1\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"581\",\n                \"description\": \"Azerbaiyán\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aze.png\"\n                }\n            },\n            {\n                \"id\": \"cd39fc0a-1730-4898-9c03-39a6a46e04fc\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"583\",\n                \"description\": \"Bielorrusia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/blr.png\"\n                }\n            },\n            {\n                \"id\": \"daf0cf18-414c-46bd-9fac-17035f2bef83\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"452\",\n                \"description\": \"Bosnia-herzegovina\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bih.png\"\n                }\n            },\n            {\n                \"id\": \"caf1c407-33b1-4cbd-bc35-b4b6d8928710\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"462\",\n                \"description\": \"Bulgaria\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bul.png\"\n                }\n            },\n            {\n                \"id\": \"95e995bc-38ee-4711-86fa-2f74bc6fadf9\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"445\",\n                \"description\": \"Chipre\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cyp.png\"\n                }\n            },\n            {\n                \"id\": \"0dd6659e-bd92-4b69-aa12-21ff6f2e662f\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"444\",\n                \"description\": \"Estonia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/est.png\"\n                }\n            },\n            {\n                \"id\": \"e00d55b3-1e2e-41d1-b6f8-8ac49bd07f19\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"447\",\n                \"description\": \"Islas feroe\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fro.png\"\n                }\n            },\n            {\n                \"id\": \"8d7652a4-1e1f-4e54-a939-c14ce24e465f\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"458\",\n                \"description\": \"Finlandia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fin.png\"\n                }\n            },\n            {\n                \"id\": \"d0912621-8853-4f8b-aab9-bd67a5c8e544\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"584\",\n                \"description\": \"Georgia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/geo.png\"\n                }\n            },\n            {\n                \"id\": \"777d3065-5ff2-45a7-8bf7-bddff06195c0\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"16721\",\n                \"description\": \"Gibraltar\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/16721.png\"\n                }\n            },\n            {\n                \"id\": \"51fc5da1-369b-40c4-a6aa-a911c17b04a0\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"455\",\n                \"description\": \"Grecia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/gre.png\"\n                }\n            },\n            {\n                \"id\": \"a40b1555-8ea5-4786-8c05-df4ae7b7622e\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"470\",\n                \"description\": \"Islandia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/isl.png\"\n                }\n            },\n            {\n                \"id\": \"ef924732-b56b-4db9-9d80-0526e581971c\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"461\",\n                \"description\": \"Israel\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/isr.png\"\n                }\n            },\n            {\n                \"id\": \"3d89c667-d38d-4d72-9af6-85e6ab9c5fbe\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2619\",\n                \"description\": \"Kazajstán\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/kaz.png\"\n                }\n            },\n            {\n                \"id\": \"c35cbb36-86c0-4508-b788-032c9520fc8b\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"18272\",\n                \"description\": \"Kosovo\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/18272.png\"\n                }\n            },\n            {\n                \"id\": \"8dac7b76-3882-4fde-a38e-eeeaec30fd65\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"456\",\n                \"description\": \"Letonia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lva.png\"\n                }\n            },\n            {\n                \"id\": \"7ddc00b8-5935-4f72-b39b-8f8453035bde\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"589\",\n                \"description\": \"Liechtenstein\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lie.png\"\n                }\n            },\n            {\n                \"id\": \"370fcb42-949c-4400-9055-443330da0772\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"460\",\n                \"description\": \"Lituania\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ltu.png\"\n                }\n            },\n            {\n                \"id\": \"59379f24-e8fd-4e3e-ae3e-b53818dbc189\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"582\",\n                \"description\": \"Luxemburgo\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lux.png\"\n                }\n            },\n            {\n                \"id\": \"0d80a4b2-b21d-450e-ae79-5b69f0041882\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"453\",\n                \"description\": \"Malta\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mlt.png\"\n                }\n            },\n            {\n                \"id\": \"6f088596-ec15-4c5f-a5bb-67a54657ada6\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"483\",\n                \"description\": \"Moldavia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mda.png\"\n                }\n            },\n            {\n                \"id\": \"ea49c96a-deac-4484-84c0-0fbfc69f81f7\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"6775\",\n                \"description\": \"Montenegro\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mtg.png\"\n                }\n            },\n            {\n                \"id\": \"309c797f-6c92-40b2-b5f2-679202eed720\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"463\",\n                \"description\": \"Macedonia del norte\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mkd.png\"\n                }\n            },\n            {\n                \"id\": \"1dc0fc97-ef52-4d79-afa9-dc6b6bf3b292\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"586\",\n                \"description\": \"Ireland del norte\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nir.png\"\n                }\n            },\n            {\n                \"id\": \"36c0d7a8-503b-43f5-b270-1c62dc85fdbf\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"464\",\n                \"description\": \"Noruega\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nor.png\"\n                }\n            },\n            {\n                \"id\": \"9a8d1895-66f6-413f-aeca-df8c1427ccd1\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"471\",\n                \"description\": \"Polonia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/pol.png\"\n                }\n            },\n            {\n                \"id\": \"490a3e59-d55c-4cbb-ae1c-f0e89f260f1d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"476\",\n                \"description\": \"Irlanda\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/irl.png\"\n                }\n            },\n            {\n                \"id\": \"6ac19be7-44be-45c2-a365-9e50bb04434f\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"588\",\n                \"description\": \"San marino\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/smr.png\"\n                }\n            },\n            {\n                \"id\": \"c664ad48-63e6-4c5d-8fa7-7359061c0e6a\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"466\",\n                \"description\": \"Suecia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/swe.png\"\n                }\n            },\n            {\n                \"id\": \"07784531-62d8-42e8-8bd0-4fad77be0bdb\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"457\",\n                \"description\": \"Ucrania\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ukr.png\"\n                }\n            },\n            {\n                \"id\": \"50aeeb90-7484-4c26-a268-e91b9deff7a1\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"578\",\n                \"description\": \"Gales\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/wal.png\"\n                }\n            },\n            {\n                \"id\": \"91333c70-a546-466d-b6c7-d83640e67675\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"454\",\n                \"description\": \"Rusia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/rus.png\"\n                }\n            },\n            {\n                \"id\": \"0a47a857-c9b5-49b3-8604-aa3addd13b8c\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"202\",\n                \"description\": \"Argentina\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/arg.png\"\n                }\n            },\n            {\n                \"id\": \"5cd5c342-c5e5-428f-b94c-85bf92a9613c\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"204\",\n                \"description\": \"Bolivia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bol.png\"\n                }\n            },\n            {\n                \"id\": \"3414f4de-b780-43b4-b4d2-489a8feab176\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"205\",\n                \"description\": \"Brasil\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bra.png\"\n                }\n            },\n            {\n                \"id\": \"ae57257a-6083-40e1-94d6-786e30c95950\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"206\",\n                \"description\": \"Canadá\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/can.png\"\n                }\n            },\n            {\n                \"id\": \"a49d9a73-efd3-46e3-8150-3c3fd54f2ad1\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"208\",\n                \"description\": \"Colombia\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/col.png\"\n                }\n            },\n            {\n                \"id\": \"9aa0f87c-7722-4fe8-ac64-abae12eb242f\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"214\",\n                \"description\": \"Costa rica\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/crc.png\"\n                }\n            },\n            {\n                \"id\": \"78feb88f-536a-40ff-940c-c73ec9876624\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"103\",\n                \"description\": \"AC Milan\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/103.png\"\n                }\n            },\n            {\n                \"id\": \"9ec44086-78ad-4900-9112-72d98f86a8e4\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"174\",\n                \"description\": \"AS Monaco\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/174.png\"\n                }\n            },\n            {\n                \"id\": \"e08ee200-2d89-4b32-ba8c-111732fbc501\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"359\",\n                \"description\": \"Arsenal\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/359.png\"\n                }\n            },\n            {\n                \"id\": \"5aee861f-d1bd-4004-9bf0-a044f027d935\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"131\",\n                \"description\": \"Bayer Leverkusen\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/131.png\"\n                }\n            },\n            {\n                \"id\": \"4513e759-de54-477b-83dd-9122c7008b43\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"132\",\n                \"description\": \"Bayern Munich\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/132.png\"\n                }\n            },\n            {\n                \"id\": \"378b4fe7-7328-4e09-bc1d-427939bef951\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"1929\",\n                \"description\": \"Benfica\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/1929.png\"\n                }\n            },\n            {\n                \"id\": \"39725ef4-79ed-4326-ab7c-da423f45a964\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"256\",\n                \"description\": \"Celtic\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/256.png\"\n                }\n            },\n            {\n                \"id\": \"c7a6628b-7404-4864-8bda-96e63a559e4a\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"570\",\n                \"description\": \"Club Brugge\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/570.png\"\n                }\n            },\n            {\n                \"id\": \"8d64b981-229c-46b8-b0d2-8bc0d189b75d\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"597\",\n                \"description\": \"Dinamo Zagreb\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/597.png\"\n                }\n            },\n            {\n                \"id\": \"8aa2aad9-8453-4ea0-b4df-3bff96a4f5c8\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"142\",\n                \"description\": \"Feyenoord Rotterdam\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/142.png\"\n                }\n            },\n            {\n                \"id\": \"2a4f537e-2aee-41f0-96e1-ebe412a93260\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"110\",\n                \"description\": \"Internazionale\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/110.png\"\n                }\n            },\n            {\n                \"id\": \"56999891-ffa7-433c-91a4-49861d1aa313\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"148\",\n                \"description\": \"PSV Eindhoven\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/148.png\"\n                }\n            },\n            {\n                \"id\": \"f27ddf2d-4dd9-4ffd-bdc8-0a6bdbabd2f6\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2790\",\n                \"description\": \"RB Salzburg\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2790.png\"\n                }\n            },\n            {\n                \"id\": \"8f580e54-478c-4eb4-9bd3-ce6e04e38ae6\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2290\",\n                \"description\": \"Red Star Belgrade\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2290.png\"\n                }\n            },\n            {\n                \"id\": \"1c3fb3d3-99bc-4095-ab00-0acd62606551\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"3746\",\n                \"description\": \"SK Sturm Graz\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3746.png\"\n                }\n            },\n            {\n                \"id\": \"5e4ebacb-0bde-43de-af56-b1295d2b59bd\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"493\",\n                \"description\": \"Shakhtar Donetsk\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/493.png\"\n                }\n            },\n            {\n                \"id\": \"9648c841-1449-4453-bf5c-b18585fd7b38\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"521\",\n                \"description\": \"Slovan Bratislava\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/521.png\"\n                }\n            },\n            {\n                \"id\": \"238279c8-fb09-4681-a4ac-bf0617e161e5\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"433\",\n                \"description\": \"Sparta Prague\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/433.png\"\n                }\n            },\n            {\n                \"id\": \"45b5adf9-20bd-4129-a3dd-6d174746402b\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2250\",\n                \"description\": \"Sporting CP\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2250.png\"\n                }\n            },\n            {\n                \"id\": \"99f39be8-2f8b-4535-8504-6b5cde5e8170\",\n                \"catalog\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                \"item_name\": \"2722\",\n                \"description\": \"Young Boys\",\n                \"metadata\": {\n                    \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2722.png\"\n                }\n            }\n        ],\n        \"catalog_name\": \"soccer_teams\",\n        \"description\": \"Equipos de futbol\"\n    },\n    {\n        \"id\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n        \"items\": [\n            {\n                \"id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_fixed_amount\",\n                \"description\": \"Regla monto fijo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                    \"name\": \"Monto fijo\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                    \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                    \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                }\n            },\n            {\n                \"id\": \"e8c030d5-45fa-4c6a-93d7-3ddb158a4d7d\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_weather\",\n                \"description\": \"Regla desafío invierno/verano\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/desafio_invierno.svg\",\n                    \"name\": \"Desafío invierno\",\n                    \"color\": \"#7C2582\",\n                    \"active\": false,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_invierno_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_WEATHER\",\n                    \"description\": \"Ahorra cuando llueve o la temperatura baja en tu ciudad\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_invierno_circle.svg\",\n                    \"frequency_description\": \"Ahorra {amount} cuando llueve en {description}\"\n                }\n            },\n            {\n                \"id\": \"13028acf-27df-42d7-b4f8-9861523cbada\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_manual_saving\",\n                \"description\": \"Regla ahorro manual\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_TYPE_MANUAL_SAVING\"\n                }\n            },\n            {\n                \"id\": \"90832d0a-3879-40b5-a45b-729e4a964749\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_52_weeks\",\n                \"description\": \"Regla 52 semanas\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                    \"name\": \"Desafío 52 semanas\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                    \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                    \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                }\n            },\n            {\n                \"id\": \"229011e5-fb7a-447c-bada-bb48010175ce\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_guilty_pleasure\",\n                \"description\": \"Regla placer culpable\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                    \"name\": \"Placer culpable\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                    \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                    \"frequency_description\": \"Ahorra {amount} en {description}\"\n                }\n            },\n            {\n                \"id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_fixed_salary\",\n                \"description\": \"Regla % sueldo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                    \"name\": \"Porcentaje de sueldo\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                    \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                    \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                }\n            },\n            {\n                \"id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_round_up\",\n                \"description\": \"Regla redondeo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                    \"name\": \"Redondear\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                    \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                    \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                }\n            },\n            {\n                \"id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_soccer\",\n                \"description\": \"Regla pasión futbolera\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                    \"name\": \"Pasion futbolera\",\n                    \"color\": \"#7C2582\",\n                    \"active\": false,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_SOCCER\",\n                    \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                    \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                }\n            },\n            {\n                \"id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_investment_returns\",\n                \"description\": \"Regla rendimientos de inversión\",\n                \"metadata\": {\n                    \"name\": \"Regla rendimientos de inversión\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                    \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                    \"frequency_description\": \"\"\n                }\n            },\n            {\n                \"id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_readjustments\",\n                \"description\": \"Regla reajustes\",\n                \"metadata\": {\n                    \"name\": \"Regla rendimientos de inversión\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                    \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                    \"frequency_description\": \"\"\n                }\n            },\n            {\n                \"id\": \"3665326e-994b-4706-a705-f8356d2b4a47\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_internal_transfer\",\n                \"description\": \"Regla transferencia interna\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                }\n            },\n            {\n                \"id\": \"c0690021-9223-4f9e-92ea-409ca862ecd1\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_spend_less\",\n                \"description\": \"Regla gastar menos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/gastar_menos.svg\",\n                    \"name\": \"Gastar menos\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/gastar_menos_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_SPEND_LESS\",\n                    \"description\": \"Fija un límite máximo de gasto. Si gastas menos, ahorras el sobrante.\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/gastar_menos_circle.svg\",\n                    \"frequency_description\": \"Ahorra {amount} al mes en {description}\",\n                    \"rule_spend_less_minimum_amount_by_category\": 1000\n                }\n            }\n        ],\n        \"catalog_name\": \"rule_types\",\n        \"description\": \"Tipos de reglas\"\n    },\n    {\n        \"id\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n        \"items\": [\n            {\n                \"id\": \"4ed43216-6ce2-4b1f-8335-a379cd8bd921\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"arg.1\",\n                \"description\": \"Primera División de Argentina\",\n                \"metadata\": {\n                    \"fbid\": \"arg.1\",\n                    \"teams\": [\n                        {\n                            \"id\": \"7014b07f-88ba-4bc6-93bb-897f8d72ee5f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3.png\"\n                            },\n                            \"item_name\": \"3\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Argentinos Juniors\"\n                        },\n                        {\n                            \"id\": \"76e0592a-4347-4b17-abc5-334ef5c24f5f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9785.png\"\n                            },\n                            \"item_name\": \"9785\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Atlético Tucumán\"\n                        },\n                        {\n                            \"id\": \"2874a98c-4957-4fc2-a78b-35a69c7fa390\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/235.png\"\n                            },\n                            \"item_name\": \"235\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Banfield\"\n                        },\n                        {\n                            \"id\": \"eb8eb349-8cc0-4e50-9f26-7ecf62a0848b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10060.png\"\n                            },\n                            \"item_name\": \"10060\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Barracas Central\"\n                        },\n                        {\n                            \"id\": \"3a456c5e-6fce-458c-a825-2cc58708016d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4.png\"\n                            },\n                            \"item_name\": \"4\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Belgrano (Córdoba)\"\n                        },\n                        {\n                            \"id\": \"3d2f325d-49a7-4dde-aeed-e4a03463f182\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5.png\"\n                            },\n                            \"item_name\": \"5\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Boca Juniors\"\n                        },\n                        {\n                            \"id\": \"ed0a063b-ab57-4fb8-8627-e7c0c1d34ac8\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11989.png\"\n                            },\n                            \"item_name\": \"11989\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Central Córdoba (Santiago del Estero)\"\n                        },\n                        {\n                            \"id\": \"6f6bfae6-e582-4893-aac8-439428de72bf\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/8950.png\"\n                            },\n                            \"item_name\": \"8950\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Defensa y Justicia\"\n                        },\n                        {\n                            \"id\": \"f5d2a5da-337b-4be2-a1df-39702f63b5f1\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/17702.png\"\n                            },\n                            \"item_name\": \"17702\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Deportivo Riestra\"\n                        },\n                        {\n                            \"id\": \"f2ecc9ca-0ba4-429b-9614-b96d573c1e59\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/8.png\"\n                            },\n                            \"item_name\": \"8\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Estudiantes de La Plata\"\n                        },\n                        {\n                            \"id\": \"0b0b2f2b-9b60-4510-8a02-ea9d43c624b3\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9.png\"\n                            },\n                            \"item_name\": \"9\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Gimnasia La Plata\"\n                        },\n                        {\n                            \"id\": \"d9bccdef-3da0-45b5-9157-1316ab2692c7\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6756.png\"\n                            },\n                            \"item_name\": \"6756\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Godoy Cruz Antonio Tomba\"\n                        },\n                        {\n                            \"id\": \"aede3158-05f2-4ad2-ac78-455e7a3ff4f3\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10.png\"\n                            },\n                            \"item_name\": \"10\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Huracán\"\n                        },\n                        {\n                            \"id\": \"0b662faf-db62-480d-89f3-90f6c0b4d7e8\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11.png\"\n                            },\n                            \"item_name\": \"11\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Independiente\"\n                        },\n                        {\n                            \"id\": \"5b5cb785-a375-4c26-b564-d3a7c3010838\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9744.png\"\n                            },\n                            \"item_name\": \"9744\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Independiente Rivadavia\"\n                        },\n                        {\n                            \"id\": \"e0655e81-30a6-4cef-abff-d05275752beb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2975.png\"\n                            },\n                            \"item_name\": \"2975\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Instituto (Córdoba)\"\n                        },\n                        {\n                            \"id\": \"ad4b8b86-9b7a-4104-9a22-d80ba6bd8767\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/12.png\"\n                            },\n                            \"item_name\": \"12\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Lanús\"\n                        },\n                        {\n                            \"id\": \"0777f8ba-6b58-4e6e-b3d3-c1c4748fca5e\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/14.png\"\n                            },\n                            \"item_name\": \"14\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Newell`s Old Boys\"\n                        },\n                        {\n                            \"id\": \"ffbdc08c-0791-4b24-ac9c-a8c7b97a2841\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/7764.png\"\n                            },\n                            \"item_name\": \"7764\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Platense\"\n                        },\n                        {\n                            \"id\": \"cc706042-d0de-49a4-85a6-929f832b0895\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/15.png\"\n                            },\n                            \"item_name\": \"15\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Racing Club\"\n                        },\n                        {\n                            \"id\": \"18b2a32b-bb6d-4963-9571-64014567d4fb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/16.png\"\n                            },\n                            \"item_name\": \"16\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"River Plate\"\n                        },\n                        {\n                            \"id\": \"6ad8af44-c82c-4a97-b370-9c908c4d6cf4\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/17.png\"\n                            },\n                            \"item_name\": \"17\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Rosario Central\"\n                        },\n                        {\n                            \"id\": \"614245d7-1b29-40f6-8f98-0b6cf99bc22f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/18.png\"\n                            },\n                            \"item_name\": \"18\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"San Lorenzo\"\n                        },\n                        {\n                            \"id\": \"298b8c6e-6685-4cf6-bc28-c2e9e3f772c0\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10158.png\"\n                            },\n                            \"item_name\": \"10158\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Sarmiento (Junín)\"\n                        },\n                        {\n                            \"id\": \"9062ee82-da89-4ab8-88ad-382747553089\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/19.png\"\n                            },\n                            \"item_name\": \"19\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Talleres (Córdoba)\"\n                        },\n                        {\n                            \"id\": \"a6e5b3c6-706e-4fd4-9b89-6552562f463d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/7767.png\"\n                            },\n                            \"item_name\": \"7767\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Tigre\"\n                        },\n                        {\n                            \"id\": \"0c256711-9e78-41af-b2de-5ec053b2c77f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/20.png\"\n                            },\n                            \"item_name\": \"20\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Unión (Santa Fe)\"\n                        },\n                        {\n                            \"id\": \"1020a9a7-25c9-4a20-b1ef-653517ab1a3e\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/21.png\"\n                            },\n                            \"item_name\": \"21\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Vélez Sarsfield\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/1.png\"\n                }\n            },\n            {\n                \"id\": \"a91570fc-3b18-4c00-a323-de1e38b47ef0\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"bra.1\",\n                \"description\": \"Serie A (Brasileña)\",\n                \"metadata\": {\n                    \"fbid\": \"bra.1\",\n                    \"teams\": [\n                        {\n                            \"id\": \"e3147518-5e91-4251-af71-279b3827aff0\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3458.png\"\n                            },\n                            \"item_name\": \"3458\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Athletico-PR\"\n                        },\n                        {\n                            \"id\": \"c0d21b50-f585-4631-b0eb-e9540eadf9b9\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10357.png\"\n                            },\n                            \"item_name\": \"10357\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Atlético-GO\"\n                        },\n                        {\n                            \"id\": \"a651f252-443d-4ef2-84be-6c3546635d9e\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/7632.png\"\n                            },\n                            \"item_name\": \"7632\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Atlético-MG\"\n                        },\n                        {\n                            \"id\": \"a2dab197-7fff-49a7-8987-8d417b4b5792\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9967.png\"\n                            },\n                            \"item_name\": \"9967\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bahia\"\n                        },\n                        {\n                            \"id\": \"ce20466b-b9b8-45c1-a608-e60c15ade8ff\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6086.png\"\n                            },\n                            \"item_name\": \"6086\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Botafogo\"\n                        },\n                        {\n                            \"id\": \"cb5d6a17-fba1-4afe-9f38-64247f532248\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/874.png\"\n                            },\n                            \"item_name\": \"874\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Corinthians\"\n                        },\n                        {\n                            \"id\": \"a5b6cc38-e2a5-4559-a3d2-bff880b0b9d9\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9971.png\"\n                            },\n                            \"item_name\": \"9971\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Criciúma\"\n                        },\n                        {\n                            \"id\": \"c1c538f8-95df-4797-a6a9-0382c37a47ed\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2022.png\"\n                            },\n                            \"item_name\": \"2022\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Cruzeiro\"\n                        },\n                        {\n                            \"id\": \"b86589b4-41d7-4a61-90de-7360397c9573\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/17313.png\"\n                            },\n                            \"item_name\": \"17313\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Cuiabá\"\n                        },\n                        {\n                            \"id\": \"e2ac9a18-0c0c-422a-a62c-95fa91191c2d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/819.png\"\n                            },\n                            \"item_name\": \"819\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Flamengo\"\n                        },\n                        {\n                            \"id\": \"6d80140e-3dec-4ae8-8f86-2a3db6732214\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3445.png\"\n                            },\n                            \"item_name\": \"3445\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Fluminense\"\n                        },\n                        {\n                            \"id\": \"19d9afe1-f36f-47a0-869e-433963b0b72e\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6272.png\"\n                            },\n                            \"item_name\": \"6272\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Fortaleza\"\n                        },\n                        {\n                            \"id\": \"00b04ae1-9489-42af-825c-805785c5ea6b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6273.png\"\n                            },\n                            \"item_name\": \"6273\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Grêmio\"\n                        },\n                        {\n                            \"id\": \"08b0f99d-7b45-4a7f-b599-2eb4d2ad61aa\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/1936.png\"\n                            },\n                            \"item_name\": \"1936\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Internacional\"\n                        },\n                        {\n                            \"id\": \"7ed31bc2-ba56-4d6d-8cd2-65a11fa21e58\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6270.png\"\n                            },\n                            \"item_name\": \"6270\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Juventude\"\n                        },\n                        {\n                            \"id\": \"41b036c8-0d2a-4239-b434-9cd5e1b41a3b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2029.png\"\n                            },\n                            \"item_name\": \"2029\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Palmeiras\"\n                        },\n                        {\n                            \"id\": \"79a40c83-870b-4e79-8b80-2efb3351deaf\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6079.png\"\n                            },\n                            \"item_name\": \"6079\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Red Bull Bragantino\"\n                        },\n                        {\n                            \"id\": \"4997f32d-72b4-4d26-9cfa-d5e7c7d04520\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2026.png\"\n                            },\n                            \"item_name\": \"2026\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"São Paulo\"\n                        },\n                        {\n                            \"id\": \"81854f81-d62d-44d1-aba2-cc8950d978cf\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3454.png\"\n                            },\n                            \"item_name\": \"3454\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Vasco da Gama\"\n                        },\n                        {\n                            \"id\": \"29e3bea3-68f8-41d5-b03e-d8763f193be1\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3457.png\"\n                            },\n                            \"item_name\": \"3457\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Vitória\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/85.png\"\n                }\n            },\n            {\n                \"id\": \"59d64735-c04d-4efd-a292-fd20bbbf592b\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"esp.1\",\n                \"description\": \"LaLiga (Española)\",\n                \"metadata\": {\n                    \"fbid\": \"esp.1\",\n                    \"teams\": [\n                        {\n                            \"id\": \"2e70f2ad-cfb5-4b10-825c-880e9469a7b9\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/96.png\"\n                            },\n                            \"item_name\": \"96\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Alavés\"\n                        },\n                        {\n                            \"id\": \"1a1725ad-2dde-41c5-9b90-794673d1978b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6832.png\"\n                            },\n                            \"item_name\": \"6832\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Almería\"\n                        },\n                        {\n                            \"id\": \"2a700cf9-f428-4771-b6a9-79db9fd769fd\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/93.png\"\n                            },\n                            \"item_name\": \"93\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Athletic Club\"\n                        },\n                        {\n                            \"id\": \"c8a4ed8c-b1f4-449e-b755-996bde9c0e70\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/1068.png\"\n                            },\n                            \"item_name\": \"1068\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Atlético Madrid\"\n                        },\n                        {\n                            \"id\": \"ce430e8f-d3ba-4b51-a599-fee3295d49e2\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/83.png\"\n                            },\n                            \"item_name\": \"83\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Barcelona\"\n                        },\n                        {\n                            \"id\": \"1266d21f-fff6-44cd-91b3-3183f7c5ea4d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/85.png\"\n                            },\n                            \"item_name\": \"85\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Celta Vigo\"\n                        },\n                        {\n                            \"id\": \"49a1165a-b5dc-43d2-a96e-f98d14ef641d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3842.png\"\n                            },\n                            \"item_name\": \"3842\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Cádiz\"\n                        },\n                        {\n                            \"id\": \"5b8388c2-7d1c-4ade-ad11-c854d491b9ae\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2922.png\"\n                            },\n                            \"item_name\": \"2922\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Getafe\"\n                        },\n                        {\n                            \"id\": \"87fd56fd-f61e-496a-959f-124d7bc30eb4\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9812.png\"\n                            },\n                            \"item_name\": \"9812\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Girona\"\n                        },\n                        {\n                            \"id\": \"786a3f9c-d0b6-4a41-a18e-0229f9c2fb5d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3747.png\"\n                            },\n                            \"item_name\": \"3747\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Granada\"\n                        },\n                        {\n                            \"id\": \"dba96ff9-2e83-4b18-b280-6af2123c05aa\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/98.png\"\n                            },\n                            \"item_name\": \"98\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Las Palmas\"\n                        },\n                        {\n                            \"id\": \"f995179f-b49d-42eb-8e8a-24db1ebcd158\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/84.png\"\n                            },\n                            \"item_name\": \"84\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Mallorca\"\n                        },\n                        {\n                            \"id\": \"e710df19-6933-4c69-b0de-5129baf95957\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/97.png\"\n                            },\n                            \"item_name\": \"97\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Osasuna\"\n                        },\n                        {\n                            \"id\": \"5d470ac3-ef50-4f5e-b99d-37cbd4834a38\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/101.png\"\n                            },\n                            \"item_name\": \"101\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Rayo Vallecano\"\n                        },\n                        {\n                            \"id\": \"43e6ae3b-4458-4480-959a-5524d9060d67\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/244.png\"\n                            },\n                            \"item_name\": \"244\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Real Betis\"\n                        },\n                        {\n                            \"id\": \"509b6efc-26bc-4fb6-8a19-7ad7fbf8cfab\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/86.png\"\n                            },\n                            \"item_name\": \"86\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Real Madrid\"\n                        },\n                        {\n                            \"id\": \"2d84bd2a-4db5-48cf-833f-6874ac4fb4c4\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/89.png\"\n                            },\n                            \"item_name\": \"89\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Real Sociedad\"\n                        },\n                        {\n                            \"id\": \"0329530a-6191-4778-8c64-2b330ffcf263\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/243.png\"\n                            },\n                            \"item_name\": \"243\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Sevilla\"\n                        },\n                        {\n                            \"id\": \"636ab078-b4d8-42bc-8d39-07dd8dcb4bd5\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/94.png\"\n                            },\n                            \"item_name\": \"94\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Valencia\"\n                        },\n                        {\n                            \"id\": \"7a84d2f7-a640-43e6-966b-a0e865ee01a3\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/102.png\"\n                            },\n                            \"item_name\": \"102\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Villarreal\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/15.png\"\n                }\n            },\n            {\n                \"id\": \"da446125-5702-4e9d-81dc-7ed35258a5be\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"fifa.worldq.conmebol\",\n                \"description\": \"Selecciones Conmebol\",\n                \"metadata\": {\n                    \"fbid\": \"fifa.worldq.conmebol\",\n                    \"teams\": [\n                        {\n                            \"id\": \"0a47a857-c9b5-49b3-8604-aa3addd13b8c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/arg.png\"\n                            },\n                            \"item_name\": \"202\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Argentina\"\n                        },\n                        {\n                            \"id\": \"5cd5c342-c5e5-428f-b94c-85bf92a9613c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bol.png\"\n                            },\n                            \"item_name\": \"204\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bolivia\"\n                        },\n                        {\n                            \"id\": \"3414f4de-b780-43b4-b4d2-489a8feab176\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bra.png\"\n                            },\n                            \"item_name\": \"205\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Brasil\"\n                        },\n                        {\n                            \"id\": \"337e9ab9-7c10-43fa-bdd2-c0424f486730\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/chi.png\"\n                            },\n                            \"item_name\": \"207\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Chile\"\n                        },\n                        {\n                            \"id\": \"a49d9a73-efd3-46e3-8150-3c3fd54f2ad1\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/col.png\"\n                            },\n                            \"item_name\": \"208\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Colombia\"\n                        },\n                        {\n                            \"id\": \"a08eab2e-c9a4-4c06-9794-56ec7996fa31\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ecu.png\"\n                            },\n                            \"item_name\": \"209\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Ecuador\"\n                        },\n                        {\n                            \"id\": \"2d78206b-020a-4c93-b287-901c8e4ad80a\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/par.png\"\n                            },\n                            \"item_name\": \"210\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Paraguay\"\n                        },\n                        {\n                            \"id\": \"7ab5539f-b0fd-49fe-8035-2a95d148afba\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/per.png\"\n                            },\n                            \"item_name\": \"211\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Perú\"\n                        },\n                        {\n                            \"id\": \"c0dd1fac-51ac-406f-a4d3-c43b61bdb5bd\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/uru.png\"\n                            },\n                            \"item_name\": \"212\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Uruguay\"\n                        },\n                        {\n                            \"id\": \"2ba29bab-b28a-4102-a36b-41533a6e2b68\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ven.png\"\n                            },\n                            \"item_name\": \"213\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Venezuela\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/65.png\"\n                }\n            },\n            {\n                \"id\": \"71568a86-3ef8-413d-9911-12c8beba2ded\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"uefa.euroq\",\n                \"description\": \"Selecciones UEFA\",\n                \"metadata\": {\n                    \"fbid\": \"uefa.euroq\",\n                    \"teams\": [\n                        {\n                            \"id\": \"8cd20108-9af5-4f0e-b7b9-1c7efb5baa07\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/alb.png\"\n                            },\n                            \"item_name\": \"585\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Albania\"\n                        },\n                        {\n                            \"id\": \"9b42c289-c020-4386-aaaf-d6d25b397288\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/and.png\"\n                            },\n                            \"item_name\": \"587\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Andorra\"\n                        },\n                        {\n                            \"id\": \"96cf608e-09d9-448c-8612-6c85ef741566\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fifa.armenia.png\"\n                            },\n                            \"item_name\": \"579\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Armenia\"\n                        },\n                        {\n                            \"id\": \"782c9957-cdc1-4de3-ac83-ecd33e351307\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aut.png\"\n                            },\n                            \"item_name\": \"474\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Austria\"\n                        },\n                        {\n                            \"id\": \"361956e3-c393-4f85-b0e8-491592892bb1\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aze.png\"\n                            },\n                            \"item_name\": \"581\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Azerbaiyán\"\n                        },\n                        {\n                            \"id\": \"cd39fc0a-1730-4898-9c03-39a6a46e04fc\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/blr.png\"\n                            },\n                            \"item_name\": \"583\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bielorrusia\"\n                        },\n                        {\n                            \"id\": \"cf08b52c-25bb-496b-beee-c09886593721\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bel.png\"\n                            },\n                            \"item_name\": \"459\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bélgica\"\n                        },\n                        {\n                            \"id\": \"daf0cf18-414c-46bd-9fac-17035f2bef83\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bih.png\"\n                            },\n                            \"item_name\": \"452\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bosnia-herzegovina\"\n                        },\n                        {\n                            \"id\": \"caf1c407-33b1-4cbd-bc35-b4b6d8928710\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bul.png\"\n                            },\n                            \"item_name\": \"462\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bulgaria\"\n                        },\n                        {\n                            \"id\": \"d4c883db-6ded-4ab3-af67-35ec30a85cf7\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cro.png\"\n                            },\n                            \"item_name\": \"477\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Croacia\"\n                        },\n                        {\n                            \"id\": \"95e995bc-38ee-4711-86fa-2f74bc6fadf9\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cyp.png\"\n                            },\n                            \"item_name\": \"445\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Chipre\"\n                        },\n                        {\n                            \"id\": \"19bc6e13-d059-43a1-8adb-4781851f5de4\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cze.png\"\n                            },\n                            \"item_name\": \"450\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"República checa\"\n                        },\n                        {\n                            \"id\": \"b8363b81-3b2e-454c-b873-1a27100ea52b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/den.png\"\n                            },\n                            \"item_name\": \"479\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Dinamarca\"\n                        },\n                        {\n                            \"id\": \"eff32061-1077-465c-af39-1eb6f3a2ede9\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/eng.png\"\n                            },\n                            \"item_name\": \"448\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Inglaterra\"\n                        },\n                        {\n                            \"id\": \"0dd6659e-bd92-4b69-aa12-21ff6f2e662f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/est.png\"\n                            },\n                            \"item_name\": \"444\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Estonia\"\n                        },\n                        {\n                            \"id\": \"e00d55b3-1e2e-41d1-b6f8-8ac49bd07f19\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fro.png\"\n                            },\n                            \"item_name\": \"447\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Islas feroe\"\n                        },\n                        {\n                            \"id\": \"8d7652a4-1e1f-4e54-a939-c14ce24e465f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fin.png\"\n                            },\n                            \"item_name\": \"458\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Finlandia\"\n                        },\n                        {\n                            \"id\": \"74028b95-7002-4f9a-a7d2-cf0780621258\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fra.png\"\n                            },\n                            \"item_name\": \"478\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Francia\"\n                        },\n                        {\n                            \"id\": \"d0912621-8853-4f8b-aab9-bd67a5c8e544\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/geo.png\"\n                            },\n                            \"item_name\": \"584\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Georgia\"\n                        },\n                        {\n                            \"id\": \"a9f2c5be-a616-4ec1-ac50-fb50b35cdbcb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ger.png\"\n                            },\n                            \"item_name\": \"481\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Alemania\"\n                        },\n                        {\n                            \"id\": \"777d3065-5ff2-45a7-8bf7-bddff06195c0\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/16721.png\"\n                            },\n                            \"item_name\": \"16721\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Gibraltar\"\n                        },\n                        {\n                            \"id\": \"51fc5da1-369b-40c4-a6aa-a911c17b04a0\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/gre.png\"\n                            },\n                            \"item_name\": \"455\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Grecia\"\n                        },\n                        {\n                            \"id\": \"88ba42ca-ee03-4ab3-a631-b270bd8b238b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/hun.png\"\n                            },\n                            \"item_name\": \"480\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Hungría\"\n                        },\n                        {\n                            \"id\": \"a40b1555-8ea5-4786-8c05-df4ae7b7622e\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/isl.png\"\n                            },\n                            \"item_name\": \"470\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Islandia\"\n                        },\n                        {\n                            \"id\": \"ef924732-b56b-4db9-9d80-0526e581971c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/isr.png\"\n                            },\n                            \"item_name\": \"461\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Israel\"\n                        },\n                        {\n                            \"id\": \"005b0598-c5a7-4038-9cc6-b4f7eef5c5ca\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ita.png\"\n                            },\n                            \"item_name\": \"162\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Italia\"\n                        },\n                        {\n                            \"id\": \"3d89c667-d38d-4d72-9af6-85e6ab9c5fbe\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/kaz.png\"\n                            },\n                            \"item_name\": \"2619\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Kazajstán\"\n                        },\n                        {\n                            \"id\": \"c35cbb36-86c0-4508-b788-032c9520fc8b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/18272.png\"\n                            },\n                            \"item_name\": \"18272\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Kosovo\"\n                        },\n                        {\n                            \"id\": \"8dac7b76-3882-4fde-a38e-eeeaec30fd65\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lva.png\"\n                            },\n                            \"item_name\": \"456\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Letonia\"\n                        },\n                        {\n                            \"id\": \"7ddc00b8-5935-4f72-b39b-8f8453035bde\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lie.png\"\n                            },\n                            \"item_name\": \"589\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Liechtenstein\"\n                        },\n                        {\n                            \"id\": \"370fcb42-949c-4400-9055-443330da0772\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ltu.png\"\n                            },\n                            \"item_name\": \"460\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Lituania\"\n                        },\n                        {\n                            \"id\": \"59379f24-e8fd-4e3e-ae3e-b53818dbc189\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lux.png\"\n                            },\n                            \"item_name\": \"582\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Luxemburgo\"\n                        },\n                        {\n                            \"id\": \"0d80a4b2-b21d-450e-ae79-5b69f0041882\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mlt.png\"\n                            },\n                            \"item_name\": \"453\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Malta\"\n                        },\n                        {\n                            \"id\": \"6f088596-ec15-4c5f-a5bb-67a54657ada6\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mda.png\"\n                            },\n                            \"item_name\": \"483\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Moldavia\"\n                        },\n                        {\n                            \"id\": \"ea49c96a-deac-4484-84c0-0fbfc69f81f7\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mtg.png\"\n                            },\n                            \"item_name\": \"6775\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Montenegro\"\n                        },\n                        {\n                            \"id\": \"8610f144-74a3-4b6d-8f56-074910e4f44c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ned.png\"\n                            },\n                            \"item_name\": \"449\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Holanda\"\n                        },\n                        {\n                            \"id\": \"309c797f-6c92-40b2-b5f2-679202eed720\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mkd.png\"\n                            },\n                            \"item_name\": \"463\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Macedonia del norte\"\n                        },\n                        {\n                            \"id\": \"1dc0fc97-ef52-4d79-afa9-dc6b6bf3b292\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nir.png\"\n                            },\n                            \"item_name\": \"586\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Ireland del norte\"\n                        },\n                        {\n                            \"id\": \"36c0d7a8-503b-43f5-b270-1c62dc85fdbf\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nor.png\"\n                            },\n                            \"item_name\": \"464\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Noruega\"\n                        },\n                        {\n                            \"id\": \"9a8d1895-66f6-413f-aeca-df8c1427ccd1\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/pol.png\"\n                            },\n                            \"item_name\": \"471\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Polonia\"\n                        },\n                        {\n                            \"id\": \"452c9497-160b-4067-8c1e-e43953b07e5a\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/por.png\"\n                            },\n                            \"item_name\": \"482\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Portugal\"\n                        },\n                        {\n                            \"id\": \"490a3e59-d55c-4cbb-ae1c-f0e89f260f1d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/irl.png\"\n                            },\n                            \"item_name\": \"476\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Irlanda\"\n                        },\n                        {\n                            \"id\": \"abd00d4b-d954-4edb-a62c-b7e36b72a645\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/rom.png\"\n                            },\n                            \"item_name\": \"473\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Rumanía\"\n                        },\n                        {\n                            \"id\": \"91333c70-a546-466d-b6c7-d83640e67675\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/rus.png\"\n                            },\n                            \"item_name\": \"454\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Rusia\"\n                        },\n                        {\n                            \"id\": \"6ac19be7-44be-45c2-a365-9e50bb04434f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/smr.png\"\n                            },\n                            \"item_name\": \"588\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"San marino\"\n                        },\n                        {\n                            \"id\": \"203a28ce-cf49-48a1-80e2-7632d6842b9b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sco.png\"\n                            },\n                            \"item_name\": \"580\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Escocia\"\n                        },\n                        {\n                            \"id\": \"4a4a11ce-8041-46a6-852b-581d7fce1714\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sba.png\"\n                            },\n                            \"item_name\": \"6757\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Serbia\"\n                        },\n                        {\n                            \"id\": \"e2e3fd85-58f0-40bf-a187-8dc6b5d15200\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/svk.png\"\n                            },\n                            \"item_name\": \"468\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Eslovaquía\"\n                        },\n                        {\n                            \"id\": \"c3ffd993-58fb-4612-b918-b445ac8549eb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/svn.png\"\n                            },\n                            \"item_name\": \"472\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Eslovenia\"\n                        },\n                        {\n                            \"id\": \"8d9cabe1-b294-4f45-9168-9df5c1f4d443\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/esp.png\"\n                            },\n                            \"item_name\": \"164\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"España\"\n                        },\n                        {\n                            \"id\": \"c664ad48-63e6-4c5d-8fa7-7359061c0e6a\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/swe.png\"\n                            },\n                            \"item_name\": \"466\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Suecia\"\n                        },\n                        {\n                            \"id\": \"5bf103b0-625d-4b7a-bfe5-c2287c52abb8\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sui.png\"\n                            },\n                            \"item_name\": \"475\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Suiza\"\n                        },\n                        {\n                            \"id\": \"4ddb378a-618a-4146-b175-a4f6126e3661\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/tur.png\"\n                            },\n                            \"item_name\": \"465\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Turquía\"\n                        },\n                        {\n                            \"id\": \"07784531-62d8-42e8-8bd0-4fad77be0bdb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ukr.png\"\n                            },\n                            \"item_name\": \"457\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Ucrania\"\n                        },\n                        {\n                            \"id\": \"50aeeb90-7484-4c26-a268-e91b9deff7a1\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/wal.png\"\n                            },\n                            \"item_name\": \"578\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Gales\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/56.png\"\n                }\n            },\n            {\n                \"id\": \"1a4823e7-2b52-4701-9a49-5ce6a2836c8f\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"fifa.olympics\",\n                \"description\": \"Torneo olímpico masculino\",\n                \"metadata\": {\n                    \"fbid\": \"fifa.olympics\",\n                    \"teams\": [\n                        {\n                            \"id\": \"b793cc3a-c7f1-4692-b5af-100988285308\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/arg.png\"\n                            },\n                            \"item_name\": \"18232\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Argentina Sub-23\"\n                        },\n                        {\n                            \"id\": \"346702ff-f1cd-4653-93fa-8b8260a7286c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/dom.png\"\n                            },\n                            \"item_name\": \"20651\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"República dominicana Sub-23\"\n                        },\n                        {\n                            \"id\": \"dfb6a266-5261-4990-bd5b-32b0b7660a66\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/egy.png\"\n                            },\n                            \"item_name\": \"18216\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Egipto Sub-23\"\n                        },\n                        {\n                            \"id\": \"60f1e452-667e-4276-9e7b-da7f6f056bd0\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fra.png\"\n                            },\n                            \"item_name\": \"20947\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Francia Sub-23\"\n                        },\n                        {\n                            \"id\": \"86433082-08e0-40c6-b285-46cc8a79ef0a\",\n                            \"metadata\": {\n                                \"img_url\": \"\"\n                            },\n                            \"item_name\": \"22267\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Guinea Sub-23\"\n                        },\n                        {\n                            \"id\": \"23365790-20ca-4793-85f2-43e75e69fb2c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/irq.png\"\n                            },\n                            \"item_name\": \"18227\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Iraq Sub-23\"\n                        },\n                        {\n                            \"id\": \"1daf3d98-28eb-4205-b7e1-87819546f928\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/isr.png\"\n                            },\n                            \"item_name\": \"22241\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Israel Sub-23\"\n                        },\n                        {\n                            \"id\": \"e040d8e8-d43b-4302-8e2e-f02760cfaf7e\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/jpn.png\"\n                            },\n                            \"item_name\": \"18214\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Japón Sub-23\"\n                        },\n                        {\n                            \"id\": \"d4080711-e373-4733-b315-5e434dc757a3\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mli.png\"\n                            },\n                            \"item_name\": \"22239\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Mali Sub-23\"\n                        },\n                        {\n                            \"id\": \"b6c1ffda-a547-41c3-82ce-192a3b7f10bb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mar.png\"\n                            },\n                            \"item_name\": \"21931\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Marruecos Sub-23\"\n                        },\n                        {\n                            \"id\": \"939a5ea9-76ae-4ba1-bff4-fe30d62d4319\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nzl.png\"\n                            },\n                            \"item_name\": \"18224\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Nueva zelanda Sub-23\"\n                        },\n                        {\n                            \"id\": \"ad93e50d-e743-4e72-a3bc-bf3d1d397df9\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/par.png\"\n                            },\n                            \"item_name\": \"20303\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Paraguay Sub-23\"\n                        },\n                        {\n                            \"id\": \"2223c353-4999-4972-97bc-1a831ac3838e\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/esp.png\"\n                            },\n                            \"item_name\": \"18220\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"España Sub-23\"\n                        },\n                        {\n                            \"id\": \"ae4525a9-a865-4fb4-8d0f-b86a8da2b06c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ukr.png\"\n                            },\n                            \"item_name\": \"22240\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Ucrania Sub-23\"\n                        },\n                        {\n                            \"id\": \"c040d5c2-1e3b-48dc-be7e-1e3030533b68\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/usa.png\"\n                            },\n                            \"item_name\": \"2829\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Estados unidos Sub-23\"\n                        },\n                        {\n                            \"id\": \"a5466dec-d0a4-4266-a216-acb6e1b8acf3\",\n                            \"metadata\": {\n                                \"img_url\": \"\"\n                            },\n                            \"item_name\": \"22266\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Uzbekistán Sub-23\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/71.png\"\n                }\n            },\n            {\n                \"id\": \"f651cd1d-56c6-4c1a-ad3d-17ffc224f144\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"concacaf.nations.league\",\n                \"description\": \"Selecciones Concacaf\",\n                \"metadata\": {\n                    \"fbid\": \"concacaf.nations.league\",\n                    \"teams\": [\n                        {\n                            \"id\": \"135783c8-ef8a-413e-9d86-630634c5c5b4\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aia.png\"\n                            },\n                            \"item_name\": \"8942\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Anguilla\"\n                        },\n                        {\n                            \"id\": \"5411662f-554c-4c25-93fd-7e8383fafd68\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/atg.png\"\n                            },\n                            \"item_name\": \"2638\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Antigua y barbuda\"\n                        },\n                        {\n                            \"id\": \"95aa4499-e359-4b61-a6a6-25e88ff8229d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aru.png\"\n                            },\n                            \"item_name\": \"2642\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Aruba\"\n                        },\n                        {\n                            \"id\": \"e29fe892-c8fa-4e4c-8be4-6fd84c07fb80\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bah.png\"\n                            },\n                            \"item_name\": \"2640\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bahamas\"\n                        },\n                        {\n                            \"id\": \"2e3bff2d-630a-45dc-979a-061389717dd9\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/brb.png\"\n                            },\n                            \"item_name\": \"2637\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Barbados\"\n                        },\n                        {\n                            \"id\": \"8e19d7e3-4749-40e0-bc2b-9b871102a560\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/blz.png\"\n                            },\n                            \"item_name\": \"2641\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Belice\"\n                        },\n                        {\n                            \"id\": \"3cc35cb9-55e4-43f8-8481-7a40acc857b5\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ber.png\"\n                            },\n                            \"item_name\": \"2643\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bermuda\"\n                        },\n                        {\n                            \"id\": \"22e72589-4f36-4e08-aa17-72f5a056d179\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/boe.png\"\n                            },\n                            \"item_name\": \"19314\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bonaire\"\n                        },\n                        {\n                            \"id\": \"02301f8e-b6b1-4e25-bf7a-b43af2fd788c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bvr.png\"\n                            },\n                            \"item_name\": \"2644\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Islas vírgenes británicas\"\n                        },\n                        {\n                            \"id\": \"ae57257a-6083-40e1-94d6-786e30c95950\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/can.png\"\n                            },\n                            \"item_name\": \"206\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Canadá\"\n                        },\n                        {\n                            \"id\": \"ef96d523-22a2-4efb-8997-8688befdb0dd\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cay.png\"\n                            },\n                            \"item_name\": \"2646\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Islas caimán\"\n                        },\n                        {\n                            \"id\": \"9aa0f87c-7722-4fe8-ac64-abae12eb242f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/crc.png\"\n                            },\n                            \"item_name\": \"214\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Costa rica\"\n                        },\n                        {\n                            \"id\": \"fb5ba989-a0f6-45ab-a376-204f7e228bb6\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cub.png\"\n                            },\n                            \"item_name\": \"2647\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Cuba\"\n                        },\n                        {\n                            \"id\": \"b10e0844-f891-4aee-83f9-1a01485735f1\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11678.png\"\n                            },\n                            \"item_name\": \"11678\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Curacao\"\n                        },\n                        {\n                            \"id\": \"5639cf6a-8930-40e1-953e-edae2afd857b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/dma.png\"\n                            },\n                            \"item_name\": \"13582\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Dominica\"\n                        },\n                        {\n                            \"id\": \"b3680756-f8db-44cd-9205-ff075e102ce3\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/dom.png\"\n                            },\n                            \"item_name\": \"2649\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"República dominicana\"\n                        },\n                        {\n                            \"id\": \"23c552a4-f195-41f7-9490-3f90ba4cb06d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/slv.png\"\n                            },\n                            \"item_name\": \"2650\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"El salvador\"\n                        },\n                        {\n                            \"id\": \"fb1ef701-c035-4288-8db3-3fa57f78ec64\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10532.png\"\n                            },\n                            \"item_name\": \"10532\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Guyana francesa\"\n                        },\n                        {\n                            \"id\": \"22186594-2fb6-49ef-8097-8b0c33c4c3a4\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/grn.png\"\n                            },\n                            \"item_name\": \"2651\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Granada\"\n                        },\n                        {\n                            \"id\": \"fe99f42a-6c0d-4023-b378-8df502abc144\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/gdl.png\"\n                            },\n                            \"item_name\": \"7657\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Guadalupe\"\n                        },\n                        {\n                            \"id\": \"4c89f379-265a-433f-83e2-69d58b1bdb42\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/gua.png\"\n                            },\n                            \"item_name\": \"2652\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Guatemala\"\n                        },\n                        {\n                            \"id\": \"ccb88e11-b9e8-46ec-9190-7fdbfee4c39e\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/guy.png\"\n                            },\n                            \"item_name\": \"2653\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Guyana\"\n                        },\n                        {\n                            \"id\": \"0fd91465-252f-47a7-8103-acc7126d5825\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/hai.png\"\n                            },\n                            \"item_name\": \"2654\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Haití\"\n                        },\n                        {\n                            \"id\": \"95a4bcf4-42c1-4f1f-b39a-4556430d27c7\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/hon.png\"\n                            },\n                            \"item_name\": \"215\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Honduras\"\n                        },\n                        {\n                            \"id\": \"006838be-9a86-4539-87a0-672a7e890bcb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/jam.png\"\n                            },\n                            \"item_name\": \"1038\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Jamaica\"\n                        },\n                        {\n                            \"id\": \"29fd6cb3-ab04-4c07-bd43-6e6e703c9549\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/marq.png\"\n                            },\n                            \"item_name\": \"2728\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Martinica\"\n                        },\n                        {\n                            \"id\": \"ab6eb182-78bc-42bd-a3fa-24b5e6bf2c31\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mex.png\"\n                            },\n                            \"item_name\": \"203\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"México\"\n                        },\n                        {\n                            \"id\": \"aac0a1b4-01aa-4597-bebc-f4cb5d3eb636\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/msr.png\"\n                            },\n                            \"item_name\": \"2655\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Montserrat\"\n                        },\n                        {\n                            \"id\": \"6627b422-4a61-4968-b98d-ea83d3bbde70\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nca.png\"\n                            },\n                            \"item_name\": \"2658\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Nicaragua\"\n                        },\n                        {\n                            \"id\": \"8cb7e928-4fdc-491c-b20f-89aa19234436\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/pan.png\"\n                            },\n                            \"item_name\": \"2659\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Panamá\"\n                        },\n                        {\n                            \"id\": \"fb603b9b-4317-42d7-9fe4-12448aeaf1f2\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11766.png\"\n                            },\n                            \"item_name\": \"11766\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Puerto rico\"\n                        },\n                        {\n                            \"id\": \"4414675e-4541-42c9-9a9d-c0f41ca554e6\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sma.png\"\n                            },\n                            \"item_name\": \"18243\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Sint maarten\"\n                        },\n                        {\n                            \"id\": \"cd809103-ad12-4dec-b67c-1b10f6d0913b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/skn.png\"\n                            },\n                            \"item_name\": \"2662\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"San cristóbal y nieves\"\n                        },\n                        {\n                            \"id\": \"82b803c0-3575-4f10-8299-f3fc656d4466\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lca.png\"\n                            },\n                            \"item_name\": \"2661\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"St. Lucia\"\n                        },\n                        {\n                            \"id\": \"1605e19a-c2fb-4f71-899d-666f88e0e337\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/stm.png\"\n                            },\n                            \"item_name\": \"10596\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"St. Martin\"\n                        },\n                        {\n                            \"id\": \"0f64fe54-d1cc-4344-8820-0e5f33e2f97d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/vin.png\"\n                            },\n                            \"item_name\": \"13584\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"St. Vincent and the Grenadines\"\n                        },\n                        {\n                            \"id\": \"75d4aab4-6021-480c-98e6-a35b25eb69b6\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sur.png\"\n                            },\n                            \"item_name\": \"2664\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Surinam\"\n                        },\n                        {\n                            \"id\": \"7ad22bd6-ad86-411e-a7a5-f014887f285a\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/tri.png\"\n                            },\n                            \"item_name\": \"2627\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Trinidad y tobago\"\n                        },\n                        {\n                            \"id\": \"828442cb-7aff-4bd7-b1ff-75ae0a9f9daf\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/tca.png\"\n                            },\n                            \"item_name\": \"2665\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Islas turcas y caicos\"\n                        },\n                        {\n                            \"id\": \"48d3fec0-4c4f-4813-b504-c70e4935859f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/vir.png\"\n                            },\n                            \"item_name\": \"2645\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Islas vírgenes americanas\"\n                        },\n                        {\n                            \"id\": \"04920eb9-5cdd-4d8e-926a-d6e0e5ec8237\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/usa.png\"\n                            },\n                            \"item_name\": \"660\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Estados unidos\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/64.png\"\n                }\n            },\n            {\n                \"id\": \"3db56957-9cbe-403c-be81-d607f7b1b81c\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"eng.1\",\n                \"description\": \"Premier League (Inglesa)\",\n                \"metadata\": {\n                    \"fbid\": \"eng.1\",\n                    \"teams\": [\n                        {\n                            \"id\": \"aae1a4e2-ed31-41f9-bb01-ea4169cf7564\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/349.png\"\n                            },\n                            \"item_name\": \"349\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"AFC Bournemouth\"\n                        },\n                        {\n                            \"id\": \"e08ee200-2d89-4b32-ba8c-111732fbc501\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/359.png\"\n                            },\n                            \"item_name\": \"359\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Arsenal\"\n                        },\n                        {\n                            \"id\": \"7bf32603-5801-41df-a69b-95a05571d7c9\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/362.png\"\n                            },\n                            \"item_name\": \"362\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Aston Villa\"\n                        },\n                        {\n                            \"id\": \"a99de1c1-15e8-4b07-b1f2-d715075a2ea6\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/337.png\"\n                            },\n                            \"item_name\": \"337\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Brentford\"\n                        },\n                        {\n                            \"id\": \"5f1a10fc-ad45-431f-a031-a2189d78f933\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/331.png\"\n                            },\n                            \"item_name\": \"331\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Brighton & Hove Albion\"\n                        },\n                        {\n                            \"id\": \"c03d200f-1905-4e19-b2e0-376f9d67be92\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/379.png\"\n                            },\n                            \"item_name\": \"379\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Burnley\"\n                        },\n                        {\n                            \"id\": \"a9f0dc37-b46b-47b6-b7b2-3f8bb61bbd56\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/363.png\"\n                            },\n                            \"item_name\": \"363\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Chelsea\"\n                        },\n                        {\n                            \"id\": \"c5a1819f-dde6-4662-8ecc-3eef6f3b1646\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/384.png\"\n                            },\n                            \"item_name\": \"384\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Crystal Palace\"\n                        },\n                        {\n                            \"id\": \"400e0c95-7acc-494b-ab62-f700e74db40e\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/368.png\"\n                            },\n                            \"item_name\": \"368\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Everton\"\n                        },\n                        {\n                            \"id\": \"db6bd379-52ae-4fbd-919a-0dcb0bc09cb0\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/370.png\"\n                            },\n                            \"item_name\": \"370\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Fulham\"\n                        },\n                        {\n                            \"id\": \"bb909bee-7322-4bec-8f62-f63155467791\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/364.png\"\n                            },\n                            \"item_name\": \"364\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Liverpool\"\n                        },\n                        {\n                            \"id\": \"ab92756f-71db-4762-8540-21bd5b289f70\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/301.png\"\n                            },\n                            \"item_name\": \"301\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Luton Town\"\n                        },\n                        {\n                            \"id\": \"f07b9539-924e-4ad3-88d5-2837028e1926\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/382.png\"\n                            },\n                            \"item_name\": \"382\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Manchester City\"\n                        },\n                        {\n                            \"id\": \"551dd47f-994a-4780-816d-f2670206553e\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/360.png\"\n                            },\n                            \"item_name\": \"360\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Manchester United\"\n                        },\n                        {\n                            \"id\": \"de825955-8147-413d-8ae3-b6cb6be7c44e\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/361.png\"\n                            },\n                            \"item_name\": \"361\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Newcastle United\"\n                        },\n                        {\n                            \"id\": \"be998e03-7cba-4fcf-a5c5-25603bfd7ee5\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/393.png\"\n                            },\n                            \"item_name\": \"393\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Nottingham Forest\"\n                        },\n                        {\n                            \"id\": \"e49bb518-1423-4b00-8b88-c0f02336e247\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/398.png\"\n                            },\n                            \"item_name\": \"398\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Sheffield United\"\n                        },\n                        {\n                            \"id\": \"8c545db0-b390-4d49-a61f-6ac118c69d4e\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/367.png\"\n                            },\n                            \"item_name\": \"367\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Tottenham Hotspur\"\n                        },\n                        {\n                            \"id\": \"df202595-cb1e-40a0-bb9f-71af5085ce51\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/371.png\"\n                            },\n                            \"item_name\": \"371\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"West Ham United\"\n                        },\n                        {\n                            \"id\": \"4d0f47cc-2136-41ae-be27-b6c810f25b58\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/380.png\"\n                            },\n                            \"item_name\": \"380\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Wolverhampton Wanderers\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/23.png\"\n                }\n            },\n            {\n                \"id\": \"aacda720-3726-4d39-b8af-2c740cd05b5f\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"ger.1\",\n                \"description\": \"Bundesliga (Alemania)\",\n                \"metadata\": {\n                    \"fbid\": \"ger.1\",\n                    \"teams\": [\n                        {\n                            \"id\": \"d6d6619f-f95c-4709-8522-c08020c43808\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6418.png\"\n                            },\n                            \"item_name\": \"6418\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"1. FC Heidenheim 1846\"\n                        },\n                        {\n                            \"id\": \"42f9e882-a5f6-45eb-9e82-d632ffd3f013\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/598.png\"\n                            },\n                            \"item_name\": \"598\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"1. FC Union Berlin\"\n                        },\n                        {\n                            \"id\": \"dc4a5e4a-1599-4444-bb6e-e212395c099d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/131.png\"\n                            },\n                            \"item_name\": \"131\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bayer Leverkusen\"\n                        },\n                        {\n                            \"id\": \"4513e759-de54-477b-83dd-9122c7008b43\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/132.png\"\n                            },\n                            \"item_name\": \"132\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bayern Munich\"\n                        },\n                        {\n                            \"id\": \"0aaeb3a2-071b-40c5-a661-e5129483b513\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/124.png\"\n                            },\n                            \"item_name\": \"124\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Borussia Dortmund\"\n                        },\n                        {\n                            \"id\": \"2ca5b6aa-30e3-44d5-ad18-20fbb7b9613a\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/268.png\"\n                            },\n                            \"item_name\": \"268\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Borussia Monchengladbach\"\n                        },\n                        {\n                            \"id\": \"34d106a2-47c8-4ad5-b160-4ccfbe2891b7\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/125.png\"\n                            },\n                            \"item_name\": \"125\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Eintracht Frankfurt\"\n                        },\n                        {\n                            \"id\": \"870708cd-f57b-4978-bf38-de433c977084\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3841.png\"\n                            },\n                            \"item_name\": \"3841\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"FC Augsburg\"\n                        },\n                        {\n                            \"id\": \"a5eb3f77-63c5-4a18-b52b-c5ce25e59970\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/122.png\"\n                            },\n                            \"item_name\": \"122\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"FC Cologne\"\n                        },\n                        {\n                            \"id\": \"52254c2a-2f13-449e-9372-e4d901da17a6\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2950.png\"\n                            },\n                            \"item_name\": \"2950\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Mainz\"\n                        },\n                        {\n                            \"id\": \"34197deb-0903-4395-8739-4e97ebfa6c78\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11420.png\"\n                            },\n                            \"item_name\": \"11420\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"RB Leipzig\"\n                        },\n                        {\n                            \"id\": \"10e34125-acce-4860-ba0a-f278338f639c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/126.png\"\n                            },\n                            \"item_name\": \"126\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"SC Freiburg\"\n                        },\n                        {\n                            \"id\": \"20c96702-fcb4-47cc-aad0-38012d246487\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3812.png\"\n                            },\n                            \"item_name\": \"3812\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"SV Darmstadt 98\"\n                        },\n                        {\n                            \"id\": \"e58cbf80-9957-4e54-81a9-ed0f4f4276c8\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/7911.png\"\n                            },\n                            \"item_name\": \"7911\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"TSG Hoffenheim\"\n                        },\n                        {\n                            \"id\": \"c919ac5b-fd94-49c1-afaf-d28d9eca831f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/134.png\"\n                            },\n                            \"item_name\": \"134\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"VfB Stuttgart\"\n                        },\n                        {\n                            \"id\": \"3a9d6470-199c-4dec-a6e3-54f0de544b8d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/121.png\"\n                            },\n                            \"item_name\": \"121\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"VfL Bochum\"\n                        },\n                        {\n                            \"id\": \"dffad294-3d4d-4ad6-a656-98fbad7ec30b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/138.png\"\n                            },\n                            \"item_name\": \"138\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"VfL Wolfsburg\"\n                        },\n                        {\n                            \"id\": \"2007fbdb-6e73-4096-899d-d8841e8ec5d6\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/137.png\"\n                            },\n                            \"item_name\": \"137\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Werder Bremen\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/10.png\"\n                }\n            },\n            {\n                \"id\": \"5964d72b-a7a6-4190-8769-f7799f523726\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"fra.1\",\n                \"description\": \"Ligue 1 (Francesa)\",\n                \"metadata\": {\n                    \"fbid\": \"fra.1\",\n                    \"teams\": [\n                        {\n                            \"id\": \"9ec44086-78ad-4900-9112-72d98f86a8e4\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/174.png\"\n                            },\n                            \"item_name\": \"174\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"AS Monaco\"\n                        },\n                        {\n                            \"id\": \"1fafe2c3-fcd6-48e4-a8e3-929db98c0d9f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6997.png\"\n                            },\n                            \"item_name\": \"6997\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Brest\"\n                        },\n                        {\n                            \"id\": \"c55dc30c-cd38-4d1a-bd8f-826e01b84f41\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3171.png\"\n                            },\n                            \"item_name\": \"3171\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Clermont Foot\"\n                        },\n                        {\n                            \"id\": \"5b422a5b-690f-49b2-b248-d870e343669c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3236.png\"\n                            },\n                            \"item_name\": \"3236\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Le Havre AC\"\n                        },\n                        {\n                            \"id\": \"eb294949-04ec-4303-ad80-47242a15da09\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/175.png\"\n                            },\n                            \"item_name\": \"175\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Lens\"\n                        },\n                        {\n                            \"id\": \"b1c0469b-8596-4535-95d4-61c20f3cbdfe\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/166.png\"\n                            },\n                            \"item_name\": \"166\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Lille\"\n                        },\n                        {\n                            \"id\": \"2272dffe-1edb-4ae0-99d6-b745c1b82f34\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/273.png\"\n                            },\n                            \"item_name\": \"273\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Lorient\"\n                        },\n                        {\n                            \"id\": \"bbf647f9-66e2-4a95-b664-86492b469cbc\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/167.png\"\n                            },\n                            \"item_name\": \"167\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Lyon\"\n                        },\n                        {\n                            \"id\": \"f0dd15f0-69c5-4f24-b560-efad4a1c121b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/176.png\"\n                            },\n                            \"item_name\": \"176\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Marseille\"\n                        },\n                        {\n                            \"id\": \"5eeea8b2-8a53-439a-b147-69d270f76709\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/177.png\"\n                            },\n                            \"item_name\": \"177\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Metz\"\n                        },\n                        {\n                            \"id\": \"0de57956-8821-47b0-8138-24371e68b9cc\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/274.png\"\n                            },\n                            \"item_name\": \"274\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Montpellier\"\n                        },\n                        {\n                            \"id\": \"fd437f88-e5a7-4f87-84ee-857d1c4ea1a9\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/165.png\"\n                            },\n                            \"item_name\": \"165\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Nantes\"\n                        },\n                        {\n                            \"id\": \"118e8fff-e835-4f17-9bc6-a1a3cf03e419\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2502.png\"\n                            },\n                            \"item_name\": \"2502\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Nice\"\n                        },\n                        {\n                            \"id\": \"c161134a-ce97-4021-a130-9995d3b26978\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/160.png\"\n                            },\n                            \"item_name\": \"160\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Paris Saint-Germain\"\n                        },\n                        {\n                            \"id\": \"809f2616-4ca4-43bb-a91a-de52b328497f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/169.png\"\n                            },\n                            \"item_name\": \"169\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Stade Rennais\"\n                        },\n                        {\n                            \"id\": \"809c9481-0abc-477a-8884-bf3e85a7651f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3243.png\"\n                            },\n                            \"item_name\": \"3243\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Stade de Reims\"\n                        },\n                        {\n                            \"id\": \"4d06b368-9363-48c5-9246-5f8d198b95ed\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/180.png\"\n                            },\n                            \"item_name\": \"180\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Strasbourg\"\n                        },\n                        {\n                            \"id\": \"522d9757-444b-4aa2-9a84-95bbd38b7f61\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/179.png\"\n                            },\n                            \"item_name\": \"179\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Toulouse\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/9.png\"\n                }\n            },\n            {\n                \"id\": \"9bf50b2c-1df3-451d-bc10-462c52063bea\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"concacaf.gold\",\n                \"description\": \"Copa Oro de CONCACAF \",\n                \"metadata\": {\n                    \"fbid\": \"concacaf.gold\",\n                    \"teams\": [\n                        {\n                            \"id\": \"ae57257a-6083-40e1-94d6-786e30c95950\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/can.png\"\n                            },\n                            \"item_name\": \"206\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Canadá\"\n                        },\n                        {\n                            \"id\": \"9aa0f87c-7722-4fe8-ac64-abae12eb242f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/crc.png\"\n                            },\n                            \"item_name\": \"214\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Costa rica\"\n                        },\n                        {\n                            \"id\": \"fb5ba989-a0f6-45ab-a376-204f7e228bb6\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cub.png\"\n                            },\n                            \"item_name\": \"2647\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Cuba\"\n                        },\n                        {\n                            \"id\": \"23c552a4-f195-41f7-9490-3f90ba4cb06d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/slv.png\"\n                            },\n                            \"item_name\": \"2650\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"El salvador\"\n                        },\n                        {\n                            \"id\": \"fe99f42a-6c0d-4023-b378-8df502abc144\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/gdl.png\"\n                            },\n                            \"item_name\": \"7657\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Guadalupe\"\n                        },\n                        {\n                            \"id\": \"4c89f379-265a-433f-83e2-69d58b1bdb42\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/gua.png\"\n                            },\n                            \"item_name\": \"2652\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Guatemala\"\n                        },\n                        {\n                            \"id\": \"0fd91465-252f-47a7-8103-acc7126d5825\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/hai.png\"\n                            },\n                            \"item_name\": \"2654\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Haití\"\n                        },\n                        {\n                            \"id\": \"95a4bcf4-42c1-4f1f-b39a-4556430d27c7\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/hon.png\"\n                            },\n                            \"item_name\": \"215\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Honduras\"\n                        },\n                        {\n                            \"id\": \"006838be-9a86-4539-87a0-672a7e890bcb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/jam.png\"\n                            },\n                            \"item_name\": \"1038\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Jamaica\"\n                        },\n                        {\n                            \"id\": \"29fd6cb3-ab04-4c07-bd43-6e6e703c9549\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/marq.png\"\n                            },\n                            \"item_name\": \"2728\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Martinica\"\n                        },\n                        {\n                            \"id\": \"ab6eb182-78bc-42bd-a3fa-24b5e6bf2c31\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mex.png\"\n                            },\n                            \"item_name\": \"203\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"México\"\n                        },\n                        {\n                            \"id\": \"8cb7e928-4fdc-491c-b20f-89aa19234436\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/pan.png\"\n                            },\n                            \"item_name\": \"2659\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Panamá\"\n                        },\n                        {\n                            \"id\": \"a3375113-9243-4e78-9f96-26c6e7de5bf5\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/qat.png\"\n                            },\n                            \"item_name\": \"4398\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Qatar\"\n                        },\n                        {\n                            \"id\": \"cd809103-ad12-4dec-b67c-1b10f6d0913b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/skn.png\"\n                            },\n                            \"item_name\": \"2662\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"San cristóbal y nieves\"\n                        },\n                        {\n                            \"id\": \"7ad22bd6-ad86-411e-a7a5-f014887f285a\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/tri.png\"\n                            },\n                            \"item_name\": \"2627\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Trinidad y tobago\"\n                        },\n                        {\n                            \"id\": \"04920eb9-5cdd-4d8e-926a-d6e0e5ec8237\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/usa.png\"\n                            },\n                            \"item_name\": \"660\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Estados unidos\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/59.png\"\n                }\n            },\n            {\n                \"id\": \"e7eccb67-ee9d-4cc3-b527-b118c11a3db4\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"uru.1\",\n                \"description\": \"Uruguayan Primera Division\",\n                \"metadata\": {\n                    \"fbid\": \"uru.1\",\n                    \"teams\": [\n                        {\n                            \"id\": \"4ef5da7c-1c96-427c-a808-2928d5e09387\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9999.png\"\n                            },\n                            \"item_name\": \"9999\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Boston River\"\n                        },\n                        {\n                            \"id\": \"7340b071-34e7-4d3d-84b5-b4914189e05c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5490.png\"\n                            },\n                            \"item_name\": \"5490\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Cerro\"\n                        },\n                        {\n                            \"id\": \"ff847103-d4cb-470c-bcf8-15f19b6eb267\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9902.png\"\n                            },\n                            \"item_name\": \"9902\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Cerro Largo\"\n                        },\n                        {\n                            \"id\": \"6ae7ed2a-ade5-40ad-b240-dc90d639f8b4\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4817.png\"\n                            },\n                            \"item_name\": \"4817\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Danubio\"\n                        },\n                        {\n                            \"id\": \"144490f2-97ff-4306-9ff8-bd7fd034425c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/1007.png\"\n                            },\n                            \"item_name\": \"1007\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Defensor Sporting\"\n                        },\n                        {\n                            \"id\": \"d7da7551-49d9-465f-b7b9-9c0fdea7d7f4\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10000.png\"\n                            },\n                            \"item_name\": \"10000\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Deportivo Maldonado\"\n                        },\n                        {\n                            \"id\": \"1e62a9d2-a038-4dcc-b86d-59ecb046b552\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2689.png\"\n                            },\n                            \"item_name\": \"2689\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Fénix \"\n                        },\n                        {\n                            \"id\": \"de71fdf9-622a-4720-8bc2-1db90a135970\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5492.png\"\n                            },\n                            \"item_name\": \"5492\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Liverpool\"\n                        },\n                        {\n                            \"id\": \"72bc2875-2e81-4e04-bafc-f4745c185703\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5493.png\"\n                            },\n                            \"item_name\": \"5493\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Miramar\"\n                        },\n                        {\n                            \"id\": \"63df4666-7d08-4ad5-93dd-234bffc1a8e7\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2684.png\"\n                            },\n                            \"item_name\": \"2684\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Nacional\"\n                        },\n                        {\n                            \"id\": \"416e45b5-aba1-47cf-97d5-669d1a638347\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2683.png\"\n                            },\n                            \"item_name\": \"2683\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Peñarol\"\n                        },\n                        {\n                            \"id\": \"7e361c84-a026-40aa-8f1e-c097e7f82d3d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6866.png\"\n                            },\n                            \"item_name\": \"6866\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Progreso\"\n                        },\n                        {\n                            \"id\": \"063036d3-236d-4f8b-8873-b96b9f265734\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9903.png\"\n                            },\n                            \"item_name\": \"9903\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Racing\"\n                        },\n                        {\n                            \"id\": \"62377013-c95e-4f8e-8214-0826f5b42fc0\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5496.png\"\n                            },\n                            \"item_name\": \"5496\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Rampla Juniors\"\n                        },\n                        {\n                            \"id\": \"3259fdcc-b11d-46a6-8172-8f42c7739044\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5498.png\"\n                            },\n                            \"item_name\": \"5498\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"River Plate\"\n                        },\n                        {\n                            \"id\": \"be13b1ed-4a74-4a4f-b708-31d361b56471\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/5501.png\"\n                            },\n                            \"item_name\": \"5501\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Wanderers\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/1592.png\"\n                }\n            },\n            {\n                \"id\": \"293a8cf9-d20f-4560-9820-9541dbce722d\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"ita.1\",\n                \"description\": \"Serie A (Italiana)\",\n                \"metadata\": {\n                    \"fbid\": \"ita.1\",\n                    \"teams\": [\n                        {\n                            \"id\": \"78feb88f-536a-40ff-940c-c73ec9876624\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/103.png\"\n                            },\n                            \"item_name\": \"103\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"AC Milan\"\n                        },\n                        {\n                            \"id\": \"e7b40fa0-ff0d-4663-a468-5c3ee1abf775\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/104.png\"\n                            },\n                            \"item_name\": \"104\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"AS Roma\"\n                        },\n                        {\n                            \"id\": \"b0e4c1eb-02ee-47d0-9712-732d239737cb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/105.png\"\n                            },\n                            \"item_name\": \"105\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Atalanta\"\n                        },\n                        {\n                            \"id\": \"b9e016a2-be79-44b3-9631-b7e1974fc293\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/107.png\"\n                            },\n                            \"item_name\": \"107\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bologna\"\n                        },\n                        {\n                            \"id\": \"60672e90-0105-4bf8-9dd2-04848de2cdeb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2925.png\"\n                            },\n                            \"item_name\": \"2925\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Cagliari\"\n                        },\n                        {\n                            \"id\": \"5d05071b-1bb4-4329-a496-6b53bd4bf759\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2574.png\"\n                            },\n                            \"item_name\": \"2574\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Empoli\"\n                        },\n                        {\n                            \"id\": \"c88ff97e-15f2-471d-9dfe-2617ce26382a\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/109.png\"\n                            },\n                            \"item_name\": \"109\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Fiorentina\"\n                        },\n                        {\n                            \"id\": \"3310a809-16b0-42fb-9d50-c55f18558194\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4057.png\"\n                            },\n                            \"item_name\": \"4057\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Frosinone\"\n                        },\n                        {\n                            \"id\": \"179fc9c7-38b0-4fe0-95b3-ac1b16bce082\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3263.png\"\n                            },\n                            \"item_name\": \"3263\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Genoa\"\n                        },\n                        {\n                            \"id\": \"34237a2a-a95a-44e2-a457-0ab13f3dd982\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/119.png\"\n                            },\n                            \"item_name\": \"119\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Hellas Verona\"\n                        },\n                        {\n                            \"id\": \"2a4f537e-2aee-41f0-96e1-ebe412a93260\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/110.png\"\n                            },\n                            \"item_name\": \"110\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Internazionale\"\n                        },\n                        {\n                            \"id\": \"ba4bddaa-7136-48cd-a584-e49e5330ab57\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/111.png\"\n                            },\n                            \"item_name\": \"111\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Juventus\"\n                        },\n                        {\n                            \"id\": \"5b4efe85-cca1-48c0-9638-fef823d8bd39\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/112.png\"\n                            },\n                            \"item_name\": \"112\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Lazio\"\n                        },\n                        {\n                            \"id\": \"51c03b59-5a98-4cfa-9571-6064fd72a9ed\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/113.png\"\n                            },\n                            \"item_name\": \"113\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Lecce\"\n                        },\n                        {\n                            \"id\": \"a59877d0-11a5-4a66-aa82-c7c9cbbd6009\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4007.png\"\n                            },\n                            \"item_name\": \"4007\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Monza\"\n                        },\n                        {\n                            \"id\": \"8fe6d9bb-61d8-4a84-88c5-5ae99b98e966\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/114.png\"\n                            },\n                            \"item_name\": \"114\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Napoli\"\n                        },\n                        {\n                            \"id\": \"3df39f3a-ce57-4485-8b62-ce0adc35f282\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3240.png\"\n                            },\n                            \"item_name\": \"3240\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Salernitana\"\n                        },\n                        {\n                            \"id\": \"2420aa7b-5c0d-4f77-96de-0820acce17e8\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3997.png\"\n                            },\n                            \"item_name\": \"3997\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Sassuolo\"\n                        },\n                        {\n                            \"id\": \"be65f0b0-c9ac-487f-afd2-ba6758965010\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/239.png\"\n                            },\n                            \"item_name\": \"239\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Torino\"\n                        },\n                        {\n                            \"id\": \"6795fe2e-0e44-46ef-be89-6762d447a7f5\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/118.png\"\n                            },\n                            \"item_name\": \"118\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Udinese\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/12.png\"\n                }\n            },\n            {\n                \"id\": \"f7c551d6-f68c-40a4-94e7-eb133ef92123\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"conmebol.america\",\n                \"description\": \"Copa América\",\n                \"metadata\": {\n                    \"fbid\": \"conmebol.america\",\n                    \"teams\": [\n                        {\n                            \"id\": \"0a47a857-c9b5-49b3-8604-aa3addd13b8c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/arg.png\"\n                            },\n                            \"item_name\": \"202\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Argentina\"\n                        },\n                        {\n                            \"id\": \"5cd5c342-c5e5-428f-b94c-85bf92a9613c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bol.png\"\n                            },\n                            \"item_name\": \"204\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bolivia\"\n                        },\n                        {\n                            \"id\": \"3414f4de-b780-43b4-b4d2-489a8feab176\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bra.png\"\n                            },\n                            \"item_name\": \"205\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Brasil\"\n                        },\n                        {\n                            \"id\": \"ae57257a-6083-40e1-94d6-786e30c95950\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/can.png\"\n                            },\n                            \"item_name\": \"206\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Canadá\"\n                        },\n                        {\n                            \"id\": \"337e9ab9-7c10-43fa-bdd2-c0424f486730\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/chi.png\"\n                            },\n                            \"item_name\": \"207\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Chile\"\n                        },\n                        {\n                            \"id\": \"a49d9a73-efd3-46e3-8150-3c3fd54f2ad1\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/col.png\"\n                            },\n                            \"item_name\": \"208\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Colombia\"\n                        },\n                        {\n                            \"id\": \"9aa0f87c-7722-4fe8-ac64-abae12eb242f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/crc.png\"\n                            },\n                            \"item_name\": \"214\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Costa rica\"\n                        },\n                        {\n                            \"id\": \"a08eab2e-c9a4-4c06-9794-56ec7996fa31\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ecu.png\"\n                            },\n                            \"item_name\": \"209\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Ecuador\"\n                        },\n                        {\n                            \"id\": \"006838be-9a86-4539-87a0-672a7e890bcb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/jam.png\"\n                            },\n                            \"item_name\": \"1038\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Jamaica\"\n                        },\n                        {\n                            \"id\": \"ab6eb182-78bc-42bd-a3fa-24b5e6bf2c31\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mex.png\"\n                            },\n                            \"item_name\": \"203\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"México\"\n                        },\n                        {\n                            \"id\": \"8cb7e928-4fdc-491c-b20f-89aa19234436\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/pan.png\"\n                            },\n                            \"item_name\": \"2659\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Panamá\"\n                        },\n                        {\n                            \"id\": \"2d78206b-020a-4c93-b287-901c8e4ad80a\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/par.png\"\n                            },\n                            \"item_name\": \"210\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Paraguay\"\n                        },\n                        {\n                            \"id\": \"7ab5539f-b0fd-49fe-8035-2a95d148afba\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/per.png\"\n                            },\n                            \"item_name\": \"211\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Perú\"\n                        },\n                        {\n                            \"id\": \"04920eb9-5cdd-4d8e-926a-d6e0e5ec8237\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/usa.png\"\n                            },\n                            \"item_name\": \"660\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Estados unidos\"\n                        },\n                        {\n                            \"id\": \"c0dd1fac-51ac-406f-a4d3-c43b61bdb5bd\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/uru.png\"\n                            },\n                            \"item_name\": \"212\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Uruguay\"\n                        },\n                        {\n                            \"id\": \"2ba29bab-b28a-4102-a36b-41533a6e2b68\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ven.png\"\n                            },\n                            \"item_name\": \"213\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Venezuela\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/83.png\"\n                }\n            },\n            {\n                \"id\": \"6580f67e-c7f0-4a88-aa25-018d363ae6d3\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"chi.1\",\n                \"description\": \"Liga Chilena\",\n                \"metadata\": {\n                    \"fbid\": \"chi.1\",\n                    \"teams\": [\n                        {\n                            \"id\": \"7c78a738-9ac3-4d86-b959-68727e4d7f20\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4138.png\"\n                            },\n                            \"item_name\": \"4138\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Audax Italiano\"\n                        },\n                        {\n                            \"id\": \"4f63ec86-e7f5-4326-b332-13c40983b3fd\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2678.png\"\n                            },\n                            \"item_name\": \"2678\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Cobreloa\"\n                        },\n                        {\n                            \"id\": \"6913fb5b-b46e-43ae-b21a-485327d68207\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4133.png\"\n                            },\n                            \"item_name\": \"4133\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Cobresal\"\n                        },\n                        {\n                            \"id\": \"6afa3018-6b8b-4671-ad84-f1fce1b7a45c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2688.png\"\n                            },\n                            \"item_name\": \"2688\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Colo Colo\"\n                        },\n                        {\n                            \"id\": \"b87b428a-ff0f-41a9-b6c2-3110e8930334\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10139.png\"\n                            },\n                            \"item_name\": \"10139\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Copiapó\"\n                        },\n                        {\n                            \"id\": \"d060d1ad-8bc0-42ae-96d8-3f41ffd04726\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/8186.png\"\n                            },\n                            \"item_name\": \"8186\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Coquimbo Unido\"\n                        },\n                        {\n                            \"id\": \"d5832d04-a29b-4361-9421-0f27386c8af5\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10142.png\"\n                            },\n                            \"item_name\": \"10142\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Deportes Iquique\"\n                        },\n                        {\n                            \"id\": \"97cef699-eb04-476e-b89f-6e293ab8b1dd\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4129.png\"\n                            },\n                            \"item_name\": \"4129\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Everton CD\"\n                        },\n                        {\n                            \"id\": \"744870f1-e254-4574-bd86-10072051f670\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4134.png\"\n                            },\n                            \"item_name\": \"4134\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Huachipato\"\n                        },\n                        {\n                            \"id\": \"272c519b-1f89-44e3-999a-142d9c4e487e\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6072.png\"\n                            },\n                            \"item_name\": \"6072\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"O`Higgins\"\n                        },\n                        {\n                            \"id\": \"3b1859ab-0be6-422e-9730-7091df5b3b3d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4422.png\"\n                            },\n                            \"item_name\": \"4422\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Palestino\"\n                        },\n                        {\n                            \"id\": \"3f36596b-76b1-4124-8b86-aaf1ec829c76\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/885.png\"\n                            },\n                            \"item_name\": \"885\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Universidad Católica\"\n                        },\n                        {\n                            \"id\": \"2b8230e4-0300-4e49-a009-c97320bc5971\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4139.png\"\n                            },\n                            \"item_name\": \"4139\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Universidad de Chile\"\n                        },\n                        {\n                            \"id\": \"f9989726-7583-481c-a310-eb562b69cab4\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/4132.png\"\n                            },\n                            \"item_name\": \"4132\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Unión Española\"\n                        },\n                        {\n                            \"id\": \"37ec179f-9e18-4be9-a7c5-4c579c7bd53a\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10144.png\"\n                            },\n                            \"item_name\": \"10144\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Unión La Calera\"\n                        },\n                        {\n                            \"id\": \"bfadfbf4-dac4-4238-bacf-3c370942bdec\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/7427.png\"\n                            },\n                            \"item_name\": \"7427\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Ñublense\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/86.png\"\n                }\n            },\n            {\n                \"id\": \"bbb21e52-cb58-4a09-b5c3-4f2dd41bcb45\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"fifa.w.olympics\",\n                \"description\": \"Torneo olímpico femenino\",\n                \"metadata\": {\n                    \"fbid\": \"fifa.w.olympics\",\n                    \"teams\": [\n                        {\n                            \"id\": \"6a2e7ecf-d258-4830-b730-3dd3fd3298f1\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aus.png\"\n                            },\n                            \"item_name\": \"2751\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Australia Fem Sub-23\"\n                        },\n                        {\n                            \"id\": \"99814d0b-fadd-47d2-a486-f175c4bcd672\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bra.png\"\n                            },\n                            \"item_name\": \"2752\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Brasil Fem Sub-23\"\n                        },\n                        {\n                            \"id\": \"6864d001-6b2f-498a-98ec-e31ec68904a6\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/can.png\"\n                            },\n                            \"item_name\": \"2753\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Canadá Fem Sub-23\"\n                        },\n                        {\n                            \"id\": \"8f1ac3ab-d195-439e-8286-cf99feac0278\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/col.png\"\n                            },\n                            \"item_name\": \"11337\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Colombia Fem Sub-23\"\n                        },\n                        {\n                            \"id\": \"40d80317-6892-412d-ae89-4ecec23cc197\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fra.png\"\n                            },\n                            \"item_name\": \"2755\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Francia Fem Sub-23\"\n                        },\n                        {\n                            \"id\": \"b1d30686-aee2-4aac-8f24-b32a5f8ada50\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ger.png\"\n                            },\n                            \"item_name\": \"2756\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Alemania Fem Sub-23\"\n                        },\n                        {\n                            \"id\": \"11d7355b-9ee0-4123-9cda-cec6db0ca34d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/jpn.png\"\n                            },\n                            \"item_name\": \"2758\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Japón Fem Sub-23\"\n                        },\n                        {\n                            \"id\": \"4c33d3b0-83ff-47d3-93f3-37869ef45eaa\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nzl.png\"\n                            },\n                            \"item_name\": \"4153\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Nueva zelanda Fem Sub-23\"\n                        },\n                        {\n                            \"id\": \"317d62f6-20fe-4ab3-985f-972d1717783d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nga.png\"\n                            },\n                            \"item_name\": \"2761\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Nigeria Fem Sub-23\"\n                        },\n                        {\n                            \"id\": \"712d6eb0-ac71-4eb9-a13e-ac1860a6eb46\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/esp.png\"\n                            },\n                            \"item_name\": \"17640\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"España Fem Sub-23\"\n                        },\n                        {\n                            \"id\": \"f89a0e57-9b48-4944-8091-0f42231c7ce9\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/usa.png\"\n                            },\n                            \"item_name\": \"2765\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Estados unidos Fem Sub-23\"\n                        },\n                        {\n                            \"id\": \"f1174da4-1282-47b4-baf1-0a6f508cb0a9\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/zam.png\"\n                            },\n                            \"item_name\": \"20795\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Zambia Fem Sub-23\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/84.png\"\n                }\n            },\n            {\n                \"id\": \"8d41abec-9087-43be-ba6b-a1a17f13e557\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"mex.1\",\n                \"description\": \"Liga MX (Mexicana)\",\n                \"metadata\": {\n                    \"fbid\": \"mex.1\",\n                    \"teams\": [\n                        {\n                            \"id\": \"dd8fab7d-d21f-42e7-8705-03fd4c728db6\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/227.png\"\n                            },\n                            \"item_name\": \"227\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"América\"\n                        },\n                        {\n                            \"id\": \"ca161347-3e0c-492e-9f17-1c073b6061ba\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/216.png\"\n                            },\n                            \"item_name\": \"216\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Atlas\"\n                        },\n                        {\n                            \"id\": \"7ffc035e-4335-487c-9dff-b5da7fb76d50\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/15720.png\"\n                            },\n                            \"item_name\": \"15720\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Atlético de San Luis\"\n                        },\n                        {\n                            \"id\": \"64cffdef-0afc-43f4-8ed8-419b84d60f76\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/218.png\"\n                            },\n                            \"item_name\": \"218\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Cruz Azul\"\n                        },\n                        {\n                            \"id\": \"2b95ccff-5a26-4111-8c1e-ff6099843971\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/17851.png\"\n                            },\n                            \"item_name\": \"17851\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"FC Juarez\"\n                        },\n                        {\n                            \"id\": \"cf631983-21d5-408e-9a33-a4be6357499b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/219.png\"\n                            },\n                            \"item_name\": \"219\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Guadalajara\"\n                        },\n                        {\n                            \"id\": \"aece61f8-8d9c-4945-a6b5-4cdf282aa894\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/228.png\"\n                            },\n                            \"item_name\": \"228\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"León\"\n                        },\n                        {\n                            \"id\": \"e1866ceb-7a2f-4f4e-b24e-a63c5c694a78\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/20702.png\"\n                            },\n                            \"item_name\": \"20702\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Mazatlán FC\"\n                        },\n                        {\n                            \"id\": \"b5ef9a15-1004-4dd9-90b8-88cb0e7aaf82\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/220.png\"\n                            },\n                            \"item_name\": \"220\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Monterrey\"\n                        },\n                        {\n                            \"id\": \"7ba9e52d-3f4f-4d9f-9605-f6183f4f7d25\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/229.png\"\n                            },\n                            \"item_name\": \"229\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Necaxa\"\n                        },\n                        {\n                            \"id\": \"ca419376-835d-4b54-b898-cf3318fe8898\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/234.png\"\n                            },\n                            \"item_name\": \"234\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Pachuca\"\n                        },\n                        {\n                            \"id\": \"a5d1c8f3-eba4-41bc-b7d5-ef27caedfd03\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/231.png\"\n                            },\n                            \"item_name\": \"231\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Puebla\"\n                        },\n                        {\n                            \"id\": \"f26f27c0-c9c2-4f06-ba0c-2519a44fdc04\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/233.png\"\n                            },\n                            \"item_name\": \"233\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Pumas UNAM\"\n                        },\n                        {\n                            \"id\": \"0502a8d5-5f92-4420-8ee5-8f4e6f6921c4\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/222.png\"\n                            },\n                            \"item_name\": \"222\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Querétaro\"\n                        },\n                        {\n                            \"id\": \"1311321f-4eb8-42dc-a8ed-9996448a6f7f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/225.png\"\n                            },\n                            \"item_name\": \"225\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Santos\"\n                        },\n                        {\n                            \"id\": \"7daf77b1-2478-4473-9f6f-b0b8dd4ee951\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/232.png\"\n                            },\n                            \"item_name\": \"232\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Tigres UANL\"\n                        },\n                        {\n                            \"id\": \"4e477564-ed85-4d89-a9d8-66a8341d8730\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/10125.png\"\n                            },\n                            \"item_name\": \"10125\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Tijuana\"\n                        },\n                        {\n                            \"id\": \"daae1667-895f-4350-8393-0fb04ab0e47e\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/223.png\"\n                            },\n                            \"item_name\": \"223\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Toluca\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/22.png\"\n                }\n            },\n            {\n                \"id\": \"9ffc1dd1-e1fc-4ca0-a7fb-889af6a2539d\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"uefa.nations\",\n                \"description\": \"UEFA Nations League\",\n                \"metadata\": {\n                    \"fbid\": \"uefa.nations\",\n                    \"teams\": [\n                        {\n                            \"id\": \"8cd20108-9af5-4f0e-b7b9-1c7efb5baa07\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/alb.png\"\n                            },\n                            \"item_name\": \"585\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Albania\"\n                        },\n                        {\n                            \"id\": \"9b42c289-c020-4386-aaaf-d6d25b397288\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/and.png\"\n                            },\n                            \"item_name\": \"587\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Andorra\"\n                        },\n                        {\n                            \"id\": \"96cf608e-09d9-448c-8612-6c85ef741566\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fifa.armenia.png\"\n                            },\n                            \"item_name\": \"579\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Armenia\"\n                        },\n                        {\n                            \"id\": \"782c9957-cdc1-4de3-ac83-ecd33e351307\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aut.png\"\n                            },\n                            \"item_name\": \"474\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Austria\"\n                        },\n                        {\n                            \"id\": \"361956e3-c393-4f85-b0e8-491592892bb1\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aze.png\"\n                            },\n                            \"item_name\": \"581\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Azerbaiyán\"\n                        },\n                        {\n                            \"id\": \"cd39fc0a-1730-4898-9c03-39a6a46e04fc\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/blr.png\"\n                            },\n                            \"item_name\": \"583\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bielorrusia\"\n                        },\n                        {\n                            \"id\": \"cf08b52c-25bb-496b-beee-c09886593721\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bel.png\"\n                            },\n                            \"item_name\": \"459\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bélgica\"\n                        },\n                        {\n                            \"id\": \"daf0cf18-414c-46bd-9fac-17035f2bef83\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bih.png\"\n                            },\n                            \"item_name\": \"452\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bosnia-herzegovina\"\n                        },\n                        {\n                            \"id\": \"caf1c407-33b1-4cbd-bc35-b4b6d8928710\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bul.png\"\n                            },\n                            \"item_name\": \"462\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bulgaria\"\n                        },\n                        {\n                            \"id\": \"d4c883db-6ded-4ab3-af67-35ec30a85cf7\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cro.png\"\n                            },\n                            \"item_name\": \"477\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Croacia\"\n                        },\n                        {\n                            \"id\": \"95e995bc-38ee-4711-86fa-2f74bc6fadf9\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cyp.png\"\n                            },\n                            \"item_name\": \"445\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Chipre\"\n                        },\n                        {\n                            \"id\": \"19bc6e13-d059-43a1-8adb-4781851f5de4\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cze.png\"\n                            },\n                            \"item_name\": \"450\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"República checa\"\n                        },\n                        {\n                            \"id\": \"b8363b81-3b2e-454c-b873-1a27100ea52b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/den.png\"\n                            },\n                            \"item_name\": \"479\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Dinamarca\"\n                        },\n                        {\n                            \"id\": \"eff32061-1077-465c-af39-1eb6f3a2ede9\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/eng.png\"\n                            },\n                            \"item_name\": \"448\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Inglaterra\"\n                        },\n                        {\n                            \"id\": \"0dd6659e-bd92-4b69-aa12-21ff6f2e662f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/est.png\"\n                            },\n                            \"item_name\": \"444\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Estonia\"\n                        },\n                        {\n                            \"id\": \"e00d55b3-1e2e-41d1-b6f8-8ac49bd07f19\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fro.png\"\n                            },\n                            \"item_name\": \"447\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Islas feroe\"\n                        },\n                        {\n                            \"id\": \"8d7652a4-1e1f-4e54-a939-c14ce24e465f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fin.png\"\n                            },\n                            \"item_name\": \"458\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Finlandia\"\n                        },\n                        {\n                            \"id\": \"74028b95-7002-4f9a-a7d2-cf0780621258\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fra.png\"\n                            },\n                            \"item_name\": \"478\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Francia\"\n                        },\n                        {\n                            \"id\": \"d0912621-8853-4f8b-aab9-bd67a5c8e544\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/geo.png\"\n                            },\n                            \"item_name\": \"584\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Georgia\"\n                        },\n                        {\n                            \"id\": \"a9f2c5be-a616-4ec1-ac50-fb50b35cdbcb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ger.png\"\n                            },\n                            \"item_name\": \"481\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Alemania\"\n                        },\n                        {\n                            \"id\": \"777d3065-5ff2-45a7-8bf7-bddff06195c0\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/16721.png\"\n                            },\n                            \"item_name\": \"16721\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Gibraltar\"\n                        },\n                        {\n                            \"id\": \"51fc5da1-369b-40c4-a6aa-a911c17b04a0\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/gre.png\"\n                            },\n                            \"item_name\": \"455\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Grecia\"\n                        },\n                        {\n                            \"id\": \"88ba42ca-ee03-4ab3-a631-b270bd8b238b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/hun.png\"\n                            },\n                            \"item_name\": \"480\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Hungría\"\n                        },\n                        {\n                            \"id\": \"a40b1555-8ea5-4786-8c05-df4ae7b7622e\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/isl.png\"\n                            },\n                            \"item_name\": \"470\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Islandia\"\n                        },\n                        {\n                            \"id\": \"ef924732-b56b-4db9-9d80-0526e581971c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/isr.png\"\n                            },\n                            \"item_name\": \"461\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Israel\"\n                        },\n                        {\n                            \"id\": \"005b0598-c5a7-4038-9cc6-b4f7eef5c5ca\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ita.png\"\n                            },\n                            \"item_name\": \"162\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Italia\"\n                        },\n                        {\n                            \"id\": \"3d89c667-d38d-4d72-9af6-85e6ab9c5fbe\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/kaz.png\"\n                            },\n                            \"item_name\": \"2619\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Kazajstán\"\n                        },\n                        {\n                            \"id\": \"c35cbb36-86c0-4508-b788-032c9520fc8b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/18272.png\"\n                            },\n                            \"item_name\": \"18272\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Kosovo\"\n                        },\n                        {\n                            \"id\": \"8dac7b76-3882-4fde-a38e-eeeaec30fd65\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lva.png\"\n                            },\n                            \"item_name\": \"456\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Letonia\"\n                        },\n                        {\n                            \"id\": \"7ddc00b8-5935-4f72-b39b-8f8453035bde\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lie.png\"\n                            },\n                            \"item_name\": \"589\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Liechtenstein\"\n                        },\n                        {\n                            \"id\": \"370fcb42-949c-4400-9055-443330da0772\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ltu.png\"\n                            },\n                            \"item_name\": \"460\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Lituania\"\n                        },\n                        {\n                            \"id\": \"59379f24-e8fd-4e3e-ae3e-b53818dbc189\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/lux.png\"\n                            },\n                            \"item_name\": \"582\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Luxemburgo\"\n                        },\n                        {\n                            \"id\": \"0d80a4b2-b21d-450e-ae79-5b69f0041882\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mlt.png\"\n                            },\n                            \"item_name\": \"453\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Malta\"\n                        },\n                        {\n                            \"id\": \"6f088596-ec15-4c5f-a5bb-67a54657ada6\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mda.png\"\n                            },\n                            \"item_name\": \"483\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Moldavia\"\n                        },\n                        {\n                            \"id\": \"ea49c96a-deac-4484-84c0-0fbfc69f81f7\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mtg.png\"\n                            },\n                            \"item_name\": \"6775\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Montenegro\"\n                        },\n                        {\n                            \"id\": \"8610f144-74a3-4b6d-8f56-074910e4f44c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ned.png\"\n                            },\n                            \"item_name\": \"449\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Holanda\"\n                        },\n                        {\n                            \"id\": \"309c797f-6c92-40b2-b5f2-679202eed720\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/mkd.png\"\n                            },\n                            \"item_name\": \"463\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Macedonia del norte\"\n                        },\n                        {\n                            \"id\": \"1dc0fc97-ef52-4d79-afa9-dc6b6bf3b292\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nir.png\"\n                            },\n                            \"item_name\": \"586\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Ireland del norte\"\n                        },\n                        {\n                            \"id\": \"36c0d7a8-503b-43f5-b270-1c62dc85fdbf\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/nor.png\"\n                            },\n                            \"item_name\": \"464\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Noruega\"\n                        },\n                        {\n                            \"id\": \"9a8d1895-66f6-413f-aeca-df8c1427ccd1\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/pol.png\"\n                            },\n                            \"item_name\": \"471\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Polonia\"\n                        },\n                        {\n                            \"id\": \"452c9497-160b-4067-8c1e-e43953b07e5a\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/por.png\"\n                            },\n                            \"item_name\": \"482\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Portugal\"\n                        },\n                        {\n                            \"id\": \"490a3e59-d55c-4cbb-ae1c-f0e89f260f1d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/irl.png\"\n                            },\n                            \"item_name\": \"476\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Irlanda\"\n                        },\n                        {\n                            \"id\": \"abd00d4b-d954-4edb-a62c-b7e36b72a645\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/rom.png\"\n                            },\n                            \"item_name\": \"473\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Rumanía\"\n                        },\n                        {\n                            \"id\": \"91333c70-a546-466d-b6c7-d83640e67675\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/rus.png\"\n                            },\n                            \"item_name\": \"454\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Rusia\"\n                        },\n                        {\n                            \"id\": \"6ac19be7-44be-45c2-a365-9e50bb04434f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/smr.png\"\n                            },\n                            \"item_name\": \"588\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"San marino\"\n                        },\n                        {\n                            \"id\": \"203a28ce-cf49-48a1-80e2-7632d6842b9b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sco.png\"\n                            },\n                            \"item_name\": \"580\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Escocia\"\n                        },\n                        {\n                            \"id\": \"4a4a11ce-8041-46a6-852b-581d7fce1714\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sba.png\"\n                            },\n                            \"item_name\": \"6757\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Serbia\"\n                        },\n                        {\n                            \"id\": \"e2e3fd85-58f0-40bf-a187-8dc6b5d15200\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/svk.png\"\n                            },\n                            \"item_name\": \"468\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Eslovaquía\"\n                        },\n                        {\n                            \"id\": \"c3ffd993-58fb-4612-b918-b445ac8549eb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/svn.png\"\n                            },\n                            \"item_name\": \"472\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Eslovenia\"\n                        },\n                        {\n                            \"id\": \"8d9cabe1-b294-4f45-9168-9df5c1f4d443\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/esp.png\"\n                            },\n                            \"item_name\": \"164\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"España\"\n                        },\n                        {\n                            \"id\": \"c664ad48-63e6-4c5d-8fa7-7359061c0e6a\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/swe.png\"\n                            },\n                            \"item_name\": \"466\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Suecia\"\n                        },\n                        {\n                            \"id\": \"5bf103b0-625d-4b7a-bfe5-c2287c52abb8\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sui.png\"\n                            },\n                            \"item_name\": \"475\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Suiza\"\n                        },\n                        {\n                            \"id\": \"4ddb378a-618a-4146-b175-a4f6126e3661\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/tur.png\"\n                            },\n                            \"item_name\": \"465\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Turquía\"\n                        },\n                        {\n                            \"id\": \"07784531-62d8-42e8-8bd0-4fad77be0bdb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ukr.png\"\n                            },\n                            \"item_name\": \"457\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Ucrania\"\n                        },\n                        {\n                            \"id\": \"50aeeb90-7484-4c26-a268-e91b9deff7a1\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/wal.png\"\n                            },\n                            \"item_name\": \"578\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Gales\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/2395.png\"\n                }\n            },\n            {\n                \"id\": \"c4b5c6dd-2958-4b92-a967-677f9f9d79fc\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"uefa.euro\",\n                \"description\": \"Eurocopa \",\n                \"metadata\": {\n                    \"fbid\": \"uefa.euro\",\n                    \"teams\": [\n                        {\n                            \"id\": \"8cd20108-9af5-4f0e-b7b9-1c7efb5baa07\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/alb.png\"\n                            },\n                            \"item_name\": \"585\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Albania\"\n                        },\n                        {\n                            \"id\": \"782c9957-cdc1-4de3-ac83-ecd33e351307\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/aut.png\"\n                            },\n                            \"item_name\": \"474\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Austria\"\n                        },\n                        {\n                            \"id\": \"cf08b52c-25bb-496b-beee-c09886593721\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/bel.png\"\n                            },\n                            \"item_name\": \"459\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bélgica\"\n                        },\n                        {\n                            \"id\": \"d4c883db-6ded-4ab3-af67-35ec30a85cf7\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cro.png\"\n                            },\n                            \"item_name\": \"477\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Croacia\"\n                        },\n                        {\n                            \"id\": \"19bc6e13-d059-43a1-8adb-4781851f5de4\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/cze.png\"\n                            },\n                            \"item_name\": \"450\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"República checa\"\n                        },\n                        {\n                            \"id\": \"b8363b81-3b2e-454c-b873-1a27100ea52b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/den.png\"\n                            },\n                            \"item_name\": \"479\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Dinamarca\"\n                        },\n                        {\n                            \"id\": \"eff32061-1077-465c-af39-1eb6f3a2ede9\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/eng.png\"\n                            },\n                            \"item_name\": \"448\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Inglaterra\"\n                        },\n                        {\n                            \"id\": \"74028b95-7002-4f9a-a7d2-cf0780621258\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/fra.png\"\n                            },\n                            \"item_name\": \"478\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Francia\"\n                        },\n                        {\n                            \"id\": \"a9f2c5be-a616-4ec1-ac50-fb50b35cdbcb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ger.png\"\n                            },\n                            \"item_name\": \"481\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Alemania\"\n                        },\n                        {\n                            \"id\": \"88ba42ca-ee03-4ab3-a631-b270bd8b238b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/hun.png\"\n                            },\n                            \"item_name\": \"480\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Hungría\"\n                        },\n                        {\n                            \"id\": \"005b0598-c5a7-4038-9cc6-b4f7eef5c5ca\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ita.png\"\n                            },\n                            \"item_name\": \"162\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Italia\"\n                        },\n                        {\n                            \"id\": \"8610f144-74a3-4b6d-8f56-074910e4f44c\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/ned.png\"\n                            },\n                            \"item_name\": \"449\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Holanda\"\n                        },\n                        {\n                            \"id\": \"452c9497-160b-4067-8c1e-e43953b07e5a\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/por.png\"\n                            },\n                            \"item_name\": \"482\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Portugal\"\n                        },\n                        {\n                            \"id\": \"abd00d4b-d954-4edb-a62c-b7e36b72a645\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/rom.png\"\n                            },\n                            \"item_name\": \"473\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Rumanía\"\n                        },\n                        {\n                            \"id\": \"203a28ce-cf49-48a1-80e2-7632d6842b9b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sco.png\"\n                            },\n                            \"item_name\": \"580\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Escocia\"\n                        },\n                        {\n                            \"id\": \"4a4a11ce-8041-46a6-852b-581d7fce1714\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sba.png\"\n                            },\n                            \"item_name\": \"6757\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Serbia\"\n                        },\n                        {\n                            \"id\": \"e2e3fd85-58f0-40bf-a187-8dc6b5d15200\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/svk.png\"\n                            },\n                            \"item_name\": \"468\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Eslovaquía\"\n                        },\n                        {\n                            \"id\": \"c3ffd993-58fb-4612-b918-b445ac8549eb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/svn.png\"\n                            },\n                            \"item_name\": \"472\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Eslovenia\"\n                        },\n                        {\n                            \"id\": \"8d9cabe1-b294-4f45-9168-9df5c1f4d443\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/esp.png\"\n                            },\n                            \"item_name\": \"164\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"España\"\n                        },\n                        {\n                            \"id\": \"5bf103b0-625d-4b7a-bfe5-c2287c52abb8\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/sui.png\"\n                            },\n                            \"item_name\": \"475\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Suiza\"\n                        },\n                        {\n                            \"id\": \"4ddb378a-618a-4146-b175-a4f6126e3661\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/countries/500/tur.png\"\n                            },\n                            \"item_name\": \"465\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Turquía\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/74.png\"\n                }\n            },\n            {\n                \"id\": \"8e462b15-1493-4075-b704-1aa9bf3c7d7f\",\n                \"catalog\": \"88e526fa-1a57-4e70-9284-cd982e8155d0\",\n                \"item_name\": \"uefa.champions\",\n                \"description\": \"UEFA Champions League\",\n                \"metadata\": {\n                    \"fbid\": \"uefa.champions\",\n                    \"teams\": [\n                        {\n                            \"id\": \"78feb88f-536a-40ff-940c-c73ec9876624\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/103.png\"\n                            },\n                            \"item_name\": \"103\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"AC Milan\"\n                        },\n                        {\n                            \"id\": \"9ec44086-78ad-4900-9112-72d98f86a8e4\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/174.png\"\n                            },\n                            \"item_name\": \"174\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"AS Monaco\"\n                        },\n                        {\n                            \"id\": \"e08ee200-2d89-4b32-ba8c-111732fbc501\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/359.png\"\n                            },\n                            \"item_name\": \"359\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Arsenal\"\n                        },\n                        {\n                            \"id\": \"7bf32603-5801-41df-a69b-95a05571d7c9\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/362.png\"\n                            },\n                            \"item_name\": \"362\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Aston Villa\"\n                        },\n                        {\n                            \"id\": \"b0e4c1eb-02ee-47d0-9712-732d239737cb\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/105.png\"\n                            },\n                            \"item_name\": \"105\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Atalanta\"\n                        },\n                        {\n                            \"id\": \"c8a4ed8c-b1f4-449e-b755-996bde9c0e70\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/1068.png\"\n                            },\n                            \"item_name\": \"1068\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Atlético Madrid\"\n                        },\n                        {\n                            \"id\": \"ce430e8f-d3ba-4b51-a599-fee3295d49e2\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/83.png\"\n                            },\n                            \"item_name\": \"83\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Barcelona\"\n                        },\n                        {\n                            \"id\": \"5aee861f-d1bd-4004-9bf0-a044f027d935\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/131.png\"\n                            },\n                            \"item_name\": \"131\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bayer Leverkusen\"\n                        },\n                        {\n                            \"id\": \"4513e759-de54-477b-83dd-9122c7008b43\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/132.png\"\n                            },\n                            \"item_name\": \"132\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bayern Munich\"\n                        },\n                        {\n                            \"id\": \"378b4fe7-7328-4e09-bc1d-427939bef951\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/1929.png\"\n                            },\n                            \"item_name\": \"1929\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Benfica\"\n                        },\n                        {\n                            \"id\": \"b9e016a2-be79-44b3-9631-b7e1974fc293\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/107.png\"\n                            },\n                            \"item_name\": \"107\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Bologna\"\n                        },\n                        {\n                            \"id\": \"0aaeb3a2-071b-40c5-a661-e5129483b513\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/124.png\"\n                            },\n                            \"item_name\": \"124\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Borussia Dortmund\"\n                        },\n                        {\n                            \"id\": \"1fafe2c3-fcd6-48e4-a8e3-929db98c0d9f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/6997.png\"\n                            },\n                            \"item_name\": \"6997\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Brest\"\n                        },\n                        {\n                            \"id\": \"39725ef4-79ed-4326-ab7c-da423f45a964\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/256.png\"\n                            },\n                            \"item_name\": \"256\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Celtic\"\n                        },\n                        {\n                            \"id\": \"c7a6628b-7404-4864-8bda-96e63a559e4a\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/570.png\"\n                            },\n                            \"item_name\": \"570\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Club Brugge\"\n                        },\n                        {\n                            \"id\": \"8d64b981-229c-46b8-b0d2-8bc0d189b75d\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/597.png\"\n                            },\n                            \"item_name\": \"597\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Dinamo Zagreb\"\n                        },\n                        {\n                            \"id\": \"8aa2aad9-8453-4ea0-b4df-3bff96a4f5c8\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/142.png\"\n                            },\n                            \"item_name\": \"142\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Feyenoord Rotterdam\"\n                        },\n                        {\n                            \"id\": \"87fd56fd-f61e-496a-959f-124d7bc30eb4\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/9812.png\"\n                            },\n                            \"item_name\": \"9812\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Girona\"\n                        },\n                        {\n                            \"id\": \"2a4f537e-2aee-41f0-96e1-ebe412a93260\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/110.png\"\n                            },\n                            \"item_name\": \"110\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Internazionale\"\n                        },\n                        {\n                            \"id\": \"ba4bddaa-7136-48cd-a584-e49e5330ab57\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/111.png\"\n                            },\n                            \"item_name\": \"111\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Juventus\"\n                        },\n                        {\n                            \"id\": \"b1c0469b-8596-4535-95d4-61c20f3cbdfe\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/166.png\"\n                            },\n                            \"item_name\": \"166\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Lille\"\n                        },\n                        {\n                            \"id\": \"bb909bee-7322-4bec-8f62-f63155467791\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/364.png\"\n                            },\n                            \"item_name\": \"364\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Liverpool\"\n                        },\n                        {\n                            \"id\": \"f07b9539-924e-4ad3-88d5-2837028e1926\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/382.png\"\n                            },\n                            \"item_name\": \"382\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Manchester City\"\n                        },\n                        {\n                            \"id\": \"56999891-ffa7-433c-91a4-49861d1aa313\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/148.png\"\n                            },\n                            \"item_name\": \"148\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"PSV Eindhoven\"\n                        },\n                        {\n                            \"id\": \"c161134a-ce97-4021-a130-9995d3b26978\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/160.png\"\n                            },\n                            \"item_name\": \"160\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Paris Saint-Germain\"\n                        },\n                        {\n                            \"id\": \"34197deb-0903-4395-8739-4e97ebfa6c78\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/11420.png\"\n                            },\n                            \"item_name\": \"11420\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"RB Leipzig\"\n                        },\n                        {\n                            \"id\": \"f27ddf2d-4dd9-4ffd-bdc8-0a6bdbabd2f6\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2790.png\"\n                            },\n                            \"item_name\": \"2790\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"RB Salzburg\"\n                        },\n                        {\n                            \"id\": \"509b6efc-26bc-4fb6-8a19-7ad7fbf8cfab\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/86.png\"\n                            },\n                            \"item_name\": \"86\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Real Madrid\"\n                        },\n                        {\n                            \"id\": \"8f580e54-478c-4eb4-9bd3-ce6e04e38ae6\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2290.png\"\n                            },\n                            \"item_name\": \"2290\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Red Star Belgrade\"\n                        },\n                        {\n                            \"id\": \"1c3fb3d3-99bc-4095-ab00-0acd62606551\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/3746.png\"\n                            },\n                            \"item_name\": \"3746\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"SK Sturm Graz\"\n                        },\n                        {\n                            \"id\": \"5e4ebacb-0bde-43de-af56-b1295d2b59bd\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/493.png\"\n                            },\n                            \"item_name\": \"493\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Shakhtar Donetsk\"\n                        },\n                        {\n                            \"id\": \"9648c841-1449-4453-bf5c-b18585fd7b38\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/521.png\"\n                            },\n                            \"item_name\": \"521\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Slovan Bratislava\"\n                        },\n                        {\n                            \"id\": \"238279c8-fb09-4681-a4ac-bf0617e161e5\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/433.png\"\n                            },\n                            \"item_name\": \"433\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Sparta Prague\"\n                        },\n                        {\n                            \"id\": \"45b5adf9-20bd-4129-a3dd-6d174746402b\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2250.png\"\n                            },\n                            \"item_name\": \"2250\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Sporting CP\"\n                        },\n                        {\n                            \"id\": \"c919ac5b-fd94-49c1-afaf-d28d9eca831f\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/134.png\"\n                            },\n                            \"item_name\": \"134\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"VfB Stuttgart\"\n                        },\n                        {\n                            \"id\": \"99f39be8-2f8b-4535-8504-6b5cde5e8170\",\n                            \"metadata\": {\n                                \"img_url\": \"https://a.espncdn.com/i/teamlogos/soccer/500/2722.png\"\n                            },\n                            \"item_name\": \"2722\",\n                            \"catalog_id\": \"3df1b64c-4f78-4355-8844-a39c0309eca9\",\n                            \"description\": \"Young Boys\"\n                        }\n                    ],\n                    \"img_url\": \"https://a.espncdn.com/i/leaguelogos/soccer/500/2.png\"\n                }\n            }\n        ],\n        \"catalog_name\": \"soccer_leagues\",\n        \"description\": \"Ligas de futbol\"\n    },\n    {\n        \"id\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n        \"items\": [\n            {\n                \"id\": \"dc7fa382-d3a7-4900-9af3-d633b8cfb8d2\",\n                \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n                \"item_name\": \"migrated_payment\",\n                \"description\": \"Payments que se generaron al momento de importar los usuarios y toda su información por primera vez.\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"62fee3fe-6484-44e0-bb73-3c308f0b055d\",\n                \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n                \"item_name\": \"external_movements\",\n                \"description\": \"Pagos que reflejan movimientos realizados en cuentas meta a traves de otros canales bancarios\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"862f49cf-acc0-48df-ae6d-0ac26e8a8afc\",\n                \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n                \"item_name\": \"internal_transfer\",\n                \"description\": \"Payments generados por movimientos internos entre metas del usuario\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/internal_transfer.svg\",\n                    \"color\": \"#329B0B\",\n                    \"title\": \"Transferencia a meta\"\n                }\n            },\n            {\n                \"id\": \"726bdff2-d3fb-4c08-82eb-fcd824a8669e\",\n                \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n                \"item_name\": \"finantial_readjustment\",\n                \"description\": \"Payments generados por procesos de reajustes de inflación en las cuenta\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/readjustment.svg\",\n                    \"color\": \"#329B0B\",\n                    \"title\": \"Reajuste\"\n                }\n            },\n            {\n                \"id\": \"35d30395-135e-4b97-b24d-cbe5ad2354ca\",\n                \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n                \"item_name\": \"finantial_interests\",\n                \"description\": \"Payments generedados por procesos de intereses financieros en las cuentas\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/interests.svg\",\n                    \"color\": \"#329B0B\",\n                    \"title\": \"Intereses\"\n                }\n            },\n            {\n                \"id\": \"f6adcf1e-d2cb-466c-89fb-f906148d37b1\",\n                \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n                \"item_name\": \"manual_withdrawal\",\n                \"description\": \"Pagos generados automaticamente cuando los usuarios realizan retiros manuales de sus metas\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/manual_withdrawal.svg\",\n                    \"color\": \"#FF5F54\",\n                    \"title\": \"Retiro exitoso\"\n                }\n            },\n            {\n                \"id\": \"636057ca-a138-4450-88fe-18252fac506e\",\n                \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n                \"item_name\": \"manual_saving\",\n                \"description\": \"Payments que se generan bajo demanda ante los retiros o abonos manuales de los usuarios en las metas\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\",\n                    \"color\": \"#329B0B\",\n                    \"title\": \"Abono exitoso\"\n                }\n            },\n            {\n                \"id\": \"42211161-d36d-4e52-9b48-fd677c215101\",\n                \"catalog\": \"8b306f6b-69e8-4043-b6d7-3561a05a234f\",\n                \"item_name\": \"internal_transfer_withdrawal\",\n                \"description\": \"Payments generados por procesos de reajustes de inflación en las cuenta\",\n                \"metadata\": {}\n            }\n        ],\n        \"catalog_name\": \"payment_source\",\n        \"description\": \"Origen de un payment\"\n    },\n    {\n        \"id\": \"a9143cc9-b73c-4b05-866f-f2b993fe6fe7\",\n        \"items\": [\n            {\n                \"id\": \"1fd49a5a-e0a1-477b-9a6a-9a2ef0bf503c\",\n                \"catalog\": \"a9143cc9-b73c-4b05-866f-f2b993fe6fe7\",\n                \"item_name\": \"saving_amounts\",\n                \"description\": \"Montos ahorros predefinidos\",\n                \"metadata\": {\n                    \"amounts\": [\n                        1,\n                        2,\n                        5,\n                        10,\n                        20,\n                        50,\n                        100\n                    ],\n                    \"currency\": \"USD\"\n                }\n            }\n        ],\n        \"catalog_name\": \"predefined_amounts\",\n        \"description\": \"Montos predefinidos\"\n    },\n    {\n        \"id\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n        \"items\": [\n            {\n                \"id\": \"2691c3e2-08d4-4413-aa3e-eafccd9e9d49\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_completed\",\n                \"description\": \"Meta completada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/completed.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_COMPLETED\"\n                }\n            },\n            {\n                \"id\": \"8df908b6-8ab3-11ed-a1eb-0242ac120002\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_setup\",\n                \"description\": \"Meta en configuracion\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_active\",\n                \"description\": \"Meta activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n                }\n            },\n            {\n                \"id\": \"487dd0e9-7294-416d-b06f-828e2ecf25bf\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_deleted\",\n                \"description\": \"Meta eliminada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/deleted.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_DELETED\"\n                }\n            },\n            {\n                \"id\": \"794fb606-84d0-4b65-9e95-5057a5e24ef5\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_finished\",\n                \"description\": \"Meta finalizada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/finished.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_FINISHED\"\n                }\n            }\n        ],\n        \"catalog_name\": \"project_status\",\n        \"description\": \"Estado de la meta\"\n    },\n    {\n        \"id\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n        \"items\": [\n            {\n                \"id\": \"5f342655-bf27-4523-aa32-40d7cb48ae38\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Subvención\",\n                \"description\": \"Pensión, becas, subvención y ayudas familiares\",\n                \"metadata\": {\n                    \"icon\": \"assets/img/category/income.svg\",\n                    \"color\": \"#0E891A\",\n                    \"active\": true,\n                    \"short_name\": \"SUBVENCION\"\n                }\n            },\n            {\n                \"id\": \"763d39ca-45e8-4171-8a97-29ba9a37665c\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Regalos y otros ingresos\",\n                \"description\": \"Regalos hechos por transferencias y otros ingresos\",\n                \"metadata\": {\n                    \"icon\": \"assets/img/category/income.svg\",\n                    \"color\": \"#0E891A\",\n                    \"active\": true,\n                    \"short_name\": \"REGALOS_OTROS_INGRESOS\"\n                }\n            },\n            {\n                \"id\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b2\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Rentas y arriendos\",\n                \"description\": \"Ingresos por arriendos de muebles e inmuebles\",\n                \"metadata\": {\n                    \"icon\": \"assets/img/category/income.svg\",\n                    \"color\": \"#0E891A\",\n                    \"active\": true,\n                    \"short_name\": \"RENTAS_ARRIENDOS\"\n                }\n            },\n            {\n                \"id\": \"3954361d-ddf5-46dc-a8f8-af98ee9811da\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Sueldo\",\n                \"description\": \"Sueldos, salarios, honorarios e ingresos por trabajo\",\n                \"metadata\": {\n                    \"icon\": \"assets/img/category/income.svg\",\n                    \"color\": \"#0E891A\",\n                    \"active\": true,\n                    \"short_name\": \"SUELDO\"\n                }\n            },\n            {\n                \"id\": \"8ebba319-0042-41ff-bdbb-ba05cd824d52\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Transferencias\",\n                \"description\": \"Transferencias, depósitos y reembolsos recibidos\",\n                \"metadata\": {\n                    \"icon\": \"assets/img/category/income.svg\",\n                    \"color\": \"#0E891A\",\n                    \"active\": true,\n                    \"short_name\": \"TRANSFERENCIAS\"\n                }\n            },\n            {\n                \"id\": \"593cea05-8f4d-4b40-ad1b-d73e43c8d53d\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Devolución de impuestos\",\n                \"description\": \"Devoluciones del Servicio de Impuestos Internos\",\n                \"metadata\": {\n                    \"icon\": \"assets/img/category/income.svg\",\n                    \"color\": \"#0E891A\",\n                    \"active\": true,\n                    \"short_name\": \"DEVOLUCION_IMPUESTOS\"\n                }\n            },\n            {\n                \"id\": \"e131ca4e-28d2-48fc-ab73-ea92e48b084f\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Rendimientos\",\n                \"description\": \"Pago de dividendos e intereses ganados\",\n                \"metadata\": {\n                    \"icon\": \"assets/img/category/income.svg\",\n                    \"color\": \"#0E891A\",\n                    \"active\": true,\n                    \"short_name\": \"RENDIMIENTOS\"\n                }\n            }\n        ],\n        \"catalog_name\": \"incomes_categories\",\n        \"description\": \"Categorías de ingresos\"\n    },\n    {\n        \"id\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n        \"items\": [\n            {\n                \"id\": \"237e7a4f-a7ed-4d59-8fee-22c1b1965447\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"without-permission_edit_fields\",\n                \"description\": \"Meta express saving configuration\",\n                \"metadata\": {\n                    \"limit\": 3,\n                    \"default\": false,\n                    \"available\": true,\n                    \"access_denied\": {\n                        \"project_detail_view\": [\n                            \"PATCH\"\n                        ],\n                        \"set_active_project_view\": [\n                            \"PATCH\"\n                        ],\n                        \"set_accounts_project_view\": [\n                            \"PATCH\"\n                        ]\n                    }\n                }\n            },\n            {\n                \"id\": \"11abc328-f996-49bd-82b1-ca9b81dc12cc\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"xerpa_plus\",\n                \"description\": \"meta xerpa plus\",\n                \"metadata\": {\n                    \"info\": {\n                        \"return_rate\": 10\n                    },\n                    \"name\": \"Xerpa plus\",\n                    \"limit\": 1,\n                    \"default\": false,\n                    \"available\": true,\n                    \"access_denied\": {\n                        \"project_detail_view\": [\n                            \"PATCH\",\n                            \"DELETE\"\n                        ]\n                    },\n                    \"permission_edit_fields\": [\n                        \"progress\",\n                        \"processing\",\n                        \"from_account\",\n                        \"to_account\",\n                        \"pending\"\n                    ],\n                    \"fields_required_to_create\": [\n                        \"to_account\",\n                        \"from_account\",\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\",\n                        \"project_config_id\",\n                        \"project_category_id\"\n                    ]\n                }\n            },\n            {\n                \"id\": \"81c533a9-f73e-4994-9018-612456798101\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"saving-meta-express\",\n                \"description\": \"Meta express saving configuration\",\n                \"metadata\": {\n                    \"limit\": 3,\n                    \"default\": false,\n                    \"available\": true,\n                    \"access_denied\": {\n                        \"project_detail_view\": [\n                            \"PATCH\"\n                        ],\n                        \"set_active_project_view\": [\n                            \"PATCH\"\n                        ],\n                        \"set_accounts_project_view\": [\n                            \"PATCH\"\n                        ]\n                    },\n                    \"permission_edit_fields\": [\n                        \"project_name\"\n                    ],\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"from_account\",\n                        \"to_account\",\n                        \"project_config_id\",\n                        \"project_category_id\"\n                    ]\n                }\n            },\n            {\n                \"id\": \"4476b8d9-4a81-4653-a6d9-fd49de587290\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"saving-meta-express\",\n                \"description\": \"Meta express saving configuration\",\n                \"metadata\": {\n                    \"limit\": 3,\n                    \"default\": false,\n                    \"available\": true,\n                    \"access_denied\": {\n                        \"set_active_project_view\": [\n                            \"PATCH\"\n                        ],\n                        \"set_accounts_project_view\": [\n                            \"PATCH\"\n                        ]\n                    },\n                    \"permission_edit_fields\": null,\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"from_account\",\n                        \"to_account\",\n                        \"project_category_id\",\n                        \"project_config_id\"\n                    ]\n                }\n            },\n            {\n                \"id\": \"1de6824d-fef2-4e55-b350-5a53b8467f8b\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"multiple-urls-denied\",\n                \"description\": \"create without project_name\",\n                \"metadata\": {\n                    \"limit\": 3,\n                    \"default\": false,\n                    \"available\": true,\n                    \"access_denied\": {\n                        \"rule_list_view\": [\n                            \"GET\"\n                        ],\n                        \"rule_detail_view\": [\n                            \"PATCH\",\n                            \"GET\"\n                        ],\n                        \"activity_list_view\": [\n                            \"GET\"\n                        ],\n                        \"payments_recent_view\": [\n                            \"GET\"\n                        ],\n                        \"rule_activities_list_view\": [\n                            \"GET\"\n                        ],\n                        \"project_manual_saving_view\": [\n                            \"GET\",\n                            \"POST\"\n                        ],\n                        \"project_manual_withdrawal_view\": [\n                            \"GET\",\n                            \"POST\"\n                        ]\n                    },\n                    \"permission_edit_fields\": [\n                        \"project_name\",\n                        \"from_account\",\n                        \"progress\"\n                    ],\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"from_account\",\n                        \"to_account\"\n                    ]\n                }\n            },\n            {\n                \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"xerpa_project\",\n                \"description\": \"Meta default 212\",\n                \"metadata\": {\n                    \"limit\": null,\n                    \"default\": true,\n                    \"available\": true,\n                    \"access_denied\": {},\n                    \"permission_edit_fields\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ],\n                    \"allows_receive_transfers\": true,\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ]\n                }\n            },\n            {\n                \"id\": \"4d69042e-0e9a-4cb5-842f-d117578b5d77\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"finsus_colaborador\",\n                \"description\": \"meta finsus colaborador\",\n                \"metadata\": {\n                    \"limit\": 3,\n                    \"default\": false,\n                    \"available\": true,\n                    \"access_denied\": {\n                        \"project_detail_view\": [\n                            \"PATCH\",\n                            \"DELETE\"\n                        ],\n                        \"set_active_project_view\": [\n                            \"PATCH\"\n                        ],\n                        \"set_accounts_project_view\": [\n                            \"PATCH\"\n                        ]\n                    },\n                    \"permission_edit_fields\": [\n                        \"progress\",\n                        \"processing\",\n                        \"from_account\",\n                        \"to_account\",\n                        \"pending\"\n                    ],\n                    \"fields_required_to_create\": [\n                        \"to_account\",\n                        \"from_account\",\n                        \"project_name\",\n                        \"goal_date\",\n                        \"project_goal\",\n                        \"total\",\n                        \"project_config_id\",\n                        \"project_category_id\",\n                        \"project_status_id\"\n                    ]\n                }\n            }\n        ],\n        \"catalog_name\": \"project_config\",\n        \"description\": \"Tipo de metas de ahorro\"\n    },\n    {\n        \"id\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n        \"items\": [\n            {\n                \"id\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_ahorro\",\n                \"description\": \"Cuenta Ahorro\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_ahorro.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAAHORRO\"\n                }\n            },\n            {\n                \"id\": \"18743d7e-4fee-4e13-b2fc-00f86d8f8511\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_inversion\",\n                \"description\": \"Cuenta Inversión\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_inversion.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAINVERSION\"\n                }\n            },\n            {\n                \"id\": \"d9a4b159-8e15-48ea-aa88-72f1c21bb0d0\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"tarjeta_debito\",\n                \"description\": \"Tarjeta Débito\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/tarjeta_debito.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"TARJETADEBITO\"\n                }\n            },\n            {\n                \"id\": \"e655b55f-e39c-49c0-a77e-aed53e1b5d15\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"tarjeta_credito\",\n                \"description\": \"Tarjeta Crédito\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/tarjeta_credito.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"TARJETACREDITO\"\n                }\n            },\n            {\n                \"id\": \"c3efbc57-f8c5-4cca-be34-79d520423dd6\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"AHO\",\n                \"description\": \"AHO\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/AHO.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"AHO\"\n                }\n            },\n            {\n                \"id\": \"f3029ccb-8f07-4c15-a55d-5fc628cc4230\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_corriente\",\n                \"description\": \"Cuenta Corriente\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/products/cc.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTACORRIENTE\"\n                }\n            },\n            {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            }\n        ],\n        \"catalog_name\": \"accounts_types\",\n        \"description\": \"Tipos de cuentas\"\n    },\n    {\n        \"id\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n        \"items\": [\n            {\n                \"id\": \"b2dbc1e9-7ded-4650-930b-d4903875debd\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_saving_fix_amount\",\n                \"description\": \"Regla ejecutada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                    \"title\": \"Monto fijo\",\n                    \"message\": \"Ahorro {rule.get_execution_frequency_display}\"\n                }\n            },\n            {\n                \"id\": \"1a9e5ec2-c0c2-474b-9280-b770343636b6\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_rule_activated\",\n                \"description\": \"Regla activada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/play_circle.svg\"\n                }\n            },\n            {\n                \"id\": \"087febc2-6f28-4f64-810f-e358019efba6\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_project_created\",\n                \"description\": \"Meta creada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/add_circle.svg\",\n                    \"title\": \"Meta creada\",\n                    \"message\": \"Creaste una meta {project.project_category.metadata.name}.\"\n                }\n            },\n            {\n                \"id\": \"67793a9c-68f1-4b46-9801-d87fe2afc46a\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_payment_expired\",\n                \"description\": \"Pago expirado\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/expired_circle.svg\"\n                }\n            },\n            {\n                \"id\": \"b12f82ad-c915-4346-971d-8c8fdda86091\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_saving_guilty_pleasure\",\n                \"description\": \"Regla ejecutada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                    \"title\": \"Placer culpable\",\n                    \"message\": \"Compras en {rule.transaction_category.item_name}\"\n                }\n            },\n            {\n                \"id\": \"ae84eb55-038c-4297-bc6d-34afcbec6730\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_rule_created\",\n                \"description\": \"Regla creada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/add_circle.svg\",\n                    \"title\": \"Regla creada\",\n                    \"message\": \"La regla {rule.rule_type.metadata.name} fue creada.\"\n                }\n            },\n            {\n                \"id\": \"f8eeaed6-98ef-4693-91d7-e51e8e9aef4c\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_rule_edited\",\n                \"description\": \"Regla editada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/edit_circle.svg\",\n                    \"title\": \"Regla editada\",\n                    \"message\": \"La regla {rule.rule_type.metadata.name} fue editada.\"\n                }\n            },\n            {\n                \"id\": \"8fd1bd18-4da3-4a17-bc29-89e022b2b111\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_saving_soccer_passion\",\n                \"description\": \"Regla ejecutada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                    \"title\": \"Pasión futbolera\",\n                    \"message\": {\n                        \"A\": \"Regla pasión futbolera por gol de {rule.soccer_team.description}\",\n                        \"E\": \"Regla pasión futbolera por empate de {rule.soccer_team.description}\",\n                        \"G\": \"Regla pasión futbolera por triunfo de {rule.soccer_team.description}\",\n                        \"J\": \"Regla pasión futbolera por juego de {rule.soccer_team.description}\"\n                    }\n                }\n            },\n            {\n                \"id\": \"8425ae8b-7cfd-415b-bb47-18e1ef4e25cd\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event\",\n                \"description\": \"Evento generado por el usuario\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/activities/event.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"ACTIVITY_TYPE_EVENT\"\n                }\n            },\n            {\n                \"id\": \"9ce938e7-46ca-4ba9-a15e-9c9421e131eb\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_project_finished\",\n                \"description\": \"Meta finalizada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\",\n                    \"title\": \"Meta completada\",\n                    \"message\": \"La meta se completó exitosamente.\"\n                }\n            },\n            {\n                \"id\": \"695136d2-9217-4622-a5f8-9eaf7b99e23e\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_project_deleted\",\n                \"description\": \"Meta eliminada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/expired_circle.svg\"\n                }\n            },\n            {\n                \"id\": \"fb472d6a-3916-4836-bbf8-3433b03213fe\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_project_edited\",\n                \"description\": \"Meta modificada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/edit_circle.svg\",\n                    \"title\": \"Meta editada\",\n                    \"message\": \"La meta fue editada.\"\n                }\n            },\n            {\n                \"id\": \"5dd0c2cf-a146-409d-b5bc-1f1f5d8176de\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_rule_paused\",\n                \"description\": \"Regla pausada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/pause_circle.svg\",\n                    \"title\": \"Regla pausada\",\n                    \"message\": \"La regla {rule.rule_type.metadata.name} fue pausada.\"\n                }\n            },\n            {\n                \"id\": \"72825587-ee40-43aa-97b4-fa42eb563b17\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_saving_roundup\",\n                \"description\": \"Regla ejecutada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                    \"title\": \"Redondear\",\n                    \"message\": \"Redondeo hacia $1.000 superior\"\n                }\n            },\n            {\n                \"id\": \"6b567b88-1519-4382-849d-47ed00230be9\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_saving_fixed_salary\",\n                \"description\": \"Regla ejecutada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                    \"title\": \"Porcentaje del sueldo\",\n                    \"message\": \"Ahorro del {rule.salary_percentage}% de mi salario\"\n                }\n            },\n            {\n                \"id\": \"517649ee-f77e-4936-a640-82a7b65c7863\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_saving_52_weeks\",\n                \"description\": \"Regla ejecutada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                    \"title\": \"Desafío 52 Semanas\",\n                    \"message\": \"Ahorra $1.000 la primera semana, $2.000 la segunda y así hasta la semana 52\"\n                }\n            },\n            {\n                \"id\": \"8c49fcb8-d6bf-43f5-8a89-24c6dfeb8894\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_saving\",\n                \"description\": \"Evento generado por las reglas de ahorro\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/activities/saving.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"ACTIVITY_TYPE_SAVING\"\n                }\n            },\n            {\n                \"id\": \"e785688c-0614-4c8a-8ff7-5b8f770328c7\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_payment_low_balance\",\n                \"description\": \"Banlance bajo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/alert_circle.svg\"\n                }\n            },\n            {\n                \"id\": \"014c54b4-3578-42b9-84be-a516d894b8f6\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_payment_done\",\n                \"description\": \"Pago realizado\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\"\n                }\n            },\n            {\n                \"id\": \"54c4c77a-f678-4be9-8fd5-d1b25f1a8323\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_rule_deleted\",\n                \"description\": \"Regla eliminada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/add_circle.svg\",\n                    \"title\": \"Regla eliminada\",\n                    \"message\": \"La regla {rule.rule_type.metadata.name} fue eliminada.\"\n                }\n            },\n            {\n                \"id\": \"954f74cc-8d2e-4b90-87d4-a71cf8ca995f\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_payment_error_expired\",\n                \"description\": \"Ahorro expirado por error\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/alert_circle.svg\",\n                    \"title\": \"Abono Expirado\",\n                    \"footer\": \"\",\n                    \"message\": \"\"\n                }\n            },\n            {\n                \"id\": \"2aab216e-35c9-4e00-9d45-162cad7c4190\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_payment_low_balance_limit_expired\",\n                \"description\": \"Ahorro expirado por balance bajo limite\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/alert_circle.svg\",\n                    \"title\": \"Abono Expirado\",\n                    \"footer\": \"\",\n                    \"message\": \"\"\n                }\n            },\n            {\n                \"id\": \"6012b422-7861-4f42-a6d3-b279daaa0b9d\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_payment_low_balance_limit\",\n                \"description\": \"Banlance bajo en cuenta\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"f3ff001f-0395-4b1a-b8de-ce72b8f2c365\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_payment_low_balance_expired\",\n                \"description\": \"Ahorro expirado por balance bajo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/alert_circle.svg\",\n                    \"title\": \"Abono Expirado\",\n                    \"footer\": \"\",\n                    \"message\": \"\"\n                }\n            },\n            {\n                \"id\": \"a7c40e1b-5169-417c-8572-ccd37c821ecc\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_payment_error\",\n                \"description\": \"Pago error\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/alert_circle.svg\"\n                }\n            },\n            {\n                \"id\": \"191ff7c3-29a7-4974-8d5a-0a777cf00e51\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_manual_withdrawal\",\n                \"description\": \"Regla ejecutada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/withdrawal.svg\",\n                    \"title\": \"Retiro manual\",\n                    \"message\": \"Retiró de la meta\"\n                }\n            },\n            {\n                \"id\": \"7e98b933-a77a-41a7-ad23-425531770cfb\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_manual_saving\",\n                \"description\": \"Regla ejecutada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/payment.svg\",\n                    \"title\": \"Abono manual\",\n                    \"message\": \"Abonó a una meta\"\n                }\n            },\n            {\n                \"id\": \"5555dbac-e4df-4295-b319-9a330e0d3a1c\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_readjustments\",\n                \"description\": \"Regla ejecutada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/invesment.svg\",\n                    \"title\": \"Ajustes mensual\",\n                    \"footer\": \"\",\n                    \"message\": \"Ahorro por {amount}\"\n                }\n            },\n            {\n                \"id\": \"2c8bf67d-5730-48cc-ac0b-0e8207b99519\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_event_payment_done\",\n                \"description\": \"Pago realizado\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\"\n                }\n            },\n            {\n                \"id\": \"9d46f2fc-9986-423d-8cd6-39c9a9253d5c\",\n                \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n                \"item_name\": \"activity_type_investment_returns\",\n                \"description\": \"Regla ejecutada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/invesment.svg\",\n                    \"title\": \"Intereces mensual\",\n                    \"footer\": \"\",\n                    \"message\": \"Ahorro por {amount}\"\n                }\n            }\n        ],\n        \"catalog_name\": \"activity_type\",\n        \"description\": \"Tipo de actividad\"\n    },\n    {\n        \"id\": \"fe431414-e746-48cb-ac16-4d06db2b85e8\",\n        \"items\": [\n            {\n                \"id\": \"54abf65b-92f2-4746-9435-215ccdf41bac\",\n                \"catalog\": \"fe431414-e746-48cb-ac16-4d06db2b85e8\",\n                \"item_name\": \"saving_status_pending\",\n                \"description\": \"Saving pendiente de ser asociado a un payment\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"5b97ffae-42d1-4603-a292-4b5825b1215b\",\n                \"catalog\": \"fe431414-e746-48cb-ac16-4d06db2b85e8\",\n                \"item_name\": \"saving_status_processing\",\n                \"description\": \"Saving en proceso de respuesta desde el banco\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"d54ae7d4-4db4-4f48-82ef-62ad326d4e12\",\n                \"catalog\": \"fe431414-e746-48cb-ac16-4d06db2b85e8\",\n                \"item_name\": \"saving_status_deleted\",\n                \"description\": \"Saving eliminado\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"4da17829-6b38-4700-9811-89cbae91140d\",\n                \"catalog\": \"fe431414-e746-48cb-ac16-4d06db2b85e8\",\n                \"item_name\": \"saving_status_expired_by_error\",\n                \"description\": \"Ahorro expirado por error\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"789316b7-354a-49a1-90e8-3baf297de970\",\n                \"catalog\": \"fe431414-e746-48cb-ac16-4d06db2b85e8\",\n                \"item_name\": \"saving_status_expired_by_low_balance\",\n                \"description\": \"Ahorro expirado por balance bajo\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"4c2e1749-4c6e-4bf3-a2c7-7b5b4ef94c40\",\n                \"catalog\": \"fe431414-e746-48cb-ac16-4d06db2b85e8\",\n                \"item_name\": \"saving_status_expired\",\n                \"description\": \"Saving Status Test\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"7660bd44-e4f8-42e8-8969-10d120bfbe9f\",\n                \"catalog\": \"fe431414-e746-48cb-ac16-4d06db2b85e8\",\n                \"item_name\": \"saving_status_done\",\n                \"description\": \"El monto del ahorro generado se transfirió a la cuenta de destino\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"1f2abf3e-4542-4bc5-9c6f-181eeb14ac71\",\n                \"catalog\": \"fe431414-e746-48cb-ac16-4d06db2b85e8\",\n                \"item_name\": \"saving_status_expired_by_low_balance_limit\",\n                \"description\": \"Ahorro expirado por balance bajo\",\n                \"metadata\": {}\n            }\n        ],\n        \"catalog_name\": \"saving_status\",\n        \"description\": \"Estado del Ahorro\"\n    }\n]"}],"_postman_id":"d84e94d3-7980-467d-9dfc-b14100d86263"},{"name":"Lista de items por catálogo","event":[{"listen":"test","script":{"id":"29ddfa64-f551-4ade-a584-59c7895b6575","exec":[" const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    project_type: 'array',\r","    activity_type: 'array'\r","};\r","\r","const projectTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const projectTypeMetadataProperties = {\r","    icon: 'string',\r","    name: 'string',\r","    color: 'string',\r","    order: 'number',\r","    active: 'boolean',\r","    short_name: 'string',\r","    description: { type: 'string', optional: true }\r","};\r","\r","const activityTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const activityTypeMetadataProperties = {\r","    icon: 'string',\r","    title: { type: 'string', optional: true },\r","    message: { type: ['string', 'object'], optional: true },\r","    color: { type: 'string', optional: true },\r","    active: { type: 'boolean', optional: true },\r","    short_name: { type: 'string', optional: true }\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the first project_type item\r","pm.test(\"First project type has expected properties with correct types\", () => {\r","    if (responseJson.project_type && responseJson.project_type.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.project_type[0], projectTypeProperties);\r","        \r","        // Check metadata properties of the first project type\r","        xerpaTestApi.checkObjectProperties(responseJson.project_type[0].metadata, projectTypeMetadataProperties);\r","    } else {\r","        pm.expect.fail('project_type array is empty or doesn\\'t exist');\r","    }\r","});\r","\r","// Check properties of the first activity_type item\r","pm.test(\"First activity type has expected properties with correct types\", () => {\r","    if (responseJson.activity_type && responseJson.activity_type.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.activity_type[0], activityTypeProperties);\r","        \r","        // Check metadata properties of the first activity type\r","        xerpaTestApi.checkObjectProperties(responseJson.activity_type[0].metadata, activityTypeMetadataProperties);\r","    } else {\r","        pm.expect.fail('activity_type array is empty or doesn\\'t exist');\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"aee902b4-e6ed-4ccb-8b1a-6b384599ac3a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=activity_type,project_type","description":"<p>Este endpoint permite consultar los catálogos del servicio de ahorro filtrando por tipo de catálogo especificado como parámetro.</p>\n<h4 id=\"request\"><strong>Request</strong></h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=activity_type,project_type</p>\n</li>\n<li><p>Parámetros de query: Se agregan al final de la ruta, sirven principalmente para manejar aspectos de la petición. Ejm: <code>/catalogs/?catalog=project_type</code></p>\n<ul>\n<li><p><code>catalog</code>(string): Valor que indica el tipo de catálogo que se quiere obtener en la consulta. Si se desea agregar más de uno, es necesario sepáralos por comas. Este puede tomar los valores:</p>\n<ul>\n<li><p>\"activity_type\": Tipo de actividad</p>\n</li>\n<li><p>\"payment_source\": Origen del pago</p>\n</li>\n<li><p>\"rule_status\": Estado de la regla</p>\n</li>\n<li><p>\"rule_type\": Tipo de regla</p>\n</li>\n<li><p>\"project_status\": Estado del proyecto</p>\n</li>\n<li><p>\"saving_status\": Estado del ahorro</p>\n</li>\n<li><p>\"payment_status\": Estado del pago</p>\n</li>\n<li><p>\"project_type\": Tipo de proyecto</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta se entrega en formato JSON e incluye los catálogos solicitados agrupados por tipo. Para cada tipo se incuye un arreglo de objetos <code>catalog</code>, cada uno con los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): ID único del ítem.</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece el ítem.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del ítem.</p>\n</li>\n<li><p><code>metadata</code> (object): Metadatos visuales y descriptivos:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono representativo del ítem.</p>\n</li>\n<li><p><code>name</code> (string): Nombre visual.</p>\n</li>\n<li><p><code>color</code> (string): Color asignado.</p>\n</li>\n<li><p><code>order</code> (integer): Posición dentro del catálogo.</p>\n</li>\n<li><p><code>active</code> (boolean): Indica si el ítem está activo.</p>\n</li>\n<li><p><code>short_name</code> (string): Nombre corto del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción adicional.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<p>El contenido de cada uno de los esquemas será de la siguiente manera:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n      \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n      \"item_name\": { \"type\": \"string\" },\n      \"description\": { \"type\": \"string\" },\n      \"metadata\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"icon\": { \"type\": \"string\" },\n          \"name\": { \"type\": \"string\" },\n          \"color\": { \"type\": \"string\" },\n          \"group\": { \"type\": \"string\" },\n          \"order\": { \"type\": \"integer\" },\n          \"active\": { \"type\": \"boolean\" },\n          \"short_name\": { \"type\": \"string\" },\n          \"description\": { \"type\": \"string\" }\n        },\n      }\n    }\n  }\n}\n\n</code></pre>\n<h4 id=\"descripción-de-tipos-comunes\">Descripción de tipos comunes</h4>\n<ul>\n<li><p><code>project_type</code>: Tipos de proyectos o metas de ahorro. Tambíen llamadas \"categorías\".</p>\n</li>\n<li><p><code>activity_type</code>: Tipos de actividades que pueden generarse dentro del sistema (como abonos, retiros, eventos de sistema, etc.).</p>\n</li>\n</ul>\n<p>Cada ítem incluye metadatos visuales y descriptivos que pueden utilizarse para representar la información en interfaces gráficas.</p>\n","urlObject":{"path":["api-saving","v1","saving-service","catalogs",""],"host":["{{host_app}}"],"query":[{"key":"catalog","value":"activity_type,project_type"}],"variable":[]}},"response":[{"id":"6478b4ef-6fe3-4ab9-bc2d-8faefbdc4c7e","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=activity_type,project_type","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":"activity_type,project_type"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 18:52:39 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"10439"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"ab1eb038-d580-4dde-aebc-8c76b71c6567"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZSywGNXIAMEAMA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839fe77-20b6adeb5ec7cdb460d5f2e2;Parent=3356d05b44974148;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"project_type\": [\n        {\n            \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_holidays\",\n            \"description\": \"Meta de ahorro para vacaciones\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                \"name\": \"Vacaciones\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 1,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"eeb4ccdb-f90e-4b96-888c-d8937185d96c\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_house\",\n            \"description\": \"Meta de ahorro para casa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/casa.png\",\n                \"name\": \"Casa\",\n                \"color\": \"#7C2582\",\n                \"group\": \"vivienda\",\n                \"order\": 2,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_HOUSE\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"7c1521e9-6d06-4c6e-9aa5-db4414afe71f\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_car\",\n            \"description\": \"Meta de ahorro para vehículo\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/vehiculo.png\",\n                \"name\": \"Vehículo\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 3,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_CAR\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"5d8862bf-b1b2-492f-b198-ae14ddef822e\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_education\",\n            \"description\": \"Meta de ahorro para educación\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/educacion.png\",\n                \"name\": \"Educación\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 4,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_EDUCATION\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"a7409f6a-e6ba-4ed2-8f67-ba6d945681f6\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_shopping\",\n            \"description\": \"Meta de ahorro para compras\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/compras.png\",\n                \"name\": \"Compras\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 5,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_SHOPPING\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"461a96b0-96d1-4259-a965-c599e1d7da1b\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_debts\",\n            \"description\": \"Meta de ahorro para deudas\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/deudas.png\",\n                \"name\": \"Deudas\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 6,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_DEBTS\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"5877afb7-c6d8-4023-8498-9280890f3154\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_health\",\n            \"description\": \"Meta de ahorro para salud\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/salud.png\",\n                \"name\": \"Salud\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 7,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_HEALTH\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"5877afb7-c6d8-4023-8498-9280890f3155\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_other\",\n            \"description\": \"Meta de ahorro para otro\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/otros.png\",\n                \"name\": \"Otro\",\n                \"color\": \"#7C2582\",\n                \"group\": \"vivienda\",\n                \"order\": 8,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_OTHER\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"bc92eb07-f119-4440-a3c9-79f89dd3bdb0\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_event\",\n            \"description\": \"Meta de ahorro para evento\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/evento.png\",\n                \"name\": \"Evento\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 9,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_EVENT\",\n                \"description\": \"\"\n            }\n        }\n    ],\n    \"activity_type\": [\n        {\n            \"id\": \"9ce938e7-46ca-4ba9-a15e-9c9421e131eb\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_project_finished\",\n            \"description\": \"Meta finalizada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\",\n                \"title\": \"Meta completada\",\n                \"message\": \"La meta se completó exitosamente.\"\n            }\n        },\n        {\n            \"id\": \"695136d2-9217-4622-a5f8-9eaf7b99e23e\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_project_deleted\",\n            \"description\": \"Meta eliminada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/expired_circle.svg\"\n            }\n        },\n        {\n            \"id\": \"fb472d6a-3916-4836-bbf8-3433b03213fe\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_project_edited\",\n            \"description\": \"Meta modificada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/edit_circle.svg\",\n                \"title\": \"Meta editada\",\n                \"message\": \"La meta fue editada.\"\n            }\n        },\n        {\n            \"id\": \"5dd0c2cf-a146-409d-b5bc-1f1f5d8176de\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_rule_paused\",\n            \"description\": \"Regla pausada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/pause_circle.svg\",\n                \"title\": \"Regla pausada\",\n                \"message\": \"La regla {rule.rule_type.metadata.name} fue pausada.\"\n            }\n        },\n        {\n            \"id\": \"72825587-ee40-43aa-97b4-fa42eb563b17\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_saving_roundup\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                \"title\": \"Redondear\",\n                \"message\": \"Redondeo hacia $1.000 superior\"\n            }\n        },\n        {\n            \"id\": \"6b567b88-1519-4382-849d-47ed00230be9\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_saving_fixed_salary\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                \"title\": \"Porcentaje del sueldo\",\n                \"message\": \"Ahorro del {rule.salary_percentage}% de mi salario\"\n            }\n        },\n        {\n            \"id\": \"517649ee-f77e-4936-a640-82a7b65c7863\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_saving_52_weeks\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                \"title\": \"Desafío 52 Semanas\",\n                \"message\": \"Ahorra $1.000 la primera semana, $2.000 la segunda y así hasta la semana 52\"\n            }\n        },\n        {\n            \"id\": \"8c49fcb8-d6bf-43f5-8a89-24c6dfeb8894\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_saving\",\n            \"description\": \"Evento generado por las reglas de ahorro\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/activities/saving.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"ACTIVITY_TYPE_SAVING\"\n            }\n        },\n        {\n            \"id\": \"54c4c77a-f678-4be9-8fd5-d1b25f1a8323\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_rule_deleted\",\n            \"description\": \"Regla eliminada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/add_circle.svg\",\n                \"title\": \"Regla eliminada\",\n                \"message\": \"La regla {rule.rule_type.metadata.name} fue eliminada.\"\n            }\n        },\n        {\n            \"id\": \"191ff7c3-29a7-4974-8d5a-0a777cf00e51\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_manual_withdrawal\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/withdrawal.svg\",\n                \"title\": \"Retiro manual\",\n                \"message\": \"Retiró de la meta\"\n            }\n        },\n        {\n            \"id\": \"7e98b933-a77a-41a7-ad23-425531770cfb\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_manual_saving\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/payment.svg\",\n                \"title\": \"Abono manual\",\n                \"message\": \"Abonó a una meta\"\n            }\n        },\n        {\n            \"id\": \"5555dbac-e4df-4295-b319-9a330e0d3a1c\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_readjustments\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/invesment.svg\",\n                \"title\": \"Ajustes mensual\",\n                \"footer\": \"\",\n                \"message\": \"Ahorro por {amount}\"\n            }\n        },\n        {\n            \"id\": \"2c8bf67d-5730-48cc-ac0b-0e8207b99519\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_payment_done\",\n            \"description\": \"Pago realizado\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\"\n            }\n        },\n        {\n            \"id\": \"9d46f2fc-9986-423d-8cd6-39c9a9253d5c\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_investment_returns\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/invesment.svg\",\n                \"title\": \"Intereces mensual\",\n                \"footer\": \"\",\n                \"message\": \"Ahorro por {amount}\"\n            }\n        },\n        {\n            \"id\": \"b2dbc1e9-7ded-4650-930b-d4903875debd\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_saving_fix_amount\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                \"title\": \"Monto fijo\",\n                \"message\": \"Ahorro {rule.get_execution_frequency_display}\"\n            }\n        },\n        {\n            \"id\": \"1a9e5ec2-c0c2-474b-9280-b770343636b6\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_rule_activated\",\n            \"description\": \"Regla activada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/play_circle.svg\"\n            }\n        },\n        {\n            \"id\": \"087febc2-6f28-4f64-810f-e358019efba6\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_project_created\",\n            \"description\": \"Meta creada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/add_circle.svg\",\n                \"title\": \"Meta creada\",\n                \"message\": \"Creaste una meta {project.project_category.metadata.name}.\"\n            }\n        },\n        {\n            \"id\": \"b12f82ad-c915-4346-971d-8c8fdda86091\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_saving_guilty_pleasure\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                \"title\": \"Placer culpable\",\n                \"message\": \"Compras en {rule.transaction_category.item_name}\"\n            }\n        },\n        {\n            \"id\": \"ae84eb55-038c-4297-bc6d-34afcbec6730\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_rule_created\",\n            \"description\": \"Regla creada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/add_circle.svg\",\n                \"title\": \"Regla creada\",\n                \"message\": \"La regla {rule.rule_type.metadata.name} fue creada.\"\n            }\n        },\n        {\n            \"id\": \"f8eeaed6-98ef-4693-91d7-e51e8e9aef4c\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_rule_edited\",\n            \"description\": \"Regla editada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/edit_circle.svg\",\n                \"title\": \"Regla editada\",\n                \"message\": \"La regla {rule.rule_type.metadata.name} fue editada.\"\n            }\n        },\n        {\n            \"id\": \"8fd1bd18-4da3-4a17-bc29-89e022b2b111\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_saving_soccer_passion\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                \"title\": \"Pasión futbolera\",\n                \"message\": {\n                    \"A\": \"Regla pasión futbolera por gol de {rule.soccer_team.description}\",\n                    \"E\": \"Regla pasión futbolera por empate de {rule.soccer_team.description}\",\n                    \"G\": \"Regla pasión futbolera por triunfo de {rule.soccer_team.description}\",\n                    \"J\": \"Regla pasión futbolera por juego de {rule.soccer_team.description}\"\n                }\n            }\n        },\n        {\n            \"id\": \"8425ae8b-7cfd-415b-bb47-18e1ef4e25cd\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event\",\n            \"description\": \"Evento generado por el usuario\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/activities/event.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"ACTIVITY_TYPE_EVENT\"\n            }\n        }\n    ]\n}"},{"id":"5bcd9da1-d511-4af8-a42c-6609e837f409","name":"Successful Request - Empty","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=rule_type","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":"rule_type"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 18:59:27 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"2"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"80bb7f3d-f463-4ba3-a209-29875e7cafb9"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZTyhGp1IAMEI7g="},{"key":"X-Amzn-Trace-Id","value":"Root=1-683a000f-518449966a1c0d366db616e9;Parent=122aee1dca6c3eae;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{}"},{"id":"a02eb50e-6609-4af1-a985-f2b7d412d6ba","name":"Bad Request - Invalid catalog","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":""}]}},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 18:59:02 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"19"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"c66d85e6-a81f-480f-a4e5-ca8fffec1198"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZTuhFmpIAMEVOg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839fff6-2b4db41347a9a2d64b96b03b;Parent=318eea141bca37f7;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"\"Catalog not found\""}],"_postman_id":"aee902b4-e6ed-4ccb-8b1a-6b384599ac3a"},{"name":"Lista de items de múltiples catálogos","event":[{"listen":"test","script":{"id":"29ddfa64-f551-4ade-a584-59c7895b6575","exec":[" const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    project_type: 'array',\r","    activity_type: 'array'\r","};\r","\r","const projectTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const projectTypeMetadataProperties = {\r","    icon: 'string',\r","    name: 'string',\r","    color: 'string',\r","    order: 'number',\r","    active: 'boolean',\r","    short_name: 'string',\r","    description: { type: 'string', optional: true }\r","};\r","\r","const activityTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const activityTypeMetadataProperties = {\r","    icon: 'string',\r","    title: { type: 'string', optional: true },\r","    message: { type: ['string', 'object'], optional: true },\r","    color: { type: 'string', optional: true },\r","    active: { type: 'boolean', optional: true },\r","    short_name: { type: 'string', optional: true }\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the first project_type item\r","pm.test(\"First project type has expected properties with correct types\", () => {\r","    if (responseJson.project_type && responseJson.project_type.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.project_type[0], projectTypeProperties);\r","        \r","        // Check metadata properties of the first project type\r","        xerpaTestApi.checkObjectProperties(responseJson.project_type[0].metadata, projectTypeMetadataProperties);\r","    } else {\r","        pm.expect.fail('project_type array is empty or doesn\\'t exist');\r","    }\r","});\r","\r","// Check properties of the first activity_type item\r","pm.test(\"First activity type has expected properties with correct types\", () => {\r","    if (responseJson.activity_type && responseJson.activity_type.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.activity_type[0], activityTypeProperties);\r","        \r","        // Check metadata properties of the first activity type\r","        xerpaTestApi.checkObjectProperties(responseJson.activity_type[0].metadata, activityTypeMetadataProperties);\r","    } else {\r","        pm.expect.fail('activity_type array is empty or doesn\\'t exist');\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"d165f94e-317d-4b01-aabb-85f4563112a4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=activity_type,project_type","description":"<p>Este endpoint permite consultar los catálogos del servicio de ahorro filtrando por tipo de catálogo especificado como parámetro.</p>\n<h4 id=\"request\"><strong>Request</strong></h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=activity_type,project_type</p>\n</li>\n<li><p>Parámetros de query: Se agregan al final de la ruta, sirven principalmente para manejar aspectos de la petición. Ejm: <code>/catalogs/?catalog=project_type</code></p>\n<ul>\n<li><p><code>catalog</code>(string): Valor que indica el tipo de catálogo que se quiere obtener en la consulta. Si se desea agregar más de uno, es necesario sepáralos por comas. Este puede tomar los valores:</p>\n<ul>\n<li><p>\"activity_type\": Tipo de actividad</p>\n</li>\n<li><p>\"payment_source\": Origen del pago</p>\n</li>\n<li><p>\"rule_status\": Estado de la regla</p>\n</li>\n<li><p>\"rule_type\": Tipo de regla</p>\n</li>\n<li><p>\"project_status\": Estado del proyecto</p>\n</li>\n<li><p>\"saving_status\": Estado del ahorro</p>\n</li>\n<li><p>\"payment_status\": Estado del pago</p>\n</li>\n<li><p>\"project_type\": Tipo de proyecto</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta se entrega en formato JSON e incluye los catálogos solicitados agrupados por tipo. Para cada tipo se incuye un arreglo de objetos <code>catalog</code>, cada uno con los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): ID único del ítem.</p>\n</li>\n<li><p><code>catalog</code> (string): ID del catálogo al que pertenece el ítem.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del ítem.</p>\n</li>\n<li><p><code>metadata</code> (object): Metadatos visuales y descriptivos:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono representativo del ítem.</p>\n</li>\n<li><p><code>name</code> (string): Nombre visual.</p>\n</li>\n<li><p><code>color</code> (string): Color asignado.</p>\n</li>\n<li><p><code>order</code> (integer): Posición dentro del catálogo.</p>\n</li>\n<li><p><code>active</code> (boolean): Indica si el ítem está activo.</p>\n</li>\n<li><p><code>short_name</code> (string): Nombre corto del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción adicional.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<p>El contenido de cada uno de los esquemas será de la siguiente manera:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n      \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n      \"item_name\": { \"type\": \"string\" },\n      \"description\": { \"type\": \"string\" },\n      \"metadata\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"icon\": { \"type\": \"string\" },\n          \"name\": { \"type\": \"string\" },\n          \"color\": { \"type\": \"string\" },\n          \"group\": { \"type\": \"string\" },\n          \"order\": { \"type\": \"integer\" },\n          \"active\": { \"type\": \"boolean\" },\n          \"short_name\": { \"type\": \"string\" },\n          \"description\": { \"type\": \"string\" }\n        },\n      }\n    }\n  }\n}\n\n</code></pre>\n<h4 id=\"descripción-de-tipos-comunes\">Descripción de tipos comunes</h4>\n<ul>\n<li><p><code>project_type</code>: Tipos de proyectos o metas de ahorro. Tambíen llamadas \"categorías\".</p>\n</li>\n<li><p><code>activity_type</code>: Tipos de actividades que pueden generarse dentro del sistema (como abonos, retiros, eventos de sistema, etc.).</p>\n</li>\n</ul>\n<p>Cada ítem incluye metadatos visuales y descriptivos que pueden utilizarse para representar la información en interfaces gráficas.</p>\n","urlObject":{"path":["api-saving","v1","saving-service","catalogs",""],"host":["{{host_app}}"],"query":[{"key":"catalog","value":"activity_type,project_type"}],"variable":[]}},"response":[{"id":"2879f7e8-3730-4e7d-aaaf-b97aa30ff786","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=activity_type,project_type","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":"activity_type,project_type"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 18:52:39 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"10439"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"ab1eb038-d580-4dde-aebc-8c76b71c6567"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZSywGNXIAMEAMA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839fe77-20b6adeb5ec7cdb460d5f2e2;Parent=3356d05b44974148;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"project_type\": [\n        {\n            \"id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_holidays\",\n            \"description\": \"Meta de ahorro para vacaciones\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                \"name\": \"Vacaciones\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 1,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"eeb4ccdb-f90e-4b96-888c-d8937185d96c\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_house\",\n            \"description\": \"Meta de ahorro para casa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/casa.png\",\n                \"name\": \"Casa\",\n                \"color\": \"#7C2582\",\n                \"group\": \"vivienda\",\n                \"order\": 2,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_HOUSE\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"7c1521e9-6d06-4c6e-9aa5-db4414afe71f\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_car\",\n            \"description\": \"Meta de ahorro para vehículo\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/vehiculo.png\",\n                \"name\": \"Vehículo\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 3,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_CAR\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"5d8862bf-b1b2-492f-b198-ae14ddef822e\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_education\",\n            \"description\": \"Meta de ahorro para educación\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/educacion.png\",\n                \"name\": \"Educación\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 4,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_EDUCATION\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"a7409f6a-e6ba-4ed2-8f67-ba6d945681f6\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_shopping\",\n            \"description\": \"Meta de ahorro para compras\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/compras.png\",\n                \"name\": \"Compras\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 5,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_SHOPPING\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"461a96b0-96d1-4259-a965-c599e1d7da1b\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_debts\",\n            \"description\": \"Meta de ahorro para deudas\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/deudas.png\",\n                \"name\": \"Deudas\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 6,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_DEBTS\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"5877afb7-c6d8-4023-8498-9280890f3154\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_health\",\n            \"description\": \"Meta de ahorro para salud\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/salud.png\",\n                \"name\": \"Salud\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 7,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_HEALTH\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"5877afb7-c6d8-4023-8498-9280890f3155\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_other\",\n            \"description\": \"Meta de ahorro para otro\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/otros.png\",\n                \"name\": \"Otro\",\n                \"color\": \"#7C2582\",\n                \"group\": \"vivienda\",\n                \"order\": 8,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_OTHER\",\n                \"description\": \"\"\n            }\n        },\n        {\n            \"id\": \"bc92eb07-f119-4440-a3c9-79f89dd3bdb0\",\n            \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n            \"item_name\": \"project_type_event\",\n            \"description\": \"Meta de ahorro para evento\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/projects/evento.png\",\n                \"name\": \"Evento\",\n                \"color\": \"#7C2582\",\n                \"group\": \"premium\",\n                \"order\": 9,\n                \"active\": true,\n                \"short_name\": \"PROJECT_TYPE_EVENT\",\n                \"description\": \"\"\n            }\n        }\n    ],\n    \"activity_type\": [\n        {\n            \"id\": \"9ce938e7-46ca-4ba9-a15e-9c9421e131eb\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_project_finished\",\n            \"description\": \"Meta finalizada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\",\n                \"title\": \"Meta completada\",\n                \"message\": \"La meta se completó exitosamente.\"\n            }\n        },\n        {\n            \"id\": \"695136d2-9217-4622-a5f8-9eaf7b99e23e\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_project_deleted\",\n            \"description\": \"Meta eliminada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/expired_circle.svg\"\n            }\n        },\n        {\n            \"id\": \"fb472d6a-3916-4836-bbf8-3433b03213fe\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_project_edited\",\n            \"description\": \"Meta modificada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/edit_circle.svg\",\n                \"title\": \"Meta editada\",\n                \"message\": \"La meta fue editada.\"\n            }\n        },\n        {\n            \"id\": \"5dd0c2cf-a146-409d-b5bc-1f1f5d8176de\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_rule_paused\",\n            \"description\": \"Regla pausada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/pause_circle.svg\",\n                \"title\": \"Regla pausada\",\n                \"message\": \"La regla {rule.rule_type.metadata.name} fue pausada.\"\n            }\n        },\n        {\n            \"id\": \"72825587-ee40-43aa-97b4-fa42eb563b17\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_saving_roundup\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                \"title\": \"Redondear\",\n                \"message\": \"Redondeo hacia $1.000 superior\"\n            }\n        },\n        {\n            \"id\": \"6b567b88-1519-4382-849d-47ed00230be9\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_saving_fixed_salary\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                \"title\": \"Porcentaje del sueldo\",\n                \"message\": \"Ahorro del {rule.salary_percentage}% de mi salario\"\n            }\n        },\n        {\n            \"id\": \"517649ee-f77e-4936-a640-82a7b65c7863\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_saving_52_weeks\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                \"title\": \"Desafío 52 Semanas\",\n                \"message\": \"Ahorra $1.000 la primera semana, $2.000 la segunda y así hasta la semana 52\"\n            }\n        },\n        {\n            \"id\": \"8c49fcb8-d6bf-43f5-8a89-24c6dfeb8894\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_saving\",\n            \"description\": \"Evento generado por las reglas de ahorro\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/activities/saving.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"ACTIVITY_TYPE_SAVING\"\n            }\n        },\n        {\n            \"id\": \"54c4c77a-f678-4be9-8fd5-d1b25f1a8323\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_rule_deleted\",\n            \"description\": \"Regla eliminada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/add_circle.svg\",\n                \"title\": \"Regla eliminada\",\n                \"message\": \"La regla {rule.rule_type.metadata.name} fue eliminada.\"\n            }\n        },\n        {\n            \"id\": \"191ff7c3-29a7-4974-8d5a-0a777cf00e51\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_manual_withdrawal\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/withdrawal.svg\",\n                \"title\": \"Retiro manual\",\n                \"message\": \"Retiró de la meta\"\n            }\n        },\n        {\n            \"id\": \"7e98b933-a77a-41a7-ad23-425531770cfb\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_manual_saving\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/payment.svg\",\n                \"title\": \"Abono manual\",\n                \"message\": \"Abonó a una meta\"\n            }\n        },\n        {\n            \"id\": \"5555dbac-e4df-4295-b319-9a330e0d3a1c\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_readjustments\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/invesment.svg\",\n                \"title\": \"Ajustes mensual\",\n                \"footer\": \"\",\n                \"message\": \"Ahorro por {amount}\"\n            }\n        },\n        {\n            \"id\": \"2c8bf67d-5730-48cc-ac0b-0e8207b99519\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_payment_done\",\n            \"description\": \"Pago realizado\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\"\n            }\n        },\n        {\n            \"id\": \"9d46f2fc-9986-423d-8cd6-39c9a9253d5c\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_investment_returns\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/invesment.svg\",\n                \"title\": \"Intereces mensual\",\n                \"footer\": \"\",\n                \"message\": \"Ahorro por {amount}\"\n            }\n        },\n        {\n            \"id\": \"b2dbc1e9-7ded-4650-930b-d4903875debd\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_saving_fix_amount\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                \"title\": \"Monto fijo\",\n                \"message\": \"Ahorro {rule.get_execution_frequency_display}\"\n            }\n        },\n        {\n            \"id\": \"1a9e5ec2-c0c2-474b-9280-b770343636b6\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_rule_activated\",\n            \"description\": \"Regla activada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/play_circle.svg\"\n            }\n        },\n        {\n            \"id\": \"087febc2-6f28-4f64-810f-e358019efba6\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_project_created\",\n            \"description\": \"Meta creada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/add_circle.svg\",\n                \"title\": \"Meta creada\",\n                \"message\": \"Creaste una meta {project.project_category.metadata.name}.\"\n            }\n        },\n        {\n            \"id\": \"b12f82ad-c915-4346-971d-8c8fdda86091\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_saving_guilty_pleasure\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                \"title\": \"Placer culpable\",\n                \"message\": \"Compras en {rule.transaction_category.item_name}\"\n            }\n        },\n        {\n            \"id\": \"ae84eb55-038c-4297-bc6d-34afcbec6730\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_rule_created\",\n            \"description\": \"Regla creada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/add_circle.svg\",\n                \"title\": \"Regla creada\",\n                \"message\": \"La regla {rule.rule_type.metadata.name} fue creada.\"\n            }\n        },\n        {\n            \"id\": \"f8eeaed6-98ef-4693-91d7-e51e8e9aef4c\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event_rule_edited\",\n            \"description\": \"Regla editada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/edit_circle.svg\",\n                \"title\": \"Regla editada\",\n                \"message\": \"La regla {rule.rule_type.metadata.name} fue editada.\"\n            }\n        },\n        {\n            \"id\": \"8fd1bd18-4da3-4a17-bc29-89e022b2b111\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_saving_soccer_passion\",\n            \"description\": \"Regla ejecutada\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                \"title\": \"Pasión futbolera\",\n                \"message\": {\n                    \"A\": \"Regla pasión futbolera por gol de {rule.soccer_team.description}\",\n                    \"E\": \"Regla pasión futbolera por empate de {rule.soccer_team.description}\",\n                    \"G\": \"Regla pasión futbolera por triunfo de {rule.soccer_team.description}\",\n                    \"J\": \"Regla pasión futbolera por juego de {rule.soccer_team.description}\"\n                }\n            }\n        },\n        {\n            \"id\": \"8425ae8b-7cfd-415b-bb47-18e1ef4e25cd\",\n            \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n            \"item_name\": \"activity_type_event\",\n            \"description\": \"Evento generado por el usuario\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/activities/event.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"ACTIVITY_TYPE_EVENT\"\n            }\n        }\n    ]\n}"},{"id":"806e41f2-f704-4e1c-9a19-10d13c24c111","name":"Successful Request - Empty","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=rule_type","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":"rule_type"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 18:59:27 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"2"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"80bb7f3d-f463-4ba3-a209-29875e7cafb9"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZTyhGp1IAMEI7g="},{"key":"X-Amzn-Trace-Id","value":"Root=1-683a000f-518449966a1c0d366db616e9;Parent=122aee1dca6c3eae;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{}"},{"id":"a79af7a5-115d-433b-9be3-0c636fdc43a3","name":"Bad Request - Invalid catalog","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/catalogs/?catalog=","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","catalogs",""],"query":[{"key":"catalog","value":""}]}},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 30 May 2025 18:59:02 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"19"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"c66d85e6-a81f-480f-a4e5-ca8fffec1198"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LZTuhFmpIAMEVOg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6839fff6-2b4db41347a9a2d64b96b03b;Parent=318eea141bca37f7;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"\"Catalog not found\""}],"_postman_id":"d165f94e-317d-4b01-aabb-85f4563112a4"},{"name":"Detalle de la información de un item","event":[{"listen":"test","script":{"id":"4990c360-5376-4782-89d4-27be56e36fea","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const activityTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string'\r","};\r","\r","// Check activity type properties\r","pm.test(\"Activity type has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, activityTypeProperties);\r","});\r","\r","// Check metadata properties\r","pm.test(\"Metadata has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.metadata, metadataProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"221cbcd5-19fd-4de7-bd4e-8de95c864186","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/catalogs/items/{{item_id}}/","description":"<p>Este endpoint permite <strong>obtener los detalles de un ítem específico</strong> dentro del catálogo del servicio de ahorro.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/catalogs/items/{{item_id}}/</p>\n</li>\n<li><p>Pamámetros de ruta:</p>\n<ul>\n<li><code>item_id</code>(string): ID del item</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>Si la solicitud se ejecuta correctamente, la respuesta incluirá los siguientes detalles del ítem:</p>\n<ul>\n<li><p><code>\"id\"</code>(string): ID del item</p>\n</li>\n<li><p><code>\"catalog\"</code>(string): ID del catálogo</p>\n</li>\n<li><p><code>\"item_name\"</code>(string): Nombre del ítem.</p>\n</li>\n<li><p><code>\"description\"</code>(string): Descripción del ítem.</p>\n</li>\n<li><p><code>\"metadata\"</code>(object): Metadatos adicionales relacionados con el ítem, incluyendo el <code>\"icon\"</code> asociado.</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"item_name\": { \"type\": \"string\" },\n    \"description\": { \"type\": \"string\" },\n    \"metadata\": { \"type\": \"object\" }\n  },\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","catalogs","items","{{item_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"e4973360-137a-4e23-a78a-0c4d9e17bd31","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}api-saving/v1/saving-service/catalogs/items/014c54b4-3578-42b9-84be-a516d894b8f6/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"014c54b4-3578-42b9-84be-a516d894b8f6\",\n    \"catalog\": \"f5c7c07c-b7f6-48b9-af06-f3ae110afb92\",\n    \"item_name\": \"activity_type_event_payment_done\",\n    \"description\": \"Pago realizado\",\n    \"metadata\": {\n        \"icon\": \"/assets/xerpa/global/img/icons/done_circle.svg\"\n    }\n}"}],"_postman_id":"221cbcd5-19fd-4de7-bd4e-8de95c864186"}],"id":"ec4ffeb3-cf4e-4da0-a048-c941c029c92e","description":"<p>Esta sección de la API permite interactuar con los catálogos del sistema y los ítems asociados a ellos. Los catálogos actúan como agrupadores lógicos para organizar diversos tipos de ítems. Cada ítem dentro de un catálogo contiene información detallada, incluyendo metadatos específicos, un estado de actividad y datos relacionados con procesos.</p>\n<hr />\n<h4 id=\"📌-funcionalidades-disponibles\">📌 Funcionalidades disponibles</h4>\n<ul>\n<li><p>Obtener un listado completo de todos los catálogos disponibles en el sistema.</p>\n</li>\n<li><p>Consultar la lista de ítems que pertenecen a un catálogo específico.</p>\n</li>\n<li><p>Recuperar los detalles completos de un ítem particular.</p>\n</li>\n<li><p>Modificar la información de un ítem existente.</p>\n</li>\n</ul>\n<p>Utiliza esta sección para acceder y administrar la estructura organizada de catálogos e ítems dentro de la aplicación.</p>\n<hr />\n<h4 id=\"🎯consideraciones\">🎯Consideraciones</h4>\n<ul>\n<li><p>La modificación de los valores de los items podría repercutir en la funcionalidad o la experiencia del usuario directamente.</p>\n</li>\n<li><p>Es necesario conocer el identificador de cada catálogo para poder acceder al item final.</p>\n</li>\n<li><p>Se recomienda en la implementación de frontend guardar un caché de los catálogos para evitar tantas consultas a la API.</p>\n</li>\n</ul>\n","_postman_id":"ec4ffeb3-cf4e-4da0-a048-c941c029c92e"},{"name":"Proyecto y reglas unica","item":[{"name":"Lista proyectos","id":"2f33d926-bf46-4f0c-9ebb-d24d5cba6ea5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/single-rule-project/","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","single-rule-project",""],"host":["{{host_app}}"],"query":[{"disabled":true,"description":{"content":"<p>Opcional</p>\n","type":"text/plain"},"key":"from_account","value":"FROM_001"},{"disabled":true,"description":{"content":"<p>Opcional</p>\n","type":"text/plain"},"key":"to_account","value":"TO_001"},{"disabled":true,"description":{"content":"<p>Opcional (id tipo de regla)</p>\n","type":"text/plain"},"key":"rule_type","value":"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c"}],"variable":[]}},"response":[{"id":"0d72b840-e30e-459c-b2da-4e81491481cc","name":"200 ok","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/single-rule-project/?from_account=FROM_001&to_account=TO_001&rule_type=7c8fbf63-545a-4f60-8c87-14f1f1d52f8c","host":["{{host_app}}"],"path":["api-saving","v1","saving-service","users","{{user_id}}","single-rule-project",""],"query":[{"key":"from_account","value":"FROM_001"},{"key":"to_account","value":"TO_001"},{"key":"rule_type","value":"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"next\": null,\n    \"previous\": null,\n    \"total_pages\": 1,\n    \"current_page\": 1,\n    \"offset\": 0,\n    \"count\": 4,\n    \"results\": [\n        {\n            \"id\": \"ff2121e5-ca9c-466c-8321-bf266882bd6a\",\n            \"user_id\": \"0c79f672-e604-4fa4-86f8-389f5d669113\",\n            \"project_category\": {\n                \"id\": \"5877afb7-c6d8-4023-8498-9280890f3155\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_other\",\n                \"description\": \"Meta de ahorro para otro\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/otros.png\",\n                    \"name\": \"Otro\",\n                    \"color\": \"#7C2582\",\n                    \"order\": 8,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_OTHER\",\n                    \"description\": \"\"\n                }\n            },\n            \"project_status\": {\n                \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_active\",\n                \"description\": \"Meta activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n                }\n            },\n            \"project_config\": {\n                \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"project_config_default\",\n                \"description\": \"Configuracion por defecto para una meta, sin restricciones.\",\n                \"metadata\": {\n                    \"limit\": null,\n                    \"default\": true,\n                    \"available\": true,\n                    \"access_denied\": {},\n                    \"permission_edit_fields\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\",\n                        \"project_category_id\"\n                    ],\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ],\n                    \"validate_project_amount_achieved\": true\n                }\n            },\n            \"project_name\": \"Regla 52 semanas\",\n            \"total\": 10000,\n            \"progress\": 0,\n            \"processing\": 0,\n            \"pending\": 0,\n            \"investment_returns\": 0,\n            \"from_account\": \"xh-xerpaqa-1\",\n            \"to_account\": \"xh-xerpaqa-3\",\n            \"goal_date\": \"2028-10-06\",\n            \"updated_at\": \"2026-03-25T16:23:20.508121-03:00\",\n            \"deleted_at\": null,\n            \"created_at\": \"2026-03-25T16:23:20.508074-03:00\",\n            \"rules\": [\n                {\n                    \"id\": \"2282b764-8bf1-4af3-a321-5173f065751b\",\n                    \"user_id\": \"0c79f672-e604-4fa4-86f8-389f5d669113\",\n                    \"amount\": 0,\n                    \"salary_percentage\": 0,\n                    \"execution_frequency\": null,\n                    \"rule_execution_days\": null,\n                    \"soccer_condition\": null,\n                    \"soccer_team\": null,\n                    \"weather_city\": null,\n                    \"temperature\": 0,\n                    \"created_at\": \"2026-03-25T16:23:20.524704-03:00\",\n                    \"rule_type\": {\n                        \"id\": \"90832d0a-3879-40b5-a45b-729e4a964749\",\n                        \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                        \"item_name\": \"rule_type_52_weeks\",\n                        \"description\": \"Regla 52 semanas\",\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                            \"name\": \"Desafío 52 semanas\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                            \"description\": \"Ahorra $1.00 la primera semana, $2.00 la segunda semana y asi hasta la semana 52.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} primera semana, $2.00 la segunda, $3.00 la tercera y así hasta la semana 52 en que ahorras $52.00 {description}\"\n                        }\n                    },\n                    \"rule_status\": {\n                        \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n                        \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                        \"item_name\": \"rule_status_active\",\n                        \"description\": \"Regla activa\",\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_STATUS_ACTIVE\"\n                        }\n                    },\n                    \"transaction_category\": null,\n                    \"spend_less_limit_amount\": 0,\n                    \"spend_less_category_id\": null,\n                    \"deleted_at\": null\n                }\n            ]\n        },\n        {\n            \"id\": \"07458714-a8c0-4e94-9f2f-2d3e3b6d888e\",\n            \"user_id\": \"0c79f672-e604-4fa4-86f8-389f5d669113\",\n            \"project_category\": {\n                \"id\": \"5877afb7-c6d8-4023-8498-9280890f3155\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_other\",\n                \"description\": \"Meta de ahorro para otro\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/otros.png\",\n                    \"name\": \"Otro\",\n                    \"color\": \"#7C2582\",\n                    \"order\": 8,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_OTHER\",\n                    \"description\": \"\"\n                }\n            },\n            \"project_status\": {\n                \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_active\",\n                \"description\": \"Meta activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n                }\n            },\n            \"project_config\": {\n                \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"project_config_default\",\n                \"description\": \"Configuracion por defecto para una meta, sin restricciones.\",\n                \"metadata\": {\n                    \"limit\": null,\n                    \"default\": true,\n                    \"available\": true,\n                    \"access_denied\": {},\n                    \"permission_edit_fields\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\",\n                        \"project_category_id\"\n                    ],\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ],\n                    \"validate_project_amount_achieved\": true\n                }\n            },\n            \"project_name\": \"Regla placer culpable\",\n            \"total\": 10000,\n            \"progress\": 0,\n            \"processing\": 0,\n            \"pending\": 0,\n            \"investment_returns\": 0,\n            \"from_account\": \"xh-xerpaqa-1\",\n            \"to_account\": \"xh-xerpaqa-2\",\n            \"goal_date\": \"2028-10-06\",\n            \"updated_at\": \"2026-03-25T16:23:48.761865-03:00\",\n            \"deleted_at\": null,\n            \"created_at\": \"2026-03-25T16:23:48.761847-03:00\",\n            \"rules\": [\n                {\n                    \"id\": \"732029ec-f185-4d0d-94c6-2935cec293da\",\n                    \"user_id\": \"0c79f672-e604-4fa4-86f8-389f5d669113\",\n                    \"amount\": 444,\n                    \"salary_percentage\": 0,\n                    \"execution_frequency\": null,\n                    \"rule_execution_days\": null,\n                    \"soccer_condition\": null,\n                    \"soccer_team\": null,\n                    \"weather_city\": null,\n                    \"temperature\": 0,\n                    \"created_at\": \"2026-03-25T16:23:48.768821-03:00\",\n                    \"rule_type\": {\n                        \"id\": \"229011e5-fb7a-447c-bada-bb48010175ce\",\n                        \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                        \"item_name\": \"rule_type_guilty_pleasure\",\n                        \"description\": \"Regla placer culpable\",\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                            \"name\": \"Placer culpable\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} en {description}\"\n                        }\n                    },\n                    \"rule_status\": {\n                        \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n                        \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                        \"item_name\": \"rule_status_active\",\n                        \"description\": \"Regla activa\",\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_STATUS_ACTIVE\"\n                        }\n                    },\n                    \"transaction_category\": {\n                        \"id\": \"84e6fa2f-8790-4d94-8f65-6944c7bcba10\",\n                        \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n                        \"item_name\": \"Vacaciones & Viajes\",\n                        \"description\": \"Plataformas de viajes, hoteles, cabañas, arriendo de auto\",\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/categories/viajes.svg\",\n                            \"color\": \"#FFC700\",\n                            \"active\": true,\n                            \"short_name\": \"VACACION_VIAJE\"\n                        }\n                    },\n                    \"spend_less_limit_amount\": 0,\n                    \"spend_less_category_id\": null,\n                    \"deleted_at\": null\n                }\n            ]\n        },\n        {\n            \"id\": \"1e1c5964-105a-4fb7-a269-44f11a180652\",\n            \"user_id\": \"0c79f672-e604-4fa4-86f8-389f5d669113\",\n            \"project_category\": {\n                \"id\": \"5877afb7-c6d8-4023-8498-9280890f3155\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_other\",\n                \"description\": \"Meta de ahorro para otro\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/otros.png\",\n                    \"name\": \"Otro\",\n                    \"color\": \"#7C2582\",\n                    \"order\": 8,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_OTHER\",\n                    \"description\": \"\"\n                }\n            },\n            \"project_status\": {\n                \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_active\",\n                \"description\": \"Meta activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n                }\n            },\n            \"project_config\": {\n                \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"project_config_default\",\n                \"description\": \"Configuracion por defecto para una meta, sin restricciones.\",\n                \"metadata\": {\n                    \"limit\": null,\n                    \"default\": true,\n                    \"available\": true,\n                    \"access_denied\": {},\n                    \"permission_edit_fields\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\",\n                        \"project_category_id\"\n                    ],\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ],\n                    \"validate_project_amount_achieved\": true\n                }\n            },\n            \"project_name\": \"Regla monto fijo\",\n            \"total\": 10000,\n            \"progress\": 0,\n            \"processing\": 0,\n            \"pending\": 0,\n            \"investment_returns\": 0,\n            \"from_account\": \"xh-xerpaqa-1\",\n            \"to_account\": \"xh-xerpaqa-3\",\n            \"goal_date\": \"2028-10-06\",\n            \"updated_at\": \"2026-03-25T16:45:39.698020-03:00\",\n            \"deleted_at\": null,\n            \"created_at\": \"2026-03-25T16:45:39.697992-03:00\",\n            \"rules\": [\n                {\n                    \"id\": \"7e473cf6-871b-4254-a23f-80cdd86a38c9\",\n                    \"user_id\": \"0c79f672-e604-4fa4-86f8-389f5d669113\",\n                    \"amount\": 1500,\n                    \"salary_percentage\": 0,\n                    \"execution_frequency\": \"M\",\n                    \"rule_execution_days\": {\n                        \"days\": [\n                            5\n                        ]\n                    },\n                    \"soccer_condition\": null,\n                    \"soccer_team\": null,\n                    \"weather_city\": null,\n                    \"temperature\": 0,\n                    \"created_at\": \"2026-03-25T16:45:39.711697-03:00\",\n                    \"rule_type\": {\n                        \"id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\",\n                        \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                        \"item_name\": \"rule_type_fixed_amount\",\n                        \"description\": \"Regla monto fijo\",\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                            \"name\": \"Monto fijo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                            \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                        }\n                    },\n                    \"rule_status\": {\n                        \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n                        \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                        \"item_name\": \"rule_status_active\",\n                        \"description\": \"Regla activa\",\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_STATUS_ACTIVE\"\n                        }\n                    },\n                    \"transaction_category\": null,\n                    \"spend_less_limit_amount\": 0,\n                    \"spend_less_category_id\": null,\n                    \"deleted_at\": null\n                }\n            ]\n        },\n        {\n            \"id\": \"7175ed44-7d21-4a78-b28f-451592881eb8\",\n            \"user_id\": \"0c79f672-e604-4fa4-86f8-389f5d669113\",\n            \"project_category\": {\n                \"id\": \"5877afb7-c6d8-4023-8498-9280890f3155\",\n                \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n                \"item_name\": \"project_type_other\",\n                \"description\": \"Meta de ahorro para otro\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/otros.png\",\n                    \"name\": \"Otro\",\n                    \"color\": \"#7C2582\",\n                    \"order\": 8,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_OTHER\",\n                    \"description\": \"\"\n                }\n            },\n            \"project_status\": {\n                \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n                \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n                \"item_name\": \"project_status_active\",\n                \"description\": \"Meta activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n                }\n            },\n            \"project_config\": {\n                \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n                \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n                \"item_name\": \"project_config_default\",\n                \"description\": \"Configuracion por defecto para una meta, sin restricciones.\",\n                \"metadata\": {\n                    \"limit\": null,\n                    \"default\": true,\n                    \"available\": true,\n                    \"access_denied\": {},\n                    \"permission_edit_fields\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\",\n                        \"project_category_id\"\n                    ],\n                    \"fields_required_to_create\": [\n                        \"project_name\",\n                        \"goal_date\",\n                        \"total\"\n                    ],\n                    \"validate_project_amount_achieved\": true\n                }\n            },\n            \"project_name\": \"Regla placer culpable\",\n            \"total\": 10000,\n            \"progress\": 0,\n            \"processing\": 0,\n            \"pending\": 0,\n            \"investment_returns\": 0,\n            \"from_account\": \"xh-xerpaqa-1\",\n            \"to_account\": \"xh-xerpaqa-3\",\n            \"goal_date\": \"2028-10-06\",\n            \"updated_at\": \"2026-03-26T12:44:07.946486-03:00\",\n            \"deleted_at\": null,\n            \"created_at\": \"2026-03-26T12:44:07.945002-03:00\",\n            \"rules\": [\n                {\n                    \"id\": \"32ce083a-c948-4f75-a41c-ad0edff421a8\",\n                    \"user_id\": \"0c79f672-e604-4fa4-86f8-389f5d669113\",\n                    \"amount\": 444,\n                    \"salary_percentage\": 0,\n                    \"execution_frequency\": null,\n                    \"rule_execution_days\": null,\n                    \"soccer_condition\": null,\n                    \"soccer_team\": null,\n                    \"weather_city\": null,\n                    \"temperature\": 0,\n                    \"created_at\": \"2026-03-26T12:44:07.993548-03:00\",\n                    \"rule_type\": {\n                        \"id\": \"229011e5-fb7a-447c-bada-bb48010175ce\",\n                        \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                        \"item_name\": \"rule_type_guilty_pleasure\",\n                        \"description\": \"Regla placer culpable\",\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                            \"name\": \"Placer culpable\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} en {description}\"\n                        }\n                    },\n                    \"rule_status\": {\n                        \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n                        \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                        \"item_name\": \"rule_status_active\",\n                        \"description\": \"Regla activa\",\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_STATUS_ACTIVE\"\n                        }\n                    },\n                    \"transaction_category\": {\n                        \"id\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\",\n                        \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n                        \"item_name\": \"Shopping\",\n                        \"description\": \"Deportes\",\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"SHOPPING\"\n                        }\n                    },\n                    \"spend_less_limit_amount\": 0,\n                    \"spend_less_category_id\": null,\n                    \"deleted_at\": null\n                }\n            ]\n        }\n    ]\n}"}],"_postman_id":"2f33d926-bf46-4f0c-9ebb-d24d5cba6ea5"},{"name":"Obtener proyecto","id":"0a19a608-7ca6-464c-9408-c359d7fe639b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/single-rule-project/{{project_id}}/","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","single-rule-project","{{project_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"0da66f89-bc72-47d6-8203-4ae2deff3603","name":"200 ok","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/single-rule-project/{{project_id}}/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"ff2121e5-ca9c-466c-8321-bf266882bd6a\",\n    \"user_id\": \"0c79f672-e604-4fa4-86f8-389f5d669113\",\n    \"project_category\": {\n        \"id\": \"5877afb7-c6d8-4023-8498-9280890f3155\",\n        \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n        \"item_name\": \"project_type_other\",\n        \"description\": \"Meta de ahorro para otro\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/projects/otros.png\",\n            \"name\": \"Otro\",\n            \"color\": \"#7C2582\",\n            \"order\": 8,\n            \"active\": true,\n            \"short_name\": \"PROJECT_TYPE_OTHER\",\n            \"description\": \"\"\n        }\n    },\n    \"project_status\": {\n        \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n        \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n        \"item_name\": \"project_status_active\",\n        \"description\": \"Meta activa\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n        }\n    },\n    \"project_config\": {\n        \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n        \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n        \"item_name\": \"project_config_default\",\n        \"description\": \"Configuracion por defecto para una meta, sin restricciones.\",\n        \"metadata\": {\n            \"limit\": null,\n            \"default\": true,\n            \"available\": true,\n            \"access_denied\": {},\n            \"permission_edit_fields\": [\n                \"project_name\",\n                \"goal_date\",\n                \"total\",\n                \"project_category_id\"\n            ],\n            \"fields_required_to_create\": [\n                \"project_name\",\n                \"goal_date\",\n                \"total\"\n            ],\n            \"validate_project_amount_achieved\": true\n        }\n    },\n    \"project_name\": \"Regla 52 semanas\",\n    \"total\": 10000,\n    \"progress\": 0,\n    \"processing\": 0,\n    \"pending\": 0,\n    \"investment_returns\": 0,\n    \"from_account\": \"xh-xerpaqa-1\",\n    \"to_account\": \"xh-xerpaqa-3\",\n    \"goal_date\": \"2028-10-06\",\n    \"updated_at\": \"2026-03-25T16:23:20.508121-03:00\",\n    \"deleted_at\": null,\n    \"created_at\": \"2026-03-25T16:23:20.508074-03:00\",\n    \"rules\": [\n        {\n            \"id\": \"2282b764-8bf1-4af3-a321-5173f065751b\",\n            \"user_id\": \"0c79f672-e604-4fa4-86f8-389f5d669113\",\n            \"amount\": 0,\n            \"salary_percentage\": 0,\n            \"execution_frequency\": null,\n            \"rule_execution_days\": null,\n            \"soccer_condition\": null,\n            \"soccer_team\": null,\n            \"weather_city\": null,\n            \"temperature\": 0,\n            \"created_at\": \"2026-03-25T16:23:20.524704-03:00\",\n            \"rule_type\": {\n                \"id\": \"90832d0a-3879-40b5-a45b-729e4a964749\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_52_weeks\",\n                \"description\": \"Regla 52 semanas\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                    \"name\": \"Desafío 52 semanas\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                    \"description\": \"Ahorra $1.00 la primera semana, $2.00 la segunda semana y asi hasta la semana 52.\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                    \"frequency_description\": \"Ahorra {amount} primera semana, $2.00 la segunda, $3.00 la tercera y así hasta la semana 52 en que ahorras $52.00 {description}\"\n                }\n            },\n            \"rule_status\": {\n                \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n                \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                \"item_name\": \"rule_status_active\",\n                \"description\": \"Regla activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_STATUS_ACTIVE\"\n                }\n            },\n            \"transaction_category\": null,\n            \"spend_less_limit_amount\": 0,\n            \"spend_less_category_id\": null,\n            \"deleted_at\": null\n        }\n    ]\n}"}],"_postman_id":"0a19a608-7ca6-464c-9408-c359d7fe639b"},{"name":"Eliminar proyecto / regla","id":"4546b8c6-8212-4337-a96a-349b5732338e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"DELETE","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/single-rule-project/{{project_id}}/","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","single-rule-project","{{project_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"20f3be80-8f84-49a1-9675-ce9e56a35dd3","name":"Eliminar proyecto / regla","originalRequest":{"method":"DELETE","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/single-rule-project/{{project_id}}/"},"status":"No Content","code":204,"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":""}],"_postman_id":"4546b8c6-8212-4337-a96a-349b5732338e"},{"name":"Crear proyecto y regla","id":"01f8e415-bd3c-47b6-bdfc-3cb0fc5bd7cd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    // ── OBLIGATORIOS (siempre requeridos)                    \n    \"rule_type\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\", // REQUERIDO — UUID del tipo de regla         \n    \"from_account\": \"{{from_account}}\", // REQUERIDO — cuenta origen                 \n    \"to_account\": \"{{to_account}}\", // REQUERIDO — cuenta destino                \n    // ── OPCIONALES generales                      \n    \"project_name\": \"Mi ahorro\", // OPCIONAL — si se omite, se usa la descripción del tipo de regla\n    \"total\": \"600000.00\", // OPCIONAL — meta de monto total del proyecto                      \n    \"goal_date\": \"2027-01-01\", // OPCIONAL — fecha futura de meta                               \n    // ── OPCIONALES según tipo de regla                    \n    \"amount\": \"50000.00\", // OPCIONAL* fixed_amount | guilty_pleasure | soccer_passion       \n    \"execution_frequency\": \"M\", // OPCIONAL* fixed_amount — D=diaria | S=semanal | Q=quincena M=                                                                                                 \n    \"rule_execution_days\": [\n        5\n    ], // OPCIONAL  fixed_amount  S = [1 a 7] Q = [1-14, 15-31] M [1 A 31]                                                                                  \n    \"transaction_category\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\", // OPCIONAL* guilty_pleasure —                                                                                             \n    \"soccer_team\": \"<uuid>\", // OPCIONAL* soccer_passion — UUID del equipo                   \n    \"soccer_condition\": \"G\", // OPCIONAL* soccer_passion — J=juega | G=gana | A=anota | E=empata\n    \"salary_percentage\": 10, // OPCIONAL* fixed_salary  — valor entre 1 y 50                    \n    \"salary_execution_day\": 5 // OPCIONAL* fixed_salary  — día del mes de ejecución              \n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/single-rule-project/","description":"<h2 id=\"add-single-rule-project\">Add Single Rule Project</h2>\n<p>This endpoint allows users to create a new single rule project under their saving service. The request is made to the specified user's endpoint and requires a JSON payload that defines the parameters of the rule project.</p>\n<h3 id=\"request-parameters\">Request Parameters</h3>\n<p>The request body must contain the following parameters:</p>\n<ul>\n<li><p><strong>rule_type</strong> (string): The unique identifier for the type of rule being created.</p>\n</li>\n<li><p><strong>from_account</strong> (string): The identifier for the account from which the funds will be drawn.</p>\n</li>\n<li><p><strong>to_account</strong> (string): The identifier for the account to which the funds will be allocated.</p>\n</li>\n<li><p><strong>project_name</strong> (string): A descriptive name for the saving project.</p>\n</li>\n<li><p><strong>total</strong> (string): The total amount of money targeted for the saving project.</p>\n</li>\n<li><p><strong>goal_date</strong> (string): The date by which the saving goal should be achieved, formatted as YYYY-MM-DD.</p>\n</li>\n<li><p><strong>amount</strong> (string): The amount of money to be saved in each execution cycle.</p>\n</li>\n<li><p><strong>execution_frequency</strong> (string): The frequency with which the saving rule will be executed (e.g., daily, weekly, monthly).</p>\n</li>\n<li><p><strong>rule_execution_days</strong> (array of integers): An array specifying the days of the week on which the rule should be executed (0 for Sunday, 1 for Monday, etc.).</p>\n</li>\n<li><p><strong>transaction_category</strong> (string): The unique identifier for the category of transactions associated with the rule.</p>\n</li>\n<li><p><strong>soccer_team</strong> (string): A unique identifier related to a specific soccer team, if applicable.</p>\n</li>\n<li><p><strong>soccer_condition</strong> (string): A condition related to the soccer team, if applicable.</p>\n</li>\n<li><p><strong>salary_percentage</strong> (integer): The percentage of the salary to be allocated to the saving project.</p>\n</li>\n<li><p><strong>salary_execution_day</strong> (integer): The specific day of the month on which the salary allocation will occur.</p>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>Upon successful creation of the single rule project, the API will respond with a confirmation of the project details, including the unique identifier for the newly created project and any other relevant information.</p>\n<p>Ensure that all required fields are provided in the request body to avoid errors during the project creation process.</p>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","single-rule-project",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"bf4189b8-d1ad-4bc7-8ebc-83c32a6ff7e1","name":"Crear proyecto y regla","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    // ── OBLIGATORIOS (siempre requeridos)                    \n    \"rule_type\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\", // REQUERIDO — UUID del tipo de regla         \n    \"from_account\": \"FROM_001\", // REQUERIDO — cuenta origen                 \n    \"to_account\": \"TO_001\", // REQUERIDO — cuenta destino                \n    // ── OPCIONALES generales                      \n    \"project_name\": \"Mi ahorro\", // OPCIONAL — si se omite, se usa la descripción del tipo de regla\n    \"total\": \"600000.00\", // OPCIONAL — meta de monto total del proyecto                      \n    \"goal_date\": \"2027-01-01\", // OPCIONAL — fecha futura de meta                               \n    // ── OPCIONALES según tipo de regla                    \n    \"amount\": \"50000.00\", // OPCIONAL* fixed_amount | guilty_pleasure | soccer_passion       \n    \"execution_frequency\": \"M\", // OPCIONAL* fixed_amount — D=diaria | S=semanal | Q=quincena M=                                                                                                 \n    \"rule_execution_days\": [\n        5\n    ], // OPCIONAL  fixed_amount  S = [1 a 7] Q = [1-14, 15-31] M [1 A 31]                                                                                  \n    \"transaction_category\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\", // OPCIONAL* guilty_pleasure —                                                                                             \n    \"soccer_team\": \"<uuid>\", // OPCIONAL* soccer_passion — UUID del equipo                   \n    \"soccer_condition\": \"G\", // OPCIONAL* soccer_passion — J=juega | G=gana | A=anota | E=empata\n    \"salary_percentage\": 10, // OPCIONAL* fixed_salary  — valor entre 1 y 50                    \n    \"salary_execution_day\": 5 // OPCIONAL* fixed_salary  — día del mes de ejecución              \n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/single-rule-project/"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"id\": \"c8cb54b5-5bd0-45ac-be2c-343af9f97974\",\n    \"user_id\": \"0c79f672-e604-4fa4-86f8-389f5d669113\",\n    \"project_category\": {\n        \"id\": \"5877afb7-c6d8-4023-8498-9280890f3155\",\n        \"catalog\": \"2b40a466-8f48-4c4a-a03f-9094b9dbe7b0\",\n        \"item_name\": \"project_type_other\",\n        \"description\": \"Meta de ahorro para otro\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/projects/otros.png\",\n            \"name\": \"Otro\",\n            \"color\": \"#7C2582\",\n            \"order\": 8,\n            \"active\": true,\n            \"short_name\": \"PROJECT_TYPE_OTHER\",\n            \"description\": \"\"\n        }\n    },\n    \"project_status\": {\n        \"id\": \"f2a34b3c-5eea-4bfd-a18e-06d675826486\",\n        \"catalog\": \"b1da15e4-7011-45f3-8a99-0bde59042bc2\",\n        \"item_name\": \"project_status_active\",\n        \"description\": \"Meta activa\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/projects/active.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"PROJECT_STATUS_ACTIVE\"\n        }\n    },\n    \"project_config\": {\n        \"id\": \"deead368-205e-464b-9d8c-82cb93517eef\",\n        \"catalog\": \"ef922ba6-ed38-427e-9740-379501cd3ee6\",\n        \"item_name\": \"project_config_default\",\n        \"description\": \"Configuracion por defecto para una meta, sin restricciones.\",\n        \"metadata\": {\n            \"limit\": null,\n            \"default\": true,\n            \"available\": true,\n            \"access_denied\": {},\n            \"permission_edit_fields\": [\n                \"project_name\",\n                \"goal_date\",\n                \"total\",\n                \"project_category_id\"\n            ],\n            \"fields_required_to_create\": [\n                \"project_name\",\n                \"goal_date\",\n                \"total\"\n            ],\n            \"validate_project_amount_achieved\": true\n        }\n    },\n    \"project_name\": \"Regla placer culpable\",\n    \"total\": 10000,\n    \"progress\": 0,\n    \"processing\": 0,\n    \"pending\": 0,\n    \"investment_returns\": 0,\n    \"from_account\": \"xh-xerpaqa-1\",\n    \"to_account\": \"xh-xerpaqa-3\",\n    \"goal_date\": \"2028-10-06\",\n    \"updated_at\": \"2026-03-26T17:11:15.336131-03:00\",\n    \"deleted_at\": null,\n    \"created_at\": \"2026-03-26T17:11:15.336087-03:00\",\n    \"rules\": [\n        {\n            \"id\": \"5257fb70-b5c8-4835-aeae-d67ce775911f\",\n            \"user_id\": \"0c79f672-e604-4fa4-86f8-389f5d669113\",\n            \"amount\": 444,\n            \"salary_percentage\": 0,\n            \"execution_frequency\": null,\n            \"rule_execution_days\": null,\n            \"soccer_condition\": null,\n            \"soccer_team\": null,\n            \"weather_city\": null,\n            \"temperature\": 0,\n            \"created_at\": \"2026-03-26T17:11:15.369908-03:00\",\n            \"rule_type\": {\n                \"id\": \"229011e5-fb7a-447c-bada-bb48010175ce\",\n                \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n                \"item_name\": \"rule_type_guilty_pleasure\",\n                \"description\": \"Regla placer culpable\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                    \"name\": \"Placer culpable\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                    \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                    \"frequency_description\": \"Ahorra {amount} en {description}\"\n                }\n            },\n            \"rule_status\": {\n                \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n                \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n                \"item_name\": \"rule_status_active\",\n                \"description\": \"Regla activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"RULE_STATUS_ACTIVE\"\n                }\n            },\n            \"transaction_category\": {\n                \"id\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\",\n                \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n                \"item_name\": \"Shopping\",\n                \"description\": \"Deportes\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"SHOPPING\"\n                }\n            },\n            \"spend_less_limit_amount\": 0,\n            \"spend_less_category_id\": null,\n            \"deleted_at\": null\n        }\n    ]\n}"}],"_postman_id":"01f8e415-bd3c-47b6-bdfc-3cb0fc5bd7cd"},{"name":"Editar regla","id":"0befc97b-bd75-47a5-8400-b50e53daac82","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\n    // ── Todos los campos son OPCIONALES en PATCH ───────────────────────────────                       \n\n\n    // ── Estado de la regla ─────────────────────────────────────────────────────                         \n    \"rule_status\": \"94bcd197-0d33-40e4-8793-78aa42ad3220\", // OPCIONAL — UUID del estado   \n\n    // ── Campos comunes ─────────────────────────────────────────────────────────                       \n    \"rule_type\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\", // OPCIONAL — cambiar tipo de regla     \n    \"amount\": \"75000.00\", // OPCIONAL — fixed_amount | guilty_pleasure | soccer_passion                                                                         \n                                                                                                           \n    // ── Solo fixed_amount ──────────────────────────────────────────────────────                         \n    \"execution_frequency\": \"S\", // OPCIONAL — D=diaria | S=semanal | Q=quincenal | M=mensual      \n    \"rule_execution_days\": [\n        1,\n        15\n    ], // OPCIONAL  fixed_amount  S = [1 a 7] Q = [1-14, 15-31] M [1 A 31]       \n\n    // ── Solo guilty_pleasure ───────────────────────────────────────────────────                         \n    \"transaction_category\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\", // OPCIONAL — UUID de categoría    \n\n    // ── Solo soccer_passion ────────────────────────────────────────────────────\n    \"soccer_team\": \"<uuid>\", // OPCIONAL — UUID del equipo                                           \n    \"soccer_condition\": \"G\", // OPCIONAL — J=juega | G=gana | A=anota | E=empata    \n\n    // ── Solo fixed_salary ──────────────────────────────────────────────────────                         \n    \"salary_percentage\": 15, // OPCIONAL — valor entre 1 y 50                                        \n    \"salary_execution_day\": 10 // OPCIONAL — día del mes de ejecución                                    \n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/single-rule-project/{{project_id}}/","description":"<h3 id=\"patch-api-savingv1saving-serviceusersuser_idsingle-rule-projectproject_id\">PATCH /api-saving/v1/saving-service/users/{user_id}/single-rule-project/{project_id}/</h3>\n<p>This endpoint allows you to update the details of a specific rule project associated with a user. The request modifies various attributes of the rule project identified by the <code>user_id</code> and <code>project_id</code>.</p>\n<h4 id=\"request-body-parameters\">Request Body Parameters</h4>\n<ul>\n<li><p><strong>rule_status</strong> (string): The status of the rule, represented by a unique identifier.</p>\n</li>\n<li><p><strong>rule_type</strong> (string): The type of the rule, represented by a unique identifier.</p>\n</li>\n<li><p><strong>amount</strong> (string): The monetary amount associated with the rule.</p>\n</li>\n<li><p><strong>execution_frequency</strong> (string): The frequency at which the rule is executed (e.g., daily, weekly).</p>\n</li>\n<li><p><strong>rule_execution_days</strong> (array of integers): An array indicating the days on which the rule is executed.</p>\n</li>\n<li><p><strong>transaction_category</strong> (string): The category of transactions related to the rule, represented by a unique identifier.</p>\n</li>\n<li><p><strong>soccer_team</strong> (string): A unique identifier for the soccer team associated with the rule.</p>\n</li>\n<li><p><strong>soccer_condition</strong> (string): The condition related to the soccer rule.</p>\n</li>\n<li><p><strong>salary_percentage</strong> (integer): The percentage of salary allocated to the rule.</p>\n</li>\n<li><p><strong>salary_execution_day</strong> (integer): The specific day of the month when the salary execution occurs.</p>\n</li>\n</ul>\n<h4 id=\"response-structure\">Response Structure</h4>\n<p>The response will return the updated rule project details, including:</p>\n<ul>\n<li><p><strong>id</strong> (string): The unique identifier of the rule project.</p>\n</li>\n<li><p><strong>user_id</strong> (string): The identifier of the user associated with the rule project.</p>\n</li>\n<li><p><strong>amount</strong> (number): The updated monetary amount.</p>\n</li>\n<li><p><strong>salary_percentage</strong> (number): The updated salary percentage.</p>\n</li>\n<li><p><strong>execution_frequency</strong> (string): The frequency of execution.</p>\n</li>\n<li><p><strong>rule_execution_days</strong> (object): An object containing the days on which the rule is executed.</p>\n</li>\n<li><p><strong>soccer_condition</strong> (string or null): The condition related to the soccer rule.</p>\n</li>\n<li><p><strong>soccer_team</strong> (string or null): The identifier for the soccer team.</p>\n</li>\n<li><p><strong>weather_city</strong> (string or null): The city related to weather conditions.</p>\n</li>\n<li><p><strong>temperature</strong> (number): The temperature associated with the rule.</p>\n</li>\n<li><p><strong>created_at</strong> (string): The timestamp when the rule was created.</p>\n</li>\n<li><p><strong>rule_type</strong> (object): An object containing details about the rule type, including its metadata.</p>\n</li>\n<li><p><strong>rule_status</strong> (object): An object containing details about the rule status, including its metadata.</p>\n</li>\n<li><p><strong>transaction_category</strong> (object): An object containing details about the transaction category, including its metadata.</p>\n</li>\n<li><p><strong>spend_less_limit_amount</strong> (number): The limit amount for spending less.</p>\n</li>\n<li><p><strong>spend_less_category_id</strong> (string or null): The category ID for spending less.</p>\n</li>\n<li><p><strong>deleted_at</strong> (string or null): The timestamp when the rule was deleted, if applicable.</p>\n</li>\n</ul>\n<p>This endpoint is essential for maintaining and updating user-specific rule projects within the saving service.</p>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","single-rule-project","{{project_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"806fd846-b854-4e0f-a2fb-aa5e15a74b48","name":"New Request","originalRequest":{"method":"GET","header":[]},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"id\": \"5257fb70-b5c8-4835-aeae-d67ce775911f\",\n    \"user_id\": \"0c79f672-e604-4fa4-86f8-389f5d669113\",\n    \"amount\": 1500,\n    \"salary_percentage\": 0,\n    \"execution_frequency\": \"M\",\n    \"rule_execution_days\": {\n        \"days\": []\n    },\n    \"soccer_condition\": null,\n    \"soccer_team\": null,\n    \"weather_city\": null,\n    \"temperature\": 0,\n    \"created_at\": \"2026-03-26T17:11:15.369908-03:00\",\n    \"rule_type\": {\n        \"id\": \"229011e5-fb7a-447c-bada-bb48010175ce\",\n        \"catalog\": \"47bd8165-2b84-4bc9-91d0-6126beee2b40\",\n        \"item_name\": \"rule_type_guilty_pleasure\",\n        \"description\": \"Regla placer culpable\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n            \"name\": \"Placer culpable\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n            \"frequency_description\": \"Ahorra {amount} en {description}\"\n        }\n    },\n    \"rule_status\": {\n        \"id\": \"65729137-0844-4b28-85b5-2e81b73a948a\",\n        \"catalog\": \"2cc53df2-5a17-4205-8622-d68d90b75311\",\n        \"item_name\": \"rule_status_active\",\n        \"description\": \"Regla activa\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/rules/active.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"RULE_STATUS_ACTIVE\"\n        }\n    },\n    \"transaction_category\": {\n        \"id\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\",\n        \"catalog\": \"0fc441ec-a52f-4d5d-a36d-c07181c4f65f\",\n        \"item_name\": \"Shopping\",\n        \"description\": \"Deportes\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"SHOPPING\"\n        }\n    },\n    \"spend_less_limit_amount\": 0,\n    \"spend_less_category_id\": null,\n    \"deleted_at\": null\n}"}],"_postman_id":"0befc97b-bd75-47a5-8400-b50e53daac82"}],"id":"bec05947-7328-4f1d-aaee-be29caa6d0e3","_postman_id":"bec05947-7328-4f1d-aaee-be29caa6d0e3","description":""}],"id":"97e1b9c3-3ed7-4d2c-b7dd-1195cb73af0e","description":"<h2 id=\"api-savings\">API <strong>Savings</strong></h2>\n<p>Permite gestionar las metas y reglas de ahorro creadas por los usuarios dentro de la plataforma de Xerpa. Está diseñada para integrarse fácilmente en aplicaciones bancarias o financieras, habilitando experiencias personalizadas de ahorro automático.</p>\n<p>Este conjunto de endpoints permite a las aplicaciones externas:</p>\n<ul>\n<li><p>Realizar operaciones con las <strong>metas de ahorro</strong>.</p>\n</li>\n<li><p>Gestiuonar las <strong>reglas automáticas</strong> de ahorro a cada meta.</p>\n</li>\n<li><p>Consultar el estado, el progreso y el historial de <strong>movimientos</strong> y <strong>actividades</strong> relacionados con los objetivos del usuario.</p>\n</li>\n</ul>\n<img src=\"https://content.pstmn.io/fedc3217-d2b2-4464-8afe-aba71f3a74e3/c2F2aW5ncy5wbmc=\" />\n\n<h3 id=\"📌-casos-de-uso-comunes\">📌 Casos de uso comunes</h3>\n<ul>\n<li><p>Mostrar al usuario un resumen de sus metas activas y progreso acumulado.</p>\n</li>\n<li><p>Permitirle crear una nueva meta con condiciones personalizadas.</p>\n</li>\n<li><p>Realizar abonos manuales a una meta de ahorro.</p>\n</li>\n<li><p>Retirar dinero desde una meta de ahorro.</p>\n</li>\n<li><p>Implementar agregar, editar, pausar o elimnar reglas de ahorro como monto fijo, redondeo, placer culpable, etc.</p>\n</li>\n<li><p>Ver el historial de todos los movimientos de dinero de la meta.</p>\n</li>\n</ul>\n<hr />\n<h3 id=\"🔐-autenticación-requerida\">🔐 Autenticación requerida</h3>\n<p>Todos los endpoints requieren un <strong>User Token válido</strong>, ya que cada solicitud se vincula a un usuario específico.</p>\n<blockquote>\n<p>El token debe enviarse como:<br /><code>Authorization: Bearer {{user_token}}</code> </p>\n</blockquote>\n<hr />\n<h3 id=\"🎯-consideraciones\">🎯 Consideraciones</h3>\n<ul>\n<li><p>Cada meta de ahorro pertenece a un usuario específico.</p>\n</li>\n<li><p>Es posible tener múltiples metas activas al mismo tiempo.</p>\n</li>\n<li><p>Las reglas de ahorro pueden ser editadas o eliminadas por el usuario en cualquier momento.</p>\n</li>\n<li><p>Solo se puede obtener el detalle de la información de metas activas.</p>\n</li>\n</ul>\n<hr />\n<hr />\n<h1 id=\"flujo-de-ahorros\">Flujo de Ahorros</h1>\n<p>Los ahorros son los registros que se generan en el módulo de <strong>Ahorro Automático</strong> por medio de las reglas que el usuario configura y que monitorean eventos de su día a día.</p>\n<p>El Ahorro Automático se ejecuta mediante el intercambio de información a nivel de backend entre Xerpa y el banco. Esta información se comparte con el banco a través de un filesystem de xerpa al cual tiene acceso al banco con sus respectivas credenciales.</p>\n<img src=\"https://content.pstmn.io/4bbf97d5-8a06-4613-87cc-386e07cac972/Rmx1am9zQWhvcnJvLnBuZw==\" />\n\n<h3 id=\"etapa-0-cálculo-de-ahorros\">Etapa 0: Cálculo de ahorros</h3>\n<p>Previo al inicio de cada proceso de ahorro en batch, en <em>xerpa</em> se ejecutan las reglas y se calculan los ahorros pendientes de cada usuario.<br />Xerpa deposita dos archivos en el filesystem para comenzar el proceso:</p>\n<ul>\n<li><p><strong>YYYYMMDD_payments.TXT</strong>: documento con los ahorros para que el banco ejecute.</p>\n</li>\n<li><p><strong>YYYYMMDD_payments.DATA</strong>: documento que funciona como bandera para indicar que el archivo de ahorros fue depositado exitosamente.</p>\n</li>\n</ul>\n<h3 id=\"etapa-1-ejecución-de-ahorros\">Etapa 1: Ejecución de ahorros</h3>\n<p>El banco de acuerdo a su horario de ejecución de tareas batch lee el archivo con la información de los ahorros pendientes e inicia el proceso de cargo y abono en las cuentas de los usuarios.<br />Dentro del archivo y en cada registro se indica la información para cada <strong>cargo</strong> y <strong>abono</strong>: usuario, origen, destino y monto.<br />Estas operaciones son ejecutadas por el banco para luego compartirle a <em>xerpa</em> los resultados de cada una de ellas.</p>\n<h3 id=\"etapa-2-respuesta-de-ahorros\">Etapa 2: Respuesta de Ahorros</h3>\n<p>Una vez finalizado el proceso de cargo y abono, se genera un archivo con los resultados de las operaciones y se deposita en el filesystem <em>xerpa</em>.</p>\n<p>Junto al archivo de resultados, se debe adjuntar un archivo que se utiliza como bandera con el mismo nombre y extensión .data para indicar al filewatcher que el archivo original fue subido exitosamente.</p>\n<p><strong>Ejemplo</strong>:</p>\n<ul>\n<li><p><strong>20220501_payments_response.TXT</strong> -&gt; Archivo con los resultados de ahorros.</p>\n</li>\n<li><p><strong>20220501_payments_response.DATA</strong> -&gt; Archivo bandera con contenido vacío.</p>\n</li>\n</ul>\n<p>Por parte de <em>xerpa</em> se valida el archivo y si existen errores se retorna un archivo de control con el código de error identificado.</p>\n<p>Si es válido el archivo se inicia su procesamiento y se deposita un archivo de control indicando los registros recibidos y procesados.</p>\n<hr />\n<h1 id=\"definición-de-archivos\">Definición de archivos</h1>\n<h2 id=\"archivo-ahorros-pendientes\">Archivo ahorros pendientes</h2>\n<p>La primera fila del archivo son las cabeceras de cada columna.</p>\n<p>Los registros del archivo se consideran desde la fila 2 en adelante.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Columna</th>\n<th>Descripción</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>payment_id</td>\n<td>Identificador único del ahorro. No se debe repetir entre los registros del archivo ni en los anteriores</td>\n</tr>\n<tr>\n<td>user_id</td>\n<td>Identificador único del usuario que realiza la transacción. Bajo este ID se vinculan todos los eventos del usuario. Debe ser consistente con otros otros procesos batch y de identificación.</td>\n</tr>\n<tr>\n<td>payment_date</td>\n<td>Fecha del ahorro en formato YYYY-MM-DD</td>\n</tr>\n<tr>\n<td>from_account_id</td>\n<td>Identificador de la cuenta de origen donde el banco realizará el cargo</td>\n</tr>\n<tr>\n<td>to_account_id</td>\n<td>Identificador de la cuenta de destino a donde se realizará el abono</td>\n</tr>\n<tr>\n<td>amount</td>\n<td>Monto a ahorrar, incluyendo decimales.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Todos los campos son separados por un pipe \"|\".</p>\n<h4 id=\"nombre-del-archivo-de-ahorros\"><strong>Nombre del archivo de ahorros</strong></h4>\n<blockquote>\n<p>El nombre del archivo incluye la fecha de creación con el formato<br /><em><strong>YYYY-MM-DD_payments.TXT</strong></em><br /><strong>- YYYY</strong>: Año<br /><strong>- MM</strong>: Mes. Si es de 1 a 9 anteponer un 0.<br /><strong>- DD</strong>: Día del mes. Si es de 1 a 9 anteponer un 0.<br /><strong>Ejemplo</strong>:<br /><em><strong>2022-05-01_payments.TXT</strong></em> </p>\n</blockquote>\n<h3 id=\"ejemplo-de-archivo-de-ahorros-pendientes\">Ejemplo de archivo de ahorros pendientes</h3>\n<p>2022_05_01_payments.TXT</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>payment_id|user_id|date|from_account_id|to_account_id|amount\n6A6CE368-BD07-C607-8632-382514B325B2|12DF4015-78DA-B7EB-4350-A8160717CC7C|2022-05-01|881586C0-06A4-2403-FF79-BA509A18EB62|31A692C8-353B-ADAA-9540-964266949A94|220,1\n61A41265-5369-3052-BB4F-A870B82070E6|AFEA8C8C-984A-6A1A-3FCF-B43CED325B71|2022-05-02|9416CE14-1E4F-AF4D-7FF5-8048FCE1CD8B|ECA07989-8386-F21E-8592-B4A0E92AD69C|197,76\n4938CBE3-CD95-7069-06C9-754DBD7E69C5|1E49CE42-240D-2BE2-D2D2-E0D4BB374F5D|2022-05-03|038E7C58-D5EB-FE70-400D-05796E58AC97|53F59F1D-62A4-4797-A0C2-4BEBCA668BBB|56,8\n6775C1C4-425B-08CB-B074-68BD249A1271|372A3B0A-8096-5608-DCE1-AA3B7F0CB813|2022-05-04|3407E5CF-E109-4BAB-D666-213E33599C65|3C6CDFCE-05C1-8EF2-D5FD-77566F572788|22,42\n\n</code></pre><h2 id=\"archivo-de-respuesta-de-ahorros\">Archivo de respuesta de ahorros</h2>\n<p>La primera fila del archivo son las cabeceras de cada columna.</p>\n<p>Los registros del archivo se consideran desde la fila 2 en adelante.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Columna</th>\n<th>Descripción</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>payment_id</td>\n<td>Identificador único del ahorro. No se debe repetir entre los registros del archivo ni en los anteriores</td>\n</tr>\n<tr>\n<td>user_id</td>\n<td>Identificador único del usuario que realiza el ahorro.</td>\n</tr>\n<tr>\n<td>payment_date</td>\n<td>Fecha del ahorro en formato YYYY-MM-DD</td>\n</tr>\n<tr>\n<td>from_account_id</td>\n<td>Identificador de la cuenta de origen donde el banco realizará el cargo</td>\n</tr>\n<tr>\n<td>to_account_id</td>\n<td>Identificador de la cuenta de destino a donde se realizará el abono</td>\n</tr>\n<tr>\n<td>amount</td>\n<td>Monto a ahorrar, incluyendo decimales.</td>\n</tr>\n<tr>\n<td>operation_code</td>\n<td>Identificador interno del banco de la operación de cargo y abono</td>\n</tr>\n<tr>\n<td>result_code</td>\n<td>Código según catálogo del resultado de la operación</td>\n</tr>\n<tr>\n<td>result_message</td>\n<td>Mensaje opcional del resultado de la operación de cargo y abono</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"ejemplo-de-archivo-de-respuesta-de-ahorros\">Ejemplo de archivo de respuesta de ahorros</h3>\n<p>2022-05-01_payments_response.TXT</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>payment_id|user_id|date|from_account_id|to_account_id|amount\n6A6CE368-BD07-C607-8632-382514B325B2|12DF4015-78DA-B7EB-4350-A8160717CC7C|2022-05-01|881586C0-06A4-2403-FF79-BA509A18EB62|31A692C8-353B-ADAA-9540-964266949A94|220,1|44682|881586C0-06A4-2403-FF79-BA509A18EB62|200|AHORRO EXITOSO\n61A41265-5369-3052-BB4F-A870B82070E6|AFEA8C8C-984A-6A1A-3FCF-B43CED325B71|2022-05-02|9416CE14-1E4F-AF4D-7FF5-8048FCE1CD8B|ECA07989-8386-F21E-8592-B4A0E92AD69C|197,76|44683|9416CE14-1E4F-AF4D-7FF5-8048FCE1CD8B|100|SIN FONDOS\n4938CBE3-CD95-7069-06C9-754DBD7E69C5|1E49CE42-240D-2BE2-D2D2-E0D4BB374F5D|2022-05-03|038E7C58-D5EB-FE70-400D-05796E58AC97|53F59F1D-62A4-4797-A0C2-4BEBCA668BBB|56,8|44684|038E7C58-D5EB-FE70-400D-05796E58AC97|500|ERROR\n6775C1C4-425B-08CB-B074-68BD249A1271|372A3B0A-8096-5608-DCE1-AA3B7F0CB813|2022-05-04|3407E5CF-E109-4BAB-D666-2\n\n</code></pre><h3 id=\"catálogo-de-códigos-de-respuesta\">Catálogo de códigos de respuesta</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Código</strong></th>\n<th><strong>Descripción</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>100</td>\n<td>Saldo insuficiente en cuenta de origen</td>\n</tr>\n<tr>\n<td>200</td>\n<td>Ahorro exitoso</td>\n</tr>\n<tr>\n<td>300</td>\n<td>El ahorro no se puede realizar porque el saldo no es suficiente para cubrir el ahorro y el <em>saldo de seguridad*</em></td>\n</tr>\n<tr>\n<td>500</td>\n<td>Error genérico en el proceso de ahorros</td>\n</tr>\n<tr>\n<td>510</td>\n<td>Error con el usuario</td>\n</tr>\n<tr>\n<td>511</td>\n<td>Error usuario no existe</td>\n</tr>\n<tr>\n<td>512</td>\n<td>Error usuario bloqueado</td>\n</tr>\n<tr>\n<td>520</td>\n<td>Error con cuenta de origen</td>\n</tr>\n<tr>\n<td>521</td>\n<td>Error cuenta de origen no existe</td>\n</tr>\n<tr>\n<td>522</td>\n<td>Error cuenta de origen bloqueada</td>\n</tr>\n<tr>\n<td>530</td>\n<td>Error con cuenta de destino</td>\n</tr>\n<tr>\n<td>531</td>\n<td>Error cuenta de destino no existe</td>\n</tr>\n<tr>\n<td>532</td>\n<td>Error cuenta de destino bloqueada</td>\n</tr>\n<tr>\n<td>550</td>\n<td>Error con proceso interno</td>\n</tr>\n</tbody>\n</table>\n</div><ul>\n<li><strong>Saldo de seguridad</strong>: En algunas implementaciones se busca que siempre quede en la cuenta de origen del usuario un monto mínimo después de aplicado el ahorro.</li>\n</ul>\n<h4 id=\"ejemplos\"><strong>Ejemplos</strong></h4>\n<ul>\n<li><p><strong>Ahorro exitoso</strong>:</p>\n<ul>\n<li><p>Saldo cuenta de origen: $15</p>\n</li>\n<li><p>Monto a ahorrar: $10</p>\n</li>\n<li><p>Resultado: ahorro realizado</p>\n</li>\n<li><p><strong>Código de respuesta:</strong> 200</p>\n</li>\n</ul>\n</li>\n<li><p><strong>Saldo insuficiente</strong>:</p>\n<ul>\n<li><p>Saldo cuenta de origen: $15</p>\n</li>\n<li><p>Monto a ahorrar: $18</p>\n</li>\n<li><p>Resultado: no se puede realizar el ahorro</p>\n</li>\n<li><p><strong>Código de respuesta:</strong> 100</p>\n</li>\n</ul>\n</li>\n<li><p><strong>Error en el proceso:</strong></p>\n<ul>\n<li><p>Si ocurre un error relacionado con el proceso, el usuario, la cuenta de origen o la cuenta de destino</p>\n</li>\n<li><p><strong>Código de respuesta:</strong> 500</p>\n</li>\n</ul>\n</li>\n<li><p><strong>Saldo de seguridad insuficiente</strong>:</p>\n<ul>\n<li><p>Saldo de seguridad configurado: $5</p>\n</li>\n<li><p>Saldo cuenta de origen: $15</p>\n</li>\n<li><p>Monto a ahorrar: $11</p>\n</li>\n<li><p>Saldo resultante: $4 (no cumple el mínimo requerido)</p>\n</li>\n<li><p><strong>Código de respuesta:</strong> 300</p>\n</li>\n</ul>\n</li>\n</ul>\n","_postman_id":"97e1b9c3-3ed7-4d2c-b7dd-1195cb73af0e"},{"name":"Gestión de Gastos","item":[{"name":"Metricas","item":[{"name":"Métricas mensuales de ingresos y gastos","event":[{"listen":"test","script":{"id":"112fdc0f-078c-472c-a707-f632f26ee5ed","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    year: 'number',\r","    months: 'array'\r","};\r","\r","const monthProperties = {\r","    year: 'number',\r","    month: 'string',\r","    disabled: 'boolean',\r","    incomes: 'number',\r","    expenses: 'number',\r","    balance: 'number'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties within the months array\r","pm.test(\"Months have expected properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0 && responseJson[0].months && responseJson[0].months.length > 0) {\r","        // Test only the first item in the months array\r","        xerpaTestApi.checkObjectProperties(responseJson[0].months[0], monthProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"bdb3e133-7a13-4315-8bfc-71924fb3760f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/metrics/balance/?category=ab0e1c52-4ab1-46b3-9384-7db452b282b2","description":"<p>Este endpoint permite <strong>obtener las métricas de ingresos y egresos del mes actual y de los últimos cinco meses atras</strong> de un usuario en un periodo determinado.</p>\n<h4 id=\"widgets\">Widgets</h4>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Resumen-mensual-21e7439960f0806d8e0add4a82456a3e?source=copy_link\">Resumen mensual</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/da0a144d-7c05-4785-a106-04204413f300/aW1hZ2UucG5n\" width=\"332\" height=\"238\" />\n\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Gastos-e-ingresos-6-meses-21e7439960f080d6809dc8a63881a539?source=copy_link\"> Gastos e ingresos (6 meses)</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/83159d10-6156-4ea4-bea5-aff3824578d6/aW1hZ2UucG5n\" alt height=\"473\" width=\"394\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Método**:** <code>GET</code></p>\n</li>\n<li><p>Endpoint**:**{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/metrics/balance/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>user_id</code> (string, requerido): ID del usuario.</li>\n</ul>\n</li>\n<li><p>Parámetros de query:</p>\n<ul>\n<li><code>category</code>(string): ID de la categoria.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON con las métricas consolidadas del balance financiero del usuario para el periodo consultado. Este entrega una lista de objetos, donde cada objeto representa un año en especifico, incluyendo:</p>\n<ul>\n<li><p><code>year</code>(number): Año de los ingresos.</p>\n</li>\n<li><p><code>months</code>(array of objects): Lista de objetos <code>month</code> donde se incluye el detalle del balance de cada mes:</p>\n<ul>\n<li><p><code>year</code>(number): Año del balance</p>\n</li>\n<li><p><code>month</code>(string): Mes del balance</p>\n</li>\n<li><p><code>disabled</code>(bool): Indica si esta activado o desactivado el balance</p>\n</li>\n<li><p><code>incomes</code>(number): Total de ingresos</p>\n</li>\n<li><p><code>expenses</code>(number): Total de gastos</p>\n</li>\n<li><p><code>balance</code>(number): Balance final del mes</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"year\": { \"type\": \"integer\" },\n      \"months\": {\n        \"type\": \"array\",\n        \"items\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"year\": { \"type\": \"integer\" },\n            \"month\": { \"type\": \"string\" },\n            \"disabled\": { \"type\": \"boolean\" },\n            \"incomes\": { \"type\": \"number\" },\n            \"expenses\": { \"type\": \"number\" },\n            \"balance\": { \"type\": \"number\" }\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","metrics","balance",""],"host":["{{host_app}}"],"query":[{"key":"category","value":"ab0e1c52-4ab1-46b3-9384-7db452b282b2"},{"disabled":true,"key":"sss","value":"3954361d-ddf5-46dc-a8f8-af98ee9811d1"}],"variable":[]}},"response":[{"id":"c9da0c1d-e32a-4a89-b560-9d0bb1741999","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/metrics/balance/","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","61a85f1f-98aa-4dcd-837d-84cf54bb532a","metrics","balance",""],"query":[{"key":"category","value":"ab0e1c52-4ab1-46b3-9384-7db452b282b2","type":"text","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 23:09:26 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"584"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"d3e64c6b-362b-4e6c-b021-ca11432a5df0"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cKS5-EWRIAMEaLw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3fea5-321892e80a7478497ba5d095;Parent=07e27abd94cab430;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"year\": 2024,\n        \"months\": [\n            {\n                \"year\": 2024,\n                \"month\": \"Marzo\",\n                \"disabled\": true,\n                \"incomes\": 0,\n                \"expenses\": 0,\n                \"balance\": 0\n            },\n            {\n                \"year\": 2024,\n                \"month\": \"Abril\",\n                \"disabled\": true,\n                \"incomes\": 0,\n                \"expenses\": 0,\n                \"balance\": 0\n            },\n            {\n                \"year\": 2024,\n                \"month\": \"Mayo\",\n                \"disabled\": true,\n                \"incomes\": 0,\n                \"expenses\": 0,\n                \"balance\": 0\n            },\n            {\n                \"year\": 2024,\n                \"month\": \"Junio\",\n                \"disabled\": false,\n                \"incomes\": 1050.22,\n                \"expenses\": 0,\n                \"balance\": 1050.22\n            },\n            {\n                \"year\": 2024,\n                \"month\": \"Julio\",\n                \"disabled\": true,\n                \"incomes\": 0,\n                \"expenses\": 0,\n                \"balance\": 0\n            },\n            {\n                \"year\": 2024,\n                \"month\": \"Agosto\",\n                \"disabled\": false,\n                \"incomes\": 100000,\n                \"expenses\": -12522.5,\n                \"balance\": 87477.5\n            }\n        ]\n    }\n]"}],"_postman_id":"bdb3e133-7a13-4315-8bfc-71924fb3760f"},{"name":"Métricas mensuales por categoría","event":[{"listen":"test","script":{"id":"112fdc0f-078c-472c-a707-f632f26ee5ed","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    year: 'number',\r","    months: 'array'\r","};\r","\r","const monthProperties = {\r","    year: 'number',\r","    month: 'string',\r","    disabled: 'boolean',\r","    incomes: 'number',\r","    expenses: 'number',\r","    balance: 'number'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties within the months array\r","pm.test(\"Months have expected properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0 && responseJson[0].months && responseJson[0].months.length > 0) {\r","        // Test only the first item in the months array\r","        xerpaTestApi.checkObjectProperties(responseJson[0].months[0], monthProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"44ed22a5-301a-453e-ab7c-abf245fc6c15","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/metrics/balance/?category=ab0e1c52-4ab1-46b3-9384-7db452b282b2","description":"<p>Este endpoint permite <strong>obtener las métricas agregadas de balance financiero</strong> de un usuario en un periodo determinado.</p>\n<h4 id=\"widgets\">Widgets</h4>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Detalle-categor-a-21e7439960f08079a807f3268b235170?source=copy_link\">Detalle categoría</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/39bcf88b-dce0-4a1c-9cde-7f6053580241/aW1hZ2UucG5n\" alt height=\"1049\" width=\"343\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Método**:** <code>GET</code></p>\n</li>\n<li><p>Endpoint**:**{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/metrics/balance/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>user_id</code> (string, requerido): ID del usuario.</li>\n</ul>\n</li>\n<li><p>Parámetros de query:</p>\n<ul>\n<li><code>category</code>(string): ID de la categoria.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON con las métricas consolidadas del balance financiero del usuario para el periodo consultado. Este entrega una lista de objetos, donde cada objeto representa un año en especifico, incluyendo:</p>\n<ul>\n<li><p><code>year</code>(number): Año de los ingresos.</p>\n</li>\n<li><p><code>months</code>(array of objects): Lista de objetos <code>month</code> donde se incluye el detalle del balance de cada mes:</p>\n<ul>\n<li><p><code>year</code>(number): Año del balance</p>\n</li>\n<li><p><code>month</code>(string): Mes del balance</p>\n</li>\n<li><p><code>disabled</code>(bool): Indica si esta activado o desactivado el balance</p>\n</li>\n<li><p><code>incomes</code>(number): Total de ingresos</p>\n</li>\n<li><p><code>expenses</code>(number): Total de gastos</p>\n</li>\n<li><p><code>balance</code>(number): Balance final del mes</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"year\": { \"type\": \"integer\" },\n      \"months\": {\n        \"type\": \"array\",\n        \"items\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"year\": { \"type\": \"integer\" },\n            \"month\": { \"type\": \"string\" },\n            \"disabled\": { \"type\": \"boolean\" },\n            \"incomes\": { \"type\": \"number\" },\n            \"expenses\": { \"type\": \"number\" },\n            \"balance\": { \"type\": \"number\" }\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","metrics","balance",""],"host":["{{host_app}}"],"query":[{"key":"category","value":"ab0e1c52-4ab1-46b3-9384-7db452b282b2"},{"disabled":true,"key":"sss","value":"3954361d-ddf5-46dc-a8f8-af98ee9811d1"}],"variable":[]}},"response":[{"id":"561e613a-5853-4fb6-8bc7-5ce51c53f3df","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/metrics/balance/?category=ab0e1c52-4ab1-46b3-9384-7db452b282b2","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","61a85f1f-98aa-4dcd-837d-84cf54bb532a","metrics","balance",""],"query":[{"key":"category","value":"ab0e1c52-4ab1-46b3-9384-7db452b282b2"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 23:08:46 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"1040"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"db6dbe27-b130-42ea-b922-25b1aa87ff45"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cKSzzH92oAMEIHQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3fe7e-13743cdb2791894c1169b7ee;Parent=44385362e56e6b4a;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"year\": 2024,\n        \"months\": [\n            {\n                \"year\": 2024,\n                \"month\": \"Marzo\",\n                \"amount_sum\": 0,\n                \"count_transactions\": 0,\n                \"average\": 0,\n                \"budget\": 0,\n                \"budget_spent\": 0,\n                \"has_budget\": false,\n                \"budget_id\": \"False\",\n                \"disabled\": true\n            },\n            {\n                \"year\": 2024,\n                \"month\": \"Abril\",\n                \"amount_sum\": 0,\n                \"count_transactions\": 0,\n                \"average\": 0,\n                \"budget\": 0,\n                \"budget_spent\": 0,\n                \"has_budget\": false,\n                \"budget_id\": \"False\",\n                \"disabled\": true\n            },\n            {\n                \"year\": 2024,\n                \"month\": \"Mayo\",\n                \"expenses_sum\": 0,\n                \"count_transactions\": 0,\n                \"average\": 0,\n                \"budget\": 0,\n                \"budget_spent\": 0,\n                \"has_budget\": false,\n                \"budget_id\": \"False\",\n                \"disabled\": true\n            },\n            {\n                \"year\": 2024,\n                \"month\": \"Junio\",\n                \"expenses_sum\": 0,\n                \"count_transactions\": 0,\n                \"average\": 0,\n                \"budget\": 0,\n                \"budget_spent\": 0,\n                \"has_budget\": false,\n                \"budget_id\": \"False\",\n                \"disabled\": true\n            },\n            {\n                \"year\": 2024,\n                \"month\": \"Julio\",\n                \"amount_sum\": 0,\n                \"count_transactions\": 0,\n                \"average\": 0,\n                \"budget\": 0,\n                \"budget_spent\": 0,\n                \"has_budget\": false,\n                \"budget_id\": \"False\",\n                \"disabled\": true\n            },\n            {\n                \"year\": 2024,\n                \"month\": \"Agosto\",\n                \"amount_sum\": 0,\n                \"count_transactions\": 0,\n                \"average\": 0,\n                \"budget\": 0,\n                \"budget_spent\": 0,\n                \"has_budget\": false,\n                \"budget_id\": \"False\",\n                \"disabled\": true\n            }\n        ]\n    }\n]"}],"_postman_id":"44ed22a5-301a-453e-ab7c-abf245fc6c15"},{"name":"Métricas categorías de gastos","event":[{"listen":"test","script":{"id":"193bb906-ff55-413a-b48f-91d6a75a6453","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    global_expenses: 'number',\r","    categories: 'array'\r","};\r","\r","const categoryProperties = {\r","    category: 'object',\r","    budget: 'object',\r","    expenses: 'object',\r","    percentage: 'number',\r","    disabled: 'boolean',\r","    amount: 'number'\r","};\r","\r","const categoryObjectProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const budgetProperties = {\r","    id: { type: ['string', 'null'], optional: true },\r","    amount: 'number',\r","    budget_date: { type: ['string', 'null'], optional: true },\r","    category: { type: ['string', 'null'], optional: true },\r","    has_budget: 'boolean',\r","    budget_spent: 'number'\r","};\r","\r","const expensesProperties = {\r","    amount: 'number',\r","    count: 'number'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    name: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string',\r","    description: 'string',\r","    icon_ignore: 'string',\r","    icon_primary: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the categories array\r","pm.test(\"Categories have expected properties with correct types\", () => {\r","    if (responseJson.categories && responseJson.categories.length > 0) {\r","        // Test only the first item in the categories array\r","        xerpaTestApi.checkObjectProperties(responseJson.categories[0], categoryProperties);\r","        \r","        // Check properties of the category object\r","        xerpaTestApi.checkObjectProperties(responseJson.categories[0].category, categoryObjectProperties);\r","        \r","        // Check properties of the budget object\r","        xerpaTestApi.checkObjectProperties(responseJson.categories[0].budget, budgetProperties);\r","        \r","        // Check properties of the expenses object\r","        xerpaTestApi.checkObjectProperties(responseJson.categories[0].expenses, expensesProperties);\r","        \r","        // Check metadata properties\r","        xerpaTestApi.checkObjectProperties(responseJson.categories[0].category.metadata, metadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"b4da6419-c61c-48c2-815a-689b370815ef","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/metrics/expenses/","description":"<p>Este endpoint permite <strong>consultar las métricas detalladas de gastos</strong> de un usuario en un periodo determinado. Se utiliza para analizar el comportamiento financiero y consumo por categorías.</p>\n<p>Este endpoint es útil para obtener una visión general de los gastos del usuario y su distribución por categorías, lo que permite un análisis más profundo de sus hábitos de consumo.</p>\n<h3 id=\"widgets\">Widgets</h3>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Gastos-por-categor-a-1e47439960f0804cb633f6fcc6ea74f5?source=copy_link\">Gastos por categoría</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/9c0cef13-960f-4388-9cfb-5cd4d325aa5b/aW1hZ2UucG5n\" alt height=\"659\" width=\"369\" />\n\n<hr />\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Método**:** <code>GET</code></p>\n</li>\n<li><p>Endpoint**:** {{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/metrics/expenses/</p>\n</li>\n<li><p>Parámetros de ruta</p>\n<ul>\n<li><code>user_id</code> (string, requerido): ID del usuario.</li>\n</ul>\n</li>\n<li><p>Párametros de query:</p>\n<ul>\n<li><code>date_month</code> (string, opcional): Fecha de consulta.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h3 id=\"response\">Response</h3>\n<p>La respuesta será un objeto JSON con el resumen de gastos totales y su distribución por categoría.</p>\n<ul>\n<li><p><code>global_expenses</code> (number): Total de gastos globales del usuario.</p>\n</li>\n<li><p><code>categories</code> (array): Lista de objetos que representan las categorías de gasto. Cada objeto de categoría incluye:</p>\n<ul>\n<li><p><code>category</code> (object): Detalles de la categoría, que incluye:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único de la categoría.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo asociado a la categoría.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem en la categoría.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la categoría.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional sobre la categoría, que incluye:</p>\n<ul>\n<li><p><code>icon</code> (string): Icono representativo de la categoría.</p>\n</li>\n<li><p><code>name</code> (string): Nombre de la categoría.</p>\n</li>\n<li><p><code>color</code> (string): Color asociado a la categoría.</p>\n</li>\n<li><p><code>active</code> (boolean): Estado de activación de la categoría.</p>\n</li>\n<li><p><code>short_name</code> (string): Nombre corto de la categoría.</p>\n</li>\n<li><p><code>color_class</code> (string): Clase de color para la categoría.</p>\n</li>\n<li><p><code>description</code> (string): Descripción adicional de la categoría.</p>\n</li>\n<li><p><code>icon_ignore</code> (string): Indicador para ignorar el icono.</p>\n</li>\n<li><p><code>icon_primary</code> (string): Icono primario de la categoría.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>budget</code> (object): Información sobre el presupuesto de la categoría, que incluye:</p>\n<ul>\n<li><p><code>id</code> (string|null): Identificador del presupuesto.</p>\n</li>\n<li><p><code>amount</code> (number): Monto del presupuesto.</p>\n</li>\n<li><p><code>budget_date</code> (string or null): Fecha del presupuesto.</p>\n</li>\n<li><p><code>category</code> (string or null): Categoría asociada al presupuesto.</p>\n</li>\n<li><p><code>has_budget</code> (boolean): Indica si hay un presupuesto asignado.</p>\n</li>\n<li><p><code>budget_spent</code> (number): Monto gastado del presupuesto.</p>\n</li>\n</ul>\n</li>\n<li><p><code>expenses</code> (object): Detalles de los gastos en la categoría, que incluye:</p>\n<ul>\n<li><p><code>amount</code> (number): Monto total de gastos en la categoría.</p>\n</li>\n<li><p><code>count</code> (number): Número de transacciones en la categoría.</p>\n</li>\n</ul>\n</li>\n<li><p><code>percentage</code> (number): Proporción de gastos de la categoría en relación al total de gastos.</p>\n</li>\n<li><p><code>disabled</code> (boolean): Indica si la categoría está desactivada.</p>\n</li>\n<li><p><code>amount</code> (number): Monto total de gastos en la categoría.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"global_expenses\": { \"type\": \"number\" },\n    \"categories\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"category\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"icon\": { \"type\": \"string\" },\n                  \"name\": { \"type\": \"string\" },\n                  \"color\": { \"type\": \"string\" },\n                  \"active\": { \"type\": \"boolean\" },\n                  \"short_name\": { \"type\": \"string\" },\n                  \"color_class\": { \"type\": \"string\" },\n                  \"description\": { \"type\": \"string\" },\n                  \"icon_ignore\": { \"type\": \"string\" },\n                  \"icon_primary\": { \"type\": \"string\" }\n                }\n              }\n            }\n          },\n          \"budget\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": [\"string\", \"null\"], \"format\": \"uuid\" },\n              \"amount\": { \"type\": \"number\" },\n              \"budget_date\": { \"type\": [\"string\", \"null\"], \"format\": \"date\" },\n              \"category\": { \"type\": [\"string\", \"null\"], \"format\": \"uuid\" },\n              \"has_budget\": { \"type\": \"boolean\" },\n              \"budget_spent\": { \"type\": \"number\" }\n            }\n          },\n          \"expenses\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"amount\": { \"type\": \"number\" },\n              \"count\": { \"type\": \"integer\" }\n            }\n          },\n          \"percentage\": { \"type\": \"number\" },\n          \"disabled\": { \"type\": \"boolean\" },\n          \"amount\": { \"type\": \"number\" }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","metrics","expenses",""],"host":["{{host_app}}"],"query":[{"disabled":true,"key":"date_month","value":"2025-03"}],"variable":[]}},"response":[{"id":"2b31f8c4-bccf-4b4f-8a69-a323d2ea285b","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/metrics/expenses/?date_month=2024-08","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","61a85f1f-98aa-4dcd-837d-84cf54bb532a","metrics","expenses",""],"query":[{"key":"date_month","value":"2024-08"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 23:12:13 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"2314"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"bd57b099-aae9-4d2c-bd7f-796f6eff3de2"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cKTUNHQZIAMEpQw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3ff4d-326c2ca658be21ac6a4ae947;Parent=1839ccf6962ee2db;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"global_expenses\": 12522.5,\n    \"categories\": [\n        {\n            \"category\": {\n                \"id\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Shopping\",\n                \"description\": \"Deportes, electrónica, vestuario y calzado\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                    \"name\": \"Shopping\",\n                    \"color\": \"#6A994E\",\n                    \"active\": true,\n                    \"short_name\": \"SHOPPING\",\n                    \"color_class\": \"cat-shopping\",\n                    \"description\": \"Vestuario, calzado, electrónica\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/shopping_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/shopping_primary.svg\"\n                }\n            },\n            \"budget\": {\n                \"id\": null,\n                \"amount\": 0,\n                \"budget_date\": null,\n                \"category\": null,\n                \"has_budget\": false,\n                \"budget_spent\": 0\n            },\n            \"expenses\": {\n                \"amount\": -6000,\n                \"count\": 1\n            },\n            \"percentage\": 47.91,\n            \"disabled\": false,\n            \"amount\": -6000\n        },\n        {\n            \"category\": {\n                \"id\": \"84e6fa2f-8790-4d94-8f65-6944c7bcba10\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Vacaciones & Viajes\",\n                \"description\": \"Plataformas de viajes, hoteles, cabañas, arriendo de auto\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/viajes.svg\",\n                    \"name\": \"Viajes y Vacaciones\",\n                    \"color\": \"#E55E6E\",\n                    \"active\": true,\n                    \"short_name\": \"VIAJES\",\n                    \"color_class\": \"cat-viajes\",\n                    \"description\": \"Pasajes, hoteles, reservas\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/viajes_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/viajes_primary.svg\"\n                }\n            },\n            \"budget\": {\n                \"id\": null,\n                \"amount\": 0,\n                \"budget_date\": null,\n                \"category\": null,\n                \"has_budget\": false,\n                \"budget_spent\": 0\n            },\n            \"expenses\": {\n                \"amount\": -5000,\n                \"count\": 1\n            },\n            \"percentage\": 39.93,\n            \"disabled\": false,\n            \"amount\": -5000\n        },\n        {\n            \"category\": {\n                \"id\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Sin categoría\",\n                \"description\": \"Transacción sin categoría\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/sin_categoria.svg\",\n                    \"name\": \"Añadir Categoría\",\n                    \"color\": \"#6F6F6F\",\n                    \"active\": false,\n                    \"short_name\": \"SINCATEGORIA\",\n                    \"color-class\": \"\",\n                    \"description\": \"Categoría\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/sin_categoria.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/sin_categoria.svg\"\n                }\n            },\n            \"budget\": {\n                \"id\": null,\n                \"amount\": 0,\n                \"budget_date\": null,\n                \"category\": null,\n                \"has_budget\": false,\n                \"budget_spent\": 0\n            },\n            \"expenses\": {\n                \"amount\": -1522.5,\n                \"count\": 3\n            },\n            \"percentage\": 12.16,\n            \"disabled\": false,\n            \"amount\": -1522.5\n        }\n    ]\n}"},{"id":"62952f2c-a3bf-4744-9c85-0690845e32f2","name":"Bad Request","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/metrics/expenses/","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","61a85f1f-98aa-4dcd-837d-84cf54bb532a","metrics","expenses",""],"query":[{"key":"date_month","value":"2024-08","disabled":true}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 23:12:40 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"24"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"6e39bc90-39e6-4a93-b59d-71ca95e47e9d"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cKTYZHqGoAMEkRw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3ff68-2a7b3d555ed2e0c26d553602;Parent=63975d5c4d15312c;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    \"Invalid date format.\"\n]"}],"_postman_id":"b4da6419-c61c-48c2-815a-689b370815ef"},{"name":"Métricas por categorías","event":[{"listen":"test","script":{"id":"c66a4d0f-8ed9-4da0-83e7-07802bfa738b","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    year: 'number',\r","    months: 'array'\r","};\r","\r","const monthProperties = {\r","    year: 'number',\r","    month: 'string',\r","    disabled: 'boolean',\r","    incomes: 'number',\r","    expenses: 'number',\r","    balance: 'number'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties within the months array\r","pm.test(\"Months have expected properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0 && responseJson[0].months && responseJson[0].months.length > 0) {\r","        // Test only the first item in the months array\r","        xerpaTestApi.checkObjectProperties(responseJson[0].months[0], monthProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"6b04898d-eb37-44be-b67d-2204c02bc661","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/metrics/general/","description":"<h3 id=\"descripción-del-endpoint\">Descripción del Endpoint</h3>\n<p>Este endpoint permite <strong>consultar un resumen general del comportamiento financiero del usuario</strong> durante un periodo. Proporciona métricas clave como ingresos, egresos, balance y actividad, lo que permite a los usuarios obtener una visión clara de su situación financiera.</p>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> {{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/metrics/general/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>user_id</code> (string, requerido): ID del usuario</li>\n</ul>\n</li>\n<li><p><strong>Parámetros de query:</strong> Se agregan al final de la ruta, sirven principalmente para manejar la paginación de la petición. Ejm: <code>/projects/?page=1&amp;page_size=10</code></p>\n<ul>\n<li><p><code>paginate</code> (boolean, opcional): Indica si se debe paginar la respuesta. Por defecto, se establece en <code>true</code>.</p>\n</li>\n<li><p><code>page</code> (integer, opcional): Número de la página que se desea recuperar en la respuesta paginada. El valor por defecto es <code>1</code>.</p>\n</li>\n<li><p><code>page_size</code> (integer, opcional): Número de elementos por página en la respuesta paginada. El valor por defecto es <code>1</code>.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON que contiene un conjunto amplio de métricas financieras agregadas.</p>\n<ul>\n<li><p><code>total_spend</code> (number): Total de gastos realizados por el usuario.</p>\n</li>\n<li><p><code>amount_count</code> (number): Número total de transacciones registradas.</p>\n</li>\n<li><p><code>category</code> (object): Información sobre la categoría de gasto, que incluye:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único de la categoría.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo de la categoría.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem dentro de la categoría.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la categoría.</p>\n</li>\n<li><p><code>metadata</code> (object): Metadatos adicionales sobre la categoría, que incluye:</p>\n<ul>\n<li><p><code>bg</code> (string): Color de fondo asociado.</p>\n</li>\n<li><p><code>icon</code> (string): Icono representativo de la categoría.</p>\n</li>\n<li><p><code>name</code> (string): Nombre de la categoría.</p>\n</li>\n<li><p><code>color</code> (string): Color representativo de la categoría.</p>\n</li>\n<li><p><code>active</code> (boolean): Estado de actividad de la categoría.</p>\n</li>\n<li><p><code>short_name</code> (string): Nombre corto de la categoría.</p>\n</li>\n<li><p><code>color_class</code> (string): Clase de color para estilos.</p>\n</li>\n<li><p><code>description</code> (string): Descripción adicional.</p>\n</li>\n<li><p><code>icon_ignore</code> (string): Indicador para ignorar el icono.</p>\n</li>\n<li><p><code>icon_primary</code> (string): Icono principal de la categoría.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<p>La respuesta también incluye información de paginación, como:</p>\n<ul>\n<li><p><code>next</code>(string or null): URL de la siguiente página</p>\n</li>\n<li><p><code>previous</code>(string or null): URL de la página anterior</p>\n</li>\n<li><p><code>total_pages</code>(number): Total de páginas disponibles</p>\n</li>\n<li><p><code>current_page</code>(number): Página actual</p>\n</li>\n<li><p><code>offset</code>(number): Índice de desplazamiento</p>\n</li>\n<li><p><code>count</code>(number): Total de elementos</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"next\": { \"type\": [\"string\", \"null\"] },\n    \"previous\": { \"type\": [\"string\", \"null\"] },\n    \"total_pages\": { \"type\": \"integer\" },\n    \"current_page\": { \"type\": \"integer\" },\n    \"offset\": { \"type\": \"integer\" },\n    \"count\": { \"type\": \"integer\" },\n    \"results\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"total_spend\": { \"type\": \"number\" },\n          \"amount_count\": { \"type\": \"number\" },\n          \"category\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"bg\": { \"type\": \"string\" },\n                  \"icon\": { \"type\": \"string\" },\n                  \"name\": { \"type\": \"string\" },\n                  \"color\": { \"type\": \"string\" },\n                  \"active\": { \"type\": \"boolean\" },\n                  \"short_name\": { \"type\": \"string\" },\n                  \"color_class\": { \"type\": \"string\" },\n                  \"description\": { \"type\": \"string\" },\n                  \"icon_ignore\": { \"type\": \"string\" },\n                  \"icon_primary\": { \"type\": \"string\" }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","metrics","general",""],"host":["{{host_app}}"],"query":[{"disabled":true,"key":"paginate","value":"true"},{"disabled":true,"key":"page","value":"1"},{"disabled":true,"key":"page_size","value":"1"}],"variable":[]}},"response":[{"id":"97dad419-60f8-45cb-9972-95c14e70e2f7","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/metrics/general/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 23:15:00 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"1845"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"195379bd-f6be-491b-9b60-b517880f003f"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cKTuKGwCoAMELrA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3fff3-143ddfaa3babbaf17665acd5;Parent=6ad840842fcb844e;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"total_spend\": -6000,\n        \"amount_count\": 1,\n        \"category\": {\n            \"id\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\",\n            \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n            \"item_name\": \"Shopping\",\n            \"description\": \"Deportes, electrónica, vestuario y calzado\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                \"name\": \"Shopping\",\n                \"color\": \"#6A994E\",\n                \"active\": true,\n                \"short_name\": \"SHOPPING\",\n                \"color_class\": \"cat-shopping\",\n                \"description\": \"Vestuario, calzado, electrónica\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/shopping_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/shopping_primary.svg\"\n            }\n        }\n    },\n    {\n        \"total_spend\": 100000,\n        \"amount_count\": 1,\n        \"category\": {\n            \"id\": \"3954361d-ddf5-46dc-a8f8-af98ee9811da\",\n            \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n            \"item_name\": \"Sueldo\",\n            \"description\": \"Sueldos, salarios, honorarios e ingresos por trabajo\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/inc_sueldo.svg\",\n                \"name\": \"Ingresos\",\n                \"color\": \"#01C38E\",\n                \"active\": true,\n                \"short_name\": \"INCSUELDO\",\n                \"color_class\": \"cat-inc-sueldo\",\n                \"description\": \"Salarios, honorarios y por contrato\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_sueldo_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_sueldo_primary.svg\"\n            }\n        }\n    },\n    {\n        \"total_spend\": -5000,\n        \"amount_count\": 1,\n        \"category\": {\n            \"id\": \"84e6fa2f-8790-4d94-8f65-6944c7bcba10\",\n            \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n            \"item_name\": \"Vacaciones & Viajes\",\n            \"description\": \"Plataformas de viajes, hoteles, cabañas, arriendo de auto\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/viajes.svg\",\n                \"name\": \"Viajes y Vacaciones\",\n                \"color\": \"#E55E6E\",\n                \"active\": true,\n                \"short_name\": \"VIAJES\",\n                \"color_class\": \"cat-viajes\",\n                \"description\": \"Pasajes, hoteles, reservas\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/viajes_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/viajes_primary.svg\"\n            }\n        }\n    }\n]"}],"_postman_id":"6b04898d-eb37-44be-b67d-2204c02bc661"},{"name":"Métricas categorías de ingreso","id":"f264a3e4-063f-4b55-b227-e66be79a4a6c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/metrics/incomes/?date_month=2024-09","description":"<p>Este endpoint permite <strong>consultar las métricas de ingresos</strong> registrados por un usuario en un periodo determinado. Es útil para visualizar patrones de entrada de dinero y realizar comparativas.</p>\n<h4 id=\"widgets\">Widgets</h4>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Ingresos-por-categor-a-1e47439960f080658c56dadf78ce34c2?source=copy_link\">Ingresos por categoría</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/3c0e6545-d9f9-4371-b9f1-f20a3eb7fa27/aW1hZ2UucG5n\" alt height=\"683\" width=\"384\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/metrics/incomes/</code></p>\n</li>\n<li><p><strong>Parámetros de ruta:</strong></p>\n<ul>\n<li><code>user_id</code> (string, requerido): ID del usuario.</li>\n</ul>\n</li>\n<li><p><strong>Parámetros de query:</strong></p>\n<ul>\n<li><code>date_month</code> (string, requerido): Mes y año para el cual se consultan los ingresos en formato <code>YYYY-MM</code>.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON con los datos de ingresos para el usuario.</p>\n<h5 id=\"campos-comunes\">Campos comunes:</h5>\n<ul>\n<li><p><code>global_incomes</code> (number): Total de ingresos globales del usuario en el mes especificado.</p>\n</li>\n<li><p><code>categories</code> (array): Lista de categorías de ingresos, donde cada categoría incluye:</p>\n<ul>\n<li><p><code>category</code> (object): Detalles de la categoría, que incluye:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador de la categoría.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo al que pertenece la categoría.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la categoría.</p>\n</li>\n<li><p><code>metadata</code> (object): Metadatos relacionados con la categoría, que incluyen:</p>\n<ul>\n<li><p><code>bg</code> (string): Color de fondo.</p>\n</li>\n<li><p><code>icon</code> (string): Icono asociado.</p>\n</li>\n<li><p><code>name</code> (string): Nombre de la categoría.</p>\n</li>\n<li><p><code>color</code> (string): Color de la categoría.</p>\n</li>\n<li><p><code>active</code> (boolean): Estado de la categoría.</p>\n</li>\n<li><p><code>short_name</code> (string): Nombre corto de la categoría.</p>\n</li>\n<li><p><code>color_class</code> (string): Clase de color.</p>\n</li>\n<li><p><code>description</code> (string): Descripción adicional.</p>\n</li>\n<li><p><code>icon_ignore</code> (string): Indicador para ignorar el icono.</p>\n</li>\n<li><p><code>icon_primary</code> (string): Icono principal.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>incomes</code> (object): Detalles de los ingresos en la categoría, que incluyen:</p>\n<ul>\n<li><p><code>amount</code> (number): Monto total de ingresos en la categoría.</p>\n</li>\n<li><p><code>count</code> (number): Número de ingresos registrados en la categoría.</p>\n</li>\n</ul>\n</li>\n<li><p><code>percentage</code> (number): Porcentaje que representa la categoría sobre el total de ingresos.</p>\n</li>\n<li><p><code>disabled</code> (boolean): Estado que indica si la categoría está desactivada.</p>\n</li>\n<li><p><code>amount</code> (number): Monto total de ingresos en la categoría.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"global_incomes\": { \"type\": \"number\" },\n    \"categories\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"category\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"bg\": { \"type\": \"string\" },\n                  \"icon\": { \"type\": \"string\" },\n                  \"name\": { \"type\": \"string\" },\n                  \"color\": { \"type\": \"string\" },\n                  \"active\": { \"type\": \"boolean\" },\n                  \"short_name\": { \"type\": \"string\" },\n                  \"color_class\": { \"type\": \"string\" },\n                  \"description\": { \"type\": \"string\" },\n                  \"icon_ignore\": { \"type\": \"string\" },\n                  \"icon_primary\": { \"type\": \"string\" }\n                }\n              }\n            }\n          },\n          \"incomes\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"amount\": { \"type\": \"number\" },\n              \"count\": { \"type\": \"integer\" }\n            },\n            \"required\": [\"amount\", \"count\"]\n          },\n          \"percentage\": { \"type\": \"number\" },\n          \"disabled\": { \"type\": \"boolean\" },\n          \"amount\": { \"type\": \"number\" }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","metrics","incomes",""],"host":["{{host_app}}"],"query":[{"key":"date_month","value":"2024-09"}],"variable":[]}},"response":[{"id":"1ebde5cd-aa08-4f4c-bdb7-392406f74809","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/metrics/incomes/?date_month=2024-09","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","{{user_id}}","metrics","incomes",""],"query":[{"key":"date_month","value":"2024-09"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 17:05:53 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"741"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"328c16ed-5ad0-49f2-8b2a-1b68a0d9d910"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"Lph1sGJJIAMEHhA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68407cf0-1009bc9b0d71ce705ba83895;Parent=3f4972e93a481b18;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"global_incomes\": 302028000,\n    \"categories\": [\n        {\n            \"category\": {\n                \"id\": \"3954361d-ddf5-46dc-a8f8-af98ee9811da\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Sueldo\",\n                \"description\": \"Sueldos, salarios, honorarios e ingresos por trabajo\",\n                \"metadata\": {\n                    \"bg\": \"#E6F9F5\",\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_sueldo.svg\",\n                    \"name\": \"Ingresos\",\n                    \"color\": \"#01C38E\",\n                    \"active\": true,\n                    \"short_name\": \"INCSUELDO\",\n                    \"color_class\": \"cat-inc-sueldo\",\n                    \"description\": \"Salarios, honorarios y por contrato\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_sueldo_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_sueldo_primary.svg\"\n                }\n            },\n            \"incomes\": {\n                \"amount\": 302028000,\n                \"count\": 570\n            },\n            \"percentage\": 100,\n            \"disabled\": false,\n            \"amount\": 302028000\n        }\n    ]\n}"}],"_postman_id":"f264a3e4-063f-4b55-b227-e66be79a4a6c"},{"name":"Métricas de gastos fijos y variables","id":"1f80816d-cec5-4cb6-a44c-ae1a80f4da56","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/metrics/fixed_expenses/?date_month=2024-12","description":"<p>Este endpoint permite <strong>obtener los datos necesarios para graficar la evolución de gastos fijos y variables</strong> de un usuario. Es útil para generar visualizaciones comparativas mensuales o por periodos personalizados.</p>\n<h4 id=\"widgets\">Widgets</h4>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Gastos-fijos-y-variables-1e47439960f080dd848ffc58c0cbee20?source=copy_link\">Gastos fijos y variables</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/351e4b9f-a218-45fb-8f12-8a2958196cc2/aW1hZ2UucG5n\" alt height=\"686\" width=\"404\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/metrics/fixed_expenses/</code></p>\n</li>\n<li><p>Parámetros de ruta</p>\n<ul>\n<li><code>user_id</code> (string, requerido): ID del usuario para el cual se desean obtener los datos de gastos.</li>\n</ul>\n</li>\n<li><p>Parámetros de query</p>\n<ul>\n<li><code>date_month</code> (string, requerido): Fecha en formato <code>YYYY-MM</code> para la cual se solicitan los datos de gastos fijos y variables.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON que contiene datos agregados sobre los gastos fijos y variables del usuario.</p>\n<ul>\n<li><p><code>global_expenses</code> (number): Total de gastos globales.</p>\n</li>\n<li><p><code>fixed_expenses</code> (object): Detalles sobre los gastos fijos.</p>\n<ul>\n<li><p><code>expenses</code> (object): Información sobre los gastos fijos.</p>\n<ul>\n<li><p><code>amount</code> (number): Monto total de gastos fijos.</p>\n</li>\n<li><p><code>count</code> (number): Cantidad de gastos fijos registrados.</p>\n</li>\n</ul>\n</li>\n<li><p><code>amount</code> (number): Monto total de gastos fijos.</p>\n</li>\n<li><p><code>percentage</code> (number): Porcentaje de gastos fijos en relación a los gastos totales.</p>\n</li>\n</ul>\n</li>\n<li><p><code>variable_expenses</code> (object): Detalles sobre los gastos variables.</p>\n<ul>\n<li><p><code>expenses</code> (object): Información sobre los gastos variables.</p>\n<ul>\n<li><p><code>amount</code> (number): Monto total de gastos variables.</p>\n</li>\n<li><p><code>count</code> (number): Cantidad de gastos variables registrados.</p>\n</li>\n</ul>\n</li>\n<li><p><code>amount</code> (number): Monto total de gastos variables.</p>\n</li>\n<li><p><code>percentage</code> (number): Porcentaje de gastos variables en relación a los gastos totales.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"global_expenses\": { \"type\": \"number\" },\n    \"fixed_expenses\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"expenses\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"amount\": { \"type\": \"number\" },\n            \"count\": { \"type\": \"integer\" }\n          }\n        },\n        \"amount\": { \"type\": \"number\" },\n        \"percentage\": { \"type\": \"number\" }\n      }\n    },\n    \"variable_expenses\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"expenses\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"amount\": { \"type\": \"number\" },\n            \"count\": { \"type\": \"integer\" }\n          }\n        },\n        \"amount\": { \"type\": \"number\" },\n        \"percentage\": { \"type\": \"number\" }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","metrics","fixed_expenses",""],"host":["{{host_app}}"],"query":[{"key":"date_month","value":"2024-12"}],"variable":[]}},"response":[{"id":"a20ba031-e9d5-4bae-affa-4c5703ae1511","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/metrics/fixed_expenses/?date_month=2025-03","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","{{user_id}}","metrics","fixed_expenses",""],"query":[{"key":"date_month","value":"2025-03"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 17:10:27 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"196"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"a7ec7add-5a08-4438-9114-fdfa032177f5"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LpigiFF2oAMEYMA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68407e03-655bf5ab3cd4493d54aa4971;Parent=06af379d96cb17df;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"global_expenses\": 0,\n    \"fixed_expenses\": {\n        \"expenses\": {\n            \"amount\": 0,\n            \"count\": 0\n        },\n        \"amount\": 0,\n        \"percentage\": 0\n    },\n    \"variable_expenses\": {\n        \"expenses\": {\n            \"amount\": 0,\n            \"count\": 0\n        },\n        \"amount\": 0,\n        \"percentage\": 0\n    }\n}"}],"_postman_id":"1f80816d-cec5-4cb6-a44c-ae1a80f4da56"},{"name":"Métricas de ahorro en home unificado","id":"fee14298-8a6b-4d26-84db-65e2c41b8577","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/views/unified-home-pfm-data/?date_month=2025-11","description":"<p>Este endpoint permite <strong>obtener los datos necesarios para graficar la evolución de gastos fijos y variables</strong> de un usuario. Es útil para generar visualizaciones comparativas mensuales o por periodos personalizados.</p>\n<h4 id=\"widgets\">Widgets</h4>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Gastos-fijos-y-variables-1e47439960f080dd848ffc58c0cbee20?source=copy_link\">Gastos fijos y variables</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/351e4b9f-a218-45fb-8f12-8a2958196cc2/aW1hZ2UucG5n\" alt height=\"686\" width=\"404\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/metrics/fixed_expenses/</code></p>\n</li>\n<li><p>Parámetros de ruta</p>\n<ul>\n<li><code>user_id</code> (string, requerido): ID del usuario para el cual se desean obtener los datos de gastos.</li>\n</ul>\n</li>\n<li><p>Parámetros de query</p>\n<ul>\n<li><code>date_month</code> (string, requerido): Fecha en formato <code>YYYY-MM</code> para la cual se solicitan los datos de gastos fijos y variables.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON que contiene datos agregados sobre los gastos fijos y variables del usuario.</p>\n<ul>\n<li><p><code>global_expenses</code> (number): Total de gastos globales.</p>\n</li>\n<li><p><code>fixed_expenses</code> (object): Detalles sobre los gastos fijos.</p>\n<ul>\n<li><p><code>expenses</code> (object): Información sobre los gastos fijos.</p>\n<ul>\n<li><p><code>amount</code> (number): Monto total de gastos fijos.</p>\n</li>\n<li><p><code>count</code> (number): Cantidad de gastos fijos registrados.</p>\n</li>\n</ul>\n</li>\n<li><p><code>amount</code> (number): Monto total de gastos fijos.</p>\n</li>\n<li><p><code>percentage</code> (number): Porcentaje de gastos fijos en relación a los gastos totales.</p>\n</li>\n</ul>\n</li>\n<li><p><code>variable_expenses</code> (object): Detalles sobre los gastos variables.</p>\n<ul>\n<li><p><code>expenses</code> (object): Información sobre los gastos variables.</p>\n<ul>\n<li><p><code>amount</code> (number): Monto total de gastos variables.</p>\n</li>\n<li><p><code>count</code> (number): Cantidad de gastos variables registrados.</p>\n</li>\n</ul>\n</li>\n<li><p><code>amount</code> (number): Monto total de gastos variables.</p>\n</li>\n<li><p><code>percentage</code> (number): Porcentaje de gastos variables en relación a los gastos totales.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"global_expenses\": { \"type\": \"number\" },\n    \"fixed_expenses\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"expenses\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"amount\": { \"type\": \"number\" },\n            \"count\": { \"type\": \"integer\" }\n          }\n        },\n        \"amount\": { \"type\": \"number\" },\n        \"percentage\": { \"type\": \"number\" }\n      }\n    },\n    \"variable_expenses\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"expenses\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"amount\": { \"type\": \"number\" },\n            \"count\": { \"type\": \"integer\" }\n          }\n        },\n        \"amount\": { \"type\": \"number\" },\n        \"percentage\": { \"type\": \"number\" }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","views","unified-home-pfm-data",""],"host":["{{host_app}}"],"query":[{"key":"date_month","value":"2025-11"}],"variable":[]}},"response":[{"id":"9d22394d-af44-4a52-9ce8-86192f6b46e5","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/metrics/fixed_expenses/?date_month=2025-03","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","{{user_id}}","metrics","fixed_expenses",""],"query":[{"key":"date_month","value":"2025-03"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 17:10:27 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"196"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"a7ec7add-5a08-4438-9114-fdfa032177f5"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LpigiFF2oAMEYMA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68407e03-655bf5ab3cd4493d54aa4971;Parent=06af379d96cb17df;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"global_expenses\": 0,\n    \"fixed_expenses\": {\n        \"expenses\": {\n            \"amount\": 0,\n            \"count\": 0\n        },\n        \"amount\": 0,\n        \"percentage\": 0\n    },\n    \"variable_expenses\": {\n        \"expenses\": {\n            \"amount\": 0,\n            \"count\": 0\n        },\n        \"amount\": 0,\n        \"percentage\": 0\n    }\n}"}],"_postman_id":"fee14298-8a6b-4d26-84db-65e2c41b8577"}],"id":"f3aa00b2-7134-4e7e-bf5b-33f6cc60b73c","description":"<h3 id=\"📊-métricas-financieras-del-usuario\">📊 Métricas financieras del usuario</h3>\n<p>La subcarpeta <strong>Metrics</strong> dentro de <strong>Transactions</strong> contiene los endpoints diseñados para <strong>obtener indicadores clave del comportamiento financiero del usuario</strong>, calculados a partir de sus transacciones registradas. Estas métricas permiten representar de forma agregada la actividad de gasto, ingreso, balance y hábitos financieros, con el objetivo de facilitar análisis, visualizaciones y toma de decisiones.</p>\n<p>Este módulo funciona como capa analítica del sistema, y está preparado para alimentar dashboards, reportes, alertas inteligentes o recomendaciones personalizadas.</p>\n<hr />\n<h4 id=\"📌-funcionalidades-incluidas\">📌 Funcionalidades incluidas</h4>\n<p>Los endpoints permiten consultar métricas como:</p>\n<ul>\n<li><p><strong>Balance general</strong>: ingresos, egresos y balance neto.</p>\n</li>\n<li><p><strong>Gasto total y por categoría</strong>: distribución, porcentajes y montos.</p>\n</li>\n<li><p><strong>Ingresos</strong>: totales y segmentación por fuente.</p>\n</li>\n<li><p><strong>Resumen general</strong>: actividad, días activos, transacciones.</p>\n</li>\n<li><p><strong>Comparación fija vs. variable</strong>: evolución de tipos de gasto por periodo.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"📅-periodos-de-análisis\">📅 Periodos de análisis</h4>\n<p>La mayoría de los endpoints permiten definir un rango de fechas (<code>start_date</code>, <code>end_date</code>), con lo que es posible construir visualizaciones por semana, mes, trimestre o periodo personalizado.</p>\n<hr />\n<h4 id=\"🧠-casos-de-uso\">🧠 Casos de uso</h4>\n<ul>\n<li><p>Gráficas de pastel y barras para dashboards.</p>\n</li>\n<li><p>Seguimiento de progreso frente a presupuestos.</p>\n</li>\n<li><p>Alertas ante cambios inusuales de comportamiento.</p>\n</li>\n<li><p>Recomendaciones contextuales basadas en tendencias de gasto o ingreso.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🔐-seguridad\">🔐 Seguridad</h4>\n<ul>\n<li><p>Todos los endpoints requieren autenticación.</p>\n</li>\n<li><p>El <code>user_id</code> debe ser validado contra el token autenticado.</p>\n</li>\n</ul>\n","_postman_id":"f3aa00b2-7134-4e7e-bf5b-33f6cc60b73c"},{"name":"Presupuestos","item":[{"name":"Obtener presupuestos","event":[{"listen":"test","script":{"id":"b86e08b4-6776-42c3-979b-6f5c89105304","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    next: { type: 'string', optional: true },\r","    previous: { type: 'string', optional: true },\r","    total_pages: 'number',\r","    current_page: 'number',\r","    offset: 'number',\r","    count: 'number',\r","    results: 'array'\r","};\r","\r","const resultProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    category: 'string',\r","    status: 'string',\r","    amount: 'string',\r","    budget_date: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the results array\r","pm.test(\"Results have expected properties with correct types\", () => {\r","    if (responseJson.results && responseJson.results.length > 0) {\r","        xerpaTestApi.checkArrayObjectProperties(responseJson.results, resultProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"80b77448-6239-4c47-a615-d6bbf9880401","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/?date_month=2025-06","description":"<p>Este endpoint permite <strong>consultar la lista de presupuestos (budgets)</strong> creados por un usuario. Se puede usar para visualizar, filtrar y gestionar los presupuestos activos o pasados asociados a sus cuentas.</p>\n<ul>\n<li><p>Este endpoint devuelve todos los presupuestos creados por el usuario autenticado o filtrado.</p>\n</li>\n<li><p>Es ideal para construir <strong>listados, dashboards financieros o visualizaciones</strong> en tiempo real.</p>\n</li>\n<li><p>Se puede combinar con los endpoints de detalle y edición para ofrecer una experiencia completa de gestión de presupuestos personales.</p>\n</li>\n</ul>\n<h4 id=\"widgets\">Widgets</h4>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Crear-presupuesto-por-categor-a-21e7439960f080eba065e08530b6666d?source=copy_link#2247439960f0806a86e5d2f02c59060e\">Listados de puesupuestos</a></li>\n</ol>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Endpoint**:** {{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>user_id</code> (string): ID del usuario asociado al proyecto.</li>\n</ul>\n</li>\n<li><p>Parámetros de query: Se agregan al final de la ruta, sirven principalmente para manejar la paginación de la petición. Ejm: <code>/projects/?page=1&amp;page_size=10</code></p>\n<ul>\n<li><p><code>page</code>(number): Número de página para la paginación de resultados.</p>\n</li>\n<li><p><code>page_size</code>(number): Cantidad de resultados que se incluirán por página.</p>\n</li>\n<li><p><code>paginate</code>(bool): Indica si se desea que la respuesta sea paginada o no.</p>\n</li>\n<li><p><code>date_month</code>(string) (requerido): Indica la fecha de consulta.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON que incluye un arreglo de presupuestos, con la siguiente estructura:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único del presupuesto.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario propietario.</p>\n</li>\n<li><p><code>category</code> (string): ID de la categoría asociada.</p>\n</li>\n<li><p><code>status</code> (string): ID del estado del presupuesto</p>\n</li>\n<li><p><code>amount</code> (number): Monto definido para el presupuesto.</p>\n</li>\n<li><p><code>bugget_date</code>(string): Fecha del presupuesto.</p>\n</li>\n</ul>\n<p>La respuesta también incluye información de paginación, como:</p>\n<ul>\n<li><p><code>next</code>(string or null): URL de la siguiente página</p>\n</li>\n<li><p><code>previous</code>(string or null): URL de la página anterior</p>\n</li>\n<li><p><code>total_pages</code>(number): Total de páginas disponibles</p>\n</li>\n<li><p><code>current_page</code>(number): Página actual</p>\n</li>\n<li><p><code>offset</code>(number): Índice de desplazamiento</p>\n</li>\n<li><p><code>count</code>(number): Total de elementos</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"next\": {\n      \"anyOf\": [\n        { \"type\": \"string\", \"format\": \"uri\" },\n        { \"type\": \"null\" }\n      ]\n    },\n    \"previous\": {\n      \"anyOf\": [\n        { \"type\": \"string\", \"format\": \"uri\" },\n        { \"type\": \"null\" }\n      ]\n    },\n    \"total_pages\": { \"type\": \"integer\" },\n    \"current_page\": { \"type\": \"integer\" },\n    \"offset\": { \"type\": \"integer\" },\n    \"results\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"category\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"status\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"amount\": { \"type\": \"string\" },\n          \"budget_date\": { \"type\": \"string\", \"format\": \"date\" }\n        }\n      }\n    },\n    \"count\": { \"type\": \"integer\" }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","budgets",""],"host":["{{host_app}}"],"query":[{"disabled":true,"key":"paginate","value":"false"},{"disabled":true,"key":"page","value":"1"},{"disabled":true,"key":"page_size","value":"1"},{"key":"date_month","value":"2025-06"}],"variable":[]}},"response":[{"id":"dd1caecd-378b-4870-8033-2db8dd94ec8e","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/?paginate=false&date_month=2025-06","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","{{user_id}}","budgets",""],"query":[{"key":"paginate","value":"false"},{"key":"page","value":"1","type":"text","disabled":true},{"key":"page_size","value":"1","type":"text","disabled":true},{"key":"date_month","value":"2025-06"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 13:56:41 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"239"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"5c71555a-eda4-467b-8829-56f5bbf52c25"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LpGIAHe8oAMEFBg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68405099-3e0323203fdc882c07481e18;Parent=525582fe8b0a6226;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"ca6448cf-17e0-4645-8254-c1785a5c29e7\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"category\": \"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\n        \"status\": \"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\n        \"amount\": \"500.00\",\n        \"budget_date\": \"2025-06-03\"\n    }\n]"},{"id":"9f4aad43-9401-495b-9834-bb35ed13481b","name":"Successful Response - Paginated","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/?date_month=2025-06","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","{{user_id}}","budgets",""],"query":[{"key":"paginate","value":"true","disabled":true},{"key":"page","value":"1","type":"text","disabled":true},{"key":"page_size","value":"1","type":"text","disabled":true},{"key":"date_month","value":"2025-06"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 13:56:13 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"333"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"295565c0-3d7f-4aa7-9d5a-ef9b587087f3"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LpGDpGSgoAMEfzA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6840507d-502815f53bde877525047bc4;Parent=5212dd1d69f29598;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"next\": null,\n    \"previous\": null,\n    \"total_pages\": 1,\n    \"current_page\": 1,\n    \"offset\": 0,\n    \"results\": [\n        {\n            \"id\": \"ca6448cf-17e0-4645-8254-c1785a5c29e7\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"category\": \"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\n            \"status\": \"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\n            \"amount\": \"500.00\",\n            \"budget_date\": \"2025-06-03\"\n        }\n    ],\n    \"count\": 1\n}"}],"_postman_id":"80b77448-6239-4c47-a615-d6bbf9880401"},{"name":"Crear presupuesto","event":[{"listen":"test","script":{"id":"15a98aa6-454f-4cdb-ab62-19a53f3aac8d","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    category: 'string',\r","    status: 'string',\r","    amount: 'string',\r","    budget_date: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"250ed1bb-37ba-4c0e-ba1f-216d727ce18e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"category\": \"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\r\n    \"status\": \"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\r\n    \"amount\": \"500\",\r\n    \"budget_date\": \"2025-06-04\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/","description":"<p>Este endpoint permite <strong>registrar un nuevo presupuesto (budget)</strong> para un usuario dentro del sistema de finanzas personales (PFM). El presupuesto se asocia a una cuenta, una categoría de gasto, un monto y un rango de fechas.</p>\n<ul>\n<li><p>El presupuesto se puede crear solo para el mes actual, pero no se deben solapar fechas para la misma categoría y cuenta.</p>\n</li>\n<li><p>No se pueden crear presupuestos para meses pasados.</p>\n</li>\n<li><p>Los montos deben expresarse en la moneda estándar del sistema (por ejemplo, pesos o centavos, según la configuración).</p>\n</li>\n<li><p>Este endpoint se usa comúnmente como parte del onboarding o configuraciones mensuales del usuario.</p>\n</li>\n<li><p>Existe un proceso autimático que persiste los presupuestos de un mes al siguiente.</p>\n</li>\n</ul>\n<h4 id=\"widget\">Widget</h4>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Crear-presupuesto-por-categor-a-21e7439960f080eba065e08530b6666d?source=copy_link#2247439960f08013ad51c5f26f09fe4e\">Crear presupuesto</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/badc8456-a7fd-449c-a9c0-7707dfd2032d/aW1hZ2UucG5n\" alt height=\"679\" width=\"398\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>POST</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> {{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>user_id</code> (string): ID del usuario asociado al proyecto.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li><p><code>category</code>(string): ID de la categoria asociada.</p>\n</li>\n<li><p><code>status</code>(string): ID del estado del presupuesto.</p>\n</li>\n<li><p><code>amount</code>(number): Monto total asignado al presupuesto.</p>\n</li>\n<li><p><code>budget_date</code>(string): Fecha del presupuesto. Esta tiene que coincidir con el año y mes de la fecha de consulta.</p>\n</li>\n</ul>\n<h4 id=\"request-body-example\">Request Body Example</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"category\": \"category_id\",\n    \"status\": \"status_id\",\n    \"amount\": \"500\",\n    \"budget_date\": \"2030-10-12\"\n}\n\n</code></pre>\n<hr />\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON con los datos del presupuesto recién creado:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único del presupuesto.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario propietario.</p>\n</li>\n<li><p><code>category</code> (string): ID de la categoría asociada.</p>\n</li>\n<li><p><code>status</code> (string): ID del estado del presupuesto</p>\n</li>\n<li><p><code>amount</code> (number): Monto definido para el presupuesto.</p>\n</li>\n<li><p><code>bugget_date</code>(string): Fecha del presupuesto.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"category\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"status\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"amount\": { \"type\": \"string\" },\n    \"budget_date\": { \"type\": \"string\", \"format\": \"date\" }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","budgets",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"0cb19728-bb9c-4b2d-ba08-3f36c5e8031c","name":"Successful Response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"category\": \"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\r\n    \"status\": \"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\r\n    \"amount\": \"1\",\r\n    \"budget_date\": \"2024-08-07\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/budgets/"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 21:07:41 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"235"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"54ddac72-c45f-4aa8-8a94-938d08efdda6"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cKBEnGiboAMEHtA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3e21d-60e53c8d0edd6fcd5f3be35e;Parent=3bd9cdc31e14e456;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"61bfb7be-8786-4a07-b09f-a23dda773e74\",\n    \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n    \"category\": \"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\n    \"status\": \"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\n    \"amount\": \"1.00\",\n    \"budget_date\": \"2024-08-07\"\n}"},{"id":"52f5ba74-1c58-4170-b3e3-ff6af18790ec","name":"Bad Request - Invalid data","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"category\": \"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\r\n    \"status\": \"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\r\n    \"amount\": \"1\",\r\n    \"budget_date\": \"2024-08-07\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/budgets/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 11 Sep 2024 19:51:11 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"215"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"45b989b2-59ca-4031-b021-7c52b1a7739f"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"d9MrfGnLoAMEvow="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66e1f4af-417aa209261da9802c5d9af8;Parent=3c0afeec7ef34c54;Sampled=0;lineage=1:c6c3c6c5:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"category\": [\n        \"Invalid pk \\\"ab0e1c52-4ab1-46b3-9384-7db452b282b2\\\" - object does not exist.\"\n    ],\n    \"status\": [\n        \"Invalid pk \\\"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\\\" - object does not exist.\"\n    ],\n    \"budget_date\": [\n        \"Invalid date.\"\n    ]\n}"},{"id":"d545f6c5-cd79-47fc-9ecb-48a046f63855","name":"Bad Request - Already exists","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"category\": \"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\r\n    \"status\": \"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\r\n    \"amount\": \"1\",\r\n    \"budget_date\": \"2024-08-07\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/budgets/"},"status":"Conflict","code":409,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 21:09:12 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"64"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"67996886-4a0d-423e-8b29-2ffe2d54d7b6"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cKBS6EH2oAMEjUA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3e278-7c91415825315c414626d176;Parent=62ba5dac90e0ef5f;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"Already exists: 61bfb7be-8786-4a07-b09f-a23dda773e74\"\n}"},{"id":"2bce93eb-ea40-4de2-8179-65b5a4a9d5b3","name":"Bad Request - Invalid date format","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"category\": \"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\r\n    \"status\": \"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\r\n    \"amount\": \"1\",\r\n    \"budget_date\": \"\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/budgets/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 21:10:09 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"88"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"8b4a5825-c72b-4b8a-9e6e-fb038867586e"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cKBb1HQ-oAMEeRA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3e2b1-0312fd0e248f932f58472e11;Parent=5f145ccb4d067055;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"budget_date\": [\n        \"Date has wrong format. Use one of these formats instead: YYYY-MM-DD.\"\n    ]\n}"}],"_postman_id":"250ed1bb-37ba-4c0e-ba1f-216d727ce18e"},{"name":"Detalle de presupuesto","event":[{"listen":"test","script":{"id":"6553b154-4813-4abe-a46f-4d4fcd67c7b4","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    category: 'string',\r","    status: 'string',\r","    amount: 'string',\r","    budget_date: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"70806c86-d0d4-4c29-969f-79652fa28944","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/{{budget_id}}/","description":"<p>Este endpoint permite <strong>consultar el detalle de un presupuesto específico</strong> utilizando su identificador único (<code>budget_id</code>).</p>\n<h4 id=\"widget\">Widget</h4>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Crear-presupuesto-por-categor-a-21e7439960f080eba065e08530b6666d?source=copy_link\">Detalle presupuesto</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/0234c30d-1187-430b-8c11-f863f3c937fd/aW1hZ2UucG5n\" alt height=\"697\" width=\"397\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> {{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/{{budget_id}}/</p>\n</li>\n<li><p><strong>Parámetro de ruta:</strong></p>\n<ul>\n<li><p><code>user_id</code>(string): ID del usuario</p>\n</li>\n<li><p><code>budget_id</code> (string): ID del presupuesto a consultar.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON con los datos completos del presupuesto.</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único del presupuesto.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario propietario.</p>\n</li>\n<li><p><code>category</code> (string): ID de la categoría asociada.</p>\n</li>\n<li><p><code>status</code> (string): ID del estado del presupuesto</p>\n</li>\n<li><p><code>amount</code> (number): Monto definido para el presupuesto.</p>\n</li>\n<li><p><code>bugget_date</code>(string): Fecha del presupuesto.</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"category\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"status\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"amount\": { \"type\": \"string\" },\n    \"budget_date\": { \"type\": \"string\", \"format\": \"date\" }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","budgets","{{budget_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"2247f417-0886-493b-afd5-b22a0d736270","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/budgets/61bfb7be-8786-4a07-b09f-a23dda773e74/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 21:19:47 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"235"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"e1d1d120-6a6a-4ea7-a783-1ae34438977e"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cKC2CGP1oAMEG8g="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3e4f3-04f7252661f6ebf837fa9a1d;Parent=4ae9f8d334019ecb;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"61bfb7be-8786-4a07-b09f-a23dda773e74\",\n    \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n    \"category\": \"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\n    \"status\": \"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\n    \"amount\": \"1.00\",\n    \"budget_date\": \"2024-08-07\"\n}"}],"_postman_id":"70806c86-d0d4-4c29-969f-79652fa28944"},{"name":"Editar presupuesto","event":[{"listen":"test","script":{"id":"d240eb26-45ef-4b25-8006-63293615ce7f","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    category: 'string',\r","    status: 'string',\r","    amount: 'string',\r","    budget_date: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"6feb116f-86a9-47e1-9a7d-dbd857b1b55a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n    \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\r\n    \"category\": \"72fb8abb-d236-469d-a511-0e7d81c4af1e\",\r\n    \"status\": \"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\r\n    \"amount\": 10,\r\n    \"budget_date\": \"2024-08-06\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/61bfb7be-8786-4a07-b09f-a23dda773e74/","description":"<p>Este endpoint permite editar por completo un presupuesto existente, sobrescribiendo todos sus valores.</p>\n<h4 id=\"widgets\">Widgets</h4>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Crear-presupuesto-por-categor-a-21e7439960f080eba065e08530b6666d?source=copy_link#2247439960f080c3a271d09fe107f009\">Editar presupuesto</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/e041b44c-d1b2-41ac-a375-d94d08060f15/aW1hZ2UucG5n\" alt height=\"367\" width=\"400\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>PUT</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/budgets/{{budget_id}}/</code></p>\n</li>\n<li><p><strong>Parámetro de ruta:</strong></p>\n<ul>\n<li><code>budget_id</code> (string): ID del presupuesto que se desea modificar.</li>\n</ul>\n</li>\n<li><p><strong>Cuerpo de la solicitud:</strong> Requiere un objeto JSON con todos los campos obligatorios del presupuesto.</p>\n</li>\n</ul>\n<h5 id=\"campos-requeridos\">Campos requeridos:</h5>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario.</p>\n</li>\n<li><p><code>account_id</code> (string): ID de la cuenta asociada.</p>\n</li>\n<li><p><code>amount</code> (number): Nuevo monto asignado al presupuesto.</p>\n</li>\n<li><p><code>start_date</code> (string): Nueva fecha de inicio (<code>YYYY-MM-DD</code>).</p>\n</li>\n<li><p><code>end_date</code> (string): Nueva fecha de fin (<code>YYYY-MM-DD</code>).</p>\n</li>\n<li><p><code>spending_category_id</code> (string): ID de la categoría de gasto.</p>\n</li>\n</ul>\n<h5 id=\"ejemplo\">Ejemplo:</h5>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"user_id\": \"71a44b8d-c82e-4c33-870f-fc82b31f6705\",\n  \"account_id\": \"b22283a1-093f-4cb1-b4e4-bbce6d97a0ee\",\n  \"amount\": 250000,\n  \"start_date\": \"2024-02-01\",\n  \"end_date\": \"2024-02-29\",\n  \"spending_category_id\": \"fc0fa15f-d84d-4dd9-84a6-c610aabf0165\"\n}\n\n</code></pre>\n<hr />\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON con los datos actualizados del presupuesto.</p>\n<h5 id=\"campos-incluidos\">Campos incluidos:</h5>\n<ul>\n<li><p><code>id</code>, <code>user_id</code>, <code>account_id</code>, <code>spending_category_id</code>: Identificadores del presupuesto y sus entidades relacionadas.</p>\n</li>\n<li><p><code>amount</code>: Nuevo monto actualizado.</p>\n</li>\n<li><p><code>start_date</code>, <code>end_date</code>: Nuevas fechas del periodo presupuestal.</p>\n</li>\n<li><p><code>status</code>: Estado del presupuesto.</p>\n</li>\n<li><p><code>created_at</code>, <code>updated_at</code>: Timestamps de creación y última modificación.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"consideraciones\">Consideraciones</h4>\n<ul>\n<li><p>Solo se pueden editar presupuestos del mes en curso o futuros.</p>\n</li>\n<li><p>No se permite editar presupuestos de meses pasados.</p>\n</li>\n</ul>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","budgets","61bfb7be-8786-4a07-b09f-a23dda773e74",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"173d7d08-a849-4c43-801d-30afcd21355d","name":"Not Found","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n    \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\r\n    \"category\": \"72fb8abb-d236-469d-a511-0e7d81c4af1e\",\r\n    \"status\": \"f1ba1236-b4fd-4ed6-9d35-8114ed66726f\",\r\n    \"amount\": 10,\r\n    \"budget_date\": \"2024-08-06\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/budgets/61bfb7be-8786-4a07-b09f-a23dda773e74/"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 21:29:13 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"23"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"96be63f6-7b4f-46a8-81c3-041788198dab"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cKEOgGcDoAMEDqQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3e729-586eca122d30b142085f33e4;Parent=0423755053752d01;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Not found.\"\n}"},{"id":"c6069174-3e4f-4696-b76f-363673738058","name":"Successful Response","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n    \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\r\n    \"category\": \"72fb8abb-d236-469d-a511-0e7d81c4af1e\",\r\n    \"status\": \"f1ba1236-b4fd-4ed6-9d35-8114ed66726f\",\r\n    \"amount\": 10,\r\n    \"budget_date\": \"2024-08-06\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/budgets/61bfb7be-8786-4a07-b09f-a23dda773e74/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 21:30:22 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"236"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"50820c20-39ff-4ff1-8e20-8e5950d49384"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cKEZWEbFoAMEK4g="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3e76e-00a6c7423b628a024494f8c4;Parent=3ea2599872fd660d;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"61bfb7be-8786-4a07-b09f-a23dda773e74\",\n    \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n    \"category\": \"72fb8abb-d236-469d-a511-0e7d81c4af1e\",\n    \"status\": \"f1ba1236-b4fd-4ed6-9d35-8114ed66726f\",\n    \"amount\": \"10.00\",\n    \"budget_date\": \"2024-08-06\"\n}"},{"id":"32faf409-1803-4f9a-8627-8beddf165bf1","name":"Bad Request","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n   \r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/budgets/61bfb7be-8786-4a07-b09f-a23dda773e74/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 21:32:58 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"82"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"2b020b09-d7b0-4ccf-87fe-505952c4b440"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cKExwGkxIAMEJJg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3e80a-2db28eb77cb09688050e1cdf;Parent=67827e5ef9f29b3d;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"category\": [\n        \"This field is required.\"\n    ],\n    \"budget_date\": [\n        \"This field is required.\"\n    ]\n}"}],"_postman_id":"6feb116f-86a9-47e1-9a7d-dbd857b1b55a"},{"name":"Editar presupuesto parcial","event":[{"listen":"test","script":{"id":"7d63863d-3914-4e18-b13e-ea9471c675e4","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    category: 'string',\r","    status: 'string',\r","    amount: 'string',\r","    budget_date: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"89027418-b064-43b3-8976-6b983590d7c0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"category\":\"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\r\n    \"status\":\"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\r\n    \"amount\": 10,\r\n    \"budget_date\":\"2025-01-04\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/{{budget_id}}/","description":"<p>Este endpoint permite modificar parcialmente un presupuesto existente, actualizando únicamente los campos incluidos en la solicitud.</p>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>PATCH</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> {{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/{{budget_id}}/</p>\n</li>\n<li><p><strong>Parámetros de ruta:</strong></p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario.</p>\n</li>\n<li><p><code>budget_id</code> (string): ID del presupuesto a actualizar.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li><p><code>category</code> (string) (opcional): ID de la categoría asociada.</p>\n</li>\n<li><p><code>status</code> (string) (opcional): ID del estado del presupuesto</p>\n</li>\n<li><p><code>amount</code> (number) (opcional): Monto definido para el presupuesto.</p>\n</li>\n<li><p><code>bugget_date</code>(string) (opcional): Fecha del presupuesto. Tiene que ser en el formato AAAA-MM-DD</p>\n</li>\n</ul>\n<h4 id=\"request-body-example\">Request Body Example</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"category\":\"category_id\",\n    \"status\":\"status_id\",\n    \"amount\": 10,\n    \"budget_date\":\"2025-06-04\"\n}\n\n</code></pre>\n<hr />\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON con el presupuesto actualizado, incluyendo todos sus campos, aunque solo se haya modificado uno o varios.</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único del presupuesto.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario propietario.</p>\n</li>\n<li><p><code>category</code> (string): ID de la categoría asociada.</p>\n</li>\n<li><p><code>status</code> (string): ID del estado del presupuesto</p>\n</li>\n<li><p><code>amount</code> (number): Monto definido para el presupuesto.</p>\n</li>\n<li><p><code>bugget_date</code>(string): Fecha del presupuesto.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"category\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"status\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"amount\": { \"type\": \"string\" },\n    \"budget_date\": { \"type\": \"string\", \"format\": \"date\" }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","budgets","{{budget_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"01bce845-022c-47c6-8084-32e78cb681fb","name":"Successful Response","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"amount\": 200\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/budgets/61bfb7be-8786-4a07-b09f-a23dda773e74/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 21:46:11 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"237"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"8b68c774-d721-4917-bf98-59cccd03128e"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cKGtiHeIoAMECDg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3eb23-67ec148d35043b723e6b011d;Parent=75d3623eb46fd6b7;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"61bfb7be-8786-4a07-b09f-a23dda773e74\",\n    \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n    \"category\": \"72fb8abb-d236-469d-a511-0e7d81c4af1e\",\n    \"status\": \"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\n    \"amount\": \"200.00\",\n    \"budget_date\": \"2024-08-06\"\n}"},{"id":"7526b3be-fd22-410a-b607-2d143dcbb988","name":"Bad Request - Invalid data","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"category\":\"invalid\",\r\n    \"status\":\"invalid\",\r\n    \"amount\": 10,\r\n    \"budget_date\":\"2025-01-04\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/{{budget_id}}/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 15:46:27 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"99"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"658bb542-f8cc-4fcd-b463-e880720e7f7d"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LpWNHH2bIAMEQKQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68406a53-4e9be02b50527c2507739e8d;Parent=73213ae4588f4b7f;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"category\": [\n        \"“invalid” is not a valid UUID.\"\n    ],\n    \"status\": [\n        \"“invalid” is not a valid UUID.\"\n    ]\n}"},{"id":"1ebda039-32bf-4280-a1c6-9e800ae64559","name":"Bad Request - Invalid date","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"category\":\"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\r\n    \"status\":\"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\r\n    \"amount\": 10,\r\n    \"budget_date\":\"invalid-15-04\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/{{budget_id}}/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 15:47:54 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"88"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"87a7c586-0214-4bba-b965-b81f9d4e0eef"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LpWavEF7IAMEJ6A="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68406aaa-70bb95e60d1730a4407b410c;Parent=16354c8d7771ec16;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"budget_date\": [\n        \"Date has wrong format. Use one of these formats instead: YYYY-MM-DD.\"\n    ]\n}"}],"_postman_id":"89027418-b064-43b3-8976-6b983590d7c0"},{"name":"Eliminar presupuesto","event":[{"listen":"test","script":{"id":"ce1d53f6-6c93-4ca0-b1b5-dd87e4e45a43","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulDelete();\r",""],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"df4f2554-1a54-4e17-b734-2db0d7426373","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"DELETE","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/{{budget_id}}/","description":"<p>Este endpoint permite <strong>eliminar un presupuesto</strong> específico del sistema utilizando su identificador único. Solo es posible eliminar un presupuesto del mes actual.</p>\n<h4 id=\"widget\">Widget</h4>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Crear-presupuesto-por-categor-a-21e7439960f080eba065e08530b6666d?source=copy_link#2247439960f0805b9829eed2c7b0f803\">Eliminar presupuesto</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/50959f16-ff8d-4096-9325-d902d164d638/aW1hZ2UucG5n\" alt height=\"330\" width=\"404\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>DELETE</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> {{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/{{delete_budget_id}}/</p>\n</li>\n<li><p><strong>Parámetro de ruta:</strong></p>\n<ul>\n<li><p><code>user_id</code>(string): ID del usuario</p>\n</li>\n<li><p><code>budget_id</code> (string): ID del presupuesto que se desea eliminar.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>POST</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON vacio, confirmando la correcta eliminacion del presupuesto.</p>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","budgets","{{budget_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"9c0944e8-ac97-48b7-8d40-e82d3bf58f1e","name":"Successful Response","originalRequest":{"method":"DELETE","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/{{budget_id}}/"},"status":"No Content","code":204,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 15:52:02 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"0"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"f4ca03e5-084a-4e78-a459-e17765f833ed"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LpXBfGdOIAMEuPQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68406ba2-65f1e2917a1531295678869a;Parent=0880ee30da4bcfab;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":null},{"id":"1fa7658e-92f7-4daf-bc29-91179775d845","name":"Bad Request - Already deleted","originalRequest":{"method":"DELETE","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/budgets/{{budget_id}}/"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 15:54:07 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"0"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"ab89196d-cb09-4315-936f-2bfa858e5cd0"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LpXU6E9aoAMETaw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68406c1f-301632131f1d2bf4455a7537;Parent=0e372748f10bd7e2;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":null}],"_postman_id":"df4f2554-1a54-4e17-b734-2db0d7426373"}],"id":"6a4b1546-19fe-4462-a1c6-d75137a46e49","description":"<h3 id=\"💸gestión-de-presupuestos-personales\">💸Gestión de presupuestos personales</h3>\n<p>La carpeta <strong>Budgets</strong> contiene todos los endpoints necesarios para la <strong>creación, consulta, edición y eliminación de presupuestos definidos por el usuario</strong>. Estos presupuestos permiten establecer límites de gasto por categoría, cuenta y periodo, ayudando al usuario a tener mayor control sobre sus finanzas personales.</p>\n<p>El módulo de presupuestos es una pieza clave dentro del sistema PFM, ya que complementa la visualización de hábitos financieros con acciones concretas de planificación y control.</p>\n<hr />\n<h4 id=\"📌-funcionalidades-incluidas\">📌 Funcionalidades incluidas</h4>\n<p>Los endpoints disponibles permiten:</p>\n<ul>\n<li><p>Crear nuevos presupuestos personalizados.</p>\n</li>\n<li><p>Consultar el detalle o listado de presupuestos existentes.</p>\n</li>\n<li><p>Editar presupuestos de forma total (<code>PUT</code>) o parcial (<code>PATCH</code>).</p>\n</li>\n<li><p>Eliminar presupuestos que ya no están en uso.</p>\n</li>\n</ul>\n<p>Cada presupuesto puede estar asociado a:</p>\n<ul>\n<li><p>Un usuario (<code>user_id</code>).</p>\n</li>\n<li><p>Una cuenta bancaria (<code>account_id</code>).</p>\n</li>\n<li><p>Una categoría de gasto (<code>spending_category_id</code>).</p>\n</li>\n<li><p>Un periodo de tiempo (<code>start_date</code>, <code>end_date</code>).</p>\n</li>\n<li><p>Un monto objetivo (<code>amount</code>).</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🧠-consideraciones\">🧠 Consideraciones</h4>\n<ul>\n<li><p>Los presupuestos pueden superponerse en fechas solo si pertenecen a diferentes categorías.</p>\n</li>\n<li><p>El sistema permite realizar seguimiento del cumplimiento de cada presupuesto mediante otros endpoints de métricas.</p>\n</li>\n<li><p>Es posible utilizar estos endpoints como parte del flujo de onboarding o de recordatorios inteligentes para establecer límites de gasto.</p>\n</li>\n<li><p>Los campos <code>status</code> y <code>updated_at</code> permiten saber si un presupuesto está activo y cuándo fue modificado por última vez.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🔐-seguridad\">🔐 Seguridad</h4>\n<ul>\n<li><p>Todos los endpoints requieren autenticación vía token.</p>\n</li>\n<li><p>Las acciones de edición o eliminación pueden estar restringidas a usuarios propietarios o administradores del sistema.</p>\n</li>\n</ul>\n","_postman_id":"6a4b1546-19fe-4462-a1c6-d75137a46e49"},{"name":"Transacciones","item":[{"name":"Detalle de una transacción","item":[{"name":"Notas de las transacciones","item":[{"name":"Crear transaccion nota","event":[{"listen":"test","script":{"id":"62ca5ee3-6fff-440e-8b00-e807f1fe563a","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulPost();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    updated_at: 'string',\r","    transaction: 'string',\r","    transaction_date: 'string',\r","    transaction_note: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"9044fd9e-a505-4dc1-b9c5-6739483c8def","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"transaction_note\": \"Nota_magni-ea-ea\",\r\n    \"transaction_date\": \"1995-01-09\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/transaction-note/","description":"<p>Este endpoint permite <strong>crear una nueva nota</strong> asociada a una transacción específica.</p>\n<h3 id=\"widgets\">Widgets</h3>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Detalle-transacci-n-21e7439960f080b28fbdcc65871f6ad9?source=copy_link#2247439960f0808f8fc2d671779053ff\">Crear nota</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/3851056d-b4f2-4ad3-8c9a-ff08e222dbc8/aW1hZ2UucG5n\" alt height=\"644\" width=\"397\" />\n\n<hr />\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Método**:** <code>POST</code></p>\n</li>\n<li><p>Endpoint**:** <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/transaction-note/</code></p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>user_id</code> (string): ID del usuario asociado al proyecto.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li><strong>transaction_note</strong> (string): La nota que se desea asociar a la transacción.</li>\n</ul>\n<h4 id=\"request-body-example\">Request Body Example</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"transaction_note\": \"Nota_eos-eum-voluptas\"\n}\n\n</code></pre>\n<h3 id=\"response\">Response</h3>\n<p>La respuesta incluye un JSON que contiene los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único de la nota creada.</p>\n</li>\n<li><p><code>user_id</code>(string): Identificador del usuario asociado a la nota.</p>\n</li>\n<li><p><code>updated_at</code>(string): Marca de tiempo de la última actualización de la nota.</p>\n</li>\n<li><p><code>transaction</code> (string):: Identificador de la transacción a la que se asocia la nota.</p>\n</li>\n<li><p><code>transaction_date</code> (string):: Fecha de la transacción.</p>\n</li>\n<li><p><code>transaction_note</code> (string): Contenido de la nota creada.</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"transaction\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"transaction_date\": { \"type\": \"string\", \"format\": \"date\" },\n    \"transaction_note\": { \"type\": \"string\" }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions","{{transaccion_id}}","transaction-note",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"d392cf64-e608-40ae-8218-bb9d36d0a36a","name":"Successful Response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"transaction_note\": \"Nota_vero-libero-debitis\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/093b76d0-a121-4c12-90e9-8d299bf8453f/transaction-note/"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 22:56:56 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"272"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"a0adbb8d-6bf9-41c6-96c8-1aaad7faeefa"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cNkAzFbVoAMEI8w="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b54d38-3a14a5503f5f0c2f49007112;Parent=6ccd1362ed616e92;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"1d5a1ff2-f1d4-44a1-aebf-a4e336a41230\",\n    \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n    \"updated_at\": \"2024-08-08T22:56:56+0000\",\n    \"transaction\": \"093b76d0-a121-4c12-90e9-8d299bf8453f\",\n    \"transaction_date\": \"2024-08-05\",\n    \"transaction_note\": \"Nota_molestiae-natus-laboriosam\"\n}"},{"id":"85f467b1-86e2-4d07-afa1-7d9d6b0c81b9","name":"Bad Request - Note already exist","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"transaction_note\": \"Nota_provident-beatae-quaerat\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/transaction-note/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 19:49:38 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"74"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"b5758207-e89f-465a-be33-87e93f62fd63"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"Lp506Gd1oAMEOuA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6840a352-1bb929ab795a5b981603ae12;Parent=635c66dc2f91f644;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": [\n        \"transaction note with this transaction already exists.\"\n    ]\n}"},{"id":"c950086b-bbce-4bf4-ae5a-e7ba66a26f5c","name":"Bad Request - Invalid fields","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/093b76d0-a121-4c12-90e9-8d299bf8453f/transaction-note/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 22:58:04 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"121"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"49b570a7-eb47-42db-8188-253aba17b8a3"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cNkLjHvgIAMEtQQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b54d7c-77248c1903938fc06b2a2705;Parent=40ef74fed9ce4685;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": [\n        \"transaction note with this transaction already exists.\"\n    ],\n    \"transaction_note\": [\n        \"This field is required.\"\n    ]\n}"}],"_postman_id":"9044fd9e-a505-4dc1-b9c5-6739483c8def"},{"name":"Obtener notas de transaccion","event":[{"listen":"test","script":{"id":"62ca5ee3-6fff-440e-8b00-e807f1fe563a","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulPost();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    updated_at: 'string',\r","    transaction: 'string',\r","    transaction_date: 'string',\r","    transaction_note: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"014a23b7-66df-4cc5-a519-85870c7e4515","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"body":{"mode":"raw","raw":"{\r\n    \"transaction_note\": \"Nota_eum-velit-eveniet\",\r\n    \"transaction_date\": \"1995-01-09\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/transaction-note/","description":"<p>Este endpoint permite <strong>obtener información sobre las notas de transacciones</strong> asociadas a un usuario específico.</p>\n<h3 id=\"widgets\">Widgets</h3>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Detalle-transacci-n-21e7439960f080b28fbdcc65871f6ad9?source=copy_link#2247439960f0808f8fc2d671779053ff\">Obtener nota, detalle transacción</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/a904a166-d2fd-43a8-aecb-0f24f3a4e65b/aW1hZ2UucG5n\" alt height=\"790\" width=\"398\" />\n\n<hr />\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Método**:** <code>GET</code></p>\n</li>\n<li><p>Endpoint**:** <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/transaction-note/</code></p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado a la transacción.</p>\n</li>\n<li><p><code>transaccion_id</code> (string): ID de la transacción para la cual se desea obtener la nota.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</p>\n<h3 id=\"response\">Response</h3>\n<p>La respuesta incluye un JSON que contiene los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único de la nota creada.</p>\n</li>\n<li><p><code>user_id</code> (string): Identificador del usuario asociado a la nota.</p>\n</li>\n<li><p><code>updated_at</code> (string): Marca de tiempo de la última actualización de la nota.</p>\n</li>\n<li><p><code>transaction</code> (string): Identificador de la transacción a la que se asocia la nota.</p>\n</li>\n<li><p><code>transaction_date</code> (string): Fecha de la transacción.</p>\n</li>\n<li><p><code>transaction_note</code> (string): Contenido de la nota creada.</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"transaction\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"transaction_date\": { \"type\": \"string\", \"format\": \"date\" },\n    \"transaction_note\": { \"type\": \"string\" }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions","{{transaccion_id}}","transaction-note",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"9825d9e4-5fa5-41ec-b167-2a4482f2745c","name":"Successful Response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"transaction_note\": \"Nota_dolorum-ea-temporibus\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/093b76d0-a121-4c12-90e9-8d299bf8453f/transaction-note/"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 22:56:56 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"272"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"a0adbb8d-6bf9-41c6-96c8-1aaad7faeefa"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cNkAzFbVoAMEI8w="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b54d38-3a14a5503f5f0c2f49007112;Parent=6ccd1362ed616e92;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"1d5a1ff2-f1d4-44a1-aebf-a4e336a41230\",\n    \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n    \"updated_at\": \"2024-08-08T22:56:56+0000\",\n    \"transaction\": \"093b76d0-a121-4c12-90e9-8d299bf8453f\",\n    \"transaction_date\": \"2024-08-05\",\n    \"transaction_note\": \"Nota_molestiae-natus-laboriosam\"\n}"},{"id":"bc54daa1-739f-4966-96d8-d411b3dde037","name":"Bad Request - Note already exist","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"transaction_note\": \"Nota_aut-sed-debitis\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/transaction-note/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 19:49:38 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"74"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"b5758207-e89f-465a-be33-87e93f62fd63"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"Lp506Gd1oAMEOuA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6840a352-1bb929ab795a5b981603ae12;Parent=635c66dc2f91f644;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": [\n        \"transaction note with this transaction already exists.\"\n    ]\n}"},{"id":"c97ca265-44a4-4f53-b148-f9b3b8e52712","name":"Bad Request - Invalid fields","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/093b76d0-a121-4c12-90e9-8d299bf8453f/transaction-note/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 22:58:04 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"121"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"49b570a7-eb47-42db-8188-253aba17b8a3"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cNkLjHvgIAMEtQQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b54d7c-77248c1903938fc06b2a2705;Parent=40ef74fed9ce4685;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction\": [\n        \"transaction note with this transaction already exists.\"\n    ],\n    \"transaction_note\": [\n        \"This field is required.\"\n    ]\n}"}],"_postman_id":"014a23b7-66df-4cc5-a519-85870c7e4515"},{"name":"Editar transaccion nota","event":[{"listen":"test","script":{"id":"edb596e7-f0a3-4331-b19c-fbf5a52c3134","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulPatch();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    updated_at: 'string',\r","    transaction: 'string',\r","    transaction_date: 'string',\r","    transaction_note: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"ae2c4e4c-1c88-4f43-b5c1-ea05ec458685","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n    \"transaction_note\": \"Nota_quaerat-voluptates-qui\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/transaction-note/{{transaction_note_id}}/","description":"<p>Este endpoint permite <strong>editar completamente la nota de una transacción existente</strong> mediante una solicitud HTTP PUT. A continuación se detallan los parámetros y el formato esperado de la respuesta.</p>\n<h3 id=\"widgets\">Widgets</h3>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Detalle-transacci-n-21e7439960f080b28fbdcc65871f6ad9?source=copy_link#2247439960f0808f8fc2d671779053ff\">Editar transacción</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/d5a9a33a-a093-42ef-a82c-e6dc90560576/aW1hZ2UucG5n\" alt height=\"644\" width=\"397\" />\n\n<hr />\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p>Método**:** <code>PUT</code></p>\n</li>\n<li><p>Endpoint**:** {{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/transaction-note/{{transaction_note_id}}/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado.</p>\n</li>\n<li><p><code>transaction_id</code>(string): ID de la transacción.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li><code>transaction_note</code> (string): Nota de la transacción que se desea actualizar.</li>\n</ul>\n<h4 id=\"request-body-example\"><strong>Request Body Example</strong></h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"transaction_note\": \"Nota_corrupti-doloribus-doloribus\"\n}\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta de una solicitud exitosa devolverá un objeto JSON que contiene la información de la transacción actualizada, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único de la nota creada.</p>\n</li>\n<li><p><code>user_id</code>(string): Identificador del usuario asociado a la nota.</p>\n</li>\n<li><p><code>updated_at</code>(string): Marca de tiempo de la última actualización de la nota.</p>\n</li>\n<li><p><code>transaction</code> (string):: Identificador de la transacción a la que se asocia la nota.</p>\n</li>\n<li><p><code>transaction_date</code> (string):: Fecha de la transacción.</p>\n</li>\n<li><p><code>transaction_note</code> (string): Contenido de la nota creada.</p>\n</li>\n</ul>\n<p><strong>Response Format</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"transaction\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"transaction_date\": { \"type\": \"string\", \"format\": \"date\" },\n    \"transaction_note\": { \"type\": \"string\" }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions","{{transaccion_id}}","transaction-note","{{transaction_note_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"7db32b1e-5e40-4190-be3d-ab070d64b759","name":"Successful Response","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n    \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\r\n    \"transaction\": \"093b76d0-a121-4c12-90e9-8d299bf8453f\",\r\n    \"transaction_date\": \"2024-08-05\",\r\n    \"transaction_note\": \"Nota_ut-eum-totam\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/093b76d0-a121-4c12-90e9-8d299bf84531/transaction-note/1d5a1ff2-f1d4-44a1-aebf-a4e336a41230/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 22:58:28 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"274"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"e0d92e96-87f7-447a-8430-b88615df952f"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cNkPMFsAIAMEIDg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b54d94-5edfd4e154f1373f56b46670;Parent=5093e6708b769494;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"1d5a1ff2-f1d4-44a1-aebf-a4e336a41230\",\n    \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n    \"updated_at\": \"2024-08-08T22:58:28+0000\",\n    \"transaction\": \"093b76d0-a121-4c12-90e9-8d299bf8453f\",\n    \"transaction_date\": \"2024-08-05\",\n    \"transaction_note\": \"Nota_consequuntur-ipsam-veritatis\"\n}"},{"id":"767478e5-a09c-4020-939a-7b24e6e166e7","name":"Bad Request","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n    \"transaction\": \"093b76d0-a121-4c12-90e9-8d299bf8453f\",\r\n    \"transaction_date\": \"2024-08-05\",\r\n    \"transaction_note\": \"Nota_ducimus-enim-iste\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/093b76d0-a121-4c12-90e9-8d299bf84531/transaction-note/1d5a1ff2-f1d4-44a1-aebf-a4e336a41230/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 22:59:30 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"39"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"0afa1505-1b13-48cf-a54d-cae400743c84"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cNkY5FtcIAMEuXQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b54dd2-2d95812a71c899e8357dabce;Parent=48dfe99c49f53312;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"user_id\": [\n        \"This field is required.\"\n    ]\n}"}],"_postman_id":"ae2c4e4c-1c88-4f43-b5c1-ea05ec458685"},{"name":"Editar parcial transaccion nota","event":[{"listen":"test","script":{"id":"93dfacf7-188a-4b8b-ad12-2f33d850de22","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulPatch();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    updated_at: 'string',\r","    transaction: 'string',\r","    transaction_date: 'string',\r","    transaction_note: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"261ae341-d8d6-466f-81d2-05842a3a79fa","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"transaction_note\": \"Nota_voluptatem-delectus-ea\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/transaction-note/{{transaction_note_id}}","description":"<p>Permite <strong>editar parcialmente la nota de una transacción</strong>, útil si solo deseas modificar un campo sin sobrescribir otros.</p>\n<h3 id=\"widgets\">Widgets</h3>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Detalle-transacci-n-21e7439960f080b28fbdcc65871f6ad9?source=copy_link#2247439960f0808f8fc2d671779053ff\">Editar nota</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/d01e4561-35d6-4d95-9b64-b60263855b9d/aW1hZ2UucG5n\" alt height=\"644\" width=\"397\" />\n\n<hr />\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p><strong>Método:</strong> <code>PATCH</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> {{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/transaction-note/{{transaction_note_id}}</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario asociado.</p>\n</li>\n<li><p><code>transaction_id</code>(string): ID de la transacción.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li><strong>transaction_note</strong> (string): La nueva nota de la transacción que deseas establecer. Este campo es obligatorio.</li>\n</ul>\n<h4 id=\"request-body-example\">Request Body Example</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"transaction_note\": \"Nota_ipsum-placeat-ex\"\n}\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta de una solicitud exitosa devolverá un objeto JSON que contiene la información de la transacción actualizada, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único de la nota creada.</p>\n</li>\n<li><p><code>user_id</code>(string): Identificador del usuario asociado a la nota.</p>\n</li>\n<li><p><code>updated_at</code>(string): Marca de tiempo de la última actualización de la nota.</p>\n</li>\n<li><p><code>transaction</code> (string):: Identificador de la transacción a la que se asocia la nota.</p>\n</li>\n<li><p><code>transaction_date</code> (string):: Fecha de la transacción.</p>\n</li>\n<li><p><code>transaction_note</code> (string): Contenido de la nota creada.</p>\n</li>\n</ul>\n<h4 id=\"response-format\"><strong>Response Format</strong></h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"transaction\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"transaction_date\": { \"type\": \"string\", \"format\": \"date\" },\n    \"transaction_note\": { \"type\": \"string\" }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions","{{transaccion_id}}","transaction-note","{{transaction_note_id}}"],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"1e8b46ce-4e58-424a-a8cf-89ec6c71b9e3","name":"Successful Response","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"transaction_note\": \"Nota_magni-similique-enim\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/093b76d0-a121-4c12-90e9-8d299bf84531/transaction-note/1d5a1ff2-f1d4-44a1-aebf-a4e336a41230/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 23:01:19 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"256"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"750bceaf-a665-488d-b69c-679f70220f80"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cNkqBFgdIAMEKLQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b54e3f-6767170e44b6d652498cc1a1;Parent=74c8d639d303c732;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"1d5a1ff2-f1d4-44a1-aebf-a4e336a41230\",\n    \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n    \"updated_at\": \"2024-08-08T23:01:19+0000\",\n    \"transaction\": \"093b76d0-a121-4c12-90e9-8d299bf8453f\",\n    \"transaction_date\": \"2024-08-05\",\n    \"transaction_note\": \"Nota_id-ut-quam\"\n}"},{"id":"67beb316-cd7a-4cb0-93cd-2529948cb4b5","name":"Bad Request","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n    \"transaction_date\": \"\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/093b76d0-a121-4c12-90e9-8d299bf84531/transaction-note/1d5a1ff2-f1d4-44a1-aebf-a4e336a41230/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 23:01:57 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"93"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"c58a5bc5-315b-48c1-9ebc-c63904240c99"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cNkv9FCHIAMEaAA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b54e65-504f21c1166a23c861c0069c;Parent=4224b29e6edb2e69;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"transaction_date\": [\n        \"Date has wrong format. Use one of these formats instead: YYYY-MM-DD.\"\n    ]\n}"}],"_postman_id":"261ae341-d8d6-466f-81d2-05842a3a79fa"}],"id":"680794c5-9bc2-43a7-b2e7-dc4d0cd06530","description":"<h3 id=\"📝-notas-personalizadas-en-transacciones\">📝 Notas personalizadas en transacciones</h3>\n<p>La subcarpeta <strong>Transacción Nota</strong> contiene los endpoints que permiten a los usuarios <strong>agregar, editar o consultar notas personalizadas asociadas a sus transacciones</strong>. Estas notas permiten capturar contexto adicional, intenciones del gasto, recordatorios personales o justificaciones que no se reflejan directamente en la descripción original de la transacción.</p>\n<p>Este módulo mejora la experiencia del usuario al ofrecer una capa de personalización y seguimiento cualitativo sobre sus movimientos financieros.</p>\n<hr />\n<h4 id=\"📌-funcionalidades-incluidas\">📌 Funcionalidades incluidas</h4>\n<p>Los endpoints permiten:</p>\n<ul>\n<li><p>Crear una nueva nota asociada a una transacción existente.</p>\n</li>\n<li><p>Editar completamente una nota registrada (<code>PUT</code>).</p>\n</li>\n<li><p>Realizar ediciones parciales de la nota (<code>PATCH</code>).</p>\n</li>\n<li><p>Consultar la nota actual de una transacción determinada.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🧠-casos-de-uso\">🧠 Casos de uso</h4>\n<ul>\n<li><p>Registrar el motivo detrás de un gasto puntual.</p>\n</li>\n<li><p>Documentar gastos compartidos, reembolsables o de negocio.</p>\n</li>\n<li><p>Usar notas como etiquetas personales o comentarios libres.</p>\n</li>\n<li><p>Ayudar al usuario a recordar gastos atípicos o no recurrentes.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🧩-consideraciones-técnicas\">🧩 Consideraciones técnicas</h4>\n<ul>\n<li><p>Las notas son almacenadas como texto libre.</p>\n</li>\n<li><p>Están asociadas directamente a un <code>transaction_id</code>.</p>\n</li>\n<li><p>Se pueden sobrescribir o editar parcialmente sin afectar el resto de la transacción.</p>\n</li>\n<li><p>El historial de cambios de notas no se conserva (último estado).</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🔐-seguridad\">🔐 Seguridad</h4>\n<ul>\n<li><p>Solo el usuario propietario de la transacción puede agregar o modificar notas.</p>\n</li>\n<li><p>Todos los endpoints requieren autenticación válida mediante token.</p>\n</li>\n</ul>\n","_postman_id":"680794c5-9bc2-43a7-b2e7-dc4d0cd06530"},{"name":"Detalle transacciones usuario","event":[{"listen":"test","script":{"id":"ec6a0890-a38d-41af-a167-8685a317b03f","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    ignore_pfm: 'boolean',\r","    external_id: 'string',\r","    user_id: 'string',\r","    transaction_date: 'string',\r","    transaction_datetime: 'string',\r","    amount: 'string',\r","    description: 'string',\r","    category: 'string',\r","    user_note: { type: 'string', optional: true },\r","    product_type: 'object',\r","    exchange_rate: { type: 'string', optional: true },\r","    merchant: 'object',\r","    account_id: 'string',\r","    transaction_note: 'object',\r","    classified: 'boolean'\r","};\r","\r","const productTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","const merchantProperties = {\r","    id: 'string',\r","    name: 'string',\r","    logo_url: 'string'\r","};\r","\r","const transactionNoteProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    updated_at: 'string',\r","    transaction: 'string',\r","    transaction_date: 'string',\r","    transaction_note: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the product_type object\r","pm.test(\"Product type has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.product_type, productTypeProperties);\r","    \r","    // Check metadata properties of the product_type object\r","    xerpaTestApi.checkObjectProperties(responseJson.product_type.metadata, metadataProperties);\r","});\r","\r","// Check properties of the merchant object\r","pm.test(\"Merchant has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.merchant, merchantProperties);\r","});\r","\r","// Check properties of the transaction_note object\r","pm.test(\"Transaction note has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.transaction_note, transactionNoteProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"81938510-48e9-462e-a6c2-9654a3452d3b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/","description":"<p>Este endpoint permite <strong>consultar el detalle de una transacción específica</strong> registrada por un usuario, utilizando su identificador único.</p>\n<h4 id=\"widget\">Widget</h4>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Detalle-transacci-n-21e7439960f080b28fbdcc65871f6ad9?source=copy_link\">Detalle transacción</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/ec743450-7a09-4269-8665-a5a47a89d450/aW1hZ2UucG5n\" alt height=\"790\" width=\"398\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/</code></p>\n</li>\n<li><p><strong>Parámetros de ruta:</strong></p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario propietario de la transacción.</p>\n</li>\n<li><p><code>transaccion_id</code> (string): ID de la transacción que se desea consultar.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON que contiene todos los detalles de la transacción.</p>\n<ul>\n<li><p><code>id</code> (string): ID único de la transacción.</p>\n</li>\n<li><p><code>ignore_pfm</code> (boolean): Indica si la transacción debe ser ignorada por el PFM.</p>\n</li>\n<li><p><code>external_id</code> (string): ID externo asociado a la transacción.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario propietario.</p>\n</li>\n<li><p><code>transaction_date</code> (string): Fecha de ocurrencia de la transacción.</p>\n</li>\n<li><p><code>transaction_datetime</code> (string): Fecha y hora de la transacción.</p>\n</li>\n<li><p><code>amount</code> (number): Monto de la transacción.</p>\n</li>\n<li><p><code>description</code> (string): Descripción o concepto registrado.</p>\n</li>\n<li><p><code>category</code> (string): Categoría asignada a la transacción.</p>\n</li>\n<li><p><code>user_note</code> (string|null): Nota del usuario sobre la transacción.</p>\n</li>\n<li><p><code>product_type</code> (object): Detalles del tipo de producto, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del tipo de producto.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo del producto.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del artículo.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del producto.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional del producto, incluyendo:</p>\n<ul>\n<li><p><code>icon</code> (string): Icono del producto.</p>\n</li>\n<li><p><code>color</code> (string): Color del producto.</p>\n</li>\n<li><p><code>active</code> (boolean): Estado de actividad del producto.</p>\n</li>\n<li><p><code>short_name</code> (string): Nombre corto del producto.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>exchange_rate</code> (number|null): Tasa de cambio aplicable.</p>\n</li>\n<li><p><code>merchant</code> (object|null): Información del comerciante asociado.</p>\n</li>\n<li><p><code>account_id</code> (string): ID de la cuenta asociada a la transacción.</p>\n</li>\n<li><p><code>transaction_note</code> (object|null): Nota de la transacción, que incluye:</p>\n<ul>\n<li><p><code>id</code> (string): ID de la nota.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario que creó la nota.</p>\n</li>\n<li><p><code>updated_at</code> (string): Timestamp de la última actualización.</p>\n</li>\n<li><p><code>transaction</code> (string): ID de la transacción relacionada.</p>\n</li>\n<li><p><code>transaction_date</code> (string): Fecha de la transacción relacionada.</p>\n</li>\n<li><p><code>transaction_note</code> (string): Contenido de la nota de la transacción.</p>\n</li>\n</ul>\n</li>\n<li><p><code>classified</code> (boolean): Indica si la transacción ha sido clasificada.</p>\n</li>\n<li><p><code>attributes</code> (object): Atributos adicionales de la transacción.</p>\n</li>\n<li><p><code>tags</code> (array): Lista de etiquetas asociadas a la transacción.</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"next\": { \"type\": [\"string\", \"null\"], \"format\": \"uri\" },\n    \"previous\": { \"type\": [\"string\", \"null\"], \"format\": \"uri\" },\n    \"total_pages\": { \"type\": \"integer\", \"minimum\": 1 },\n    \"current_page\": { \"type\": \"integer\", \"minimum\": 1 },\n    \"offset\": { \"type\": \"integer\", \"minimum\": 0 },\n    \"results\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"ignore_pfm\": { \"type\": \"boolean\" },\n          \"external_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"transaction_date\": { \"type\": \"string\", \"format\": \"date\" },\n          \"transaction_datetime\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"amount\": {\"type\": \"string\",},\n          \"description\": { \"type\": \"string\" },\n          \"category\": {\n            \"type\": [\"string\", \"object\"]\n          },\n          \"user_note\": { \"type\": [\"string\", \"null\"] },\n          \"product_type\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"icon\": { \"type\": \"string\", \"format\": \"uri\" },\n                  \"color\": {\"type\": \"string\",},\n                  \"active\": { \"type\": \"boolean\" },\n                  \"short_name\": { \"type\": \"string\" }\n                }\n              }\n            }\n          \"exchange_rate\": { \"type\": [\"object\", \"null\"] },\n          \"merchant\": { \"type\": [\"object\", \"null\"] },\n          \"account_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"transaction_note\": {\n            \"type\": [\"object\", \"null\"],\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n              \"transaction\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"transaction_date\": { \"type\": \"string\", \"format\": \"date\" },\n              \"transaction_note\": { \"type\": \"string\" }\n            }\n          },\n          \"classified\": { \"type\": \"boolean\" },\n          \"attributes\": { \"type\": \"object\" },\n          \"tags\": {\n            \"type\": \"array\",\n            \"items\": {}\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions","{{transaccion_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"af73d081-01ff-4bc3-98c3-31d9b730c805","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 21:11:40 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"1091"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"d7933d1a-f70e-46e1-ada2-07bbde622a33"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LqF2CE9mIAMEQkA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6840b68c-5b1c326379edfe220584a7d2;Parent=4e44d43d0396e6a8;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"49178c5c-0d30-4dae-acd0-a6dce37fc8e4\",\n    \"ignore_pfm\": false,\n    \"external_id\": \"5dd0400f-2e0b-4e0c-abbb-9517811d3fb4\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"transaction_date\": \"2024-09-20\",\n    \"transaction_datetime\": \"2024-09-20T00:00:00+0000\",\n    \"amount\": \"545000.00\",\n    \"description\": \"PAGO AGUINALDO 2024\",\n    \"category\": \"3954361d-ddf5-46dc-a8f8-af98ee9811da\",\n    \"user_note\": null,\n    \"product_type\": {\n        \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n        \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n        \"item_name\": \"cuenta_vista\",\n        \"description\": \"Cuenta Vista\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"CUENTAVISTA\"\n        }\n    },\n    \"exchange_rate\": null,\n    \"merchant\": null,\n    \"account_id\": \"5c7ddeb7-bb96-4ada-9745-3b97407634a1\",\n    \"transaction_note\": {\n        \"id\": \"6ecbfe95-96bd-4941-9220-1be8dcf50994\",\n        \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"updated_at\": \"2025-06-04T19:55:01+0000\",\n        \"transaction\": \"49178c5c-0d30-4dae-acd0-a6dce37fc8e4\",\n        \"transaction_date\": \"2024-08-05\",\n        \"transaction_note\": \"Nota_iusto-eaque-repellat\"\n    },\n    \"classified\": true,\n    \"attributes\": {},\n    \"tags\": []\n}"},{"id":"e7f969ec-17cc-45d7-ab9c-b18e95271077","name":"Not Found","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/14956a01-f5ee-4ea3-be40-9f2fd33a84c7/"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 15:06:37 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"23"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"6f359098-1d85-40b4-82d8-e18d4bb06e70"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cMfHlEVYIAMEi0Q="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b4defd-7c085e9c76226ec9456419d2;Parent=1ba76fb239a01581;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Not found.\"\n}"}],"_postman_id":"81938510-48e9-462e-a6c2-9654a3452d3b"},{"name":"Ignorar transacción","event":[{"listen":"test","script":{"id":"8d1f7987-f82e-4ee3-bc34-af689112b6d7","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    ignore_pfm: 'boolean',\r","    external_id: 'string',\r","    user_id: 'string',\r","    transaction_date: 'string',\r","    transaction_datetime: 'string',\r","    amount: 'string',\r","    description: 'string',\r","    category: 'string',\r","    user_note: { type: 'string', optional: true },\r","    product_type: 'object',\r","    exchange_rate: { type: 'string', optional: true },\r","    merchant: { type: 'object', optional: true },\r","    account_id: 'string',\r","    transaction_note: { type: 'object', optional: true },\r","    classified: 'boolean'\r","};\r","\r","const productTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the product_type object\r","pm.test(\"Product type has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.product_type, productTypeProperties);\r","    \r","    // Check metadata properties of the product_type object\r","    xerpaTestApi.checkObjectProperties(responseJson.product_type.metadata, metadataProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"f8981cd0-7e53-4c53-a6b5-a0a58cc16c77","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n  \"ignore_pfm\": true\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/","description":"<p>Este endpoint permite cambiar el estado de ignorar de la transacción para que sea o no considerada dentro de las métricas y análisis del PFM.</p>\n<p>Una transacción ignorada no será considerada para:</p>\n<ul>\n<li><p>Cálculo de métricas generales</p>\n</li>\n<li><p>Cálculo de métricas por categoría</p>\n</li>\n<li><p>Presupuestos</p>\n</li>\n</ul>\n<p>Si se presentan en los listados de movimientos.</p>\n<h3 id=\"widget\">Widget</h3>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Detalle-transacci-n-21e7439960f080b28fbdcc65871f6ad9?source=copy_link#2247439960f0807688fbf98fe5f5f237\">Ignorar / re-incluir transacción</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/7608f89c-ca6c-4670-ba1f-032f3e57b41d/aW1hZ2UucG5n\" width=\"398\" height=\"307\" />\n\n<hr />\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p><strong>Método:</strong> <code>PATCH</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/</code></p>\n</li>\n<li><p><strong>Parámetro de ruta:</strong></p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario que posee la transacción.</p>\n</li>\n<li><p><code>transaccion_id</code> (string): ID de la transacción que se desea modificar.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\"><strong>Request Body</strong></h4>\n<ul>\n<li><code>ignore_pfm</code> (boolean): Indica si se debe ignorar el PFM,</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"ignore_pfm\": false\n}\n\n</code></pre>\n<hr />\n<h3 id=\"response\">Response</h3>\n<p>La respuesta será un objeto JSON que contiene los detalles actualizados de la transacción, reflejando el cambio en su categoría.</p>\n<ul>\n<li><p><code>id</code> (string): ID de la transacción.</p>\n</li>\n<li><p><code>ignore_pfm</code> (boolean): Estado actualizado de la opción de ignorar PFM.</p>\n</li>\n<li><p><code>external_id</code> (string): ID externo de la transacción.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario asociado a la transacción.</p>\n</li>\n<li><p><code>transaction_date</code> (string): Fecha de la transacción.</p>\n</li>\n<li><p><code>transaction_datetime</code> (string): Fecha y hora de la transacción.</p>\n</li>\n<li><p><code>amount</code> (string): Monto de la transacción.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la transacción.</p>\n</li>\n<li><p><code>category</code> (string): ID de la nueva categoría asignada.</p>\n</li>\n<li><p><code>user_note</code> (string|null): Nota del usuario, si existe.</p>\n</li>\n<li><p><code>product_type</code> (object): Detalles del tipo de producto asociado a la transacción.</p>\n</li>\n<li><p><code>exchange_rate</code> (string|null): Tasa de cambio, si aplica.</p>\n</li>\n<li><p><code>merchant</code> (string|null): Información del comerciante, si aplica.</p>\n</li>\n<li><p><code>account_id</code> (string): ID de la cuenta asociada.</p>\n</li>\n<li><p><code>transaction_note</code> (object|null): Nota de la transacción, si existe.</p>\n</li>\n<li><p><code>classified</code> (boolean): Indica si la transacción ha sido clasificada.</p>\n</li>\n<li><p><code>attributes</code> (object): Atributos adicionales, si existen.</p>\n</li>\n<li><p><code>tags</code> (array): Etiquetas asociadas a la transacción.</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": \"49178c5c-0d30-4dae-acd0-a6dce37fc8e4\",\n    \"ignore_pfm\": true,\n    \"external_id\": \"5dd0400f-2e0b-4e0c-abbb-9517811d3fb4\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"transaction_date\": \"2024-09-20\",\n    \"transaction_datetime\": \"2024-09-20T00:00:00+0000\",\n    \"amount\": \"545000.00\",\n    \"description\": \"PAGO AGUINALDO 2024\",\n    \"category\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\",\n    \"user_note\": null,\n    \"product_type\": {\n        \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n        \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n        \"item_name\": \"cuenta_vista\",\n        \"description\": \"Cuenta Vista\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"CUENTAVISTA\"\n        }\n    },\n    \"exchange_rate\": null,\n    \"merchant\": null,\n    \"account_id\": \"5c7ddeb7-bb96-4ada-9745-3b97407634a1\",\n    \"transaction_note\": {\n        \"id\": \"6ecbfe95-96bd-4941-9220-1be8dcf50994\",\n        \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"updated_at\": \"2025-06-04T19:55:01+0000\",\n        \"transaction\": \"49178c5c-0d30-4dae-acd0-a6dce37fc8e4\",\n        \"transaction_date\": \"2024-08-05\",\n        \"transaction_note\": \"Nota_iusto-eaque-repellat\"\n    },\n    \"classified\": true,\n    \"attributes\": {},\n    \"tags\": []\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions","{{transaccion_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"c858e310-3ac0-4ab5-8c79-37c1a97ea4d2","name":"Not Found","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n  \"ignore_pfm\": false,\r\n  \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/abad4175-d597-4e67-9f4c-139a51969712/"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 15:24:56 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"23"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"1c25cec6-8af3-4351-92b2-8b0defaacb9f"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cMhzYEkuIAMEQCA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b4e348-0ab84b836439f4f4740fb019;Parent=76d9282639acee5a;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Not found.\"\n}"},{"id":"af0d61d4-c249-447e-8de2-019cdf86fd73","name":"Successful Response","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n  \"ignore_pfm\": false,\r\n  \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 21:35:14 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"1091"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"59a384dc-fa7e-484a-b087-b1f2c2f0a0fb"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LqJTAEwKoAMEuHQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6840bc12-57dad83912751ad947455543;Parent=105894ee8fc55ef5;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"49178c5c-0d30-4dae-acd0-a6dce37fc8e4\",\n    \"ignore_pfm\": false,\n    \"external_id\": \"5dd0400f-2e0b-4e0c-abbb-9517811d3fb4\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"transaction_date\": \"2024-09-20\",\n    \"transaction_datetime\": \"2024-09-20T00:00:00+0000\",\n    \"amount\": \"545000.00\",\n    \"description\": \"PAGO AGUINALDO 2024\",\n    \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n    \"user_note\": null,\n    \"product_type\": {\n        \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n        \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n        \"item_name\": \"cuenta_vista\",\n        \"description\": \"Cuenta Vista\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"CUENTAVISTA\"\n        }\n    },\n    \"exchange_rate\": null,\n    \"merchant\": null,\n    \"account_id\": \"5c7ddeb7-bb96-4ada-9745-3b97407634a1\",\n    \"transaction_note\": {\n        \"id\": \"6ecbfe95-96bd-4941-9220-1be8dcf50994\",\n        \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"updated_at\": \"2025-06-04T19:55:01+0000\",\n        \"transaction\": \"49178c5c-0d30-4dae-acd0-a6dce37fc8e4\",\n        \"transaction_date\": \"2024-08-05\",\n        \"transaction_note\": \"Nota_iusto-eaque-repellat\"\n    },\n    \"classified\": true,\n    \"attributes\": {},\n    \"tags\": []\n}"}],"_postman_id":"f8981cd0-7e53-4c53-a6b5-a0a58cc16c77"},{"name":"Actualizar categoría de la transacción","event":[{"listen":"test","script":{"id":"8d1f7987-f82e-4ee3-bc34-af689112b6d7","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    ignore_pfm: 'boolean',\r","    external_id: 'string',\r","    user_id: 'string',\r","    transaction_date: 'string',\r","    transaction_datetime: 'string',\r","    amount: 'string',\r","    description: 'string',\r","    category: 'string',\r","    user_note: { type: 'string', optional: true },\r","    product_type: 'object',\r","    exchange_rate: { type: 'string', optional: true },\r","    merchant: { type: 'object', optional: true },\r","    account_id: 'string',\r","    transaction_note: { type: 'object', optional: true },\r","    classified: 'boolean'\r","};\r","\r","const productTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the product_type object\r","pm.test(\"Product type has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.product_type, productTypeProperties);\r","    \r","    // Check metadata properties of the product_type object\r","    xerpaTestApi.checkObjectProperties(responseJson.product_type.metadata, metadataProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"30cc6d7a-5bf2-4b91-9dc6-ac3200de8762","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n  \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/","description":"<p>Este endpoint permite <strong>actualizar parcialmente la categoría de una transacción específica</strong>, sin modificar otros atributos.</p>\n<h3 id=\"widget\">Widget</h3>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Detalle-transacci-n-21e7439960f080b28fbdcc65871f6ad9?source=copy_link#2247439960f080b99bc6f1b214876f84\">Cambiar categoría</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/1b6de777-edc5-40cb-aad9-3dc81e622e38/aW1hZ2UucG5n\" width=\"401\" height=\"307\" />\n\n<hr />\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p><strong>Método:</strong> <code>PATCH</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/</code></p>\n</li>\n<li><p><strong>Parámetro de ruta:</strong></p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario que posee la transacción.</p>\n</li>\n<li><p><code>transaccion_id</code> (string): ID de la transacción que se desea modificar.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\"><strong>Request Body</strong></h4>\n<ul>\n<li><p><code>category</code> (string): ID de la nueva categoría a asignar a la transacción. Se debe validar si la transacción es de ingreso o de egreso para enviar un <code>category_id</code> de acuerdo al catálogo correspondiente.</p>\n<ul>\n<li><p><a href=\"#d57176a9-486c-4074-99e9-74f816955a4c\">Catálogo de categorías de gastos</a></p>\n</li>\n<li><p><a href=\"#84071bf8-ff92-43a3-9d97-28c36ad2b048\">Catálogo de categorías de ingreso</a></p>\n</li>\n</ul>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"category\": \"category_id\"\n}\n\n</code></pre>\n<hr />\n<h3 id=\"response\">Response</h3>\n<p>La respuesta será un objeto JSON que contiene los detalles actualizados de la transacción, reflejando el cambio en su categoría.</p>\n<ul>\n<li><p><code>id</code> (string): ID de la transacción.</p>\n</li>\n<li><p><code>ignore_pfm</code> (boolean): Estado actualizado de la opción de ignorar PFM.</p>\n</li>\n<li><p><code>external_id</code> (string): ID externo de la transacción.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario asociado a la transacción.</p>\n</li>\n<li><p><code>transaction_date</code> (string): Fecha de la transacción.</p>\n</li>\n<li><p><code>transaction_datetime</code> (string): Fecha y hora de la transacción.</p>\n</li>\n<li><p><code>amount</code> (string): Monto de la transacción.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la transacción.</p>\n</li>\n<li><p><code>category</code> (string): ID de la nueva categoría asignada.</p>\n</li>\n<li><p><code>user_note</code> (string|null): Nota del usuario, si existe.</p>\n</li>\n<li><p><code>product_type</code> (object): Detalles del tipo de producto asociado a la transacción.</p>\n</li>\n<li><p><code>exchange_rate</code> (string|null): Tasa de cambio, si aplica.</p>\n</li>\n<li><p><code>merchant</code> (string|null): Información del comerciante, si aplica.</p>\n</li>\n<li><p><code>account_id</code> (string): ID de la cuenta asociada.</p>\n</li>\n<li><p><code>transaction_note</code> (object|null): Nota de la transacción, si existe.</p>\n</li>\n<li><p><code>classified</code> (boolean): Indica si la transacción ha sido clasificada.</p>\n</li>\n<li><p><code>attributes</code> (object): Atributos adicionales, si existen.</p>\n</li>\n<li><p><code>tags</code> (array): Etiquetas asociadas a la transacción.</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": \"49178c5c-0d30-4dae-acd0-a6dce37fc8e4\",\n    \"ignore_pfm\": true,\n    \"external_id\": \"5dd0400f-2e0b-4e0c-abbb-9517811d3fb4\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"transaction_date\": \"2024-09-20\",\n    \"transaction_datetime\": \"2024-09-20T00:00:00+0000\",\n    \"amount\": \"545000.00\",\n    \"description\": \"PAGO AGUINALDO 2024\",\n    \"category\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\",\n    \"user_note\": null,\n    \"product_type\": {\n        \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n        \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n        \"item_name\": \"cuenta_vista\",\n        \"description\": \"Cuenta Vista\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"CUENTAVISTA\"\n        }\n    },\n    \"exchange_rate\": null,\n    \"merchant\": null,\n    \"account_id\": \"5c7ddeb7-bb96-4ada-9745-3b97407634a1\",\n    \"transaction_note\": {\n        \"id\": \"6ecbfe95-96bd-4941-9220-1be8dcf50994\",\n        \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"updated_at\": \"2025-06-04T19:55:01+0000\",\n        \"transaction\": \"49178c5c-0d30-4dae-acd0-a6dce37fc8e4\",\n        \"transaction_date\": \"2024-08-05\",\n        \"transaction_note\": \"Nota_iusto-eaque-repellat\"\n    },\n    \"classified\": true,\n    \"attributes\": {},\n    \"tags\": []\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions","{{transaccion_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"f05416c5-6ac5-4187-9dc3-f9e5bf45baf6","name":"Not Found","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n  \"ignore_pfm\": false,\r\n  \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/abad4175-d597-4e67-9f4c-139a51969712/"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 15:24:56 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"23"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"1c25cec6-8af3-4351-92b2-8b0defaacb9f"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cMhzYEkuIAMEQCA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b4e348-0ab84b836439f4f4740fb019;Parent=76d9282639acee5a;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Not found.\"\n}"},{"id":"878744e6-b850-4dd2-8786-473f212bfe60","name":"Successful Response","originalRequest":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n  \"ignore_pfm\": false,\r\n  \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 21:35:14 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"1091"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"59a384dc-fa7e-484a-b087-b1f2c2f0a0fb"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LqJTAEwKoAMEuHQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6840bc12-57dad83912751ad947455543;Parent=105894ee8fc55ef5;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"49178c5c-0d30-4dae-acd0-a6dce37fc8e4\",\n    \"ignore_pfm\": false,\n    \"external_id\": \"5dd0400f-2e0b-4e0c-abbb-9517811d3fb4\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"transaction_date\": \"2024-09-20\",\n    \"transaction_datetime\": \"2024-09-20T00:00:00+0000\",\n    \"amount\": \"545000.00\",\n    \"description\": \"PAGO AGUINALDO 2024\",\n    \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n    \"user_note\": null,\n    \"product_type\": {\n        \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n        \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n        \"item_name\": \"cuenta_vista\",\n        \"description\": \"Cuenta Vista\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"CUENTAVISTA\"\n        }\n    },\n    \"exchange_rate\": null,\n    \"merchant\": null,\n    \"account_id\": \"5c7ddeb7-bb96-4ada-9745-3b97407634a1\",\n    \"transaction_note\": {\n        \"id\": \"6ecbfe95-96bd-4941-9220-1be8dcf50994\",\n        \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"updated_at\": \"2025-06-04T19:55:01+0000\",\n        \"transaction\": \"49178c5c-0d30-4dae-acd0-a6dce37fc8e4\",\n        \"transaction_date\": \"2024-08-05\",\n        \"transaction_note\": \"Nota_iusto-eaque-repellat\"\n    },\n    \"classified\": true,\n    \"attributes\": {},\n    \"tags\": []\n}"}],"_postman_id":"30cc6d7a-5bf2-4b91-9dc6-ac3200de8762"},{"name":"Editar transaccion categoria ignorar","event":[{"listen":"test","script":{"id":"f3595df9-f988-4c57-b2b0-17b07008c567","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulPut();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    ignore_pfm: 'boolean',\r","    external_id: 'string',\r","    user_id: 'string',\r","    transaction_date: 'string',\r","    transaction_datetime: 'string',\r","    amount: 'string',\r","    description: 'string',\r","    category: 'string',\r","    user_note: { type: 'string', optional: true },\r","    product_type: 'object',\r","    exchange_rate: { type: 'string', optional: true },\r","    merchant: { type: 'object', optional: true },\r","    account_id: 'string',\r","    transaction_note: { type: 'object', optional: true },\r","    classified: 'boolean'\r","};\r","\r","const productTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the product_type object\r","pm.test(\"Product type has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.product_type, productTypeProperties);\r","    \r","    // Check metadata properties of the product_type object\r","    xerpaTestApi.checkObjectProperties(responseJson.product_type.metadata, metadataProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"8a57d16c-708f-4772-9126-5b022856b342","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"ignore_pfm\": true,\r\n  \"category\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/","description":"<p>Este endpoint permite <strong>editar una transacción para asignarle la categoría \"ignorar\"</strong>, de modo que quede fuera de los cálculos financieros y reportes del sistema.</p>\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p><strong>Método:</strong> <code>PUT</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/</code></p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><p><code>user_id</code> (string): ID del usuario al que pertenece la transacción.</p>\n</li>\n<li><p><code>transaccion_id</code> (string): ID de la transacción que se desea actualizar.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Se requiere un cuerpo en formato JSON con los siguientes parámetros:</p>\n<ul>\n<li><p><code>ignore_pfm</code> (boolean): Indica si la transacción debe ser ignorada en los cálculos financieros.</p>\n</li>\n<li><p><code>category</code> (string): ID de la categoría que se desea asignar a la transacción.</p>\n</li>\n</ul>\n<h4 id=\"request-body-example\">Request Body Example</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"ignore_pfm\": true,\n  \"category\": \"category_id\"\n}\n\n</code></pre>\n<h3 id=\"response\">Response</h3>\n<p>La respuesta será un objeto JSON que representa la transacción actualizada, con la categoría modificada a “ignorada”.</p>\n<ul>\n<li><p><code>id</code> (string): ID de la transacción.</p>\n</li>\n<li><p><code>ignore_pfm</code> (boolean): Indica si la transacción está marcada para ser ignorada.</p>\n</li>\n<li><p><code>external_id</code> (string): ID externo asociado a la transacción.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario que realizó la transacción.</p>\n</li>\n<li><p><code>transaction_date</code> (string): Fecha de la transacción.</p>\n</li>\n<li><p><code>transaction_datetime</code> (string): Fecha y hora de la transacción.</p>\n</li>\n<li><p><code>amount</code> (string): Monto de la transacción.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la transacción.</p>\n</li>\n<li><p><code>category</code> (string): Nueva categoría asignada (correspondiente a \"ignorar\").</p>\n</li>\n<li><p><code>user_note</code> (null): Nota del usuario, si aplica.</p>\n</li>\n<li><p><code>product_type</code> (object): Detalles del tipo de producto asociado a la transacción.</p>\n</li>\n<li><p><code>exchange_rate</code> (null): Tasa de cambio, si aplica.</p>\n</li>\n<li><p><code>merchant</code> (null): Información del comerciante, si aplica.</p>\n</li>\n<li><p><code>account_id</code> (string): ID de la cuenta asociada a la transacción.</p>\n</li>\n<li><p><code>transaction_note</code> (object): Nota de la transacción, si aplica.</p>\n</li>\n<li><p><code>classified</code> (boolean): Indica si la transacción ha sido clasificada.</p>\n</li>\n<li><p><code>attributes</code> (object): Atributos adicionales, si aplica.</p>\n</li>\n<li><p><code>tags</code> (array): Etiquetas asociadas a la transacción.</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": \"49178c5c-0d30-4dae-acd0-a6dce37fc8e4\",\n    \"ignore_pfm\": true,\n    \"external_id\": \"5dd0400f-2e0b-4e0c-abbb-9517811d3fb4\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"transaction_date\": \"2024-09-20\",\n    \"transaction_datetime\": \"2024-09-20T00:00:00+0000\",\n    \"amount\": \"545000.00\",\n    \"description\": \"PAGO AGUINALDO 2024\",\n    \"category\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\",\n    \"user_note\": null,\n    \"product_type\": {\n        \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n        \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n        \"item_name\": \"cuenta_vista\",\n        \"description\": \"Cuenta Vista\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"CUENTAVISTA\"\n        }\n    },\n    \"exchange_rate\": null,\n    \"merchant\": null,\n    \"account_id\": \"5c7ddeb7-bb96-4ada-9745-3b97407634a1\",\n    \"transaction_note\": {\n        \"id\": \"6ecbfe95-96bd-4941-9220-1be8dcf50994\",\n        \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"updated_at\": \"2025-06-04T19:55:01+0000\",\n        \"transaction\": \"49178c5c-0d30-4dae-acd0-a6dce37fc8e4\",\n        \"transaction_date\": \"2024-08-05\",\n        \"transaction_note\": \"Nota_iusto-eaque-repellat\"\n    },\n    \"classified\": true,\n    \"attributes\": {},\n    \"tags\": []\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions","{{transaccion_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"a6d1b241-26ae-459c-a822-7dc2044054c4","name":"Successful Response","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"ignore_pfm\": true,\r\n  \"category\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/{{transaccion_id}}/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 21:30:07 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"1090"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"a9ae7cd1-e15e-4529-a79b-a79b83b73340"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LqIi_GcfoAMEaNA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6840badf-6b3e7e205fe8d2665c919a98;Parent=1059a5070d393112;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"49178c5c-0d30-4dae-acd0-a6dce37fc8e4\",\n    \"ignore_pfm\": true,\n    \"external_id\": \"5dd0400f-2e0b-4e0c-abbb-9517811d3fb4\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"transaction_date\": \"2024-09-20\",\n    \"transaction_datetime\": \"2024-09-20T00:00:00+0000\",\n    \"amount\": \"545000.00\",\n    \"description\": \"PAGO AGUINALDO 2024\",\n    \"category\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\",\n    \"user_note\": null,\n    \"product_type\": {\n        \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n        \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n        \"item_name\": \"cuenta_vista\",\n        \"description\": \"Cuenta Vista\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"CUENTAVISTA\"\n        }\n    },\n    \"exchange_rate\": null,\n    \"merchant\": null,\n    \"account_id\": \"5c7ddeb7-bb96-4ada-9745-3b97407634a1\",\n    \"transaction_note\": {\n        \"id\": \"6ecbfe95-96bd-4941-9220-1be8dcf50994\",\n        \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"updated_at\": \"2025-06-04T19:55:01+0000\",\n        \"transaction\": \"49178c5c-0d30-4dae-acd0-a6dce37fc8e4\",\n        \"transaction_date\": \"2024-08-05\",\n        \"transaction_note\": \"Nota_iusto-eaque-repellat\"\n    },\n    \"classified\": true,\n    \"attributes\": {},\n    \"tags\": []\n}"},{"id":"71dad7f7-53dd-4198-8600-94db1bbb79d3","name":"Not Found","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n  \"ignore_pfm\": true\r\n  //\"category\": \"3fa85f64-5717-4562-b3fc-2c963f66afa6\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/14956a01-f5ee-4ea3-be40-9f2fd33a84c7/"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 15:19:16 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"23"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"91cd67e1-8d76-4598-8e18-8647631af3b1"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cMg-FHT2IAMEQmw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b4e1f3-7c44f7c357f1ba7a094c69e8;Parent=545ec6ed9aee1dba;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Not found.\"\n}"}],"_postman_id":"8a57d16c-708f-4772-9126-5b022856b342"}],"id":"79ac07b2-5bc4-4116-a420-0afcfc3f599d","description":"<p>Xerpa ofrece funcionalidades para presentar y personalizar el comportamiento y visualización de las transacciones de ingresos y gastos para un mejor entendimiento del usuario de sus finanzas personales.</p>\n<p>Cada transacción representa un registro de sus productos financieros: cuentas, tarjetas de débito, tarjetas de crédito, tarjetas de prepago o cualquier otro movimiento que impacte en el saldo del producto.</p>\n<p>Las transacciones siempre están asociadas a un producto financiero a través del <code>product_id</code> y a la vez a un usuario a través del <code>user_id</code> .</p>\n<p>Las transacciones presentadas son las registradas en las bases de datos Xerpa a través de los procesos de ingesta de transacciones disponibles en la <code>API Middleware Xerpa</code>. Cada transacción al ser recibida se enriquece y agregan propiedades a través del proceso de <strong>Enriquecimiento de Transacciones</strong>, logrando asociarles una categogía, comercio, logo y otros datos de estar disponibles.</p>\n","_postman_id":"79ac07b2-5bc4-4116-a420-0afcfc3f599d"},{"name":"Listados de transacciones","item":[{"name":"Listado de transacciones por mes","event":[{"listen":"test","script":{"id":"14d24ee4-5d5e-44a5-aabe-4acff47b9d41","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    next: { type: 'string', optional: true },\r","    previous: { type: 'string', optional: true },\r","    total_pages: 'number',\r","    current_page: 'number',\r","    offset: 'number',\r","    count: 'number',\r","    results: 'array'\r","};\r","\r","const resultProperties = {\r","    id: 'string',\r","    ignore_pfm: 'boolean',\r","    external_id: 'string',\r","    user_id: 'string',\r","    transaction_date: 'string',\r","    transaction_datetime: 'string',\r","    amount: 'string',\r","    description: 'string',\r","    category: 'string',\r","    user_note: { type: 'string', optional: true },\r","    product_type: 'object',\r","    exchange_rate: { type: 'string', optional: true },\r","    merchant: { type: 'object', optional: true },\r","    account_id: 'string',\r","    transaction_note: { type: 'string', optional: true },\r","    classified: 'boolean'\r","};\r","\r","const productTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","const merchantProperties = {\r","    id: 'string',\r","    name: 'string',\r","    logo_url: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the results array\r","pm.test(\"Results have expected properties with correct types\", () => {\r","    if (responseJson.results && responseJson.results.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0], resultProperties);\r","        \r","        // Check properties of the product_type object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].product_type, productTypeProperties);\r","        \r","        // Check metadata properties of the product_type object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].product_type.metadata, metadataProperties);\r","        \r","        // Check properties of the merchant object in the first result, if it exists\r","        if (responseJson.results[0].merchant) {\r","            xerpaTestApi.checkObjectProperties(responseJson.results[0].merchant, merchantProperties);\r","        }\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}},"requests":{}}}],"id":"eb101666-77b6-4340-8b19-d960ee4f0330","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/?date_month=2025-09&expand=category","description":"<p>Este endpoint permite obtener la lista de transacciones registradas por un usuario en un <strong>mes específico</strong> según el parámetro <code>date_month</code>, incluyendo información detallada como monto, categoría, fecha, cuenta de origen y metadatos asociados.</p>\n<h3 id=\"widgets\">Widgets</h3>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Listado-de-movimientos-21f7439960f080e99f35d6804e660de4?source=copy_link\">Listado de movimientos</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/945bc3b8-a9d0-4138-b9eb-892427f7adf3/aW1hZ2UucG5n\" width=\"399\" height=\"859\" />\n\n<hr />\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/</code></p>\n</li>\n<li><p><strong>Parámetros de ruta:</strong></p>\n<ul>\n<li><code>user_id</code> (string, requerido): ID del usuario para el cual se desean obtener las transacciones.</li>\n</ul>\n</li>\n<li><p><strong>Parámetros query</strong></p>\n<ul>\n<li><code>date_month</code> (string): Mes y año para filtrar las transacciones (formato: YYYY-MM).</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON que contiene una lista paginada de transacciones del usuario.</p>\n<ul>\n<li><p><code>id</code> (string): ID único de la transacción.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario.</p>\n</li>\n<li><p><code>account_id</code> (string): Cuenta asociada a la transacción.</p>\n</li>\n<li><p><code>amount</code> (number): Monto de la transacción.</p>\n</li>\n<li><p><code>transaction_date</code> (string): Fecha en que ocurrió la transacción.</p>\n</li>\n<li><p><code>description</code> (string): Glosa o concepto de la transacción.</p>\n</li>\n<li><p><code>category</code> (object): Detalles de la categoría asignada a la transacción, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID de la categoría.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo de la categoría.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem de la categoría.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la categoría.</p>\n</li>\n</ul>\n</li>\n<li><p><code>product_type</code> (object): Detalles del tipo de producto asociado a la transacción, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del tipo de producto.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo del tipo de producto.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem del tipo de producto.</p>\n</li>\n</ul>\n</li>\n<li><p><code>exchange_rate</code> (number|null): Tasa de cambio aplicada a la transacción (si aplica).</p>\n</li>\n<li><p><code>merchant</code> (string|null): Información sobre el comerciante (si aplica).</p>\n</li>\n<li><p><code>transaction_note</code> (string|null): Nota adicional sobre la transacción (si aplica).</p>\n</li>\n<li><p><code>classified</code> (boolean): Indica si la transacción ha sido clasificada.</p>\n</li>\n<li><p><code>attributes</code> (object): Atributos adicionales de la transacción.</p>\n</li>\n<li><p><code>tags</code> (array): Lista de etiquetas asociadas a la transacción.</p>\n</li>\n</ul>\n<p>La respuesta también incluye información de paginación, como:</p>\n<ul>\n<li><p><code>next</code>(string or null): URL de la siguiente página</p>\n</li>\n<li><p><code>previous</code>(string or null): URL de la página anterior</p>\n</li>\n<li><p><code>total_pages</code>(number): Total de páginas disponibles</p>\n</li>\n<li><p><code>current_page</code>(number): Página actual</p>\n</li>\n<li><p><code>offset</code>(number): Índice de desplazamiento</p>\n</li>\n<li><p><code>count</code>(number): Total de elementos</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"next\": {\n      \"type\": [\"string\", \"null\"],\n      \"format\": \"uri\"\n    },\n    \"previous\": {\n      \"type\": [\"string\", \"null\"],\n      \"format\": \"uri\"\n    },\n    \"total_pages\": {\n      \"type\": \"integer\",\n      \"minimum\": 1\n    },\n    \"current_page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1\n    },\n    \"offset\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"results\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"ignore_pfm\": { \"type\": \"boolean\" },\n          \"external_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"transaction_date\": { \"type\": \"string\", \"format\": \"date\" },\n          \"transaction_datetime\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"amount\": {\"type\": \"string\"},\n          \"description\": { \"type\": \"string\" },\n          \"category\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"bg\": { \"type\": \"string\", \"format\": \"uri\" },\n                  \"icon\": { \"type\": \"string\", \"format\": \"uri\" },\n                  \"name\": { \"type\": \"string\" },\n                  \"color\": {\n                    \"type\": \"string\"\n                  },\n                  \"active\": { \"type\": \"boolean\" },\n                  \"short_name\": { \"type\": \"string\" },\n                  \"color_class\": { \"type\": \"string\" },\n                  \"description\": { \"type\": \"string\" },\n                  \"icon_ignore\": { \"type\": \"string\", \"format\": \"uri\" },\n                  \"icon_primary\": { \"type\": \"string\", \"format\": \"uri\" }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions",""],"host":["{{host_app}}"],"query":[{"disabled":true,"key":"category","value":"uncategorized"},{"disabled":true,"key":"category","value":"3954361d-ddf5-46dc-a8f8-af98ee9811da"},{"disabled":true,"key":"paginate","value":"true"},{"disabled":true,"key":"page","value":"1"},{"disabled":true,"key":"page_size","value":"1"},{"disabled":true,"key":"expand","value":"category,exchange_rate"},{"disabled":true,"description":{"content":"<p>expenses, incomes</p>\n","type":"text/plain"},"key":"movement_type","value":"incomes"},{"disabled":true,"key":"date_month","value":"2025-05"},{"key":"date_month","value":"2025-09"},{"key":"expand","value":"category"}],"variable":[]}},"response":[{"id":"9d11aa14-f23f-4dab-ad36-8443bd92f168","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/?date_month=2025-05","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions",""],"query":[{"key":"category","value":"uncategorized","disabled":true},{"key":"category","value":"3954361d-ddf5-46dc-a8f8-af98ee9811da","disabled":true},{"key":"paginate","value":"true","disabled":true},{"key":"page","value":"1","type":"text","disabled":true},{"key":"page_size","value":"1","type":"text","disabled":true},{"key":"expand","value":"category,exchange_rate","type":"text","disabled":true},{"key":"movement_type","value":"incomes","description":"expenses, incomes","type":"text","disabled":true},{"key":"date_month","value":"2025-05"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"next\": null,\n    \"previous\": null,\n    \"total_pages\": 1,\n    \"current_page\": 1,\n    \"offset\": 0,\n    \"results\": [\n        {\n            \"id\": \"2556a72e-f1bf-4fd8-8c42-04d2ce115c02\",\n            \"ignore_pfm\": false,\n            \"external_id\": \"abc-1\",\n            \"user_id\": \"9790de51-6732-4a07-b934-c58ab73f7bb5\",\n            \"transaction_date\": \"2025-05-08\",\n            \"transaction_datetime\": \"2025-05-08T00:00:00+0000\",\n            \"amount\": \"-55.00\",\n            \"description\": \"NETFLIX\",\n            \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n            \"user_note\": null,\n            \"product_type\": {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            },\n            \"exchange_rate\": null,\n            \"merchant\": null,\n            \"account_id\": \"31adddf5-1d3a-4af8-a218-db5f8f6f2f41\",\n            \"transaction_note\": null,\n            \"classified\": false\n        },\n        {\n            \"id\": \"27520c0f-7bc5-4f0e-a029-9dee1b27bb17\",\n            \"ignore_pfm\": false,\n            \"external_id\": \"abc-2\",\n            \"user_id\": \"9790de51-6732-4a07-b934-c58ab73f7bb5\",\n            \"transaction_date\": \"2025-05-08\",\n            \"transaction_datetime\": \"2025-05-08T00:00:00+0000\",\n            \"amount\": \"-333.00\",\n            \"description\": \"GOOGLE *Play Pass\",\n            \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n            \"user_note\": null,\n            \"product_type\": {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            },\n            \"exchange_rate\": null,\n            \"merchant\": null,\n            \"account_id\": \"31adddf5-1d3a-4af8-a218-db5f8f6f2f41\",\n            \"transaction_note\": null,\n            \"classified\": false\n        },\n        {\n            \"id\": \"62b006cd-17a3-49eb-a0c3-7d511727fef6\",\n            \"ignore_pfm\": false,\n            \"external_id\": \"abc-3\",\n            \"user_id\": \"9790de51-6732-4a07-b934-c58ab73f7bb5\",\n            \"transaction_date\": \"2025-05-08\",\n            \"transaction_datetime\": \"2025-05-08T00:00:00+0000\",\n            \"amount\": \"-4500.00\",\n            \"description\": \"PAPA JOHNS CCOLORA\",\n            \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n            \"user_note\": null,\n            \"product_type\": {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            },\n            \"exchange_rate\": null,\n            \"merchant\": null,\n            \"account_id\": \"31adddf5-1d3a-4af8-a218-db5f8f6f2f41\",\n            \"transaction_note\": null,\n            \"classified\": false\n        }\n    ],\n    \"count\": 3\n}"},{"id":"c9625f53-5c52-46e8-bbdc-f5d4652ccd06","name":"Bad Request - Invalid date","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/?date_month=2024-09-invalid","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions",""],"query":[{"key":"date_month","value":"2024-09-invalid"},{"key":"category","value":"uncategorized","type":"text","disabled":true},{"key":"category","value":"3954361d-ddf5-46dc-a8f8-af98ee9811da","type":"text","disabled":true},{"key":"paginate","value":"true","disabled":true},{"key":"page","value":"1","type":"text","disabled":true},{"key":"page_size","value":"1","type":"text","disabled":true},{"key":"expand","value":"category,exchange_rate","type":"text","disabled":true},{"key":"movement_type","value":"incomes","description":"expenses, incomes","type":"text","disabled":true}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 21:10:37 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"24"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"a892f80d-b9f7-45b6-8ba4-27090e43fe93"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LqFsEFIvIAMEg0Q="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6840b64c-03d5bb5e0fcdcb9a6e91498a;Parent=5bec2b58393c807c;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    \"Invalid date format.\"\n]"}],"_postman_id":"eb101666-77b6-4340-8b19-d960ee4f0330"},{"name":"Listado de transacciones por producto","event":[{"listen":"test","script":{"id":"14d24ee4-5d5e-44a5-aabe-4acff47b9d41","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    next: { type: 'string', optional: true },\r","    previous: { type: 'string', optional: true },\r","    total_pages: 'number',\r","    current_page: 'number',\r","    offset: 'number',\r","    count: 'number',\r","    results: 'array'\r","};\r","\r","const resultProperties = {\r","    id: 'string',\r","    ignore_pfm: 'boolean',\r","    external_id: 'string',\r","    user_id: 'string',\r","    transaction_date: 'string',\r","    transaction_datetime: 'string',\r","    amount: 'string',\r","    description: 'string',\r","    category: 'string',\r","    user_note: { type: 'string', optional: true },\r","    product_type: 'object',\r","    exchange_rate: { type: 'string', optional: true },\r","    merchant: { type: 'object', optional: true },\r","    account_id: 'string',\r","    transaction_note: { type: 'string', optional: true },\r","    classified: 'boolean'\r","};\r","\r","const productTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","const merchantProperties = {\r","    id: 'string',\r","    name: 'string',\r","    logo_url: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the results array\r","pm.test(\"Results have expected properties with correct types\", () => {\r","    if (responseJson.results && responseJson.results.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0], resultProperties);\r","        \r","        // Check properties of the product_type object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].product_type, productTypeProperties);\r","        \r","        // Check metadata properties of the product_type object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].product_type.metadata, metadataProperties);\r","        \r","        // Check properties of the merchant object in the first result, if it exists\r","        if (responseJson.results[0].merchant) {\r","            xerpaTestApi.checkObjectProperties(responseJson.results[0].merchant, merchantProperties);\r","        }\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}},"requests":{}}}],"id":"7d06aca2-b32b-4d1a-bd8e-63f6c83857b0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/?date_month=2024-09&account_id=5c7ddeb7-bb96-4ada-9745-3b97407634a2","description":"<p>Este endpoint permite obtener la lista de transacciones registradas por un usuario en un <strong>producto y mes específico</strong> a través del parámetro <code>account_id y date_month</code> respectivamente, incluyendo información detallada como monto, categoría, fecha, cuenta de origen y metadatos asociados.</p>\n<h3 id=\"widgets\">Widgets</h3>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Listado-de-movimientos-21f7439960f080e99f35d6804e660de4?source=copy_link#21f7439960f0805e9938ccf8a3f3bdec\">Listado movimientos - por producto</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/d95162da-275b-4192-95d6-3a1ff5028536/aW1hZ2UucG5n\" width=\"397\" height=\"467\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/</code></p>\n</li>\n<li><p><strong>Parámetros de ruta:</strong></p>\n<ul>\n<li><code>user_id</code> (string, requerido): ID del usuario para el cual se desean obtener las transacciones.</li>\n</ul>\n</li>\n<li><p><strong>Parámetros query:</strong></p>\n<ul>\n<li><p><code>date_month</code> (string): Mes y año para filtrar las transacciones (formato: YYYY-MM).</p>\n</li>\n<li><p>account_id (string, opcional): ID de la cuenta para filtrar las transacciones.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON que contiene una lista paginada de transacciones del usuario.</p>\n<ul>\n<li><p><code>id</code> (string): ID único de la transacción.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario.</p>\n</li>\n<li><p><code>account_id</code> (string): Cuenta asociada a la transacción.</p>\n</li>\n<li><p><code>amount</code> (number): Monto de la transacción.</p>\n</li>\n<li><p><code>transaction_date</code> (string): Fecha en que ocurrió la transacción.</p>\n</li>\n<li><p><code>description</code> (string): Glosa o concepto de la transacción.</p>\n</li>\n<li><p><code>category</code> (object): Detalles de la categoría asignada a la transacción, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID de la categoría.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo de la categoría.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem de la categoría.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la categoría.</p>\n</li>\n</ul>\n</li>\n<li><p><code>product_type</code> (object): Detalles del tipo de producto asociado a la transacción, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del tipo de producto.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo del tipo de producto.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem del tipo de producto.</p>\n</li>\n</ul>\n</li>\n<li><p><code>exchange_rate</code> (number|null): Tasa de cambio aplicada a la transacción (si aplica).</p>\n</li>\n<li><p><code>merchant</code> (string|null): Información sobre el comerciante (si aplica).</p>\n</li>\n<li><p><code>transaction_note</code> (string|null): Nota adicional sobre la transacción (si aplica).</p>\n</li>\n<li><p><code>classified</code> (boolean): Indica si la transacción ha sido clasificada.</p>\n</li>\n<li><p><code>attributes</code> (object): Atributos adicionales de la transacción.</p>\n</li>\n<li><p><code>tags</code> (array): Lista de etiquetas asociadas a la transacción.</p>\n</li>\n</ul>\n<p>La respuesta también incluye información de paginación, como:</p>\n<ul>\n<li><p><code>next</code>(string or null): URL de la siguiente página</p>\n</li>\n<li><p><code>previous</code>(string or null): URL de la página anterior</p>\n</li>\n<li><p><code>total_pages</code>(number): Total de páginas disponibles</p>\n</li>\n<li><p><code>current_page</code>(number): Página actual</p>\n</li>\n<li><p><code>offset</code>(number): Índice de desplazamiento</p>\n</li>\n<li><p><code>count</code>(number): Total de elementos</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"next\": {\n      \"type\": [\"string\", \"null\"],\n      \"format\": \"uri\"\n    },\n    \"previous\": {\n      \"type\": [\"string\", \"null\"],\n      \"format\": \"uri\"\n    },\n    \"total_pages\": {\n      \"type\": \"integer\",\n      \"minimum\": 1\n    },\n    \"current_page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1\n    },\n    \"offset\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"results\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"ignore_pfm\": { \"type\": \"boolean\" },\n          \"external_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"transaction_date\": { \"type\": \"string\", \"format\": \"date\" },\n          \"transaction_datetime\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"amount\": {\"type\": \"string\"},\n          \"description\": { \"type\": \"string\" },\n          \"category\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"bg\": { \"type\": \"string\", \"format\": \"uri\" },\n                  \"icon\": { \"type\": \"string\", \"format\": \"uri\" },\n                  \"name\": { \"type\": \"string\" },\n                  \"color\": {\n                    \"type\": \"string\"\n                  },\n                  \"active\": { \"type\": \"boolean\" },\n                  \"short_name\": { \"type\": \"string\" },\n                  \"color_class\": { \"type\": \"string\" },\n                  \"description\": { \"type\": \"string\" },\n                  \"icon_ignore\": { \"type\": \"string\", \"format\": \"uri\" },\n                  \"icon_primary\": { \"type\": \"string\", \"format\": \"uri\" }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions",""],"host":["{{host_app}}"],"query":[{"disabled":true,"key":"category","value":"uncategorized"},{"disabled":true,"key":"category","value":"3954361d-ddf5-46dc-a8f8-af98ee9811da"},{"disabled":true,"key":"paginate","value":"true"},{"disabled":true,"key":"page","value":"1"},{"disabled":true,"key":"page_size","value":"100000"},{"disabled":true,"key":"expand","value":"category,exchange_rate"},{"disabled":true,"description":{"content":"<p>expenses, incomes</p>\n","type":"text/plain"},"key":"movement_type","value":"incomes"},{"key":"date_month","value":"2024-09"},{"key":"account_id","value":"5c7ddeb7-bb96-4ada-9745-3b97407634a2"},{"disabled":true,"key":"external_account_id","value":null}],"variable":[]}},"response":[{"id":"1b6ecabc-46b9-4527-838f-5eef2d2eb366","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/?date_month=2025-05&account_id=31adddf5-1d3a-4af8-a218-db5f8f6f2f41","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions",""],"query":[{"key":"category","value":"uncategorized","disabled":true},{"key":"category","value":"3954361d-ddf5-46dc-a8f8-af98ee9811da","disabled":true},{"key":"paginate","value":"true","disabled":true},{"key":"page","value":"1","type":"text","disabled":true},{"key":"page_size","value":"1","type":"text","disabled":true},{"key":"expand","value":"category,exchange_rate","type":"text","disabled":true},{"key":"movement_type","value":"incomes","description":"expenses, incomes","type":"text","disabled":true},{"key":"date_month","value":"2025-05"},{"key":"account_id","value":"31adddf5-1d3a-4af8-a218-db5f8f6f2f41"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"next\": null,\n    \"previous\": null,\n    \"total_pages\": 1,\n    \"current_page\": 1,\n    \"offset\": 0,\n    \"results\": [\n        {\n            \"id\": \"2556a72e-f1bf-4fd8-8c42-04d2ce115c02\",\n            \"ignore_pfm\": false,\n            \"external_id\": \"abc-1\",\n            \"user_id\": \"9790de51-6732-4a07-b934-c58ab73f7bb5\",\n            \"transaction_date\": \"2025-05-08\",\n            \"transaction_datetime\": \"2025-05-08T00:00:00+0000\",\n            \"amount\": \"-55.00\",\n            \"description\": \"NETFLIX\",\n            \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n            \"user_note\": null,\n            \"product_type\": {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            },\n            \"exchange_rate\": null,\n            \"merchant\": null,\n            \"account_id\": \"31adddf5-1d3a-4af8-a218-db5f8f6f2f41\",\n            \"transaction_note\": null,\n            \"classified\": false\n        },\n        {\n            \"id\": \"27520c0f-7bc5-4f0e-a029-9dee1b27bb17\",\n            \"ignore_pfm\": false,\n            \"external_id\": \"abc-2\",\n            \"user_id\": \"9790de51-6732-4a07-b934-c58ab73f7bb5\",\n            \"transaction_date\": \"2025-05-08\",\n            \"transaction_datetime\": \"2025-05-08T00:00:00+0000\",\n            \"amount\": \"-333.00\",\n            \"description\": \"GOOGLE *Play Pass\",\n            \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n            \"user_note\": null,\n            \"product_type\": {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            },\n            \"exchange_rate\": null,\n            \"merchant\": null,\n            \"account_id\": \"31adddf5-1d3a-4af8-a218-db5f8f6f2f41\",\n            \"transaction_note\": null,\n            \"classified\": false\n        },\n        {\n            \"id\": \"62b006cd-17a3-49eb-a0c3-7d511727fef6\",\n            \"ignore_pfm\": false,\n            \"external_id\": \"abc-3\",\n            \"user_id\": \"9790de51-6732-4a07-b934-c58ab73f7bb5\",\n            \"transaction_date\": \"2025-05-08\",\n            \"transaction_datetime\": \"2025-05-08T00:00:00+0000\",\n            \"amount\": \"-4500.00\",\n            \"description\": \"PAPA JOHNS CCOLORA\",\n            \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n            \"user_note\": null,\n            \"product_type\": {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            },\n            \"exchange_rate\": null,\n            \"merchant\": null,\n            \"account_id\": \"31adddf5-1d3a-4af8-a218-db5f8f6f2f41\",\n            \"transaction_note\": null,\n            \"classified\": false\n        }\n    ],\n    \"count\": 3\n}"},{"id":"a6b16f29-5f83-4358-87d0-be6255e49f9f","name":"Bad Request - Invalid date","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/?date_month=2024-09-invalid","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions",""],"query":[{"key":"date_month","value":"2024-09-invalid"},{"key":"category","value":"uncategorized","type":"text","disabled":true},{"key":"category","value":"3954361d-ddf5-46dc-a8f8-af98ee9811da","type":"text","disabled":true},{"key":"paginate","value":"true","disabled":true},{"key":"page","value":"1","type":"text","disabled":true},{"key":"page_size","value":"1","type":"text","disabled":true},{"key":"expand","value":"category,exchange_rate","type":"text","disabled":true},{"key":"movement_type","value":"incomes","description":"expenses, incomes","type":"text","disabled":true}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 21:10:37 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"24"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"a892f80d-b9f7-45b6-8ba4-27090e43fe93"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LqFsEFIvIAMEg0Q="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6840b64c-03d5bb5e0fcdcb9a6e91498a;Parent=5bec2b58393c807c;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    \"Invalid date format.\"\n]"}],"_postman_id":"7d06aca2-b32b-4d1a-bd8e-63f6c83857b0"},{"name":"Listado de transacciones por categoría","event":[{"listen":"test","script":{"id":"14d24ee4-5d5e-44a5-aabe-4acff47b9d41","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    next: { type: 'string', optional: true },\r","    previous: { type: 'string', optional: true },\r","    total_pages: 'number',\r","    current_page: 'number',\r","    offset: 'number',\r","    count: 'number',\r","    results: 'array'\r","};\r","\r","const resultProperties = {\r","    id: 'string',\r","    ignore_pfm: 'boolean',\r","    external_id: 'string',\r","    user_id: 'string',\r","    transaction_date: 'string',\r","    transaction_datetime: 'string',\r","    amount: 'string',\r","    description: 'string',\r","    category: 'string',\r","    user_note: { type: 'string', optional: true },\r","    product_type: 'object',\r","    exchange_rate: { type: 'string', optional: true },\r","    merchant: { type: 'object', optional: true },\r","    account_id: 'string',\r","    transaction_note: { type: 'string', optional: true },\r","    classified: 'boolean'\r","};\r","\r","const productTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","const merchantProperties = {\r","    id: 'string',\r","    name: 'string',\r","    logo_url: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the results array\r","pm.test(\"Results have expected properties with correct types\", () => {\r","    if (responseJson.results && responseJson.results.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0], resultProperties);\r","        \r","        // Check properties of the product_type object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].product_type, productTypeProperties);\r","        \r","        // Check metadata properties of the product_type object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].product_type.metadata, metadataProperties);\r","        \r","        // Check properties of the merchant object in the first result, if it exists\r","        if (responseJson.results[0].merchant) {\r","            xerpaTestApi.checkObjectProperties(responseJson.results[0].merchant, merchantProperties);\r","        }\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"af2f59af-c443-4e81-9187-314cf0881d7f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/?category_id=f37b6770-7fc5-43e0-a837-50926e1ee459&date_month=2025-05","description":"<p>Este endpoint permite obtener la <strong>lista de transacciones registradas por un usuario en un mes y categoría específico</strong>, incluyendo información detallada como monto, categoría, fecha, cuenta de origen y metadatos asociados.</p>\n<p>La categoría puede ser de ingresos o gastos</p>\n<h3 id=\"widgets\">Widgets</h3>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Detalle-categor-a-21e7439960f08079a807f3268b235170?source=copy_link\">Detalle categoría</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/d621618d-8fc5-48c5-95c3-6492bb809ed2/aW1hZ2UucG5n\" width=\"343\" height=\"1049\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/</code></p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>user_id</code> (string, requerido): ID del usuario para el cual se desean obtener las transacciones.</li>\n</ul>\n</li>\n<li><p>Parámetros query</p>\n<ul>\n<li><p><code>date_month</code> (string): Mes y año para filtrar las transacciones (formato: YYYY-MM).</p>\n</li>\n<li><p><code>category</code> (string, opcional): ID de la categoría para filtrar las transacciones. Tambien puede tomar el valor \"uncategorized\" para obtener las transacciones sin categoria asignada.</p>\n</li>\n<li><p><code>paginate</code> (boolean, opcional): Indica si se debe aplicar paginación a los resultados (valor por defecto: true).</p>\n</li>\n<li><p><code>page</code> (integer, opcional): Número de la página de resultados a retornar (valor por defecto: 1).</p>\n</li>\n<li><p><code>page_size</code> (integer, opcional): Número máximo de transacciones a retornar por página (valor por defecto: 10).</p>\n</li>\n<li><p><code>expand</code> (string, opcional): Campos adicionales a incluir en la respuesta, separados por comas (ej. <code>category,exchange_rate</code>).</p>\n</li>\n<li><p><code>movement_type</code> (string, opcional): Tipo de movimiento a filtrar (<code>incomes</code>, <code>expenses</code>).</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON que contiene una lista paginada de transacciones del usuario.</p>\n<ul>\n<li><p><code>id</code> (string): ID único de la transacción.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario.</p>\n</li>\n<li><p><code>account_id</code> (string): Cuenta asociada a la transacción.</p>\n</li>\n<li><p><code>amount</code> (number): Monto de la transacción.</p>\n</li>\n<li><p><code>transaction_date</code> (string): Fecha en que ocurrió la transacción.</p>\n</li>\n<li><p><code>description</code> (string): Glosa o concepto de la transacción.</p>\n</li>\n<li><p><code>category</code> (object): Detalles de la categoría asignada a la transacción, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID de la categoría.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo de la categoría.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem de la categoría.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la categoría.</p>\n</li>\n</ul>\n</li>\n<li><p><code>product_type</code> (object): Detalles del tipo de producto asociado a la transacción, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del tipo de producto.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo del tipo de producto.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem del tipo de producto.</p>\n</li>\n</ul>\n</li>\n<li><p><code>exchange_rate</code> (number|null): Tasa de cambio aplicada a la transacción (si aplica).</p>\n</li>\n<li><p><code>merchant</code> (string|null): Información sobre el comerciante (si aplica).</p>\n</li>\n<li><p><code>transaction_note</code> (string|null): Nota adicional sobre la transacción (si aplica).</p>\n</li>\n<li><p><code>classified</code> (boolean): Indica si la transacción ha sido clasificada.</p>\n</li>\n<li><p><code>attributes</code> (object): Atributos adicionales de la transacción.</p>\n</li>\n<li><p><code>tags</code> (array): Lista de etiquetas asociadas a la transacción.</p>\n</li>\n</ul>\n<p>La respuesta también incluye información de paginación, como:</p>\n<ul>\n<li><p><code>next</code>(string or null): URL de la siguiente página</p>\n</li>\n<li><p><code>previous</code>(string or null): URL de la página anterior</p>\n</li>\n<li><p><code>total_pages</code>(number): Total de páginas disponibles</p>\n</li>\n<li><p><code>current_page</code>(number): Página actual</p>\n</li>\n<li><p><code>offset</code>(number): Índice de desplazamiento</p>\n</li>\n<li><p><code>count</code>(number): Total de elementos</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"next\": {\n      \"type\": [\"string\", \"null\"],\n      \"format\": \"uri\"\n    },\n    \"previous\": {\n      \"type\": [\"string\", \"null\"],\n      \"format\": \"uri\"\n    },\n    \"total_pages\": {\n      \"type\": \"integer\",\n      \"minimum\": 1\n    },\n    \"current_page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1\n    },\n    \"offset\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"results\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"ignore_pfm\": { \"type\": \"boolean\" },\n          \"external_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"transaction_date\": { \"type\": \"string\", \"format\": \"date\" },\n          \"transaction_datetime\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"amount\": {\"type\": \"string\"},\n          \"description\": { \"type\": \"string\" },\n          \"category\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"bg\": { \"type\": \"string\", \"format\": \"uri\" },\n                  \"icon\": { \"type\": \"string\", \"format\": \"uri\" },\n                  \"name\": { \"type\": \"string\" },\n                  \"color\": {\n                    \"type\": \"string\"\n                  },\n                  \"active\": { \"type\": \"boolean\" },\n                  \"short_name\": { \"type\": \"string\" },\n                  \"color_class\": { \"type\": \"string\" },\n                  \"description\": { \"type\": \"string\" },\n                  \"icon_ignore\": { \"type\": \"string\", \"format\": \"uri\" },\n                  \"icon_primary\": { \"type\": \"string\", \"format\": \"uri\" }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions",""],"host":["{{host_app}}"],"query":[{"disabled":true,"key":"category","value":"uncategorized"},{"disabled":true,"key":"paginate","value":"true"},{"disabled":true,"key":"page","value":"1"},{"disabled":true,"key":"page_size","value":"1"},{"disabled":true,"description":{"content":"<p>expenses, incomes</p>\n","type":"text/plain"},"key":"movement_type","value":"incomes"},{"disabled":true,"key":"expand","value":"category"},{"key":"category_id","value":"f37b6770-7fc5-43e0-a837-50926e1ee459"},{"key":"date_month","value":"2025-05"}],"variable":[]}},"response":[{"id":"2f089b1a-c4b1-4354-b20b-a23fdb036a5d","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/?category_id=f37b6770-7fc5-43e0-a837-50926e1ee459&date_month=2025-05","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions",""],"query":[{"key":"category","value":"uncategorized","disabled":true},{"key":"paginate","value":"true","disabled":true},{"key":"page","value":"1","type":"text","disabled":true},{"key":"page_size","value":"1","type":"text","disabled":true},{"key":"movement_type","value":"incomes","description":"expenses, incomes","type":"text","disabled":true},{"key":"expand","value":"category","disabled":true},{"key":"category_id","value":"f37b6770-7fc5-43e0-a837-50926e1ee459"},{"key":"date_month","value":"2025-05"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"next\": null,\n    \"previous\": null,\n    \"total_pages\": 1,\n    \"current_page\": 1,\n    \"offset\": 0,\n    \"results\": [\n        {\n            \"id\": \"2556a72e-f1bf-4fd8-8c42-04d2ce115c02\",\n            \"ignore_pfm\": false,\n            \"external_id\": \"abc-1\",\n            \"user_id\": \"9790de51-6732-4a07-b934-c58ab73f7bb5\",\n            \"transaction_date\": \"2025-05-08\",\n            \"transaction_datetime\": \"2025-05-08T00:00:00+0000\",\n            \"amount\": \"-55.00\",\n            \"description\": \"NETFLIX\",\n            \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n            \"user_note\": null,\n            \"product_type\": {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            },\n            \"exchange_rate\": null,\n            \"merchant\": null,\n            \"account_id\": \"31adddf5-1d3a-4af8-a218-db5f8f6f2f41\",\n            \"transaction_note\": null,\n            \"classified\": false\n        },\n        {\n            \"id\": \"27520c0f-7bc5-4f0e-a029-9dee1b27bb17\",\n            \"ignore_pfm\": false,\n            \"external_id\": \"abc-2\",\n            \"user_id\": \"9790de51-6732-4a07-b934-c58ab73f7bb5\",\n            \"transaction_date\": \"2025-05-08\",\n            \"transaction_datetime\": \"2025-05-08T00:00:00+0000\",\n            \"amount\": \"-333.00\",\n            \"description\": \"GOOGLE *Play Pass\",\n            \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n            \"user_note\": null,\n            \"product_type\": {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            },\n            \"exchange_rate\": null,\n            \"merchant\": null,\n            \"account_id\": \"31adddf5-1d3a-4af8-a218-db5f8f6f2f41\",\n            \"transaction_note\": null,\n            \"classified\": false\n        },\n        {\n            \"id\": \"62b006cd-17a3-49eb-a0c3-7d511727fef6\",\n            \"ignore_pfm\": false,\n            \"external_id\": \"abc-3\",\n            \"user_id\": \"9790de51-6732-4a07-b934-c58ab73f7bb5\",\n            \"transaction_date\": \"2025-05-08\",\n            \"transaction_datetime\": \"2025-05-08T00:00:00+0000\",\n            \"amount\": \"-4500.00\",\n            \"description\": \"PAPA JOHNS CCOLORA\",\n            \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n            \"user_note\": null,\n            \"product_type\": {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            },\n            \"exchange_rate\": null,\n            \"merchant\": null,\n            \"account_id\": \"31adddf5-1d3a-4af8-a218-db5f8f6f2f41\",\n            \"transaction_note\": null,\n            \"classified\": false\n        }\n    ],\n    \"count\": 3\n}"},{"id":"acbf865c-b679-4ed5-8801-9d9bf4bc2803","name":"Bad Request - Invalid date","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/?date_month=2024-09-invalid","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions",""],"query":[{"key":"date_month","value":"2024-09-invalid"},{"key":"category","value":"uncategorized","type":"text","disabled":true},{"key":"category","value":"3954361d-ddf5-46dc-a8f8-af98ee9811da","type":"text","disabled":true},{"key":"paginate","value":"true","disabled":true},{"key":"page","value":"1","type":"text","disabled":true},{"key":"page_size","value":"1","type":"text","disabled":true},{"key":"expand","value":"category,exchange_rate","type":"text","disabled":true},{"key":"movement_type","value":"incomes","description":"expenses, incomes","type":"text","disabled":true}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 21:10:37 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"24"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"a892f80d-b9f7-45b6-8ba4-27090e43fe93"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LqFsEFIvIAMEg0Q="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6840b64c-03d5bb5e0fcdcb9a6e91498a;Parent=5bec2b58393c807c;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    \"Invalid date format.\"\n]"}],"_postman_id":"af2f59af-c443-4e81-9187-314cf0881d7f"},{"name":"Listado de transacciones sin categoría","event":[{"listen":"test","script":{"id":"14d24ee4-5d5e-44a5-aabe-4acff47b9d41","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    next: { type: 'string', optional: true },\r","    previous: { type: 'string', optional: true },\r","    total_pages: 'number',\r","    current_page: 'number',\r","    offset: 'number',\r","    count: 'number',\r","    results: 'array'\r","};\r","\r","const resultProperties = {\r","    id: 'string',\r","    ignore_pfm: 'boolean',\r","    external_id: 'string',\r","    user_id: 'string',\r","    transaction_date: 'string',\r","    transaction_datetime: 'string',\r","    amount: 'string',\r","    description: 'string',\r","    category: 'string',\r","    user_note: { type: 'string', optional: true },\r","    product_type: 'object',\r","    exchange_rate: { type: 'string', optional: true },\r","    merchant: { type: 'object', optional: true },\r","    account_id: 'string',\r","    transaction_note: { type: 'string', optional: true },\r","    classified: 'boolean'\r","};\r","\r","const productTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","const merchantProperties = {\r","    id: 'string',\r","    name: 'string',\r","    logo_url: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the results array\r","pm.test(\"Results have expected properties with correct types\", () => {\r","    if (responseJson.results && responseJson.results.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0], resultProperties);\r","        \r","        // Check properties of the product_type object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].product_type, productTypeProperties);\r","        \r","        // Check metadata properties of the product_type object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].product_type.metadata, metadataProperties);\r","        \r","        // Check properties of the merchant object in the first result, if it exists\r","        if (responseJson.results[0].merchant) {\r","            xerpaTestApi.checkObjectProperties(responseJson.results[0].merchant, merchantProperties);\r","        }\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"3b1e4830-4249-4640-b8a1-de17910424d0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/?category=uncategorized&date_month=2025-05","description":"<p>Este endpoint permite obtener la <strong>lista de transacciones registradas por un usuario</strong>, incluyendo información detallada como monto, categoría, fecha, cuenta de origen y metadatos asociados.</p>\n<h4 id=\"widgets\">Widgets</h4>\n<ol>\n<li>Transacciones sin categoría</li>\n</ol>\n<img src=\"https://content.pstmn.io/ac16cbf5-5e5b-40a9-af3e-9258a0b862c4/aW1hZ2UucG5n\" alt height=\"437\" width=\"367\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/</code></p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>user_id</code> (string, requerido): ID del usuario para el cual se desean obtener las transacciones.</li>\n</ul>\n</li>\n<li><p>Parámetros query</p>\n<ul>\n<li><p><code>date_month</code> (string): Mes y año para filtrar las transacciones (formato: YYYY-MM).</p>\n</li>\n<li><p><code>category</code> (string, opcional): ID de la categoría para filtrar las transacciones. Tambien puede tomar el valor \"uncategorized\" para obtener las transacciones sin categoria asignada.</p>\n</li>\n<li><p><code>paginate</code> (boolean, opcional): Indica si se debe aplicar paginación a los resultados (valor por defecto: true).</p>\n</li>\n<li><p><code>page</code> (integer, opcional): Número de la página de resultados a retornar (valor por defecto: 1).</p>\n</li>\n<li><p><code>page_size</code> (integer, opcional): Número máximo de transacciones a retornar por página (valor por defecto: 10).</p>\n</li>\n<li><p><code>expand</code> (string, opcional): Campos adicionales a incluir en la respuesta, separados por comas (ej. <code>category,exchange_rate</code>).</p>\n</li>\n<li><p><code>movement_type</code> (string, opcional): Tipo de movimiento a filtrar (<code>incomes</code>, <code>expenses</code>).</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON que contiene una lista paginada de transacciones del usuario.</p>\n<ul>\n<li><p><code>id</code> (string): ID único de la transacción.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario.</p>\n</li>\n<li><p><code>account_id</code> (string): Cuenta asociada a la transacción.</p>\n</li>\n<li><p><code>amount</code> (number): Monto de la transacción.</p>\n</li>\n<li><p><code>transaction_date</code> (string): Fecha en que ocurrió la transacción.</p>\n</li>\n<li><p><code>description</code> (string): Glosa o concepto de la transacción.</p>\n</li>\n<li><p><code>category</code> (object): Detalles de la categoría asignada a la transacción, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID de la categoría.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo de la categoría.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem de la categoría.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la categoría.</p>\n</li>\n</ul>\n</li>\n<li><p><code>product_type</code> (object): Detalles del tipo de producto asociado a la transacción, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del tipo de producto.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo del tipo de producto.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem del tipo de producto.</p>\n</li>\n</ul>\n</li>\n<li><p><code>exchange_rate</code> (number|null): Tasa de cambio aplicada a la transacción (si aplica).</p>\n</li>\n<li><p><code>merchant</code> (string|null): Información sobre el comerciante (si aplica).</p>\n</li>\n<li><p><code>transaction_note</code> (string|null): Nota adicional sobre la transacción (si aplica).</p>\n</li>\n<li><p><code>classified</code> (boolean): Indica si la transacción ha sido clasificada.</p>\n</li>\n<li><p><code>attributes</code> (object): Atributos adicionales de la transacción.</p>\n</li>\n<li><p><code>tags</code> (array): Lista de etiquetas asociadas a la transacción.</p>\n</li>\n</ul>\n<p>La respuesta también incluye información de paginación, como:</p>\n<ul>\n<li><p><code>next</code>(string or null): URL de la siguiente página</p>\n</li>\n<li><p><code>previous</code>(string or null): URL de la página anterior</p>\n</li>\n<li><p><code>total_pages</code>(number): Total de páginas disponibles</p>\n</li>\n<li><p><code>current_page</code>(number): Página actual</p>\n</li>\n<li><p><code>offset</code>(number): Índice de desplazamiento</p>\n</li>\n<li><p><code>count</code>(number): Total de elementos</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"next\": {\n      \"type\": [\"string\", \"null\"],\n      \"format\": \"uri\"\n    },\n    \"previous\": {\n      \"type\": [\"string\", \"null\"],\n      \"format\": \"uri\"\n    },\n    \"total_pages\": {\n      \"type\": \"integer\",\n      \"minimum\": 1\n    },\n    \"current_page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1\n    },\n    \"offset\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"results\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"ignore_pfm\": { \"type\": \"boolean\" },\n          \"external_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"transaction_date\": { \"type\": \"string\", \"format\": \"date\" },\n          \"transaction_datetime\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"amount\": {\"type\": \"string\"},\n          \"description\": { \"type\": \"string\" },\n          \"category\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n              \"item_name\": { \"type\": \"string\" },\n              \"description\": { \"type\": \"string\" },\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"bg\": { \"type\": \"string\", \"format\": \"uri\" },\n                  \"icon\": { \"type\": \"string\", \"format\": \"uri\" },\n                  \"name\": { \"type\": \"string\" },\n                  \"color\": {\n                    \"type\": \"string\"\n                  },\n                  \"active\": { \"type\": \"boolean\" },\n                  \"short_name\": { \"type\": \"string\" },\n                  \"color_class\": { \"type\": \"string\" },\n                  \"description\": { \"type\": \"string\" },\n                  \"icon_ignore\": { \"type\": \"string\", \"format\": \"uri\" },\n                  \"icon_primary\": { \"type\": \"string\", \"format\": \"uri\" }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions",""],"host":["{{host_app}}"],"query":[{"key":"category","value":"uncategorized"},{"disabled":true,"key":"category","value":"3954361d-ddf5-46dc-a8f8-af98ee9811da"},{"disabled":true,"key":"paginate","value":"true"},{"disabled":true,"key":"page","value":"1"},{"disabled":true,"key":"page_size","value":"1"},{"disabled":true,"key":"expand","value":"category,exchange_rate"},{"disabled":true,"description":{"content":"<p>expenses, incomes</p>\n","type":"text/plain"},"key":"movement_type","value":"incomes"},{"key":"date_month","value":"2025-05"}],"variable":[]}},"response":[{"id":"1684f9a0-e652-4eb1-84f7-0a0a151f0af5","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/?category=uncategorized&date_month=2025-05","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions",""],"query":[{"key":"category","value":"uncategorized"},{"key":"category","value":"3954361d-ddf5-46dc-a8f8-af98ee9811da","disabled":true},{"key":"paginate","value":"true","disabled":true},{"key":"page","value":"1","type":"text","disabled":true},{"key":"page_size","value":"1","type":"text","disabled":true},{"key":"expand","value":"category,exchange_rate","type":"text","disabled":true},{"key":"movement_type","value":"incomes","description":"expenses, incomes","type":"text","disabled":true},{"key":"date_month","value":"2025-05"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"next\": null,\n    \"previous\": null,\n    \"total_pages\": 1,\n    \"current_page\": 1,\n    \"offset\": 0,\n    \"results\": [\n        {\n            \"id\": \"2556a72e-f1bf-4fd8-8c42-04d2ce115c02\",\n            \"ignore_pfm\": false,\n            \"external_id\": \"abc-1\",\n            \"user_id\": \"9790de51-6732-4a07-b934-c58ab73f7bb5\",\n            \"transaction_date\": \"2025-05-08\",\n            \"transaction_datetime\": \"2025-05-08T00:00:00+0000\",\n            \"amount\": \"-55.00\",\n            \"description\": \"NETFLIX\",\n            \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n            \"user_note\": null,\n            \"product_type\": {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            },\n            \"exchange_rate\": null,\n            \"merchant\": null,\n            \"account_id\": \"31adddf5-1d3a-4af8-a218-db5f8f6f2f41\",\n            \"transaction_note\": null,\n            \"classified\": false\n        },\n        {\n            \"id\": \"27520c0f-7bc5-4f0e-a029-9dee1b27bb17\",\n            \"ignore_pfm\": false,\n            \"external_id\": \"abc-2\",\n            \"user_id\": \"9790de51-6732-4a07-b934-c58ab73f7bb5\",\n            \"transaction_date\": \"2025-05-08\",\n            \"transaction_datetime\": \"2025-05-08T00:00:00+0000\",\n            \"amount\": \"-333.00\",\n            \"description\": \"GOOGLE *Play Pass\",\n            \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n            \"user_note\": null,\n            \"product_type\": {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            },\n            \"exchange_rate\": null,\n            \"merchant\": null,\n            \"account_id\": \"31adddf5-1d3a-4af8-a218-db5f8f6f2f41\",\n            \"transaction_note\": null,\n            \"classified\": false\n        },\n        {\n            \"id\": \"62b006cd-17a3-49eb-a0c3-7d511727fef6\",\n            \"ignore_pfm\": false,\n            \"external_id\": \"abc-3\",\n            \"user_id\": \"9790de51-6732-4a07-b934-c58ab73f7bb5\",\n            \"transaction_date\": \"2025-05-08\",\n            \"transaction_datetime\": \"2025-05-08T00:00:00+0000\",\n            \"amount\": \"-4500.00\",\n            \"description\": \"PAPA JOHNS CCOLORA\",\n            \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n            \"user_note\": null,\n            \"product_type\": {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            },\n            \"exchange_rate\": null,\n            \"merchant\": null,\n            \"account_id\": \"31adddf5-1d3a-4af8-a218-db5f8f6f2f41\",\n            \"transaction_note\": null,\n            \"classified\": false\n        }\n    ],\n    \"count\": 3\n}"},{"id":"532ffb43-02b8-48f9-850a-3c6c31490cfc","name":"Bad Request - Invalid date","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/?date_month=2024-09-invalid","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions",""],"query":[{"key":"date_month","value":"2024-09-invalid"},{"key":"category","value":"uncategorized","type":"text","disabled":true},{"key":"category","value":"3954361d-ddf5-46dc-a8f8-af98ee9811da","type":"text","disabled":true},{"key":"paginate","value":"true","disabled":true},{"key":"page","value":"1","type":"text","disabled":true},{"key":"page_size","value":"1","type":"text","disabled":true},{"key":"expand","value":"category,exchange_rate","type":"text","disabled":true},{"key":"movement_type","value":"incomes","description":"expenses, incomes","type":"text","disabled":true}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 21:10:37 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"24"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"a892f80d-b9f7-45b6-8ba4-27090e43fe93"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LqFsEFIvIAMEg0Q="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6840b64c-03d5bb5e0fcdcb9a6e91498a;Parent=5bec2b58393c807c;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    \"Invalid date format.\"\n]"}],"_postman_id":"3b1e4830-4249-4640-b8a1-de17910424d0"},{"name":"Listado de transacciones creadas ultimas horas","event":[{"listen":"test","script":{"id":"a2d12afc-4122-452c-b994-7601116ab0a1","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    ignore_pfm: 'boolean',\r","    external_id: 'string',\r","    user_id: 'string',\r","    transaction_date: 'string',\r","    transaction_datetime: 'string',\r","    description: 'string',\r","    amount: 'string',\r","    transaction_category: 'object',\r","    created_at: 'string'\r","};\r","\r","const transactionCategoryProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    name: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string',\r","    color_class: 'string',\r","    description: 'string',\r","    icon_ignore: 'string',\r","    icon_primary: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties of the transaction_category object\r","pm.test(\"Transaction category object has expected properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0].transaction_category, transactionCategoryProperties);\r","    }\r","});\r","\r","// Check properties of the metadata object within the transaction_category\r","pm.test(\"Metadata object has expected properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0].transaction_category.metadata, metadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"05fda524-61b5-4fd4-ba9c-cd365df477e9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/created-at-last-hours/24/","description":"<p>Este endpoint permite <strong>obtener las transacciones creadas en las últimas 24 horas por un usuario específico</strong>, ordenadas cronológicamente (de más reciente a más antigua). Es útil para mostrar un resumen actualizado en dashboards o actividades recientes, permitiendo a los usuarios revisar sus transacciones recientes de manera eficiente.</p>\n<h4 id=\"widgets\">Widgets</h4>\n<ol>\n<li>Home integrado, últimos movimientos.</li>\n</ol>\n<img src=\"https://content.pstmn.io/ecc7cd81-b35f-4304-b561-b59a9bc389e2/aW1hZ2UucG5n\" alt height=\"313\" width=\"544\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/transactions/created-at-last-hours/24/</code></p>\n</li>\n<li><p><strong>Parámetros de ruta:</strong></p>\n<ul>\n<li><code>user_id</code> (string, requerido): ID del usuario cuyas transacciones se desean consultar.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON que contiene un arreglo de transacciones ordenadas por fecha de creación (<code>created_at</code>), de la más nueva a la más antigua. Cada transacción incluirá los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): ID único de la transacción.</p>\n</li>\n<li><p><code>ignore_pfm</code> (boolean): Indica si la transacción debe ser ignorada por el PFM.</p>\n</li>\n<li><p><code>external_id</code> (string): ID externo asociado a la transacción.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario propietario.</p>\n</li>\n<li><p><code>transaction_date</code> (string): Fecha de ocurrencia de la transacción.</p>\n</li>\n<li><p><code>transaction_datetime</code> (string): Fecha y hora de la transacción.</p>\n</li>\n<li><p><code>amount</code> (number): Monto de la transacción.</p>\n</li>\n<li><p><code>description</code> (string): Descripción o concepto registrado.</p>\n</li>\n<li><p><code>category</code> (string): Categoría asignada a la transacción.</p>\n</li>\n<li><p><code>user_note</code> (string|null): Nota del usuario sobre la transacción.</p>\n</li>\n<li><p><code>product_type</code> (object): Detalles del tipo de producto, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): ID del tipo de producto.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo del producto.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del artículo.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del producto.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional del producto, incluyendo:</p>\n<ul>\n<li><p><code>icon</code> (string): Icono del producto.</p>\n</li>\n<li><p><code>color</code> (string): Color del producto.</p>\n</li>\n<li><p><code>active</code> (boolean): Estado de actividad del producto.</p>\n</li>\n<li><p><code>short_name</code> (string): Nombre corto del producto.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>exchange_rate</code> (number|null): Tasa de cambio aplicable.</p>\n</li>\n<li><p><code>merchant</code> (object|null): Información del comerciante asociado.</p>\n</li>\n<li><p><code>account_id</code> (string): ID de la cuenta asociada a la transacción.</p>\n</li>\n<li><p><code>transaction_note</code> (object|null): Nota de la transacción, que incluye:</p>\n<ul>\n<li><p><code>id</code> (string): ID de la nota.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario que creó la nota.</p>\n</li>\n<li><p><code>updated_at</code> (string): Timestamp de la última actualización.</p>\n</li>\n<li><p><code>transaction</code> (string): ID de la transacción relacionada.</p>\n</li>\n<li><p><code>transaction_date</code> (string): Fecha de la transacción relacionada.</p>\n</li>\n<li><p><code>transaction_note</code> (string): Contenido de la nota de la transacción.</p>\n</li>\n</ul>\n</li>\n<li><p><code>classified</code> (boolean): Indica si la transacción ha sido clasificada.</p>\n</li>\n<li><p><code>attributes</code> (object): Atributos adicionales de la transacción.</p>\n</li>\n<li><p><code>tags</code> (array): Lista de etiquetas asociadas a la transacción.</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"ignore_pfm\": { \"type\": \"boolean\" },\n    \"external_id\": { \"type\": \"string\" },\n    \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"transaction_date\": { \"type\": \"string\", \"format\": \"date\" },\n    \"transaction_datetime\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"amount\": { \"type\": \"string\", \"pattern\": \"^\\d+(\\.\\d{2})?$\" },\n    \"description\": { \"type\": \"string\" },\n    \"category\": {\n      \"oneOf\": [\n        { \"type\": \"string\", \"format\": \"uuid\" },\n        {\n          \"type\": \"object\",\n          \"properties\": {\n            \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n            \"catalog\": { \"type\": \"string\" },\n            \"item_name\": { \"type\": \"string\" },\n            \"description\": { \"type\": \"string\" },\n            \"metadata\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"bg\": { \"type\": \"string\" },\n                \"icon\": { \"type\": \"string\" },\n                \"name\": { \"type\": \"string\" },\n                \"color\": { \"type\": \"string\" },\n                \"active\": { \"type\": \"boolean\" },\n                \"short_name\": { \"type\": \"string\" },\n                \"color_class\": { \"type\": \"string\" },\n                \"description\": { \"type\": \"string\" },\n                \"icon_ignore\": { \"type\": \"string\" },\n                \"icon_primary\": { \"type\": \"string\" }\n              }\n            }\n          }\n        }\n      ]\n    },\n    \"user_note\": { \"type\": [\"string\", \"null\"] },\n    \"product_type\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"catalog\": { \"type\": \"string\" },\n        \"item_name\": { \"type\": \"string\" },\n        \"description\": { \"type\": \"string\" },\n        \"metadata\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"icon\": { \"type\": \"string\" },\n            \"color\": { \"type\": \"string\" },\n            \"active\": { \"type\": \"boolean\" },\n            \"short_name\": { \"type\": \"string\" }\n          }\n        }\n      }\n    },\n    \"exchange_rate\": {\n      \"oneOf\": [\n        { \"type\": \"null\" },\n        {\n          \"type\": \"object\",\n          \"properties\": {\n            \"from\": { \"type\": \"string\" },\n            \"to\": { \"type\": \"string\" },\n            \"rate\": { \"type\": \"number\" }\n          }\n        }\n      ]\n    },\n    \"merchant\": {\n      \"oneOf\": [\n        { \"type\": \"null\" },\n        {\n          \"type\": \"object\",\n          \"properties\": {\n            \"id\": { \"type\": \"string\" },\n            \"name\": { \"type\": \"string\" },\n            \"category\": { \"type\": \"string\" }\n          }\n        }\n      ]\n    },\n    \"account_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"transaction_note\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n        \"transaction\": { \"type\": \"string\", \"format\": \"uuid\" },\n        \"transaction_date\": { \"type\": \"string\", \"format\": \"date\" },\n        \"transaction_note\": { \"type\": \"string\" }\n      }\n    },\n    \"classified\": { \"type\": \"boolean\" },\n    \"attributes\": { \"type\": \"object\" },\n    \"tags\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","transactions","created-at-last-hours","24",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"5911d836-1068-497b-a376-4bffaf4769c2","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/created-at-last-hours/24/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 23:05:49 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"876"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"4ee800ec-f158-4569-87d7-71538c70760b"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cNlUKGy7oAMEddg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b54f4d-0fa7e4d2399eb1882870dca3;Parent=344841661a78baf2;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"a4cb660e-7690-42cf-9c89-40577d0719f3\",\n        \"ignore_pfm\": false,\n        \"external_id\": \"c3f3371d-7b2d-4d50-9716-793947bbdab8\",\n        \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"transaction_date\": \"2024-08-01\",\n        \"transaction_datetime\": \"2024-08-01T00:00:00+0000\",\n        \"description\": \"Shopping\",\n        \"amount\": \"-6000.00\",\n        \"transaction_category\": {\n            \"id\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n            \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n            \"item_name\": \"Sin categoría\",\n            \"description\": \"Transacción sin categoría\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/sin_categoria.svg\",\n                \"name\": \"Añadir Categoría\",\n                \"color\": \"#6F6F6F\",\n                \"active\": false,\n                \"short_name\": \"SINCATEGORIA\",\n                \"color-class\": \"\",\n                \"description\": \"Categoría\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/sin_categoria.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/sin_categoria.svg\"\n            }\n        },\n        \"created_at\": \"2024-08-08T20:54:10+0000\"\n    }\n]"},{"id":"18109b6b-9460-4edb-9c3d-765e4fc808db","name":"Bad Request","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/created-at-last-hours/0/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 23:06:09 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"30"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"2122b857-9e44-459b-aa19-747a1fca6abb"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cNlXVF54IAMEiQA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b54f61-732d8e424e53e12b444043a6;Parent=1be9d0cec6e8ec91;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"400\": \"Invalid hour format.\"\n}"}],"_postman_id":"05fda524-61b5-4fd4-ba9c-cd365df477e9"},{"name":"Obtener transacciones gasto fijo","event":[{"listen":"test","script":{"id":"14d24ee4-5d5e-44a5-aabe-4acff47b9d41","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    next: { type: 'string', optional: true },\r","    previous: { type: 'string', optional: true },\r","    total_pages: 'number',\r","    current_page: 'number',\r","    offset: 'number',\r","    count: 'number',\r","    results: 'array'\r","};\r","\r","const resultProperties = {\r","    id: 'string',\r","    ignore_pfm: 'boolean',\r","    external_id: 'string',\r","    user_id: 'string',\r","    transaction_date: 'string',\r","    transaction_datetime: 'string',\r","    amount: 'string',\r","    description: 'string',\r","    category: 'string',\r","    user_note: { type: 'string', optional: true },\r","    product_type: 'object',\r","    exchange_rate: { type: 'string', optional: true },\r","    merchant: { type: 'object', optional: true },\r","    account_id: 'string',\r","    transaction_note: { type: 'string', optional: true },\r","    classified: 'boolean'\r","};\r","\r","const productTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","const merchantProperties = {\r","    id: 'string',\r","    name: 'string',\r","    logo_url: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the results array\r","pm.test(\"Results have expected properties with correct types\", () => {\r","    if (responseJson.results && responseJson.results.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0], resultProperties);\r","        \r","        // Check properties of the product_type object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].product_type, productTypeProperties);\r","        \r","        // Check metadata properties of the product_type object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].product_type.metadata, metadataProperties);\r","        \r","        // Check properties of the merchant object in the first result, if it exists\r","        if (responseJson.results[0].merchant) {\r","            xerpaTestApi.checkObjectProperties(responseJson.results[0].merchant, merchantProperties);\r","        }\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"bfcc6a65-15e3-4350-8dbe-88b3b239bed3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}api-pfm/v1/pfm-service/users/{{user_id}}/views/fixed_expenses/?date_month=2023-07","description":"<p>Este endpoint permite <strong>obtener todas las transacciones clasificadas como gastos fijos</strong> de un usuario específico en un mes determinado. Es útil para análisis de recurrencia, control de suscripciones y presupuestos predecibles.</p>\n<h3 id=\"widgets\">Widgets</h3>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Gastos-fijos-y-variables-1e47439960f080dd848ffc58c0cbee20?source=copy_link#1e47439960f0806d9179f445110a5a88\">Gastos fijos</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/8575ac91-5894-40cd-9122-fe29c3959243/aW1hZ2UucG5n\" alt height=\"705\" width=\"376\" />\n\n<hr />\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/views/fixed_expenses/</code></p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>user_id</code> (string, requerido): ID del usuario para el cual se desean obtener los gastos fijos.</li>\n</ul>\n</li>\n<li><p>Parámetros de query:</p>\n<ul>\n<li><code>date_month</code> (string, requerido): Mes y año en formato <code>YYYY-MM</code> para filtrar las transacciones.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON que contiene información sobre los gastos fijos del usuario, incluyendo el total de gastos y la cantidad de transacciones.</p>\n<ul>\n<li><p><code>month_date</code> (string): Fecha del mes consultado.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario asociado.</p>\n</li>\n<li><p><code>total_amount</code> (number): Monto total de los gastos fijos para el mes.</p>\n</li>\n<li><p><code>transaction_quantity</code> (integer): Cantidad total de transacciones clasificadas como gastos fijos.</p>\n</li>\n<li><p><code>transactions</code> (object): Objeto que contiene la paginación y los detalles de las transacciones.</p>\n<ul>\n<li><p><code>next</code> (string|null): URL para la siguiente página de resultados.</p>\n</li>\n<li><p><code>previous</code> (string|null): URL para la página anterior de resultados.</p>\n</li>\n<li><p><code>total_pages</code> (integer): Total de páginas disponibles.</p>\n</li>\n<li><p><code>current_page</code> (integer): Página actual de los resultados.</p>\n</li>\n<li><p><code>offset</code> (integer): Desplazamiento de los resultados.</p>\n</li>\n<li><p><code>results</code> (array): Arreglo que contiene los detalles de cada transacción.</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único de la transacción.</p>\n</li>\n<li><p><code>ignore_pfm</code> (boolean): Indica si la transacción debe ser ignorada por el PFM.</p>\n</li>\n<li><p><code>external_id</code> (string): ID externo asociado a la transacción.</p>\n</li>\n<li><p><code>transaction_date</code> (string): Fecha de la transacción.</p>\n</li>\n<li><p><code>amount</code> (string): Monto de la transacción.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la transacción.</p>\n</li>\n<li><p><code>category</code> (string): Categoría a la que pertenece la transacción.</p>\n</li>\n<li><p><code>user_note</code> (string|null): Nota del usuario sobre la transacción.</p>\n</li>\n<li><p><code>product_type</code> (object): Detalles del tipo de producto asociado.</p>\n</li>\n<li><p><code>account_id</code> (string): ID de la cuenta asociada a la transacción.</p>\n</li>\n<li><p><code>classified</code> (boolean): Indica si la transacción ha sido clasificada correctamente.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"month_date\": {\"type\": \"string\"},\n    \"user_id\": {\"type\": \"string\"},\n    \"total_amount\": {\"type\": \"number\"},\n    \"transaction_quantity\": {\"type\": \"integer\"},\n    \"transactions\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": {\"type\": \"string\"},\n          \"ignore_pfm\": {\"type\": \"boolean\"},\n          \"external_id\": {\"type\": \"string\"},\n          \"user_id\": {\"type\": \"string\"},\n          \"transaction_date\": {\"type\": \"string\"},\n          \"amount\": {\"type\": \"string\"},\n          \"description\": {\"type\": \"string\"},\n          \"category\": {\"type\": \"string\"},\n          \"user_note\": {\"type\": [\"string\", \"null\"]},\n          \"product_type\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": {\"type\": \"string\"},\n              \"catalog\": {\"type\": \"string\"},\n              \"item_name\": {\"type\": \"string\"},\n              \"description\": {\"type\": \"string\"},\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"icon\": {\"type\": \"string\"},\n                  \"color\": {\"type\": \"string\"},\n                  \"active\": {\"type\": \"boolean\"},\n                  \"short_name\": {\"type\": \"string\"}\n                }\n              }\n            }\n          },\n          \"account_id\": {\"type\": \"string\"},\n          \"classified\": {\"type\": \"boolean\"}\n        }\n      }\n    },\n    \"next\": {\"type\": [\"string\", \"null\"]},\n    \"previous\": {\"type\": [\"string\", \"null\"]},\n    \"total_pages\": {\"type\": \"integer\"},\n    \"current_page\": {\"type\": \"integer\"},\n    \"offset\": {\"type\": \"integer\"},\n    \"results\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": {\"type\": \"string\"},\n          \"ignore_pfm\": {\"type\": \"boolean\"},\n          \"external_id\": {\"type\": \"string\"},\n          \"user_id\": {\"type\": \"string\"},\n          \"transaction_date\": {\"type\": \"string\"},\n          \"amount\": {\"type\": \"string\"},\n          \"description\": {\"type\": \"string\"},\n          \"category\": {\"type\": \"string\"},\n          \"user_note\": {\"type\": [\"string\", \"null\"]},\n          \"product_type\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": {\"type\": \"string\"},\n              \"catalog\": {\"type\": \"string\"},\n              \"item_name\": {\"type\": \"string\"},\n              \"description\": {\"type\": \"string\"},\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"icon\": {\"type\": \"string\"},\n                  \"color\": {\"type\": \"string\"},\n                  \"active\": {\"type\": \"boolean\"},\n                  \"short_name\": {\"type\": \"string\"}\n                }\n              }\n            }\n          },\n          \"account_id\": {\"type\": \"string\"},\n          \"classified\": {\"type\": \"boolean\"}\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["v1","pfm-service","users","{{user_id}}","views","fixed_expenses",""],"host":["{{host_app}}api-pfm"],"query":[{"key":"date_month","value":"2023-07"}],"variable":[]}},"response":[{"id":"58b37916-6a72-4484-9260-c66108d94bfd","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}api-pfm/v1/pfm-service/users/{{user_id}}/views/fixed_expenses/?date_month=2023-07","host":["{{host_app}}api-pfm"],"path":["v1","pfm-service","users","{{user_id}}","views","fixed_expenses",""],"query":[{"key":"date_month","value":"2023-07"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 21:22:39 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"229"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"63e5d0ca-4472-439f-bac4-4092cb3c8087"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LqHc5H4KIAMEQXg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6840b91e-7687c38d3695ef103c31d77d;Parent=14e6e062b00e7bb3;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"month_date\": \"2023-07\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"total_amount\": 0,\n    \"transaction_quantity\": 0,\n    \"transactions\": {\n        \"next\": null,\n        \"previous\": null,\n        \"total_pages\": 1,\n        \"current_page\": 1,\n        \"offset\": 0,\n        \"results\": [],\n        \"count\": 0\n    }\n}"}],"_postman_id":"bfcc6a65-15e3-4350-8dbe-88b3b239bed3"},{"name":"Obtener transacciones gasto variable","event":[{"listen":"test","script":{"id":"14d24ee4-5d5e-44a5-aabe-4acff47b9d41","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    next: { type: 'string', optional: true },\r","    previous: { type: 'string', optional: true },\r","    total_pages: 'number',\r","    current_page: 'number',\r","    offset: 'number',\r","    count: 'number',\r","    results: 'array'\r","};\r","\r","const resultProperties = {\r","    id: 'string',\r","    ignore_pfm: 'boolean',\r","    external_id: 'string',\r","    user_id: 'string',\r","    transaction_date: 'string',\r","    transaction_datetime: 'string',\r","    amount: 'string',\r","    description: 'string',\r","    category: 'string',\r","    user_note: { type: 'string', optional: true },\r","    product_type: 'object',\r","    exchange_rate: { type: 'string', optional: true },\r","    merchant: { type: 'object', optional: true },\r","    account_id: 'string',\r","    transaction_note: { type: 'string', optional: true },\r","    classified: 'boolean'\r","};\r","\r","const productTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","const merchantProperties = {\r","    id: 'string',\r","    name: 'string',\r","    logo_url: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the results array\r","pm.test(\"Results have expected properties with correct types\", () => {\r","    if (responseJson.results && responseJson.results.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0], resultProperties);\r","        \r","        // Check properties of the product_type object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].product_type, productTypeProperties);\r","        \r","        // Check metadata properties of the product_type object in the first result\r","        xerpaTestApi.checkObjectProperties(responseJson.results[0].product_type.metadata, metadataProperties);\r","        \r","        // Check properties of the merchant object in the first result, if it exists\r","        if (responseJson.results[0].merchant) {\r","            xerpaTestApi.checkObjectProperties(responseJson.results[0].merchant, merchantProperties);\r","        }\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"6120323e-a331-4a9f-b86f-0eb8d00998d7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/views/variable_expenses/?category=uncategorized&category=3954361d-ddf5-46dc-a8f8-af98ee9811da&page=1&page_size=1&expand=category,exchange_rate&movement_type=incomes&date_month=2024-12","description":"<p>Este endpoint permite <strong>obtener todas las transacciones clasificadas como gastos variables</strong> de un usuario determinado. Es útil para monitorear patrones de gasto no recurrentes o fluctuantes.</p>\n<h4 id=\"widgets\">Widgets</h4>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Gastos-fijos-y-variables-1e47439960f080dd848ffc58c0cbee20?source=copy_link#1e47439960f0806d9179f445110a5a88\">Gasto variable</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/833d00ed-9dee-46b2-aa8c-a4a65c43da63/aW1hZ2UucG5n\" alt height=\"708\" width=\"377\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/views/variable_expenses/</code></p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>user_id</code>(string): ID del usuario.</li>\n</ul>\n</li>\n<li><p>Parámetros de query:</p>\n<ul>\n<li><p><code>category</code> (string, requerido): Categoría de gasto. Puedes especificar múltiples categorías separadas por comas.</p>\n</li>\n<li><p><code>page</code> (integer, opcional): Número de página para paginación.</p>\n</li>\n<li><p><code>page_size</code> (integer, opcional): Número de transacciones por página.</p>\n</li>\n<li><p><code>expand</code> (string, opcional): Campos adicionales a incluir en la respuesta (ej. <code>category</code>, <code>exchange_rate</code>).</p>\n</li>\n<li><p><code>movement_type</code> (string, opcional): Tipo de movimiento, como <code>incomes</code>.</p>\n</li>\n<li><p><code>date_month</code> (string, opcional): Mes y año de las transacciones en formato <code>YYYY-MM</code>.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON que incluye información sobre los gastos variables del usuario especificado.</p>\n<h5 id=\"campos-de-respuesta\">Campos de respuesta:</h5>\n<ul>\n<li><p><code>month_date</code> (string): Fecha del mes correspondiente a los gastos.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario.</p>\n</li>\n<li><p><code>total_amount</code> (number): Monto total de los gastos variables.</p>\n</li>\n<li><p><code>transaction_quantity</code> (number): Cantidad total de transacciones.</p>\n</li>\n<li><p><code>transactions</code> (object): Objeto que contiene información paginada sobre las transacciones.</p>\n<ul>\n<li><p><code>next</code> (string|null): URL para la siguiente página de resultados.</p>\n</li>\n<li><p><code>previous</code> (string|null): URL para la página anterior de resultados.</p>\n</li>\n<li><p><code>total_pages</code> (integer): Número total de páginas disponibles.</p>\n</li>\n<li><p><code>current_page</code> (integer): Página actual de los resultados.</p>\n</li>\n<li><p><code>offset</code> (integer): Desplazamiento de los resultados.</p>\n</li>\n<li><p><code>results</code> (array): Lista de transacciones categorizadas como <strong>gasto variable</strong>.</p>\n<ul>\n<li><p><code>id</code> (string): ID único de la transacción.</p>\n</li>\n<li><p><code>ignore_pfm</code> (boolean): Indica si la transacción debe ser ignorada en el análisis de PFM.</p>\n</li>\n<li><p><code>external_id</code> (string): ID externo asociado a la transacción.</p>\n</li>\n<li><p><code>transaction_date</code> (string): Fecha de la transacción.</p>\n</li>\n<li><p><code>transaction_datetime</code> (string): Fecha y hora de la transacción.</p>\n</li>\n<li><p><code>amount</code> (string): Monto de la transacción.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la transacción.</p>\n</li>\n<li><p><code>category</code> (string): Categoría de la transacción.</p>\n</li>\n<li><p><code>user_note</code> (string|null): Nota del usuario sobre la transacción.</p>\n</li>\n<li><p><code>product_type</code> (object): Información sobre el tipo de producto.</p>\n<ul>\n<li><p><code>id</code> (string): ID del producto.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo del producto.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del producto.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional del producto.</p>\n<ul>\n<li><p><code>icon</code> (string): Icono del producto.</p>\n</li>\n<li><p><code>color</code> (string): Color asociado al producto.</p>\n</li>\n<li><p><code>active</code> (boolean): Indica si el producto está activo.</p>\n</li>\n<li><p><code>short_name</code> (string): Nombre corto del producto.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>exchange_rate</code> (number|null): Tasa de cambio asociada a la transacción.</p>\n</li>\n<li><p><code>merchant</code> (string|null): Comerciante asociado a la transacción.</p>\n</li>\n<li><p><code>account_id</code> (string): ID de la cuenta utilizada para la transacción.</p>\n</li>\n<li><p><code>transaction_note</code> (string|null): Nota específica de la transacción.</p>\n</li>\n<li><p><code>classified</code> (boolean): Indica si la transacción ha sido clasificada correctamente.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"month_date\": {\"type\": \"string\"},\n    \"user_id\": {\"type\": \"string\"},\n    \"total_amount\": {\"type\": \"number\"},\n    \"transaction_quantity\": {\"type\": \"integer\"},\n    \"transactions\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": {\"type\": \"string\"},\n          \"ignore_pfm\": {\"type\": \"boolean\"},\n          \"external_id\": {\"type\": \"string\"},\n          \"user_id\": {\"type\": \"string\"},\n          \"transaction_date\": {\"type\": \"string\"},\n          \"amount\": {\"type\": \"string\"},\n          \"description\": {\"type\": \"string\"},\n          \"category\": {\"type\": \"string\"},\n          \"user_note\": {\"type\": [\"string\", \"null\"]},\n          \"product_type\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": {\"type\": \"string\"},\n              \"catalog\": {\"type\": \"string\"},\n              \"item_name\": {\"type\": \"string\"},\n              \"description\": {\"type\": \"string\"},\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"icon\": {\"type\": \"string\"},\n                  \"color\": {\"type\": \"string\"},\n                  \"active\": {\"type\": \"boolean\"},\n                  \"short_name\": {\"type\": \"string\"}\n                }\n              }\n            }\n          },\n          \"account_id\": {\"type\": \"string\"},\n          \"classified\": {\"type\": \"boolean\"}\n        }\n      }\n    },\n    \"next\": {\"type\": [\"string\", \"null\"]},\n    \"previous\": {\"type\": [\"string\", \"null\"]},\n    \"total_pages\": {\"type\": \"integer\"},\n    \"current_page\": {\"type\": \"integer\"},\n    \"offset\": {\"type\": \"integer\"},\n    \"results\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": {\"type\": \"string\"},\n          \"ignore_pfm\": {\"type\": \"boolean\"},\n          \"external_id\": {\"type\": \"string\"},\n          \"user_id\": {\"type\": \"string\"},\n          \"transaction_date\": {\"type\": \"string\"},\n          \"amount\": {\"type\": \"string\"},\n          \"description\": {\"type\": \"string\"},\n          \"category\": {\"type\": \"string\"},\n          \"user_note\": {\"type\": [\"string\", \"null\"]},\n          \"product_type\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": {\"type\": \"string\"},\n              \"catalog\": {\"type\": \"string\"},\n              \"item_name\": {\"type\": \"string\"},\n              \"description\": {\"type\": \"string\"},\n              \"metadata\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"icon\": {\"type\": \"string\"},\n                  \"color\": {\"type\": \"string\"},\n                  \"active\": {\"type\": \"boolean\"},\n                  \"short_name\": {\"type\": \"string\"}\n                }\n              }\n            }\n          },\n          \"account_id\": {\"type\": \"string\"},\n          \"classified\": {\"type\": \"boolean\"}\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","views","variable_expenses",""],"host":["{{host_app}}"],"query":[{"key":"category","value":"uncategorized"},{"key":"category","value":"3954361d-ddf5-46dc-a8f8-af98ee9811da"},{"key":"page","value":"1"},{"key":"page_size","value":"1"},{"key":"expand","value":"category,exchange_rate"},{"description":{"content":"<p>expenses, incomes</p>\n","type":"text/plain"},"key":"movement_type","value":"incomes"},{"key":"date_month","value":"2024-12"}],"variable":[]}},"response":[{"id":"8d8f02b3-0490-47bc-ad4a-68d6e84da993","name":"Sucessful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/views/variable_expenses/?category=uncategorized&category=3954361d-ddf5-46dc-a8f8-af98ee9811da&page=1&page_size=1&expand=category,exchange_rate&movement_type=incomes&date_month=2024-12","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","{{user_id}}","views","variable_expenses",""],"query":[{"key":"category","value":"uncategorized"},{"key":"category","value":"3954361d-ddf5-46dc-a8f8-af98ee9811da"},{"key":"page","value":"1"},{"key":"page_size","value":"1"},{"key":"expand","value":"category,exchange_rate"},{"key":"movement_type","value":"incomes","description":"expenses, incomes"},{"key":"date_month","value":"2024-12"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 21:25:19 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"229"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"5538429e-5a42-45b7-9c5c-3dcf12b5c1be"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LqH2BF3BIAMEJmg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6840b9bf-1ec56d114de69b1d108f3809;Parent=4eb258368181a95f;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"month_date\": \"2024-12\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"total_amount\": 0,\n    \"transaction_quantity\": 0,\n    \"transactions\": {\n        \"next\": null,\n        \"previous\": null,\n        \"total_pages\": 1,\n        \"current_page\": 1,\n        \"offset\": 0,\n        \"results\": [],\n        \"count\": 0\n    }\n}"}],"_postman_id":"6120323e-a331-4a9f-b86f-0eb8d00998d7"}],"id":"cecd5e0e-9061-436a-a766-c9fe910e8417","_postman_id":"cecd5e0e-9061-436a-a766-c9fe910e8417","description":""}],"id":"04fa0ba1-9fa2-406b-aa83-b6772bc8b599","description":"<h3 id=\"💳-gestión-de-transacciones-financieras\">💳 Gestión de transacciones financieras</h3>\n<p>La carpeta <strong>Transactions</strong> agrupa los endpoints que permiten <strong>consultar, clasificar, modificar y analizar las transacciones financieras</strong> asociadas a las cuentas del usuario. Es uno de los núcleos funcionales del sistema de finanzas personales (PFM), ya que a partir de estas transacciones se generan métricas, presupuestos, reglas y reportes.</p>\n<p>Estas transacciones pueden provenir de integraciones bancarias o ser ingresadas manualmente, y son enriquecidas mediante procesos de categorización automática, reglas personalizadas y actividad del usuario.</p>\n<hr />\n<h4 id=\"📌-funcionalidades-incluidas\">📌 Funcionalidades incluidas</h4>\n<p>Los endpoints disponibles permiten:</p>\n<ul>\n<li><p>Consultar transacciones generales, fijas, variables o recientes.</p>\n</li>\n<li><p>Obtener el detalle completo de una transacción individual.</p>\n</li>\n<li><p>Cambiar su categoría de forma manual o marcarla como \"ignorada\".</p>\n</li>\n<li><p>Agregar o editar notas asociadas a una transacción.</p>\n</li>\n<li><p>Registrar reclasificaciones y consultarlas posteriormente.</p>\n</li>\n<li><p>Acceder a métricas agregadas como balance, ingresos, gastos, y comparativas fijas vs. variables.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🧠-casos-de-uso\">🧠 Casos de uso</h4>\n<ul>\n<li><p>Visualizar las transacciones en dashboards o historiales personales.</p>\n</li>\n<li><p>Analizar el comportamiento de gasto por categoría o periodo.</p>\n</li>\n<li><p>Aplicar reglas de reclasificación para corregir errores o preferencias personales.</p>\n</li>\n<li><p>Etiquetar transacciones con notas y trazabilidad de cambios.</p>\n</li>\n<li><p>Generar reportes de actividad financiera personalizados.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🧩-características-destacadas\">🧩 Características destacadas</h4>\n<ul>\n<li><p>Las transacciones pueden clasificarse automáticamente mediante motores de Machine Learning, pero permiten intervención del usuario.</p>\n</li>\n<li><p>Se admite categorización manual (<code>PATCH</code>, <code>PUT</code>) y reversión de clasificaciones (<code>reclassify</code>).</p>\n</li>\n<li><p>El atributo <code>fixed_expense</code> indica si una transacción es recurrente.</p>\n</li>\n<li><p>Muchas operaciones pueden realizarse de forma parcial sin modificar el resto de los campos.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🔐-seguridad\">🔐 Seguridad</h4>\n<ul>\n<li><p>Todos los endpoints requieren autenticación.</p>\n</li>\n<li><p>Las modificaciones a transacciones pueden estar restringidas a usuarios propietarios.</p>\n</li>\n<li><p>Algunas operaciones, como las reclasificaciones automáticas, requieren privilegios backend o administrativos.</p>\n</li>\n</ul>\n","_postman_id":"04fa0ba1-9fa2-406b-aa83-b6772bc8b599"},{"name":"Reglas personalizadas","item":[{"name":"Lista reglas clasificación","event":[{"listen":"test","script":{"id":"ec6a0890-a38d-41af-a167-8685a317b03f","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    ignore_pfm: 'boolean',\r","    external_id: 'string',\r","    user_id: 'string',\r","    transaction_date: 'string',\r","    transaction_datetime: 'string',\r","    amount: 'string',\r","    description: 'string',\r","    category: 'string',\r","    user_note: { type: 'string', optional: true },\r","    product_type: 'object',\r","    exchange_rate: { type: 'string', optional: true },\r","    merchant: 'object',\r","    account_id: 'string',\r","    transaction_note: 'object',\r","    classified: 'boolean'\r","};\r","\r","const productTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","const merchantProperties = {\r","    id: 'string',\r","    name: 'string',\r","    logo_url: 'string'\r","};\r","\r","const transactionNoteProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    updated_at: 'string',\r","    transaction: 'string',\r","    transaction_date: 'string',\r","    transaction_note: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the product_type object\r","pm.test(\"Product type has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.product_type, productTypeProperties);\r","    \r","    // Check metadata properties of the product_type object\r","    xerpaTestApi.checkObjectProperties(responseJson.product_type.metadata, metadataProperties);\r","});\r","\r","// Check properties of the merchant object\r","pm.test(\"Merchant has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.merchant, merchantProperties);\r","});\r","\r","// Check properties of the transaction_note object\r","pm.test(\"Transaction note has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.transaction_note, transactionNoteProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"b121f368-ed2d-48e6-9a3a-940b57313d59","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/user-rules-classification","description":"<p>Este endpoint permite <strong>obtener el listado completo de reglas de clasificación</strong> definidas por el usuario.</p>\n<h4 id=\"widgets\">Widgets</h4>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Autogestor-financiero-1ee7439960f080f8b0a9e7b3914b3173?source=copy_link\">Lista de reglas clasificación</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/1b68aae9-8344-4d6c-b1cc-c1beadce2066/aW1hZ2UucG5n\" alt height=\"699\" width=\"366\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/user-rules-classification/</code></p>\n</li>\n<li><p><strong>Parámetros de ruta:</strong></p>\n<ul>\n<li><code>user_id</code> (string, requerido): ID del usuario que desea consultar sus reglas.</li>\n</ul>\n</li>\n<li><p><strong>Parámetros de query:</strong></p>\n<ul>\n<li><p><code>page</code> (integer, opcional): Número de página para paginación de resultados.</p>\n</li>\n<li><p><code>page_size</code> (integer, opcional): Cantidad de resultados por página.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>Devuelve un objeto JSON que contiene información sobre las reglas de clasificación del usuario, con la siguiente estructura:</p>\n<p><code>results</code> (array): Arreglo de objetos que representan las reglas de clasificación, cada uno con los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador de la regla.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha de creación de la regla.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de la última actualización de la regla.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario al que pertenece la regla.</p>\n</li>\n<li><p><code>deleted_at</code> (string|null): Fecha de eliminación de la regla, si aplica.</p>\n</li>\n<li><p><code>rule_config</code> (object): Configuración de la regla que incluye:</p>\n<ul>\n<li><p><code>field</code> (string): Campo evaluado (por ejemplo, <code>description</code>, <code>amount</code>).</p>\n</li>\n<li><p><code>value</code> (string|number): Valor a comparar.</p>\n</li>\n<li><p><code>operator</code> (string): Operador de comparación.</p>\n</li>\n<li><p><code>target_category</code> (string): ID de la categoría objetivo.</p>\n</li>\n</ul>\n</li>\n<li><p><code>metadata</code> (object|null): Metadatos adicionales sobre la regla, si aplica.</p>\n</li>\n<li><p><code>user_pfm_actions_type</code> (string): Tipo de acción del usuario en relación a la regla.</p>\n</li>\n<li><p><code>user_rules_classification_status</code> (string): Estado de clasificación de la regla.</p>\n</li>\n</ul>\n<p>La respuesta también incluye información de paginación, como:</p>\n<ul>\n<li><p><code>next</code>(string or null): URL de la siguiente página</p>\n</li>\n<li><p><code>previous</code>(string or null): URL de la página anterior</p>\n</li>\n<li><p><code>total_pages</code>(number): Total de páginas disponibles</p>\n</li>\n<li><p><code>current_page</code>(number): Página actual</p>\n</li>\n<li><p><code>offset</code>(number): Índice de desplazamiento</p>\n</li>\n<li><p><code>count</code>(number): Total de elementos</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"next\": { \"type\": [\"string\", \"null\"], \"format\": \"uri\" },\n    \"previous\": { \"type\": [\"string\", \"null\"], \"format\": \"uri\" },\n    \"total_pages\": { \"type\": \"integer\", \"minimum\": 1 },\n    \"current_page\": { \"type\": \"integer\", \"minimum\": 1 },\n    \"offset\": { \"type\": \"integer\", \"minimum\": 0 },\n    \"count\": { \"type\": \"integer\", \"minimum\": 0 },\n    \"results\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n          \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"deleted_at\": { \"type\": [\"string\", \"null\"], \"format\": \"date-time\" },\n          \"rule_config\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"field\": { \"type\": \"string\" },\n              \"value\": { \"type\": \"string\" },\n              \"operator\": { \"type\": \"string\" },\n              \"target_category\": { \"type\": \"string\" }\n            }\n          },\n          \"metadata\": { \"type\": [\"object\", \"null\"] },\n          \"user_pfm_actions_type\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"user_rules_classification_status\": { \"type\": \"string\", \"format\": \"uuid\" }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","user-rules-classification"],"host":["{{host_app}}"],"query":[{"disabled":true,"key":"page","value":"1"},{"disabled":true,"key":"page_size","value":"1"}],"variable":[]}},"response":[{"id":"fce47761-3dbe-469d-88d2-0b0a3a17b75a","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/user-rules-classification?page=1&page_size=1","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","users","{{user_id}}","user-rules-classification"],"query":[{"key":"page","value":"1"},{"key":"page_size","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 21:52:34 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"663"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"68467771-7195-4ffd-b019-54f0a3a4839e"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LqL1eG86IAMEYng="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6840c022-67c496504b6e780657458ca0;Parent=0ec9db23641867c3;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"next\": \"/api-pfm/v1/pfm-service/users/7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e/user-rules-classification/?page=2&page_size=1\",\n    \"previous\": null,\n    \"total_pages\": 2,\n    \"current_page\": 1,\n    \"offset\": 0,\n    \"results\": [\n        {\n            \"id\": \"af6534d7-9caa-4870-a39f-5c3e5ab02e5e\",\n            \"created_at\": \"2025-06-04T21:49:00+0000\",\n            \"updated_at\": \"2025-06-04T21:49:00+0000\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"deleted_at\": null,\n            \"rule_config\": {\n                \"field\": \"description\",\n                \"value\": \"NETFLIX\",\n                \"operator\": \"contains\",\n                \"target_category\": \"entertainment\"\n            },\n            \"metadata\": null,\n            \"user_pfm_actions_type\": \"e0fbd653-f686-450a-89d6-4f50d247b67b\",\n            \"user_rules_classification_status\": \"17425297-5c11-4cf2-975e-38327df355b7\"\n        }\n    ],\n    \"count\": 2\n}"}],"_postman_id":"b121f368-ed2d-48e6-9a3a-940b57313d59"},{"name":"Obtener regla clasificación","event":[{"listen":"test","script":{"id":"ec6a0890-a38d-41af-a167-8685a317b03f","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    ignore_pfm: 'boolean',\r","    external_id: 'string',\r","    user_id: 'string',\r","    transaction_date: 'string',\r","    transaction_datetime: 'string',\r","    amount: 'string',\r","    description: 'string',\r","    category: 'string',\r","    user_note: { type: 'string', optional: true },\r","    product_type: 'object',\r","    exchange_rate: { type: 'string', optional: true },\r","    merchant: 'object',\r","    account_id: 'string',\r","    transaction_note: 'object',\r","    classified: 'boolean'\r","};\r","\r","const productTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","const merchantProperties = {\r","    id: 'string',\r","    name: 'string',\r","    logo_url: 'string'\r","};\r","\r","const transactionNoteProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    updated_at: 'string',\r","    transaction: 'string',\r","    transaction_date: 'string',\r","    transaction_note: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the product_type object\r","pm.test(\"Product type has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.product_type, productTypeProperties);\r","    \r","    // Check metadata properties of the product_type object\r","    xerpaTestApi.checkObjectProperties(responseJson.product_type.metadata, metadataProperties);\r","});\r","\r","// Check properties of the merchant object\r","pm.test(\"Merchant has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.merchant, merchantProperties);\r","});\r","\r","// Check properties of the transaction_note object\r","pm.test(\"Transaction note has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.transaction_note, transactionNoteProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"ff7202e8-f366-41ac-b441-995eb4d9bb52","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/user-rules-classification","description":"<p>Este endpoint recupera las reglas de clasificación asociadas a un usuario específico dentro del servicio de Gestión de Finanzas Personales (PFM). Proporciona información sobre cómo se categorizan y clasifican las transacciones del usuario con base en reglas predefinidas.</p>\n<h3 id=\"widgets\">Widgets</h3>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Autogestor-financiero-1ee7439960f080f8b0a9e7b3914b3173?source=copy_link\">Obtener regla clasificación</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/2e90bde2-08f4-45c6-a062-3731770a0668/aW1hZ2UucG5n\" alt height=\"731\" width=\"396\" />\n\n<hr />\n<h3 id=\"request\">Request</h3>\n<ul>\n<li><strong>Método:</strong> <code>GET</code><br />  <strong>URL:</strong> <code>{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/user-rules-classification</code></li>\n</ul>\n<p><strong>Parámetros de Ruta:</strong></p>\n<ul>\n<li><code>user_id</code> (string): El identificador único del usuario cuyas reglas de clasificación se desean consultar.</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>La respuesta será un objeto JSON que contiene los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único de la regla de clasificación.</p>\n</li>\n<li><p><code>ignore_pfm</code> (boolean): Indica si el servicio PFM debe ignorar esta regla.</p>\n</li>\n<li><p><code>external_id</code> (string): Identificador externo asociado a la regla.</p>\n</li>\n<li><p><code>user_id</code> (string): ID del usuario relacionado con la clasificación.</p>\n</li>\n<li><p><code>transaction_date</code> (string): Fecha de la transacción.</p>\n</li>\n<li><p><code>transaction_datetime</code> (string): Fecha y hora de la transacción.</p>\n</li>\n<li><p><code>amount</code> (string): Monto de la transacción.</p>\n</li>\n<li><p><code>description</code> (string): Descripción de la transacción.</p>\n</li>\n<li><p><code>category</code> (string): Categoría asignada a la transacción.</p>\n</li>\n<li><p><code>user_note</code> (string o null): Nota agregada por el usuario sobre la transacción.</p>\n</li>\n</ul>\n<p><strong>product_type</strong> (object): Objeto que contiene los detalles del tipo de producto, incluyendo:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único del tipo de producto.</p>\n</li>\n<li><p><code>catalog</code> (string): Catálogo al que pertenece el producto.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del tipo de producto.</p>\n</li>\n<li><p><code>metadata</code> (object): Metadatos adicionales del tipo de producto, incluyendo:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono asociado al tipo de producto.</p>\n</li>\n<li><p><code>color</code> (string): Representación de color del producto.</p>\n</li>\n<li><p><code>active</code> (boolean): Indica si el producto está activo.</p>\n</li>\n<li><p><code>short_name</code> (string): Nombre corto del tipo de producto.</p>\n</li>\n</ul>\n</li>\n<li><p><code>exchange_rate</code> (string o null): Tipo de cambio aplicable a la transacción, si existe.</p>\n</li>\n<li><p><code>merchant</code> (string o null): Comerciante asociado a la transacción, si aplica.</p>\n</li>\n<li><p><code>account_id</code> (string): ID de la cuenta relacionada con la transacción.</p>\n</li>\n<li><p><code>transaction_note</code> (string o null): Nota relacionada con la transacción.</p>\n</li>\n<li><p><code>classified</code> (boolean): Indica si la transacción ha sido clasificada de acuerdo con las reglas.</p>\n</li>\n</ul>\n<hr />\n<p>Este endpoint es esencial para comprender cómo se clasifican las transacciones de los usuarios, lo que permite una mejor gestión financiera y generación de reportes.</p>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","user-rules-classification"],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"e41f7697-b993-45d2-afe7-47f9f8961d5a","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/14956a01-f5ee-4ea3-be40-9f2fd33a84c6/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 15:05:09 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"771"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"3e4cbbd3-4cf7-44c0-98bb-2356dd423b7b"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cMe56EhgoAMEL_w="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b4dea5-2564bf58163d359467be85c2;Parent=3276b9e97db3029c;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"14956a01-f5ee-4ea3-be40-9f2fd33a84c6\",\n    \"ignore_pfm\": false,\n    \"external_id\": \"TRX_971\",\n    \"user_id\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n    \"transaction_date\": \"2024-08-05\",\n    \"transaction_datetime\": \"2024-08-05T00:00:00+0000\",\n    \"amount\": \"-950.51\",\n    \"description\": \"PAYU*PYU*UBER\",\n    \"category\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n    \"user_note\": null,\n    \"product_type\": {\n        \"id\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n        \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n        \"item_name\": \"cuenta_ahorro\",\n        \"description\": \"Cuenta Ahorro\",\n        \"metadata\": {\n            \"icon\": \"/assets/xerpa/global/img/categories/cuenta_ahorro.svg\",\n            \"color\": \"#7C2582\",\n            \"active\": true,\n            \"short_name\": \"CUENTAAHORRO\"\n        }\n    },\n    \"exchange_rate\": null,\n    \"merchant\": null,\n    \"account_id\": \"12bf0ea1-da88-445c-9c17-29edbd18510d\",\n    \"transaction_note\": null,\n    \"classified\": false\n}"},{"id":"e0e39816-71ec-4302-ac62-1373c215f23e","name":"Not Found","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/14956a01-f5ee-4ea3-be40-9f2fd33a84c7/"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 15:06:37 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"23"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"6f359098-1d85-40b4-82d8-e18d4bb06e70"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cMfHlEVYIAMEi0Q="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b4defd-7c085e9c76226ec9456419d2;Parent=1ba76fb239a01581;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Not found.\"\n}"}],"_postman_id":"ff7202e8-f366-41ac-b441-995eb4d9bb52"},{"name":"Crear Regla clasificación","event":[{"listen":"test","script":{"id":"ec6a0890-a38d-41af-a167-8685a317b03f","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    ignore_pfm: 'boolean',\r","    external_id: 'string',\r","    user_id: 'string',\r","    transaction_date: 'string',\r","    transaction_datetime: 'string',\r","    amount: 'string',\r","    description: 'string',\r","    category: 'string',\r","    user_note: { type: 'string', optional: true },\r","    product_type: 'object',\r","    exchange_rate: { type: 'string', optional: true },\r","    merchant: 'object',\r","    account_id: 'string',\r","    transaction_note: 'object',\r","    classified: 'boolean'\r","};\r","\r","const productTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","const merchantProperties = {\r","    id: 'string',\r","    name: 'string',\r","    logo_url: 'string'\r","};\r","\r","const transactionNoteProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    updated_at: 'string',\r","    transaction: 'string',\r","    transaction_date: 'string',\r","    transaction_note: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the product_type object\r","pm.test(\"Product type has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.product_type, productTypeProperties);\r","    \r","    // Check metadata properties of the product_type object\r","    xerpaTestApi.checkObjectProperties(responseJson.product_type.metadata, metadataProperties);\r","});\r","\r","// Check properties of the merchant object\r","pm.test(\"Merchant has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.merchant, merchantProperties);\r","});\r","\r","// Check properties of the transaction_note object\r","pm.test(\"Transaction note has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.transaction_note, transactionNoteProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"cec5aba5-75d8-4a4d-822b-783af1d9284c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"rule_config\": {\r\n        \"field\": \"description\",\r\n        \"operator\": \"contains\",\r\n        \"value\": \"NETFLIX\",\r\n        \"target_category\": \"entertainment\"\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/user-rules-classification","description":"<p>Este endpoint permite <strong>crear una nueva regla de clasificación personalizada</strong> para un usuario específico en el sistema de gestión de finanzas personales (PFM). La regla se basa en un campo específico y un valor que se desea clasificar en una categoría determinada.</p>\n<h4 id=\"widgets\">Widgets</h4>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Autogestor-financiero-1ee7439960f080f8b0a9e7b3914b3173?source=copy_link\">Crear regla clasificación</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/6f313ca4-4b56-4c01-b6f7-e4269ea128e2/aW1hZ2UucG5n\" alt height=\"731\" width=\"396\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>POST</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> {{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/user-rules-classification</p>\n</li>\n<li><p><strong>Parámetros de ruta:</strong></p>\n<ul>\n<li><code>user_id</code> (string, requerido): ID del usuario que desea consultar sus reglas.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>El cuerpo de la solicitud debe contener los siguientes parámetros en formato JSON:</p>\n<ul>\n<li><p><strong>rule_config</strong> (objeto): Configuración de la regla de clasificación.</p>\n<ul>\n<li><p><strong>field</strong> (string): El campo sobre el cual se aplica la regla (ej. \"description\").</p>\n</li>\n<li><p><strong>operator</strong> (string): El operador que se utiliza para la comparación (ej. \"contains\").</p>\n</li>\n<li><p><strong>value</strong> (string): El valor que se busca en el campo especificado (ej. \"NETFLIX\").</p>\n</li>\n<li><p><strong>target_category</strong> (string): La categoría a la que se asignará el valor si la regla se cumple (ej. \"entertainment\").</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body-example\">Request Body Example</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"rule_config\": {\n    \"field\": \"description\",\n    \"operator\": \"contains\",\n    \"value\": \"NETFLIX\",\n    \"target_category\": \"entertainment\"\n  }\n}\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<p>Al realizar la solicitud, se espera una respuesta en formato JSON con la siguiente estructura:</p>\n<ul>\n<li><p><strong>id</strong> (string): Identificador único de la regla creada.</p>\n</li>\n<li><p><strong>created_at</strong> (string): Fecha y hora en que se creó la regla.</p>\n</li>\n<li><p><strong>updated_at</strong> (string): Fecha y hora de la última actualización de la regla.</p>\n</li>\n<li><p><strong>user_id</strong> (string): Identificador del usuario al que pertenece la regla.</p>\n</li>\n<li><p><strong>deleted_at</strong> (null o string): Fecha y hora en que se eliminó la regla, si aplica.</p>\n</li>\n<li><p><strong>rule_config</strong> (objeto): Configuración de la regla creada.</p>\n<ul>\n<li><p><strong>field</strong> (string): Campo utilizado en la regla.</p>\n</li>\n<li><p><strong>operator</strong> (string): Operador utilizado en la regla.</p>\n</li>\n<li><p><strong>value</strong> (string): Valor utilizado en la regla.</p>\n</li>\n<li><p><strong>target_category</strong> (string): Categoría asignada a la regla.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>metadata</strong> (object or null): Información adicional (si aplica).</p>\n</li>\n<li><p><strong>user_pfm_actions_type</strong> (string): Tipo de acción del usuario en el PFM.</p>\n</li>\n<li><p><strong>user_rules_classification_status</strong> (string): Estado de la clasificación de la regla del usuario.</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"deleted_at\": { \"type\": [\"string\", \"null\"], \"format\": \"date-time\" },\n    \"rule_config\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"field\": { \"type\": \"string\", \"enum\": [\"description\", \"amount\", \"merchant\"] },\n        \"operator\": { \"type\": \"string\", \"enum\": [\"contains\", \"equals\", \"starts_with\", \"ends_with\"] },\n        \"value\": { \"type\": \"string\" },\n        \"target_category\": { \"type\": \"string\" }\n      },\n      \"required\": [\"field\", \"operator\", \"value\", \"target_category\"]\n    },\n    \"metadata\": { \"type\": [\"object\", \"null\"] },\n    \"user_pfm_actions_type\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"user_rules_classification_status\": { \"type\": \"string\", \"format\": \"uuid\" }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","user-rules-classification"],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"0f706be0-a297-4063-b14c-b14ab63de6e9","name":"Successful Response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"rule_config\": {\r\n        \"field\": \"description\",\r\n        \"operator\": \"contains\",\r\n        \"value\": \"NETFLIX\",\r\n        \"target_category\": \"entertainment\"\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/user-rules-classification"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 21:55:53 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"457"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"4c64ada4-c037-4c36-a2ee-d0984300d496"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LqMUbEuYoAMEHCQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6840c0e8-244fddfb75662b707185dd2d;Parent=50179f878baffcb6;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"98b6d3a1-4575-4756-a2b2-c555a620fc7d\",\n    \"created_at\": \"2025-06-04T21:55:53+0000\",\n    \"updated_at\": \"2025-06-04T21:55:53+0000\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"deleted_at\": null,\n    \"rule_config\": {\n        \"field\": \"description\",\n        \"operator\": \"contains\",\n        \"value\": \"NETFLIX\",\n        \"target_category\": \"entertainment\"\n    },\n    \"metadata\": null,\n    \"user_pfm_actions_type\": \"e0fbd653-f686-450a-89d6-4f50d247b67b\",\n    \"user_rules_classification_status\": \"17425297-5c11-4cf2-975e-38327df355b7\"\n}"},{"id":"ce9bd7ec-e2aa-4245-a544-cc7019744dec","name":"Not Found","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/14956a01-f5ee-4ea3-be40-9f2fd33a84c7/"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 15:06:37 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"23"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"6f359098-1d85-40b4-82d8-e18d4bb06e70"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cMfHlEVYIAMEi0Q="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b4defd-7c085e9c76226ec9456419d2;Parent=1ba76fb239a01581;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Not found.\"\n}"}],"_postman_id":"cec5aba5-75d8-4a4d-822b-783af1d9284c"},{"name":"Editar regla clasificación","event":[{"listen":"test","script":{"id":"ec6a0890-a38d-41af-a167-8685a317b03f","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    ignore_pfm: 'boolean',\r","    external_id: 'string',\r","    user_id: 'string',\r","    transaction_date: 'string',\r","    transaction_datetime: 'string',\r","    amount: 'string',\r","    description: 'string',\r","    category: 'string',\r","    user_note: { type: 'string', optional: true },\r","    product_type: 'object',\r","    exchange_rate: { type: 'string', optional: true },\r","    merchant: 'object',\r","    account_id: 'string',\r","    transaction_note: 'object',\r","    classified: 'boolean'\r","};\r","\r","const productTypeProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","const merchantProperties = {\r","    id: 'string',\r","    name: 'string',\r","    logo_url: 'string'\r","};\r","\r","const transactionNoteProperties = {\r","    id: 'string',\r","    user_id: 'string',\r","    updated_at: 'string',\r","    transaction: 'string',\r","    transaction_date: 'string',\r","    transaction_note: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the product_type object\r","pm.test(\"Product type has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.product_type, productTypeProperties);\r","    \r","    // Check metadata properties of the product_type object\r","    xerpaTestApi.checkObjectProperties(responseJson.product_type.metadata, metadataProperties);\r","});\r","\r","// Check properties of the merchant object\r","pm.test(\"Merchant has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.merchant, merchantProperties);\r","});\r","\r","// Check properties of the transaction_note object\r","pm.test(\"Transaction note has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.transaction_note, transactionNoteProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"110d1650-c439-4cc8-81e3-5969ca82be89","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"rule_config\": {\r\n        \"field\": \"description\",\r\n        \"operator\": \"contains\",\r\n        \"value\": \"NETFLIX\",\r\n        \"target_category\": \"entertainment\"\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/user-rules-classification","description":"<p>Esta solicitud permite <strong>crear una nueva clasificación de reglas para un usuario</strong> en el sistema. Se utiliza para definir cómo se deben clasificar las transacciones del usuario basándose en ciertas reglas configuradas.</p>\n<h4 id=\"widgets\">Widgets</h4>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Autogestor-financiero-1ee7439960f080f8b0a9e7b3914b3173?source=copy_link\">Editar de reglas clasificación</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/b145548b-7de0-4a30-a534-a927909d6ea4/aW1hZ2UucG5n\" alt height=\"375\" width=\"365\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>POST</code></p>\n</li>\n<li><p><strong>Endpoint:</strong> {{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/user-rules-</p>\n</li>\n<li><p><strong>Parámetros de ruta:</strong></p>\n<ul>\n<li><code>user_id</code> (string, requerido): ID del usuario que desea consultar sus reglas.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>El cuerpo de la solicitud debe contener los siguientes parámetros en formato JSON:</p>\n<ul>\n<li><p><strong>rule_config</strong> (objeto): Configuración de la regla de clasificación.</p>\n<ul>\n<li><p><strong>field</strong> (string): El campo sobre el cual se aplica la regla (ej. \"description\").</p>\n</li>\n<li><p><strong>operator</strong> (string): El operador que se utiliza para la comparación (ej. \"contains\").</p>\n</li>\n<li><p><strong>value</strong> (string): El valor que se busca en el campo especificado (ej. \"NETFLIX\").</p>\n</li>\n<li><p><strong>target_category</strong> (string): La categoría a la que se asignará el valor si la regla se cumple (ej. \"entertainment\").</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body-example\">Request Body Example</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"rule_config\": {\n    \"field\": \"description\",\n    \"operator\": \"contains\",\n    \"value\": \"NETFLIX\",\n    \"target_category\": \"entertainment\"\n  }\n}\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<p>Al realizar la solicitud, se espera una respuesta en formato JSON con la siguiente estructura:</p>\n<ul>\n<li><p><strong>id</strong> (string): Identificador único de la regla creada.</p>\n</li>\n<li><p><strong>created_at</strong> (string): Fecha y hora en que se creó la regla.</p>\n</li>\n<li><p><strong>updated_at</strong> (string): Fecha y hora de la última actualización de la regla.</p>\n</li>\n<li><p><strong>user_id</strong> (string): Identificador del usuario al que pertenece la regla.</p>\n</li>\n<li><p><strong>deleted_at</strong> (null o string): Fecha y hora en que se eliminó la regla, si aplica.</p>\n</li>\n<li><p><strong>rule_config</strong> (objeto): Configuración de la regla creada.</p>\n<ul>\n<li><p><strong>field</strong> (string): Campo utilizado en la regla.</p>\n</li>\n<li><p><strong>operator</strong> (string): Operador utilizado en la regla.</p>\n</li>\n<li><p><strong>value</strong> (string): Valor utilizado en la regla.</p>\n</li>\n<li><p><strong>target_category</strong> (string): Categoría asignada a la regla.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>metadata</strong> (object or null): Información adicional (si aplica).</p>\n</li>\n<li><p><strong>user_pfm_actions_type</strong> (string): Tipo de acción del usuario en el PFM.</p>\n</li>\n<li><p><strong>user_rules_classification_status</strong> (string): Estado de la clasificación de la regla del usuario.</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n    \"user_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"deleted_at\": { \"type\": [\"string\", \"null\"], \"format\": \"date-time\" },\n    \"rule_config\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"field\": { \"type\": \"string\", \"enum\": [\"description\", \"amount\", \"merchant\"] },\n        \"operator\": { \"type\": \"string\", \"enum\": [\"contains\", \"equals\", \"starts_with\", \"ends_with\"] },\n        \"value\": { \"type\": \"string\" },\n        \"target_category\": { \"type\": \"string\" }\n      },\n      \"required\": [\"field\", \"operator\", \"value\", \"target_category\"]\n    },\n    \"metadata\": { \"type\": [\"object\", \"null\"] },\n    \"user_pfm_actions_type\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"user_rules_classification_status\": { \"type\": \"string\", \"format\": \"uuid\" }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","users","{{user_id}}","user-rules-classification"],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"80bf64a5-bf93-439b-8ce9-2e96de3e2a7f","name":"Successful Response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"rule_config\": {\r\n        \"field\": \"description\",\r\n        \"operator\": \"contains\",\r\n        \"value\": \"NETFLIX\",\r\n        \"target_category\": \"entertainment\"\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/pfm-service/users/{{user_id}}/user-rules-classification"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 04 Jun 2025 22:03:44 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"457"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"0955cacc-667c-4d33-b4a4-4157e272c08c"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LqNeLG-TIAMEbCg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-6840c2c0-7293879e720b77042c51f444;Parent=1d26a75665a8be63;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"2d9c5b7d-a471-4207-b6a6-9b202ff6b294\",\n    \"created_at\": \"2025-06-04T22:03:44+0000\",\n    \"updated_at\": \"2025-06-04T22:03:44+0000\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"deleted_at\": null,\n    \"rule_config\": {\n        \"field\": \"description\",\n        \"operator\": \"contains\",\n        \"value\": \"NETFLIX\",\n        \"target_category\": \"entertainment\"\n    },\n    \"metadata\": null,\n    \"user_pfm_actions_type\": \"e0fbd653-f686-450a-89d6-4f50d247b67b\",\n    \"user_rules_classification_status\": \"17425297-5c11-4cf2-975e-38327df355b7\"\n}"},{"id":"0443a24c-478e-43e0-aa03-b478ab1cf48c","name":"Not Found","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/transactions/14956a01-f5ee-4ea3-be40-9f2fd33a84c7/"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 08 Aug 2024 15:06:37 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"23"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"6f359098-1d85-40b4-82d8-e18d4bb06e70"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cMfHlEVYIAMEi0Q="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b4defd-7c085e9c76226ec9456419d2;Parent=1ba76fb239a01581;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Not found.\"\n}"}],"_postman_id":"110d1650-c439-4cc8-81e3-5969ca82be89"}],"id":"a68c25dc-4b70-41e4-8b32-a5dc9427cf17","description":"<h3 id=\"🧠-reglas-personalizadas-de-clasificación\">🧠 Reglas personalizadas de clasificación</h3>\n<p>La carpeta <strong>UserRulesClassification</strong> contiene los endpoints necesarios para que los usuarios puedan <strong>crear, consultar, editar o eliminar reglas personalizadas de clasificación de transacciones</strong>. Estas reglas permiten que el usuario influya directamente en la lógica de categorización del sistema, sobreescribiendo o complementando los resultados del motor de Machine Learning.</p>\n<p>Este sistema de reglas es ejecutado como una segunda capa de decisión y permite una experiencia más precisa, adaptable y alineada a las preferencias personales o contables del usuario.</p>\n<hr />\n<h4 id=\"📌-funcionalidades-incluidas\">📌 Funcionalidades incluidas</h4>\n<p>Los endpoints de esta carpeta permiten:</p>\n<ul>\n<li><p>Listar todas las reglas activas de un usuario.</p>\n</li>\n<li><p>Consultar el detalle de una regla específica.</p>\n</li>\n<li><p>Crear nuevas reglas con condiciones definidas (por descripción, monto, etc.).</p>\n</li>\n<li><p>Editar reglas existentes.</p>\n</li>\n<li><p>Eliminar reglas de forma lógica (soft delete).</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"⚙️-cómo-funciona-una-regla\">⚙️ Cómo funciona una regla</h4>\n<p>Una regla está compuesta por:</p>\n<ul>\n<li><p><code>field</code>: Campo sobre el cual se aplica la condición (ej. <code>description</code>).</p>\n</li>\n<li><p><code>value</code>: Valor a evaluar (ej. <code>\"Spotify\"</code>).</p>\n</li>\n<li><p><code>action</code>: Acción a realizar si se cumple la condición (ej. <code>set_category</code>).</p>\n</li>\n<li><p><code>category_id</code>: Categoría a asignar si aplica.</p>\n</li>\n<li><p><code>active</code>: Estado de la regla.</p>\n</li>\n</ul>\n<p>Las reglas pueden aplicar a transacciones nuevas o recategorizadas manualmente, según la lógica de implementación.</p>\n<hr />\n<h4 id=\"🧠-casos-de-uso-comunes\">🧠 Casos de uso comunes</h4>\n<ul>\n<li><p>Clasificar automáticamente suscripciones específicas (ej. <code>\"Netflix\"</code> → <code>Entretenimiento</code>).</p>\n</li>\n<li><p>Asignar categorías específicas a cargos frecuentes de montos conocidos.</p>\n</li>\n<li><p>Corregir errores comunes del clasificador automático con intervención del usuario.</p>\n</li>\n<li><p>Aplicar lógica contable personal o corporativa.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🔐-seguridad\">🔐 Seguridad</h4>\n<ul>\n<li><p>Todas las operaciones requieren autenticación.</p>\n</li>\n<li><p>Las reglas solo pueden ser gestionadas por el usuario al que pertenecen.</p>\n</li>\n<li><p>La validación del campo, tipo de acción y valores es realizada por el backend.</p>\n</li>\n</ul>\n","_postman_id":"a68c25dc-4b70-41e4-8b32-a5dc9427cf17"},{"name":"Catálogos gastos","item":[{"name":"Catálogos de gastos disponibles","item":[{"name":"Categorías de ingreso","event":[{"listen":"test","script":{"id":"299ec8c8-53e5-49b7-8cf4-2bc26bdc70e2","exec":[" const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    catalog_name: 'string',\r","    description: 'string',\r","    items: 'array'\r","};\r","\r","const itemProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties within the items array of the first catalog\r","pm.test(\"Items have expected properties with correct types\", () => {\r","    if (responseJson[0].items && responseJson[0].items.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0], itemProperties);\r","        \r","        // Check metadata properties of the first item\r","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0].metadata, metadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"84071bf8-ff92-43a3-9d97-28c36ad2b048","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/catalogs-items/?catalog=incomes_categories","description":"<p>El endpoint entrega una lista de categorías de ingresos del catálogo. Permite a obtener información detallada sobre cada categoría, incluyendo los items asociados y sus metadatos.</p>\n<p>Este catálogo no permite agregar o quitar items, solo se puede modificar su metadata.</p>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-pfm/v1/pfm-service/catalogs-items/</p>\n</li>\n<li><p>Parámetros de query:</p>\n<ul>\n<li><p><code>catalog</code>(string): Id del catalogo que se desea consultar. Este puede tomar los valores:</p>\n<ul>\n<li><p>\"incomes_categories\": Categorias de ingresos.</p>\n</li>\n<li><p>\"expenses_categories\": Categorias de gastos</p>\n</li>\n<li><p>\"accounts_types\": Tipo de categoria</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta es un arreglo de categorias que se presentan como un objeto con sus respectivas propiedades</p>\n<ul>\n<li><p><code>id</code>(string): ID del catalogo.</p>\n</li>\n<li><p><code>catalog_name</code>(string): Nombre del catalogo.</p>\n</li>\n<li><p><code>description</code>(string): Descripcion del catalogo.</p>\n</li>\n<li><p><code>items</code>(array of objects): Lista de ítems pertenecientes al catálogo consultado, donde cada uno incluye:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único del ítem.</p>\n</li>\n<li><p><code>catalog</code> (string): Nombre del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Clave técnica o interna del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción legible del ítem.</p>\n</li>\n<li><p><code>metadata</code> (object): Metadatos adicionales, como:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono asociado.</p>\n</li>\n<li><p><code>title</code> (string): Título para interfaces gráficas.</p>\n</li>\n<li><p><code>message</code> (object): Mensajes contextualizados por canal o lenguaje (<code>A</code>, <code>E</code>, <code>G</code>, etc.).</p>\n</li>\n<li><p>Otros campos personalizados según el catálogo.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\"><strong>Response Format</strong></h4>\n<p>Para la informacion de cada categoria se mantiene el siguiente formato:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"item_name\": { \"type\": \"string\" },\n    \"description\": { \"type\": \"string\" },\n    \"metadata\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"bg\": { \"type\": \"string\" },\n        \"icon\": { \"type\": \"string\" },\n        \"name\": { \"type\": \"string\" },\n        \"color\": { \"type\": \"string\" },\n        \"active\": { \"type\": \"boolean\" },\n        \"short_name\": { \"type\": \"string\" },\n        \"color_class\": { \"type\": \"string\" },\n        \"description\": { \"type\": \"string\" },\n        \"icon_ignore\": { \"type\": \"string\" },\n        \"icon_primary\": { \"type\": \"string\" }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","catalogs-items",""],"host":["{{host_app}}"],"query":[{"description":{"content":"<p>incomes_categories, expenses_categories, accounts_types</p>\n","type":"text/plain"},"key":"catalog","value":"incomes_categories"}],"variable":[]}},"response":[{"id":"06979dd7-d5e4-4134-990a-e5727ffedc38","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/catalogs-items/?catalog=incomes_categories","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","catalogs-items",""],"query":[{"key":"paginate","value":"true","disabled":true},{"key":"page","value":"1","type":"text","disabled":true},{"key":"page_size","value":"1","type":"text","disabled":true},{"key":"catalog","value":"incomes_categories"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 18:52:41 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"17897"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"8b0036fc-d038-4a78-a6e6-07901e67429b"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cJtS9HflIAMELrA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3c279-1e14b50207b555c73a555e33;Parent=7e9f95efc2eaeb5e;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"incomes_categories\": [\n        {\n            \"id\": \"e131ca4e-28d2-48fc-ab73-ea92e48b084f\",\n            \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n            \"item_name\": \"Rendimientos\",\n            \"description\": \"Pago de dividendos e intereses ganados\",\n            \"metadata\": {\n                \"bg\": \"#E5F0E0\",\n                \"icon\": \"/assets/xerpa/global/img/categories/inc_rendimientos.svg\",\n                \"name\": \"Rendimientos\",\n                \"color\": \"#4D9932\",\n                \"active\": true,\n                \"short_name\": \"INCRENDIMIENTOS\",\n                \"color_class\": \"cat-inc-rendimientos\",\n                \"description\": \"Intereses y pago de dividendos\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_rendimientos_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_rendimientos_primary.svg\"\n            }\n        },\n        {\n            \"id\": \"3954361d-ddf5-46dc-a8f8-af98ee9811da\",\n            \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n            \"item_name\": \"Sueldo\",\n            \"description\": \"Sueldos, salarios, honorarios e ingresos por trabajo\",\n            \"metadata\": {\n                \"bg\": \"#E6F9F5\",\n                \"icon\": \"/assets/xerpa/global/img/categories/inc_sueldo.svg\",\n                \"name\": \"Ingresos\",\n                \"color\": \"#01C38E\",\n                \"active\": true,\n                \"short_name\": \"INCSUELDO\",\n                \"color_class\": \"cat-inc-sueldo\",\n                \"description\": \"Salarios, honorarios y por contrato\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_sueldo_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_sueldo_primary.svg\"\n            }\n        },\n        {\n            \"id\": \"8ebba319-0042-41ff-bdbb-ba05cd824d52\",\n            \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n            \"item_name\": \"Transferencias\",\n            \"description\": \"Transferencias, depósitos y reembolsos recibidos\",\n            \"metadata\": {\n                \"bg\": \"#E3EFE9\",\n                \"icon\": \"/assets/xerpa/global/img/categories/inc_transferencias.svg\",\n                \"name\": \"Depósitos y Transferencias\",\n                \"color\": \"#40916C\",\n                \"active\": true,\n                \"short_name\": \"INCTRANSFERENCIAS\",\n                \"color_class\": \"cat-inc-trasferencias\",\n                \"description\": \"Transferencias, depósitos y reembolsos\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_transferencias_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_transferencias_primary.svg\"\n            }\n        },\n        {\n            \"id\": \"593cea05-8f4d-4b40-ad1b-d73e43c8d53d\",\n            \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n            \"item_name\": \"Devolución de impuestos\",\n            \"description\": \"Devoluciones del Servicio de Impuestos Internos\",\n            \"metadata\": {\n                \"bg\": \"#DFF1E3\",\n                \"icon\": \"/assets/xerpa/global/img/categories/inc_devolucion.svg\",\n                \"name\": \"Devolución de impuestos\",\n                \"color\": \"#25A244\",\n                \"active\": true,\n                \"short_name\": \"INCDEVOLUCION\",\n                \"color_class\": \"cat-inc-devolucion\",\n                \"description\": \"Reembolso o reducción de impuestos\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_devolucion_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_devolucion_primary.svg\"\n            }\n        },\n        {\n            \"id\": \"5f342655-bf27-4523-aa32-40d7cb48ae38\",\n            \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n            \"item_name\": \"Subvención\",\n            \"description\": \"Pensión, becas, subvención y ayudas familiares\",\n            \"metadata\": {\n                \"bg\": \"#E4EBE2\",\n                \"icon\": \"/assets/xerpa/global/img/categories/inc_subvencion.svg\",\n                \"name\": \"Subvención y Pensión\",\n                \"color\": \"#47783F\",\n                \"active\": true,\n                \"short_name\": \"INCSUBVENCION\",\n                \"color_class\": \"cat-inc-subvencion\",\n                \"description\": \"Pensión y ayuda económica\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_subvencion_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_subvencion_primary.svg\"\n            }\n        },\n        {\n            \"id\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b2\",\n            \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n            \"item_name\": \"Rentas y arriendos\",\n            \"description\": \"Ingresos por arriendos de muebles e inmuebles\",\n            \"metadata\": {\n                \"bg\": \"#D9EFE9\",\n                \"icon\": \"/assets/xerpa/global/img/categories/inc_rentas.svg\",\n                \"name\": \"Rentas y Arriendos\",\n                \"color\": \"#01936C\",\n                \"active\": true,\n                \"short_name\": \"INCRENTAS\",\n                \"color_class\": \"cat-inc-rentas\",\n                \"description\": \"Arriendo de muebles e inmuebles\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_rentas_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_rentas_primary.svg\"\n            }\n        },\n        {\n            \"id\": \"763d39ca-45e8-4171-8a97-29ba9a37665c\",\n            \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n            \"item_name\": \"Regalos y otros ingresos\",\n            \"description\": \"Regalos hechos por transferencias y otros ingresos\",\n            \"metadata\": {\n                \"bg\": \"#E7F0E8\",\n                \"icon\": \"/assets/xerpa/global/img/categories/inc_regalos.svg\",\n                \"name\": \"Regalos y otros ingresos\",\n                \"color\": \"#5C9961\",\n                \"active\": true,\n                \"short_name\": \"INCREGALOS\",\n                \"color_class\": \"cat-inc-regalos\",\n                \"description\": \"Otros tipos de ingresos\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_regalos_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_regalos_primary.svg\"\n            }\n        }\n    ]\n}"}],"_postman_id":"84071bf8-ff92-43a3-9d97-28c36ad2b048"},{"name":"Categorías de egreso","event":[{"listen":"test","script":{"id":"299ec8c8-53e5-49b7-8cf4-2bc26bdc70e2","exec":[" const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    catalog_name: 'string',\r","    description: 'string',\r","    items: 'array'\r","};\r","\r","const itemProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties within the items array of the first catalog\r","pm.test(\"Items have expected properties with correct types\", () => {\r","    if (responseJson[0].items && responseJson[0].items.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0], itemProperties);\r","        \r","        // Check metadata properties of the first item\r","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0].metadata, metadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"d57176a9-486c-4074-99e9-74f816955a4c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/catalogs-items/?catalog=expenses_categories","description":"<p>El endpoint entrega una lista de categorías de gastos del catálogo. Permite a obtener información detallada sobre cada categoría, incluyendo los items asociados y sus metadatos.</p>\n<p>Este catálogo no permite agregar o quitar items, sólo se pueden modficar la información de su metadata.</p>\n<h4 id=\"widgets\">Widgets</h4>\n<ol>\n<li><a href=\"https://www.notion.so/getxerpa/Detalle-transacci-n-21e7439960f080b28fbdcc65871f6ad9?source=copy_link#2247439960f080b99bc6f1b214876f84\">Detalle categoría, mostrar categorías de egresos</a></li>\n</ol>\n<img src=\"https://content.pstmn.io/8d03e30d-20a6-425c-a68e-79e8fafe94ab/aW1hZ2UucG5n\" width=\"396\" height=\"651\" />\n\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-pfm/v1/pfm-service/catalogs-items/</p>\n</li>\n<li><p>Parámetros de query:</p>\n<ul>\n<li><p><code>catalog</code>(string): Id del catalogo que se desea consultar. Este puede tomar los valores:</p>\n<ul>\n<li><p>\"incomes_categories\": Categorias de ingresos.</p>\n</li>\n<li><p>\"expenses_categories\": Categorias de gastos</p>\n</li>\n<li><p>\"accounts_types\": Tipo de categoria</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta es un arreglo de categorias de diccionarios, en donde cada categoria contiene otro arreglo que agrupa los catalogos, los cuales contien:</p>\n<ul>\n<li><p><code>id</code>(string): ID del catalogo.</p>\n</li>\n<li><p><code>catalog_name</code>(string): Nombre del catalogo.</p>\n</li>\n<li><p><code>description</code>(string): Descripcion del catalogo.</p>\n</li>\n<li><p><code>items</code>(array of objects): Lista de ítems pertenecientes al catálogo consultado, donde cada uno incluye:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único del ítem.</p>\n</li>\n<li><p><code>catalog</code> (string): Nombre del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Clave técnica o interna del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción legible del ítem.</p>\n</li>\n<li><p><code>metadata</code> (object): Metadatos adicionales, como:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono asociado.</p>\n</li>\n<li><p><code>title</code> (string): Título para interfaces gráficas.</p>\n</li>\n<li><p><code>message</code> (object): Mensajes contextualizados por canal o lenguaje (<code>A</code>, <code>E</code>, <code>G</code>, etc.).</p>\n</li>\n<li><p>Otros campos personalizados según el catálogo.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\"><strong>Response Format</strong></h4>\n<p>Para la informacion de cada categoria se mantiene el siguiente formato:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"item_name\": { \"type\": \"string\" },\n    \"description\": { \"type\": \"string\" },\n    \"metadata\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"bg\": { \"type\": \"string\" },\n        \"icon\": { \"type\": \"string\" },\n        \"name\": { \"type\": \"string\" },\n        \"color\": { \"type\": \"string\" },\n        \"active\": { \"type\": \"boolean\" },\n        \"short_name\": { \"type\": \"string\" },\n        \"color_class\": { \"type\": \"string\" },\n        \"description\": { \"type\": \"string\" },\n        \"icon_ignore\": { \"type\": \"string\" },\n        \"icon_primary\": { \"type\": \"string\" }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","catalogs-items",""],"host":["{{host_app}}"],"query":[{"description":{"content":"<p>incomes_categories, expenses_categories, accounts_types</p>\n","type":"text/plain"},"key":"catalog","value":"expenses_categories"}],"variable":[]}},"response":[{"id":"b04a740c-b6d2-49f4-b184-f3a0d2af47a9","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/catalogs/","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","catalogs",""],"query":[{"key":"paginate","value":"true","disabled":true},{"key":"page","value":"1","type":"text","disabled":true},{"key":"page_size","value":"1","type":"text","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 18:52:41 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"17897"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"8b0036fc-d038-4a78-a6e6-07901e67429b"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cJtS9HflIAMELrA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3c279-1e14b50207b555c73a555e33;Parent=7e9f95efc2eaeb5e;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n        \"catalog_name\": \"incomes_categories\",\n        \"description\": \"Categorías de ingresos\",\n        \"items\": [\n            {\n                \"id\": \"e131ca4e-28d2-48fc-ab73-ea92e48b084f\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Rendimientos\",\n                \"description\": \"Pago de dividendos e intereses ganados\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_rendimientos.svg\",\n                    \"name\": \"Rendimientos\",\n                    \"color\": \"#4D9932\",\n                    \"active\": true,\n                    \"short_name\": \"INCRENDIMIENTOS\",\n                    \"color_class\": \"cat-inc-rendimientos\",\n                    \"description\": \"Intereses y pago de dividendos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_rendimientos_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_rendimientos_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"3954361d-ddf5-46dc-a8f8-af98ee9811da\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Sueldo\",\n                \"description\": \"Sueldos, salarios, honorarios e ingresos por trabajo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_sueldo.svg\",\n                    \"name\": \"Ingresos\",\n                    \"color\": \"#01C38E\",\n                    \"active\": true,\n                    \"short_name\": \"INCSUELDO\",\n                    \"color_class\": \"cat-inc-sueldo\",\n                    \"description\": \"Salarios, honorarios y por contrato\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_sueldo_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_sueldo_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"763d39ca-45e8-4171-8a97-29ba9a37665c\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Regalos y otros ingresos\",\n                \"description\": \"Regalos hechos por transferencias y otros ingresos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_regalos.svg\",\n                    \"name\": \"Regalos y otros ingresos\",\n                    \"color\": \"#5C9961\",\n                    \"active\": true,\n                    \"short_name\": \"INCREGALOS\",\n                    \"color_class\": \"cat-inc-regalos\",\n                    \"description\": \"Otros tipos de ingresos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_regalos_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_regalos_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"8ebba319-0042-41ff-bdbb-ba05cd824d52\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Transferencias\",\n                \"description\": \"Transferencias, depósitos y reembolsos recibidos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_transferencias.svg\",\n                    \"name\": \"Depósitos y Transferencias\",\n                    \"color\": \"#40916C\",\n                    \"active\": true,\n                    \"short_name\": \"INCTRANSFERENCIAS\",\n                    \"color_class\": \"cat-inc-trasferencias\",\n                    \"description\": \"Transferencias, depósitos y reembolsos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_transferencias_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_transferencias_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"593cea05-8f4d-4b40-ad1b-d73e43c8d53d\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Devolución de impuestos\",\n                \"description\": \"Devoluciones del Servicio de Impuestos Internos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_devolucion.svg\",\n                    \"name\": \"Devolución de impuestos\",\n                    \"color\": \"#25A244\",\n                    \"active\": true,\n                    \"short_name\": \"INCDEVOLUCION\",\n                    \"color_class\": \"cat-inc-devolucion\",\n                    \"description\": \"Reembolso o reducción de impuestos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_devolucion_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_devolucion_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"5f342655-bf27-4523-aa32-40d7cb48ae38\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Subvención\",\n                \"description\": \"Pensión, becas, subvención y ayudas familiares\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_subvencion.svg\",\n                    \"name\": \"Subvención y Pensión\",\n                    \"color\": \"#47783F\",\n                    \"active\": true,\n                    \"short_name\": \"INCSUBVENCION\",\n                    \"color_class\": \"cat-inc-subvencion\",\n                    \"description\": \"Pensión y ayuda económica\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_subvencion_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_subvencion_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b2\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Rentas y arriendos\",\n                \"description\": \"Ingresos por arriendos de muebles e inmuebles\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_rentas.svg\",\n                    \"name\": \"Rentas y Arriendos\",\n                    \"color\": \"#01936C\",\n                    \"active\": true,\n                    \"short_name\": \"INCRENTAS\",\n                    \"color_class\": \"cat-inc-rentas\",\n                    \"description\": \"Arriendo de muebles e inmuebles\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_rentas_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_rentas_primary.svg\"\n                }\n            }\n        ]\n    },\n    {\n        \"id\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n        \"catalog_name\": \"expenses_categories\",\n        \"description\": \"Categorías de egresos\",\n        \"items\": [\n            {\n                \"id\": \"bf50dc35-43d0-4f60-9860-770b8afc96f4\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Ignorar\",\n                \"description\": \"Transacciones que no quieres que se agreguen a una categoría\",\n                \"metadata\": {\n                    \"icon\": \"/assets/img/category/ignore.svg\",\n                    \"color\": \"#CFA7DC\",\n                    \"active\": true,\n                    \"short_name\": \"IGNORE\"\n                }\n            },\n            {\n                \"id\": \"38e570af-1241-426c-afa5-f874b1c49128\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Otros\",\n                \"description\": \"Otros\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/ahorro.svg\",\n                    \"color\": \"#9C9A9F\",\n                    \"active\": true,\n                    \"short_name\": \"OTROS\"\n                }\n            },\n            {\n                \"id\": \"4419f198-e4d5-4352-aba6-c6f173b748b2\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Pago Tarjeta de Crédito\",\n                \"description\": \"Compra de divisas, pago tarjeta de crédito\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/credit_card.svg\",\n                    \"name\": \"Pago Créditos\",\n                    \"color\": \"#E57465\",\n                    \"active\": true,\n                    \"short_name\": \"CREDITCARD\",\n                    \"color_class\": \"cat-credit-card\",\n                    \"description\": \"Tarjeta, créditos de consumo\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/credit_card_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/credit_card_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"4cdad960-1ec7-4a9b-aae8-71eeb6ba2ad7\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Transferencias entre Cuentas Propias\",\n                \"description\": \"Transferencias entre mis cuentas personales\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/trans_cuentas.svg\",\n                    \"name\": \"Transf. entre mis Cuentas\",\n                    \"color\": \"#E07591\",\n                    \"active\": true,\n                    \"short_name\": \"TRANSCUENTAS\",\n                    \"color_class\": \"cat-trans-cuentas\",\n                    \"description\": \"Transf. entre cuentas propias\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/trans_cuentas_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/trans_cuentas_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"f7f2f8aa-2297-41a2-9fcf-d65aa9cfb180\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Donaciones & Regalos\",\n                \"description\": \"Donaciones, regalos a terceros\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/donaciones.svg\",\n                    \"name\": \"Donaciones y Regalos\",\n                    \"color\": \"#F3960B\",\n                    \"active\": true,\n                    \"short_name\": \"DONACIONES\",\n                    \"color_class\": \"cat-donaciones\",\n                    \"description\": \"Donaciones o regalos a terceros\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/donaciones_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/donaciones_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"a249c468-bb4d-4365-83f4-108d456bb494\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Restaurantes\",\n                \"description\": \"Apps de pedidos, restaurantes, bares y nightclubs\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/restaurantes.svg\",\n                    \"name\": \"Restaurantes\",\n                    \"color\": \"#7D47EF\",\n                    \"active\": true,\n                    \"short_name\": \"RESTAURANTES\",\n                    \"color_class\": \"cat-restaurantes\",\n                    \"description\": \"Cafeterías, bares, restaurantes\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/restaurantes_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/restaurantes_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Sin categoría\",\n                \"description\": \"Transacción sin categoría\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/sin_categoria.svg\",\n                    \"name\": \"Añadir Categoría\",\n                    \"color\": \"#6F6F6F\",\n                    \"active\": false,\n                    \"short_name\": \"SINCATEGORIA\",\n                    \"color-class\": \"\",\n                    \"description\": \"Categoría\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/sin_categoria.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/sin_categoria.svg\"\n                }\n            },\n            {\n                \"id\": \"84e6fa2f-8790-4d94-8f65-6944c7bcba10\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Vacaciones & Viajes\",\n                \"description\": \"Plataformas de viajes, hoteles, cabañas, arriendo de auto\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/viajes.svg\",\n                    \"name\": \"Viajes y Vacaciones\",\n                    \"color\": \"#E55E6E\",\n                    \"active\": true,\n                    \"short_name\": \"VIAJES\",\n                    \"color_class\": \"cat-viajes\",\n                    \"description\": \"Pasajes, hoteles, reservas\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/viajes_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/viajes_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Supermercados\",\n                \"description\": \"Tienda de comestibles, panaderia, pasteleria\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/supermercados.svg\",\n                    \"name\": \"Supermercados\",\n                    \"color\": \"#FCC442\",\n                    \"active\": true,\n                    \"short_name\": \"SUPERMERCADOS\",\n                    \"color_class\": \"cat-supermercados\",\n                    \"description\": \"Almacén, alimentos, abarrotes\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/supermercados_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/supermercados_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"d26e9eb4-5c2a-45f2-af03-571af93ae7e2\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Transferencias & Retiros\",\n                \"description\": \"Transferencias a terceros, retiros en cajeros, retiros en caja\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/retiros.svg\",\n                    \"name\": \"Transferencias y Retiros\",\n                    \"color\": \"#5D95E8\",\n                    \"active\": true,\n                    \"short_name\": \"RETIROS\",\n                    \"color_class\": \"cat-retiros\",\n                    \"description\": \"Cajeros, transferencias a otros bancos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/retiros_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/retiros_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"53566d37-4b4d-4598-8b6c-09f5970c33cd\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Automóvil & Transporte\",\n                \"description\": \"Gasolina, estacionamiento, seguro auto, app taxi\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/transporte.svg\",\n                    \"name\": \"Automóvil y Transporte\",\n                    \"color\": \"#577590\",\n                    \"active\": true,\n                    \"short_name\": \"TRANSPORTE\",\n                    \"color_class\": \"cat-transporte\",\n                    \"description\": \"Gasolina, metro, uber, seguro auto\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/transporte_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/transporte_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"72fb8abb-d236-469d-a511-0e7d81c4af1e\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Hogar & Familia\",\n                \"description\": \"Renta, hipotecario, educación, mascota, veterinario, colegio\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/hogar.svg\",\n                    \"name\": \"Hogar y Familia\",\n                    \"color\": \"#7B80E3\",\n                    \"active\": true,\n                    \"short_name\": \"HOGAR\",\n                    \"color_class\": \"cat-hogar\",\n                    \"description\": \"Mascota, renta, educación, decoración\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/hogar_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/hogar_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"cf01dce7-6d5e-4ad6-8e5a-8ba5c6d6f94c\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Gastos Financieros & Seguros\",\n                \"description\": \"Seguros, comisiones, impuestos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/finanzas.svg\",\n                    \"name\": \"Gastos Financieros\",\n                    \"color\": \"#6E8D9E\",\n                    \"active\": true,\n                    \"short_name\": \"FINANZAS\",\n                    \"color_class\": \"cat-finanzas\",\n                    \"description\": \"Seguro, comisiones, impuestos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/finanzas_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/finanzas_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Shopping\",\n                \"description\": \"Deportes, electrónica, vestuario y calzado\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                    \"name\": \"Shopping\",\n                    \"color\": \"#6A994E\",\n                    \"active\": true,\n                    \"short_name\": \"SHOPPING\",\n                    \"color_class\": \"cat-shopping\",\n                    \"description\": \"Vestuario, calzado, electrónica\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/shopping_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/shopping_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"0f7b3aa0-365f-475d-b3bc-39d960916a23\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Ahorro e Inversión\",\n                \"description\": \"Ahorros, propiedades, vehículos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/ahorro.svg\",\n                    \"name\": \"Ahorro e Inversión\",\n                    \"color\": \"#9D6B53\",\n                    \"active\": true,\n                    \"short_name\": \"AHORRO\",\n                    \"color_class\": \"cat-ahorro\",\n                    \"description\": \"Ahorros, propiedades, vehículos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/ahorro_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/ahorro_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"8442c4fa-64e6-4470-af7c-8d007d5f572f\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Cuentas & Servicios\",\n                \"description\": \"Consumo de luz, agua, gas, internet, telefonía\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/servicios.svg\",\n                    \"name\": \"Cuentas y Servicios\",\n                    \"color\": \"#95B8D1\",\n                    \"active\": true,\n                    \"short_name\": \"SERVICIOS\",\n                    \"color_class\": \"cat-servicios\",\n                    \"description\": \"Gas, luz, agua, internet, telefonía\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/servicios_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/servicios_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"f0eae548-64e6-45b4-9bfd-4059d2b9d4df\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Salud & Bienestar\",\n                \"description\": \"Farmacia, doctores, dentista, gimnasio, salon de belleza, peluqueria\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/salud.svg\",\n                    \"name\": \"Salud y Bienestar\",\n                    \"color\": \"#48A2BD\",\n                    \"active\": true,\n                    \"short_name\": \"SALUD\",\n                    \"color_class\": \"cat-salud\",\n                    \"description\": \"Farmacia, hospital, clínica, dentista\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/salud_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/salud_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b1\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Entretenimiento\",\n                \"description\": \"Netflix, spotify, cine, apps store, videojuegos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/entretenimiento.svg\",\n                    \"name\": \"Entretenimiento\",\n                    \"color\": \"#6CD1B8\",\n                    \"active\": true,\n                    \"short_name\": \"ENTRETENIMIENTO\",\n                    \"color_class\": \"cat-entretenimiento\",\n                    \"description\": \"Netflix, juegos, streaming, discotecas\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/entretenimiento_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/entretenimiento_primary.svg\"\n                }\n            }\n        ]\n    },\n    {\n        \"id\": \"4625b3a0-b3dc-48e8-b495-1eda09e58222\",\n        \"catalog_name\": \"budget_status\",\n        \"description\": \"Estado del presupuesto\",\n        \"items\": [\n            {\n                \"id\": \"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\n                \"catalog\": \"4625b3a0-b3dc-48e8-b495-1eda09e58222\",\n                \"item_name\": \"Activo\",\n                \"description\": \"Presupuesto activo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"ACTIVE\"\n                }\n            },\n            {\n                \"id\": \"f1ba1236-b4fd-4ed6-9d35-8114ed66726f\",\n                \"catalog\": \"4625b3a0-b3dc-48e8-b495-1eda09e58222\",\n                \"item_name\": \"Eliminado\",\n                \"description\": \"Presupuesto eliminado\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"DELETED\"\n                }\n            }\n        ]\n    },\n    {\n        \"id\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n        \"catalog_name\": \"accounts_types\",\n        \"description\": \"Tipos de cuentas\",\n        \"items\": [\n            {\n                \"id\": \"f3029ccb-8f07-4c15-a55d-5fc628cc4230\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_corriente\",\n                \"description\": \"Cuenta Corriente\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/products/cc.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTACORRIENTE\"\n                }\n            },\n            {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            },\n            {\n                \"id\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_ahorro\",\n                \"description\": \"Cuenta Ahorro\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_ahorro.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAAHORRO\"\n                }\n            },\n            {\n                \"id\": \"18743d7e-4fee-4e13-b2fc-00f86d8f8511\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_inversion\",\n                \"description\": \"Cuenta Inversión\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_inversion.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAINVERSION\"\n                }\n            },\n            {\n                \"id\": \"d9a4b159-8e15-48ea-aa88-72f1c21bb0d0\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"tarjeta_debito\",\n                \"description\": \"Tarjeta Débito\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/tarjeta_debito.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"TARJETADEBITO\"\n                }\n            },\n            {\n                \"id\": \"e655b55f-e39c-49c0-a77e-aed53e1b5d15\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"tarjeta_credito\",\n                \"description\": \"Tarjeta Crédito\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/tarjeta_credito.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"TARJETACREDITO\"\n                }\n            }\n        ]\n    },\n    {\n        \"id\": \"dc34207f-34ba-4bd5-99ec-8ee4bbcdf927\",\n        \"catalog_name\": \"currencies\",\n        \"description\": \"Monedas\",\n        \"items\": [\n            {\n                \"id\": \"cea03b6b-96a3-4d5b-a84e-a74d5c88be0a\",\n                \"catalog\": \"dc34207f-34ba-4bd5-99ec-8ee4bbcdf927\",\n                \"item_name\": \"USD\",\n                \"description\": \"USD\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/currencies/usd.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"USD\"\n                }\n            }\n        ]\n    },\n    {\n        \"id\": \"a5b7cfeb-fe11-44ad-b251-64aaccd12bec\",\n        \"catalog_name\": \"deprecated_categories\",\n        \"description\": \"Categorías deprecadas\",\n        \"items\": [\n            {\n                \"id\": \"693b9aed-83a6-426a-8eb4-84adb64f10dd\",\n                \"catalog\": \"a5b7cfeb-fe11-44ad-b251-64aaccd12bec\",\n                \"item_name\": \"Yape Ingreso\",\n                \"description\": \"Yape Ingreso\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"35f5e608-4285-49a4-90ca-d90102131e14\",\n                \"catalog\": \"a5b7cfeb-fe11-44ad-b251-64aaccd12bec\",\n                \"item_name\": \"Warda Ingreso\",\n                \"description\": \"Warda Ingreso\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"cb5aa1ec-493b-49cf-8499-bf6f290345ff\",\n                \"catalog\": \"a5b7cfeb-fe11-44ad-b251-64aaccd12bec\",\n                \"item_name\": \"Warda Egreso\",\n                \"description\": \"Warda Egreso\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"9c7ac7a6-1051-4c29-b794-5c1fecee9ec5\",\n                \"catalog\": \"a5b7cfeb-fe11-44ad-b251-64aaccd12bec\",\n                \"item_name\": \"Yape Egreso\",\n                \"description\": \"Yape Egreso\",\n                \"metadata\": {}\n            }\n        ]\n    }\n]"}],"_postman_id":"d57176a9-486c-4074-99e9-74f816955a4c"},{"name":"Estados de presupuestos","event":[{"listen":"test","script":{"id":"299ec8c8-53e5-49b7-8cf4-2bc26bdc70e2","exec":[" const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    catalog_name: 'string',\r","    description: 'string',\r","    items: 'array'\r","};\r","\r","const itemProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties within the items array of the first catalog\r","pm.test(\"Items have expected properties with correct types\", () => {\r","    if (responseJson[0].items && responseJson[0].items.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0], itemProperties);\r","        \r","        // Check metadata properties of the first item\r","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0].metadata, metadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"25fd307d-a617-452a-af52-2e84c15e6571","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/catalogs-items/?catalog=budget_status","description":"<p>El endpoint entrega un listado de los estados de los presupuestos.</p>\n<p>Este catálogo no permite agregar ni eliminar registros, sólo se puede modificar la metadata de cada unao.</p>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-pfm/v1/pfm-service/catalogs-items/</p>\n</li>\n<li><p>Parámetros de query:</p>\n<ul>\n<li><p><code>catalog</code>(string): Id del catalogo que se desea consultar. Este puede tomar los valores:</p>\n<ul>\n<li><p>\"incomes_categories\": Categorias de ingresos.</p>\n</li>\n<li><p>\"expenses_categories\": Categorias de gastos</p>\n</li>\n<li><p>\"accounts_types\": Tipo de categoria</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta es un arreglo de estados de presupuestos (<strong>budget_status</strong>):</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único del estado.</p>\n</li>\n<li><p><code>catalog</code> (string): Nombre del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Clave técnica o interna del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción legible del ítem.</p>\n</li>\n<li><p><code>metadata</code> (object): Metadatos adicionales, como:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono asociado.</p>\n</li>\n<li><p><code>title</code> (string): Título para interfaces gráficas.</p>\n</li>\n<li><p>color (object): RGB del color del estado</p>\n</li>\n<li><p>Otros campos personalizados según el catálogo.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\"><strong>Response Format</strong></h4>\n<p>Para la informacion de cada categoria se mantiene el siguiente formato:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"item_name\": { \"type\": \"string\" },\n    \"description\": { \"type\": \"string\" },\n    \"metadata\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"icon\": { \"type\": \"string\" },\n        \"color\": { \"type\": \"string\" },\n        \"active\": { \"type\": \"boolean\" },\n        \"short_name\": { \"type\": \"string\" },\n        \"color_class\": { \"type\": \"string\" }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","catalogs-items",""],"host":["{{host_app}}"],"query":[{"description":{"content":"<p>incomes_categories, expenses_categories, accounts_types</p>\n","type":"text/plain"},"key":"catalog","value":"budget_status"}],"variable":[]}},"response":[{"id":"c4dbc4d5-fd7f-4e9a-93b7-96140c9e0d80","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/catalogs-items/?catalog=budget_status","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","catalogs-items",""],"query":[{"key":"catalog","value":"budget_status","description":"incomes_categories, expenses_categories, accounts_types"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"budget_status\": [\n        {\n            \"id\": \"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\n            \"catalog\": \"4625b3a0-b3dc-48e8-b495-1eda09e58222\",\n            \"item_name\": \"Activo\",\n            \"description\": \"Presupuesto activo\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"ACTIVE\"\n            }\n        },\n        {\n            \"id\": \"f1ba1236-b4fd-4ed6-9d35-8114ed66726f\",\n            \"catalog\": \"4625b3a0-b3dc-48e8-b495-1eda09e58222\",\n            \"item_name\": \"Eliminado\",\n            \"description\": \"Presupuesto eliminado\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"DELETED\"\n            }\n        }\n    ]\n}"}],"_postman_id":"25fd307d-a617-452a-af52-2e84c15e6571"},{"name":"Tipos de cuentas","event":[{"listen":"test","script":{"id":"299ec8c8-53e5-49b7-8cf4-2bc26bdc70e2","exec":[" const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    catalog_name: 'string',\r","    description: 'string',\r","    items: 'array'\r","};\r","\r","const itemProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties within the items array of the first catalog\r","pm.test(\"Items have expected properties with correct types\", () => {\r","    if (responseJson[0].items && responseJson[0].items.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0], itemProperties);\r","        \r","        // Check metadata properties of the first item\r","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0].metadata, metadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"73655709-4bd2-4a90-9234-3638132dfbab","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/catalogs-items/?catalog=accounts_types","description":"<h3 id=\"request-description\">Request Description</h3>\n<p>Este endpoint permite obtener una lista de tipos de cuentas desde el catálogo. Es útil para acceder a información detallada sobre cada tipo de cuenta, incluyendo los ítems asociados y sus metadatos.</p>\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método</strong>: <code>GET</code></p>\n</li>\n<li><p><strong>URL</strong>: <code>{{host_app}}/api-pfm/v1/pfm-service/catalogs-items/</code></p>\n</li>\n<li><p><strong>Parámetros de query</strong>:</p>\n<ul>\n<li><p><code>catalog</code> (string): Identificador del catálogo que se desea consultar. Este puede tomar los siguientes valores:</p>\n<ul>\n<li><p><code>\"incomes_categories\"</code>: Categorías de ingresos.</p>\n</li>\n<li><p><code>\"expenses_categories\"</code>: Categorías de gastos.</p>\n</li>\n<li><p><code>\"accounts_types\"</code>: Tipos de categoría.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta es un arreglo que contiene categorías de diccionarios, donde cada categoría incluye un arreglo que agrupa los catálogos. Cada catálogo contiene los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): ID del catálogo.</p>\n</li>\n<li><p><code>catalog</code> (string): Nombre del catálogo.</p>\n</li>\n<li><p><code>item_name</code> (string): Clave técnica o interna del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción legible del ítem.</p>\n</li>\n<li><p><code>metadata</code> (object): Metadatos adicionales, que incluyen:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono asociado.</p>\n</li>\n<li><p><code>color</code> (string): Color del ítem.</p>\n</li>\n<li><p><code>active</code> (boolean): Estado de actividad del ítem.</p>\n</li>\n<li><p><code>short_name</code> (string): Nombre corto del ítem.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\"><strong>Response Format</strong></h4>\n<p>Para la información de cada categoría se mantiene el siguiente formato:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"item_name\": { \"type\": \"string\" },\n    \"description\": { \"type\": \"string\" },\n    \"metadata\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"icon\": { \"type\": \"string\" },\n        \"color\": { \"type\": \"string\" },\n        \"active\": { \"type\": \"boolean\" },\n        \"short_name\": { \"type\": \"string\" }\n      }\n    }\n  }\n}\n\n</code></pre>\n<p>Este formato asegura que la respuesta sea consistente y fácil de interpretar, facilitando la integración con otras partes del sistema.</p>\n","urlObject":{"path":["api-pfm","v1","pfm-service","catalogs-items",""],"host":["{{host_app}}"],"query":[{"description":{"content":"<p>incomes_categories, expenses_categories, accounts_types</p>\n","type":"text/plain"},"key":"catalog","value":"accounts_types"}],"variable":[]}},"response":[{"id":"14e86586-6ea1-4be1-a74b-523b029c636c","name":"Tipos de cuentas","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/catalogs-items/?catalog=accounts_types","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","catalogs-items",""],"query":[{"key":"catalog","value":"accounts_types","description":"incomes_categories, expenses_categories, accounts_types"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"accounts_types\": [\n        {\n            \"id\": \"f3029ccb-8f07-4c15-a55d-5fc628cc4230\",\n            \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n            \"item_name\": \"cuenta_corriente\",\n            \"description\": \"Cuenta Corriente\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/products/cc.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTACORRIENTE\"\n            }\n        },\n        {\n            \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n            \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n            \"item_name\": \"cuenta_vista\",\n            \"description\": \"Cuenta Vista\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAVISTA\"\n            }\n        },\n        {\n            \"id\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n            \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n            \"item_name\": \"cuenta_ahorro\",\n            \"description\": \"Cuenta Ahorro\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/cuenta_ahorro.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAAHORRO\"\n            }\n        },\n        {\n            \"id\": \"18743d7e-4fee-4e13-b2fc-00f86d8f8511\",\n            \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n            \"item_name\": \"cuenta_inversion\",\n            \"description\": \"Cuenta Inversión\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/cuenta_inversion.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAINVERSION\"\n            }\n        },\n        {\n            \"id\": \"d9a4b159-8e15-48ea-aa88-72f1c21bb0d0\",\n            \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n            \"item_name\": \"tarjeta_debito\",\n            \"description\": \"Tarjeta Débito\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/tarjeta_debito.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"TARJETADEBITO\"\n            }\n        },\n        {\n            \"id\": \"e655b55f-e39c-49c0-a77e-aed53e1b5d15\",\n            \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n            \"item_name\": \"tarjeta_credito\",\n            \"description\": \"Tarjeta Crédito\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/tarjeta_credito.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"TARJETACREDITO\"\n            }\n        }\n    ]\n}"}],"_postman_id":"73655709-4bd2-4a90-9234-3638132dfbab"},{"name":"Tipos de monedas","event":[{"listen":"test","script":{"id":"299ec8c8-53e5-49b7-8cf4-2bc26bdc70e2","exec":[" const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    catalog_name: 'string',\r","    description: 'string',\r","    items: 'array'\r","};\r","\r","const itemProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties within the items array of the first catalog\r","pm.test(\"Items have expected properties with correct types\", () => {\r","    if (responseJson[0].items && responseJson[0].items.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0], itemProperties);\r","        \r","        // Check metadata properties of the first item\r","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0].metadata, metadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"e0de52a3-13a2-40e7-a2ee-7d2d452fd82e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/catalogs-items/?catalog=currencies","description":"<p>El endpoint entrega una lista de categorías de gastos del catálogo. Permite a obtener información detallada sobre cada categoría, incluyendo los items asociados y sus metadatos.</p>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-pfm/v1/pfm-service/catalogs-items/</p>\n</li>\n<li><p>Parámetros de query:</p>\n<ul>\n<li><p><code>catalog</code>(string): Id del catalogo que se desea consultar. Este puede tomar los valores:</p>\n<ul>\n<li><p>\"incomes_categories\": Categorias de ingresos.</p>\n</li>\n<li><p>\"expenses_categories\": Categorias de gastos</p>\n</li>\n<li><p>\"accounts_types\": Tipo de categoria</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta es un arreglo de categorias de diccionarios, en donde cada categoria contiene otro arreglo que agrupa los catalogos, los cuales contien:</p>\n<ul>\n<li><p><code>id</code>(string): ID del catalogo.</p>\n</li>\n<li><p><code>catalog_name</code>(string): Nombre del catalogo.</p>\n</li>\n<li><p><code>description</code>(string): Descripcion del catalogo.</p>\n</li>\n<li><p><code>items</code>(array of objects): Lista de ítems pertenecientes al catálogo consultado, donde cada uno incluye:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único del ítem.</p>\n</li>\n<li><p><code>catalog</code> (string): Nombre del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Clave técnica o interna del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción legible del ítem.</p>\n</li>\n<li><p><code>metadata</code> (object): Metadatos adicionales, como:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono asociado.</p>\n</li>\n<li><p><code>title</code> (string): Título para interfaces gráficas.</p>\n</li>\n<li><p><code>message</code> (object): Mensajes contextualizados por canal o lenguaje (<code>A</code>, <code>E</code>, <code>G</code>, etc.).</p>\n</li>\n<li><p>Otros campos personalizados según el catálogo.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\"><strong>Response Format</strong></h4>\n<p>Para la informacion de cada categoria se mantiene el siguiente formato:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"item_name\": { \"type\": \"string\" },\n    \"description\": { \"type\": \"string\" },\n    \"metadata\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"bg\": { \"type\": \"string\" },\n        \"icon\": { \"type\": \"string\" },\n        \"name\": { \"type\": \"string\" },\n        \"color\": { \"type\": \"string\" },\n        \"active\": { \"type\": \"boolean\" },\n        \"short_name\": { \"type\": \"string\" },\n        \"color_class\": { \"type\": \"string\" },\n        \"description\": { \"type\": \"string\" },\n        \"icon_ignore\": { \"type\": \"string\" },\n        \"icon_primary\": { \"type\": \"string\" }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","catalogs-items",""],"host":["{{host_app}}"],"query":[{"key":"catalog","value":"currencies"}],"variable":[]}},"response":[{"id":"e8a93833-b5b2-4e40-8c44-25ef9a49fe90","name":"Tipos de monedas","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/catalogs-items/?catalog=currencies","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","catalogs-items",""],"query":[{"key":"catalog","value":"currencies"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"currencies\": [\n        {\n            \"id\": \"cea03b6b-96a3-4d5b-a84e-a74d5c88be0a\",\n            \"catalog\": \"dc34207f-34ba-4bd5-99ec-8ee4bbcdf927\",\n            \"item_name\": \"USD\",\n            \"description\": \"USD\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/currencies/usd.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"USD\"\n            }\n        }\n    ]\n}"}],"_postman_id":"e0de52a3-13a2-40e7-a2ee-7d2d452fd82e"}],"id":"6621cdb6-8902-4646-aa99-6a184370de21","_postman_id":"6621cdb6-8902-4646-aa99-6a184370de21","description":""},{"name":"Obtener items","event":[{"listen":"test","script":{"id":"299ec8c8-53e5-49b7-8cf4-2bc26bdc70e2","exec":[" const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    catalog_name: 'string',\r","    description: 'string',\r","    items: 'array'\r","};\r","\r","const itemProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties within the items array of the first catalog\r","pm.test(\"Items have expected properties with correct types\", () => {\r","    if (responseJson[0].items && responseJson[0].items.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0], itemProperties);\r","        \r","        // Check metadata properties of the first item\r","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0].metadata, metadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"0d62483d-5a44-477b-872f-cebf1f4ad9a2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/catalogs/","description":"<p>Este endpoint permite <strong>recuperar todos los catálogos registrados</strong> en PFM. Los catálogos contienen información utilizada para poblar menús desplegables, filtrar datos o representar entidades de negocio como tipos de evento, estados de cuenta, categorías de gastos, entre otros.</p>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>URL:</strong> {{host_app}}/api-pfm/v1/pfm-service/catalogs/</p>\n</li>\n</ul>\n<h4 id=\"request-body\"><strong>Request Body</strong></h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"reponse\">Reponse</h4>\n<p>La respuesta será un objeto JSON que incluye un arreglo de ítems catalogados, agrupables por tipo<code>catalog</code>, donde cada uno incluye:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único del ítem.</p>\n</li>\n<li><p><code>catalog</code> (string): Nombre del catálogo al que pertenece</p>\n</li>\n<li><p><code>item_name</code> (string): Clave técnica del ítem dentro del catálogo.</p>\n</li>\n<li><p><code>description</code> (string): Descripción legible o funcional del ítem.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional (opcional), que puede incluir:</p>\n<ul>\n<li><p><code>bg</code>(string): Color en formato HEX del fondo</p>\n</li>\n<li><p><code>icon</code> (string): Ícono visual asociado.</p>\n</li>\n<li><p><code>name</code> (string): Nombre del item.</p>\n</li>\n<li><p>Otros campos específicos según el catálogo.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n      \"catalog_name\": { \"type\": \"string\" },\n      \"description\": { \"type\": \"string\" },\n      \"items\": {\n        \"type\": \"array\",\n        \"items\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n            \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n            \"item_name\": { \"type\": \"string\" },\n            \"description\": { \"type\": \"string\" },\n            \"metadata\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"icon\": { \"type\": \"string\" },\n                \"color\": { \"type\": \"string\" },\n                \"active\": { \"type\": \"boolean\" },\n                \"short_name\": { \"type\": \"string\" }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","catalogs",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"a2b83943-0f33-4897-8a8b-ff888b66f0dd","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/catalogs/","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","catalogs",""],"query":[{"key":"paginate","value":"true","disabled":true},{"key":"page","value":"1","type":"text","disabled":true},{"key":"page_size","value":"1","type":"text","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 18:52:41 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"17897"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"8b0036fc-d038-4a78-a6e6-07901e67429b"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cJtS9HflIAMELrA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3c279-1e14b50207b555c73a555e33;Parent=7e9f95efc2eaeb5e;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n        \"catalog_name\": \"incomes_categories\",\n        \"description\": \"Categorías de ingresos\",\n        \"items\": [\n            {\n                \"id\": \"e131ca4e-28d2-48fc-ab73-ea92e48b084f\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Rendimientos\",\n                \"description\": \"Pago de dividendos e intereses ganados\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_rendimientos.svg\",\n                    \"name\": \"Rendimientos\",\n                    \"color\": \"#4D9932\",\n                    \"active\": true,\n                    \"short_name\": \"INCRENDIMIENTOS\",\n                    \"color_class\": \"cat-inc-rendimientos\",\n                    \"description\": \"Intereses y pago de dividendos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_rendimientos_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_rendimientos_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"3954361d-ddf5-46dc-a8f8-af98ee9811da\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Sueldo\",\n                \"description\": \"Sueldos, salarios, honorarios e ingresos por trabajo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_sueldo.svg\",\n                    \"name\": \"Ingresos\",\n                    \"color\": \"#01C38E\",\n                    \"active\": true,\n                    \"short_name\": \"INCSUELDO\",\n                    \"color_class\": \"cat-inc-sueldo\",\n                    \"description\": \"Salarios, honorarios y por contrato\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_sueldo_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_sueldo_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"763d39ca-45e8-4171-8a97-29ba9a37665c\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Regalos y otros ingresos\",\n                \"description\": \"Regalos hechos por transferencias y otros ingresos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_regalos.svg\",\n                    \"name\": \"Regalos y otros ingresos\",\n                    \"color\": \"#5C9961\",\n                    \"active\": true,\n                    \"short_name\": \"INCREGALOS\",\n                    \"color_class\": \"cat-inc-regalos\",\n                    \"description\": \"Otros tipos de ingresos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_regalos_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_regalos_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"8ebba319-0042-41ff-bdbb-ba05cd824d52\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Transferencias\",\n                \"description\": \"Transferencias, depósitos y reembolsos recibidos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_transferencias.svg\",\n                    \"name\": \"Depósitos y Transferencias\",\n                    \"color\": \"#40916C\",\n                    \"active\": true,\n                    \"short_name\": \"INCTRANSFERENCIAS\",\n                    \"color_class\": \"cat-inc-trasferencias\",\n                    \"description\": \"Transferencias, depósitos y reembolsos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_transferencias_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_transferencias_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"593cea05-8f4d-4b40-ad1b-d73e43c8d53d\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Devolución de impuestos\",\n                \"description\": \"Devoluciones del Servicio de Impuestos Internos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_devolucion.svg\",\n                    \"name\": \"Devolución de impuestos\",\n                    \"color\": \"#25A244\",\n                    \"active\": true,\n                    \"short_name\": \"INCDEVOLUCION\",\n                    \"color_class\": \"cat-inc-devolucion\",\n                    \"description\": \"Reembolso o reducción de impuestos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_devolucion_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_devolucion_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"5f342655-bf27-4523-aa32-40d7cb48ae38\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Subvención\",\n                \"description\": \"Pensión, becas, subvención y ayudas familiares\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_subvencion.svg\",\n                    \"name\": \"Subvención y Pensión\",\n                    \"color\": \"#47783F\",\n                    \"active\": true,\n                    \"short_name\": \"INCSUBVENCION\",\n                    \"color_class\": \"cat-inc-subvencion\",\n                    \"description\": \"Pensión y ayuda económica\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_subvencion_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_subvencion_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b2\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Rentas y arriendos\",\n                \"description\": \"Ingresos por arriendos de muebles e inmuebles\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_rentas.svg\",\n                    \"name\": \"Rentas y Arriendos\",\n                    \"color\": \"#01936C\",\n                    \"active\": true,\n                    \"short_name\": \"INCRENTAS\",\n                    \"color_class\": \"cat-inc-rentas\",\n                    \"description\": \"Arriendo de muebles e inmuebles\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_rentas_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_rentas_primary.svg\"\n                }\n            }\n        ]\n    },\n    {\n        \"id\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n        \"catalog_name\": \"expenses_categories\",\n        \"description\": \"Categorías de egresos\",\n        \"items\": [\n            {\n                \"id\": \"bf50dc35-43d0-4f60-9860-770b8afc96f4\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Ignorar\",\n                \"description\": \"Transacciones que no quieres que se agreguen a una categoría\",\n                \"metadata\": {\n                    \"icon\": \"/assets/img/category/ignore.svg\",\n                    \"color\": \"#CFA7DC\",\n                    \"active\": true,\n                    \"short_name\": \"IGNORE\"\n                }\n            },\n            {\n                \"id\": \"38e570af-1241-426c-afa5-f874b1c49128\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Otros\",\n                \"description\": \"Otros\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/ahorro.svg\",\n                    \"color\": \"#9C9A9F\",\n                    \"active\": true,\n                    \"short_name\": \"OTROS\"\n                }\n            },\n            {\n                \"id\": \"4419f198-e4d5-4352-aba6-c6f173b748b2\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Pago Tarjeta de Crédito\",\n                \"description\": \"Compra de divisas, pago tarjeta de crédito\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/credit_card.svg\",\n                    \"name\": \"Pago Créditos\",\n                    \"color\": \"#E57465\",\n                    \"active\": true,\n                    \"short_name\": \"CREDITCARD\",\n                    \"color_class\": \"cat-credit-card\",\n                    \"description\": \"Tarjeta, créditos de consumo\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/credit_card_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/credit_card_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"4cdad960-1ec7-4a9b-aae8-71eeb6ba2ad7\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Transferencias entre Cuentas Propias\",\n                \"description\": \"Transferencias entre mis cuentas personales\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/trans_cuentas.svg\",\n                    \"name\": \"Transf. entre mis Cuentas\",\n                    \"color\": \"#E07591\",\n                    \"active\": true,\n                    \"short_name\": \"TRANSCUENTAS\",\n                    \"color_class\": \"cat-trans-cuentas\",\n                    \"description\": \"Transf. entre cuentas propias\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/trans_cuentas_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/trans_cuentas_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"f7f2f8aa-2297-41a2-9fcf-d65aa9cfb180\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Donaciones & Regalos\",\n                \"description\": \"Donaciones, regalos a terceros\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/donaciones.svg\",\n                    \"name\": \"Donaciones y Regalos\",\n                    \"color\": \"#F3960B\",\n                    \"active\": true,\n                    \"short_name\": \"DONACIONES\",\n                    \"color_class\": \"cat-donaciones\",\n                    \"description\": \"Donaciones o regalos a terceros\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/donaciones_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/donaciones_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"a249c468-bb4d-4365-83f4-108d456bb494\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Restaurantes\",\n                \"description\": \"Apps de pedidos, restaurantes, bares y nightclubs\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/restaurantes.svg\",\n                    \"name\": \"Restaurantes\",\n                    \"color\": \"#7D47EF\",\n                    \"active\": true,\n                    \"short_name\": \"RESTAURANTES\",\n                    \"color_class\": \"cat-restaurantes\",\n                    \"description\": \"Cafeterías, bares, restaurantes\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/restaurantes_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/restaurantes_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Sin categoría\",\n                \"description\": \"Transacción sin categoría\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/sin_categoria.svg\",\n                    \"name\": \"Añadir Categoría\",\n                    \"color\": \"#6F6F6F\",\n                    \"active\": false,\n                    \"short_name\": \"SINCATEGORIA\",\n                    \"color-class\": \"\",\n                    \"description\": \"Categoría\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/sin_categoria.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/sin_categoria.svg\"\n                }\n            },\n            {\n                \"id\": \"84e6fa2f-8790-4d94-8f65-6944c7bcba10\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Vacaciones & Viajes\",\n                \"description\": \"Plataformas de viajes, hoteles, cabañas, arriendo de auto\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/viajes.svg\",\n                    \"name\": \"Viajes y Vacaciones\",\n                    \"color\": \"#E55E6E\",\n                    \"active\": true,\n                    \"short_name\": \"VIAJES\",\n                    \"color_class\": \"cat-viajes\",\n                    \"description\": \"Pasajes, hoteles, reservas\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/viajes_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/viajes_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Supermercados\",\n                \"description\": \"Tienda de comestibles, panaderia, pasteleria\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/supermercados.svg\",\n                    \"name\": \"Supermercados\",\n                    \"color\": \"#FCC442\",\n                    \"active\": true,\n                    \"short_name\": \"SUPERMERCADOS\",\n                    \"color_class\": \"cat-supermercados\",\n                    \"description\": \"Almacén, alimentos, abarrotes\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/supermercados_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/supermercados_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"d26e9eb4-5c2a-45f2-af03-571af93ae7e2\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Transferencias & Retiros\",\n                \"description\": \"Transferencias a terceros, retiros en cajeros, retiros en caja\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/retiros.svg\",\n                    \"name\": \"Transferencias y Retiros\",\n                    \"color\": \"#5D95E8\",\n                    \"active\": true,\n                    \"short_name\": \"RETIROS\",\n                    \"color_class\": \"cat-retiros\",\n                    \"description\": \"Cajeros, transferencias a otros bancos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/retiros_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/retiros_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"53566d37-4b4d-4598-8b6c-09f5970c33cd\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Automóvil & Transporte\",\n                \"description\": \"Gasolina, estacionamiento, seguro auto, app taxi\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/transporte.svg\",\n                    \"name\": \"Automóvil y Transporte\",\n                    \"color\": \"#577590\",\n                    \"active\": true,\n                    \"short_name\": \"TRANSPORTE\",\n                    \"color_class\": \"cat-transporte\",\n                    \"description\": \"Gasolina, metro, uber, seguro auto\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/transporte_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/transporte_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"72fb8abb-d236-469d-a511-0e7d81c4af1e\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Hogar & Familia\",\n                \"description\": \"Renta, hipotecario, educación, mascota, veterinario, colegio\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/hogar.svg\",\n                    \"name\": \"Hogar y Familia\",\n                    \"color\": \"#7B80E3\",\n                    \"active\": true,\n                    \"short_name\": \"HOGAR\",\n                    \"color_class\": \"cat-hogar\",\n                    \"description\": \"Mascota, renta, educación, decoración\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/hogar_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/hogar_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"cf01dce7-6d5e-4ad6-8e5a-8ba5c6d6f94c\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Gastos Financieros & Seguros\",\n                \"description\": \"Seguros, comisiones, impuestos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/finanzas.svg\",\n                    \"name\": \"Gastos Financieros\",\n                    \"color\": \"#6E8D9E\",\n                    \"active\": true,\n                    \"short_name\": \"FINANZAS\",\n                    \"color_class\": \"cat-finanzas\",\n                    \"description\": \"Seguro, comisiones, impuestos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/finanzas_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/finanzas_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Shopping\",\n                \"description\": \"Deportes, electrónica, vestuario y calzado\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                    \"name\": \"Shopping\",\n                    \"color\": \"#6A994E\",\n                    \"active\": true,\n                    \"short_name\": \"SHOPPING\",\n                    \"color_class\": \"cat-shopping\",\n                    \"description\": \"Vestuario, calzado, electrónica\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/shopping_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/shopping_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"0f7b3aa0-365f-475d-b3bc-39d960916a23\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Ahorro e Inversión\",\n                \"description\": \"Ahorros, propiedades, vehículos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/ahorro.svg\",\n                    \"name\": \"Ahorro e Inversión\",\n                    \"color\": \"#9D6B53\",\n                    \"active\": true,\n                    \"short_name\": \"AHORRO\",\n                    \"color_class\": \"cat-ahorro\",\n                    \"description\": \"Ahorros, propiedades, vehículos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/ahorro_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/ahorro_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"8442c4fa-64e6-4470-af7c-8d007d5f572f\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Cuentas & Servicios\",\n                \"description\": \"Consumo de luz, agua, gas, internet, telefonía\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/servicios.svg\",\n                    \"name\": \"Cuentas y Servicios\",\n                    \"color\": \"#95B8D1\",\n                    \"active\": true,\n                    \"short_name\": \"SERVICIOS\",\n                    \"color_class\": \"cat-servicios\",\n                    \"description\": \"Gas, luz, agua, internet, telefonía\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/servicios_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/servicios_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"f0eae548-64e6-45b4-9bfd-4059d2b9d4df\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Salud & Bienestar\",\n                \"description\": \"Farmacia, doctores, dentista, gimnasio, salon de belleza, peluqueria\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/salud.svg\",\n                    \"name\": \"Salud y Bienestar\",\n                    \"color\": \"#48A2BD\",\n                    \"active\": true,\n                    \"short_name\": \"SALUD\",\n                    \"color_class\": \"cat-salud\",\n                    \"description\": \"Farmacia, hospital, clínica, dentista\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/salud_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/salud_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b1\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Entretenimiento\",\n                \"description\": \"Netflix, spotify, cine, apps store, videojuegos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/entretenimiento.svg\",\n                    \"name\": \"Entretenimiento\",\n                    \"color\": \"#6CD1B8\",\n                    \"active\": true,\n                    \"short_name\": \"ENTRETENIMIENTO\",\n                    \"color_class\": \"cat-entretenimiento\",\n                    \"description\": \"Netflix, juegos, streaming, discotecas\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/entretenimiento_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/entretenimiento_primary.svg\"\n                }\n            }\n        ]\n    },\n    {\n        \"id\": \"4625b3a0-b3dc-48e8-b495-1eda09e58222\",\n        \"catalog_name\": \"budget_status\",\n        \"description\": \"Estado del presupuesto\",\n        \"items\": [\n            {\n                \"id\": \"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\n                \"catalog\": \"4625b3a0-b3dc-48e8-b495-1eda09e58222\",\n                \"item_name\": \"Activo\",\n                \"description\": \"Presupuesto activo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"ACTIVE\"\n                }\n            },\n            {\n                \"id\": \"f1ba1236-b4fd-4ed6-9d35-8114ed66726f\",\n                \"catalog\": \"4625b3a0-b3dc-48e8-b495-1eda09e58222\",\n                \"item_name\": \"Eliminado\",\n                \"description\": \"Presupuesto eliminado\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"DELETED\"\n                }\n            }\n        ]\n    },\n    {\n        \"id\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n        \"catalog_name\": \"accounts_types\",\n        \"description\": \"Tipos de cuentas\",\n        \"items\": [\n            {\n                \"id\": \"f3029ccb-8f07-4c15-a55d-5fc628cc4230\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_corriente\",\n                \"description\": \"Cuenta Corriente\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/products/cc.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTACORRIENTE\"\n                }\n            },\n            {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            },\n            {\n                \"id\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_ahorro\",\n                \"description\": \"Cuenta Ahorro\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_ahorro.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAAHORRO\"\n                }\n            },\n            {\n                \"id\": \"18743d7e-4fee-4e13-b2fc-00f86d8f8511\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_inversion\",\n                \"description\": \"Cuenta Inversión\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_inversion.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAINVERSION\"\n                }\n            },\n            {\n                \"id\": \"d9a4b159-8e15-48ea-aa88-72f1c21bb0d0\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"tarjeta_debito\",\n                \"description\": \"Tarjeta Débito\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/tarjeta_debito.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"TARJETADEBITO\"\n                }\n            },\n            {\n                \"id\": \"e655b55f-e39c-49c0-a77e-aed53e1b5d15\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"tarjeta_credito\",\n                \"description\": \"Tarjeta Crédito\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/tarjeta_credito.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"TARJETACREDITO\"\n                }\n            }\n        ]\n    },\n    {\n        \"id\": \"dc34207f-34ba-4bd5-99ec-8ee4bbcdf927\",\n        \"catalog_name\": \"currencies\",\n        \"description\": \"Monedas\",\n        \"items\": [\n            {\n                \"id\": \"cea03b6b-96a3-4d5b-a84e-a74d5c88be0a\",\n                \"catalog\": \"dc34207f-34ba-4bd5-99ec-8ee4bbcdf927\",\n                \"item_name\": \"USD\",\n                \"description\": \"USD\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/currencies/usd.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"USD\"\n                }\n            }\n        ]\n    },\n    {\n        \"id\": \"a5b7cfeb-fe11-44ad-b251-64aaccd12bec\",\n        \"catalog_name\": \"deprecated_categories\",\n        \"description\": \"Categorías deprecadas\",\n        \"items\": [\n            {\n                \"id\": \"693b9aed-83a6-426a-8eb4-84adb64f10dd\",\n                \"catalog\": \"a5b7cfeb-fe11-44ad-b251-64aaccd12bec\",\n                \"item_name\": \"Yape Ingreso\",\n                \"description\": \"Yape Ingreso\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"35f5e608-4285-49a4-90ca-d90102131e14\",\n                \"catalog\": \"a5b7cfeb-fe11-44ad-b251-64aaccd12bec\",\n                \"item_name\": \"Warda Ingreso\",\n                \"description\": \"Warda Ingreso\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"cb5aa1ec-493b-49cf-8499-bf6f290345ff\",\n                \"catalog\": \"a5b7cfeb-fe11-44ad-b251-64aaccd12bec\",\n                \"item_name\": \"Warda Egreso\",\n                \"description\": \"Warda Egreso\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"9c7ac7a6-1051-4c29-b794-5c1fecee9ec5\",\n                \"catalog\": \"a5b7cfeb-fe11-44ad-b251-64aaccd12bec\",\n                \"item_name\": \"Yape Egreso\",\n                \"description\": \"Yape Egreso\",\n                \"metadata\": {}\n            }\n        ]\n    }\n]"}],"_postman_id":"0d62483d-5a44-477b-872f-cebf1f4ad9a2"},{"name":"Detalle catalogo","event":[{"listen":"test","script":{"id":"463f2b5b-44e1-4d95-8fea-078aab165188","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    catalog_name: 'string',\r","    description: 'string',\r","    items: 'array'\r","};\r","\r","const itemProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the items array\r","pm.test(\"Items have expected properties with correct types\", () => {\r","    if (responseJson.items && responseJson.items.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.items[0], itemProperties);\r","        \r","        // Check metadata properties of the first item\r","        xerpaTestApi.checkObjectProperties(responseJson.items[0].metadata, metadataProperties);\r","    }\r","});\r",""],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"5d57e648-18e2-4fd4-b26e-39f2de2b55dc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}api-pfm/v1/pfm-service/catalogs/{{catalog_pfm_id}}/","description":"<p>Este endpoint permite <strong>consultar todos los ítems de un catálogo específico</strong> del sistema, utilizando el nombre del catálogo como parámetro.</p>\n<ul>\n<li><p>Este endpoint permite <strong>filtrar directamente por catálogo</strong>, a diferencia del listado general.</p>\n</li>\n<li><p>Es ideal para <strong>mostrar opciones filtradas</strong> en formularios, reglas, reportes o visualizaciones.</p>\n</li>\n<li><p>Si el catálogo no existe o está vacío, se devolverá un arreglo vacío sin error.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}api-pfm/v1/pfm-service/catalogs/{{catalog_pfm_id}}/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>catalog_pfm_id</code>(string): Id del catalogo que se desea consultar.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta es un JSON con lo items agrupados por catalogo.</p>\n<ul>\n<li><p><code>id</code>(string): ID del catalogo.</p>\n</li>\n<li><p><code>catalog_name</code>(string): Nombre del catalogo.</p>\n</li>\n<li><p><code>description</code>(string): Descripcion del catalogo.</p>\n</li>\n<li><p><code>items</code>(array of objects): Lista de ítems pertenecientes al catálogo consultado, donde cada uno incluye:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único del ítem.</p>\n</li>\n<li><p><code>catalog</code> (string): Nombre del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Clave técnica o interna del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción legible del ítem.</p>\n</li>\n<li><p><code>metadata</code> (object): Metadatos adicionales, como:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono asociado.</p>\n</li>\n<li><p><code>title</code> (string): Título para interfaces gráficas.</p>\n</li>\n<li><p><code>message</code> (object): Mensajes contextualizados por canal o lenguaje (<code>A</code>, <code>E</code>, <code>G</code>, etc.).</p>\n</li>\n<li><p>Otros campos personalizados según el catálogo.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\"><strong>Response Format</strong></h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"catalog_name\": { \"type\": \"string\" },\n    \"description\": { \"type\": \"string\" },\n    \"items\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"item_name\": { \"type\": \"string\" },\n          \"description\": { \"type\": \"string\" },\n          \"metadata\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"icon\": { \"type\": \"string\" },\n              \"color\": { \"type\": \"string\" },\n              \"active\": { \"type\": \"boolean\" },\n              \"short_name\": { \"type\": \"string\" }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["v1","pfm-service","catalogs","{{catalog_pfm_id}}",""],"host":["{{host_app}}api-pfm"],"query":[],"variable":[]}},"response":[{"id":"abd4b712-800e-4416-85f0-34aac86ff217","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/catalogs/c2a07389-da13-4420-9060-c6bef2d6bd03/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 18:54:38 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"4293"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"7988156c-b27c-4a1c-bae5-7dab225d58aa"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cJtlVG1OIAMEkuA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3c2ee-48fe30985fb8eddc103e4889;Parent=3fdfb9dec0e00256;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n    \"catalog_name\": \"incomes_categories\",\n    \"description\": \"Categorías de ingresos\",\n    \"items\": [\n        {\n            \"id\": \"e131ca4e-28d2-48fc-ab73-ea92e48b084f\",\n            \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n            \"item_name\": \"Rendimientos\",\n            \"description\": \"Pago de dividendos e intereses ganados\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/inc_rendimientos.svg\",\n                \"name\": \"Rendimientos\",\n                \"color\": \"#4D9932\",\n                \"active\": true,\n                \"short_name\": \"INCRENDIMIENTOS\",\n                \"color_class\": \"cat-inc-rendimientos\",\n                \"description\": \"Intereses y pago de dividendos\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_rendimientos_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_rendimientos_primary.svg\"\n            }\n        },\n        {\n            \"id\": \"3954361d-ddf5-46dc-a8f8-af98ee9811da\",\n            \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n            \"item_name\": \"Sueldo\",\n            \"description\": \"Sueldos, salarios, honorarios e ingresos por trabajo\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/inc_sueldo.svg\",\n                \"name\": \"Ingresos\",\n                \"color\": \"#01C38E\",\n                \"active\": true,\n                \"short_name\": \"INCSUELDO\",\n                \"color_class\": \"cat-inc-sueldo\",\n                \"description\": \"Salarios, honorarios y por contrato\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_sueldo_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_sueldo_primary.svg\"\n            }\n        },\n        {\n            \"id\": \"763d39ca-45e8-4171-8a97-29ba9a37665c\",\n            \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n            \"item_name\": \"Regalos y otros ingresos\",\n            \"description\": \"Regalos hechos por transferencias y otros ingresos\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/inc_regalos.svg\",\n                \"name\": \"Regalos y otros ingresos\",\n                \"color\": \"#5C9961\",\n                \"active\": true,\n                \"short_name\": \"INCREGALOS\",\n                \"color_class\": \"cat-inc-regalos\",\n                \"description\": \"Otros tipos de ingresos\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_regalos_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_regalos_primary.svg\"\n            }\n        },\n        {\n            \"id\": \"8ebba319-0042-41ff-bdbb-ba05cd824d52\",\n            \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n            \"item_name\": \"Transferencias\",\n            \"description\": \"Transferencias, depósitos y reembolsos recibidos\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/inc_transferencias.svg\",\n                \"name\": \"Depósitos y Transferencias\",\n                \"color\": \"#40916C\",\n                \"active\": true,\n                \"short_name\": \"INCTRANSFERENCIAS\",\n                \"color_class\": \"cat-inc-trasferencias\",\n                \"description\": \"Transferencias, depósitos y reembolsos\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_transferencias_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_transferencias_primary.svg\"\n            }\n        },\n        {\n            \"id\": \"593cea05-8f4d-4b40-ad1b-d73e43c8d53d\",\n            \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n            \"item_name\": \"Devolución de impuestos\",\n            \"description\": \"Devoluciones del Servicio de Impuestos Internos\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/inc_devolucion.svg\",\n                \"name\": \"Devolución de impuestos\",\n                \"color\": \"#25A244\",\n                \"active\": true,\n                \"short_name\": \"INCDEVOLUCION\",\n                \"color_class\": \"cat-inc-devolucion\",\n                \"description\": \"Reembolso o reducción de impuestos\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_devolucion_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_devolucion_primary.svg\"\n            }\n        },\n        {\n            \"id\": \"5f342655-bf27-4523-aa32-40d7cb48ae38\",\n            \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n            \"item_name\": \"Subvención\",\n            \"description\": \"Pensión, becas, subvención y ayudas familiares\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/inc_subvencion.svg\",\n                \"name\": \"Subvención y Pensión\",\n                \"color\": \"#47783F\",\n                \"active\": true,\n                \"short_name\": \"INCSUBVENCION\",\n                \"color_class\": \"cat-inc-subvencion\",\n                \"description\": \"Pensión y ayuda económica\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_subvencion_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_subvencion_primary.svg\"\n            }\n        },\n        {\n            \"id\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b2\",\n            \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n            \"item_name\": \"Rentas y arriendos\",\n            \"description\": \"Ingresos por arriendos de muebles e inmuebles\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/inc_rentas.svg\",\n                \"name\": \"Rentas y Arriendos\",\n                \"color\": \"#01936C\",\n                \"active\": true,\n                \"short_name\": \"INCRENTAS\",\n                \"color_class\": \"cat-inc-rentas\",\n                \"description\": \"Arriendo de muebles e inmuebles\",\n                \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_rentas_ignore.svg\",\n                \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_rentas_primary.svg\"\n            }\n        }\n    ]\n}"}],"_postman_id":"5d57e648-18e2-4fd4-b26e-39f2de2b55dc"},{"name":"Obtener detalle item","event":[{"listen":"test","script":{"id":"4b972dac-71a6-4d36-969d-50845602bc38","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check metadata properties\r","pm.test(\"Metadata has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.metadata, metadataProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"04a94e6c-d872-406b-9036-e072bdc45caa","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/items/{{item_pfm_core}}/","description":"<p>Este endpoint permite <strong>consultar los detalles de un ítem específico</strong> dentro de un catálogo del sistema.</p>\n<ul>\n<li><p>Este endpoint es útil para obtener el detalle completo de un ítem sin tener que recorrer todo el catálogo.</p>\n</li>\n<li><p>Es ideal para <strong>mostrar etiquetas, íconos o comportamientos dinámicos</strong> en interfaces que dependan de la configuración del ítem.</p>\n</li>\n<li><p>El contenido del campo <code>metadata</code> puede variar ampliamente según el tipo de catálogo al que pertenezca el ítem.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>URL:</strong>{{host_app}}/api-pfm/v1/pfm-service/items/{{item_pfm_core}}/</p>\n</li>\n<li><p>Parámetros de ruta</p>\n<ul>\n<li><code>item_pfm_id</code>(string): ID único del ítem que se desea consultar.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\"><strong>Request Body:</strong></h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<hr />\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON que contiene la información detallada del ítem:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único del ítem.</p>\n</li>\n<li><p><code>catalog</code> (string): Nombre del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Clave interna del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción legible del ítem.</p>\n</li>\n<li><p><code>metadata</code> (object): Objeto con metadatos adicionales que pueden incluir:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono representativo.</p>\n</li>\n<li><p><code>title</code> (string): Título para mostrar en interfaz.</p>\n</li>\n<li><p><code>message</code> (object): Mensajes por canal o formato (<code>A</code>, <code>E</code>, <code>G</code>, etc.).</p>\n</li>\n<li><p>Otros campos personalizados según el catálogo (color, orden, estado, etc.).</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"item_name\": { \"type\": \"string\" },\n    \"description\": { \"type\": \"string\" },\n    \"metadata\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"icon\": { \"type\": \"string\" },\n        \"color\": { \"type\": \"string\" },\n        \"active\": { \"type\": \"boolean\" },\n        \"short_name\": { \"type\": \"string\" }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","items","{{item_pfm_core}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"39e5f60c-e3ec-44d9-bf22-86527f5a3fbe","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/items/e131ca4e-28d2-48fc-ab73-ea92e48b084f/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 18:55:50 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"586"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"23105afe-9937-4f93-855e-ce20179449e2"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cJtwlEgWIAMEjVA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3c336-07919c5824a9a28d7e3ee9c8;Parent=4ad19edfc75382aa;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"e131ca4e-28d2-48fc-ab73-ea92e48b084f\",\n    \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n    \"item_name\": \"Rendimientos\",\n    \"description\": \"Pago de dividendos e intereses ganados\",\n    \"metadata\": {\n        \"icon\": \"/assets/xerpa/global/img/categories/inc_rendimientos.svg\",\n        \"name\": \"Rendimientos\",\n        \"color\": \"#4D9932\",\n        \"active\": true,\n        \"short_name\": \"INCRENDIMIENTOS\",\n        \"color_class\": \"cat-inc-rendimientos\",\n        \"description\": \"Intereses y pago de dividendos\",\n        \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_rendimientos_ignore.svg\",\n        \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_rendimientos_primary.svg\"\n    }\n}"}],"_postman_id":"04a94e6c-d872-406b-9036-e072bdc45caa"},{"name":"Listar catalogos items","event":[{"listen":"test","script":{"id":"299ec8c8-53e5-49b7-8cf4-2bc26bdc70e2","exec":[" const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    catalog_name: 'string',\r","    description: 'string',\r","    items: 'array'\r","};\r","\r","const itemProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties within the items array of the first catalog\r","pm.test(\"Items have expected properties with correct types\", () => {\r","    if (responseJson[0].items && responseJson[0].items.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0], itemProperties);\r","        \r","        // Check metadata properties of the first item\r","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0].metadata, metadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"5349d110-d44e-4805-ab00-859a08a8facf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/pfm-service/catalogs-items/?catalog=expenses_categories","description":"<p>El endpoint entrega una lista de categorías de gastos del catálogo. Permite a obtener información detallada sobre cada categoría, incluyendo los items asociados y sus metadatos.</p>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-pfm/v1/pfm-service/catalogs-items/</p>\n</li>\n<li><p>Parámetros de query:</p>\n<ul>\n<li><p><code>catalog</code>(string): Id del catalogo que se desea consultar. Este puede tomar los valores:</p>\n<ul>\n<li><p>\"incomes_categories\": Categorias de ingresos.</p>\n</li>\n<li><p>\"expenses_categories\": Categorias de gastos</p>\n</li>\n<li><p>\"accounts_types\": Tipo de categoria</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta es un arreglo de categorias de diccionarios, en donde cada categoria contiene otro arreglo que agrupa los catalogos, los cuales contien:</p>\n<ul>\n<li><p><code>id</code>(string): ID del catalogo.</p>\n</li>\n<li><p><code>catalog_name</code>(string): Nombre del catalogo.</p>\n</li>\n<li><p><code>description</code>(string): Descripcion del catalogo.</p>\n</li>\n<li><p><code>items</code>(array of objects): Lista de ítems pertenecientes al catálogo consultado, donde cada uno incluye:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único del ítem.</p>\n</li>\n<li><p><code>catalog</code> (string): Nombre del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Clave técnica o interna del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción legible del ítem.</p>\n</li>\n<li><p><code>metadata</code> (object): Metadatos adicionales, como:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono asociado.</p>\n</li>\n<li><p><code>title</code> (string): Título para interfaces gráficas.</p>\n</li>\n<li><p><code>message</code> (object): Mensajes contextualizados por canal o lenguaje (<code>A</code>, <code>E</code>, <code>G</code>, etc.).</p>\n</li>\n<li><p>Otros campos personalizados según el catálogo.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\"><strong>Response Format</strong></h4>\n<p>Para la informacion de cada categoria se mantiene el siguiente formato:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"item_name\": { \"type\": \"string\" },\n    \"description\": { \"type\": \"string\" },\n    \"metadata\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"bg\": { \"type\": \"string\" },\n        \"icon\": { \"type\": \"string\" },\n        \"name\": { \"type\": \"string\" },\n        \"color\": { \"type\": \"string\" },\n        \"active\": { \"type\": \"boolean\" },\n        \"short_name\": { \"type\": \"string\" },\n        \"color_class\": { \"type\": \"string\" },\n        \"description\": { \"type\": \"string\" },\n        \"icon_ignore\": { \"type\": \"string\" },\n        \"icon_primary\": { \"type\": \"string\" }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","pfm-service","catalogs-items",""],"host":["{{host_app}}"],"query":[{"description":{"content":"<p>incomes_categories, expenses_categories, accounts_types</p>\n","type":"text/plain"},"key":"catalog","value":"expenses_categories"}],"variable":[]}},"response":[{"id":"3967f3a6-cebc-4751-bf9f-4fe14def170f","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-pfm/v1/pfm-service/catalogs/","host":["{{host_app}}"],"path":["api-pfm","v1","pfm-service","catalogs",""],"query":[{"key":"paginate","value":"true","disabled":true},{"key":"page","value":"1","type":"text","disabled":true},{"key":"page_size","value":"1","type":"text","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 18:52:41 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"17897"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"8b0036fc-d038-4a78-a6e6-07901e67429b"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cJtS9HflIAMELrA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3c279-1e14b50207b555c73a555e33;Parent=7e9f95efc2eaeb5e;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n        \"catalog_name\": \"incomes_categories\",\n        \"description\": \"Categorías de ingresos\",\n        \"items\": [\n            {\n                \"id\": \"e131ca4e-28d2-48fc-ab73-ea92e48b084f\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Rendimientos\",\n                \"description\": \"Pago de dividendos e intereses ganados\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_rendimientos.svg\",\n                    \"name\": \"Rendimientos\",\n                    \"color\": \"#4D9932\",\n                    \"active\": true,\n                    \"short_name\": \"INCRENDIMIENTOS\",\n                    \"color_class\": \"cat-inc-rendimientos\",\n                    \"description\": \"Intereses y pago de dividendos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_rendimientos_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_rendimientos_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"3954361d-ddf5-46dc-a8f8-af98ee9811da\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Sueldo\",\n                \"description\": \"Sueldos, salarios, honorarios e ingresos por trabajo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_sueldo.svg\",\n                    \"name\": \"Ingresos\",\n                    \"color\": \"#01C38E\",\n                    \"active\": true,\n                    \"short_name\": \"INCSUELDO\",\n                    \"color_class\": \"cat-inc-sueldo\",\n                    \"description\": \"Salarios, honorarios y por contrato\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_sueldo_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_sueldo_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"763d39ca-45e8-4171-8a97-29ba9a37665c\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Regalos y otros ingresos\",\n                \"description\": \"Regalos hechos por transferencias y otros ingresos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_regalos.svg\",\n                    \"name\": \"Regalos y otros ingresos\",\n                    \"color\": \"#5C9961\",\n                    \"active\": true,\n                    \"short_name\": \"INCREGALOS\",\n                    \"color_class\": \"cat-inc-regalos\",\n                    \"description\": \"Otros tipos de ingresos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_regalos_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_regalos_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"8ebba319-0042-41ff-bdbb-ba05cd824d52\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Transferencias\",\n                \"description\": \"Transferencias, depósitos y reembolsos recibidos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_transferencias.svg\",\n                    \"name\": \"Depósitos y Transferencias\",\n                    \"color\": \"#40916C\",\n                    \"active\": true,\n                    \"short_name\": \"INCTRANSFERENCIAS\",\n                    \"color_class\": \"cat-inc-trasferencias\",\n                    \"description\": \"Transferencias, depósitos y reembolsos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_transferencias_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_transferencias_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"593cea05-8f4d-4b40-ad1b-d73e43c8d53d\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Devolución de impuestos\",\n                \"description\": \"Devoluciones del Servicio de Impuestos Internos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_devolucion.svg\",\n                    \"name\": \"Devolución de impuestos\",\n                    \"color\": \"#25A244\",\n                    \"active\": true,\n                    \"short_name\": \"INCDEVOLUCION\",\n                    \"color_class\": \"cat-inc-devolucion\",\n                    \"description\": \"Reembolso o reducción de impuestos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_devolucion_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_devolucion_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"5f342655-bf27-4523-aa32-40d7cb48ae38\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Subvención\",\n                \"description\": \"Pensión, becas, subvención y ayudas familiares\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_subvencion.svg\",\n                    \"name\": \"Subvención y Pensión\",\n                    \"color\": \"#47783F\",\n                    \"active\": true,\n                    \"short_name\": \"INCSUBVENCION\",\n                    \"color_class\": \"cat-inc-subvencion\",\n                    \"description\": \"Pensión y ayuda económica\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_subvencion_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_subvencion_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b2\",\n                \"catalog\": \"c2a07389-da13-4420-9060-c6bef2d6bd03\",\n                \"item_name\": \"Rentas y arriendos\",\n                \"description\": \"Ingresos por arriendos de muebles e inmuebles\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/inc_rentas.svg\",\n                    \"name\": \"Rentas y Arriendos\",\n                    \"color\": \"#01936C\",\n                    \"active\": true,\n                    \"short_name\": \"INCRENTAS\",\n                    \"color_class\": \"cat-inc-rentas\",\n                    \"description\": \"Arriendo de muebles e inmuebles\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/inc_rentas_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/inc_rentas_primary.svg\"\n                }\n            }\n        ]\n    },\n    {\n        \"id\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n        \"catalog_name\": \"expenses_categories\",\n        \"description\": \"Categorías de egresos\",\n        \"items\": [\n            {\n                \"id\": \"bf50dc35-43d0-4f60-9860-770b8afc96f4\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Ignorar\",\n                \"description\": \"Transacciones que no quieres que se agreguen a una categoría\",\n                \"metadata\": {\n                    \"icon\": \"/assets/img/category/ignore.svg\",\n                    \"color\": \"#CFA7DC\",\n                    \"active\": true,\n                    \"short_name\": \"IGNORE\"\n                }\n            },\n            {\n                \"id\": \"38e570af-1241-426c-afa5-f874b1c49128\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Otros\",\n                \"description\": \"Otros\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/ahorro.svg\",\n                    \"color\": \"#9C9A9F\",\n                    \"active\": true,\n                    \"short_name\": \"OTROS\"\n                }\n            },\n            {\n                \"id\": \"4419f198-e4d5-4352-aba6-c6f173b748b2\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Pago Tarjeta de Crédito\",\n                \"description\": \"Compra de divisas, pago tarjeta de crédito\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/credit_card.svg\",\n                    \"name\": \"Pago Créditos\",\n                    \"color\": \"#E57465\",\n                    \"active\": true,\n                    \"short_name\": \"CREDITCARD\",\n                    \"color_class\": \"cat-credit-card\",\n                    \"description\": \"Tarjeta, créditos de consumo\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/credit_card_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/credit_card_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"4cdad960-1ec7-4a9b-aae8-71eeb6ba2ad7\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Transferencias entre Cuentas Propias\",\n                \"description\": \"Transferencias entre mis cuentas personales\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/trans_cuentas.svg\",\n                    \"name\": \"Transf. entre mis Cuentas\",\n                    \"color\": \"#E07591\",\n                    \"active\": true,\n                    \"short_name\": \"TRANSCUENTAS\",\n                    \"color_class\": \"cat-trans-cuentas\",\n                    \"description\": \"Transf. entre cuentas propias\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/trans_cuentas_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/trans_cuentas_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"f7f2f8aa-2297-41a2-9fcf-d65aa9cfb180\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Donaciones & Regalos\",\n                \"description\": \"Donaciones, regalos a terceros\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/donaciones.svg\",\n                    \"name\": \"Donaciones y Regalos\",\n                    \"color\": \"#F3960B\",\n                    \"active\": true,\n                    \"short_name\": \"DONACIONES\",\n                    \"color_class\": \"cat-donaciones\",\n                    \"description\": \"Donaciones o regalos a terceros\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/donaciones_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/donaciones_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"a249c468-bb4d-4365-83f4-108d456bb494\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Restaurantes\",\n                \"description\": \"Apps de pedidos, restaurantes, bares y nightclubs\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/restaurantes.svg\",\n                    \"name\": \"Restaurantes\",\n                    \"color\": \"#7D47EF\",\n                    \"active\": true,\n                    \"short_name\": \"RESTAURANTES\",\n                    \"color_class\": \"cat-restaurantes\",\n                    \"description\": \"Cafeterías, bares, restaurantes\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/restaurantes_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/restaurantes_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"f37b6770-7fc5-43e0-a837-50926e1ee459\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Sin categoría\",\n                \"description\": \"Transacción sin categoría\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/sin_categoria.svg\",\n                    \"name\": \"Añadir Categoría\",\n                    \"color\": \"#6F6F6F\",\n                    \"active\": false,\n                    \"short_name\": \"SINCATEGORIA\",\n                    \"color-class\": \"\",\n                    \"description\": \"Categoría\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/sin_categoria.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/sin_categoria.svg\"\n                }\n            },\n            {\n                \"id\": \"84e6fa2f-8790-4d94-8f65-6944c7bcba10\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Vacaciones & Viajes\",\n                \"description\": \"Plataformas de viajes, hoteles, cabañas, arriendo de auto\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/viajes.svg\",\n                    \"name\": \"Viajes y Vacaciones\",\n                    \"color\": \"#E55E6E\",\n                    \"active\": true,\n                    \"short_name\": \"VIAJES\",\n                    \"color_class\": \"cat-viajes\",\n                    \"description\": \"Pasajes, hoteles, reservas\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/viajes_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/viajes_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"ab0e1c52-4ab1-46b3-9384-7db452b282b2\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Supermercados\",\n                \"description\": \"Tienda de comestibles, panaderia, pasteleria\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/supermercados.svg\",\n                    \"name\": \"Supermercados\",\n                    \"color\": \"#FCC442\",\n                    \"active\": true,\n                    \"short_name\": \"SUPERMERCADOS\",\n                    \"color_class\": \"cat-supermercados\",\n                    \"description\": \"Almacén, alimentos, abarrotes\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/supermercados_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/supermercados_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"d26e9eb4-5c2a-45f2-af03-571af93ae7e2\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Transferencias & Retiros\",\n                \"description\": \"Transferencias a terceros, retiros en cajeros, retiros en caja\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/retiros.svg\",\n                    \"name\": \"Transferencias y Retiros\",\n                    \"color\": \"#5D95E8\",\n                    \"active\": true,\n                    \"short_name\": \"RETIROS\",\n                    \"color_class\": \"cat-retiros\",\n                    \"description\": \"Cajeros, transferencias a otros bancos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/retiros_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/retiros_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"53566d37-4b4d-4598-8b6c-09f5970c33cd\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Automóvil & Transporte\",\n                \"description\": \"Gasolina, estacionamiento, seguro auto, app taxi\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/transporte.svg\",\n                    \"name\": \"Automóvil y Transporte\",\n                    \"color\": \"#577590\",\n                    \"active\": true,\n                    \"short_name\": \"TRANSPORTE\",\n                    \"color_class\": \"cat-transporte\",\n                    \"description\": \"Gasolina, metro, uber, seguro auto\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/transporte_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/transporte_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"72fb8abb-d236-469d-a511-0e7d81c4af1e\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Hogar & Familia\",\n                \"description\": \"Renta, hipotecario, educación, mascota, veterinario, colegio\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/hogar.svg\",\n                    \"name\": \"Hogar y Familia\",\n                    \"color\": \"#7B80E3\",\n                    \"active\": true,\n                    \"short_name\": \"HOGAR\",\n                    \"color_class\": \"cat-hogar\",\n                    \"description\": \"Mascota, renta, educación, decoración\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/hogar_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/hogar_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"cf01dce7-6d5e-4ad6-8e5a-8ba5c6d6f94c\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Gastos Financieros & Seguros\",\n                \"description\": \"Seguros, comisiones, impuestos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/finanzas.svg\",\n                    \"name\": \"Gastos Financieros\",\n                    \"color\": \"#6E8D9E\",\n                    \"active\": true,\n                    \"short_name\": \"FINANZAS\",\n                    \"color_class\": \"cat-finanzas\",\n                    \"description\": \"Seguro, comisiones, impuestos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/finanzas_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/finanzas_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"22118f55-e6a9-46b0-ae8f-a063dda396e0\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Shopping\",\n                \"description\": \"Deportes, electrónica, vestuario y calzado\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                    \"name\": \"Shopping\",\n                    \"color\": \"#6A994E\",\n                    \"active\": true,\n                    \"short_name\": \"SHOPPING\",\n                    \"color_class\": \"cat-shopping\",\n                    \"description\": \"Vestuario, calzado, electrónica\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/shopping_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/shopping_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"0f7b3aa0-365f-475d-b3bc-39d960916a23\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Ahorro e Inversión\",\n                \"description\": \"Ahorros, propiedades, vehículos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/ahorro.svg\",\n                    \"name\": \"Ahorro e Inversión\",\n                    \"color\": \"#9D6B53\",\n                    \"active\": true,\n                    \"short_name\": \"AHORRO\",\n                    \"color_class\": \"cat-ahorro\",\n                    \"description\": \"Ahorros, propiedades, vehículos\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/ahorro_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/ahorro_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"8442c4fa-64e6-4470-af7c-8d007d5f572f\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Cuentas & Servicios\",\n                \"description\": \"Consumo de luz, agua, gas, internet, telefonía\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/servicios.svg\",\n                    \"name\": \"Cuentas y Servicios\",\n                    \"color\": \"#95B8D1\",\n                    \"active\": true,\n                    \"short_name\": \"SERVICIOS\",\n                    \"color_class\": \"cat-servicios\",\n                    \"description\": \"Gas, luz, agua, internet, telefonía\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/servicios_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/servicios_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"f0eae548-64e6-45b4-9bfd-4059d2b9d4df\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Salud & Bienestar\",\n                \"description\": \"Farmacia, doctores, dentista, gimnasio, salon de belleza, peluqueria\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/salud.svg\",\n                    \"name\": \"Salud y Bienestar\",\n                    \"color\": \"#48A2BD\",\n                    \"active\": true,\n                    \"short_name\": \"SALUD\",\n                    \"color_class\": \"cat-salud\",\n                    \"description\": \"Farmacia, hospital, clínica, dentista\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/salud_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/salud_primary.svg\"\n                }\n            },\n            {\n                \"id\": \"9abd4759-ab14-4e09-adc2-9c5dea1041b1\",\n                \"catalog\": \"1ec6a6b5-65d5-4a8c-85d0-4364c141aefd\",\n                \"item_name\": \"Entretenimiento\",\n                \"description\": \"Netflix, spotify, cine, apps store, videojuegos\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/entretenimiento.svg\",\n                    \"name\": \"Entretenimiento\",\n                    \"color\": \"#6CD1B8\",\n                    \"active\": true,\n                    \"short_name\": \"ENTRETENIMIENTO\",\n                    \"color_class\": \"cat-entretenimiento\",\n                    \"description\": \"Netflix, juegos, streaming, discotecas\",\n                    \"icon_ignore\": \"/assets/xerpa/global/img/categories/entretenimiento_ignore.svg\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/categories/entretenimiento_primary.svg\"\n                }\n            }\n        ]\n    },\n    {\n        \"id\": \"4625b3a0-b3dc-48e8-b495-1eda09e58222\",\n        \"catalog_name\": \"budget_status\",\n        \"description\": \"Estado del presupuesto\",\n        \"items\": [\n            {\n                \"id\": \"cbf5eacb-6b1c-42f4-bdba-5a6f6276e0ac\",\n                \"catalog\": \"4625b3a0-b3dc-48e8-b495-1eda09e58222\",\n                \"item_name\": \"Activo\",\n                \"description\": \"Presupuesto activo\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"ACTIVE\"\n                }\n            },\n            {\n                \"id\": \"f1ba1236-b4fd-4ed6-9d35-8114ed66726f\",\n                \"catalog\": \"4625b3a0-b3dc-48e8-b495-1eda09e58222\",\n                \"item_name\": \"Eliminado\",\n                \"description\": \"Presupuesto eliminado\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/shopping.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"DELETED\"\n                }\n            }\n        ]\n    },\n    {\n        \"id\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n        \"catalog_name\": \"accounts_types\",\n        \"description\": \"Tipos de cuentas\",\n        \"items\": [\n            {\n                \"id\": \"f3029ccb-8f07-4c15-a55d-5fc628cc4230\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_corriente\",\n                \"description\": \"Cuenta Corriente\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/products/cc.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTACORRIENTE\"\n                }\n            },\n            {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_vista.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            },\n            {\n                \"id\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_ahorro\",\n                \"description\": \"Cuenta Ahorro\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_ahorro.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAAHORRO\"\n                }\n            },\n            {\n                \"id\": \"18743d7e-4fee-4e13-b2fc-00f86d8f8511\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_inversion\",\n                \"description\": \"Cuenta Inversión\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_inversion.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAINVERSION\"\n                }\n            },\n            {\n                \"id\": \"d9a4b159-8e15-48ea-aa88-72f1c21bb0d0\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"tarjeta_debito\",\n                \"description\": \"Tarjeta Débito\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/tarjeta_debito.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"TARJETADEBITO\"\n                }\n            },\n            {\n                \"id\": \"e655b55f-e39c-49c0-a77e-aed53e1b5d15\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"tarjeta_credito\",\n                \"description\": \"Tarjeta Crédito\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/tarjeta_credito.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"TARJETACREDITO\"\n                }\n            }\n        ]\n    },\n    {\n        \"id\": \"dc34207f-34ba-4bd5-99ec-8ee4bbcdf927\",\n        \"catalog_name\": \"currencies\",\n        \"description\": \"Monedas\",\n        \"items\": [\n            {\n                \"id\": \"cea03b6b-96a3-4d5b-a84e-a74d5c88be0a\",\n                \"catalog\": \"dc34207f-34ba-4bd5-99ec-8ee4bbcdf927\",\n                \"item_name\": \"USD\",\n                \"description\": \"USD\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/currencies/usd.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"USD\"\n                }\n            }\n        ]\n    },\n    {\n        \"id\": \"a5b7cfeb-fe11-44ad-b251-64aaccd12bec\",\n        \"catalog_name\": \"deprecated_categories\",\n        \"description\": \"Categorías deprecadas\",\n        \"items\": [\n            {\n                \"id\": \"693b9aed-83a6-426a-8eb4-84adb64f10dd\",\n                \"catalog\": \"a5b7cfeb-fe11-44ad-b251-64aaccd12bec\",\n                \"item_name\": \"Yape Ingreso\",\n                \"description\": \"Yape Ingreso\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"35f5e608-4285-49a4-90ca-d90102131e14\",\n                \"catalog\": \"a5b7cfeb-fe11-44ad-b251-64aaccd12bec\",\n                \"item_name\": \"Warda Ingreso\",\n                \"description\": \"Warda Ingreso\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"cb5aa1ec-493b-49cf-8499-bf6f290345ff\",\n                \"catalog\": \"a5b7cfeb-fe11-44ad-b251-64aaccd12bec\",\n                \"item_name\": \"Warda Egreso\",\n                \"description\": \"Warda Egreso\",\n                \"metadata\": {}\n            },\n            {\n                \"id\": \"9c7ac7a6-1051-4c29-b794-5c1fecee9ec5\",\n                \"catalog\": \"a5b7cfeb-fe11-44ad-b251-64aaccd12bec\",\n                \"item_name\": \"Yape Egreso\",\n                \"description\": \"Yape Egreso\",\n                \"metadata\": {}\n            }\n        ]\n    }\n]"}],"_postman_id":"5349d110-d44e-4805-ab00-859a08a8facf"}],"id":"75c6dbaa-c0f0-423c-821d-bd6941b4c6fa","description":"<h3 id=\"🗂️-catálogos-del-sistema-pfm\">🗂️ Catálogos del sistema PFM</h3>\n<p>La carpeta <strong>Catalogs</strong> contiene los endpoints para <strong>consultar, explorar y administrar los catálogos de datos maestros</strong> que utiliza el sistema de finanzas personales. Estos catálogos agrupan elementos como tipos de transacción, categorías de gasto e ingreso, estados, íconos y otras propiedades de configuración clave para el funcionamiento y visualización de la plataforma.</p>\n<hr />\n<h4 id=\"📌-funcionalidades-incluidas\">📌 Funcionalidades incluidas</h4>\n<p>A través de esta carpeta es posible:</p>\n<ul>\n<li><p>Obtener todos los catálogos disponibles en el sistema.</p>\n</li>\n<li><p>Consultar el detalle de un catálogo específico.</p>\n</li>\n<li><p>Obtener la información detallada de un ítem dentro de un catálogo.</p>\n</li>\n<li><p>Actualizar un ítem existente para modificar su nombre, descripción, metadatos o ícono.</p>\n</li>\n<li><p>Filtrar catálogos por tipo (por ejemplo, <code>project_type</code>, <code>activity_type</code>, <code>transaction_category</code>, etc.).</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🧠-casos-de-uso\">🧠 Casos de uso</h4>\n<ul>\n<li><p>Personalizar la visualización de categorías en apps embebidas o móviles.</p>\n</li>\n<li><p>Agregar nuevas categorías o editar ítems existentes según la evolución del producto.</p>\n</li>\n<li><p>Mostrar nombres amigables, íconos y colores asociados a cada tipo de gasto o ingreso.</p>\n</li>\n<li><p>Facilitar el mantenimiento y escalabilidad de componentes del sistema basados en catálogos.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🧩-estructura-típica-de-un-ítem\">🧩 Estructura típica de un ítem</h4>\n<p>Cada ítem de catálogo incluye:</p>\n<ul>\n<li><p><code>id</code>, <code>catalog</code>, <code>item_name</code>, <code>description</code></p>\n</li>\n<li><p><code>metadata</code>: información visual o técnica como:</p>\n<ul>\n<li><code>icon</code>, <code>color</code>, <code>name</code>, <code>order</code>, <code>active</code>, <code>short_name</code>, <code>frequency_description</code>, etc.</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"🔐-seguridad\">🔐 Seguridad</h4>\n<ul>\n<li><p>Todos los endpoints requieren autenticación.</p>\n</li>\n<li><p>Solo usuarios o servicios autorizados pueden realizar modificaciones (<code>PUT</code>).</p>\n</li>\n</ul>\n","_postman_id":"75c6dbaa-c0f0-423c-821d-bd6941b4c6fa"}],"id":"efda01de-4990-4e16-870c-628dda498e67","description":"<h2 id=\"api-spendings\">API Spendings</h2>\n<p>Agrupa todos los endpoints relacionados con la gestión de datos financieros personales del usuario. A través de esta API, se permite consultar, modificar y analizar las transacciones económicas que realiza una persona usuaria, facilitando la visualización de su comportamiento financiero y el control de su presupuesto.</p>\n<p>Este módulo está diseñado para integrarse con aplicaciones que ofrecen funcionalidades de administración de gastos, categorización inteligente, reglas personalizadas y generación de métricas de ahorro y consumo.</p>\n<hr />\n<h4 id=\"📌-casos-de-uso-comunes\">📌 Casos de uso comunes</h4>\n<p>La carpeta contiene subgrupos de endpoints organizados en las siguientes categorías:</p>\n<ul>\n<li><p>Consulta y validación de información del usuario.</p>\n</li>\n<li><p>Gestión de cuentas personales y validación de actividad.</p>\n</li>\n<li><p>Registro de eventos del sistema y acciones del usuario.</p>\n</li>\n<li><p>Consulta y administración de catálogos del sistema (categorías, estados, tipos, etc.).</p>\n</li>\n<li><p>Creación, edición y control de presupuestos personalizados.</p>\n</li>\n<li><p>Consulta, edición, clasificación y análisis de transacciones registradas.</p>\n</li>\n<li><p>Gestión de reglas personalizadas de clasificación de transacciones por el usuario.</p>\n</li>\n</ul>\n<img src=\"https://content.pstmn.io/3a6663d7-6c0f-44cb-a8b1-d38a65665078/U2VwZW5kaW5ncy5wbmc=\" />\n\n<h4 id=\"🔐-autenticación-requerida\">🔐 Autenticación requerida</h4>\n<p>Todos los endpoints requieren un <strong>User Token válido</strong>, ya que cada solicitud se vincula a un usuario específico.</p>\n<blockquote>\n<p>El token debe enviarse como:<br /><code>Authorization: Bearer {{user_token}}</code> </p>\n</blockquote>\n<hr />\n<h4 id=\"🎯-consideraciones\">🎯 Consideraciones</h4>\n<ul>\n<li><p>Todos los endpoints requieren autenticación previa mediante token.</p>\n</li>\n<li><p>El sistema de categorización se apoya en modelos de Machine Learning, pero permite intervención manual mediante reglas.</p>\n</li>\n<li><p>Los resultados pueden filtrarse por fechas, categorías, cuentas o tipos de transacción.</p>\n</li>\n<li><p>La mayoría de los recursos implementan paginación y ordenamiento.</p>\n</li>\n</ul>\n","_postman_id":"efda01de-4990-4e16-870c-628dda498e67"},{"name":"Core","item":[{"name":"Cuentas","item":[{"name":"Obtiene datos de cuenta","event":[{"listen":"test","script":{"id":"8c329bfe-c831-455a-853d-00acb4b20e88","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    product_type: 'object',\r","    product_status: 'object',\r","    active_pfm: 'boolean',\r","    external_id: 'string',\r","    account_number: 'string',\r","    created_at: 'string',\r","    updated_at: 'string',\r","    user: 'string',\r","    account_type: 'string',\r","    account_status: 'string'\r","};\r","\r","const productTypeProperties = {\r","    id: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const productStatusProperties = {\r","    id: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string',\r","    type: { type: 'string', optional: true }\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson.length > 0) {\r","        const firstItem = responseJson[0];\r","        xerpaTestApi.checkObjectProperties(firstItem, topLevelProperties);\r","\r","        // Check properties of the product_type object\r","        xerpaTestApi.checkObjectProperties(firstItem.product_type, productTypeProperties);\r","\r","        // Check metadata properties of the product_type object\r","        xerpaTestApi.checkObjectProperties(firstItem.product_type.metadata, metadataProperties);\r","\r","        // Check properties of the product_status object\r","        xerpaTestApi.checkObjectProperties(firstItem.product_status, productStatusProperties);\r","\r","        // Check metadata properties of the product_status object\r","        xerpaTestApi.checkObjectProperties(firstItem.product_status.metadata, metadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"d3d3e3aa-2b27-4893-9636-a940a9d1f19a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/accounts/","description":"<p>Este endpoint permite consultar todas las cuentas asociadas a un usuario específico dentro del servicio de ahorro.</p>\n<h4 id=\"request\"><strong>Request</strong></h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-saving/v1/saving-service/users/{{user_id}}/accounts/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>user_id</code> (string): ID del usuario asociado al proyecto.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un <strong>arreglo de objetos</strong>, donde cada objeto representa una cuenta del usuario, e incluye los siguientes campos:</p>\n<ul>\n<li><p><code>id</code>(string): Identificador único de la cuenta.</p>\n</li>\n<li><p><code>product_type</code>(object): Detalles del tipo de producto financiero asociado, este incluye:</p>\n<ul>\n<li><p><code>id</code> (string): ID del tipo de producto.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del tipo de producto.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del producto.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional, incluyendo:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono representativo.</p>\n</li>\n<li><p><code>type</code> (string): Tipo del producto.</p>\n</li>\n<li><p><code>color</code> (string): Color asignado.</p>\n</li>\n<li><p><code>active</code> (boolean): Estado de activación del producto.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>product_status</code> (object): Estado actual del producto asociado, este incluye:</p>\n<ul>\n<li><p><code>id</code> (string): ID del estado.</p>\n</li>\n<li><p><code>item_name</code> (string): Nombre del estado.</p>\n</li>\n<li><p><code>description</code> (string): Descripción del estado.</p>\n</li>\n<li><p><code>metadata</code> (object): Incluye:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono del estado.</p>\n</li>\n<li><p><code>color</code> (string): Color visual.</p>\n</li>\n<li><p><code>active</code> (boolean): Si el estado está activo.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>active_pfm</code> (boolean): Indica si la cuenta está activa en la plataforma de gestión financiera personal (PFM).</p>\n</li>\n<li><p><code>external_id</code> (string): Identificador externo de la cuenta (por ejemplo, desde el core bancario).</p>\n</li>\n<li><p><code>account_number</code> (string): Número de cuenta del usuario.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha y hora de creación de la cuenta.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha y hora de la última actualización.</p>\n</li>\n<li><p><code>user</code> (string): ID del usuario asociado a la cuenta.</p>\n</li>\n<li><p><code>account_type</code> (string): Tipo de cuenta (por ejemplo: ahorro, corriente, inversión).</p>\n</li>\n<li><p><code>account_status</code> (string): Estado general de la cuenta.</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n      \"product_type\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"item_name\": { \"type\": \"string\" },\n          \"description\": { \"type\": \"string\" },\n          \"metadata\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"icon\": { \"type\": \"string\" },\n              \"type\": { \"type\": \"string\" },\n              \"color\": { \"type\": \"string\" },\n              \"active\": { \"type\": \"boolean\" },\n              \"short_name\": { \"type\": \"string\" }\n            },\n          }\n        },\n      },\n      \"product_status\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"item_name\": { \"type\": \"string\" },\n          \"description\": { \"type\": \"string\" },\n          \"metadata\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"icon\": { \"type\": \"string\" },\n              \"color\": { \"type\": \"string\" },\n              \"active\": { \"type\": \"boolean\" },\n              \"short_name\": { \"type\": \"string\" }\n            },\n          }\n        },    \n      },\n      \"active_pfm\": { \"type\": \"boolean\" },\n      \"external_id\": { \"type\": \"string\" },\n      \"account_number\": { \"type\": \"string\" },\n      \"created_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n      \"updated_at\": { \"type\": \"string\", \"format\": \"date-time\" },\n      \"user\": { \"type\": \"string\", \"format\": \"uuid\" },\n      \"account_type\": { \"type\": \"string\", \"format\": \"uuid\" },\n      \"account_status\": { \"type\": \"string\", \"format\": \"uuid\" }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-saving","v1","saving-service","users","{{user_id}}","accounts",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"69bd84aa-3ce6-4f5d-9f92-a864a2a0a18e","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}api-saving/v1/saving-service/users/{{user_id}}/accounts/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"5c56a1fa-fad2-4cfc-8a4c-2de63889ce5f\",\n        \"product_type\": {\n            \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n            \"item_name\": \"cuenta_vista\",\n            \"description\": \"Cuenta Vista\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/account.svg\",\n                \"type\": \"from\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAVISTA\"\n            }\n        },\n        \"product_status\": {\n            \"id\": \"17425297-5c11-4cf2-975e-38327df355b7\",\n            \"item_name\": \"cuenta_activa\",\n            \"description\": \"Cuenta activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/cuenta_activa.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAACTIVA\"\n            }\n        },\n        \"active_pfm\": true,\n        \"external_id\": \"xh-user-qa-1-dev2\",\n        \"account_number\": \"xxxxx-123-xxx\",\n        \"created_at\": \"2024-06-24T10:46:09.873851-06:00\",\n        \"updated_at\": \"2024-08-07T10:43:01.577460-06:00\",\n        \"user\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"account_type\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n        \"account_status\": \"17425297-5c11-4cf2-975e-38327df355b7\"\n    },\n    {\n        \"id\": \"6da5ed6c-29fe-4451-98aa-ae61dc470ec6\",\n        \"product_type\": {\n            \"id\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n            \"item_name\": \"cuenta_ahorro\",\n            \"description\": \"Cuenta Ahorro\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/account.svg\",\n                \"type\": \"to\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAAHORRO\"\n            }\n        },\n        \"product_status\": {\n            \"id\": \"17425297-5c11-4cf2-975e-38327df355b7\",\n            \"item_name\": \"cuenta_activa\",\n            \"description\": \"Cuenta activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/cuenta_activa.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAACTIVA\"\n            }\n        },\n        \"active_pfm\": true,\n        \"external_id\": \"xh-user-qa-1-dev\",\n        \"account_number\": \"xxxxx-456-xxx\",\n        \"created_at\": \"2024-06-24T10:46:09.875859-06:00\",\n        \"updated_at\": \"2024-08-07T10:43:01.579008-06:00\",\n        \"user\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"account_type\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n        \"account_status\": \"17425297-5c11-4cf2-975e-38327df355b7\"\n    },\n    {\n        \"id\": \"61dc9230-d102-4c79-9f7b-b7024b303530\",\n        \"product_type\": {\n            \"id\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n            \"item_name\": \"cuenta_ahorro\",\n            \"description\": \"Cuenta Ahorro\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/account.svg\",\n                \"type\": \"to\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAAHORRO\"\n            }\n        },\n        \"product_status\": {\n            \"id\": \"17425297-5c11-4cf2-975e-38327df355b7\",\n            \"item_name\": \"cuenta_activa\",\n            \"description\": \"Cuenta activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/cuenta_activa.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAACTIVA\"\n            }\n        },\n        \"active_pfm\": true,\n        \"external_id\": \"xh-user-qa-1-dev3\",\n        \"account_number\": \"xxxxx-789-xxx\",\n        \"created_at\": \"2024-06-24T10:46:09.875943-06:00\",\n        \"updated_at\": \"2024-08-07T10:43:01.580541-06:00\",\n        \"user\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"account_type\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n        \"account_status\": \"17425297-5c11-4cf2-975e-38327df355b7\"\n    },\n    {\n        \"id\": \"e4e5a11b-706e-4a75-a767-0735797c8622\",\n        \"product_type\": {\n            \"id\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n            \"item_name\": \"cuenta_ahorro\",\n            \"description\": \"Cuenta Ahorro\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/account.svg\",\n                \"type\": \"to\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAAHORRO\"\n            }\n        },\n        \"product_status\": {\n            \"id\": \"17425297-5c11-4cf2-975e-38327df355b7\",\n            \"item_name\": \"cuenta_activa\",\n            \"description\": \"Cuenta activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/cuenta_activa.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAACTIVA\"\n            }\n        },\n        \"active_pfm\": true,\n        \"external_id\": \"user-qa-2c\",\n        \"account_number\": \"user-qa-2-number-a\",\n        \"created_at\": \"2024-07-30T15:40:41.654048-06:00\",\n        \"updated_at\": \"2024-08-07T10:43:01.582159-06:00\",\n        \"user\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"account_type\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n        \"account_status\": \"17425297-5c11-4cf2-975e-38327df355b7\"\n    },\n    {\n        \"id\": \"a1b8bc89-1668-4a25-ac83-5251a5c0b926\",\n        \"product_type\": {\n            \"id\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n            \"item_name\": \"cuenta_ahorro\",\n            \"description\": \"Cuenta Ahorro\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/account.svg\",\n                \"type\": \"to\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAAHORRO\"\n            }\n        },\n        \"product_status\": {\n            \"id\": \"17425297-5c11-4cf2-975e-38327df355b7\",\n            \"item_name\": \"cuenta_activa\",\n            \"description\": \"Cuenta activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/cuenta_activa.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAACTIVA\"\n            }\n        },\n        \"active_pfm\": true,\n        \"external_id\": \"user-qa-2d\",\n        \"account_number\": \"user-qa-2-number-b\",\n        \"created_at\": \"2024-07-30T15:40:41.654172-06:00\",\n        \"updated_at\": \"2024-08-07T10:43:01.583810-06:00\",\n        \"user\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"account_type\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n        \"account_status\": \"17425297-5c11-4cf2-975e-38327df355b7\"\n    },\n    {\n        \"id\": \"12bf0ea1-da88-445c-9c17-29edbd18510d\",\n        \"product_type\": {\n            \"id\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n            \"item_name\": \"cuenta_ahorro\",\n            \"description\": \"Cuenta Ahorro\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/account.svg\",\n                \"type\": \"to\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAAHORRO\"\n            }\n        },\n        \"product_status\": {\n            \"id\": \"17425297-5c11-4cf2-975e-38327df355b7\",\n            \"item_name\": \"cuenta_activa\",\n            \"description\": \"Cuenta activa\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/categories/cuenta_activa.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAACTIVA\"\n            }\n        },\n        \"active_pfm\": true,\n        \"external_id\": \"1b776e47-9ef2-4536-b1ea-c62700e15bf8\",\n        \"account_number\": \"7dc3cb92-810e-431f-b82f-ef814ad18c92\",\n        \"created_at\": \"2024-08-05T12:34:07.991381-06:00\",\n        \"updated_at\": \"2024-08-07T10:43:01.585360-06:00\",\n        \"user\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"account_type\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n        \"account_status\": \"17425297-5c11-4cf2-975e-38327df355b7\"\n    }\n]"}],"_postman_id":"d3d3e3aa-2b27-4893-9636-a940a9d1f19a"},{"name":"Obtener cuentas usuario","event":[{"listen":"test","script":{"id":"6318457e-8d1f-4bb2-ad5a-75db2e569293","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types for each item in the array\r","const itemProperties = {\r","    id: 'string',\r","    user: 'string',\r","    external_id: 'string',\r","    account_number: 'string',\r","    account_type: 'string',\r","    account_status: 'string',\r","    created_at: 'string',\r","    updated_at: 'string',\r","    active_pfm: 'boolean'\r","};\r","\r","// Check properties of the first item in the array\r","pm.test(\"Response has expected properties with correct types\", () => {\r","    if (Array.isArray(responseJson) && responseJson.length > 0) {\r","        // Test only the first item in the array\r","        xerpaTestApi.checkObjectProperties(responseJson[0], itemProperties);\r","    } else {\r","        pm.expect.fail('Response is not an array or is empty');\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"b58002b5-2878-459d-b21b-d9be0155fe3a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/core-service/users/{{user_id}}/accounts/","description":"<p>Este endpoint recupera las cuentas asociadas al usuario autenticado.</p>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Method: GET</p>\n</li>\n<li><p>Endpoint: {{host_app}}/api-pfm/v1/core-service/users/{{user_id}}/accounts/</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>user_id</code>(string): ID del usuario.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta es un arreglo de elementos <code>account</code> en donde cada item incluye:</p>\n<ul>\n<li><p><code>id</code> (string): ID único de la cuenta.</p>\n</li>\n<li><p><code>user</code> (string): ID del usuario asociado a la cuenta.</p>\n</li>\n<li><p><code>external_id</code> (string): Identificador externo de la cuenta (ej. del banco).</p>\n</li>\n<li><p><code>account_number</code> (string): Número de cuenta.</p>\n</li>\n<li><p><code>account_type</code> (string): Tipo de cuenta.</p>\n</li>\n<li><p><code>account_status</code> (string): Estado actual de la cuenta.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha de creación de la cuenta.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de última actualización de la cuenta.</p>\n</li>\n<li><p><code>active_pfm</code> (boolean): Indica si la cuenta está activa en el sistema de gestión financiera personal (PFM).</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"id\": {\"type\": \"string\"},\n      \"user\": {\"type\": \"string\"},\n      \"external_id\": {\"type\": \"string\"},\n      \"account_number\": {\"type\": \"string\"},\n      \"account_type\": {\"type\": \"string\"},\n      \"account_status\": {\"type\": \"string\"},\n      \"created_at\": {\"type\": \"string\"},\n      \"updated_at\": {\"type\": \"string\"},\n      \"active_pfm\": {\"type\": \"boolean\"}\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","core-service","users","{{user_id}}","accounts",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"744d49d6-8ab7-4ea2-b2bc-1530add977ce","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/core-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/accounts/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 16:13:46 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"2240"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"82dabd17-fab8-46e9-afcf-829d0539f960"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cJWBNGbboAMEiUQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b39d3a-3b124df3779ac1a83cf5c3ed;Parent=3aef4034db4bc662;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"5c56a1fa-fad2-4cfc-8a4c-2de63889ce5f\",\n        \"user\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"external_id\": \"xh-user-qa-1-dev2\",\n        \"account_number\": \"xxxxx-123-xxx\",\n        \"account_type\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n        \"account_status\": \"17425297-5c11-4cf2-975e-38327df355b7\",\n        \"created_at\": \"2024-06-24T16:46:09+0000\",\n        \"updated_at\": \"2024-06-24T16:46:09+0000\",\n        \"active_pfm\": true\n    },\n    {\n        \"id\": \"6da5ed6c-29fe-4451-98aa-ae61dc470ec6\",\n        \"user\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"external_id\": \"xh-user-qa-1-dev\",\n        \"account_number\": \"xxxxx-456-xxx\",\n        \"account_type\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n        \"account_status\": \"17425297-5c11-4cf2-975e-38327df355b7\",\n        \"created_at\": \"2024-06-24T16:46:09+0000\",\n        \"updated_at\": \"2024-06-24T16:46:09+0000\",\n        \"active_pfm\": true\n    },\n    {\n        \"id\": \"61dc9230-d102-4c79-9f7b-b7024b303530\",\n        \"user\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"external_id\": \"xh-user-qa-1-dev3\",\n        \"account_number\": \"xxxxx-789-xxx\",\n        \"account_type\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n        \"account_status\": \"17425297-5c11-4cf2-975e-38327df355b7\",\n        \"created_at\": \"2024-06-24T16:46:09+0000\",\n        \"updated_at\": \"2024-06-24T16:46:09+0000\",\n        \"active_pfm\": true\n    },\n    {\n        \"id\": \"e4e5a11b-706e-4a75-a767-0735797c8622\",\n        \"user\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"external_id\": \"user-qa-2c\",\n        \"account_number\": \"user-qa-2-number-a\",\n        \"account_type\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n        \"account_status\": \"17425297-5c11-4cf2-975e-38327df355b7\",\n        \"created_at\": \"2024-07-30T21:40:41+0000\",\n        \"updated_at\": \"2024-07-30T21:40:41+0000\",\n        \"active_pfm\": true\n    },\n    {\n        \"id\": \"a1b8bc89-1668-4a25-ac83-5251a5c0b926\",\n        \"user\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"external_id\": \"user-qa-2d\",\n        \"account_number\": \"user-qa-2-number-b\",\n        \"account_type\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n        \"account_status\": \"17425297-5c11-4cf2-975e-38327df355b7\",\n        \"created_at\": \"2024-07-30T21:40:41+0000\",\n        \"updated_at\": \"2024-07-30T21:40:41+0000\",\n        \"active_pfm\": true\n    },\n    {\n        \"id\": \"12bf0ea1-da88-445c-9c17-29edbd18510d\",\n        \"user\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n        \"external_id\": \"1b776e47-9ef2-4536-b1ea-c62700e15bf8\",\n        \"account_number\": \"7dc3cb92-810e-431f-b82f-ef814ad18c92\",\n        \"account_type\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n        \"account_status\": \"17425297-5c11-4cf2-975e-38327df355b7\",\n        \"created_at\": \"2024-08-05T18:34:07+0000\",\n        \"updated_at\": \"2024-08-05T18:34:07+0000\",\n        \"active_pfm\": true\n    }\n]"}],"_postman_id":"b58002b5-2878-459d-b21b-d9be0155fe3a"},{"name":"Obtener cuentas usuario detalle","event":[{"listen":"test","script":{"id":"43ba2641-b85f-4203-8a65-a977ab67c0e5","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    user: 'string',\r","    external_id: 'string',\r","    account_number: 'string',\r","    account_type: 'string',\r","    account_status: 'string',\r","    created_at: 'string',\r","    updated_at: 'string',\r","    active_pfm: 'boolean'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"8cce8df9-0b07-43d5-bcc1-7557136b8f94","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/core-service/users/{{user_id}}/accounts/{{account_id}}/","description":"<p>Este endpoint permite consultar los detalles de una cuenta específica asociada a un usuario.</p>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Method</strong>: GET</p>\n</li>\n<li><p><strong>Endpoint</strong>: {{host_app}}/api-pfm/v1/core-service/users/{{user_id}}/accounts/{{obtain_account_detail_account_id}}/</p>\n</li>\n<li><p><strong>Parámetros de ruta</strong>:</p>\n<ul>\n<li><p><code>user_id</code>(string): ID del usuario.</p>\n</li>\n<li><p><code>account_id</code>(string): ID de la cuenta del usuario.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON con los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): ID único de la cuenta.</p>\n</li>\n<li><p><code>user</code> (string): ID del usuario asociado a la cuenta.</p>\n</li>\n<li><p><code>external_id</code> (string): Identificador externo de la cuenta (ej. del banco).</p>\n</li>\n<li><p><code>account_number</code> (string): Número de cuenta.</p>\n</li>\n<li><p><code>account_type</code> (string): Tipo de cuenta.</p>\n</li>\n<li><p><code>account_status</code> (string): Estado actual de la cuenta.</p>\n</li>\n<li><p><code>created_at</code> (string): Fecha de creación de la cuenta.</p>\n</li>\n<li><p><code>updated_at</code> (string): Fecha de última actualización de la cuenta.</p>\n</li>\n<li><p><code>active_pfm</code> (boolean): Indica si la cuenta está activa en el sistema de gestión financiera personal (PFM).</p>\n</li>\n</ul>\n<h4 id=\"json-schema\">JSON Schema</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\"type\": \"string\"},\n    \"user\": {\"type\": \"string\"},\n    \"external_id\": {\"type\": \"string\"},\n    \"account_number\": {\"type\": \"string\"},\n    \"account_type\": {\"type\": \"string\"},\n    \"account_status\": {\"type\": \"string\"},\n    \"created_at\": {\"type\": \"string\"},\n    \"updated_at\": {\"type\": \"string\"},\n    \"active_pfm\": {\"type\": \"boolean\"}\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","core-service","users","{{user_id}}","accounts","{{account_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"02c6649c-31db-4792-8ed4-dca3f4891f1c","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/core-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/accounts/12bf0ea1-da88-445c-9c17-29edbd18510d/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 16:17:16 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"408"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"141e6643-f6d4-4cd8-851a-d6a11fe8a374"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cJWiCGQDIAMEngg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b39e0c-15b1af890a491e8a759b664d;Parent=72f3aec015b65794;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"12bf0ea1-da88-445c-9c17-29edbd18510d\",\n    \"user\": \"61a85f1f-98aa-4dcd-837d-84cf54bb532a\",\n    \"external_id\": \"1b776e47-9ef2-4536-b1ea-c62700e15bf8\",\n    \"account_number\": \"7dc3cb92-810e-431f-b82f-ef814ad18c92\",\n    \"account_type\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n    \"account_status\": \"17425297-5c11-4cf2-975e-38327df355b7\",\n    \"created_at\": \"2024-08-05T18:34:07+0000\",\n    \"updated_at\": \"2024-08-05T18:34:07+0000\",\n    \"active_pfm\": true\n}"}],"_postman_id":"8cce8df9-0b07-43d5-bcc1-7557136b8f94"},{"name":"Obtener cuentas activas inactivas","event":[{"listen":"test","script":{"id":"32682563-f46c-41a1-8423-e216d1bd437d","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types for the top-level object\r","const topLevelProperties = {\r","    accounts: 'array'\r","};\r","\r","// Define the expected property types for each item in the accounts array\r","const accountProperties = {\r","    account_id: 'string',\r","    active_pfm: 'boolean'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties of the first item in the accounts array\r","pm.test(\"First account in the array has expected properties with correct types\", () => {\r","    if (Array.isArray(responseJson.accounts) && responseJson.accounts.length > 0) {\r","        // Test only the first item in the accounts array\r","        xerpaTestApi.checkObjectProperties(responseJson.accounts[0], accountProperties);\r","    } else {\r","        pm.expect.fail('Accounts is not an array or is empty');\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"d878973f-d7ea-424a-9c93-d6d38cc09f23","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/core-service/users/{{user_id}}/accounts/activation/","description":"<p>Este endpoint permite obtener las cuentas activas de un usuario en el sistema de gestión financiera personal (PFM).</p>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>URL:</strong> {{host_app}}/api-pfm/v1/core-service/users/{{user_id}}/accounts/activation/</p>\n</li>\n<li><p><strong>Parámetros</strong>:</p>\n<ul>\n<li><code>user_id</code>(string): ID del usuario</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>Este request de tipo <code>GET</code> no requiere cuerpo.<br />El cuerpo de la solicitud debe enviarse vacío.</p>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON que contiene un arreglo de cuentas, donde cada objeto incluye:</p>\n<ul>\n<li><p><code>account_id</code> (string): Identificador único de la cuenta.</p>\n</li>\n<li><p><code>active_pfm</code> (boolean): Indica si la cuenta está activa en el sistema PFM.</p>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"accounts\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"account_id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"active_pfm\": { \"type\": \"boolean\" }\n        },\n      }\n    }\n  },\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","core-service","users","{{user_id}}","accounts","activation",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"652d786c-a66f-4ee7-8b7a-0f97339548ca","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/core-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/accounts/activation/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 16:20:25 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"446"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"6a0ea228-9795-496a-88d2-70c59f5f53f6"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cJW_kHkxoAMEIZw="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b39ec9-6e7dd9f4358114147462c2a4;Parent=228d80e74b6d471a;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"accounts\": [\n        {\n            \"account_id\": \"5c56a1fa-fad2-4cfc-8a4c-2de63889ce5f\",\n            \"active_pfm\": true\n        },\n        {\n            \"account_id\": \"6da5ed6c-29fe-4451-98aa-ae61dc470ec6\",\n            \"active_pfm\": true\n        },\n        {\n            \"account_id\": \"61dc9230-d102-4c79-9f7b-b7024b303530\",\n            \"active_pfm\": true\n        },\n        {\n            \"account_id\": \"e4e5a11b-706e-4a75-a767-0735797c8622\",\n            \"active_pfm\": true\n        },\n        {\n            \"account_id\": \"a1b8bc89-1668-4a25-ac83-5251a5c0b926\",\n            \"active_pfm\": true\n        },\n        {\n            \"account_id\": \"12bf0ea1-da88-445c-9c17-29edbd18510d\",\n            \"active_pfm\": true\n        }\n    ]\n}"}],"_postman_id":"d878973f-d7ea-424a-9c93-d6d38cc09f23"},{"name":"Activar desactivar cuentas","event":[{"listen":"test","script":{"id":"c516a650-9b55-435d-88f6-57590f46d178","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    accounts: 'array'\r","};\r","\r","const accountProperties = {\r","    account_id: 'string',\r","    active_pfm: 'boolean'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the accounts array\r","pm.test(\"Accounts have expected properties with correct types\", () => {\r","    if (responseJson.accounts && responseJson.accounts.length > 0) {\r","        xerpaTestApi.checkArrayObjectProperties(responseJson.accounts, accountProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"f76767f2-8a8d-4e0d-b2c5-2575fac41ce3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"accounts\": [\r\n        {\r\n            \"account_id\": \"03b8ac8a-965a-4c1f-844f-5df382d912de\",\r\n            \"active_pfm\": true\r\n        },\r\n        {\r\n            \"account_id\": \"e1d40975-861c-4397-b052-2c67d6b5066b\",\r\n            \"active_pfm\": true\r\n        },\r\n        {\r\n            \"account_id\": \"12bf0ea1-da88-445c-9c17-29edbd18510d\",\r\n            \"active_pfm\": true\r\n        },\r\n        {\r\n            \"account_id\": \"5c56a1fa-fad2-4cfc-8a4c-2de63889ce5f\",\r\n            \"active_pfm\": true\r\n        },\r\n        {\r\n            \"account_id\": \"6da5ed6c-29fe-4451-98aa-ae61dc470ec6\",\r\n            \"active_pfm\": true\r\n        },\r\n        {\r\n            \"account_id\": \"61dc9230-d102-4c79-9f7b-b7024b303530\",\r\n            \"active_pfm\": true\r\n        },\r\n        {\r\n            \"account_id\": \"a1b8bc89-1668-4a25-ac83-5251a5c0b926\",\r\n            \"active_pfm\": true\r\n        },\r\n        {\r\n            \"account_id\": \"1a2384a8-d88b-43fb-a910-acc29c78de30\",\r\n            \"active_pfm\": true\r\n        },\r\n        {\r\n            \"account_id\": \"e4e5a11b-706e-4a75-a767-0735797c8622\",\r\n            \"active_pfm\": true\r\n        },\r\n        {\r\n            \"account_id\": \"7dd8c03e-3d21-430d-af97-7d2444ccb76c\",\r\n            \"active_pfm\": true\r\n        }\r\n    ]\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}api-pfm/v1/core-service/users/{{user_id}}/accounts/activation/","description":"<p>Este endpoint permite <strong>activar cuentas de usuario</strong> en el sistema de gestión financiera personal (PFM) mediante una solicitud HTTP <code>POST</code>. La activación de cuentas es esencial para que los usuarios puedan gestionar sus finanzas a través de la plataforma.</p>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Metodo</strong>: POST</p>\n</li>\n<li><p><strong>URL</strong>: {{host_app}}api-pfm/v1/core-service/users/{{user_id}}/accounts/activation/</p>\n</li>\n<li><p><strong>Parámetros</strong>:</p>\n<ul>\n<li><code>user_id</code> (string): ID del usuario asociado.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<p>La solicitud debe enviarse en formato JSON e incluir un arreglo de objetos bajo la clave <code>accounts</code>. Cada objeto debe contener los siguientes parámetros:</p>\n<ul>\n<li><p><code>account_id</code> (string): <strong>Identificador único de la cuenta a activar.</strong> Este valor es necesario para identificar la cuenta específica que se desea activar.</p>\n</li>\n<li><p><code>active_pfm</code> (boolean): <strong>Valor que indica si la cuenta debe marcarse como activa.</strong> Debe establecerse en <code>true</code> para activar la cuenta en el sistema.</p>\n</li>\n</ul>\n<p><strong>Request Body Example</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"accounts\": [\n        {\n            \"account_id\": \"03b8ac8a-965a-4c1f-844f-5df382...\",\n            \"active_pfm\": true\n        }\n    ]\n}\n\n</code></pre>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON que confirma el estado actualizado de las cuentas. En caso de éxito, la respuesta incluirá el mismo formato que se envió en la solicitud, reflejando el estado de activación.</p>\n<p>Response Format</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"accounts\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"account_id\": {\n            \"type\": \"string\",\n            \"format\": \"uuid\"\n          },\n          \"active_pfm\": {\n            \"type\": \"boolean\"\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["v1","core-service","users","{{user_id}}","accounts","activation",""],"host":["{{host_app}}api-pfm"],"query":[],"variable":[]}},"response":[{"id":"e1f8f597-85f7-4130-ac68-d8d3cdd96ec0","name":"Bad Request","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"accounts\": [\r\n        {\r\n            \"account_id\": \"5c56a1fa-fad2-4cfc-8a4c-2de63889ce5f\",\r\n            \"active_pfm\": true\r\n        }\r\n    ]\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/core-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/accounts/activation/"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 16:24:39 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"68"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"999fab19-03f2-4390-8aa3-3360dd185a4c"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cJXnNHm9IAMEbgg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b39fc7-2b5b67bd008c16b600587a46;Parent=053aad5b062db521;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"The total number of registered accounts does not match\"\n}"},{"id":"764017b8-58f6-42bd-bccb-290d98ae618d","name":"Successful Response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"accounts\": [\r\n        {\r\n            \"account_id\": \"5c56a1fa-fad2-4cfc-8a4c-2de63889ce5f\",\r\n            \"active_pfm\": true\r\n        },\r\n        {\r\n            \"account_id\": \"6da5ed6c-29fe-4451-98aa-ae61dc470ec6\",\r\n            \"active_pfm\": true\r\n        },\r\n        {\r\n            \"account_id\": \"61dc9230-d102-4c79-9f7b-b7024b303530\",\r\n            \"active_pfm\": true\r\n        },\r\n        {\r\n            \"account_id\": \"e4e5a11b-706e-4a75-a767-0735797c8622\",\r\n            \"active_pfm\": true\r\n        },\r\n        {\r\n            \"account_id\": \"a1b8bc89-1668-4a25-ac83-5251a5c0b926\",\r\n            \"active_pfm\": true\r\n        },\r\n        {\r\n            \"account_id\": \"12bf0ea1-da88-445c-9c17-29edbd18510d\",\r\n            \"active_pfm\": false\r\n        }\r\n    ]\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/core-service/users/61a85f1f-98aa-4dcd-837d-84cf54bb532a/accounts/activation/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 16:25:11 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"447"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"ac6a2b02-f762-4cb5-88be-70c7d91876ff"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cJXsLFBFoAMEGAA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b39fe7-77a65dc70326f47c5d4a27f0;Parent=3d41ae0038f91070;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"accounts\": [\n        {\n            \"account_id\": \"5c56a1fa-fad2-4cfc-8a4c-2de63889ce5f\",\n            \"active_pfm\": true\n        },\n        {\n            \"account_id\": \"6da5ed6c-29fe-4451-98aa-ae61dc470ec6\",\n            \"active_pfm\": true\n        },\n        {\n            \"account_id\": \"61dc9230-d102-4c79-9f7b-b7024b303530\",\n            \"active_pfm\": true\n        },\n        {\n            \"account_id\": \"e4e5a11b-706e-4a75-a767-0735797c8622\",\n            \"active_pfm\": true\n        },\n        {\n            \"account_id\": \"a1b8bc89-1668-4a25-ac83-5251a5c0b926\",\n            \"active_pfm\": true\n        },\n        {\n            \"account_id\": \"12bf0ea1-da88-445c-9c17-29edbd18510d\",\n            \"active_pfm\": false\n        }\n    ]\n}"}],"_postman_id":"f76767f2-8a8d-4e0d-b2c5-2575fac41ce3"}],"id":"34cefc5b-3471-4533-b664-ea6ddc61e70b","description":"<h4 id=\"🏦-gestión-de-cuentas-del-usuario\">🏦 Gestión de cuentas del usuario</h4>\n<p>Contiene los endpoints necesarios para <strong>consultar, identificar y administrar las cuentas financieras</strong> asociadas a un usuario dentro del sistema de finanzas personales (PFM).</p>\n<p>Estos endpoints permiten recuperar información estructurada sobre las cuentas activas del usuario, sus identificadores, estado, tipo de producto y metadatos relacionados, lo cual resulta fundamental para enlazar operaciones como transacciones, presupuestos y reglas de clasificación.</p>\n<hr />\n<h4 id=\"📌-funcionalidades-incluidas\">📌 Funcionalidades incluidas</h4>\n<p>Dentro de esta carpeta, encontrarás endpoints para:</p>\n<ul>\n<li><p>Obtener todas las cuentas asociadas a un usuario.</p>\n</li>\n<li><p>Consultar el detalle de una cuenta específica mediante su <code>account_id</code>.</p>\n</li>\n<li><p>Buscar una cuenta por número de cuenta (<code>account_number</code>).</p>\n</li>\n<li><p>Verificar el estado de activación de las cuentas (<code>active_pfm</code>).</p>\n</li>\n<li><p>Activar o desactivar cuentas manualmente desde un servicio autorizado.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🎯-consideraciones\">🎯 Consideraciones</h4>\n<ul>\n<li><p>El campo <code>active_pfm</code> es esencial para saber si una cuenta debe incluirse en los cálculos del sistema.</p>\n</li>\n<li><p>Las cuentas se vinculan al usuario mediante <code>user_id</code>, pero también pueden consultarse por <code>external_id</code> o <code>account_number</code>.</p>\n</li>\n<li><p>Toda cuenta activa puede participar en transacciones, presupuestos y reglas.</p>\n</li>\n<li><p>El estado y tipo del producto bancario se determinan a través de catálogos del sistema.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🔒-seguridad\">🔒 Seguridad</h4>\n<ul>\n<li><p>Requiere autenticación vía token.</p>\n</li>\n<li><p>Algunas operaciones (como activación masiva) pueden requerir privilegios de backend o servicio administrador.</p>\n</li>\n</ul>\n","_postman_id":"34cefc5b-3471-4533-b664-ea6ddc61e70b"},{"name":"Eventos","item":[{"name":"Registrar evento","event":[{"listen":"test","script":{"id":"af839c31-4878-446c-8959-d1465ae8d765","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulPost();"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"abc49a2b-018d-4b3e-9cfa-a64be6cad3d0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"event_name\": \"Savings-Home\",\r\n    \"metadata\": {\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/core-service/users/{{user_id}}/event/","description":"<p>Este endpoint permite registrar manualmente un evento en el sistema, enviando una solicitud con los detalles del evento en el cuerpo de la solicitud.</p>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Metodo: <code>POST</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-pfm/v1/core-service/users/{{user_id}}/event/</p>\n</li>\n<li><p>Parámetro de ruta:</p>\n<ul>\n<li><code>user_id</code>(string): ID del usuario</li>\n</ul>\n</li>\n</ul>\n<hr />\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li><p><code>event_name</code>(string): Nombre del evento. Este puede tomar los valores:</p>\n</li>\n<li><p><code>metadata</code> (object) (opcional): Objeto con información adicional específica del evento.</p>\n</li>\n</ul>\n<h4 id=\"request-body-example\">Request Body Example</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"event_name\": \"Spendings-Home\",\n    \"metadata\": {\n        \"key\": \"value\"\n    }\n}\n\n</code></pre>\n<h4 id=\"reponse\">Reponse</h4>\n<p>La respuesta será un objeto JSON vacio, el cual indica que se creo correctamente el evento.</p>\n","urlObject":{"path":["api-pfm","v1","core-service","users","{{user_id}}","event",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"e0dfa5f6-7789-43b9-a1eb-6a64de2699ce","name":"Successful Response","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"event_name\": \"Spendings-Home\",\r\n    \"metadata\": {\r\n        \"K\": \"V\"\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/api-pfm/v1/core-service/users/{{user_id}}/event/"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 03 Jun 2025 16:26:22 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"0"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"b103c73a-c786-4c8d-94a5-c5be468bd3dd"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LmJHPHgGIAMEjwA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-683f222d-6efd0a0a1198c3f4209d16c2;Parent=17ff98d66dac261b;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":null}],"_postman_id":"abc49a2b-018d-4b3e-9cfa-a64be6cad3d0"}],"id":"ad071880-c54b-4c62-8885-272c48399991","description":"<h4 id=\"📆-registro-de-eventos-del-sistema\">📆 Registro de eventos del sistema</h4>\n<p>Los eventos representan acciones del usuario o registros relacionados con el procesamiento de reglas, métricas, activaciones o clasificaciones.</p>\n<p>El objetivo principal de estos endpoints es <strong>proveer trazabilidad y contexto</strong> sobre acciones relevantes, que pueden ser utilizados tanto para auditoría como para enriquecer experiencias personalizadas (como recomendaciones, recordatorios o reportes dinámicos).</p>\n<hr />\n<h4 id=\"📌-funcionalidades-incluídas\">📌 Funcionalidades incluídas</h4>\n<p>Los endpoints disponibles permiten:</p>\n<ul>\n<li><p>Registrar eventos desde frontend o plataformas externas.</p>\n</li>\n<li><p>Consultar el historial de eventos de un usuario en un periodo determinado.</p>\n</li>\n<li><p>Filtrar eventos por tipo, fecha u otros atributos relevantes.</p>\n</li>\n<li><p>Obtener el detalle completo de un evento individual.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🧠-casos-de-uso\">🧠 Casos de uso</h4>\n<ul>\n<li><p>Identificar cómo interactúan los usuarios con los flujos de frontend</p>\n</li>\n<li><p>Registrar acciones que se utilicen para la segmentación de usuarios</p>\n</li>\n<li><p>Testear nuevas funcionalidades o iteraciones de funcionalidades actuales</p>\n</li>\n<li><p>Identificar errores de navegación o bugs.</p>\n</li>\n<li><p>Habilitar notificaciones contextuales basadas en eventos recientes del usuario.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🎯consideraciones\">🎯Consideraciones</h4>\n<ul>\n<li><p>El <code>event_type</code> permite categorizar los eventos para facilitar su análisis.</p>\n</li>\n<li><p>La respuesta incluye <code>metadata</code>, útil para almacenar detalles adicionales del evento.</p>\n</li>\n</ul>\n<h2 id=\"catálogo-de-event_type\">Catálogo de event_type</h2>\n<p>Se adjuntan los eventos principales que se recomiendan implementar en los flusjo de frontend.</p>\n<p>Cada evento tiene una nomenclatura definida para facilitar</p>\n<h3 id=\"ahorros\">Ahorros</h3>\n<ul>\n<li>Pantalla Ahorros - Inicio: <code>\"Savings-Home\"</code></li>\n</ul>\n<h4 id=\"flujo-de-creación-de-meta\">Flujo de creación de meta</h4>\n<ul>\n<li><p>Listado de tipos de metas de ahorro: <code>\"Savings-Projects-Create-List\"</code></p>\n</li>\n<li><p>Formulario con los detalles de la meta: <code>\"Savings-Projects-Create-Detail\"</code></p>\n</li>\n<li><p>Registro exitoso de la meta: <code>\"Savings-Projects-Create-Success\"</code></p>\n<ul>\n<li>Metadata: objeto de la meta que responde el endpoint</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"detalle-y-edición-de-una-meta\">Detalle y edición de una meta</h4>\n<ul>\n<li><p>Detalle de una meta de ahorro: <code>\"Savings-Projects-Detail\"</code></p>\n</li>\n<li><p>Formulario de edición de la meta: <code>\"Savings-Projects-Edit\"</code></p>\n</li>\n<li><p>Edición exitosa de la meta: <code>\"Savings-Projects-Edit-Success\"</code></p>\n<ul>\n<li>Metadata: objeto de la meta que responde el endpoint</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"flujo-de-creación-de-una-regla\">Flujo de creación de una regla</h4>\n<ul>\n<li><p>Listado de reglas de ahorros disponibles: <code>\"Savings-Rules-Create-List\"</code></p>\n</li>\n<li><p>Formulario de detalle de la regla: <code>\"Savings-Rules-Create-Detail\"</code></p>\n</li>\n<li><p>Respuesta exitosa de la creación de la regla: <code>\"Savings-Rules-Create-Success\"</code></p>\n<ul>\n<li>Metadata: objeto de la regla que responde el endpoint</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"detalle-y-edición-de-una-regla\">Detalle y edición de una regla</h4>\n<ul>\n<li><p>Lista de reglas de ahorro: <code>\"Savings-Rules-List\"</code></p>\n</li>\n<li><p>Detalle de regla de ahorro: <code>\"Savings-Rules-Detail\"</code></p>\n</li>\n<li><p>Pantalla con formulario de edición de la regla: <code>\"Savings-Rules-Edit-Detail\"</code></p>\n</li>\n<li><p>Respuesta exitosa de la regla editada: <code>\"Savings-Rules-Edit-Success\"</code></p>\n<ul>\n<li>Metadata: objeto de la regla que responde el endpoint</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"listado-y-detalle-de-los-ahorros\">Listado y detalle de los ahorros</h4>\n<ul>\n<li><p>Lista de pagos de ahorros: <code>\"Savings-Payments-List\"</code></p>\n</li>\n<li><p>Detalle de pagos de ahorros: <code>\"Savings-Payments-Detail\"</code></p>\n</li>\n</ul>\n<h4 id=\"reportes-y-métricas\">Reportes y Métricas</h4>\n<ul>\n<li>Reporte mensual de ahorros: <code>\"Savings-Report-Monthly\"</code></li>\n</ul>\n<h4 id=\"flujo-de-eliminación-de-meta\">Flujo de eliminación de meta</h4>\n<h4 id=\"flujo-de-retiro-de-abono-y-retiro-manual\">Flujo de retiro de abono y retiro manual</h4>\n<h3 id=\"control-de-gastos\">Control de Gastos</h3>\n<ul>\n<li><p>Crear presupuesto de gasto: <code>\"Spendings-Budget-Create\"</code></p>\n</li>\n<li><p>Crear presupuesto de gasto - Éxito: <code>\"Spendings-Budget-Create-Success\"</code></p>\n</li>\n<li><p>Editar presupuesto de gasto - Éxito: <code>\"Spendings-Budget-Edit-Success\"</code></p>\n</li>\n<li><p>Detalle de categoría de gasto: <code>\"Spendings-Category-Detail\"</code></p>\n</li>\n<li><p>Detalle de categoría de gasto al cambiar el mes: <code>\"Spendings-Category-Detail-Change-Month\"</code></p>\n</li>\n<li><p>Lista de categorías de gasto: <code>\"Spendings-Category-List\"</code></p>\n</li>\n<li><p>Lista de categorías de gasto al cambiar el mes: <code>\"Spendings-Category-List-Change-Month\"</code></p>\n</li>\n<li><p>Gastos de casa: <code>\"Spendings-Home\"</code></p>\n</li>\n<li><p>Gastos de casa al cambiar el mes: <code>\"Spendings-Home-Change-Month\"</code></p>\n</li>\n<li><p>Reporte mensual de gastos: <code>\"Spendings-Report-Monthly\"</code></p>\n</li>\n<li><p>Reporte semanal de gastos: <code>\"Spendings-Report-Weekly\"</code></p>\n</li>\n<li><p>Editar categoría de transacción - Éxito: <code>\"Transactions-Category-Edit-Success\"</code></p>\n</li>\n<li><p>Seleccionar categoría de transacción: <code>\"Transactions-Category-Select\"</code></p>\n</li>\n<li><p>Detalle de transacción: <code>\"Transactions-Detail\"</code></p>\n</li>\n<li><p>Detalle de transacción ignorada: <code>\"Transactions-Detail-Ignore\"</code></p>\n</li>\n<li><p>Lista de transacciones: <code>\"Transactions-List\"</code></p>\n</li>\n<li><p>Lista de transacciones al cambiar el mes: <code>\"Transactions-List-Change-Month\"</code></p>\n</li>\n</ul>\n","_postman_id":"ad071880-c54b-4c62-8885-272c48399991"},{"name":"Catálogos core","item":[{"name":"Obtener items","event":[{"listen":"test","script":{"id":"8a834187-a842-4a37-aec2-83e48831e436","exec":[" const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    catalog_name: 'string',\r","    description: 'string',\r","    items: 'array'\r","};\r","\r","const itemProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    if (responseJson && responseJson.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0], topLevelProperties);\r","    }\r","});\r","\r","// Check properties within the items array of the first catalog\r","pm.test(\"Items have expected properties with correct types\", () => {\r","    if (responseJson[0].items && responseJson[0].items.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0], itemProperties);\r","        \r","        // Check metadata properties of the first item\r","        xerpaTestApi.checkObjectProperties(responseJson[0].items[0].metadata, metadataProperties);\r","    }\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"4f5b934a-87d4-4643-8ef8-72b3985720e9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/core-service/catalogs/","description":"<p>Este endpoint permite <strong>recuperar todos los catálogos registrados</strong> en Core. Los catálogos contienen información utilizada para poblar menús desplegables, filtrar datos o representar entidades de negocio como tipos de evento, estados de cuenta, categorías de gastos, entre otros.</p>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>URL:</strong> {{host_app}}/api-pfm/v1/core-service/catalogs/</p>\n</li>\n</ul>\n<h4 id=\"request-body\"><strong>Request Body</strong></h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"reponse\">Reponse</h4>\n<p>La respuesta será un objeto JSON que incluye un arreglo de ítems catalogados, agrupables por tipo<code>catalog</code>, donde cada uno incluye:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único del ítem.</p>\n</li>\n<li><p><code>catalog</code> (string): Nombre del catálogo al que pertenece (ej. <code>\"event_types\"</code>, <code>\"account_status\"</code>).</p>\n</li>\n<li><p><code>item_name</code> (string): Clave técnica del ítem dentro del catálogo.</p>\n</li>\n<li><p><code>description</code> (string): Descripción legible o funcional del ítem.</p>\n</li>\n<li><p><code>metadata</code> (object): Información adicional (opcional), que puede incluir:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono visual asociado.</p>\n</li>\n<li><p><code>title</code> (string): Título para interfaces.</p>\n</li>\n<li><p><code>message</code> (object): Mensajes contextuales (<code>A</code>, <code>E</code>, <code>G</code>, <code>J</code>, etc.).</p>\n</li>\n<li><p>Otros campos específicos según el catálogo.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n      \"catalog_name\": { \"type\": \"string\" },\n      \"description\": { \"type\": \"string\" },\n      \"items\": {\n        \"type\": \"array\",\n        \"items\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n            \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n            \"item_name\": { \"type\": \"string\" },\n            \"description\": { \"type\": \"string\" },\n            \"metadata\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"icon\": { \"type\": \"string\" },\n                \"color\": { \"type\": \"string\" },\n                \"active\": { \"type\": \"boolean\" },\n                \"short_name\": { \"type\": \"string\" }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","core-service","catalogs",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"d3ec55b5-dfc0-4938-bf65-f2440270df7b","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/core-service/catalogs/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 18:02:19 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"2550"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"5c4c09e7-2f7f-474b-a4ae-f8cb1f814917"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cJl60HzNIAMEB5g="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3b6ab-2c1f3b29642ca5fa40ed4c54;Parent=0f5a0a1c9878006b;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n        \"catalog_name\": \"accounts_types\",\n        \"description\": \"Tipos de cuentas\",\n        \"items\": [\n            {\n                \"id\": \"d9a4b159-8e15-48ea-aa88-72f1c21bb0d0\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"tarjeta_debito\",\n                \"description\": \"Tarjeta Débito\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/card.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"TARJETADEBITO\"\n                }\n            },\n            {\n                \"id\": \"e655b55f-e39c-49c0-a77e-aed53e1b5d15\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"tarjeta_credito\",\n                \"description\": \"Tarjeta Crédito\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/card.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"TARJETACREDITO\"\n                }\n            },\n            {\n                \"id\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_ahorro\",\n                \"description\": \"Cuenta Ahorro\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/account.svg\",\n                    \"type\": \"to\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAAHORRO\"\n                }\n            },\n            {\n                \"id\": \"18743d7e-4fee-4e13-b2fc-00f86d8f8511\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_inversion\",\n                \"description\": \"Cuenta Inversión\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/account.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAINVERSION\"\n                }\n            },\n            {\n                \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"cuenta_vista\",\n                \"description\": \"Cuenta Vista\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/account.svg\",\n                    \"type\": \"from\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAVISTA\"\n                }\n            },\n            {\n                \"id\": \"f3029ccb-8f07-4c15-a55d-5fc628cc4230\",\n                \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n                \"item_name\": \"Cuenta Corriente\",\n                \"description\": \"Cuenta Corriente\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/icons/account.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTACORRIENTE\"\n                }\n            }\n        ]\n    },\n    {\n        \"id\": \"0e6dd428-f6c4-435d-be52-c6021bd5109b\",\n        \"catalog_name\": \"account_status\",\n        \"description\": \"Estados de cuentas\",\n        \"items\": [\n            {\n                \"id\": \"17425297-5c11-4cf2-975e-38327df355b7\",\n                \"catalog\": \"0e6dd428-f6c4-435d-be52-c6021bd5109b\",\n                \"item_name\": \"cuenta_activa\",\n                \"description\": \"Cuenta activa\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_activa.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAACTIVA\"\n                }\n            },\n            {\n                \"id\": \"4e99d3e2-722c-4b42-b39c-f820b6333080\",\n                \"catalog\": \"0e6dd428-f6c4-435d-be52-c6021bd5109b\",\n                \"item_name\": \"cuenta_eliminada\",\n                \"description\": \"Cuenta eliminada\",\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/categories/cuenta_eliminada.svg\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"short_name\": \"CUENTAELIMINADA\"\n                }\n            }\n        ]\n    }\n]"}],"_postman_id":"4f5b934a-87d4-4643-8ef8-72b3985720e9"},{"name":"Detalle catalogo","event":[{"listen":"test","script":{"id":"132ef60c-285c-4e52-bd6b-73614584246d","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    catalog_name: 'string',\r","    description: 'string',\r","    items: 'array'\r","};\r","\r","const itemProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check properties within the items array\r","pm.test(\"Items have expected properties with correct types\", () => {\r","    if (responseJson.items && responseJson.items.length > 0) {\r","        xerpaTestApi.checkObjectProperties(responseJson.items[0], itemProperties);\r","        \r","        // Check metadata properties of the first item\r","        xerpaTestApi.checkObjectProperties(responseJson.items[0].metadata, metadataProperties);\r","    }\r","});\r",""],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"bbfe7a61-4a0e-44e4-aa86-4494f3dccf20","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/core-service/catalogs/{{catalog_core_id}}","description":"<p>Este endpoint permite <strong>consultar todos los ítems de un catálogo específico</strong> del sistema, utilizando el nombre del catálogo como parámetro.</p>\n<ul>\n<li><p>Este endpoint permite <strong>filtrar directamente por catálogo</strong>, a diferencia del listado general.</p>\n</li>\n<li><p>Es ideal para <strong>mostrar opciones filtradas</strong> en formularios, reglas, reportes o visualizaciones.</p>\n</li>\n<li><p>Si el catálogo no existe o está vacío, se devolverá un arreglo vacío sin error.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p>Método: <code>GET</code></p>\n</li>\n<li><p>URL: {{host_app}}/api-pfm/v1/core-service/catalogs/{{catalog_core_id}}</p>\n</li>\n<li><p>Parámetros de ruta:</p>\n<ul>\n<li><code>catalog_core_id</code>(string): Id del catalogo que se desea consultar.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\">Request Body</h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<h4 id=\"response\">Response</h4>\n<p>La respuesta es un JSON con los</p>\n<ul>\n<li><p><code>id</code>(string): ID del catalogo.</p>\n</li>\n<li><p><code>catalog_name</code>(string): Nombre del catalogo.</p>\n</li>\n<li><p><code>description</code>(string): Descripcion del catalogo.</p>\n</li>\n<li><p><code>items</code>(array of objects): Lista de ítems pertenecientes al catálogo consultado, donde cada uno incluye:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único del ítem.</p>\n</li>\n<li><p><code>catalog</code> (string): Nombre del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Clave técnica o interna del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción legible del ítem.</p>\n</li>\n<li><p><code>metadata</code> (object): Metadatos adicionales, como:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono asociado.</p>\n</li>\n<li><p><code>title</code> (string): Título para interfaces gráficas.</p>\n</li>\n<li><p><code>message</code> (object): Mensajes contextualizados por canal o lenguaje (<code>A</code>, <code>E</code>, <code>G</code>, etc.).</p>\n</li>\n<li><p>Otros campos personalizados según el catálogo.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\"><strong>Response Format</strong></h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"catalog_name\": { \"type\": \"string\" },\n    \"description\": { \"type\": \"string\" },\n    \"items\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n          \"item_name\": { \"type\": \"string\" },\n          \"description\": { \"type\": \"string\" },\n          \"metadata\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"icon\": { \"type\": \"string\" },\n              \"color\": { \"type\": \"string\" },\n              \"active\": { \"type\": \"boolean\" },\n              \"short_name\": { \"type\": \"string\" }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","core-service","catalogs","{{catalog_core_id}}"],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"40708f31-0ee3-4db0-a99e-0b656288107f","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/core-service/catalogs/{{catalog_core_id}}"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 03 Jun 2025 19:51:43 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"1835"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"e7b5aa0a-d80c-4701-83a5-9d3200f000b8"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"LmnMeGU9oAMEtbQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-683f524f-49251dc4055e2b3f3ceaafdc;Parent=093b7986bae754d6;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n    \"catalog_name\": \"accounts_types\",\n    \"description\": \"Tipos de cuentas\",\n    \"items\": [\n        {\n            \"id\": \"d9a4b159-8e15-48ea-aa88-72f1c21bb0d0\",\n            \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n            \"item_name\": \"tarjeta_debito\",\n            \"description\": \"Tarjeta Débito\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/card.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"TARJETADEBITO\"\n            }\n        },\n        {\n            \"id\": \"e655b55f-e39c-49c0-a77e-aed53e1b5d15\",\n            \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n            \"item_name\": \"tarjeta_credito\",\n            \"description\": \"Tarjeta Crédito\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/card.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"TARJETACREDITO\"\n            }\n        },\n        {\n            \"id\": \"93909b64-0e8c-4494-bec5-c84906430182\",\n            \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n            \"item_name\": \"cuenta_ahorro\",\n            \"description\": \"Cuenta Ahorro\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/account.svg\",\n                \"type\": \"to\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAAHORRO\"\n            }\n        },\n        {\n            \"id\": \"18743d7e-4fee-4e13-b2fc-00f86d8f8511\",\n            \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n            \"item_name\": \"cuenta_inversion\",\n            \"description\": \"Cuenta Inversión\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/account.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAINVERSION\"\n            }\n        },\n        {\n            \"id\": \"e480d1b0-cb8e-448c-9864-ed7ae4ce20b3\",\n            \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n            \"item_name\": \"cuenta_vista\",\n            \"description\": \"Cuenta Vista\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/account.svg\",\n                \"type\": \"from\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTAVISTA\"\n            }\n        },\n        {\n            \"id\": \"f3029ccb-8f07-4c15-a55d-5fc628cc4230\",\n            \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n            \"item_name\": \"Cuenta Corriente\",\n            \"description\": \"Cuenta Corriente\",\n            \"metadata\": {\n                \"icon\": \"/assets/xerpa/global/img/icons/account.svg\",\n                \"color\": \"#7C2582\",\n                \"active\": true,\n                \"short_name\": \"CUENTACORRIENTE\"\n            }\n        }\n    ]\n}"}],"_postman_id":"bbfe7a61-4a0e-44e4-aa86-4494f3dccf20"},{"name":"Obtener detalle item","event":[{"listen":"test","script":{"id":"21387f25-f697-48b9-be70-8e64b7c468c2","exec":["const xerpaTestApi = pm.require('@getxerpa/xerpa_test_api');\r","\r","xerpaTestApi.testResponseTime();\r","xerpaTestApi.testSuccessfulGet();\r","\r","// Parse the response JSON\r","const responseJson = pm.response.json();\r","\r","// Define the expected property types\r","const topLevelProperties = {\r","    id: 'string',\r","    catalog: 'string',\r","    item_name: 'string',\r","    description: 'string',\r","    metadata: 'object'\r","};\r","\r","const metadataProperties = {\r","    icon: 'string',\r","    color: 'string',\r","    active: 'boolean',\r","    short_name: 'string'\r","};\r","\r","// Check top-level properties\r","pm.test(\"Response has expected top-level properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson, topLevelProperties);\r","});\r","\r","// Check metadata properties\r","pm.test(\"Metadata has expected properties with correct types\", () => {\r","    xerpaTestApi.checkObjectProperties(responseJson.metadata, metadataProperties);\r","});"],"type":"text/javascript","packages":{"@getxerpa/xerpa_test_api":{"id":"01929aee-a3be-7f8c-91f1-e7a772cc76dc"}}}}],"id":"b65f2407-4ce0-4123-bd5e-6f1f7daaa7f4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/core-service/items/{{item_core_id}}","description":"<p>Este endpoint permite <strong>consultar los detalles de un ítem específico</strong> dentro de un catálogo del sistema.</p>\n<ul>\n<li><p>Este endpoint es útil para obtener el detalle completo de un ítem sin tener que recorrer todo el catálogo.</p>\n</li>\n<li><p>Es ideal para <strong>mostrar etiquetas, íconos o comportamientos dinámicos</strong> en interfaces que dependan de la configuración del ítem.</p>\n</li>\n<li><p>El contenido del campo <code>metadata</code> puede variar ampliamente según el tipo de catálogo al que pertenezca el ítem.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"request\">Request</h4>\n<ul>\n<li><p><strong>Método:</strong> <code>GET</code></p>\n</li>\n<li><p><strong>URL:</strong>{{host_app}}/api-pfm/v1/core-service/items/{{item_core_id}}</p>\n</li>\n<li><p>Parámetros de ruta</p>\n<ul>\n<li><code>item_core_id</code>(string): ID único del ítem que se desea consultar.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"request-body\"><strong>Request Body:</strong></h4>\n<ul>\n<li>Este request de tipo <code>GET</code> no requiere cuerpo. El cuerpo de la solicitud debe enviarse vacío.</li>\n</ul>\n<hr />\n<h4 id=\"response\">Response</h4>\n<p>La respuesta será un objeto JSON que contiene la información detallada del ítem:</p>\n<ul>\n<li><p><code>id</code> (string): Identificador único del ítem.</p>\n</li>\n<li><p><code>catalog</code> (string): Nombre del catálogo al que pertenece.</p>\n</li>\n<li><p><code>item_name</code> (string): Clave interna del ítem.</p>\n</li>\n<li><p><code>description</code> (string): Descripción legible del ítem.</p>\n</li>\n<li><p><code>metadata</code> (object): Objeto con metadatos adicionales que pueden incluir:</p>\n<ul>\n<li><p><code>icon</code> (string): Ícono representativo.</p>\n</li>\n<li><p><code>title</code> (string): Título para mostrar en interfaz.</p>\n</li>\n<li><p><code>message</code> (object): Mensajes por canal o formato (<code>A</code>, <code>E</code>, <code>G</code>, etc.).</p>\n</li>\n<li><p>Otros campos personalizados según el catálogo (color, orden, estado, etc.).</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"response-format\">Response Format</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"catalog\": { \"type\": \"string\", \"format\": \"uuid\" },\n    \"item_name\": { \"type\": \"string\" },\n    \"description\": { \"type\": \"string\" },\n    \"metadata\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"icon\": { \"type\": \"string\" },\n        \"color\": { \"type\": \"string\" },\n        \"active\": { \"type\": \"boolean\" },\n        \"short_name\": { \"type\": \"string\" }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api-pfm","v1","core-service","items","{{item_core_id}}"],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"4c3070fb-1167-449d-8bc9-5132053f140c","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-pfm/v1/core-service/items/d9a4b159-8e15-48ea-aa88-72f1c21bb0d0/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 07 Aug 2024 18:08:38 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"278"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"0d276e6e-2500-428c-ac12-70e29347724d"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"cJm2AFsKoAMEZow="},{"key":"X-Amzn-Trace-Id","value":"Root=1-66b3b826-6a1f6fea09e52a121e3c890a;Parent=419977a39ac0b6bf;Sampled=0;lineage=e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"d9a4b159-8e15-48ea-aa88-72f1c21bb0d0\",\n    \"catalog\": \"f1895069-e723-4cc8-9331-d1cb4110ab7a\",\n    \"item_name\": \"tarjeta_debito\",\n    \"description\": \"Tarjeta Débito\",\n    \"metadata\": {\n        \"icon\": \"/assets/xerpa/global/img/icons/card.svg\",\n        \"color\": \"#7C2582\",\n        \"active\": true,\n        \"short_name\": \"TARJETADEBITO\"\n    }\n}"}],"_postman_id":"b65f2407-4ce0-4123-bd5e-6f1f7daaa7f4"}],"id":"5d0b6567-8228-4114-abfb-27eecc1b2f8d","_postman_id":"5d0b6567-8228-4114-abfb-27eecc1b2f8d","description":""}],"id":"e4fb2cc2-7539-4fe3-b502-2cc050eb9bde","_postman_id":"e4fb2cc2-7539-4fe3-b502-2cc050eb9bde","description":""},{"name":"Notificaciones","item":[{"name":"Listar notificaciones","id":"4e4740ac-e242-45f8-887d-c2a7e0517d09","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/notification-service/v1/api/users/{{user_id}}/notifications/","description":"<p>Enpoint que retorna las notificaciones para el usuario. Retorna una arreglo con múltiples notificaciones y permite filtrar por parámetros como estado, expiración, fecha entre otro parámetros.</p>\n","urlObject":{"path":["notification-service","v1","api","users","{{user_id}}","notifications",""],"host":["{{host_app}}"],"query":[{"disabled":true,"key":"paginate","value":"false"},{"disabled":true,"key":"page_size","value":"1"},{"disabled":true,"key":"page","value":"1"},{"disabled":true,"key":"active","value":"true"},{"disabled":true,"key":"ignored","value":"true"},{"disabled":true,"key":"read","value":"false"},{"disabled":true,"key":"sent","value":"true"},{"disabled":true,"key":"notification_campaign","value":"monthly_report_5_2024_demo"}],"variable":[]}},"response":[{"id":"53b13b70-1643-4267-94e1-28da07906bf2","name":"Listar notificaciones","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/notification-service/v1/api/users/{{user_id}}/notifications/","host":["{{host_app}}"],"path":["notification-service","v1","api","users","{{user_id}}","notifications",""],"query":[{"key":"paginate","value":"false","disabled":true},{"key":"page_size","value":"25","disabled":true},{"key":"page","value":"1","disabled":true},{"key":"active","value":"true","disabled":true},{"key":"ignored","value":"true","disabled":true},{"key":"read","value":"false","disabled":true},{"key":"sent","value":"true","disabled":true},{"key":"notification_campaign","value":"monthly_report_5_2024_demo","disabled":true}]}},"_postman_previewlanguage":"","header":[],"cookie":[{"expires":"Invalid Date","domain":"","path":""}],"responseTime":null,"body":"{\n    \"next\": \"/notification-service/v1/api/users/me/notifications/?expired=true&page=1&page_size=25\",\n    \"previous\": null,\n    \"total_pages\": 27,\n    \"current_page\": 1,\n    \"offset\": 0,\n    \"results\": [\n        {\n            \"id\": \"b70c211d-d8fe-45c5-be70-0e0c02c0d4ad\",\n            \"created_at\": \"2025-09-30T18:05:26.659000-06:00\",\n            \"updated_at\": \"2025-10-06T08:33:53.842950-06:00\",\n            \"user_id\": \"8faa9093-4435-43d7-8f2e-df8950c2c707\",\n            \"ignored\": false,\n            \"read\": true,\n            \"sent\": false,\n            \"publication_date\": \"2025-10-01\",\n            \"expiration_date\": \"2025-10-07\",\n            \"priority_level\": 1,\n            \"content\": {\n                \"image\": \"/assets/xerpa/global/img/notifications/first_payment_month.svg\",\n                \"title\": \"¡Hoy es un gran día para avanzar!\",\n                \"action\": {\n                    \"event\": {\n                        \"projectID\": \"fbecd758-f058-4b7e-9698-17d18bc58858\",\n                        \"projectName\": \"alcanfores\"\n                    },\n                    \"route\": \"projectMakePayment\",\n                    \"origin\": \"projectDetail\"\n                },\n                \"subtitle\": \"Aporta a tu meta \\\"Alcanfores\\\" y supera tus objetivos este mes.\"\n            },\n            \"user_external_id\": \"frontend\",\n            \"notification_type\": \"be82ee19-fb76-4b5f-aeff-df5a80a80037\",\n            \"notification_campaign\": \"e84e054c-5e02-48e8-bad2-c8c3d9b5bd88\"\n        },\n        {\n            \"id\": \"ebf7e933-8ff2-4cdd-ba4b-3a195427f995\",\n            \"created_at\": \"2025-09-22T04:00:34.886189-06:00\",\n            \"updated_at\": \"2025-09-22T04:00:34.886205-06:00\",\n            \"user_id\": \"8faa9093-4435-43d7-8f2e-df8950c2c707\",\n            \"ignored\": false,\n            \"read\": false,\n            \"sent\": false,\n            \"publication_date\": \"2025-09-22\",\n            \"expiration_date\": \"2025-09-25\",\n            \"priority_level\": 5,\n            \"content\": {\n                \"image\": \"/assets/xerpa/global/img/notifications/weekly_savings_report.svg\",\n                \"title\": \"Resumen semanal\",\n                \"action\": {\n                    \"event\": {\n                        \"reportId\": \"16ee8caf-485e-4cc8-a8c4-9a84b554be37\",\n                        \"pageEvent\": \"\"\n                    },\n                    \"route\": \"reportDetail\",\n                    \"origin\": \"\"\n                },\n                \"subtitle\": \"Revisa el balance de tus ahorros de esta semana\"\n            },\n            \"user_external_id\": \"frontend\",\n            \"notification_type\": \"d77af6e6-f577-46e4-bf62-ff57e98a328e\",\n            \"notification_campaign\": \"a16cb36b-7d5a-44fd-9f0a-1b4c90bf3e08\"\n        }\n    ]\n}"}],"_postman_id":"4e4740ac-e242-45f8-887d-c2a7e0517d09"},{"name":"Detalles de una notificación","id":"d60de35f-7622-4b14-9296-d31226a832a6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/notification-service/v1/api/users/{{user_id}}/notifications/{{notification_id}}/","description":"<p>Endpoint para consultar el detalle de una notificación.</p>\n","urlObject":{"path":["notification-service","v1","api","users","{{user_id}}","notifications","{{notification_id}}",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"d60de35f-7622-4b14-9296-d31226a832a6"},{"name":"Marcar notificación como leída","id":"9285cdad-1187-4dc0-afd8-02892498a04f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"read\": true\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/notification-service/v1/api/users/{{user_id}}/notifications/{{notification_id}}/change-read/","description":"<p>Actualizar la condición de leída de una notificación modificando la propiedad read.</p>\n<p>Si se quiere marcar la notificación como leida el parámetro <code>read</code> debe ser <code>true</code>.</p>\n<p>Si se quiere marcar la notificación como no leída el parámetro <code>read</code> debe ser <code>false</code>.</p>\n","urlObject":{"path":["notification-service","v1","api","users","{{user_id}}","notifications","{{notification_id}}","change-read",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"9285cdad-1187-4dc0-afd8-02892498a04f"},{"name":"Marcar una notificación como ignorada","id":"3a4c3b4c-aff4-43ed-b18d-697ceb80d2c3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"ignored\": true\n}","options":{"raw":{"language":"json"}}},"url":"{{host_app}}/notification-service/v1/api/users/{{user_id}}/notifications/{{notification_id}}/change-ignored/","description":"<p>Actualizar la condición de ignorada de una notificación modificando la propiedad ignore.</p>\n<p>Si se quiere marcar la notificación como ignorada el parámetro <code>ignored</code> debe ser <code>true</code>.</p>\n<p>Si se quiere marcar la notificación como no ignorada el parámetro <code>ignored</code> debe ser <code>false</code>.</p>\n","urlObject":{"path":["notification-service","v1","api","users","{{user_id}}","notifications","{{notification_id}}","change-ignored",""],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"3a4c3b4c-aff4-43ed-b18d-697ceb80d2c3"}],"id":"9cbce9da-ac96-448c-888a-5134517ba627","description":"<h2 id=\"api-notification\"><strong>API Notification</strong></h2>\n<p><strong>Notificaciones</strong> agrupa todos los endpoints relacionados con la consulta, gestión y actualización de las notificaciones generadas por el sistema para los usuarios.</p>\n<p>Estas notificaciones pueden ser tanto informativas como transaccionales, y están diseñadas para mantener al usuario al tanto de eventos relevantes dentro de la plataforma, como reportes mensuales, movimientos financieros importantes, alertas personalizadas, entre otros.</p>\n<img src=\"https://content.pstmn.io/208e10a3-ecd2-49e0-8b04-971d67b26f5f/UG9zdG1hbiAtIG5vdGlmaWNhdGlvbnMucG5n\" />\n\n<h3 id=\"📌-casos-de-uso-comunes\">📌 Casos de uso comunes</h3>\n<ul>\n<li><p>Consultar todas las notificaciones disponibles para un usuario o para uso interno del sistema, con múltiples filtros como estado de lectura, envío, expiración, entre otros.</p>\n</li>\n<li><p>Acceder a los datos completos de una notificación específica.</p>\n</li>\n<li><p>Marcar una notificación como ignorada por el usuario.</p>\n</li>\n<li><p>Registrar el momento en que el usuario visualizó una notificación.</p>\n</li>\n<li><p>Listar un catálogo de los distintos tipos de notificaciones utilizados por el sistema, útil para clasificación y presentación personalizada.</p>\n</li>\n</ul>\n<hr />\n<h4 id=\"🧠-consideraciones\">🧠 Consideraciones:</h4>\n<ul>\n<li><p>Las notificaciones pueden ser consumidas desde interfaces internas (backoffice, API middleware) o directamente por el usuario final.</p>\n</li>\n<li><p>El modelo de notificación incluye atributos como prioridad, contenido enriquecido, temporalidad (expiración) y visibilidad.</p>\n</li>\n<li><p>Muchos de los endpoints incluyen filtros útiles para segmentar las notificaciones según su estado (activas, leídas, ignoradas, etc.).</p>\n</li>\n</ul>\n<hr />\n<p>Al integrar estos endpoints, los desarrolladores podrán construir interfaces de usuario que muestren de manera efectiva las notificaciones relevantes, proporcionando una experiencia de usuario fluida y personalizada en relación con las comunicaciones del sistema.</p>\n<h2 id=\"objeto-notificación\"><strong>Objeto notificación</strong></h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n      \"id\": \"b70c211d-d8fe-45c5-be70-0e0c02c0d4ad\",\n      \"created_at\": \"2025-09-30T18:05:26.659000-06:00\",\n      \"updated_at\": \"2025-10-06T08:33:53.842950-06:00\",\n      \"user_id\": \"8faa9093-4435-43d7-8f2e-df8950c2c707\",\n      \"ignored\": false,\n      \"read\": true,\n      \"sent\": false,\n      \"publication_date\": \"2025-10-01\",\n      \"expiration_date\": \"2025-10-07\",\n      \"priority_level\": 1,\n      \"content\": {\n        \"image\": \"/assets/xerpa/global/img/notifications/first_payment_month.svg\",\n        \"title\": \"¡Hoy es un gran día para avanzar!\",\n        \"action\": {\n          \"event\": {\n            \"projectID\": \"fbecd758-f058-4b7e-9698-17d18bc58858\",\n            \"projectName\": \"alcanfores\"\n          },\n          \"route\": \"projectMakePayment\",\n          \"origin\": \"projectDetail\"\n        },\n        \"subtitle\": \"Aporta a tu meta \\\"Alcanfores\\\" y supera tus objetivos este mes.\"\n      },\n      \"user_external_id\": \"frontend\",\n      \"notification_type\": \"be82ee19-fb76-4b5f-aeff-df5a80a80037\",\n      \"notification_campaign\": \"e84e054c-5e02-48e8-bad2-c8c3d9b5bd88\"\n    }\n\n</code></pre>\n<h3 id=\"descripción-de-campos\"><strong>Descripción de campos</strong></h3>\n<ul>\n<li><p><code>id</code>: identificador único de la notificación</p>\n</li>\n<li><p><code>created_at</code>: fecha de creación del registro</p>\n</li>\n<li><p><code>updated_at</code>: fecha del último cambio del registro</p>\n</li>\n<li><p><code>user_id</code>: identificador interno del usuario al que le pertenece el registro</p>\n</li>\n<li><p><code>ignored</code>: booleano que indica si el usuario ignoró/borró la notificación</p>\n</li>\n<li><p><code>read</code>: booleano para indicar si el usuario leyó la notificación</p>\n</li>\n<li><p><code>sent</code>: booleano para indicar si la notificación se compartió con el banco</p>\n</li>\n<li><p><code>publication_date</code>: fecha de cuándo la notificación quedó visible para el usuario</p>\n</li>\n<li><p><code>expiration_date</code>: fecha de cuándo la notificación debe dejar de estar visible para el usuario.</p>\n</li>\n<li><p><code>priority_level</code>: Nivel de prioridad de la notificación. Mientras más alto más prioritario</p>\n</li>\n<li><p><code>content</code>: Objeto con el contenido de la notificación.</p>\n<ul>\n<li><p><code>image</code>: url a la imágen de la notificación</p>\n</li>\n<li><p><code>title</code>: mensaje principal de la notificación</p>\n</li>\n<li><p><code>subititle</code>: mensaje secundario de la notificación</p>\n</li>\n<li><p><code>action</code>: objeto para describir que debe realizar el usuario con la notificación</p>\n<ul>\n<li><p><code>event</code>: características del evento</p>\n</li>\n<li><p><code>route</code>: ruta interna de la aplicación a la que se debe redirigir al usuario</p>\n</li>\n<li><p><code>origin</code>:</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li><p><code>external_user_id</code>: identificador del usuario</p>\n</li>\n<li><p><code>notification_type</code>: identificador del tipo de notificación</p>\n</li>\n<li><p><code>notification_campaign</code>: identificador de la campaña a la que pertenece la notificación</p>\n</li>\n</ul>\n<h4 id=\"tipos-de-notificaciones\">Tipos de notificaciones:</h4>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Nombre</strong></th>\n<th><strong>Id</strong></th>\n<th><strong>Descripción</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Informativo</strong></td>\n<td>070cdaaf-4ee1-4e36-8716-70badc06dc32</td>\n<td>Mensajes con información explicativa para el usuario sobre sus productos y/o servicios.  <br /><strong>Ejemplos:</strong>  <br />- Reportes de ahorros y gastos  <br />- Progreso de metas  <br />- Progreso de presupuestos</td>\n</tr>\n<tr>\n<td><strong>Alertas</strong></td>\n<td>b08ef422-6372-4985-b96e-46b78b0642bd</td>\n<td>Mensajes que buscan llamar la atención del usuario con urgencia.  <br /><strong>Ejemplos:</strong>  <br />- Superar el 100% de un presupuesto  <br />- Retraso de su meta de ahorro  <br />- Error en la ejecución de sus ahorros</td>\n</tr>\n<tr>\n<td><strong>Recordatorios</strong></td>\n<td>c741021d-8853-4234-a926-7d8e5f4e4f2f</td>\n<td>Mensajes que busca que el usuario retome acciones pendientes que son clave para la funcionalidad de la solución.  <br /><strong>Ejemplos:</strong>  <br />- Retomar meta incompleta  <br />- Clasificar transacción sin categoría  <br />- Ajustar configuración de una meta o regla de ahorro</td>\n</tr>\n<tr>\n<td><strong>Oferta/Comercial</strong></td>\n<td>c572040e-e3ca-477b-9b87-33d12a70112e</td>\n<td>Mensajes que contienen información relevante comercialmente para el usuario.  <br /><strong>Ejemplos:</strong>  <br />- Oferta de producto  <br />- Promoción o descuento  <br />- Otro tipo de información desde el banco.</td>\n</tr>\n</tbody>\n</table>\n</div><h4 id=\"campañas\">Campañas</h4>\n<p>Las notificaciones tienes asociadas campañas que corresponden a agrupaciones de mensajes que buscan un objetivo comunicacional para el usuario. Una campaña puede tener varios mensajes asociados.</p>\n","_postman_id":"9cbce9da-ac96-448c-888a-5134517ba627"},{"name":"Insights","item":[{"name":"Reportes","item":[{"name":"Listar reportes de un usuario","id":"2688c7b9-d91a-4e8d-aa74-5270673cba80","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-insight/v1/report-api/users/{{user_id}}/reports/?paginate=true&page_size=10&page=1","description":"<p>Listado de los reportes disponibles para el usuario.</p>\n<h4 id=\"filtros\">Filtros</h4>\n<ul>\n<li><p><code>paginate</code>: (true/false) booleano para indicar si se quiere la respuesta con paginado. Default: <code>false</code></p>\n</li>\n<li><p><code>page_size</code>: número de registros por página</p>\n</li>\n<li><p><code>page</code>: número de la página del que se espera una respuesta</p>\n</li>\n<li><p><code>is_read</code>: (true/false) booleanom para específicar si se quieren los reportes leídos o no leídos. Default: <code>false</code></p>\n</li>\n<li><p><code>report_type</code>: indicador para específicar que tipo de reportes se quieren listar de acuedo a catálogo de reportes.</p>\n</li>\n</ul>\n","urlObject":{"path":["api-insight","v1","report-api","users","{{user_id}}","reports",""],"host":["{{host_app}}"],"query":[{"key":"paginate","value":"true"},{"key":"page_size","value":"10"},{"key":"page","value":"1"},{"disabled":true,"key":"is_read","value":"false"},{"disabled":true,"key":"report_type","value":"563e93b3-1644-49f1-8d7d-743c64484e61"}],"variable":[]}},"response":[{"id":"6c001abf-5b28-413d-8411-8b07416e37c4","name":"Succesful Response paginated","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-insight/v1/report-api/users/{{user_id}}/reports/?paginate=true&page_size=100&page=1&is_read=false","host":["{{host_app}}"],"path":["api-insight","v1","report-api","users","{{user_id}}","reports",""],"query":[{"key":"paginate","value":"true"},{"key":"page_size","value":"100"},{"key":"page","value":"1"},{"key":"is_read","value":"false"}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Tue, 16 Sep 2025 19:37:12 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"182781"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"4bf1df47-cd75-4f42-9174-899f234217c5"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"RApgXF3WIAMEhFQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68c9bc68-034da1ae5ba523d82549ad78;Parent=58b4c84738e25275;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"next\": null,\n    \"previous\": null,\n    \"total_pages\": 1,\n    \"current_page\": 1,\n    \"count\": 75,\n    \"offset\": 0,\n    \"results\": [\n        {\n            \"id\": \"b211dfde-50ba-482b-b2b3-46a02ac9a27e\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 785,\n                    \"weekly_saving\": 785,\n                    \"weekly_balance\": 6144.2,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 6,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 1,\n            \"week\": 3,\n            \"day\": 19,\n            \"is_read\": false,\n            \"created_at\": \"2025-01-20T23:30:37.623324-06:00\",\n            \"updated_at\": \"2025-01-20T23:30:37.623331-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"096c48be-d924-4c45-ac1a-f4108304db36\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 564,\n                    \"weekly_saving\": 564,\n                    \"weekly_balance\": 7041.2,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 4,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 1,\n            \"week\": 4,\n            \"day\": 26,\n            \"is_read\": false,\n            \"created_at\": \"2025-01-27T23:30:43.659373-06:00\",\n            \"updated_at\": \"2025-01-27T23:30:43.659379-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"25e93dc1-8660-497b-8258-7fc7b3a6c7b7\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 564,\n                    \"weekly_saving\": 564,\n                    \"weekly_balance\": 7041.2,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 4,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 1,\n            \"week\": 4,\n            \"day\": 26,\n            \"is_read\": false,\n            \"created_at\": \"2025-01-27T23:30:44.461550-06:00\",\n            \"updated_at\": \"2025-01-27T23:30:44.461556-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"1d052a91-afb3-4093-9c58-dd355960a96b\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 2552,\n                    \"weekly_saving\": 2552,\n                    \"weekly_balance\": 9482.2,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 6,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 2,\n            \"week\": 5,\n            \"day\": 2,\n            \"is_read\": false,\n            \"created_at\": \"2025-02-03T23:30:41.414915-06:00\",\n            \"updated_at\": \"2025-02-03T23:30:41.414922-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"9633fc1c-71c8-4240-85fe-4e1b666f5a45\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 2552,\n                    \"weekly_saving\": 2552,\n                    \"weekly_balance\": 9482.2,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 6,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 2,\n            \"week\": 5,\n            \"day\": 2,\n            \"is_read\": false,\n            \"created_at\": \"2025-02-03T23:30:42.344885-06:00\",\n            \"updated_at\": \"2025-02-03T23:30:42.344892-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"7be0ee33-4400-49e6-925d-368b0d5e197f\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 444,\n                    \"weekly_saving\": 444,\n                    \"weekly_balance\": 10037.2,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 4,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 2,\n            \"week\": 6,\n            \"day\": 9,\n            \"is_read\": false,\n            \"created_at\": \"2025-02-10T23:30:32.236946-06:00\",\n            \"updated_at\": \"2025-02-10T23:30:32.236953-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"859f2382-5f2b-4013-970a-59bcb9ab8ac9\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 444,\n                    \"weekly_saving\": 444,\n                    \"weekly_balance\": 10037.2,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 4,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 2,\n            \"week\": 6,\n            \"day\": 9,\n            \"is_read\": false,\n            \"created_at\": \"2025-02-10T23:30:32.833264-06:00\",\n            \"updated_at\": \"2025-02-10T23:30:32.833271-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"81ae0598-8869-4c3e-a937-17387e060097\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 789,\n                    \"weekly_saving\": 789,\n                    \"weekly_balance\": 10826.2,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 7,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 2,\n            \"week\": 7,\n            \"day\": 16,\n            \"is_read\": false,\n            \"created_at\": \"2025-02-17T23:30:30.500302-06:00\",\n            \"updated_at\": \"2025-02-17T23:30:30.500321-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"5f443b6a-f793-4750-b57f-96af52e64a4f\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 789,\n                    \"weekly_saving\": 789,\n                    \"weekly_balance\": 10826.2,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 7,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 2,\n            \"week\": 7,\n            \"day\": 16,\n            \"is_read\": false,\n            \"created_at\": \"2025-02-17T23:30:31.150935-06:00\",\n            \"updated_at\": \"2025-02-17T23:30:31.150942-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"279c113c-30e2-4bf5-bd0f-1c2d3b8fe58a\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 679,\n                    \"weekly_saving\": 679,\n                    \"weekly_balance\": 11505.2,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 6,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 2,\n            \"week\": 8,\n            \"day\": 23,\n            \"is_read\": false,\n            \"created_at\": \"2025-02-24T23:30:29.890596-06:00\",\n            \"updated_at\": \"2025-02-24T23:30:29.890608-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"0b74bb37-feca-47b6-9ccc-16223f37c3d7\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 679,\n                    \"weekly_saving\": 679,\n                    \"weekly_balance\": 11505.2,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 6,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 2,\n            \"week\": 8,\n            \"day\": 23,\n            \"is_read\": false,\n            \"created_at\": \"2025-02-24T23:30:30.727965-06:00\",\n            \"updated_at\": \"2025-02-24T23:30:30.727971-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"a4a6100d-2374-45ea-aae1-9acab9696a48\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 791,\n                    \"weekly_saving\": 791,\n                    \"weekly_balance\": 12296.2,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 7,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 3,\n            \"week\": 9,\n            \"day\": 2,\n            \"is_read\": false,\n            \"created_at\": \"2025-03-03T23:30:34.657973-06:00\",\n            \"updated_at\": \"2025-03-03T23:30:34.657985-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"ca9d7bc7-5b6c-421a-bdef-ce9cb6cb3677\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 791,\n                    \"weekly_saving\": 791,\n                    \"weekly_balance\": 12296.2,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 7,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 3,\n            \"week\": 9,\n            \"day\": 2,\n            \"is_read\": false,\n            \"created_at\": \"2025-03-03T23:30:35.464422-06:00\",\n            \"updated_at\": \"2025-03-03T23:30:35.464429-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"d1333a9b-cb33-4942-8900-e5e56cb029e6\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 681,\n                    \"weekly_saving\": 681,\n                    \"weekly_balance\": 12957,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 6,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 3,\n            \"week\": 10,\n            \"day\": 9,\n            \"is_read\": false,\n            \"created_at\": \"2025-03-10T23:30:45.334637-06:00\",\n            \"updated_at\": \"2025-03-10T23:30:45.334653-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"2ac38b94-1402-494a-9fc8-ae8a68b6e756\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 681,\n                    \"weekly_saving\": 681,\n                    \"weekly_balance\": 12957,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 6,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 3,\n            \"week\": 10,\n            \"day\": 9,\n            \"is_read\": false,\n            \"created_at\": \"2025-03-10T23:30:46.123646-06:00\",\n            \"updated_at\": \"2025-03-10T23:30:46.123654-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"a2160b63-c951-4860-83c8-9763826f4579\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 795,\n                    \"weekly_saving\": 795,\n                    \"weekly_balance\": 27145,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 7,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 3,\n            \"week\": 13,\n            \"day\": 30,\n            \"is_read\": false,\n            \"created_at\": \"2025-03-31T04:00:49.934863-06:00\",\n            \"updated_at\": \"2025-03-31T04:00:49.934873-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"148c4579-e9f1-4c20-a68a-b34b7dccc518\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 795,\n                    \"weekly_saving\": 795,\n                    \"weekly_balance\": 27145,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 7,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 3,\n            \"week\": 13,\n            \"day\": 30,\n            \"is_read\": false,\n            \"created_at\": \"2025-03-31T04:00:52.114909-06:00\",\n            \"updated_at\": \"2025-03-31T04:00:52.114919-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"c7170e8d-7b12-4274-b1c5-2c1a519c9113\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 794,\n                    \"weekly_saving\": 794,\n                    \"weekly_balance\": 26350,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 7,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 3,\n            \"week\": 12,\n            \"day\": 23,\n            \"is_read\": false,\n            \"created_at\": \"2025-03-24T15:23:25.186048-06:00\",\n            \"updated_at\": \"2025-03-24T15:23:25.186058-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"86ebdd37-ae28-45c8-a823-9f48ab0a4848\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 794,\n                    \"weekly_saving\": 794,\n                    \"weekly_balance\": 26350,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 7,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 3,\n            \"week\": 12,\n            \"day\": 23,\n            \"is_read\": false,\n            \"created_at\": \"2025-03-24T15:23:26.190768-06:00\",\n            \"updated_at\": \"2025-03-24T15:23:26.190778-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"e954b71c-1cb5-4f5f-938c-f7a0874da688\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"total\": {\n                    \"type\": \"growth\",\n                    \"monthly_balance\": 12060.2,\n                    \"monthly_projects\": [\n                        {\n                            \"progress\": 12770,\n                            \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 63.85,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 420,\n                            \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Retorno de inversion\",\n                            \"project_progress\": 2.1,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 100,\n                            \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 0.5,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        }\n                    ],\n                    \"monthly_projects_count\": 3\n                },\n                \"balance\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"monthly_grow\": 2588,\n                    \"monthly_saving\": 2588,\n                    \"monthly_balance\": 12060.2,\n                    \"monthly_withdrawal\": 0,\n                    \"monthly_projects_count\": 3\n                },\n                \"monthly\": {\n                    \"type\": \"first_page\",\n                    \"year\": 2025,\n                    \"month\": 2,\n                    \"month_name\": \"febrero\"\n                },\n                \"no_show\": false,\n                \"summary\": {\n                    \"type\": \"savings\",\n                    \"monthly_grow\": 2588,\n                    \"monthly_rules\": [\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                                \"name\": \"Monto fijo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                                \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_amount\",\n                            \"rule_amount\": 2553,\n                            \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                                \"name\": \"Placer culpable\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                                \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} en {description}\"\n                            },\n                            \"rule_name\": \"rule_type_guilty_pleasure\",\n                            \"rule_amount\": 400,\n                            \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                                \"name\": \"Desafío 52 semanas\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                                \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                                \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                            },\n                            \"rule_name\": \"rule_type_52_weeks\",\n                            \"rule_amount\": 35,\n                            \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                                \"name\": \"Redondear\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                                \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                                \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                            },\n                            \"rule_name\": \"rule_type_round_up\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_investment_returns\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                                \"name\": \"Porcentaje de sueldo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                                \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                                \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_salary\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                        }\n                    ],\n                    \"monthly_balance\": 12060.2,\n                    \"monthly_savings_count\": 23,\n                    \"monthly_projects_count\": 3\n                },\n                \"top_rules\": {\n                    \"type\": \"list_rules\",\n                    \"monthly_rules\": [\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                                \"name\": \"Monto fijo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                                \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_amount\",\n                            \"rule_amount\": 2553,\n                            \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                                \"name\": \"Placer culpable\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                                \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} en {description}\"\n                            },\n                            \"rule_name\": \"rule_type_guilty_pleasure\",\n                            \"rule_amount\": 400,\n                            \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                                \"name\": \"Desafío 52 semanas\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                                \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                                \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                            },\n                            \"rule_name\": \"rule_type_52_weeks\",\n                            \"rule_amount\": 35,\n                            \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                                \"name\": \"Redondear\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                                \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                                \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                            },\n                            \"rule_name\": \"rule_type_round_up\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_investment_returns\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                                \"name\": \"Porcentaje de sueldo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                                \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                                \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_salary\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                        }\n                    ]\n                },\n                \"end_report\": {\n                    \"type\": \"closing\",\n                    \"month\": 2,\n                    \"month_name\": \"febrero\"\n                },\n                \"main_project\": {\n                    \"type\": \"savings\",\n                    \"monthly_balance\": 12060.2,\n                    \"monthly_projects\": [\n                        {\n                            \"progress\": 12770,\n                            \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 63.85,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 420,\n                            \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Retorno de inversion\",\n                            \"project_progress\": 2.1,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 100,\n                            \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 0.5,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        }\n                    ],\n                    \"monthly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"monthly\",\n                        \"type\": \"first_page\"\n                    },\n                    {\n                        \"page\": \"balance\",\n                        \"type\": \"growth_no_withdrawals\"\n                    },\n                    {\n                        \"page\": \"main_project\",\n                        \"type\": \"savings\"\n                    },\n                    {\n                        \"page\": \"total\",\n                        \"type\": \"growth\"\n                    },\n                    {\n                        \"page\": \"top_rules\",\n                        \"type\": \"list_rules\"\n                    },\n                    {\n                        \"page\": \"summary\",\n                        \"type\": \"savings\"\n                    },\n                    {\n                        \"page\": \"end_report\",\n                        \"type\": \"closing\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 2,\n            \"week\": 9,\n            \"day\": 28,\n            \"is_read\": false,\n            \"created_at\": \"2025-03-18T11:57:47.708326-06:00\",\n            \"updated_at\": \"2025-03-18T11:57:47.708337-06:00\",\n            \"report_type\": \"8ef9ddf5-c952-4235-a35e-3971bf738c6f\"\n        },\n        {\n            \"id\": \"f6dfda89-a69b-4667-ace4-09f4e36fef2d\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 444,\n                    \"weekly_saving\": 444,\n                    \"weekly_balance\": 13290,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 4,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 3,\n            \"week\": 11,\n            \"day\": 16,\n            \"is_read\": false,\n            \"created_at\": \"2025-03-18T11:57:51.494564-06:00\",\n            \"updated_at\": \"2025-03-18T11:57:51.494572-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"bbda5572-53b0-4076-86fd-0b5d9a76aae8\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 444,\n                    \"weekly_saving\": 444,\n                    \"weekly_balance\": 13290,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 4,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 3,\n            \"week\": 11,\n            \"day\": 16,\n            \"is_read\": false,\n            \"created_at\": \"2025-03-18T11:57:52.269972-06:00\",\n            \"updated_at\": \"2025-03-18T11:57:52.269981-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"fc45af48-943b-4594-9339-069b57545b85\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"balance_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"year\": 2025,\n                    \"month\": 2,\n                    \"month_name\": \"febrero\",\n                    \"monthly_grow\": 2588,\n                    \"monthly_saving\": 2588,\n                    \"monthly_balance\": 12060.2,\n                    \"monthly_withdrawal\": 0,\n                    \"monthly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"balance_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 2,\n            \"week\": 9,\n            \"day\": 28,\n            \"is_read\": true,\n            \"created_at\": \"2025-03-18T11:57:50.454413-06:00\",\n            \"updated_at\": \"2025-03-18T11:57:50.454423-06:00\",\n            \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n        },\n        {\n            \"id\": \"1e17f312-ed93-4c88-9531-acef99e2b590\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"total\": {\n                    \"type\": \"growth\",\n                    \"monthly_balance\": 26111,\n                    \"monthly_projects\": [\n                        {\n                            \"progress\": 9111,\n                            \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45.55,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Retorno de inversion\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        }\n                    ],\n                    \"monthly_projects_count\": 3\n                },\n                \"balance\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"monthly_grow\": 3061,\n                    \"monthly_saving\": 3061,\n                    \"monthly_balance\": 26111,\n                    \"monthly_withdrawal\": 0,\n                    \"monthly_projects_count\": 3\n                },\n                \"monthly\": {\n                    \"type\": \"first_page\",\n                    \"year\": 2025,\n                    \"month\": 3,\n                    \"month_name\": \"marzo\"\n                },\n                \"no_show\": false,\n                \"summary\": {\n                    \"type\": \"savings\",\n                    \"monthly_grow\": 3061,\n                    \"monthly_rules\": [\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                                \"name\": \"Monto fijo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                                \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_amount\",\n                            \"rule_amount\": 2997,\n                            \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                                \"name\": \"Desafío 52 semanas\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                                \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                                \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                            },\n                            \"rule_name\": \"rule_type_52_weeks\",\n                            \"rule_amount\": 64,\n                            \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                                \"name\": \"Placer culpable\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                                \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} en {description}\"\n                            },\n                            \"rule_name\": \"rule_type_guilty_pleasure\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                                \"name\": \"Redondear\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                                \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                                \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                            },\n                            \"rule_name\": \"rule_type_round_up\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_investment_returns\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                                \"name\": \"Porcentaje de sueldo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                                \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                                \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_salary\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                        }\n                    ],\n                    \"monthly_balance\": 26111,\n                    \"monthly_savings_count\": 27,\n                    \"monthly_projects_count\": 3\n                },\n                \"top_rules\": {\n                    \"type\": \"list_rules\",\n                    \"monthly_rules\": [\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                                \"name\": \"Monto fijo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                                \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_amount\",\n                            \"rule_amount\": 2997,\n                            \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                                \"name\": \"Desafío 52 semanas\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                                \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                                \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                            },\n                            \"rule_name\": \"rule_type_52_weeks\",\n                            \"rule_amount\": 64,\n                            \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                                \"name\": \"Placer culpable\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                                \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} en {description}\"\n                            },\n                            \"rule_name\": \"rule_type_guilty_pleasure\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                                \"name\": \"Redondear\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                                \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                                \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                            },\n                            \"rule_name\": \"rule_type_round_up\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_investment_returns\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                                \"name\": \"Porcentaje de sueldo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                                \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                                \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_salary\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                        }\n                    ]\n                },\n                \"end_report\": {\n                    \"type\": \"closing\",\n                    \"month\": 3,\n                    \"month_name\": \"marzo\"\n                },\n                \"main_project\": {\n                    \"type\": \"savings\",\n                    \"monthly_balance\": 26111,\n                    \"monthly_projects\": [\n                        {\n                            \"progress\": 9111,\n                            \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45.55,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Retorno de inversion\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        }\n                    ],\n                    \"monthly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"monthly\",\n                        \"type\": \"first_page\"\n                    },\n                    {\n                        \"page\": \"balance\",\n                        \"type\": \"growth_no_withdrawals\"\n                    },\n                    {\n                        \"page\": \"main_project\",\n                        \"type\": \"savings\"\n                    },\n                    {\n                        \"page\": \"total\",\n                        \"type\": \"growth\"\n                    },\n                    {\n                        \"page\": \"top_rules\",\n                        \"type\": \"list_rules\"\n                    },\n                    {\n                        \"page\": \"summary\",\n                        \"type\": \"savings\"\n                    },\n                    {\n                        \"page\": \"end_report\",\n                        \"type\": \"closing\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 3,\n            \"week\": 14,\n            \"day\": 31,\n            \"is_read\": false,\n            \"created_at\": \"2025-04-01T04:00:50.136779-06:00\",\n            \"updated_at\": \"2025-04-01T04:00:50.136789-06:00\",\n            \"report_type\": \"8ef9ddf5-c952-4235-a35e-3971bf738c6f\"\n        },\n        {\n            \"id\": \"e3a1400d-9202-4110-bc7e-da4b028af534\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"balance_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"year\": 2025,\n                    \"month\": 3,\n                    \"month_name\": \"marzo\",\n                    \"monthly_grow\": 3061,\n                    \"monthly_saving\": 3061,\n                    \"monthly_balance\": 26111,\n                    \"monthly_withdrawal\": 0,\n                    \"monthly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"balance_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 3,\n            \"week\": 14,\n            \"day\": 31,\n            \"is_read\": false,\n            \"created_at\": \"2025-04-01T04:00:52.906635-06:00\",\n            \"updated_at\": \"2025-04-01T04:00:52.906645-06:00\",\n            \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n        },\n        {\n            \"id\": \"d7084c1c-bfdf-4445-8158-074522c3ada7\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 685,\n                    \"weekly_saving\": 685,\n                    \"weekly_balance\": 26685,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 6,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 4,\n            \"week\": 14,\n            \"day\": 6,\n            \"is_read\": false,\n            \"created_at\": \"2025-04-07T10:35:03.902603-06:00\",\n            \"updated_at\": \"2025-04-07T10:35:03.902612-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"d90c5bed-56bc-450d-bb73-27bbdb0a2973\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 685,\n                    \"weekly_saving\": 685,\n                    \"weekly_balance\": 26685,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 6,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 4,\n            \"week\": 14,\n            \"day\": 6,\n            \"is_read\": false,\n            \"created_at\": \"2025-04-07T10:35:05.096494-06:00\",\n            \"updated_at\": \"2025-04-07T10:35:05.096500-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"81fdcaa6-30d9-40ab-a334-464c6d21a738\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 797,\n                    \"weekly_saving\": 797,\n                    \"weekly_balance\": 26464.21,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 7,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 4,\n            \"week\": 15,\n            \"day\": 13,\n            \"is_read\": false,\n            \"created_at\": \"2025-04-14T04:00:42.410110-06:00\",\n            \"updated_at\": \"2025-04-14T04:00:42.410117-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"dc15a760-4bd8-4f3b-8406-c1cdd9151020\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 797,\n                    \"weekly_saving\": 797,\n                    \"weekly_balance\": 26464.21,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 7,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 4,\n            \"week\": 15,\n            \"day\": 13,\n            \"is_read\": false,\n            \"created_at\": \"2025-04-14T04:00:43.368727-06:00\",\n            \"updated_at\": \"2025-04-14T04:00:43.368734-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"9f558a75-703e-4357-bbc9-d78db70d628a\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 333,\n                    \"weekly_saving\": 333,\n                    \"weekly_balance\": 26000,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 3,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 4,\n            \"week\": 16,\n            \"day\": 20,\n            \"is_read\": false,\n            \"created_at\": \"2025-04-21T04:01:00.945833-06:00\",\n            \"updated_at\": \"2025-04-21T04:01:00.945839-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"db53aed1-48d5-4381-8ce3-4626ea6c0de7\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 333,\n                    \"weekly_saving\": 333,\n                    \"weekly_balance\": 26000,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 3,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 4,\n            \"week\": 16,\n            \"day\": 20,\n            \"is_read\": false,\n            \"created_at\": \"2025-04-21T04:01:01.922548-06:00\",\n            \"updated_at\": \"2025-04-21T04:01:01.922554-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"ec028307-c523-4733-b030-c6033a21d396\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_no_growth\",\n                    \"weekly_grow\": 0,\n                    \"weekly_saving\": 0,\n                    \"weekly_balance\": 26000,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 0,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_no_growth\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 4,\n            \"week\": 17,\n            \"day\": 27,\n            \"is_read\": false,\n            \"created_at\": \"2025-04-28T04:01:56.123782-06:00\",\n            \"updated_at\": \"2025-04-28T04:01:56.123793-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"195f48f9-ed35-44f4-8ed5-4ac5bd113fad\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"nothing_project_active_savings\",\n                    \"weekly_grow\": 0,\n                    \"weekly_saving\": 0,\n                    \"weekly_balance\": 26000,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 0,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"nothing_project_active_savings\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 4,\n            \"week\": 17,\n            \"day\": 27,\n            \"is_read\": false,\n            \"created_at\": \"2025-04-28T04:01:57.763103-06:00\",\n            \"updated_at\": \"2025-04-28T04:01:57.763113-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"28d5a40d-a555-43fe-8031-47d3752043a0\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"total\": {\n                    \"type\": \"growth\",\n                    \"monthly_balance\": 26000,\n                    \"monthly_projects\": [\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Retorno de inversion\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        }\n                    ],\n                    \"monthly_projects_count\": 3\n                },\n                \"balance\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"monthly_grow\": 1704,\n                    \"monthly_saving\": 1704,\n                    \"monthly_balance\": 26000,\n                    \"monthly_withdrawal\": 0,\n                    \"monthly_projects_count\": 3\n                },\n                \"monthly\": {\n                    \"type\": \"first_page\",\n                    \"year\": 2025,\n                    \"month\": 4,\n                    \"month_name\": \"abril\"\n                },\n                \"no_show\": false,\n                \"summary\": {\n                    \"type\": \"savings\",\n                    \"monthly_grow\": 1704,\n                    \"monthly_rules\": [\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                                \"name\": \"Monto fijo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                                \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_amount\",\n                            \"rule_amount\": 1665,\n                            \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                                \"name\": \"Desafío 52 semanas\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                                \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                                \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                            },\n                            \"rule_name\": \"rule_type_52_weeks\",\n                            \"rule_amount\": 39,\n                            \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                                \"name\": \"Placer culpable\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                                \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} en {description}\"\n                            },\n                            \"rule_name\": \"rule_type_guilty_pleasure\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                                \"name\": \"Redondear\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                                \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                                \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                            },\n                            \"rule_name\": \"rule_type_round_up\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_investment_returns\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                                \"name\": \"Porcentaje de sueldo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                                \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                                \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_salary\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                        }\n                    ],\n                    \"monthly_balance\": 26000,\n                    \"monthly_savings_count\": 15,\n                    \"monthly_projects_count\": 3\n                },\n                \"top_rules\": {\n                    \"type\": \"list_rules\",\n                    \"monthly_rules\": [\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                                \"name\": \"Monto fijo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                                \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_amount\",\n                            \"rule_amount\": 1665,\n                            \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                                \"name\": \"Desafío 52 semanas\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                                \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                                \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                            },\n                            \"rule_name\": \"rule_type_52_weeks\",\n                            \"rule_amount\": 39,\n                            \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                                \"name\": \"Placer culpable\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                                \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} en {description}\"\n                            },\n                            \"rule_name\": \"rule_type_guilty_pleasure\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                                \"name\": \"Redondear\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                                \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                                \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                            },\n                            \"rule_name\": \"rule_type_round_up\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_investment_returns\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                                \"name\": \"Porcentaje de sueldo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                                \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                                \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_salary\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                        }\n                    ]\n                },\n                \"end_report\": {\n                    \"type\": \"closing\",\n                    \"month\": 4,\n                    \"month_name\": \"abril\"\n                },\n                \"main_project\": {\n                    \"type\": \"savings\",\n                    \"monthly_balance\": 26000,\n                    \"monthly_projects\": [\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Retorno de inversion\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        }\n                    ],\n                    \"monthly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"monthly\",\n                        \"type\": \"first_page\"\n                    },\n                    {\n                        \"page\": \"balance\",\n                        \"type\": \"growth_no_withdrawals\"\n                    },\n                    {\n                        \"page\": \"main_project\",\n                        \"type\": \"savings\"\n                    },\n                    {\n                        \"page\": \"total\",\n                        \"type\": \"growth\"\n                    },\n                    {\n                        \"page\": \"top_rules\",\n                        \"type\": \"list_rules\"\n                    },\n                    {\n                        \"page\": \"summary\",\n                        \"type\": \"savings\"\n                    },\n                    {\n                        \"page\": \"end_report\",\n                        \"type\": \"closing\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 4,\n            \"week\": 18,\n            \"day\": 30,\n            \"is_read\": false,\n            \"created_at\": \"2025-05-01T04:00:51.262678-06:00\",\n            \"updated_at\": \"2025-05-01T04:00:51.262687-06:00\",\n            \"report_type\": \"8ef9ddf5-c952-4235-a35e-3971bf738c6f\"\n        },\n        {\n            \"id\": \"03fcf3ca-9b52-4536-8c7e-32b3c7c90cfe\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"balance_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"year\": 2025,\n                    \"month\": 4,\n                    \"month_name\": \"abril\",\n                    \"monthly_grow\": 1704,\n                    \"monthly_saving\": 1704,\n                    \"monthly_balance\": 26000,\n                    \"monthly_withdrawal\": 0,\n                    \"monthly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"balance_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 4,\n            \"week\": 18,\n            \"day\": 30,\n            \"is_read\": false,\n            \"created_at\": \"2025-05-01T04:00:54.583673-06:00\",\n            \"updated_at\": \"2025-05-01T04:00:54.583686-06:00\",\n            \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n        },\n        {\n            \"id\": \"ffc7303f-a4c1-48c2-9259-b85d21ae12f9\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_no_growth\",\n                    \"weekly_grow\": 0,\n                    \"weekly_saving\": 0,\n                    \"weekly_balance\": 26000,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 0,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_no_growth\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 5,\n            \"week\": 19,\n            \"day\": 11,\n            \"is_read\": false,\n            \"created_at\": \"2025-05-12T04:00:34.909677-06:00\",\n            \"updated_at\": \"2025-05-12T04:00:34.909686-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"8a65686c-b098-4a4b-bb18-41eba99203d1\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_no_growth\",\n                    \"weekly_grow\": 0,\n                    \"weekly_saving\": 0,\n                    \"weekly_balance\": 26000,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 0,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_no_growth\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 5,\n            \"week\": 18,\n            \"day\": 4,\n            \"is_read\": false,\n            \"created_at\": \"2025-05-05T04:00:46.932188-06:00\",\n            \"updated_at\": \"2025-05-05T04:00:46.932197-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"a6d1c0df-3d2b-4ab8-84c5-3ba46c7821dd\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"nothing_project_active_savings\",\n                    \"weekly_grow\": 0,\n                    \"weekly_saving\": 0,\n                    \"weekly_balance\": 26000,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 0,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"nothing_project_active_savings\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 5,\n            \"week\": 18,\n            \"day\": 4,\n            \"is_read\": false,\n            \"created_at\": \"2025-05-05T04:00:47.657571-06:00\",\n            \"updated_at\": \"2025-05-05T04:00:47.657580-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"65c6f727-8589-4916-ad48-c15a03abbf86\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"nothing_project_active_savings\",\n                    \"weekly_grow\": 0,\n                    \"weekly_saving\": 0,\n                    \"weekly_balance\": 26000,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 0,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"nothing_project_active_savings\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 5,\n            \"week\": 19,\n            \"day\": 11,\n            \"is_read\": false,\n            \"created_at\": \"2025-05-12T04:00:35.759401-06:00\",\n            \"updated_at\": \"2025-05-12T04:00:35.759408-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"f53e6da9-7ffc-4e6d-b6ba-b9ca37823002\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_no_growth\",\n                    \"weekly_grow\": 0,\n                    \"weekly_saving\": 0,\n                    \"weekly_balance\": 26000,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 0,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_no_growth\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 5,\n            \"week\": 20,\n            \"day\": 18,\n            \"is_read\": false,\n            \"created_at\": \"2025-05-19T04:00:38.908701-06:00\",\n            \"updated_at\": \"2025-05-19T04:00:38.908708-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"a505b984-3e38-433f-9b73-60943df9413f\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"nothing_project_active_savings\",\n                    \"weekly_grow\": 0,\n                    \"weekly_saving\": 0,\n                    \"weekly_balance\": 26000,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 0,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"nothing_project_active_savings\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 5,\n            \"week\": 20,\n            \"day\": 18,\n            \"is_read\": false,\n            \"created_at\": \"2025-05-19T04:00:39.619682-06:00\",\n            \"updated_at\": \"2025-05-19T04:00:39.619688-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"9c5b4b24-1736-4eaf-b246-689a4ce8d491\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_no_growth\",\n                    \"weekly_grow\": 0,\n                    \"weekly_saving\": 0,\n                    \"weekly_balance\": 26000,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 0,\n                    \"weekly_projects_count\": 3\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_no_growth\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 5,\n            \"week\": 21,\n            \"day\": 25,\n            \"is_read\": false,\n            \"created_at\": \"2025-05-26T04:00:38.050097-06:00\",\n            \"updated_at\": \"2025-05-26T04:00:38.050106-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"05f91afe-4b99-4089-9b56-ceea31624125\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"nothing_project_active_savings\",\n                    \"weekly_grow\": 0,\n                    \"weekly_saving\": 0,\n                    \"weekly_balance\": 26000,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 0,\n                    \"weekly_projects_count\": 3\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"nothing_project_active_savings\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 5,\n            \"week\": 21,\n            \"day\": 25,\n            \"is_read\": false,\n            \"created_at\": \"2025-05-26T04:00:38.760354-06:00\",\n            \"updated_at\": \"2025-05-26T04:00:38.760362-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"10d803e0-6d81-4543-8250-db95fdd3c6aa\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"total\": {\n                    \"type\": \"growth\",\n                    \"monthly_balance\": 170000,\n                    \"monthly_projects\": [\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"meta para ahorra pasajes\",\n                            \"project_progress\": 900,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"6c25b47d-480e-4043-9e84-32bf7567fad5\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"9254bb18-a58e-46eb-8b34-08ab6a37ed67\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"c8209e43-b970-4643-96d6-854ba906a2e1\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Retorno de inversion\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n                            \"category_id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                                \"name\": \"Xerpa +\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"\",\n                                \"order\": 0,\n                                \"active\": false,\n                                \"short_name\": \"PROJECT_TYPE_PLUS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"d82400e4-171d-44c0-9cda-0ed84d3491a6\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"87e96079-2bf6-4dd2-8c26-e1996cad88c8\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": null,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        }\n                    ],\n                    \"monthly_projects_count\": 20\n                },\n                \"balance\": {\n                    \"type\": \"growth_with_withdrawals\",\n                    \"monthly_grow\": 247852,\n                    \"monthly_saving\": 258852,\n                    \"monthly_balance\": 170000,\n                    \"monthly_withdrawal\": 11000,\n                    \"monthly_projects_count\": 20\n                },\n                \"monthly\": {\n                    \"type\": \"first_page\",\n                    \"year\": 2025,\n                    \"month\": 5,\n                    \"month_name\": \"mayo\"\n                },\n                \"no_show\": false,\n                \"summary\": {\n                    \"type\": \"savings\",\n                    \"monthly_grow\": 247852,\n                    \"monthly_rules\": [\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                                \"name\": \"Porcentaje de sueldo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                                \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                                \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_salary\",\n                            \"rule_amount\": 250000,\n                            \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                                \"name\": \"Monto fijo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                                \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_amount\",\n                            \"rule_amount\": 6660,\n                            \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                                \"name\": \"Redondear\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                                \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                                \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                            },\n                            \"rule_name\": \"rule_type_round_up\",\n                            \"rule_amount\": 1654,\n                            \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                                \"name\": \"Desafío 52 semanas\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                                \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                                \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                            },\n                            \"rule_name\": \"rule_type_52_weeks\",\n                            \"rule_amount\": 228,\n                            \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                                \"name\": \"Placer culpable\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                                \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} en {description}\"\n                            },\n                            \"rule_name\": \"rule_type_guilty_pleasure\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                            },\n                            \"rule_name\": \"rule_type_internal_transfer\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"3665326e-994b-4706-a705-f8356d2b4a47\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_readjustments\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_investment_returns\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                                \"name\": \"Pasion futbolera\",\n                                \"color\": \"#7C2582\",\n                                \"active\": false,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_SOCCER\",\n                                \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                            },\n                            \"rule_name\": \"rule_type_soccer\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n                        }\n                    ],\n                    \"monthly_balance\": 170000,\n                    \"monthly_savings_count\": 55,\n                    \"monthly_projects_count\": 20\n                },\n                \"top_rules\": {\n                    \"type\": \"list_rules\",\n                    \"monthly_rules\": [\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                                \"name\": \"Porcentaje de sueldo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                                \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                                \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_salary\",\n                            \"rule_amount\": 250000,\n                            \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                                \"name\": \"Monto fijo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                                \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_amount\",\n                            \"rule_amount\": 6660,\n                            \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                                \"name\": \"Redondear\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                                \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                                \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                            },\n                            \"rule_name\": \"rule_type_round_up\",\n                            \"rule_amount\": 1654,\n                            \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                                \"name\": \"Desafío 52 semanas\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                                \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                                \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                            },\n                            \"rule_name\": \"rule_type_52_weeks\",\n                            \"rule_amount\": 228,\n                            \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                                \"name\": \"Placer culpable\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                                \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} en {description}\"\n                            },\n                            \"rule_name\": \"rule_type_guilty_pleasure\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                            },\n                            \"rule_name\": \"rule_type_internal_transfer\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"3665326e-994b-4706-a705-f8356d2b4a47\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_readjustments\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_investment_returns\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                                \"name\": \"Pasion futbolera\",\n                                \"color\": \"#7C2582\",\n                                \"active\": false,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_SOCCER\",\n                                \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                            },\n                            \"rule_name\": \"rule_type_soccer\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n                        }\n                    ]\n                },\n                \"end_report\": {\n                    \"type\": \"closing\",\n                    \"month\": 5,\n                    \"month_name\": \"mayo\"\n                },\n                \"main_project\": {\n                    \"type\": \"savings\",\n                    \"monthly_balance\": 170000,\n                    \"monthly_projects\": [\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"meta para ahorra pasajes\",\n                            \"project_progress\": 900,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"6c25b47d-480e-4043-9e84-32bf7567fad5\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"9254bb18-a58e-46eb-8b34-08ab6a37ed67\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"c8209e43-b970-4643-96d6-854ba906a2e1\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Retorno de inversion\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n                            \"category_id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                                \"name\": \"Xerpa +\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"\",\n                                \"order\": 0,\n                                \"active\": false,\n                                \"short_name\": \"PROJECT_TYPE_PLUS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"d82400e4-171d-44c0-9cda-0ed84d3491a6\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"87e96079-2bf6-4dd2-8c26-e1996cad88c8\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": null,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        }\n                    ],\n                    \"monthly_projects_count\": 20\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"monthly\",\n                        \"type\": \"first_page\"\n                    },\n                    {\n                        \"page\": \"balance\",\n                        \"type\": \"growth_with_withdrawals\"\n                    },\n                    {\n                        \"page\": \"main_project\",\n                        \"type\": \"savings\"\n                    },\n                    {\n                        \"page\": \"total\",\n                        \"type\": \"growth\"\n                    },\n                    {\n                        \"page\": \"top_rules\",\n                        \"type\": \"list_rules\"\n                    },\n                    {\n                        \"page\": \"summary\",\n                        \"type\": \"savings\"\n                    },\n                    {\n                        \"page\": \"end_report\",\n                        \"type\": \"closing\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 5,\n            \"week\": 22,\n            \"day\": 31,\n            \"is_read\": false,\n            \"created_at\": \"2025-06-01T04:00:42.549194-06:00\",\n            \"updated_at\": \"2025-06-01T04:00:42.549203-06:00\",\n            \"report_type\": \"8ef9ddf5-c952-4235-a35e-3971bf738c6f\"\n        },\n        {\n            \"id\": \"5140c84d-5083-4ad5-afe4-84f6eb7fbb9d\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"balance_short\": {\n                    \"type\": \"growth_with_withdrawals\",\n                    \"year\": 2025,\n                    \"month\": 5,\n                    \"month_name\": \"mayo\",\n                    \"monthly_grow\": 247852,\n                    \"monthly_saving\": 258852,\n                    \"monthly_balance\": 170000,\n                    \"monthly_withdrawal\": 11000,\n                    \"monthly_projects_count\": 20\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"balance_short\",\n                        \"type\": \"growth_with_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 5,\n            \"week\": 22,\n            \"day\": 31,\n            \"is_read\": false,\n            \"created_at\": \"2025-06-01T04:00:46.084495-06:00\",\n            \"updated_at\": \"2025-06-01T04:00:46.084502-06:00\",\n            \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n        },\n        {\n            \"id\": \"79767798-fd0c-4da6-8e4c-8faebf2202de\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth\",\n                    \"weekly_grow\": 247852,\n                    \"weekly_saving\": 258852,\n                    \"weekly_balance\": 170000,\n                    \"weekly_withdrawal\": 11000,\n                    \"weekly_savings_count\": 55,\n                    \"weekly_projects_count\": 20\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 6,\n            \"week\": 22,\n            \"day\": 1,\n            \"is_read\": false,\n            \"created_at\": \"2025-06-02T04:00:41.418033-06:00\",\n            \"updated_at\": \"2025-06-02T04:00:41.418041-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"4f776d1d-9894-49b2-a73a-4e982936799e\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_with_withdrawals\",\n                    \"weekly_grow\": 247852,\n                    \"weekly_saving\": 258852,\n                    \"weekly_balance\": 170000,\n                    \"weekly_withdrawal\": 11000,\n                    \"weekly_savings_count\": 55,\n                    \"weekly_projects_count\": 20\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_with_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 6,\n            \"week\": 22,\n            \"day\": 1,\n            \"is_read\": false,\n            \"created_at\": \"2025-06-02T04:00:43.046289-06:00\",\n            \"updated_at\": \"2025-06-02T04:00:43.046301-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"81493d80-711f-49af-928b-a98b19bca2c7\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth\",\n                    \"weekly_grow\": 155,\n                    \"weekly_saving\": 255,\n                    \"weekly_balance\": 197000,\n                    \"weekly_withdrawal\": 100,\n                    \"weekly_savings_count\": 2,\n                    \"weekly_projects_count\": 23\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 6,\n            \"week\": 23,\n            \"day\": 8,\n            \"is_read\": false,\n            \"created_at\": \"2025-06-09T04:00:44.731788-06:00\",\n            \"updated_at\": \"2025-06-09T04:00:44.731798-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"e4a4965d-a6ca-4483-8cfb-746dbf6a6497\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_with_withdrawals\",\n                    \"weekly_grow\": 155,\n                    \"weekly_saving\": 255,\n                    \"weekly_balance\": 197000,\n                    \"weekly_withdrawal\": 100,\n                    \"weekly_savings_count\": 2,\n                    \"weekly_projects_count\": 23\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_with_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 6,\n            \"week\": 23,\n            \"day\": 8,\n            \"is_read\": false,\n            \"created_at\": \"2025-06-09T04:00:46.246548-06:00\",\n            \"updated_at\": \"2025-06-09T04:00:46.246555-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"a1d39330-83b2-407d-9e55-c1a365895f31\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 10053,\n                    \"weekly_saving\": 10053,\n                    \"weekly_balance\": 199057,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 32,\n                    \"weekly_projects_count\": 23\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 6,\n            \"week\": 24,\n            \"day\": 15,\n            \"is_read\": false,\n            \"created_at\": \"2025-06-16T04:00:40.931622-06:00\",\n            \"updated_at\": \"2025-06-16T04:00:40.931628-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"0934bf85-4938-4cf2-a2e2-5438cafaa49a\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 4732,\n                    \"weekly_saving\": 4732,\n                    \"weekly_balance\": 198937,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 14,\n                    \"weekly_projects_count\": 23\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 6,\n            \"week\": 26,\n            \"day\": 29,\n            \"is_read\": false,\n            \"created_at\": \"2025-06-30T04:00:40.735401-06:00\",\n            \"updated_at\": \"2025-06-30T04:00:40.735408-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"773c8cb0-3bb9-4743-8877-6c76ec3173bb\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 10053,\n                    \"weekly_saving\": 10053,\n                    \"weekly_balance\": 199057,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 32,\n                    \"weekly_projects_count\": 23\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 6,\n            \"week\": 24,\n            \"day\": 15,\n            \"is_read\": false,\n            \"created_at\": \"2025-06-16T04:00:42.736548-06:00\",\n            \"updated_at\": \"2025-06-16T04:00:42.736554-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"f758042d-bd96-4884-950f-5b1d8cd07f6c\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 4721,\n                    \"weekly_saving\": 4721,\n                    \"weekly_balance\": 199734,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 14,\n                    \"weekly_projects_count\": 23\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 6,\n            \"week\": 25,\n            \"day\": 22,\n            \"is_read\": false,\n            \"created_at\": \"2025-06-23T04:00:36.497481-06:00\",\n            \"updated_at\": \"2025-06-23T04:00:36.497487-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"103cd569-a788-4ac0-b10a-dacb71aa9782\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 4721,\n                    \"weekly_saving\": 4721,\n                    \"weekly_balance\": 199734,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 14,\n                    \"weekly_projects_count\": 23\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 6,\n            \"week\": 25,\n            \"day\": 22,\n            \"is_read\": false,\n            \"created_at\": \"2025-06-23T04:00:37.946782-06:00\",\n            \"updated_at\": \"2025-06-23T04:00:37.946789-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"9717237e-5946-43dc-8b79-067a1a16c8e4\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 4732,\n                    \"weekly_saving\": 4732,\n                    \"weekly_balance\": 198937,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 14,\n                    \"weekly_projects_count\": 23\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 6,\n            \"week\": 26,\n            \"day\": 29,\n            \"is_read\": false,\n            \"created_at\": \"2025-06-30T04:00:39.045048-06:00\",\n            \"updated_at\": \"2025-06-30T04:00:39.045058-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"46e01432-4c79-434d-b3b5-bbb3285704f3\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"total\": {\n                    \"type\": \"growth\",\n                    \"monthly_balance\": 197808,\n                    \"monthly_projects\": [\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"meta para ahorra pasajes\",\n                            \"project_progress\": 900,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9555,\n                            \"project_id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 47.77,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9253,\n                            \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 46.26,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"09029550-2885-4ac0-9fda-b7cef9d55776\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"6c25b47d-480e-4043-9e84-32bf7567fad5\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"7098e250-bdc9-445e-aca9-e55bbb8200ce\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"7128da5f-616b-4500-9d51-23eb185e8975\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"9254bb18-a58e-46eb-8b34-08ab6a37ed67\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"c8209e43-b970-4643-96d6-854ba906a2e1\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Retorno de inversion\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n                            \"category_id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                                \"name\": \"Xerpa +\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"\",\n                                \"order\": 0,\n                                \"active\": false,\n                                \"short_name\": \"PROJECT_TYPE_PLUS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"d82400e4-171d-44c0-9cda-0ed84d3491a6\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"87e96079-2bf6-4dd2-8c26-e1996cad88c8\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": null,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        }\n                    ],\n                    \"monthly_projects_count\": 23\n                },\n                \"balance\": {\n                    \"type\": \"growth_with_withdrawals\",\n                    \"monthly_grow\": 20266,\n                    \"monthly_saving\": 20366,\n                    \"monthly_balance\": 197808,\n                    \"monthly_withdrawal\": 100,\n                    \"monthly_projects_count\": 23\n                },\n                \"monthly\": {\n                    \"type\": \"first_page\",\n                    \"year\": 2025,\n                    \"month\": 6,\n                    \"month_name\": \"junio\"\n                },\n                \"no_show\": false,\n                \"summary\": {\n                    \"type\": \"savings\",\n                    \"monthly_grow\": 20266,\n                    \"monthly_rules\": [\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                                \"name\": \"Monto fijo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                                \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_amount\",\n                            \"rule_amount\": 19869,\n                            \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                                \"name\": \"Desafío 52 semanas\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                                \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                                \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                            },\n                            \"rule_name\": \"rule_type_52_weeks\",\n                            \"rule_amount\": 242,\n                            \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                            },\n                            \"rule_name\": \"rule_type_internal_transfer\",\n                            \"rule_amount\": 100,\n                            \"rule_type_id\": \"3665326e-994b-4706-a705-f8356d2b4a47\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                                \"name\": \"Placer culpable\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                                \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} en {description}\"\n                            },\n                            \"rule_name\": \"rule_type_guilty_pleasure\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                                \"name\": \"Redondear\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                                \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                                \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                            },\n                            \"rule_name\": \"rule_type_round_up\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_readjustments\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_investment_returns\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                                \"name\": \"Pasion futbolera\",\n                                \"color\": \"#7C2582\",\n                                \"active\": false,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_SOCCER\",\n                                \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                            },\n                            \"rule_name\": \"rule_type_soccer\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                                \"name\": \"Porcentaje de sueldo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                                \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                                \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_salary\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                        }\n                    ],\n                    \"monthly_balance\": 197808,\n                    \"monthly_savings_count\": 63,\n                    \"monthly_projects_count\": 23\n                },\n                \"top_rules\": {\n                    \"type\": \"list_rules\",\n                    \"monthly_rules\": [\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                                \"name\": \"Monto fijo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                                \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_amount\",\n                            \"rule_amount\": 19869,\n                            \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                                \"name\": \"Desafío 52 semanas\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                                \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                                \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                            },\n                            \"rule_name\": \"rule_type_52_weeks\",\n                            \"rule_amount\": 242,\n                            \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                            },\n                            \"rule_name\": \"rule_type_internal_transfer\",\n                            \"rule_amount\": 100,\n                            \"rule_type_id\": \"3665326e-994b-4706-a705-f8356d2b4a47\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                                \"name\": \"Placer culpable\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                                \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} en {description}\"\n                            },\n                            \"rule_name\": \"rule_type_guilty_pleasure\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                                \"name\": \"Redondear\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                                \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                                \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                            },\n                            \"rule_name\": \"rule_type_round_up\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_readjustments\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_investment_returns\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                                \"name\": \"Pasion futbolera\",\n                                \"color\": \"#7C2582\",\n                                \"active\": false,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_SOCCER\",\n                                \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                            },\n                            \"rule_name\": \"rule_type_soccer\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                                \"name\": \"Porcentaje de sueldo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                                \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                                \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_salary\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                        }\n                    ]\n                },\n                \"end_report\": {\n                    \"type\": \"closing\",\n                    \"month\": 6,\n                    \"month_name\": \"junio\"\n                },\n                \"main_project\": {\n                    \"type\": \"savings\",\n                    \"monthly_balance\": 197808,\n                    \"monthly_projects\": [\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"meta para ahorra pasajes\",\n                            \"project_progress\": 900,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9555,\n                            \"project_id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 47.77,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9253,\n                            \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 46.26,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"09029550-2885-4ac0-9fda-b7cef9d55776\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"6c25b47d-480e-4043-9e84-32bf7567fad5\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"7098e250-bdc9-445e-aca9-e55bbb8200ce\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"7128da5f-616b-4500-9d51-23eb185e8975\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"9254bb18-a58e-46eb-8b34-08ab6a37ed67\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"c8209e43-b970-4643-96d6-854ba906a2e1\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Retorno de inversion\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n                            \"category_id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                                \"name\": \"Xerpa +\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"\",\n                                \"order\": 0,\n                                \"active\": false,\n                                \"short_name\": \"PROJECT_TYPE_PLUS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"d82400e4-171d-44c0-9cda-0ed84d3491a6\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"87e96079-2bf6-4dd2-8c26-e1996cad88c8\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": null,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        }\n                    ],\n                    \"monthly_projects_count\": 23\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"monthly\",\n                        \"type\": \"first_page\"\n                    },\n                    {\n                        \"page\": \"balance\",\n                        \"type\": \"growth_with_withdrawals\"\n                    },\n                    {\n                        \"page\": \"main_project\",\n                        \"type\": \"savings\"\n                    },\n                    {\n                        \"page\": \"total\",\n                        \"type\": \"growth\"\n                    },\n                    {\n                        \"page\": \"top_rules\",\n                        \"type\": \"list_rules\"\n                    },\n                    {\n                        \"page\": \"summary\",\n                        \"type\": \"savings\"\n                    },\n                    {\n                        \"page\": \"end_report\",\n                        \"type\": \"closing\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 6,\n            \"week\": 27,\n            \"day\": 30,\n            \"is_read\": false,\n            \"created_at\": \"2025-07-01T04:00:38.660584-06:00\",\n            \"updated_at\": \"2025-07-01T04:00:38.660590-06:00\",\n            \"report_type\": \"8ef9ddf5-c952-4235-a35e-3971bf738c6f\"\n        },\n        {\n            \"id\": \"46899d76-27dd-4197-8975-9e8636885a1f\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"balance_short\": {\n                    \"type\": \"growth_with_withdrawals\",\n                    \"year\": 2025,\n                    \"month\": 6,\n                    \"month_name\": \"junio\",\n                    \"monthly_grow\": 20266,\n                    \"monthly_saving\": 20366,\n                    \"monthly_balance\": 197808,\n                    \"monthly_withdrawal\": 100,\n                    \"monthly_projects_count\": 23\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"balance_short\",\n                        \"type\": \"growth_with_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 6,\n            \"week\": 27,\n            \"day\": 30,\n            \"is_read\": false,\n            \"created_at\": \"2025-07-01T04:00:42.773450-06:00\",\n            \"updated_at\": \"2025-07-01T04:00:42.773456-06:00\",\n            \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n        },\n        {\n            \"id\": \"d7f759c5-9959-44a2-b226-5a2fce784db9\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 4743,\n                    \"weekly_saving\": 4743,\n                    \"weekly_balance\": 201088,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 14,\n                    \"weekly_projects_count\": 23\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 7,\n            \"week\": 27,\n            \"day\": 6,\n            \"is_read\": false,\n            \"created_at\": \"2025-07-07T04:00:34.900692-06:00\",\n            \"updated_at\": \"2025-07-07T04:00:34.900698-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"bd7613de-17df-4197-8cad-16cee9f22918\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 4743,\n                    \"weekly_saving\": 4743,\n                    \"weekly_balance\": 201088,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 14,\n                    \"weekly_projects_count\": 23\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 7,\n            \"week\": 27,\n            \"day\": 6,\n            \"is_read\": false,\n            \"created_at\": \"2025-07-07T04:00:36.244510-06:00\",\n            \"updated_at\": \"2025-07-07T04:00:36.244516-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"48dddc79-692a-47cc-9dbe-fcedd7469473\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 4754,\n                    \"weekly_saving\": 4754,\n                    \"weekly_balance\": 205853,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 14,\n                    \"weekly_projects_count\": 23\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 7,\n            \"week\": 28,\n            \"day\": 13,\n            \"is_read\": false,\n            \"created_at\": \"2025-07-14T04:00:37.161576-06:00\",\n            \"updated_at\": \"2025-07-14T04:00:37.161586-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"d2254c68-9d54-4444-9e1a-f261ddbc9c2a\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 4754,\n                    \"weekly_saving\": 4754,\n                    \"weekly_balance\": 205853,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 14,\n                    \"weekly_projects_count\": 23\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 7,\n            \"week\": 28,\n            \"day\": 13,\n            \"is_read\": false,\n            \"created_at\": \"2025-07-14T04:00:38.731518-06:00\",\n            \"updated_at\": \"2025-07-14T04:00:38.731525-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"00590c8b-f776-4127-a697-1273690137d1\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 7318,\n                    \"weekly_saving\": 7318,\n                    \"weekly_balance\": 201110,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 13,\n                    \"weekly_projects_count\": 23\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 7,\n            \"week\": 29,\n            \"day\": 20,\n            \"is_read\": false,\n            \"created_at\": \"2025-07-21T04:00:32.605031-06:00\",\n            \"updated_at\": \"2025-07-21T04:00:32.605040-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"ec4ac15d-dab5-40fa-bd47-6d619436c24f\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 7318,\n                    \"weekly_saving\": 7318,\n                    \"weekly_balance\": 201110,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 13,\n                    \"weekly_projects_count\": 23\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 7,\n            \"week\": 29,\n            \"day\": 20,\n            \"is_read\": false,\n            \"created_at\": \"2025-07-21T04:00:33.876436-06:00\",\n            \"updated_at\": \"2025-07-21T04:00:33.876442-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"dc690757-9fa7-4172-9f85-f7b9f2bc6d9d\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"total\": {\n                    \"type\": \"growth\",\n                    \"monthly_balance\": 197000,\n                    \"monthly_projects\": [\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"meta para ahorra pasajes\",\n                            \"project_progress\": 900,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"09029550-2885-4ac0-9fda-b7cef9d55776\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"6c25b47d-480e-4043-9e84-32bf7567fad5\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"7098e250-bdc9-445e-aca9-e55bbb8200ce\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"7128da5f-616b-4500-9d51-23eb185e8975\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"9254bb18-a58e-46eb-8b34-08ab6a37ed67\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"c8209e43-b970-4643-96d6-854ba906a2e1\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Retorno de inversion\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n                            \"category_id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                                \"name\": \"Xerpa +\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"\",\n                                \"order\": 0,\n                                \"active\": false,\n                                \"short_name\": \"PROJECT_TYPE_PLUS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"d82400e4-171d-44c0-9cda-0ed84d3491a6\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"87e96079-2bf6-4dd2-8c26-e1996cad88c8\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": null,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        }\n                    ],\n                    \"monthly_projects_count\": 23\n                },\n                \"balance\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"monthly_grow\": 18433,\n                    \"monthly_saving\": 18433,\n                    \"monthly_balance\": 197000,\n                    \"monthly_withdrawal\": 0,\n                    \"monthly_projects_count\": 23\n                },\n                \"monthly\": {\n                    \"type\": \"first_page\",\n                    \"year\": 2025,\n                    \"month\": 7,\n                    \"month_name\": \"julio\"\n                },\n                \"no_show\": false,\n                \"summary\": {\n                    \"type\": \"savings\",\n                    \"monthly_grow\": 18433,\n                    \"monthly_rules\": [\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                                \"name\": \"Monto fijo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                                \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_amount\",\n                            \"rule_amount\": 14763,\n                            \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                                \"name\": \"Desafío 52 semanas\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                                \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                                \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                            },\n                            \"rule_name\": \"rule_type_52_weeks\",\n                            \"rule_amount\": 340,\n                            \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                                \"name\": \"Placer culpable\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                                \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} en {description}\"\n                            },\n                            \"rule_name\": \"rule_type_guilty_pleasure\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                            },\n                            \"rule_name\": \"rule_type_internal_transfer\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"3665326e-994b-4706-a705-f8356d2b4a47\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                                \"name\": \"Redondear\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                                \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                                \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                            },\n                            \"rule_name\": \"rule_type_round_up\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_readjustments\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_investment_returns\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                                \"name\": \"Pasion futbolera\",\n                                \"color\": \"#7C2582\",\n                                \"active\": false,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_SOCCER\",\n                                \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                            },\n                            \"rule_name\": \"rule_type_soccer\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                                \"name\": \"Porcentaje de sueldo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                                \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                                \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_salary\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                        }\n                    ],\n                    \"monthly_balance\": 197000,\n                    \"monthly_savings_count\": 47,\n                    \"monthly_projects_count\": 23\n                },\n                \"top_rules\": {\n                    \"type\": \"list_rules\",\n                    \"monthly_rules\": [\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                                \"name\": \"Monto fijo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                                \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_amount\",\n                            \"rule_amount\": 14763,\n                            \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                                \"name\": \"Desafío 52 semanas\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                                \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                                \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                            },\n                            \"rule_name\": \"rule_type_52_weeks\",\n                            \"rule_amount\": 340,\n                            \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                                \"name\": \"Placer culpable\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                                \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} en {description}\"\n                            },\n                            \"rule_name\": \"rule_type_guilty_pleasure\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                            },\n                            \"rule_name\": \"rule_type_internal_transfer\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"3665326e-994b-4706-a705-f8356d2b4a47\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                                \"name\": \"Redondear\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                                \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                                \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                            },\n                            \"rule_name\": \"rule_type_round_up\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_readjustments\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_investment_returns\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                                \"name\": \"Pasion futbolera\",\n                                \"color\": \"#7C2582\",\n                                \"active\": false,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_SOCCER\",\n                                \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                            },\n                            \"rule_name\": \"rule_type_soccer\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                                \"name\": \"Porcentaje de sueldo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                                \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                                \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_salary\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                        }\n                    ]\n                },\n                \"end_report\": {\n                    \"type\": \"closing\",\n                    \"month\": 7,\n                    \"month_name\": \"julio\"\n                },\n                \"main_project\": {\n                    \"type\": \"savings\",\n                    \"monthly_balance\": 197000,\n                    \"monthly_projects\": [\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"meta para ahorra pasajes\",\n                            \"project_progress\": 900,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"09029550-2885-4ac0-9fda-b7cef9d55776\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"6c25b47d-480e-4043-9e84-32bf7567fad5\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"7098e250-bdc9-445e-aca9-e55bbb8200ce\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"7128da5f-616b-4500-9d51-23eb185e8975\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"9254bb18-a58e-46eb-8b34-08ab6a37ed67\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"c8209e43-b970-4643-96d6-854ba906a2e1\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Retorno de inversion\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n                            \"category_id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                                \"name\": \"Xerpa +\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"\",\n                                \"order\": 0,\n                                \"active\": false,\n                                \"short_name\": \"PROJECT_TYPE_PLUS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"d82400e4-171d-44c0-9cda-0ed84d3491a6\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"87e96079-2bf6-4dd2-8c26-e1996cad88c8\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": null,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        }\n                    ],\n                    \"monthly_projects_count\": 23\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"monthly\",\n                        \"type\": \"first_page\"\n                    },\n                    {\n                        \"page\": \"balance\",\n                        \"type\": \"growth_no_withdrawals\"\n                    },\n                    {\n                        \"page\": \"main_project\",\n                        \"type\": \"savings\"\n                    },\n                    {\n                        \"page\": \"total\",\n                        \"type\": \"growth\"\n                    },\n                    {\n                        \"page\": \"top_rules\",\n                        \"type\": \"list_rules\"\n                    },\n                    {\n                        \"page\": \"summary\",\n                        \"type\": \"savings\"\n                    },\n                    {\n                        \"page\": \"end_report\",\n                        \"type\": \"closing\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 7,\n            \"week\": 31,\n            \"day\": 31,\n            \"is_read\": false,\n            \"created_at\": \"2025-08-01T20:27:29.517569-06:00\",\n            \"updated_at\": \"2025-08-01T20:27:29.517575-06:00\",\n            \"report_type\": \"8ef9ddf5-c952-4235-a35e-3971bf738c6f\"\n        },\n        {\n            \"id\": \"d294a409-c5c5-4793-940d-e8491e7157b6\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 666,\n                    \"weekly_saving\": 666,\n                    \"weekly_balance\": 197666,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 2,\n                    \"weekly_projects_count\": 23\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 8,\n            \"week\": 33,\n            \"day\": 17,\n            \"is_read\": false,\n            \"created_at\": \"2025-08-18T07:24:39.015301-06:00\",\n            \"updated_at\": \"2025-08-18T07:24:39.015307-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"600d3721-bfed-4167-8ee3-89303f16cf5c\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 3996,\n                    \"weekly_saving\": 3996,\n                    \"weekly_balance\": 201662,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 12,\n                    \"weekly_projects_count\": 23\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 8,\n            \"week\": 34,\n            \"day\": 24,\n            \"is_read\": false,\n            \"created_at\": \"2025-08-25T04:00:36.203559-06:00\",\n            \"updated_at\": \"2025-08-25T04:00:36.203565-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"7bb0ff99-1fa2-4292-82ad-59ae7df587bd\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 3996,\n                    \"weekly_saving\": 3996,\n                    \"weekly_balance\": 201662,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 12,\n                    \"weekly_projects_count\": 23\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 8,\n            \"week\": 34,\n            \"day\": 24,\n            \"is_read\": false,\n            \"created_at\": \"2025-08-25T04:00:37.179717-06:00\",\n            \"updated_at\": \"2025-08-25T04:00:37.179724-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"1588d808-e3a4-4266-a00c-822ff3000a8a\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"total\": {\n                    \"type\": \"growth\",\n                    \"monthly_balance\": 206608,\n                    \"monthly_projects\": [\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"meta para ahorra pasajes\",\n                            \"project_progress\": 900,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 16900,\n                            \"project_id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 84.5,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 10704,\n                            \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 53.52,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"09029550-2885-4ac0-9fda-b7cef9d55776\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"6c25b47d-480e-4043-9e84-32bf7567fad5\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"7098e250-bdc9-445e-aca9-e55bbb8200ce\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"7128da5f-616b-4500-9d51-23eb185e8975\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"9254bb18-a58e-46eb-8b34-08ab6a37ed67\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"c8209e43-b970-4643-96d6-854ba906a2e1\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Retorno de inversion\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n                            \"category_id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                                \"name\": \"Xerpa +\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"\",\n                                \"order\": 0,\n                                \"active\": false,\n                                \"short_name\": \"PROJECT_TYPE_PLUS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"d82400e4-171d-44c0-9cda-0ed84d3491a6\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"87e96079-2bf6-4dd2-8c26-e1996cad88c8\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": null,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 4,\n                            \"project_id\": \"9c183ea2-d7ac-4a01-a369-12844706c264\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"final\",\n                            \"project_progress\": null,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        }\n                    ],\n                    \"monthly_projects_count\": 24\n                },\n                \"balance\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"monthly_grow\": 10940,\n                    \"monthly_saving\": 10940,\n                    \"monthly_balance\": 206608,\n                    \"monthly_withdrawal\": 0,\n                    \"monthly_projects_count\": 24\n                },\n                \"monthly\": {\n                    \"type\": \"first_page\",\n                    \"year\": 2025,\n                    \"month\": 8,\n                    \"month_name\": \"agosto\"\n                },\n                \"no_show\": false,\n                \"summary\": {\n                    \"type\": \"savings\",\n                    \"monthly_grow\": 10940,\n                    \"monthly_rules\": [\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                                \"name\": \"Monto fijo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                                \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_amount\",\n                            \"rule_amount\": 9661,\n                            \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                                \"name\": \"Desafío 52 semanas\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                                \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                                \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                            },\n                            \"rule_name\": \"rule_type_52_weeks\",\n                            \"rule_amount\": 169,\n                            \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                                \"name\": \"Placer culpable\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                                \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} en {description}\"\n                            },\n                            \"rule_name\": \"rule_type_guilty_pleasure\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                            },\n                            \"rule_name\": \"rule_type_internal_transfer\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"3665326e-994b-4706-a705-f8356d2b4a47\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                                \"name\": \"Redondear\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                                \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                                \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                            },\n                            \"rule_name\": \"rule_type_round_up\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_readjustments\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_investment_returns\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                                \"name\": \"Pasion futbolera\",\n                                \"color\": \"#7C2582\",\n                                \"active\": false,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_SOCCER\",\n                                \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                            },\n                            \"rule_name\": \"rule_type_soccer\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                                \"name\": \"Porcentaje de sueldo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                                \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                                \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_salary\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                        }\n                    ],\n                    \"monthly_balance\": 206608,\n                    \"monthly_savings_count\": 37,\n                    \"monthly_projects_count\": 24\n                },\n                \"top_rules\": {\n                    \"type\": \"list_rules\",\n                    \"monthly_rules\": [\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                                \"name\": \"Monto fijo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                                \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_amount\",\n                            \"rule_amount\": 9661,\n                            \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                                \"name\": \"Desafío 52 semanas\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                                \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                                \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                            },\n                            \"rule_name\": \"rule_type_52_weeks\",\n                            \"rule_amount\": 169,\n                            \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                                \"name\": \"Placer culpable\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                                \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} en {description}\"\n                            },\n                            \"rule_name\": \"rule_type_guilty_pleasure\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                            },\n                            \"rule_name\": \"rule_type_internal_transfer\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"3665326e-994b-4706-a705-f8356d2b4a47\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                                \"name\": \"Redondear\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                                \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                                \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                            },\n                            \"rule_name\": \"rule_type_round_up\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_readjustments\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"name\": \"Regla rendimientos de inversión\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                                \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                                \"frequency_description\": \"\"\n                            },\n                            \"rule_name\": \"rule_type_investment_returns\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                                \"name\": \"Pasion futbolera\",\n                                \"color\": \"#7C2582\",\n                                \"active\": false,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_SOCCER\",\n                                \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                                \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                            },\n                            \"rule_name\": \"rule_type_soccer\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n                        },\n                        {\n                            \"metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                                \"name\": \"Porcentaje de sueldo\",\n                                \"color\": \"#7C2582\",\n                                \"active\": true,\n                                \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                                \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                                \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                                \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                                \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                            },\n                            \"rule_name\": \"rule_type_fixed_salary\",\n                            \"rule_amount\": 0,\n                            \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                        }\n                    ]\n                },\n                \"end_report\": {\n                    \"type\": \"closing\",\n                    \"month\": 8,\n                    \"month_name\": \"agosto\"\n                },\n                \"main_project\": {\n                    \"type\": \"savings\",\n                    \"monthly_balance\": 206608,\n                    \"monthly_projects\": [\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"meta para ahorra pasajes\",\n                            \"project_progress\": 900,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 16900,\n                            \"project_id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 84.5,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 10704,\n                            \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 53.52,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"09029550-2885-4ac0-9fda-b7cef9d55776\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"6c25b47d-480e-4043-9e84-32bf7567fad5\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"7098e250-bdc9-445e-aca9-e55bbb8200ce\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"7128da5f-616b-4500-9d51-23eb185e8975\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Meta Viaje\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"9254bb18-a58e-46eb-8b34-08ab6a37ed67\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"c8209e43-b970-4643-96d6-854ba906a2e1\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": 45,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Retorno de inversion\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n                            \"category_id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                                \"name\": \"Xerpa +\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"\",\n                                \"order\": 0,\n                                \"active\": false,\n                                \"short_name\": \"PROJECT_TYPE_PLUS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Xerpa plus\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 8000,\n                            \"project_id\": \"d82400e4-171d-44c0-9cda-0ed84d3491a6\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                            \"project_progress\": 40,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 9000,\n                            \"project_id\": \"87e96079-2bf6-4dd2-8c26-e1996cad88c8\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"Viaje a japon\",\n                            \"project_progress\": null,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        },\n                        {\n                            \"progress\": 4,\n                            \"project_id\": \"9c183ea2-d7ac-4a01-a369-12844706c264\",\n                            \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                            \"project_name\": \"final\",\n                            \"project_progress\": null,\n                            \"category_metadata\": {\n                                \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                                \"name\": \"Vacaciones\",\n                                \"color\": \"#7C2582\",\n                                \"group\": \"premium\",\n                                \"order\": 1,\n                                \"active\": true,\n                                \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                                \"description\": \"\"\n                            }\n                        }\n                    ],\n                    \"monthly_projects_count\": 24\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"monthly\",\n                        \"type\": \"first_page\"\n                    },\n                    {\n                        \"page\": \"balance\",\n                        \"type\": \"growth_no_withdrawals\"\n                    },\n                    {\n                        \"page\": \"main_project\",\n                        \"type\": \"savings\"\n                    },\n                    {\n                        \"page\": \"total\",\n                        \"type\": \"growth\"\n                    },\n                    {\n                        \"page\": \"top_rules\",\n                        \"type\": \"list_rules\"\n                    },\n                    {\n                        \"page\": \"summary\",\n                        \"type\": \"savings\"\n                    },\n                    {\n                        \"page\": \"end_report\",\n                        \"type\": \"closing\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 8,\n            \"week\": 35,\n            \"day\": 31,\n            \"is_read\": false,\n            \"created_at\": \"2025-09-01T04:00:39.577756-06:00\",\n            \"updated_at\": \"2025-09-01T04:00:39.577761-06:00\",\n            \"report_type\": \"8ef9ddf5-c952-4235-a35e-3971bf738c6f\"\n        },\n        {\n            \"id\": \"153604d0-b22f-4c0c-b03e-b90a66cedcef\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"balance_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"year\": 2025,\n                    \"month\": 8,\n                    \"month_name\": \"agosto\",\n                    \"monthly_grow\": 10940,\n                    \"monthly_saving\": 10940,\n                    \"monthly_balance\": 206608,\n                    \"monthly_withdrawal\": 0,\n                    \"monthly_projects_count\": 24\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"balance_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 8,\n            \"week\": 35,\n            \"day\": 31,\n            \"is_read\": false,\n            \"created_at\": \"2025-09-01T04:00:42.629718-06:00\",\n            \"updated_at\": \"2025-09-01T04:00:42.629727-06:00\",\n            \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n        },\n        {\n            \"id\": \"c9e5ff1b-68ec-4c2c-ba3e-8f8b8a366902\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 4946,\n                    \"weekly_saving\": 4946,\n                    \"weekly_balance\": 206608,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 19,\n                    \"weekly_projects_count\": 24\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 8,\n            \"week\": 35,\n            \"day\": 31,\n            \"is_read\": false,\n            \"created_at\": \"2025-09-01T04:00:44.262350-06:00\",\n            \"updated_at\": \"2025-09-01T04:00:44.262356-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"3efe6bbf-7424-424c-b8d1-e0902eeb7df5\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 4946,\n                    \"weekly_saving\": 4946,\n                    \"weekly_balance\": 206608,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 19,\n                    \"weekly_projects_count\": 24\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 8,\n            \"week\": 35,\n            \"day\": 31,\n            \"is_read\": false,\n            \"created_at\": \"2025-09-01T04:00:45.829733-06:00\",\n            \"updated_at\": \"2025-09-01T04:00:45.829739-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"588b04fc-2c80-4b83-b24d-fd8948af089a\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 11399,\n                    \"weekly_saving\": 11399,\n                    \"weekly_balance\": 218007,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 20,\n                    \"weekly_projects_count\": 24\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 9,\n            \"week\": 36,\n            \"day\": 7,\n            \"is_read\": false,\n            \"created_at\": \"2025-09-08T04:00:36.578556-06:00\",\n            \"updated_at\": \"2025-09-08T04:00:36.578563-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"d41203c2-81c2-415d-a1ab-fd77b4e77f4f\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 11399,\n                    \"weekly_saving\": 11399,\n                    \"weekly_balance\": 218007,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 20,\n                    \"weekly_projects_count\": 24\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 9,\n            \"week\": 36,\n            \"day\": 7,\n            \"is_read\": false,\n            \"created_at\": \"2025-09-08T04:00:38.125891-06:00\",\n            \"updated_at\": \"2025-09-08T04:00:38.125897-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        },\n        {\n            \"id\": \"b7acacd3-5d94-4773-9092-a474e37d3ed0\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"weekly\": {\n                    \"type\": \"week_balance_growth_no_withdrawal\",\n                    \"weekly_grow\": 5538,\n                    \"weekly_saving\": 5538,\n                    \"weekly_balance\": 223545,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 21,\n                    \"weekly_projects_count\": 24\n                },\n                \"no_show\": false,\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly\",\n                        \"type\": \"week_balance_growth_no_withdrawal\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 9,\n            \"week\": 37,\n            \"day\": 14,\n            \"is_read\": false,\n            \"created_at\": \"2025-09-15T04:00:34.004773-06:00\",\n            \"updated_at\": \"2025-09-15T04:00:34.004780-06:00\",\n            \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n        },\n        {\n            \"id\": \"fdafd45f-e78b-4c1a-b334-6e9b51554b4e\",\n            \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n            \"metadata\": {\n                \"no_show\": false,\n                \"weekly_short\": {\n                    \"type\": \"growth_no_withdrawals\",\n                    \"weekly_grow\": 5538,\n                    \"weekly_saving\": 5538,\n                    \"weekly_balance\": 223545,\n                    \"weekly_withdrawal\": 0,\n                    \"weekly_savings_count\": 21,\n                    \"weekly_projects_count\": 24\n                },\n                \"configuration\": [\n                    {\n                        \"page\": \"weekly_short\",\n                        \"type\": \"growth_no_withdrawals\"\n                    }\n                ]\n            },\n            \"year\": 2025,\n            \"month\": 9,\n            \"week\": 37,\n            \"day\": 14,\n            \"is_read\": false,\n            \"created_at\": \"2025-09-15T04:00:35.413751-06:00\",\n            \"updated_at\": \"2025-09-15T04:00:35.413757-06:00\",\n            \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n        }\n    ]\n}"},{"id":"f5c0579c-c142-4c96-b9b6-5a113c93b97c","name":"Succesful Response not paginated","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-insight/v1/report-api/users/{{user_id}}/reports/","host":["{{host_app}}"],"path":["api-insight","v1","report-api","users","{{user_id}}","reports",""],"query":[{"key":"paginate","value":"true","disabled":true},{"key":"page_size","value":"100","disabled":true},{"key":"page","value":"1","disabled":true},{"key":"is_read","value":"false","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Tue, 16 Sep 2025 19:39:26 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"182686"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"aa118026-e975-4578-9ee2-4dd74314a5af"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"RAp1MGy9IAMESiQ="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68c9bced-53c99c731cbc742a5c74d2ec;Parent=1d4d9b8ad8d54a82;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"b211dfde-50ba-482b-b2b3-46a02ac9a27e\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 785,\n                \"weekly_saving\": 785,\n                \"weekly_balance\": 6144.2,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 6,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 1,\n        \"week\": 3,\n        \"day\": 19,\n        \"is_read\": false,\n        \"created_at\": \"2025-01-20T23:30:37.623324-06:00\",\n        \"updated_at\": \"2025-01-20T23:30:37.623331-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"096c48be-d924-4c45-ac1a-f4108304db36\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 564,\n                \"weekly_saving\": 564,\n                \"weekly_balance\": 7041.2,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 4,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 1,\n        \"week\": 4,\n        \"day\": 26,\n        \"is_read\": false,\n        \"created_at\": \"2025-01-27T23:30:43.659373-06:00\",\n        \"updated_at\": \"2025-01-27T23:30:43.659379-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"25e93dc1-8660-497b-8258-7fc7b3a6c7b7\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 564,\n                \"weekly_saving\": 564,\n                \"weekly_balance\": 7041.2,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 4,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 1,\n        \"week\": 4,\n        \"day\": 26,\n        \"is_read\": false,\n        \"created_at\": \"2025-01-27T23:30:44.461550-06:00\",\n        \"updated_at\": \"2025-01-27T23:30:44.461556-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"1d052a91-afb3-4093-9c58-dd355960a96b\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 2552,\n                \"weekly_saving\": 2552,\n                \"weekly_balance\": 9482.2,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 6,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 2,\n        \"week\": 5,\n        \"day\": 2,\n        \"is_read\": false,\n        \"created_at\": \"2025-02-03T23:30:41.414915-06:00\",\n        \"updated_at\": \"2025-02-03T23:30:41.414922-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"9633fc1c-71c8-4240-85fe-4e1b666f5a45\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 2552,\n                \"weekly_saving\": 2552,\n                \"weekly_balance\": 9482.2,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 6,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 2,\n        \"week\": 5,\n        \"day\": 2,\n        \"is_read\": false,\n        \"created_at\": \"2025-02-03T23:30:42.344885-06:00\",\n        \"updated_at\": \"2025-02-03T23:30:42.344892-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"7be0ee33-4400-49e6-925d-368b0d5e197f\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 444,\n                \"weekly_saving\": 444,\n                \"weekly_balance\": 10037.2,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 4,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 2,\n        \"week\": 6,\n        \"day\": 9,\n        \"is_read\": false,\n        \"created_at\": \"2025-02-10T23:30:32.236946-06:00\",\n        \"updated_at\": \"2025-02-10T23:30:32.236953-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"859f2382-5f2b-4013-970a-59bcb9ab8ac9\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 444,\n                \"weekly_saving\": 444,\n                \"weekly_balance\": 10037.2,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 4,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 2,\n        \"week\": 6,\n        \"day\": 9,\n        \"is_read\": false,\n        \"created_at\": \"2025-02-10T23:30:32.833264-06:00\",\n        \"updated_at\": \"2025-02-10T23:30:32.833271-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"81ae0598-8869-4c3e-a937-17387e060097\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 789,\n                \"weekly_saving\": 789,\n                \"weekly_balance\": 10826.2,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 7,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 2,\n        \"week\": 7,\n        \"day\": 16,\n        \"is_read\": false,\n        \"created_at\": \"2025-02-17T23:30:30.500302-06:00\",\n        \"updated_at\": \"2025-02-17T23:30:30.500321-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"5f443b6a-f793-4750-b57f-96af52e64a4f\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 789,\n                \"weekly_saving\": 789,\n                \"weekly_balance\": 10826.2,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 7,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 2,\n        \"week\": 7,\n        \"day\": 16,\n        \"is_read\": false,\n        \"created_at\": \"2025-02-17T23:30:31.150935-06:00\",\n        \"updated_at\": \"2025-02-17T23:30:31.150942-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"279c113c-30e2-4bf5-bd0f-1c2d3b8fe58a\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 679,\n                \"weekly_saving\": 679,\n                \"weekly_balance\": 11505.2,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 6,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 2,\n        \"week\": 8,\n        \"day\": 23,\n        \"is_read\": false,\n        \"created_at\": \"2025-02-24T23:30:29.890596-06:00\",\n        \"updated_at\": \"2025-02-24T23:30:29.890608-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"0b74bb37-feca-47b6-9ccc-16223f37c3d7\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 679,\n                \"weekly_saving\": 679,\n                \"weekly_balance\": 11505.2,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 6,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 2,\n        \"week\": 8,\n        \"day\": 23,\n        \"is_read\": false,\n        \"created_at\": \"2025-02-24T23:30:30.727965-06:00\",\n        \"updated_at\": \"2025-02-24T23:30:30.727971-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"a4a6100d-2374-45ea-aae1-9acab9696a48\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 791,\n                \"weekly_saving\": 791,\n                \"weekly_balance\": 12296.2,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 7,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 3,\n        \"week\": 9,\n        \"day\": 2,\n        \"is_read\": false,\n        \"created_at\": \"2025-03-03T23:30:34.657973-06:00\",\n        \"updated_at\": \"2025-03-03T23:30:34.657985-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"ca9d7bc7-5b6c-421a-bdef-ce9cb6cb3677\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 791,\n                \"weekly_saving\": 791,\n                \"weekly_balance\": 12296.2,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 7,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 3,\n        \"week\": 9,\n        \"day\": 2,\n        \"is_read\": false,\n        \"created_at\": \"2025-03-03T23:30:35.464422-06:00\",\n        \"updated_at\": \"2025-03-03T23:30:35.464429-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"d1333a9b-cb33-4942-8900-e5e56cb029e6\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 681,\n                \"weekly_saving\": 681,\n                \"weekly_balance\": 12957,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 6,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 3,\n        \"week\": 10,\n        \"day\": 9,\n        \"is_read\": false,\n        \"created_at\": \"2025-03-10T23:30:45.334637-06:00\",\n        \"updated_at\": \"2025-03-10T23:30:45.334653-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"2ac38b94-1402-494a-9fc8-ae8a68b6e756\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 681,\n                \"weekly_saving\": 681,\n                \"weekly_balance\": 12957,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 6,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 3,\n        \"week\": 10,\n        \"day\": 9,\n        \"is_read\": false,\n        \"created_at\": \"2025-03-10T23:30:46.123646-06:00\",\n        \"updated_at\": \"2025-03-10T23:30:46.123654-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"a2160b63-c951-4860-83c8-9763826f4579\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 795,\n                \"weekly_saving\": 795,\n                \"weekly_balance\": 27145,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 7,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 3,\n        \"week\": 13,\n        \"day\": 30,\n        \"is_read\": false,\n        \"created_at\": \"2025-03-31T04:00:49.934863-06:00\",\n        \"updated_at\": \"2025-03-31T04:00:49.934873-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"148c4579-e9f1-4c20-a68a-b34b7dccc518\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 795,\n                \"weekly_saving\": 795,\n                \"weekly_balance\": 27145,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 7,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 3,\n        \"week\": 13,\n        \"day\": 30,\n        \"is_read\": false,\n        \"created_at\": \"2025-03-31T04:00:52.114909-06:00\",\n        \"updated_at\": \"2025-03-31T04:00:52.114919-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"c7170e8d-7b12-4274-b1c5-2c1a519c9113\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 794,\n                \"weekly_saving\": 794,\n                \"weekly_balance\": 26350,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 7,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 3,\n        \"week\": 12,\n        \"day\": 23,\n        \"is_read\": false,\n        \"created_at\": \"2025-03-24T15:23:25.186048-06:00\",\n        \"updated_at\": \"2025-03-24T15:23:25.186058-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"86ebdd37-ae28-45c8-a823-9f48ab0a4848\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 794,\n                \"weekly_saving\": 794,\n                \"weekly_balance\": 26350,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 7,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 3,\n        \"week\": 12,\n        \"day\": 23,\n        \"is_read\": false,\n        \"created_at\": \"2025-03-24T15:23:26.190768-06:00\",\n        \"updated_at\": \"2025-03-24T15:23:26.190778-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"e954b71c-1cb5-4f5f-938c-f7a0874da688\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"total\": {\n                \"type\": \"growth\",\n                \"monthly_balance\": 12060.2,\n                \"monthly_projects\": [\n                    {\n                        \"progress\": 12770,\n                        \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 63.85,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 420,\n                        \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Retorno de inversion\",\n                        \"project_progress\": 2.1,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 100,\n                        \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 0.5,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    }\n                ],\n                \"monthly_projects_count\": 3\n            },\n            \"balance\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"monthly_grow\": 2588,\n                \"monthly_saving\": 2588,\n                \"monthly_balance\": 12060.2,\n                \"monthly_withdrawal\": 0,\n                \"monthly_projects_count\": 3\n            },\n            \"monthly\": {\n                \"type\": \"first_page\",\n                \"year\": 2025,\n                \"month\": 2,\n                \"month_name\": \"febrero\"\n            },\n            \"no_show\": false,\n            \"summary\": {\n                \"type\": \"savings\",\n                \"monthly_grow\": 2588,\n                \"monthly_rules\": [\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                            \"name\": \"Monto fijo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                            \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_amount\",\n                        \"rule_amount\": 2553,\n                        \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                            \"name\": \"Placer culpable\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} en {description}\"\n                        },\n                        \"rule_name\": \"rule_type_guilty_pleasure\",\n                        \"rule_amount\": 400,\n                        \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                            \"name\": \"Desafío 52 semanas\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                            \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                            \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                        },\n                        \"rule_name\": \"rule_type_52_weeks\",\n                        \"rule_amount\": 35,\n                        \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                            \"name\": \"Redondear\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                            \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                            \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                        },\n                        \"rule_name\": \"rule_type_round_up\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_investment_returns\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                            \"name\": \"Porcentaje de sueldo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                            \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                            \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_salary\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                    }\n                ],\n                \"monthly_balance\": 12060.2,\n                \"monthly_savings_count\": 23,\n                \"monthly_projects_count\": 3\n            },\n            \"top_rules\": {\n                \"type\": \"list_rules\",\n                \"monthly_rules\": [\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                            \"name\": \"Monto fijo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                            \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_amount\",\n                        \"rule_amount\": 2553,\n                        \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                            \"name\": \"Placer culpable\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} en {description}\"\n                        },\n                        \"rule_name\": \"rule_type_guilty_pleasure\",\n                        \"rule_amount\": 400,\n                        \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                            \"name\": \"Desafío 52 semanas\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                            \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                            \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                        },\n                        \"rule_name\": \"rule_type_52_weeks\",\n                        \"rule_amount\": 35,\n                        \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                            \"name\": \"Redondear\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                            \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                            \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                        },\n                        \"rule_name\": \"rule_type_round_up\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_investment_returns\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                            \"name\": \"Porcentaje de sueldo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                            \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                            \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_salary\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                    }\n                ]\n            },\n            \"end_report\": {\n                \"type\": \"closing\",\n                \"month\": 2,\n                \"month_name\": \"febrero\"\n            },\n            \"main_project\": {\n                \"type\": \"savings\",\n                \"monthly_balance\": 12060.2,\n                \"monthly_projects\": [\n                    {\n                        \"progress\": 12770,\n                        \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 63.85,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 420,\n                        \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Retorno de inversion\",\n                        \"project_progress\": 2.1,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 100,\n                        \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 0.5,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    }\n                ],\n                \"monthly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"monthly\",\n                    \"type\": \"first_page\"\n                },\n                {\n                    \"page\": \"balance\",\n                    \"type\": \"growth_no_withdrawals\"\n                },\n                {\n                    \"page\": \"main_project\",\n                    \"type\": \"savings\"\n                },\n                {\n                    \"page\": \"total\",\n                    \"type\": \"growth\"\n                },\n                {\n                    \"page\": \"top_rules\",\n                    \"type\": \"list_rules\"\n                },\n                {\n                    \"page\": \"summary\",\n                    \"type\": \"savings\"\n                },\n                {\n                    \"page\": \"end_report\",\n                    \"type\": \"closing\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 2,\n        \"week\": 9,\n        \"day\": 28,\n        \"is_read\": false,\n        \"created_at\": \"2025-03-18T11:57:47.708326-06:00\",\n        \"updated_at\": \"2025-03-18T11:57:47.708337-06:00\",\n        \"report_type\": \"8ef9ddf5-c952-4235-a35e-3971bf738c6f\"\n    },\n    {\n        \"id\": \"f6dfda89-a69b-4667-ace4-09f4e36fef2d\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 444,\n                \"weekly_saving\": 444,\n                \"weekly_balance\": 13290,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 4,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 3,\n        \"week\": 11,\n        \"day\": 16,\n        \"is_read\": false,\n        \"created_at\": \"2025-03-18T11:57:51.494564-06:00\",\n        \"updated_at\": \"2025-03-18T11:57:51.494572-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"bbda5572-53b0-4076-86fd-0b5d9a76aae8\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 444,\n                \"weekly_saving\": 444,\n                \"weekly_balance\": 13290,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 4,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 3,\n        \"week\": 11,\n        \"day\": 16,\n        \"is_read\": false,\n        \"created_at\": \"2025-03-18T11:57:52.269972-06:00\",\n        \"updated_at\": \"2025-03-18T11:57:52.269981-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"fc45af48-943b-4594-9339-069b57545b85\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"balance_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"year\": 2025,\n                \"month\": 2,\n                \"month_name\": \"febrero\",\n                \"monthly_grow\": 2588,\n                \"monthly_saving\": 2588,\n                \"monthly_balance\": 12060.2,\n                \"monthly_withdrawal\": 0,\n                \"monthly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"balance_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 2,\n        \"week\": 9,\n        \"day\": 28,\n        \"is_read\": true,\n        \"created_at\": \"2025-03-18T11:57:50.454413-06:00\",\n        \"updated_at\": \"2025-03-18T11:57:50.454423-06:00\",\n        \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n    },\n    {\n        \"id\": \"1e17f312-ed93-4c88-9531-acef99e2b590\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"total\": {\n                \"type\": \"growth\",\n                \"monthly_balance\": 26111,\n                \"monthly_projects\": [\n                    {\n                        \"progress\": 9111,\n                        \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45.55,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Retorno de inversion\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    }\n                ],\n                \"monthly_projects_count\": 3\n            },\n            \"balance\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"monthly_grow\": 3061,\n                \"monthly_saving\": 3061,\n                \"monthly_balance\": 26111,\n                \"monthly_withdrawal\": 0,\n                \"monthly_projects_count\": 3\n            },\n            \"monthly\": {\n                \"type\": \"first_page\",\n                \"year\": 2025,\n                \"month\": 3,\n                \"month_name\": \"marzo\"\n            },\n            \"no_show\": false,\n            \"summary\": {\n                \"type\": \"savings\",\n                \"monthly_grow\": 3061,\n                \"monthly_rules\": [\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                            \"name\": \"Monto fijo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                            \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_amount\",\n                        \"rule_amount\": 2997,\n                        \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                            \"name\": \"Desafío 52 semanas\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                            \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                            \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                        },\n                        \"rule_name\": \"rule_type_52_weeks\",\n                        \"rule_amount\": 64,\n                        \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                            \"name\": \"Placer culpable\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} en {description}\"\n                        },\n                        \"rule_name\": \"rule_type_guilty_pleasure\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                            \"name\": \"Redondear\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                            \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                            \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                        },\n                        \"rule_name\": \"rule_type_round_up\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_investment_returns\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                            \"name\": \"Porcentaje de sueldo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                            \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                            \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_salary\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                    }\n                ],\n                \"monthly_balance\": 26111,\n                \"monthly_savings_count\": 27,\n                \"monthly_projects_count\": 3\n            },\n            \"top_rules\": {\n                \"type\": \"list_rules\",\n                \"monthly_rules\": [\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                            \"name\": \"Monto fijo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                            \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_amount\",\n                        \"rule_amount\": 2997,\n                        \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                            \"name\": \"Desafío 52 semanas\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                            \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                            \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                        },\n                        \"rule_name\": \"rule_type_52_weeks\",\n                        \"rule_amount\": 64,\n                        \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                            \"name\": \"Placer culpable\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} en {description}\"\n                        },\n                        \"rule_name\": \"rule_type_guilty_pleasure\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                            \"name\": \"Redondear\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                            \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                            \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                        },\n                        \"rule_name\": \"rule_type_round_up\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_investment_returns\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                            \"name\": \"Porcentaje de sueldo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                            \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                            \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_salary\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                    }\n                ]\n            },\n            \"end_report\": {\n                \"type\": \"closing\",\n                \"month\": 3,\n                \"month_name\": \"marzo\"\n            },\n            \"main_project\": {\n                \"type\": \"savings\",\n                \"monthly_balance\": 26111,\n                \"monthly_projects\": [\n                    {\n                        \"progress\": 9111,\n                        \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45.55,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Retorno de inversion\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    }\n                ],\n                \"monthly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"monthly\",\n                    \"type\": \"first_page\"\n                },\n                {\n                    \"page\": \"balance\",\n                    \"type\": \"growth_no_withdrawals\"\n                },\n                {\n                    \"page\": \"main_project\",\n                    \"type\": \"savings\"\n                },\n                {\n                    \"page\": \"total\",\n                    \"type\": \"growth\"\n                },\n                {\n                    \"page\": \"top_rules\",\n                    \"type\": \"list_rules\"\n                },\n                {\n                    \"page\": \"summary\",\n                    \"type\": \"savings\"\n                },\n                {\n                    \"page\": \"end_report\",\n                    \"type\": \"closing\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 3,\n        \"week\": 14,\n        \"day\": 31,\n        \"is_read\": false,\n        \"created_at\": \"2025-04-01T04:00:50.136779-06:00\",\n        \"updated_at\": \"2025-04-01T04:00:50.136789-06:00\",\n        \"report_type\": \"8ef9ddf5-c952-4235-a35e-3971bf738c6f\"\n    },\n    {\n        \"id\": \"e3a1400d-9202-4110-bc7e-da4b028af534\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"balance_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"year\": 2025,\n                \"month\": 3,\n                \"month_name\": \"marzo\",\n                \"monthly_grow\": 3061,\n                \"monthly_saving\": 3061,\n                \"monthly_balance\": 26111,\n                \"monthly_withdrawal\": 0,\n                \"monthly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"balance_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 3,\n        \"week\": 14,\n        \"day\": 31,\n        \"is_read\": false,\n        \"created_at\": \"2025-04-01T04:00:52.906635-06:00\",\n        \"updated_at\": \"2025-04-01T04:00:52.906645-06:00\",\n        \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n    },\n    {\n        \"id\": \"d7084c1c-bfdf-4445-8158-074522c3ada7\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 685,\n                \"weekly_saving\": 685,\n                \"weekly_balance\": 26685,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 6,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 4,\n        \"week\": 14,\n        \"day\": 6,\n        \"is_read\": false,\n        \"created_at\": \"2025-04-07T10:35:03.902603-06:00\",\n        \"updated_at\": \"2025-04-07T10:35:03.902612-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"d90c5bed-56bc-450d-bb73-27bbdb0a2973\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 685,\n                \"weekly_saving\": 685,\n                \"weekly_balance\": 26685,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 6,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 4,\n        \"week\": 14,\n        \"day\": 6,\n        \"is_read\": false,\n        \"created_at\": \"2025-04-07T10:35:05.096494-06:00\",\n        \"updated_at\": \"2025-04-07T10:35:05.096500-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"81fdcaa6-30d9-40ab-a334-464c6d21a738\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 797,\n                \"weekly_saving\": 797,\n                \"weekly_balance\": 26464.21,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 7,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 4,\n        \"week\": 15,\n        \"day\": 13,\n        \"is_read\": false,\n        \"created_at\": \"2025-04-14T04:00:42.410110-06:00\",\n        \"updated_at\": \"2025-04-14T04:00:42.410117-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"dc15a760-4bd8-4f3b-8406-c1cdd9151020\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 797,\n                \"weekly_saving\": 797,\n                \"weekly_balance\": 26464.21,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 7,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 4,\n        \"week\": 15,\n        \"day\": 13,\n        \"is_read\": false,\n        \"created_at\": \"2025-04-14T04:00:43.368727-06:00\",\n        \"updated_at\": \"2025-04-14T04:00:43.368734-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"9f558a75-703e-4357-bbc9-d78db70d628a\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 333,\n                \"weekly_saving\": 333,\n                \"weekly_balance\": 26000,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 3,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 4,\n        \"week\": 16,\n        \"day\": 20,\n        \"is_read\": false,\n        \"created_at\": \"2025-04-21T04:01:00.945833-06:00\",\n        \"updated_at\": \"2025-04-21T04:01:00.945839-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"db53aed1-48d5-4381-8ce3-4626ea6c0de7\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 333,\n                \"weekly_saving\": 333,\n                \"weekly_balance\": 26000,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 3,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 4,\n        \"week\": 16,\n        \"day\": 20,\n        \"is_read\": false,\n        \"created_at\": \"2025-04-21T04:01:01.922548-06:00\",\n        \"updated_at\": \"2025-04-21T04:01:01.922554-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"ec028307-c523-4733-b030-c6033a21d396\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_no_growth\",\n                \"weekly_grow\": 0,\n                \"weekly_saving\": 0,\n                \"weekly_balance\": 26000,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 0,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_no_growth\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 4,\n        \"week\": 17,\n        \"day\": 27,\n        \"is_read\": false,\n        \"created_at\": \"2025-04-28T04:01:56.123782-06:00\",\n        \"updated_at\": \"2025-04-28T04:01:56.123793-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"195f48f9-ed35-44f4-8ed5-4ac5bd113fad\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"nothing_project_active_savings\",\n                \"weekly_grow\": 0,\n                \"weekly_saving\": 0,\n                \"weekly_balance\": 26000,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 0,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"nothing_project_active_savings\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 4,\n        \"week\": 17,\n        \"day\": 27,\n        \"is_read\": false,\n        \"created_at\": \"2025-04-28T04:01:57.763103-06:00\",\n        \"updated_at\": \"2025-04-28T04:01:57.763113-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"28d5a40d-a555-43fe-8031-47d3752043a0\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"total\": {\n                \"type\": \"growth\",\n                \"monthly_balance\": 26000,\n                \"monthly_projects\": [\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Retorno de inversion\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    }\n                ],\n                \"monthly_projects_count\": 3\n            },\n            \"balance\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"monthly_grow\": 1704,\n                \"monthly_saving\": 1704,\n                \"monthly_balance\": 26000,\n                \"monthly_withdrawal\": 0,\n                \"monthly_projects_count\": 3\n            },\n            \"monthly\": {\n                \"type\": \"first_page\",\n                \"year\": 2025,\n                \"month\": 4,\n                \"month_name\": \"abril\"\n            },\n            \"no_show\": false,\n            \"summary\": {\n                \"type\": \"savings\",\n                \"monthly_grow\": 1704,\n                \"monthly_rules\": [\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                            \"name\": \"Monto fijo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                            \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_amount\",\n                        \"rule_amount\": 1665,\n                        \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                            \"name\": \"Desafío 52 semanas\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                            \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                            \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                        },\n                        \"rule_name\": \"rule_type_52_weeks\",\n                        \"rule_amount\": 39,\n                        \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                            \"name\": \"Placer culpable\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} en {description}\"\n                        },\n                        \"rule_name\": \"rule_type_guilty_pleasure\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                            \"name\": \"Redondear\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                            \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                            \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                        },\n                        \"rule_name\": \"rule_type_round_up\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_investment_returns\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                            \"name\": \"Porcentaje de sueldo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                            \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                            \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_salary\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                    }\n                ],\n                \"monthly_balance\": 26000,\n                \"monthly_savings_count\": 15,\n                \"monthly_projects_count\": 3\n            },\n            \"top_rules\": {\n                \"type\": \"list_rules\",\n                \"monthly_rules\": [\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                            \"name\": \"Monto fijo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                            \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_amount\",\n                        \"rule_amount\": 1665,\n                        \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                            \"name\": \"Desafío 52 semanas\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                            \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                            \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                        },\n                        \"rule_name\": \"rule_type_52_weeks\",\n                        \"rule_amount\": 39,\n                        \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                            \"name\": \"Placer culpable\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} en {description}\"\n                        },\n                        \"rule_name\": \"rule_type_guilty_pleasure\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                            \"name\": \"Redondear\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                            \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                            \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                        },\n                        \"rule_name\": \"rule_type_round_up\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_investment_returns\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                            \"name\": \"Porcentaje de sueldo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                            \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                            \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_salary\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                    }\n                ]\n            },\n            \"end_report\": {\n                \"type\": \"closing\",\n                \"month\": 4,\n                \"month_name\": \"abril\"\n            },\n            \"main_project\": {\n                \"type\": \"savings\",\n                \"monthly_balance\": 26000,\n                \"monthly_projects\": [\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Retorno de inversion\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    }\n                ],\n                \"monthly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"monthly\",\n                    \"type\": \"first_page\"\n                },\n                {\n                    \"page\": \"balance\",\n                    \"type\": \"growth_no_withdrawals\"\n                },\n                {\n                    \"page\": \"main_project\",\n                    \"type\": \"savings\"\n                },\n                {\n                    \"page\": \"total\",\n                    \"type\": \"growth\"\n                },\n                {\n                    \"page\": \"top_rules\",\n                    \"type\": \"list_rules\"\n                },\n                {\n                    \"page\": \"summary\",\n                    \"type\": \"savings\"\n                },\n                {\n                    \"page\": \"end_report\",\n                    \"type\": \"closing\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 4,\n        \"week\": 18,\n        \"day\": 30,\n        \"is_read\": false,\n        \"created_at\": \"2025-05-01T04:00:51.262678-06:00\",\n        \"updated_at\": \"2025-05-01T04:00:51.262687-06:00\",\n        \"report_type\": \"8ef9ddf5-c952-4235-a35e-3971bf738c6f\"\n    },\n    {\n        \"id\": \"03fcf3ca-9b52-4536-8c7e-32b3c7c90cfe\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"balance_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"year\": 2025,\n                \"month\": 4,\n                \"month_name\": \"abril\",\n                \"monthly_grow\": 1704,\n                \"monthly_saving\": 1704,\n                \"monthly_balance\": 26000,\n                \"monthly_withdrawal\": 0,\n                \"monthly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"balance_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 4,\n        \"week\": 18,\n        \"day\": 30,\n        \"is_read\": false,\n        \"created_at\": \"2025-05-01T04:00:54.583673-06:00\",\n        \"updated_at\": \"2025-05-01T04:00:54.583686-06:00\",\n        \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n    },\n    {\n        \"id\": \"ffc7303f-a4c1-48c2-9259-b85d21ae12f9\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_no_growth\",\n                \"weekly_grow\": 0,\n                \"weekly_saving\": 0,\n                \"weekly_balance\": 26000,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 0,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_no_growth\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 5,\n        \"week\": 19,\n        \"day\": 11,\n        \"is_read\": false,\n        \"created_at\": \"2025-05-12T04:00:34.909677-06:00\",\n        \"updated_at\": \"2025-05-12T04:00:34.909686-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"8a65686c-b098-4a4b-bb18-41eba99203d1\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_no_growth\",\n                \"weekly_grow\": 0,\n                \"weekly_saving\": 0,\n                \"weekly_balance\": 26000,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 0,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_no_growth\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 5,\n        \"week\": 18,\n        \"day\": 4,\n        \"is_read\": false,\n        \"created_at\": \"2025-05-05T04:00:46.932188-06:00\",\n        \"updated_at\": \"2025-05-05T04:00:46.932197-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"a6d1c0df-3d2b-4ab8-84c5-3ba46c7821dd\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"nothing_project_active_savings\",\n                \"weekly_grow\": 0,\n                \"weekly_saving\": 0,\n                \"weekly_balance\": 26000,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 0,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"nothing_project_active_savings\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 5,\n        \"week\": 18,\n        \"day\": 4,\n        \"is_read\": false,\n        \"created_at\": \"2025-05-05T04:00:47.657571-06:00\",\n        \"updated_at\": \"2025-05-05T04:00:47.657580-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"65c6f727-8589-4916-ad48-c15a03abbf86\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"nothing_project_active_savings\",\n                \"weekly_grow\": 0,\n                \"weekly_saving\": 0,\n                \"weekly_balance\": 26000,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 0,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"nothing_project_active_savings\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 5,\n        \"week\": 19,\n        \"day\": 11,\n        \"is_read\": false,\n        \"created_at\": \"2025-05-12T04:00:35.759401-06:00\",\n        \"updated_at\": \"2025-05-12T04:00:35.759408-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"f53e6da9-7ffc-4e6d-b6ba-b9ca37823002\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_no_growth\",\n                \"weekly_grow\": 0,\n                \"weekly_saving\": 0,\n                \"weekly_balance\": 26000,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 0,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_no_growth\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 5,\n        \"week\": 20,\n        \"day\": 18,\n        \"is_read\": false,\n        \"created_at\": \"2025-05-19T04:00:38.908701-06:00\",\n        \"updated_at\": \"2025-05-19T04:00:38.908708-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"a505b984-3e38-433f-9b73-60943df9413f\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"nothing_project_active_savings\",\n                \"weekly_grow\": 0,\n                \"weekly_saving\": 0,\n                \"weekly_balance\": 26000,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 0,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"nothing_project_active_savings\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 5,\n        \"week\": 20,\n        \"day\": 18,\n        \"is_read\": false,\n        \"created_at\": \"2025-05-19T04:00:39.619682-06:00\",\n        \"updated_at\": \"2025-05-19T04:00:39.619688-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"9c5b4b24-1736-4eaf-b246-689a4ce8d491\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_no_growth\",\n                \"weekly_grow\": 0,\n                \"weekly_saving\": 0,\n                \"weekly_balance\": 26000,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 0,\n                \"weekly_projects_count\": 3\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_no_growth\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 5,\n        \"week\": 21,\n        \"day\": 25,\n        \"is_read\": false,\n        \"created_at\": \"2025-05-26T04:00:38.050097-06:00\",\n        \"updated_at\": \"2025-05-26T04:00:38.050106-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"05f91afe-4b99-4089-9b56-ceea31624125\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"nothing_project_active_savings\",\n                \"weekly_grow\": 0,\n                \"weekly_saving\": 0,\n                \"weekly_balance\": 26000,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 0,\n                \"weekly_projects_count\": 3\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"nothing_project_active_savings\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 5,\n        \"week\": 21,\n        \"day\": 25,\n        \"is_read\": false,\n        \"created_at\": \"2025-05-26T04:00:38.760354-06:00\",\n        \"updated_at\": \"2025-05-26T04:00:38.760362-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"10d803e0-6d81-4543-8250-db95fdd3c6aa\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"total\": {\n                \"type\": \"growth\",\n                \"monthly_balance\": 170000,\n                \"monthly_projects\": [\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"meta para ahorra pasajes\",\n                        \"project_progress\": 900,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"6c25b47d-480e-4043-9e84-32bf7567fad5\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"9254bb18-a58e-46eb-8b34-08ab6a37ed67\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"c8209e43-b970-4643-96d6-854ba906a2e1\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Retorno de inversion\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n                        \"category_id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                            \"name\": \"Xerpa +\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"\",\n                            \"order\": 0,\n                            \"active\": false,\n                            \"short_name\": \"PROJECT_TYPE_PLUS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"d82400e4-171d-44c0-9cda-0ed84d3491a6\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"87e96079-2bf6-4dd2-8c26-e1996cad88c8\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": null,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    }\n                ],\n                \"monthly_projects_count\": 20\n            },\n            \"balance\": {\n                \"type\": \"growth_with_withdrawals\",\n                \"monthly_grow\": 247852,\n                \"monthly_saving\": 258852,\n                \"monthly_balance\": 170000,\n                \"monthly_withdrawal\": 11000,\n                \"monthly_projects_count\": 20\n            },\n            \"monthly\": {\n                \"type\": \"first_page\",\n                \"year\": 2025,\n                \"month\": 5,\n                \"month_name\": \"mayo\"\n            },\n            \"no_show\": false,\n            \"summary\": {\n                \"type\": \"savings\",\n                \"monthly_grow\": 247852,\n                \"monthly_rules\": [\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                            \"name\": \"Porcentaje de sueldo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                            \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                            \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_salary\",\n                        \"rule_amount\": 250000,\n                        \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                            \"name\": \"Monto fijo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                            \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_amount\",\n                        \"rule_amount\": 6660,\n                        \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                            \"name\": \"Redondear\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                            \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                            \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                        },\n                        \"rule_name\": \"rule_type_round_up\",\n                        \"rule_amount\": 1654,\n                        \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                            \"name\": \"Desafío 52 semanas\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                            \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                            \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                        },\n                        \"rule_name\": \"rule_type_52_weeks\",\n                        \"rule_amount\": 228,\n                        \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                            \"name\": \"Placer culpable\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} en {description}\"\n                        },\n                        \"rule_name\": \"rule_type_guilty_pleasure\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                        },\n                        \"rule_name\": \"rule_type_internal_transfer\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"3665326e-994b-4706-a705-f8356d2b4a47\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_readjustments\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_investment_returns\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                            \"name\": \"Pasion futbolera\",\n                            \"color\": \"#7C2582\",\n                            \"active\": false,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_SOCCER\",\n                            \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                        },\n                        \"rule_name\": \"rule_type_soccer\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n                    }\n                ],\n                \"monthly_balance\": 170000,\n                \"monthly_savings_count\": 55,\n                \"monthly_projects_count\": 20\n            },\n            \"top_rules\": {\n                \"type\": \"list_rules\",\n                \"monthly_rules\": [\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                            \"name\": \"Porcentaje de sueldo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                            \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                            \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_salary\",\n                        \"rule_amount\": 250000,\n                        \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                            \"name\": \"Monto fijo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                            \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_amount\",\n                        \"rule_amount\": 6660,\n                        \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                            \"name\": \"Redondear\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                            \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                            \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                        },\n                        \"rule_name\": \"rule_type_round_up\",\n                        \"rule_amount\": 1654,\n                        \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                            \"name\": \"Desafío 52 semanas\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                            \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                            \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                        },\n                        \"rule_name\": \"rule_type_52_weeks\",\n                        \"rule_amount\": 228,\n                        \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                            \"name\": \"Placer culpable\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} en {description}\"\n                        },\n                        \"rule_name\": \"rule_type_guilty_pleasure\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                        },\n                        \"rule_name\": \"rule_type_internal_transfer\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"3665326e-994b-4706-a705-f8356d2b4a47\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_readjustments\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_investment_returns\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                            \"name\": \"Pasion futbolera\",\n                            \"color\": \"#7C2582\",\n                            \"active\": false,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_SOCCER\",\n                            \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                        },\n                        \"rule_name\": \"rule_type_soccer\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n                    }\n                ]\n            },\n            \"end_report\": {\n                \"type\": \"closing\",\n                \"month\": 5,\n                \"month_name\": \"mayo\"\n            },\n            \"main_project\": {\n                \"type\": \"savings\",\n                \"monthly_balance\": 170000,\n                \"monthly_projects\": [\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"meta para ahorra pasajes\",\n                        \"project_progress\": 900,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"6c25b47d-480e-4043-9e84-32bf7567fad5\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"9254bb18-a58e-46eb-8b34-08ab6a37ed67\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"c8209e43-b970-4643-96d6-854ba906a2e1\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Retorno de inversion\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n                        \"category_id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                            \"name\": \"Xerpa +\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"\",\n                            \"order\": 0,\n                            \"active\": false,\n                            \"short_name\": \"PROJECT_TYPE_PLUS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"d82400e4-171d-44c0-9cda-0ed84d3491a6\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"87e96079-2bf6-4dd2-8c26-e1996cad88c8\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": null,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    }\n                ],\n                \"monthly_projects_count\": 20\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"monthly\",\n                    \"type\": \"first_page\"\n                },\n                {\n                    \"page\": \"balance\",\n                    \"type\": \"growth_with_withdrawals\"\n                },\n                {\n                    \"page\": \"main_project\",\n                    \"type\": \"savings\"\n                },\n                {\n                    \"page\": \"total\",\n                    \"type\": \"growth\"\n                },\n                {\n                    \"page\": \"top_rules\",\n                    \"type\": \"list_rules\"\n                },\n                {\n                    \"page\": \"summary\",\n                    \"type\": \"savings\"\n                },\n                {\n                    \"page\": \"end_report\",\n                    \"type\": \"closing\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 5,\n        \"week\": 22,\n        \"day\": 31,\n        \"is_read\": false,\n        \"created_at\": \"2025-06-01T04:00:42.549194-06:00\",\n        \"updated_at\": \"2025-06-01T04:00:42.549203-06:00\",\n        \"report_type\": \"8ef9ddf5-c952-4235-a35e-3971bf738c6f\"\n    },\n    {\n        \"id\": \"5140c84d-5083-4ad5-afe4-84f6eb7fbb9d\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"balance_short\": {\n                \"type\": \"growth_with_withdrawals\",\n                \"year\": 2025,\n                \"month\": 5,\n                \"month_name\": \"mayo\",\n                \"monthly_grow\": 247852,\n                \"monthly_saving\": 258852,\n                \"monthly_balance\": 170000,\n                \"monthly_withdrawal\": 11000,\n                \"monthly_projects_count\": 20\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"balance_short\",\n                    \"type\": \"growth_with_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 5,\n        \"week\": 22,\n        \"day\": 31,\n        \"is_read\": false,\n        \"created_at\": \"2025-06-01T04:00:46.084495-06:00\",\n        \"updated_at\": \"2025-06-01T04:00:46.084502-06:00\",\n        \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n    },\n    {\n        \"id\": \"79767798-fd0c-4da6-8e4c-8faebf2202de\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth\",\n                \"weekly_grow\": 247852,\n                \"weekly_saving\": 258852,\n                \"weekly_balance\": 170000,\n                \"weekly_withdrawal\": 11000,\n                \"weekly_savings_count\": 55,\n                \"weekly_projects_count\": 20\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 6,\n        \"week\": 22,\n        \"day\": 1,\n        \"is_read\": false,\n        \"created_at\": \"2025-06-02T04:00:41.418033-06:00\",\n        \"updated_at\": \"2025-06-02T04:00:41.418041-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"4f776d1d-9894-49b2-a73a-4e982936799e\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_with_withdrawals\",\n                \"weekly_grow\": 247852,\n                \"weekly_saving\": 258852,\n                \"weekly_balance\": 170000,\n                \"weekly_withdrawal\": 11000,\n                \"weekly_savings_count\": 55,\n                \"weekly_projects_count\": 20\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_with_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 6,\n        \"week\": 22,\n        \"day\": 1,\n        \"is_read\": false,\n        \"created_at\": \"2025-06-02T04:00:43.046289-06:00\",\n        \"updated_at\": \"2025-06-02T04:00:43.046301-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"81493d80-711f-49af-928b-a98b19bca2c7\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth\",\n                \"weekly_grow\": 155,\n                \"weekly_saving\": 255,\n                \"weekly_balance\": 197000,\n                \"weekly_withdrawal\": 100,\n                \"weekly_savings_count\": 2,\n                \"weekly_projects_count\": 23\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 6,\n        \"week\": 23,\n        \"day\": 8,\n        \"is_read\": false,\n        \"created_at\": \"2025-06-09T04:00:44.731788-06:00\",\n        \"updated_at\": \"2025-06-09T04:00:44.731798-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"e4a4965d-a6ca-4483-8cfb-746dbf6a6497\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_with_withdrawals\",\n                \"weekly_grow\": 155,\n                \"weekly_saving\": 255,\n                \"weekly_balance\": 197000,\n                \"weekly_withdrawal\": 100,\n                \"weekly_savings_count\": 2,\n                \"weekly_projects_count\": 23\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_with_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 6,\n        \"week\": 23,\n        \"day\": 8,\n        \"is_read\": false,\n        \"created_at\": \"2025-06-09T04:00:46.246548-06:00\",\n        \"updated_at\": \"2025-06-09T04:00:46.246555-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"a1d39330-83b2-407d-9e55-c1a365895f31\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 10053,\n                \"weekly_saving\": 10053,\n                \"weekly_balance\": 199057,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 32,\n                \"weekly_projects_count\": 23\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 6,\n        \"week\": 24,\n        \"day\": 15,\n        \"is_read\": false,\n        \"created_at\": \"2025-06-16T04:00:40.931622-06:00\",\n        \"updated_at\": \"2025-06-16T04:00:40.931628-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"0934bf85-4938-4cf2-a2e2-5438cafaa49a\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 4732,\n                \"weekly_saving\": 4732,\n                \"weekly_balance\": 198937,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 14,\n                \"weekly_projects_count\": 23\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 6,\n        \"week\": 26,\n        \"day\": 29,\n        \"is_read\": false,\n        \"created_at\": \"2025-06-30T04:00:40.735401-06:00\",\n        \"updated_at\": \"2025-06-30T04:00:40.735408-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"773c8cb0-3bb9-4743-8877-6c76ec3173bb\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 10053,\n                \"weekly_saving\": 10053,\n                \"weekly_balance\": 199057,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 32,\n                \"weekly_projects_count\": 23\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 6,\n        \"week\": 24,\n        \"day\": 15,\n        \"is_read\": false,\n        \"created_at\": \"2025-06-16T04:00:42.736548-06:00\",\n        \"updated_at\": \"2025-06-16T04:00:42.736554-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"f758042d-bd96-4884-950f-5b1d8cd07f6c\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 4721,\n                \"weekly_saving\": 4721,\n                \"weekly_balance\": 199734,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 14,\n                \"weekly_projects_count\": 23\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 6,\n        \"week\": 25,\n        \"day\": 22,\n        \"is_read\": false,\n        \"created_at\": \"2025-06-23T04:00:36.497481-06:00\",\n        \"updated_at\": \"2025-06-23T04:00:36.497487-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"103cd569-a788-4ac0-b10a-dacb71aa9782\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 4721,\n                \"weekly_saving\": 4721,\n                \"weekly_balance\": 199734,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 14,\n                \"weekly_projects_count\": 23\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 6,\n        \"week\": 25,\n        \"day\": 22,\n        \"is_read\": false,\n        \"created_at\": \"2025-06-23T04:00:37.946782-06:00\",\n        \"updated_at\": \"2025-06-23T04:00:37.946789-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"9717237e-5946-43dc-8b79-067a1a16c8e4\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 4732,\n                \"weekly_saving\": 4732,\n                \"weekly_balance\": 198937,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 14,\n                \"weekly_projects_count\": 23\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 6,\n        \"week\": 26,\n        \"day\": 29,\n        \"is_read\": false,\n        \"created_at\": \"2025-06-30T04:00:39.045048-06:00\",\n        \"updated_at\": \"2025-06-30T04:00:39.045058-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"46e01432-4c79-434d-b3b5-bbb3285704f3\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"total\": {\n                \"type\": \"growth\",\n                \"monthly_balance\": 197808,\n                \"monthly_projects\": [\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"meta para ahorra pasajes\",\n                        \"project_progress\": 900,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9555,\n                        \"project_id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 47.77,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9253,\n                        \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 46.26,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"09029550-2885-4ac0-9fda-b7cef9d55776\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"6c25b47d-480e-4043-9e84-32bf7567fad5\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"7098e250-bdc9-445e-aca9-e55bbb8200ce\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"7128da5f-616b-4500-9d51-23eb185e8975\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"9254bb18-a58e-46eb-8b34-08ab6a37ed67\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"c8209e43-b970-4643-96d6-854ba906a2e1\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Retorno de inversion\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n                        \"category_id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                            \"name\": \"Xerpa +\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"\",\n                            \"order\": 0,\n                            \"active\": false,\n                            \"short_name\": \"PROJECT_TYPE_PLUS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"d82400e4-171d-44c0-9cda-0ed84d3491a6\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"87e96079-2bf6-4dd2-8c26-e1996cad88c8\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": null,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    }\n                ],\n                \"monthly_projects_count\": 23\n            },\n            \"balance\": {\n                \"type\": \"growth_with_withdrawals\",\n                \"monthly_grow\": 20266,\n                \"monthly_saving\": 20366,\n                \"monthly_balance\": 197808,\n                \"monthly_withdrawal\": 100,\n                \"monthly_projects_count\": 23\n            },\n            \"monthly\": {\n                \"type\": \"first_page\",\n                \"year\": 2025,\n                \"month\": 6,\n                \"month_name\": \"junio\"\n            },\n            \"no_show\": false,\n            \"summary\": {\n                \"type\": \"savings\",\n                \"monthly_grow\": 20266,\n                \"monthly_rules\": [\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                            \"name\": \"Monto fijo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                            \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_amount\",\n                        \"rule_amount\": 19869,\n                        \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                            \"name\": \"Desafío 52 semanas\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                            \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                            \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                        },\n                        \"rule_name\": \"rule_type_52_weeks\",\n                        \"rule_amount\": 242,\n                        \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                        },\n                        \"rule_name\": \"rule_type_internal_transfer\",\n                        \"rule_amount\": 100,\n                        \"rule_type_id\": \"3665326e-994b-4706-a705-f8356d2b4a47\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                            \"name\": \"Placer culpable\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} en {description}\"\n                        },\n                        \"rule_name\": \"rule_type_guilty_pleasure\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                            \"name\": \"Redondear\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                            \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                            \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                        },\n                        \"rule_name\": \"rule_type_round_up\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_readjustments\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_investment_returns\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                            \"name\": \"Pasion futbolera\",\n                            \"color\": \"#7C2582\",\n                            \"active\": false,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_SOCCER\",\n                            \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                        },\n                        \"rule_name\": \"rule_type_soccer\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                            \"name\": \"Porcentaje de sueldo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                            \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                            \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_salary\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                    }\n                ],\n                \"monthly_balance\": 197808,\n                \"monthly_savings_count\": 63,\n                \"monthly_projects_count\": 23\n            },\n            \"top_rules\": {\n                \"type\": \"list_rules\",\n                \"monthly_rules\": [\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                            \"name\": \"Monto fijo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                            \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_amount\",\n                        \"rule_amount\": 19869,\n                        \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                            \"name\": \"Desafío 52 semanas\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                            \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                            \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                        },\n                        \"rule_name\": \"rule_type_52_weeks\",\n                        \"rule_amount\": 242,\n                        \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                        },\n                        \"rule_name\": \"rule_type_internal_transfer\",\n                        \"rule_amount\": 100,\n                        \"rule_type_id\": \"3665326e-994b-4706-a705-f8356d2b4a47\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                            \"name\": \"Placer culpable\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} en {description}\"\n                        },\n                        \"rule_name\": \"rule_type_guilty_pleasure\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                            \"name\": \"Redondear\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                            \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                            \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                        },\n                        \"rule_name\": \"rule_type_round_up\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_readjustments\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_investment_returns\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                            \"name\": \"Pasion futbolera\",\n                            \"color\": \"#7C2582\",\n                            \"active\": false,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_SOCCER\",\n                            \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                        },\n                        \"rule_name\": \"rule_type_soccer\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                            \"name\": \"Porcentaje de sueldo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                            \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                            \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_salary\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                    }\n                ]\n            },\n            \"end_report\": {\n                \"type\": \"closing\",\n                \"month\": 6,\n                \"month_name\": \"junio\"\n            },\n            \"main_project\": {\n                \"type\": \"savings\",\n                \"monthly_balance\": 197808,\n                \"monthly_projects\": [\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"meta para ahorra pasajes\",\n                        \"project_progress\": 900,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9555,\n                        \"project_id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 47.77,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9253,\n                        \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 46.26,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"09029550-2885-4ac0-9fda-b7cef9d55776\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"6c25b47d-480e-4043-9e84-32bf7567fad5\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"7098e250-bdc9-445e-aca9-e55bbb8200ce\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"7128da5f-616b-4500-9d51-23eb185e8975\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"9254bb18-a58e-46eb-8b34-08ab6a37ed67\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"c8209e43-b970-4643-96d6-854ba906a2e1\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Retorno de inversion\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n                        \"category_id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                            \"name\": \"Xerpa +\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"\",\n                            \"order\": 0,\n                            \"active\": false,\n                            \"short_name\": \"PROJECT_TYPE_PLUS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"d82400e4-171d-44c0-9cda-0ed84d3491a6\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"87e96079-2bf6-4dd2-8c26-e1996cad88c8\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": null,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    }\n                ],\n                \"monthly_projects_count\": 23\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"monthly\",\n                    \"type\": \"first_page\"\n                },\n                {\n                    \"page\": \"balance\",\n                    \"type\": \"growth_with_withdrawals\"\n                },\n                {\n                    \"page\": \"main_project\",\n                    \"type\": \"savings\"\n                },\n                {\n                    \"page\": \"total\",\n                    \"type\": \"growth\"\n                },\n                {\n                    \"page\": \"top_rules\",\n                    \"type\": \"list_rules\"\n                },\n                {\n                    \"page\": \"summary\",\n                    \"type\": \"savings\"\n                },\n                {\n                    \"page\": \"end_report\",\n                    \"type\": \"closing\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 6,\n        \"week\": 27,\n        \"day\": 30,\n        \"is_read\": false,\n        \"created_at\": \"2025-07-01T04:00:38.660584-06:00\",\n        \"updated_at\": \"2025-07-01T04:00:38.660590-06:00\",\n        \"report_type\": \"8ef9ddf5-c952-4235-a35e-3971bf738c6f\"\n    },\n    {\n        \"id\": \"46899d76-27dd-4197-8975-9e8636885a1f\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"balance_short\": {\n                \"type\": \"growth_with_withdrawals\",\n                \"year\": 2025,\n                \"month\": 6,\n                \"month_name\": \"junio\",\n                \"monthly_grow\": 20266,\n                \"monthly_saving\": 20366,\n                \"monthly_balance\": 197808,\n                \"monthly_withdrawal\": 100,\n                \"monthly_projects_count\": 23\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"balance_short\",\n                    \"type\": \"growth_with_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 6,\n        \"week\": 27,\n        \"day\": 30,\n        \"is_read\": false,\n        \"created_at\": \"2025-07-01T04:00:42.773450-06:00\",\n        \"updated_at\": \"2025-07-01T04:00:42.773456-06:00\",\n        \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n    },\n    {\n        \"id\": \"d7f759c5-9959-44a2-b226-5a2fce784db9\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 4743,\n                \"weekly_saving\": 4743,\n                \"weekly_balance\": 201088,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 14,\n                \"weekly_projects_count\": 23\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 7,\n        \"week\": 27,\n        \"day\": 6,\n        \"is_read\": false,\n        \"created_at\": \"2025-07-07T04:00:34.900692-06:00\",\n        \"updated_at\": \"2025-07-07T04:00:34.900698-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"bd7613de-17df-4197-8cad-16cee9f22918\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 4743,\n                \"weekly_saving\": 4743,\n                \"weekly_balance\": 201088,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 14,\n                \"weekly_projects_count\": 23\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 7,\n        \"week\": 27,\n        \"day\": 6,\n        \"is_read\": false,\n        \"created_at\": \"2025-07-07T04:00:36.244510-06:00\",\n        \"updated_at\": \"2025-07-07T04:00:36.244516-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"48dddc79-692a-47cc-9dbe-fcedd7469473\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 4754,\n                \"weekly_saving\": 4754,\n                \"weekly_balance\": 205853,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 14,\n                \"weekly_projects_count\": 23\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 7,\n        \"week\": 28,\n        \"day\": 13,\n        \"is_read\": false,\n        \"created_at\": \"2025-07-14T04:00:37.161576-06:00\",\n        \"updated_at\": \"2025-07-14T04:00:37.161586-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"d2254c68-9d54-4444-9e1a-f261ddbc9c2a\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 4754,\n                \"weekly_saving\": 4754,\n                \"weekly_balance\": 205853,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 14,\n                \"weekly_projects_count\": 23\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 7,\n        \"week\": 28,\n        \"day\": 13,\n        \"is_read\": false,\n        \"created_at\": \"2025-07-14T04:00:38.731518-06:00\",\n        \"updated_at\": \"2025-07-14T04:00:38.731525-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"00590c8b-f776-4127-a697-1273690137d1\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 7318,\n                \"weekly_saving\": 7318,\n                \"weekly_balance\": 201110,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 13,\n                \"weekly_projects_count\": 23\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 7,\n        \"week\": 29,\n        \"day\": 20,\n        \"is_read\": false,\n        \"created_at\": \"2025-07-21T04:00:32.605031-06:00\",\n        \"updated_at\": \"2025-07-21T04:00:32.605040-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"ec4ac15d-dab5-40fa-bd47-6d619436c24f\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 7318,\n                \"weekly_saving\": 7318,\n                \"weekly_balance\": 201110,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 13,\n                \"weekly_projects_count\": 23\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 7,\n        \"week\": 29,\n        \"day\": 20,\n        \"is_read\": false,\n        \"created_at\": \"2025-07-21T04:00:33.876436-06:00\",\n        \"updated_at\": \"2025-07-21T04:00:33.876442-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"dc690757-9fa7-4172-9f85-f7b9f2bc6d9d\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"total\": {\n                \"type\": \"growth\",\n                \"monthly_balance\": 197000,\n                \"monthly_projects\": [\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"meta para ahorra pasajes\",\n                        \"project_progress\": 900,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"09029550-2885-4ac0-9fda-b7cef9d55776\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"6c25b47d-480e-4043-9e84-32bf7567fad5\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"7098e250-bdc9-445e-aca9-e55bbb8200ce\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"7128da5f-616b-4500-9d51-23eb185e8975\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"9254bb18-a58e-46eb-8b34-08ab6a37ed67\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"c8209e43-b970-4643-96d6-854ba906a2e1\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Retorno de inversion\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n                        \"category_id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                            \"name\": \"Xerpa +\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"\",\n                            \"order\": 0,\n                            \"active\": false,\n                            \"short_name\": \"PROJECT_TYPE_PLUS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"d82400e4-171d-44c0-9cda-0ed84d3491a6\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"87e96079-2bf6-4dd2-8c26-e1996cad88c8\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": null,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    }\n                ],\n                \"monthly_projects_count\": 23\n            },\n            \"balance\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"monthly_grow\": 18433,\n                \"monthly_saving\": 18433,\n                \"monthly_balance\": 197000,\n                \"monthly_withdrawal\": 0,\n                \"monthly_projects_count\": 23\n            },\n            \"monthly\": {\n                \"type\": \"first_page\",\n                \"year\": 2025,\n                \"month\": 7,\n                \"month_name\": \"julio\"\n            },\n            \"no_show\": false,\n            \"summary\": {\n                \"type\": \"savings\",\n                \"monthly_grow\": 18433,\n                \"monthly_rules\": [\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                            \"name\": \"Monto fijo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                            \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_amount\",\n                        \"rule_amount\": 14763,\n                        \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                            \"name\": \"Desafío 52 semanas\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                            \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                            \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                        },\n                        \"rule_name\": \"rule_type_52_weeks\",\n                        \"rule_amount\": 340,\n                        \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                            \"name\": \"Placer culpable\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} en {description}\"\n                        },\n                        \"rule_name\": \"rule_type_guilty_pleasure\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                        },\n                        \"rule_name\": \"rule_type_internal_transfer\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"3665326e-994b-4706-a705-f8356d2b4a47\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                            \"name\": \"Redondear\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                            \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                            \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                        },\n                        \"rule_name\": \"rule_type_round_up\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_readjustments\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_investment_returns\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                            \"name\": \"Pasion futbolera\",\n                            \"color\": \"#7C2582\",\n                            \"active\": false,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_SOCCER\",\n                            \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                        },\n                        \"rule_name\": \"rule_type_soccer\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                            \"name\": \"Porcentaje de sueldo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                            \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                            \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_salary\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                    }\n                ],\n                \"monthly_balance\": 197000,\n                \"monthly_savings_count\": 47,\n                \"monthly_projects_count\": 23\n            },\n            \"top_rules\": {\n                \"type\": \"list_rules\",\n                \"monthly_rules\": [\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                            \"name\": \"Monto fijo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                            \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_amount\",\n                        \"rule_amount\": 14763,\n                        \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                            \"name\": \"Desafío 52 semanas\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                            \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                            \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                        },\n                        \"rule_name\": \"rule_type_52_weeks\",\n                        \"rule_amount\": 340,\n                        \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                            \"name\": \"Placer culpable\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} en {description}\"\n                        },\n                        \"rule_name\": \"rule_type_guilty_pleasure\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                        },\n                        \"rule_name\": \"rule_type_internal_transfer\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"3665326e-994b-4706-a705-f8356d2b4a47\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                            \"name\": \"Redondear\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                            \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                            \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                        },\n                        \"rule_name\": \"rule_type_round_up\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_readjustments\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_investment_returns\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                            \"name\": \"Pasion futbolera\",\n                            \"color\": \"#7C2582\",\n                            \"active\": false,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_SOCCER\",\n                            \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                        },\n                        \"rule_name\": \"rule_type_soccer\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                            \"name\": \"Porcentaje de sueldo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                            \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                            \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_salary\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                    }\n                ]\n            },\n            \"end_report\": {\n                \"type\": \"closing\",\n                \"month\": 7,\n                \"month_name\": \"julio\"\n            },\n            \"main_project\": {\n                \"type\": \"savings\",\n                \"monthly_balance\": 197000,\n                \"monthly_projects\": [\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"meta para ahorra pasajes\",\n                        \"project_progress\": 900,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"09029550-2885-4ac0-9fda-b7cef9d55776\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"6c25b47d-480e-4043-9e84-32bf7567fad5\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"7098e250-bdc9-445e-aca9-e55bbb8200ce\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"7128da5f-616b-4500-9d51-23eb185e8975\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"9254bb18-a58e-46eb-8b34-08ab6a37ed67\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"c8209e43-b970-4643-96d6-854ba906a2e1\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Retorno de inversion\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n                        \"category_id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                            \"name\": \"Xerpa +\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"\",\n                            \"order\": 0,\n                            \"active\": false,\n                            \"short_name\": \"PROJECT_TYPE_PLUS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"d82400e4-171d-44c0-9cda-0ed84d3491a6\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"87e96079-2bf6-4dd2-8c26-e1996cad88c8\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": null,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    }\n                ],\n                \"monthly_projects_count\": 23\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"monthly\",\n                    \"type\": \"first_page\"\n                },\n                {\n                    \"page\": \"balance\",\n                    \"type\": \"growth_no_withdrawals\"\n                },\n                {\n                    \"page\": \"main_project\",\n                    \"type\": \"savings\"\n                },\n                {\n                    \"page\": \"total\",\n                    \"type\": \"growth\"\n                },\n                {\n                    \"page\": \"top_rules\",\n                    \"type\": \"list_rules\"\n                },\n                {\n                    \"page\": \"summary\",\n                    \"type\": \"savings\"\n                },\n                {\n                    \"page\": \"end_report\",\n                    \"type\": \"closing\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 7,\n        \"week\": 31,\n        \"day\": 31,\n        \"is_read\": false,\n        \"created_at\": \"2025-08-01T20:27:29.517569-06:00\",\n        \"updated_at\": \"2025-08-01T20:27:29.517575-06:00\",\n        \"report_type\": \"8ef9ddf5-c952-4235-a35e-3971bf738c6f\"\n    },\n    {\n        \"id\": \"d294a409-c5c5-4793-940d-e8491e7157b6\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 666,\n                \"weekly_saving\": 666,\n                \"weekly_balance\": 197666,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 2,\n                \"weekly_projects_count\": 23\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 8,\n        \"week\": 33,\n        \"day\": 17,\n        \"is_read\": false,\n        \"created_at\": \"2025-08-18T07:24:39.015301-06:00\",\n        \"updated_at\": \"2025-08-18T07:24:39.015307-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"600d3721-bfed-4167-8ee3-89303f16cf5c\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 3996,\n                \"weekly_saving\": 3996,\n                \"weekly_balance\": 201662,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 12,\n                \"weekly_projects_count\": 23\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 8,\n        \"week\": 34,\n        \"day\": 24,\n        \"is_read\": false,\n        \"created_at\": \"2025-08-25T04:00:36.203559-06:00\",\n        \"updated_at\": \"2025-08-25T04:00:36.203565-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"7bb0ff99-1fa2-4292-82ad-59ae7df587bd\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 3996,\n                \"weekly_saving\": 3996,\n                \"weekly_balance\": 201662,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 12,\n                \"weekly_projects_count\": 23\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 8,\n        \"week\": 34,\n        \"day\": 24,\n        \"is_read\": false,\n        \"created_at\": \"2025-08-25T04:00:37.179717-06:00\",\n        \"updated_at\": \"2025-08-25T04:00:37.179724-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"1588d808-e3a4-4266-a00c-822ff3000a8a\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"total\": {\n                \"type\": \"growth\",\n                \"monthly_balance\": 206608,\n                \"monthly_projects\": [\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"meta para ahorra pasajes\",\n                        \"project_progress\": 900,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 16900,\n                        \"project_id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 84.5,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 10704,\n                        \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 53.52,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"09029550-2885-4ac0-9fda-b7cef9d55776\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"6c25b47d-480e-4043-9e84-32bf7567fad5\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"7098e250-bdc9-445e-aca9-e55bbb8200ce\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"7128da5f-616b-4500-9d51-23eb185e8975\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"9254bb18-a58e-46eb-8b34-08ab6a37ed67\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"c8209e43-b970-4643-96d6-854ba906a2e1\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Retorno de inversion\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n                        \"category_id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                            \"name\": \"Xerpa +\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"\",\n                            \"order\": 0,\n                            \"active\": false,\n                            \"short_name\": \"PROJECT_TYPE_PLUS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"d82400e4-171d-44c0-9cda-0ed84d3491a6\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"87e96079-2bf6-4dd2-8c26-e1996cad88c8\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": null,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 4,\n                        \"project_id\": \"9c183ea2-d7ac-4a01-a369-12844706c264\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"final\",\n                        \"project_progress\": null,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    }\n                ],\n                \"monthly_projects_count\": 24\n            },\n            \"balance\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"monthly_grow\": 10940,\n                \"monthly_saving\": 10940,\n                \"monthly_balance\": 206608,\n                \"monthly_withdrawal\": 0,\n                \"monthly_projects_count\": 24\n            },\n            \"monthly\": {\n                \"type\": \"first_page\",\n                \"year\": 2025,\n                \"month\": 8,\n                \"month_name\": \"agosto\"\n            },\n            \"no_show\": false,\n            \"summary\": {\n                \"type\": \"savings\",\n                \"monthly_grow\": 10940,\n                \"monthly_rules\": [\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                            \"name\": \"Monto fijo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                            \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_amount\",\n                        \"rule_amount\": 9661,\n                        \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                            \"name\": \"Desafío 52 semanas\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                            \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                            \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                        },\n                        \"rule_name\": \"rule_type_52_weeks\",\n                        \"rule_amount\": 169,\n                        \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                            \"name\": \"Placer culpable\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} en {description}\"\n                        },\n                        \"rule_name\": \"rule_type_guilty_pleasure\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                        },\n                        \"rule_name\": \"rule_type_internal_transfer\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"3665326e-994b-4706-a705-f8356d2b4a47\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                            \"name\": \"Redondear\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                            \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                            \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                        },\n                        \"rule_name\": \"rule_type_round_up\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_readjustments\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_investment_returns\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                            \"name\": \"Pasion futbolera\",\n                            \"color\": \"#7C2582\",\n                            \"active\": false,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_SOCCER\",\n                            \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                        },\n                        \"rule_name\": \"rule_type_soccer\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                            \"name\": \"Porcentaje de sueldo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                            \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                            \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_salary\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                    }\n                ],\n                \"monthly_balance\": 206608,\n                \"monthly_savings_count\": 37,\n                \"monthly_projects_count\": 24\n            },\n            \"top_rules\": {\n                \"type\": \"list_rules\",\n                \"monthly_rules\": [\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                            \"name\": \"Monto fijo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                            \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_amount\",\n                        \"rule_amount\": 9661,\n                        \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                            \"name\": \"Desafío 52 semanas\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                            \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                            \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                        },\n                        \"rule_name\": \"rule_type_52_weeks\",\n                        \"rule_amount\": 169,\n                        \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                            \"name\": \"Placer culpable\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                            \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} en {description}\"\n                        },\n                        \"rule_name\": \"rule_type_guilty_pleasure\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/manual_saving.svg\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_TYPE_INTERNAL_TRANSFER\"\n                        },\n                        \"rule_name\": \"rule_type_internal_transfer\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"3665326e-994b-4706-a705-f8356d2b4a47\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/redondear.svg\",\n                            \"name\": \"Redondear\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/redondear_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_ROUND_UP\",\n                            \"description\": \"Redondea tus compras hacia los $10 superiores y ahorra el cambio\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/redondear_circle.svg\",\n                            \"frequency_description\": \"Redondear hacia {amount} superior {description}\"\n                        },\n                        \"rule_name\": \"rule_type_round_up\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"632f7dd2-4bac-4a64-86e4-72d06ca2bd65\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_readjustments\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"7a4e9654-cfeb-49ae-b14a-18b29a2622f0\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"name\": \"Regla rendimientos de inversión\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"short_name\": \"RULE_INVESTMENT_RETURNS\",\n                            \"description\": \"Ahorros generados por rendimimientos de inversión\",\n                            \"frequency_description\": \"\"\n                        },\n                        \"rule_name\": \"rule_type_investment_returns\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a12fd798-e5d2-4040-8717-81f012e2f626\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                            \"name\": \"Pasion futbolera\",\n                            \"color\": \"#7C2582\",\n                            \"active\": false,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_SOCCER\",\n                            \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                            \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                        },\n                        \"rule_name\": \"rule_type_soccer\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n                    },\n                    {\n                        \"metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo.svg\",\n                            \"name\": \"Porcentaje de sueldo\",\n                            \"color\": \"#7C2582\",\n                            \"active\": true,\n                            \"icon_pause\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_pausa.svg\",\n                            \"short_name\": \"RULE_TYPE_FIXED_SALARY\",\n                            \"description\": \"Ahorra un porcentaje a tu meta cada vez que recibes tu salario.\",\n                            \"icon_primary\": \"/assets/xerpa/global/img/rules/porcentaje_sueldo_circle.svg\",\n                            \"frequency_description\": \"Ahorra un {description} % cada vez que recibas tu salario\"\n                        },\n                        \"rule_name\": \"rule_type_fixed_salary\",\n                        \"rule_amount\": 0,\n                        \"rule_type_id\": \"ace352d9-1fb3-4b1e-9732-1f77b3a9540f\"\n                    }\n                ]\n            },\n            \"end_report\": {\n                \"type\": \"closing\",\n                \"month\": 8,\n                \"month_name\": \"agosto\"\n            },\n            \"main_project\": {\n                \"type\": \"savings\",\n                \"monthly_balance\": 206608,\n                \"monthly_projects\": [\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"d7f44ee7-ac54-47ad-a4d0-05d3c41b53cc\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"meta para ahorra pasajes\",\n                        \"project_progress\": 900,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 16900,\n                        \"project_id\": \"dd38659c-f4ec-453b-bdf0-a68ad5b8eb27\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 84.5,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 10704,\n                        \"project_id\": \"3038ab0f-9e0c-42d0-9515-49203f25689f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 53.52,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"09029550-2885-4ac0-9fda-b7cef9d55776\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"6c25b47d-480e-4043-9e84-32bf7567fad5\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"7098e250-bdc9-445e-aca9-e55bbb8200ce\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"7128da5f-616b-4500-9d51-23eb185e8975\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"78f62645-0001-4775-b067-3c5657ff40c2\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Meta Viaje\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"9216017f-c6a5-4175-aa99-e8d0a6213ae7\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"9254bb18-a58e-46eb-8b34-08ab6a37ed67\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"c8209e43-b970-4643-96d6-854ba906a2e1\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"ea51e10c-4abb-4b4e-a4e4-b378e8a56c3f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": 45,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"08ac341f-9030-4e42-bdaa-5b009b5480ef\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"0a1d5367-71da-4803-bb31-4af84d3852b8\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"3752189c-0d97-4c53-86d1-e442f38b600f\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Retorno de inversion\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"69631d9e-f868-4ae9-bac5-8ba52e932a85\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"73f6dbc5-66f2-4e18-964e-1be5442f249a\",\n                        \"category_id\": \"b933fa3d-447e-4242-be09-9e5c3b8e547f\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/xerpaplus.png\",\n                            \"name\": \"Xerpa +\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"\",\n                            \"order\": 0,\n                            \"active\": false,\n                            \"short_name\": \"PROJECT_TYPE_PLUS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"85b17e45-a888-402e-9b12-54b357221184\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Xerpa plus\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"86473d60-3c05-4403-adf6-7d8d490ec51e\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"9c962d30-4e85-4ebe-9a54-7c2c5a935033\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"c06f0fbe-5670-4f13-bd35-27c607d2ea17\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 8000,\n                        \"project_id\": \"d82400e4-171d-44c0-9cda-0ed84d3491a6\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a Irlanda 1 Finsus+\",\n                        \"project_progress\": 40,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 9000,\n                        \"project_id\": \"87e96079-2bf6-4dd2-8c26-e1996cad88c8\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"Viaje a japon\",\n                        \"project_progress\": null,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    },\n                    {\n                        \"progress\": 4,\n                        \"project_id\": \"9c183ea2-d7ac-4a01-a369-12844706c264\",\n                        \"category_id\": \"b95487f8-4d83-4e24-ad1a-951870596539\",\n                        \"project_name\": \"final\",\n                        \"project_progress\": null,\n                        \"category_metadata\": {\n                            \"icon\": \"/assets/xerpa/global/img/projects/viaje.png\",\n                            \"name\": \"Vacaciones\",\n                            \"color\": \"#7C2582\",\n                            \"group\": \"premium\",\n                            \"order\": 1,\n                            \"active\": true,\n                            \"short_name\": \"PROJECT_TYPE_HOLIDAYS\",\n                            \"description\": \"\"\n                        }\n                    }\n                ],\n                \"monthly_projects_count\": 24\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"monthly\",\n                    \"type\": \"first_page\"\n                },\n                {\n                    \"page\": \"balance\",\n                    \"type\": \"growth_no_withdrawals\"\n                },\n                {\n                    \"page\": \"main_project\",\n                    \"type\": \"savings\"\n                },\n                {\n                    \"page\": \"total\",\n                    \"type\": \"growth\"\n                },\n                {\n                    \"page\": \"top_rules\",\n                    \"type\": \"list_rules\"\n                },\n                {\n                    \"page\": \"summary\",\n                    \"type\": \"savings\"\n                },\n                {\n                    \"page\": \"end_report\",\n                    \"type\": \"closing\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 8,\n        \"week\": 35,\n        \"day\": 31,\n        \"is_read\": false,\n        \"created_at\": \"2025-09-01T04:00:39.577756-06:00\",\n        \"updated_at\": \"2025-09-01T04:00:39.577761-06:00\",\n        \"report_type\": \"8ef9ddf5-c952-4235-a35e-3971bf738c6f\"\n    },\n    {\n        \"id\": \"153604d0-b22f-4c0c-b03e-b90a66cedcef\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"balance_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"year\": 2025,\n                \"month\": 8,\n                \"month_name\": \"agosto\",\n                \"monthly_grow\": 10940,\n                \"monthly_saving\": 10940,\n                \"monthly_balance\": 206608,\n                \"monthly_withdrawal\": 0,\n                \"monthly_projects_count\": 24\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"balance_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 8,\n        \"week\": 35,\n        \"day\": 31,\n        \"is_read\": false,\n        \"created_at\": \"2025-09-01T04:00:42.629718-06:00\",\n        \"updated_at\": \"2025-09-01T04:00:42.629727-06:00\",\n        \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n    },\n    {\n        \"id\": \"c9e5ff1b-68ec-4c2c-ba3e-8f8b8a366902\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 4946,\n                \"weekly_saving\": 4946,\n                \"weekly_balance\": 206608,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 19,\n                \"weekly_projects_count\": 24\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 8,\n        \"week\": 35,\n        \"day\": 31,\n        \"is_read\": false,\n        \"created_at\": \"2025-09-01T04:00:44.262350-06:00\",\n        \"updated_at\": \"2025-09-01T04:00:44.262356-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"3efe6bbf-7424-424c-b8d1-e0902eeb7df5\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 4946,\n                \"weekly_saving\": 4946,\n                \"weekly_balance\": 206608,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 19,\n                \"weekly_projects_count\": 24\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 8,\n        \"week\": 35,\n        \"day\": 31,\n        \"is_read\": false,\n        \"created_at\": \"2025-09-01T04:00:45.829733-06:00\",\n        \"updated_at\": \"2025-09-01T04:00:45.829739-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"588b04fc-2c80-4b83-b24d-fd8948af089a\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 11399,\n                \"weekly_saving\": 11399,\n                \"weekly_balance\": 218007,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 20,\n                \"weekly_projects_count\": 24\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 9,\n        \"week\": 36,\n        \"day\": 7,\n        \"is_read\": false,\n        \"created_at\": \"2025-09-08T04:00:36.578556-06:00\",\n        \"updated_at\": \"2025-09-08T04:00:36.578563-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"d41203c2-81c2-415d-a1ab-fd77b4e77f4f\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 11399,\n                \"weekly_saving\": 11399,\n                \"weekly_balance\": 218007,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 20,\n                \"weekly_projects_count\": 24\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 9,\n        \"week\": 36,\n        \"day\": 7,\n        \"is_read\": false,\n        \"created_at\": \"2025-09-08T04:00:38.125891-06:00\",\n        \"updated_at\": \"2025-09-08T04:00:38.125897-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    },\n    {\n        \"id\": \"b7acacd3-5d94-4773-9092-a474e37d3ed0\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"weekly\": {\n                \"type\": \"week_balance_growth_no_withdrawal\",\n                \"weekly_grow\": 5538,\n                \"weekly_saving\": 5538,\n                \"weekly_balance\": 223545,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 21,\n                \"weekly_projects_count\": 24\n            },\n            \"no_show\": false,\n            \"configuration\": [\n                {\n                    \"page\": \"weekly\",\n                    \"type\": \"week_balance_growth_no_withdrawal\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 9,\n        \"week\": 37,\n        \"day\": 14,\n        \"is_read\": false,\n        \"created_at\": \"2025-09-15T04:00:34.004773-06:00\",\n        \"updated_at\": \"2025-09-15T04:00:34.004780-06:00\",\n        \"report_type\": \"563e93b3-1644-49f1-8d7d-743c64484e61\"\n    },\n    {\n        \"id\": \"fdafd45f-e78b-4c1a-b334-6e9b51554b4e\",\n        \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n        \"metadata\": {\n            \"no_show\": false,\n            \"weekly_short\": {\n                \"type\": \"growth_no_withdrawals\",\n                \"weekly_grow\": 5538,\n                \"weekly_saving\": 5538,\n                \"weekly_balance\": 223545,\n                \"weekly_withdrawal\": 0,\n                \"weekly_savings_count\": 21,\n                \"weekly_projects_count\": 24\n            },\n            \"configuration\": [\n                {\n                    \"page\": \"weekly_short\",\n                    \"type\": \"growth_no_withdrawals\"\n                }\n            ]\n        },\n        \"year\": 2025,\n        \"month\": 9,\n        \"week\": 37,\n        \"day\": 14,\n        \"is_read\": false,\n        \"created_at\": \"2025-09-15T04:00:35.413751-06:00\",\n        \"updated_at\": \"2025-09-15T04:00:35.413757-06:00\",\n        \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n    }\n]"}],"_postman_id":"2688c7b9-d91a-4e8d-aa74-5270673cba80"},{"name":"Detalle de un reporte","id":"1beded83-6156-4963-8b77-74564c0f8e9b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-insight/v1/report-api/users/{{user_id}}/reports/{{report_id}}","description":"<p>Endpoint para consultar el detalle de un reporte basado en su id.</p>\n","urlObject":{"path":["api-insight","v1","report-api","users","{{user_id}}","reports","{{report_id}}"],"host":["{{host_app}}"],"query":[],"variable":[]}},"response":[{"id":"c2818a81-3931-4500-b120-122f6b354f46","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-insight/v1/report-api/users/{{user_id}}/reports/{{report_id}}"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Tue, 16 Sep 2025 19:41:18 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"619"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"baa8ebb7-0382-4042-b028-5d0ee5b4b9bb"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"RAqG2EbeIAMEbsg="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68c9bd5e-37753cd5769aafc26859b1f4;Parent=05347092f6c13bb4;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"fc45af48-943b-4594-9339-069b57545b85\",\n    \"user_id\": \"7a1cb76c-9af3-4557-bc6c-f56f9ee8ef8e\",\n    \"metadata\": {\n        \"no_show\": false,\n        \"balance_short\": {\n            \"type\": \"growth_no_withdrawals\",\n            \"year\": 2025,\n            \"month\": 2,\n            \"month_name\": \"febrero\",\n            \"monthly_grow\": 2588,\n            \"monthly_saving\": 2588,\n            \"monthly_balance\": 12060.2,\n            \"monthly_withdrawal\": 0,\n            \"monthly_projects_count\": 3\n        },\n        \"configuration\": [\n            {\n                \"page\": \"balance_short\",\n                \"type\": \"growth_no_withdrawals\"\n            }\n        ]\n    },\n    \"year\": 2025,\n    \"month\": 2,\n    \"week\": 9,\n    \"day\": 28,\n    \"is_read\": true,\n    \"created_at\": \"2025-03-18T11:57:50.454413-06:00\",\n    \"updated_at\": \"2025-03-18T11:57:50.454423-06:00\",\n    \"report_type\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\"\n}"},{"id":"8c683c4c-b4e1-485d-95a0-f4b9e10b78d0","name":"Gastos semanal","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-insight/v1/report-api/users/{{user_id}}/reports/{{report_id}}"},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":null},{"id":"e63ad5e1-20e8-47c8-832c-63190e6f040f","name":"Gastos mensual","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-insight/v1/report-api/users/{{user_id}}/reports/{{report_id}}"},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":null},{"id":"7283fcda-1de5-420b-bcb1-84c416fb7347","name":"Ahorros semanal","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-insight/v1/report-api/users/{{user_id}}/reports/{{report_id}}"},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"{\n   \"id\": \"16ee8caf-485e-4cc8-a8c4-9a84b554be37\",\n   \"user_id\": \"8faa9093-4435-43d7-8f2e-df8950c2c707\",\n   \"metadata\": {\n       \"no_show\": false,\n       \"weekly_short\": {\n           \"type\": \"growth_no_withdrawals\",\n           \"weekly_grow\": 165938.16,\n           \"weekly_saving\": 165938.16,\n           \"weekly_balance\": 1964366.05,\n           \"weekly_withdrawal\": 0,\n           \"weekly_savings_count\": 110,\n           \"weekly_projects_count\": 30\n       },\n       \"configuration\": [\n           {\n               \"page\": \"weekly_short\",\n               \"type\": \"growth_no_withdrawals\"\n           }\n       ]\n   },\n   \"year\": 2025,\n   \"month\": 9,\n   \"week\": 38,\n   \"day\": 21,\n   \"is_read\": true,\n   \"created_at\": \"2025-09-22T04:00:34.804305-06:00\",\n   \"updated_at\": \"2025-09-22T04:00:34.804313-06:00\",\n   \"report_type\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\"\n}"},{"id":"bfcde349-ed95-4162-bc03-4c547858bea9","name":"Ahorros mensual","originalRequest":{"method":"GET","header":[],"url":"{{host_app}}/api-insight/v1/report-api/users/{{user_id}}/reports/{{report_id}}"},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"{\n    \"total\": {\n        \"type\": \"growth\",\n        \"monthly_balance\": 1244232.13,\n        \"monthly_projects\": [\n            {\n                \"progress\": 5707.12,\n                \"project_id\": \"a6f69e6b-d8de-4516-b62b-4284a94d5bad\",\n                \"category_id\": \"461a96b0-96d1-4259-a965-c599e1d7da1b\",\n                \"project_name\": \"test del\",\n                \"project_progress\": 570.71,\n                \"category_metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/deudas.png\",\n                    \"name\": \"Deudas\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 6,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_DEBTS\",\n                    \"description\": \"\"\n                }\n            },\n            {\n                \"progress\": 14719.7,\n                \"project_id\": \"3aea8624-9ba5-491b-892a-2695fa8ae5b0\",\n                \"category_id\": \"461a96b0-96d1-4259-a965-c599e1d7da1b\",\n                \"project_name\": \"1007 ✅\",\n                \"project_progress\": 147.19,\n                \"category_metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/deudas.png\",\n                    \"name\": \"Deudas\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 6,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_DEBTS\",\n                    \"description\": \"\"\n                }\n            }\n        ],\n        \"monthly_projects_count\": 30\n    },\n    \"balance\": {\n        \"type\": \"growth_with_withdrawals\",\n        \"monthly_grow\": 376758.93,\n        \"monthly_saving\": 376764.93,\n        \"monthly_balance\": 1244232.13,\n        \"monthly_withdrawal\": 6.0,\n        \"monthly_projects_count\": 30\n    },\n    \"monthly\": {\n        \"type\": \"first_page\",\n        \"year\": 2025,\n        \"month\": 8,\n        \"month_name\": \"agosto\"\n    },\n    \"no_show\": false,\n    \"summary\": {\n        \"type\": \"savings\",\n        \"monthly_grow\": 376758.93999999994,\n        \"monthly_rules\": [\n            {\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                    \"name\": \"Monto fijo\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                    \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                    \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                },\n                \"rule_name\": \"rule_type_fixed_amount\",\n                \"rule_amount\": 353813.72,\n                \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n            },\n            {\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                    \"name\": \"Desafío 52 semanas\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                    \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                    \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                },\n                \"rule_name\": \"rule_type_52_weeks\",\n                \"rule_amount\": 101.0,\n                \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n            },\n            {\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                    \"name\": \"Pasion futbolera\",\n                    \"color\": \"#7C2582\",\n                    \"active\": false,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_SOCCER\",\n                    \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                    \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                },\n                \"rule_name\": \"rule_type_soccer\",\n                \"rule_amount\": 60.0,\n                \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n            },\n            {\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                    \"name\": \"Placer culpable\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                    \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                    \"frequency_description\": \"Ahorra {amount} en {description}\"\n                },\n                \"rule_name\": \"rule_type_guilty_pleasure\",\n                \"rule_amount\": 0.0,\n                \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n            }\n        ],\n        \"monthly_balance\": 1244232.13,\n        \"monthly_savings_count\": 255.0,\n        \"monthly_projects_count\": 30\n    },\n    \"top_rules\": {\n        \"type\": \"list_rules\",\n        \"monthly_rules\": [\n            {\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/monto_fijo.svg\",\n                    \"name\": \"Monto fijo\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/monto_fijo_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_FIX_AMOUNT\",\n                    \"description\": \"Fija un monto para ahorrarlo recurrentemente cada día, semana o mes\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/monto_fijo_circle.svg\",\n                    \"frequency_description\": \"Ahorra {amount} cada {description}\"\n                },\n                \"rule_name\": \"rule_type_fixed_amount\",\n                \"rule_amount\": 353813.72,\n                \"rule_type_id\": \"7c8fbf63-545a-4f60-8c87-14f1f1d52f8c\"\n            },\n            {\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/desafio_52.svg\",\n                    \"name\": \"Desafío 52 semanas\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/desafio_52_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_52_WEEKS\",\n                    \"description\": \"Ahorra $1 la primera semana, $2 la segunda semana y así hasta la semana 52.\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/desafio_52_circle.svg\",\n                    \"frequency_description\": \"Ahorra $1 primera semana, $2 la segunda, $3 la tercera y así hasta la semana 52 en que ahorras $52 {description}\"\n                },\n                \"rule_name\": \"rule_type_52_weeks\",\n                \"rule_amount\": 101.0,\n                \"rule_type_id\": \"90832d0a-3879-40b5-a45b-729e4a964749\"\n            },\n            {\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/pasion_futbolera.svg\",\n                    \"name\": \"Pasion futbolera\",\n                    \"color\": \"#7C2582\",\n                    \"active\": false,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/pasion_futbolera_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_SOCCER\",\n                    \"description\": \"Ahorra cada vez que tu equipo juega, gana, empata o anota un gol\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/pasion_futbolera_circle.svg\",\n                    \"frequency_description\": \"Ahorra {amount} cuando {description}\"\n                },\n                \"rule_name\": \"rule_type_soccer\",\n                \"rule_amount\": 60.0,\n                \"rule_type_id\": \"a3125075-ff44-4b8b-be29-6c73fd846872\"\n            },\n            {\n                \"metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/rules/placer_culpable.svg\",\n                    \"name\": \"Placer culpable\",\n                    \"color\": \"#7C2582\",\n                    \"active\": true,\n                    \"icon_pause\": \"/assets/xerpa/global/img/rules/placer_culpable_pausa.svg\",\n                    \"short_name\": \"RULE_TYPE_GUILTY_PLEASURE\",\n                    \"description\": \"Ahorra cuando te das un gustito en tus comercios favoritos.\",\n                    \"icon_primary\": \"/assets/xerpa/global/img/rules/placer_culpable_circle.svg\",\n                    \"frequency_description\": \"Ahorra {amount} en {description}\"\n                },\n                \"rule_name\": \"rule_type_guilty_pleasure\",\n                \"rule_amount\": 0.0,\n                \"rule_type_id\": \"229011e5-fb7a-447c-bada-bb48010175ce\"\n            },\n        ]\n    },\n    \"end_report\": {\n        \"type\": \"closing\",\n        \"month\": 8,\n        \"month_name\": \"agosto\"\n    },\n    \"main_project\": {\n        \"type\": \"savings\",\n        \"monthly_balance\": 1244232.13,\n        \"monthly_projects\": [\n            {\n                \"progress\": 5707.12,\n                \"project_id\": \"a6f69e6b-d8de-4516-b62b-4284a94d5bad\",\n                \"category_id\": \"461a96b0-96d1-4259-a965-c599e1d7da1b\",\n                \"project_name\": \"test del\",\n                \"project_progress\": 570.71,\n                \"category_metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/deudas.png\",\n                    \"name\": \"Deudas\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 6,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_DEBTS\",\n                    \"description\": \"\"\n                }\n            },\n            {\n                \"progress\": 14719.7,\n                \"project_id\": \"3aea8624-9ba5-491b-892a-2695fa8ae5b0\",\n                \"category_id\": \"461a96b0-96d1-4259-a965-c599e1d7da1b\",\n                \"project_name\": \"1007 ✅\",\n                \"project_progress\": 147.19,\n                \"category_metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/deudas.png\",\n                    \"name\": \"Deudas\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"premium\",\n                    \"order\": 6,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_DEBTS\",\n                    \"description\": \"\"\n                }\n            },\n            {\n                \"progress\": 15765.48,\n                \"project_id\": \"1734b667-1c0c-4004-b135-779927a155ba\",\n                \"category_id\": \"5877afb7-c6d8-4023-8498-9280890f3155\",\n                \"project_name\": \"1010\",\n                \"project_progress\": 78.82,\n                \"category_metadata\": {\n                    \"icon\": \"/assets/xerpa/global/img/projects/otros.png\",\n                    \"name\": \"Otro\",\n                    \"color\": \"#7C2582\",\n                    \"group\": \"vivienda\",\n                    \"order\": 8,\n                    \"active\": true,\n                    \"short_name\": \"PROJECT_TYPE_OTHER\",\n                    \"description\": \"\"\n                }\n            }\n        ],\n        \"monthly_projects_count\": 30\n    },\n    \"configuration\": [\n        {\n            \"page\": \"monthly\",\n            \"type\": \"first_page\"\n        },\n        {\n            \"page\": \"balance\",\n            \"type\": \"growth_with_withdrawals\"\n        },\n        {\n            \"page\": \"main_project\",\n            \"type\": \"savings\"\n        },\n        {\n            \"page\": \"total\",\n            \"type\": \"growth\"\n        },\n        {\n            \"page\": \"top_rules\",\n            \"type\": \"list_rules\"\n        },\n        {\n            \"page\": \"summary\",\n            \"type\": \"savings\"\n        },\n        {\n            \"page\": \"end_report\",\n            \"type\": \"closing\"\n        }\n    ]\n}"}],"_postman_id":"1beded83-6156-4963-8b77-74564c0f8e9b"},{"name":"Tipos de reportes","id":"3d9ee475-adc4-4e41-88d8-c5520b2afec9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token_user}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{host_app}}/api-insight/v1/catalogs/?catalog=report","description":"<p>Endpoint para consultar el catálogo de tipos de reportes disponibles.</p>\n","urlObject":{"path":["api-insight","v1","catalogs",""],"host":["{{host_app}}"],"query":[{"key":"catalog","value":"report"}],"variable":[]}},"response":[{"id":"9a49fcce-1445-4f85-b01c-b0c9edd52327","name":"Successful Response","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{host_app}}/api-insight/v1/catalogs/?catalog=report","host":["{{host_app}}"],"path":["api-insight","v1","catalogs",""],"query":[{"key":"catalog","value":"report"}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Tue, 16 Sep 2025 19:56:42 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"1193"},{"key":"Connection","value":"keep-alive"},{"key":"x-amzn-RequestId","value":"c1c21a78-981a-4346-b1dc-bd5b73b383b5"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"x-amz-apigw-id","value":"RAsXKGKnoAMESxA="},{"key":"X-Amzn-Trace-Id","value":"Root=1-68c9c0fa-259024fb331481ad07652606;Parent=596e40f5900661a4;Sampled=0;Lineage=1:e7de7122:0"},{"key":"Access-Control-Allow-Credentials","value":"true"}],"cookie":[],"responseTime":null,"body":"{\n    \"report\": [\n        {\n            \"id\": \"956a5ecf-090e-43b8-be02-1027e783e2b1\",\n            \"catalog\": \"428e7e05-2c5d-4198-8d21-cd0a7b89f528\",\n            \"item_name\": \"monthly_report_short\",\n            \"description\": \"Reporte mensual corto de ahorro por usuario\",\n            \"metadata\": {}\n        },\n        {\n            \"id\": \"8ef9ddf5-c952-4235-a35e-3971bf738c6f\",\n            \"catalog\": \"428e7e05-2c5d-4198-8d21-cd0a7b89f528\",\n            \"item_name\": \"monthly_report\",\n            \"description\": \"Reporte mensual de ahorro por usuario\",\n            \"metadata\": {}\n        },\n        {\n            \"id\": \"62f78e2e-7634-4b94-8b79-e87d7186754a\",\n            \"catalog\": \"428e7e05-2c5d-4198-8d21-cd0a7b89f528\",\n            \"item_name\": \"weekly_report_short\",\n            \"description\": \"Reporte semanal corto de ahorro por usuario\",\n            \"metadata\": {}\n        },\n        {\n            \"id\": \"563e93b3-1644-49f1-8d7d-743c64484e61\",\n            \"catalog\": \"428e7e05-2c5d-4198-8d21-cd0a7b89f528\",\n            \"item_name\": \"weekly_report\",\n            \"description\": \"Reporte semanal de ahorro por usuario\",\n            \"metadata\": {}\n        },\n        {\n            \"id\": \"ccbdc72b-9401-4a9d-9b7b-3c17ec07c509\",\n            \"catalog\": \"428e7e05-2c5d-4198-8d21-cd0a7b89f528\",\n            \"item_name\": \"weekly_report_pfm\",\n            \"description\": \"Reporte semanal de gastos por usuario\",\n            \"metadata\": {}\n        },\n        {\n            \"id\": \"36485e1f-bb46-407d-afd5-cb17fbc07f8f\",\n            \"catalog\": \"428e7e05-2c5d-4198-8d21-cd0a7b89f528\",\n            \"item_name\": \"monthly_report_pfm\",\n            \"description\": \"Reporte mensual de gastos por usuario\",\n            \"metadata\": {}\n        }\n    ]\n}"}],"_postman_id":"3d9ee475-adc4-4e41-88d8-c5520b2afec9"}],"id":"88041cf0-91b3-4dc0-b5af-c1aad80235fc","description":"<p>Los reportes son resúmenes semanales, mensuales o anuales de la actividad del usuario con respecto a las funcionalidades de ahorro aumático o control de gastos.</p>\n<p>Los reportes son generados periodicamente se entregan las principales métricas e insights del período analizado.</p>\n<h3 id=\"estructura-de-un-reporte\">Estructura de un reporte</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": \"0af185c0-d437-421e-a268-459020daa459\",\n    \"user_id\": \"8faa9093-4435-43d7-8f2e-df8950c2c707\",\n    \"metadata\": {},\n    \"year\": 2025,\n    \"month\": 3,\n    \"week\": 14,\n    \"day\": 31,\n    \"is_read\": true,\n    \"created_at\": \"2025-04-01T04:00:50.136852-06:00\",\n    \"updated_at\": \"2025-04-01T04:00:50.136862-06:00\",\n    \"report_type\": \"8ef9ddf5-c952-4235-a35e-3971bf738c6f\"\n}\n\n</code></pre>\n<h4 id=\"descripción-de-campos\">Descripción de campos</h4>\n<ul>\n<li><p><code>id</code>: identificador del reporte</p>\n</li>\n<li><p><code>user_id</code>: identificador del usuario</p>\n</li>\n<li><p><code>metadata</code>: métricas e información específica del reporte. Cada tipo reporte tendrá una estructura específica que dependerá de la información analizada</p>\n</li>\n<li><p><code>year</code>: año del reporte</p>\n</li>\n<li><p><code>month</code>: mes del reporte</p>\n</li>\n<li><p><code>week</code>: semana del reporte</p>\n</li>\n<li><p><code>day</code>: día del reporte</p>\n</li>\n<li><p><code>is_read</code>: booleano para marcar si el reporte fue leído por el usuario</p>\n</li>\n<li><p><code>report_type</code>: identificador del tipo de reporte según catálogo</p>\n</li>\n<li><p><code>created_at</code>: fecha de creación del reporte</p>\n</li>\n<li><p><code>updated_at</code>: fecha de la ultima actualización del registro</p>\n</li>\n</ul>\n","_postman_id":"88041cf0-91b3-4dc0-b5af-c1aad80235fc"}],"id":"d649e3e1-831c-4a59-8384-826e08059813","description":"<p>API para disponiblizar información de insights, reportes y otros recursos para que los usuarios tengan un mejor entendmiento de sus finanzas personales.</p>\n<p>Los insights y reportes son generados automáticamente por Xerpa en base a la información de cada usuario recibida por el banco y la generada por él en la interacción con los productos de Xerpa.</p>\n","_postman_id":"d649e3e1-831c-4a59-8384-826e08059813"},{"name":"New Request","id":"a8c22729-9af1-4dc7-ab6a-e28ffedbbb38","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"urlObject":{"query":[],"variable":[]},"url":""},"response":[],"_postman_id":"a8c22729-9af1-4dc7-ab6a-e28ffedbbb38"}],"event":[{"listen":"prerequest","script":{"id":"0a4d5941-84e6-419f-8f38-91f08c727f34","type":"text/javascript","requests":{},"exec":["const token_bff_user = pm.environment.get(\"token_bff_user\");","","pm.request.headers.add({","    key: \"X-User-Token\",","    value: `${token_bff_user}`","});"]}},{"listen":"test","script":{"id":"a9afac82-6566-4aba-bfe1-73cf33f12d94","type":"text/javascript","requests":{},"exec":[""]}}],"variable":[{"key":"baseUrl","value":"https://farming-simulator.pstmn.io"}]}