Spaces:
Running
Running
🐳 25/03 - 16:09 - CONTEXTE IMPORTANTTu travailles sur un simulateur HTML/JS déjà existant pour TIE.NE PAS recréer la page.NE PAS dupliquer des composants.NE PAS refaire le simulateur de zéro.TU DOIS
Browse files- simulateur-pertes.html +37 -49
simulateur-pertes.html
CHANGED
|
@@ -887,49 +887,49 @@
|
|
| 887 |
return calculationResults;
|
| 888 |
}
|
| 889 |
|
| 890 |
-
// TIE Projection Logic -
|
| 891 |
function calculateTIEProjection() {
|
| 892 |
const currentPrivateRatio = calculationResults.pctPrivate;
|
| 893 |
const caTotal = calculationResults.caTotal;
|
| 894 |
-
const
|
|
|
|
|
|
|
| 895 |
|
| 896 |
-
// Logic: if private < 30%, show growth potential
|
| 897 |
if (currentPrivateRatio < 30 && caTotal > 0) {
|
| 898 |
-
//
|
| 899 |
-
const
|
| 900 |
-
const additionalPrivateRevenue = targetPrivateRevenue - currentPrivateRevenue;
|
| 901 |
|
| 902 |
-
//
|
| 903 |
-
|
| 904 |
-
const commissionSaved = additionalPrivateRevenue * 0.22;
|
| 905 |
|
| 906 |
-
//
|
| 907 |
-
const
|
| 908 |
|
| 909 |
-
//
|
| 910 |
-
|
| 911 |
-
// So net gain = additionalPrivateRevenue * (1 - 0.22) - additionalPrivateRevenue * costRatio?
|
| 912 |
-
// Simplified: The gain is roughly the commission saved minus additional costs
|
| 913 |
|
| 914 |
-
//
|
| 915 |
-
|
| 916 |
-
// Actually the calculation is: for platform revenue, driver keeps 78% after commission, then pays 22% social on that
|
| 917 |
-
// For private: driver keeps 100%, pays 22% social on full amount
|
| 918 |
|
| 919 |
-
//
|
| 920 |
-
|
| 921 |
-
// Private net: additionalPrivateRevenue * 0.78
|
| 922 |
-
// Gain = additionalPrivateRevenue * (0.78 - 0.6084) = additionalPrivateRevenue * 0.1716
|
| 923 |
|
| 924 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 925 |
|
| 926 |
tieProjection = {
|
| 927 |
hasPotential: true,
|
| 928 |
currentPrivateRatio: currentPrivateRatio,
|
| 929 |
targetPrivateRatio: 30,
|
| 930 |
-
monthlyGain:
|
| 931 |
title: "Potentiel de revenus privés",
|
| 932 |
-
message:
|
| 933 |
};
|
| 934 |
} else {
|
| 935 |
tieProjection = {
|
|
@@ -938,7 +938,7 @@
|
|
| 938 |
targetPrivateRatio: 30,
|
| 939 |
monthlyGain: 0,
|
| 940 |
title: "Bonne répartition actuelle",
|
| 941 |
-
message: "Votre
|
| 942 |
};
|
| 943 |
}
|
| 944 |
|
|
@@ -1073,26 +1073,6 @@
|
|
| 1073 |
window.currentTIEScore = calculateTIEScore();
|
| 1074 |
}
|
| 1075 |
|
| 1076 |
-
// Info button tooltips data
|
| 1077 |
-
const infoContent = {
|
| 1078 |
-
usage: "Ce coût inclut carburant/électricité, entretien, usure et amortissement du véhicule. Plus vous roulez, plus ce coût augmente.",
|
| 1079 |
-
hourly: "Votre revenu réel par heure après toutes charges. C'est l'indicateur le plus fiable pour évaluer votre rentabilité.",
|
| 1080 |
-
private: "Les courses privées évitent les commissions des plateformes. À activité équivalente, elles génèrent plus de bénéfices.",
|
| 1081 |
-
score: "Le score TIE mesure la rentabilité globale de votre activité selon vos revenus, votre efficacité et votre dépendance aux plateformes."
|
| 1082 |
-
};
|
| 1083 |
-
|
| 1084 |
-
// Setup info button listeners
|
| 1085 |
-
document.querySelectorAll('.info-btn').forEach(btn => {
|
| 1086 |
-
btn.addEventListener('click', (e) => {
|
| 1087 |
-
e.stopPropagation();
|
| 1088 |
-
const infoType = btn.dataset.info;
|
| 1089 |
-
const content = infoContent[infoType];
|
| 1090 |
-
if (content) {
|
| 1091 |
-
alert(content);
|
| 1092 |
-
}
|
| 1093 |
-
});
|
| 1094 |
-
});
|
| 1095 |
-
|
| 1096 |
function displayScore() {
|
| 1097 |
const score = window.currentTIEScore || calculateTIEScore();
|
| 1098 |
|
|
@@ -1352,10 +1332,18 @@
|
|
| 1352 |
});
|
| 1353 |
}
|
| 1354 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1355 |
// Initialize
|
| 1356 |
updateProgress();
|
| 1357 |
|
| 1358 |
-
// Setup info button click handlers
|
| 1359 |
document.querySelectorAll('.info-btn').forEach(btn => {
|
| 1360 |
btn.addEventListener('click', (e) => {
|
| 1361 |
e.preventDefault();
|
|
@@ -1363,7 +1351,7 @@
|
|
| 1363 |
const infoType = btn.dataset.info;
|
| 1364 |
const content = infoContent[infoType];
|
| 1365 |
if (content) {
|
| 1366 |
-
// Create
|
| 1367 |
const tooltip = document.createElement('div');
|
| 1368 |
tooltip.className = 'fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm p-4';
|
| 1369 |
tooltip.innerHTML = `
|
|
|
|
| 887 |
return calculationResults;
|
| 888 |
}
|
| 889 |
|
| 890 |
+
// TIE Projection Logic - New calculation based on 2€/km valuation
|
| 891 |
function calculateTIEProjection() {
|
| 892 |
const currentPrivateRatio = calculationResults.pctPrivate;
|
| 893 |
const caTotal = calculationResults.caTotal;
|
| 894 |
+
const platformRevenue = formData.platformRevenue;
|
| 895 |
+
const privateRevenue = formData.privateRevenue;
|
| 896 |
+
const distancePerMonth = formData.distancePerMonth;
|
| 897 |
|
|
|
|
| 898 |
if (currentPrivateRatio < 30 && caTotal > 0) {
|
| 899 |
+
// A. Estimer les km privés actuels (base 2€/km)
|
| 900 |
+
const currentPrivateKmEstimate = privateRevenue / 2;
|
|
|
|
| 901 |
|
| 902 |
+
// B. Estimer les km plateforme actuels
|
| 903 |
+
const currentPlatformKmEstimate = Math.max(1, distancePerMonth - currentPrivateKmEstimate);
|
|
|
|
| 904 |
|
| 905 |
+
// C. Calculer le revenu moyen plateforme au km
|
| 906 |
+
const currentPlatformRevenuePerKm = platformRevenue / currentPlatformKmEstimate;
|
| 907 |
|
| 908 |
+
// D. Calculer l'objectif à 30% d'activité privée en km
|
| 909 |
+
const targetPrivateKm = distancePerMonth * 0.30;
|
|
|
|
|
|
|
| 910 |
|
| 911 |
+
// E. Calculer le volume de km privés supplémentaires nécessaires
|
| 912 |
+
const additionalPrivateKm = Math.max(0, targetPrivateKm - currentPrivateKmEstimate);
|
|
|
|
|
|
|
| 913 |
|
| 914 |
+
// F. Valoriser ces km supplémentaires en privé (2€/km)
|
| 915 |
+
const newPrivateRevenueEquivalent = additionalPrivateKm * 2;
|
|
|
|
|
|
|
| 916 |
|
| 917 |
+
// G. Estimer le revenu plateforme remplacé sur ce même volume
|
| 918 |
+
const replacedPlatformRevenueEquivalent = additionalPrivateKm * currentPlatformRevenuePerKm;
|
| 919 |
+
|
| 920 |
+
// H. Calculer le gain brut de CA
|
| 921 |
+
const grossRevenueGain = newPrivateRevenueEquivalent - replacedPlatformRevenueEquivalent;
|
| 922 |
+
|
| 923 |
+
// I. Calculer le gain net après charges sociales (22%)
|
| 924 |
+
const netRevenueGain = Math.max(0, grossRevenueGain * 0.78);
|
| 925 |
|
| 926 |
tieProjection = {
|
| 927 |
hasPotential: true,
|
| 928 |
currentPrivateRatio: currentPrivateRatio,
|
| 929 |
targetPrivateRatio: 30,
|
| 930 |
+
monthlyGain: netRevenueGain,
|
| 931 |
title: "Potentiel de revenus privés",
|
| 932 |
+
message: `En atteignant 30% d'activité privée, vous pourriez améliorer votre bénéfice mensuel d'environ +${Math.round(netRevenueGain)} € par mois. Cette projection se base sur une valorisation moyenne des courses privées à 2 €/km.`
|
| 933 |
};
|
| 934 |
} else {
|
| 935 |
tieProjection = {
|
|
|
|
| 938 |
targetPrivateRatio: 30,
|
| 939 |
monthlyGain: 0,
|
| 940 |
title: "Bonne répartition actuelle",
|
| 941 |
+
message: "Votre activité privée est déjà bien développée. Vos prochains leviers concernent surtout votre taux horaire, vos coûts d'usage ou la sélection de vos courses."
|
| 942 |
};
|
| 943 |
}
|
| 944 |
|
|
|
|
| 1073 |
window.currentTIEScore = calculateTIEScore();
|
| 1074 |
}
|
| 1075 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1076 |
function displayScore() {
|
| 1077 |
const score = window.currentTIEScore || calculateTIEScore();
|
| 1078 |
|
|
|
|
| 1332 |
});
|
| 1333 |
}
|
| 1334 |
|
| 1335 |
+
// Info button tooltips data
|
| 1336 |
+
const infoContent = {
|
| 1337 |
+
usage: "Ce coût inclut carburant/électricité, entretien, usure et amortissement du véhicule. Plus vous roulez, plus ce coût augmente.",
|
| 1338 |
+
hourly: "Votre revenu réel par heure après toutes charges. C'est l'indicateur le plus fiable pour évaluer votre rentabilité.",
|
| 1339 |
+
private: "Les courses privées évitent les commissions des plateformes. À activité équivalente, elles génèrent plus de bénéfices.",
|
| 1340 |
+
score: "Le score TIE mesure la rentabilité globale de votre activité selon vos revenus, votre efficacité et votre dépendance aux plateformes."
|
| 1341 |
+
};
|
| 1342 |
+
|
| 1343 |
// Initialize
|
| 1344 |
updateProgress();
|
| 1345 |
|
| 1346 |
+
// Setup info button click handlers - unique modal system
|
| 1347 |
document.querySelectorAll('.info-btn').forEach(btn => {
|
| 1348 |
btn.addEventListener('click', (e) => {
|
| 1349 |
e.preventDefault();
|
|
|
|
| 1351 |
const infoType = btn.dataset.info;
|
| 1352 |
const content = infoContent[infoType];
|
| 1353 |
if (content) {
|
| 1354 |
+
// Create premium modal (single interface)
|
| 1355 |
const tooltip = document.createElement('div');
|
| 1356 |
tooltip.className = 'fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm p-4';
|
| 1357 |
tooltip.innerHTML = `
|