Update index.html
All checks were successful
Build and Deploy / build (push) Successful in 24s

This commit is contained in:
2025-09-24 00:36:22 +02:00
parent 4dba11f303
commit 2e1516ce48

View File

@@ -321,10 +321,12 @@
<label class="block text-sm font-medium text-gray-700 mb-2">Tipologia Fiscale</label> <label class="block text-sm font-medium text-gray-700 mb-2">Tipologia Fiscale</label>
<select x-model="taxRegime" <select x-model="taxRegime"
class="w-full p-3 border-2 border-blue-200 rounded-lg focus:border-blue-500 focus:outline-none"> class="w-full p-3 border-2 border-blue-200 rounded-lg focus:border-blue-500 focus:outline-none">
<option value="forfettario">Regime Forfettario</option> <option value="forfettario">Regime Forfettario (Ditta Individuale)</option>
<option value="ordinario">Regime Ordinario (Semplificato)</option> <option value="ordinario">Regime Ordinario Semplificato (Ditta Individuale)</option>
<option value="occasionale">Lavoro Autonomo Occasionale</option> <option value="occasionale">Lavoro Autonomo Occasionale</option>
<option value="minimi">Regime dei Minimi (ad esaurimento)</option> <option value="minimi">Regime dei Minimi (ad esaurimento)</option>
<option value="srl">SRL - Società a Responsabilità Limitata</option>
<option value="srls">SRLS - SRL Semplificata</option>
</select> </select>
</div> </div>
@@ -365,6 +367,64 @@
</div> </div>
</template> </template>
<!-- Opzioni SRL/SRLS -->
<template x-if="taxRegime === 'srl' || taxRegime === 'srls'">
<div class="md:col-span-2 space-y-4">
<div class="p-4 bg-purple-50 rounded-lg border-2 border-purple-200">
<h4 class="font-semibold text-purple-800 mb-3 flex items-center gap-2">
<i class="fas fa-building text-purple-600"></i>
Parametri Societari
<span class="bg-orange-500 text-white text-xs px-2 py-1 rounded-full ml-2">INTERNO</span>
</h4>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">
Aliquota IRES (%)
</label>
<input type="number" x-model.number="iresRate"
class="w-full p-3 border-2 border-purple-200 rounded-lg focus:border-purple-500 focus:outline-none"
step="0.1" min="0" max="100">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">
Aliquota IRAP (%)
</label>
<input type="number" x-model.number="irapRate"
class="w-full p-3 border-2 border-purple-200 rounded-lg focus:border-purple-500 focus:outline-none"
step="0.1" min="0" max="10">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">
Costi Deducibili Stimati (€)
</label>
<input type="number" x-model.number="deductibleCosts"
class="w-full p-3 border-2 border-purple-200 rounded-lg focus:border-purple-500 focus:outline-none"
placeholder="es. 5000">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">
Compenso Amministratore (€)
</label>
<input type="number" x-model.number="adminCompensation"
class="w-full p-3 border-2 border-purple-200 rounded-lg focus:border-purple-500 focus:outline-none"
placeholder="es. 2000">
</div>
</div>
</div>
<div class="p-3 bg-yellow-50 rounded-lg border border-yellow-300">
<p class="text-sm text-yellow-800">
<i class="fas fa-info-circle mr-2"></i>
<span x-show="taxRegime === 'srl'">
<strong>SRL:</strong> Società con capitale minimo €10.000, costi notarili circa €2.000
</span>
<span x-show="taxRegime === 'srls'">
<strong>SRLS:</strong> Capitale da €1 a €9.999, costi notarili ridotti (circa €600)
</span>
</p>
</div>
</div>
</template>
<!-- Rivalsa INPS --> <!-- Rivalsa INPS -->
<div class="md:col-span-2" x-show="taxRegime !== 'occasionale'"> <div class="md:col-span-2" x-show="taxRegime !== 'occasionale'">
<div class="flex items-center justify-between p-4 bg-blue-50 rounded-lg"> <div class="flex items-center justify-between p-4 bg-blue-50 rounded-lg">
@@ -803,6 +863,13 @@
supportRate: 40, supportRate: 40,
estimatedAnnualTaxable: 25000, estimatedAnnualTaxable: 25000,
includeINPS: true, includeINPS: true,
// SRL/SRLS specific
iresRate: 24, // IRES standard 24%
irapRate: 3.9, // IRAP standard 3.9%
deductibleCosts: 5000, // Costi deducibili stimati
adminCompensation: 0, // Compenso amministratore
mvpDevHours: 100, mvpDevHours: 100,
mvpSupportHours: 20, mvpSupportHours: 20,
mvpTeamLeader: '', mvpTeamLeader: '',
@@ -968,10 +1035,10 @@
// Computed properties for UI // Computed properties for UI
get showInpsCharge() { get showInpsCharge() {
return this.taxRegime !== 'occasionale'; return this.taxRegime !== 'occasionale' && this.taxRegime !== 'srl' && this.taxRegime !== 'srls';
}, },
get showIva() { get showIva() {
return this.taxRegime === 'ordinario'; return this.taxRegime === 'ordinario' || this.taxRegime === 'srl' || this.taxRegime === 'srls';
}, },
get showWithholdingTax() { get showWithholdingTax() {
return this.taxRegime === 'ordinario' || this.taxRegime === 'occasionale'; return this.taxRegime === 'ordinario' || this.taxRegime === 'occasionale';
@@ -980,7 +1047,7 @@
return this.taxRegime !== 'occasionale'; return this.taxRegime !== 'occasionale';
}, },
get showInpsDue() { get showInpsDue() {
return this.taxRegime !== 'occasionale'; return this.taxRegime !== 'occasionale' && this.taxRegime !== 'srl' && this.taxRegime !== 'srls';
}, },
// Labels // Labels
@@ -1021,6 +1088,15 @@
netRevenue: 'Reddito Imponibile', netRevenue: 'Reddito Imponibile',
taxDue: 'Imposta Sostitutiva (5%)' taxDue: 'Imposta Sostitutiva (5%)'
}; };
case 'srl':
case 'srls':
return {
...baseLabels,
subtotal: 'Imponibile',
grossRevenue: 'Fatturato Societario',
netRevenue: 'Utile Lordo',
taxDue: `IRES (${this.iresRate}%) + IRAP (${this.irapRate}%)`
};
default: default:
return baseLabels; return baseLabels;
} }
@@ -1038,7 +1114,7 @@
const subtotal = mvpCost + totalCustomCost; const subtotal = mvpCost + totalCustomCost;
const inpsCharge = (this.taxRegime !== 'occasionale' && this.includeINPS) const inpsCharge = (this.taxRegime !== 'occasionale' && this.taxRegime !== 'srl' && this.taxRegime !== 'srls' && this.includeINPS)
? subtotal * 0.04 ? subtotal * 0.04
: 0; : 0;
@@ -1051,6 +1127,10 @@
return this.calculateOccasionale(subtotal); return this.calculateOccasionale(subtotal);
case 'minimi': case 'minimi':
return this.calculateMinimi(subtotal, inpsCharge); return this.calculateMinimi(subtotal, inpsCharge);
case 'srl':
return this.calculateSRL(subtotal);
case 'srls':
return this.calculateSRLS(subtotal);
default: default:
return this.getEmptyResults(); return this.getEmptyResults();
} }
@@ -1141,6 +1221,53 @@
netRevenue: taxableIncome, inpsDue, taxDue, netIncome }; netRevenue: taxableIncome, inpsDue, taxDue, netIncome };
}, },
calculateSRL(subtotal) {
// SRL calculation
const iva = subtotal * 0.22;
const totalInvoice = subtotal + iva;
const amountDue = totalInvoice; // No ritenuta per SRL
const grossRevenue = subtotal; // Fatturato senza IVA (IVA è neutra)
const sellerFee = grossRevenue * 0.10;
const revenueAfterFee = grossRevenue - sellerFee;
// Deduzione costi e compenso amministratore
const totalDeductions = this.deductibleCosts + this.adminCompensation;
const taxableIncome = Math.max(0, revenueAfterFee - totalDeductions);
// Calcolo IRES e IRAP
const iresAmount = taxableIncome * (this.iresRate / 100);
const irapBase = revenueAfterFee; // IRAP si calcola sul valore della produzione
const irapAmount = irapBase * (this.irapRate / 100);
const totalTax = iresAmount + irapAmount;
const netIncome = revenueAfterFee - totalDeductions - totalTax;
return {
subtotal,
inpsCharge: 0,
iva,
totalInvoice,
withholdingTax: 0,
amountDue,
grossRevenue,
sellerFee,
netRevenue: revenueAfterFee,
inpsDue: 0, // Le SRL non hanno INPS gestione separata
taxDue: totalTax,
netIncome,
// Additional SRL specific values for reporting
iresAmount,
irapAmount,
deductions: totalDeductions
};
},
calculateSRLS(subtotal) {
// SRLS calculation (same as SRL but with potentially lower setup costs)
return this.calculateSRL(subtotal);
},
getEmptyResults() { getEmptyResults() {
return { subtotal: 0, inpsCharge: 0, iva: 0, totalInvoice: 0, return { subtotal: 0, inpsCharge: 0, iva: 0, totalInvoice: 0,
withholdingTax: 0, amountDue: 0, grossRevenue: 0, withholdingTax: 0, amountDue: 0, grossRevenue: 0,
@@ -1227,6 +1354,11 @@
supportRate: this.supportRate, supportRate: this.supportRate,
estimatedAnnualTaxable: this.estimatedAnnualTaxable, estimatedAnnualTaxable: this.estimatedAnnualTaxable,
includeINPS: this.includeINPS, includeINPS: this.includeINPS,
// SRL/SRLS fields
iresRate: this.iresRate,
irapRate: this.irapRate,
deductibleCosts: this.deductibleCosts,
adminCompensation: this.adminCompensation,
mvpDevHours: this.mvpDevHours, mvpDevHours: this.mvpDevHours,
mvpSupportHours: this.mvpSupportHours, mvpSupportHours: this.mvpSupportHours,
mvpTeamLeader: this.mvpTeamLeader, mvpTeamLeader: this.mvpTeamLeader,
@@ -1275,6 +1407,11 @@
this.supportRate = preventivo.supportRate || this.supportRate; this.supportRate = preventivo.supportRate || this.supportRate;
this.estimatedAnnualTaxable = preventivo.estimatedAnnualTaxable || this.estimatedAnnualTaxable; this.estimatedAnnualTaxable = preventivo.estimatedAnnualTaxable || this.estimatedAnnualTaxable;
this.includeINPS = preventivo.includeINPS !== undefined ? preventivo.includeINPS : this.includeINPS; this.includeINPS = preventivo.includeINPS !== undefined ? preventivo.includeINPS : this.includeINPS;
// SRL/SRLS fields
this.iresRate = preventivo.iresRate || this.iresRate;
this.irapRate = preventivo.irapRate || this.irapRate;
this.deductibleCosts = preventivo.deductibleCosts || this.deductibleCosts;
this.adminCompensation = preventivo.adminCompensation || this.adminCompensation;
this.mvpDevHours = preventivo.mvpDevHours || this.mvpDevHours; this.mvpDevHours = preventivo.mvpDevHours || this.mvpDevHours;
this.mvpSupportHours = preventivo.mvpSupportHours || this.mvpSupportHours; this.mvpSupportHours = preventivo.mvpSupportHours || this.mvpSupportHours;
this.mvpTeamLeader = preventivo.mvpTeamLeader || ''; this.mvpTeamLeader = preventivo.mvpTeamLeader || '';