{"id":477,"date":"2026-07-29T21:26:19","date_gmt":"2026-07-29T21:26:19","guid":{"rendered":"https:\/\/profilesm.com\/?page_id=477"},"modified":"2026-07-29T21:28:22","modified_gmt":"2026-07-29T21:28:22","slug":"budget","status":"publish","type":"page","link":"https:\/\/profilesm.com\/es\/budget\/","title":{"rendered":"Budget"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"477\" class=\"elementor elementor-477\" data-elementor-post-type=\"page\">\n\t\t\t\t<div data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-element elementor-element-85f7566 e-flex e-con-boxed e-con e-parent\" data-id=\"85f7566\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-863aaf4 elementor-widget elementor-widget-pf_dashboard\" data-id=\"863aaf4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"pf_dashboard.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"pf-glass-card\">\n\t\t\t<div class=\"pf-dashboard-header\">\n\t\t\t\t<h2>Hello, User<\/h2>\n\t\t\t\t<div class=\"pf-balance-display\">$12,450.00<\/div>\n\t\t\t<\/div>\n\t\t\t<div class=\"pf-dashboard-content\">\n\t\t\t\t<p>Your net worth has increased by <strong>4.2%<\/strong> this month.<\/p>\n\t\t\t\t<!-- React\/Vue Component anchor for dynamic charts would go here -->\n\t\t\t\t<div id=\"pf-chart-root\"><\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8ca4c63 elementor-widget elementor-widget-pf_transaction_form\" data-id=\"8ca4c63\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"pf_transaction_form.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"pf-glass-card\">\n\t\t\t<h3 style=\"margin-top: 0;\">Nuevo Movimiento<\/h3>\n\t\t\t<form id=\"pf-smart-form\" style=\"display: flex; flex-direction: column; gap: 15px;\" action=\"\">\n\t\t\t\t\n\t\t\t\t<div style=\"display: flex; gap: 10px;\">\n\t\t\t\t\t<div style=\"flex: 1;\">\n\t\t\t\t\t\t<label style=\"font-size: 14px; opacity: 0.8;\">Tipo<\/label>\n\t\t\t\t\t\t<select id=\"pf-type\" style=\"width: 100%; padding: 10px; border-radius: 8px; border: 1px solid rgba(255,255,255,0.2); background: rgba(255,255,255,0.5);\">\n\t\t\t\t\t\t\t<option value=\"expense\">Gasto \/ Pago<\/option>\n\t\t\t\t\t\t\t<option value=\"income\">Ingreso<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div style=\"flex: 1;\" id=\"pf-subtype-container\">\n\t\t\t\t\t\t<label style=\"font-size: 14px; opacity: 0.8;\">Naturaleza<\/label>\n\t\t\t\t\t\t<select id=\"pf-subtype\" style=\"width: 100%; padding: 10px; border-radius: 8px; border: 1px solid rgba(255,255,255,0.2); background: rgba(255,255,255,0.5);\">\n\t\t\t\t\t\t\t<option value=\"variable_expense\">Variable (Comida, Servicios)<\/option>\n\t\t\t\t\t\t\t<option value=\"fixed_expense\">Fijo \/ Mensual (Arriendo, Netflix)<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t<div id=\"pf-due-date-container\" style=\"display: none; flex: 1;\">\n\t\t\t\t\t<label style=\"font-size: 14px; opacity: 0.8;\">Fecha de Vencimiento (Pago Fijo)<\/label>\n\t\t\t\t\t<input type=\"date\" id=\"pf-due-date\" value=\"2026-11-02\" style=\"width: 100%; padding: 10px; border-radius: 8px; border: 1px solid rgba(255,255,255,0.2); background: rgba(0,0,0,0.05);\" \/>\n\t\t\t\t<\/div>\n\n\t\t\t\t<div>\n\t\t\t\t\t<label style=\"font-size: 14px; opacity: 0.8;\">Descripci\u00f3n<\/label>\n\t\t\t\t\t<input type=\"text\" id=\"pf-desc\" placeholder=\"Ej: Pagu\u00e9 la cuenta de la luz\" style=\"width: 100%; padding: 10px; border-radius: 8px; border: 1px solid rgba(255,255,255,0.2); background: rgba(0,0,0,0.05);\" required \/>\n\t\t\t\t<\/div>\n\n\t\t\t\t<div style=\"display: flex; gap: 10px;\">\n\t\t\t\t\t<div style=\"flex: 1;\">\n\t\t\t\t\t\t<label style=\"font-size: 14px; opacity: 0.8;\">Monto<\/label>\n\t\t\t\t\t\t<input type=\"number\" id=\"pf-amount\" step=\"0.01\" placeholder=\"0.00\" style=\"width: 100%; padding: 10px; border-radius: 8px; border: 1px solid rgba(255,255,255,0.2); background: rgba(0,0,0,0.05);\" required \/>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div style=\"flex: 1;\">\n\t\t\t\t\t\t<label style=\"font-size: 14px; opacity: 0.8;\">Moneda<\/label>\n\t\t\t\t\t\t<select id=\"pf-currency\" style=\"width: 100%; padding: 10px; border-radius: 8px; border: 1px solid rgba(255,255,255,0.2); background: rgba(255,255,255,0.5);\">\n\t\t\t\t\t\t\t<option value=\"1\">USD<\/option>\n\t\t\t\t\t\t\t<option value=\"2\">COP<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t<div>\n\t\t\t\t\t<label style=\"font-size: 14px; opacity: 0.8;\">Fecha de Registro<\/label>\n\t\t\t\t\t<input type=\"date\" id=\"pf-date\" value=\"2026-11-02\" style=\"width: 100%; padding: 10px; border-radius: 8px; border: 1px solid rgba(255,255,255,0.2); background: rgba(0,0,0,0.05);\" required \/>\n\t\t\t\t<\/div>\n\n\t\t\t\t<div id=\"pf-status-msg\" style=\"display: none; padding: 10px; border-radius: 8px; font-size: 14px;\"><\/div>\n\n\t\t\t\t<button type=\"submit\" id=\"pf-submit-btn\" style=\"padding: 12px; border-radius: 8px; border: none; background: #007AFF; color: white; font-weight: bold; cursor: pointer;\">Guardar Movimiento<\/button>\n\t\t\t<input type=\"hidden\" name=\"trp-form-language\" value=\"es\"\/><\/form>\n\t\t<\/div>\n\n\t\t<script>\n\t\t\t\/\/ L\u00f3gica Condicional para el UI de Presupuesto Avanzado\n\t\t\tdocument.addEventListener('DOMContentLoaded', function() {\n\t\t\t\tconst form = document.getElementById('pf-smart-form');\n\t\t\t\tconst typeSelect = document.getElementById('pf-type');\n\t\t\t\tconst subtypeSelect = document.getElementById('pf-subtype');\n\t\t\t\tconst dueDateContainer = document.getElementById('pf-due-date-container');\n\t\t\t\tconst statusMsg = document.getElementById('pf-status-msg');\n\n\t\t\t\tfunction updateSubtypes() {\n\t\t\t\t\tif (typeSelect.value === 'income') {\n\t\t\t\t\t\tsubtypeSelect.innerHTML = '<option value=\"payroll\">N\u00f3mina \/ Salario<\/option><option value=\"other_income\">Ingresos Varios<\/option>';\n\t\t\t\t\t\tdueDateContainer.style.display = 'none';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsubtypeSelect.innerHTML = '<option value=\"variable_expense\">Variable (Comida, Servicios)<\/option><option value=\"fixed_expense\">Fijo \/ Mensual (Suscripciones, Arriendo)<\/option>';\n\t\t\t\t\t\tcheckDueDate();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction checkDueDate() {\n\t\t\t\t\tif (subtypeSelect.value === 'fixed_expense') {\n\t\t\t\t\t\tdueDateContainer.style.display = 'block';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdueDateContainer.style.display = 'none';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttypeSelect.addEventListener('change', updateSubtypes);\n\t\t\t\tsubtypeSelect.addEventListener('change', checkDueDate);\n\n\t\t\t\t\/\/ Handle form submission via AJAX to REST API\n\t\t\t\tform.addEventListener('submit', function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\n\t\t\t\t\tconst submitBtn = document.getElementById('pf-submit-btn');\n\t\t\t\t\tsubmitBtn.innerText = 'Guardando...';\n\t\t\t\t\tsubmitBtn.disabled = true;\n\n\t\t\t\t\tconst payload = {\n\t\t\t\t\t\ttype: typeSelect.value,\n\t\t\t\t\t\tsubtype: subtypeSelect.value,\n\t\t\t\t\t\tdescription: document.getElementById('pf-desc').value,\n\t\t\t\t\t\tamount: document.getElementById('pf-amount').value,\n\t\t\t\t\t\tcurrency_id: document.getElementById('pf-currency').value,\n\t\t\t\t\t\tdate: document.getElementById('pf-date').value,\n\t\t\t\t\t\tdue_date: (subtypeSelect.value === 'fixed_expense') ? document.getElementById('pf-due-date').value : null\n\t\t\t\t\t};\n\n\t\t\t\t\tfetch('\/wp-json\/pf\/v1\/transactions', {\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\theaders: { 'Content-Type': 'application\/json' },\n\t\t\t\t\t\tbody: JSON.stringify(payload)\n\t\t\t\t\t})\n\t\t\t\t\t.then(response => response.json())\n\t\t\t\t\t.then(data => {\n\t\t\t\t\t\tif(data.success) {\n\t\t\t\t\t\t\tstatusMsg.style.display = 'block';\n\t\t\t\t\t\t\tstatusMsg.style.background = 'rgba(52, 199, 89, 0.2)';\n\t\t\t\t\t\t\tstatusMsg.style.color = '#34C759';\n\t\t\t\t\t\t\tstatusMsg.innerText = '\u00a1Guardado correctamente!';\n\t\t\t\t\t\t\tform.reset();\n\t\t\t\t\t\t\tupdateSubtypes(); \/\/ Reset logic\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow new Error(data.error || 'Error desconocido');\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch(err => {\n\t\t\t\t\t\tstatusMsg.style.display = 'block';\n\t\t\t\t\t\tstatusMsg.style.background = 'rgba(255, 59, 48, 0.2)';\n\t\t\t\t\t\tstatusMsg.style.color = '#FF3B30';\n\t\t\t\t\t\tstatusMsg.innerText = 'Error: ' + err.message;\n\t\t\t\t\t})\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tsubmitBtn.innerText = 'Guardar Movimiento';\n\t\t\t\t\t\tsubmitBtn.disabled = false;\n\t\t\t\t\t\tsetTimeout(() => { statusMsg.style.display = 'none'; }, 5000);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t<\/script>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-254907f elementor-widget elementor-widget-pf_ai_chat\" data-id=\"254907f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"pf_ai_chat.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"pf-glass-card pf-ai-chat-container\">\n\t\t\t<div class=\"pf-dashboard-header\" style=\"margin-bottom: 10px; padding: 16px; border-bottom: 1px solid rgba(255,255,255,0.1);\">\n\t\t\t\t<h3 style=\"margin: 0; font-size: 18px;\">Asesor Financiero IA<\/h3>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t<div class=\"pf-chat-messages\" id=\"pf-ai-chat-box\">\n\t\t\t\t<div class=\"pf-chat-bubble ai\">\n\t\t\t\t\t\u00a1Hola! He revisado tus cuentas y tus pr\u00f3ximas fechas de pago (suscripciones y servicios). Tienes un excedente proyectado de $450 este mes. \u00bfQuieres que preparemos una estrategia para abonar a tu deuda de la Secretar\u00eda de Movilidad?\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\n\t\t\t<div class=\"pf-chat-input-area\">\n\t\t\t\t<input type=\"text\" placeholder=\"Escribe tu consulta...\" id=\"pf-chat-input\" \/>\n\t\t\t\t<button type=\"button\" id=\"pf-chat-send\">\n\t\t\t\t\t<svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"><\/line><polygon points=\"22 2 15 22 11 13 2 9 22 2\"><\/polygon><\/svg>\n\t\t\t\t<\/button>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<script>\n\t\t\tdocument.addEventListener('DOMContentLoaded', function() {\n\t\t\t\tconst chatBox = document.getElementById('pf-ai-chat-box');\n\t\t\t\tconst input = document.getElementById('pf-chat-input');\n\t\t\t\tconst sendBtn = document.getElementById('pf-chat-send');\n\n\t\t\t\tsendBtn.addEventListener('click', function() {\n\t\t\t\t\tconst message = input.value.trim();\n\t\t\t\t\tif (!message) return;\n\n\t\t\t\t\t\/\/ Add User Message\n\t\t\t\t\tconst userBubble = document.createElement('div');\n\t\t\t\t\tuserBubble.className = 'pf-chat-bubble user';\n\t\t\t\t\tuserBubble.style.background = '#007AFF';\n\t\t\t\t\tuserBubble.style.color = '#fff';\n\t\t\t\t\tuserBubble.style.alignSelf = 'flex-end';\n\t\t\t\t\tuserBubble.innerText = message;\n\t\t\t\t\tchatBox.appendChild(userBubble);\n\t\t\t\t\t\n\t\t\t\t\tinput.value = '';\n\t\t\t\t\t\n\t\t\t\t\t\/\/ Add Loading\n\t\t\t\t\tconst loadingBubble = document.createElement('div');\n\t\t\t\t\tloadingBubble.className = 'pf-chat-bubble ai';\n\t\t\t\t\tloadingBubble.innerText = 'Analizando...';\n\t\t\t\t\tchatBox.appendChild(loadingBubble);\n\t\t\t\t\tchatBox.scrollTop = chatBox.scrollHeight;\n\n\t\t\t\t\tfetch('\/wp-json\/pf\/v1\/ai\/chat', {\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\theaders: { 'Content-Type': 'application\/json' },\n\t\t\t\t\t\tbody: JSON.stringify({ message: message })\n\t\t\t\t\t})\n\t\t\t\t\t.then(response => response.json())\n\t\t\t\t\t.then(data => {\n\t\t\t\t\t\tloadingBubble.innerText = data.reply || 'Error de conexi\u00f3n con la IA.';\n\t\t\t\t\t\tchatBox.scrollTop = chatBox.scrollHeight;\n\t\t\t\t\t})\n\t\t\t\t\t.catch(err => {\n\t\t\t\t\t\tloadingBubble.innerText = 'Error: ' + err.message;\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tinput.addEventListener('keypress', function(e) {\n\t\t\t\t\tif (e.key === 'Enter') sendBtn.click();\n\t\t\t\t});\n\t\t\t});\n\t\t<\/script>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Hello, User $12,450.00 Your net worth has increased by 4.2% this month. Nuevo Movimiento Descripci\u00f3n (La IA lo categorizar\u00e1) Monto&#8230;<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-477","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/profilesm.com\/es\/wp-json\/wp\/v2\/pages\/477","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/profilesm.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/profilesm.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/profilesm.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/profilesm.com\/es\/wp-json\/wp\/v2\/comments?post=477"}],"version-history":[{"count":4,"href":"https:\/\/profilesm.com\/es\/wp-json\/wp\/v2\/pages\/477\/revisions"}],"predecessor-version":[{"id":481,"href":"https:\/\/profilesm.com\/es\/wp-json\/wp\/v2\/pages\/477\/revisions\/481"}],"wp:attachment":[{"href":"https:\/\/profilesm.com\/es\/wp-json\/wp\/v2\/media?parent=477"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/profilesm.com\/es\/wp-json\/wp\/v2\/categories?post=477"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/profilesm.com\/es\/wp-json\/wp\/v2\/tags?post=477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}