This commit is contained in:
149
index.html
149
index.html
@@ -321,10 +321,12 @@
|
||||
<label class="block text-sm font-medium text-gray-700 mb-2">Tipologia Fiscale</label>
|
||||
<select x-model="taxRegime"
|
||||
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="ordinario">Regime Ordinario (Semplificato)</option>
|
||||
<option value="forfettario">Regime Forfettario (Ditta Individuale)</option>
|
||||
<option value="ordinario">Regime Ordinario Semplificato (Ditta Individuale)</option>
|
||||
<option value="occasionale">Lavoro Autonomo Occasionale</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>
|
||||
</div>
|
||||
|
||||
@@ -365,6 +367,64 @@
|
||||
</div>
|
||||
</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 -->
|
||||
<div class="md:col-span-2" x-show="taxRegime !== 'occasionale'">
|
||||
<div class="flex items-center justify-between p-4 bg-blue-50 rounded-lg">
|
||||
@@ -803,6 +863,13 @@
|
||||
supportRate: 40,
|
||||
estimatedAnnualTaxable: 25000,
|
||||
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,
|
||||
mvpSupportHours: 20,
|
||||
mvpTeamLeader: '',
|
||||
@@ -968,10 +1035,10 @@
|
||||
|
||||
// Computed properties for UI
|
||||
get showInpsCharge() {
|
||||
return this.taxRegime !== 'occasionale';
|
||||
return this.taxRegime !== 'occasionale' && this.taxRegime !== 'srl' && this.taxRegime !== 'srls';
|
||||
},
|
||||
get showIva() {
|
||||
return this.taxRegime === 'ordinario';
|
||||
return this.taxRegime === 'ordinario' || this.taxRegime === 'srl' || this.taxRegime === 'srls';
|
||||
},
|
||||
get showWithholdingTax() {
|
||||
return this.taxRegime === 'ordinario' || this.taxRegime === 'occasionale';
|
||||
@@ -980,7 +1047,7 @@
|
||||
return this.taxRegime !== 'occasionale';
|
||||
},
|
||||
get showInpsDue() {
|
||||
return this.taxRegime !== 'occasionale';
|
||||
return this.taxRegime !== 'occasionale' && this.taxRegime !== 'srl' && this.taxRegime !== 'srls';
|
||||
},
|
||||
|
||||
// Labels
|
||||
@@ -1021,6 +1088,15 @@
|
||||
netRevenue: 'Reddito Imponibile',
|
||||
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:
|
||||
return baseLabels;
|
||||
}
|
||||
@@ -1038,7 +1114,7 @@
|
||||
|
||||
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
|
||||
: 0;
|
||||
|
||||
@@ -1051,6 +1127,10 @@
|
||||
return this.calculateOccasionale(subtotal);
|
||||
case 'minimi':
|
||||
return this.calculateMinimi(subtotal, inpsCharge);
|
||||
case 'srl':
|
||||
return this.calculateSRL(subtotal);
|
||||
case 'srls':
|
||||
return this.calculateSRLS(subtotal);
|
||||
default:
|
||||
return this.getEmptyResults();
|
||||
}
|
||||
@@ -1141,6 +1221,53 @@
|
||||
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() {
|
||||
return { subtotal: 0, inpsCharge: 0, iva: 0, totalInvoice: 0,
|
||||
withholdingTax: 0, amountDue: 0, grossRevenue: 0,
|
||||
@@ -1227,6 +1354,11 @@
|
||||
supportRate: this.supportRate,
|
||||
estimatedAnnualTaxable: this.estimatedAnnualTaxable,
|
||||
includeINPS: this.includeINPS,
|
||||
// SRL/SRLS fields
|
||||
iresRate: this.iresRate,
|
||||
irapRate: this.irapRate,
|
||||
deductibleCosts: this.deductibleCosts,
|
||||
adminCompensation: this.adminCompensation,
|
||||
mvpDevHours: this.mvpDevHours,
|
||||
mvpSupportHours: this.mvpSupportHours,
|
||||
mvpTeamLeader: this.mvpTeamLeader,
|
||||
@@ -1275,6 +1407,11 @@
|
||||
this.supportRate = preventivo.supportRate || this.supportRate;
|
||||
this.estimatedAnnualTaxable = preventivo.estimatedAnnualTaxable || this.estimatedAnnualTaxable;
|
||||
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.mvpSupportHours = preventivo.mvpSupportHours || this.mvpSupportHours;
|
||||
this.mvpTeamLeader = preventivo.mvpTeamLeader || '';
|
||||
|
||||
Reference in New Issue
Block a user