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>
|
<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 || '';
|
||||||
|
|||||||
Reference in New Issue
Block a user