Files
famlaw/activeblue_familylaw/views/portal_calculator_templates.xml
Carlos Garcia 6dc2144db7 Phase 6: portal, website intake, calculator, and case law library
- controllers/portal.py: FamilyLawPortal with 8 routes (cases list,
  case detail, calculator pre-fill, caselaw library, deadline complete
  AJAX, public intake landing/form/submit)
- views/portal_case_templates.xml: portal home card, case list, full
  case detail with timeline widget, AI summary, DV safety banner
- views/portal_calculator_templates.xml: FL 61.30 interactive calculator
- views/portal_caselaw_templates.xml: searchable case law library (EN/ES)
- views/website_intake_templates.xml: public 4-step intake form with DV
  quick-exit, fee waiver, and intake confirmation page
- static/src/css/familylaw_portal.css: full portal/website CSS (EN/ES
  lang toggle, deadline card color coding, timeline, AI summary box)
- static/src/js/fl_calculator.js: FL 61.30 schedule lookup, above-
  schedule formula, FL 61.30(11)(b) substantial timesharing calculation
- static/src/js/fl_timeline.js: deadline timeline widget with filter
  buttons and mark-complete AJAX
- __init__.py: import controllers package
- __manifest__.py: add Phase 6 portal view files

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 23:42:37 -05:00

212 lines
15 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- Portal FL 61.30 Interactive Child Support Calculator
URL: /my/cases/calculator
Uses fl_calculator.js for live FL 61.30 calculation.
-->
<odoo>
<data>
<template id="portal_calculator" name="FL 61.30 Child Support Calculator — Portal">
<t t-call="portal.portal_layout">
<div class="container fl-portal mt-4">
<!-- Breadcrumb -->
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/my/home">Home</a></li>
<li class="breadcrumb-item"><a href="/my/cases">My Cases</a></li>
<li class="breadcrumb-item active">Support Calculator</li>
</ol>
</nav>
<!-- Language toggle -->
<div class="fl-lang-toggle">
<button class="btn btn-outline-secondary btn-sm fl-lang-btn btn-primary" data-lang="en">EN</button>
<button class="btn btn-outline-secondary btn-sm fl-lang-btn" data-lang="es">ES</button>
</div>
<!-- Header -->
<div class="fl-case-header mb-4">
<h2>
<span data-lang="en">FL 61.30 Child Support Calculator</span>
<span data-lang="es" style="display:none;">Calculadora de Pensión Alimenticia FL 61.30</span>
</h2>
<div class="fl-case-meta">
<span data-lang="en">Florida Child Support Guidelines — Section 61.30, Florida Statutes</span>
<span data-lang="es" style="display:none;">Pautas de Manutención Infantil de Florida — Sección 61.30, Estatutos de Florida</span>
</div>
</div>
<!-- Disclaimer -->
<div class="alert alert-warning">
<strong data-lang="en">⚠ Estimate Only — Not Legal Advice</strong>
<strong data-lang="es" style="display:none;">⚠ Solo Estimación — No es Asesoramiento Legal</strong>
<span data-lang="en"> This calculator provides an estimate based on the FL 61.30 schedule.
The official court calculation may differ. Always verify with the court.</span>
<span data-lang="es" style="display:none;"> Esta calculadora proporciona una estimación basada en el horario FL 61.30.
El cálculo oficial del tribunal puede diferir. Siempre verifique con el tribunal.</span>
</div>
<!-- Calculator form -->
<div class="fl-calculator-section fl-calculator-widget">
<div class="row">
<!-- Column 1: Income -->
<div class="col-md-6">
<h5 class="text-primary mb-3" data-lang="en">Income Information</h5>
<h5 class="text-primary mb-3" data-lang="es" style="display:none;">Información de Ingresos</h5>
<div class="mb-3">
<label class="form-label fw-semibold">
<span data-lang="en">Petitioner Monthly Net Income</span>
<span data-lang="es" style="display:none;">Ingreso Neto Mensual del Peticionario</span>
</label>
<div class="input-group">
<span class="input-group-text">$</span>
<input type="number" id="petitionerNetIncome" class="form-control"
placeholder="0.00" min="0" step="1"
value="" t-if="prefill_petitioner"
t-att-value="prefill_petitioner"/>
<input type="number" id="petitionerNetIncome" class="form-control"
placeholder="0.00" min="0" step="1"
t-if="not prefill_petitioner"/>
</div>
<div class="form-text" data-lang="en">After taxes, FICA, and allowable deductions (FL 61.30(3))</div>
<div class="form-text" data-lang="es" style="display:none;">Después de impuestos, FICA y deducciones permitidas (FL 61.30(3))</div>
</div>
<div class="mb-3">
<label class="form-label fw-semibold">
<span data-lang="en">Respondent Monthly Net Income</span>
<span data-lang="es" style="display:none;">Ingreso Neto Mensual del Respondente</span>
</label>
<div class="input-group">
<span class="input-group-text">$</span>
<input type="number" id="respondentNetIncome" class="form-control"
placeholder="0.00" min="0" step="1"/>
</div>
</div>
<div class="mb-3">
<label class="form-label fw-semibold">
<span data-lang="en">Number of Children</span>
<span data-lang="es" style="display:none;">Número de Hijos</span>
</label>
<select id="numChildren" class="form-select">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
</select>
</div>
</div>
<!-- Column 2: Adjustments -->
<div class="col-md-6">
<h5 class="text-primary mb-3" data-lang="en">Adjustments &amp; Timesharing</h5>
<h5 class="text-primary mb-3" data-lang="es" style="display:none;">Ajustes y Tiempo Compartido</h5>
<div class="mb-3">
<label class="form-label fw-semibold">
<span data-lang="en">Petitioner Health Insurance (child's share)</span>
<span data-lang="es" style="display:none;">Seguro Médico del Peticionario (parte del hijo)</span>
</label>
<div class="input-group">
<span class="input-group-text">$</span>
<input type="number" id="petitionerHealthInsurance" class="form-control" placeholder="0.00" min="0" step="1"/>
</div>
</div>
<div class="mb-3">
<label class="form-label fw-semibold">
<span data-lang="en">Respondent Health Insurance (child's share)</span>
<span data-lang="es" style="display:none;">Seguro Médico del Respondente (parte del hijo)</span>
</label>
<div class="input-group">
<span class="input-group-text">$</span>
<input type="number" id="respondentHealthInsurance" class="form-control" placeholder="0.00" min="0" step="1"/>
</div>
</div>
<div class="mb-3">
<label class="form-label fw-semibold">
<span data-lang="en">Petitioner Childcare (work-related)</span>
<span data-lang="es" style="display:none;">Cuidado Infantil del Peticionario</span>
</label>
<div class="input-group">
<span class="input-group-text">$</span>
<input type="number" id="petitionerChildcare" class="form-control" placeholder="0.00" min="0" step="1"/>
</div>
</div>
<div class="mb-3">
<label class="form-label fw-semibold">
<span data-lang="en">Respondent Childcare (work-related)</span>
<span data-lang="es" style="display:none;">Cuidado Infantil del Respondente</span>
</label>
<div class="input-group">
<span class="input-group-text">$</span>
<input type="number" id="respondentChildcare" class="form-control" placeholder="0.00" min="0" step="1"/>
</div>
</div>
<div class="mb-3">
<label class="form-label fw-semibold">
<span data-lang="en">Petitioner Overnights / Year</span>
<span data-lang="es" style="display:none;">Noches del Peticionario / Año</span>
</label>
<input type="number" id="petitionerOvernights" class="form-control"
placeholder="182" min="0" max="365" step="1" value="182"/>
<div class="form-text" data-lang="en">Substantial timesharing (FL 61.30(11)(b)) applies when either parent &gt;73 nights/year</div>
<div class="form-text" data-lang="es" style="display:none;">El tiempo compartido sustancial aplica cuando cualquier padre tiene &gt;73 noches/año</div>
</div>
<div class="mb-3">
<label class="form-label fw-semibold">
<span data-lang="en">Respondent Overnights / Year</span>
<span data-lang="es" style="display:none;">Noches del Respondente / Año</span>
</label>
<input type="number" id="respondentOvernights" class="form-control"
placeholder="183" min="0" max="365" step="1" value="183"/>
</div>
</div>
</div>
<!-- Result area (rendered by fl_calculator.js) -->
<div class="fl-calculator-result-area mt-2"></div>
<div class="fl-calculator-breakdown mt-3"></div>
</div>
<!-- How it works -->
<div class="fl-section-card mt-4">
<div class="fl-section-header" data-lang="en">How FL 61.30 Works</div>
<div class="fl-section-header" data-lang="es" style="display:none;">Cómo Funciona FL 61.30</div>
<div class="fl-section-body" style="font-size:0.9rem;">
<div data-lang="en">
<p><strong>Step 1:</strong> Add both parents' monthly net income (after taxes and allowable deductions).</p>
<p><strong>Step 2:</strong> Look up the basic obligation from the FL 61.30 schedule based on combined income and number of children.</p>
<p><strong>Step 3:</strong> Add health insurance and childcare costs to get the adjusted obligation.</p>
<p><strong>Step 4:</strong> Each parent pays their proportional share (based on income %).</p>
<p><strong>Step 5:</strong> If either parent has the children overnight more than 73 times per year, the substantial timesharing formula (FL 61.30(11)(b)) applies, which can significantly reduce the paying parent's obligation.</p>
<p><strong>Modification:</strong> A modification is allowed when the new guideline amount differs by <strong>15% AND $50</strong> from the current order (FL 61.30(1)(b)).</p>
</div>
<div data-lang="es" style="display:none;">
<p><strong>Paso 1:</strong> Sume los ingresos netos mensuales de ambos padres (después de impuestos y deducciones permitidas).</p>
<p><strong>Paso 2:</strong> Busque la obligación básica en el horario FL 61.30 según los ingresos combinados y el número de hijos.</p>
<p><strong>Paso 3:</strong> Agregue los costos de seguro médico y cuidado infantil para obtener la obligación ajustada.</p>
<p><strong>Paso 4:</strong> Cada padre paga su parte proporcional (según % de ingresos).</p>
<p><strong>Paso 5:</strong> Si cualquier padre tiene a los hijos de noche más de 73 veces al año, se aplica la fórmula de tiempo compartido sustancial (FL 61.30(11)(b)).</p>
<p><strong>Modificación:</strong> Se permite una modificación cuando el nuevo monto de las pautas difiere en <strong>15% Y $50</strong> de la orden actual (FL 61.30(1)(b)).</p>
</div>
</div>
</div>
</div>
</t>
</template>
</data>
</odoo>