Grenzgänger-Dienste

Optimieren Sie Ihre grenzüberschreitende Situation mit unserer spezialisierten Expertise

Grenzüberschreitende Expertise

Optimierte grenzüberschreitende Verwaltung

Profitieren Sie von spezialisierter Unterstützung bei der Navigation durch die Komplexitäten grenzüberschreitender Steuer- und Sozialversicherungssysteme.

300+
Grenzgänger-Kunden

Steueroptimierung

Umfassende Analyse Ihrer Steuersituation und Optimierungsstrategien zur Reduzierung der Steuerlast bei Einhaltung der Vorschriften.

  • Schweizer Steuererklärung
  • Französische Steuererklärung
  • Steueroptimierung
  • Doppelbesteuerungsabkommen-Beratung

Sozialversicherung

Navigieren Sie durch die Schweizer und französischen Sozialversicherungssysteme und wählen Sie die vorteilhaftesten Optionen für Ihre Situation.

  • Krankenversicherungswahl
  • Sozialbeiträge
  • Arbeitslosenversicherung
  • Familienbeihilfen

Rentenplanung

Entwickeln Sie eine optimale Rentenstrategie durch Kombination der Schweizer und französischen Systeme für maximalen Nutzen.

  • 2. Säule Optimierung
  • 3. Säule
  • Französische Rentenkoordinierung
  • Rentenprojektion
Rentensimulator

Simulieren Sie Ihre Altersvorsorge

Entdecken Sie das Wachstumspotenzial Ihrer Altersvorsorge je nach Ihrem Profil und Ihren Zielen. Passen Sie Ihre Parameter an und visualisieren Sie die Entwicklung Ihres Kapitals in Echtzeit.

Meine Situation

Meine Risikobereitschaft

Mein Alter

37 Jahre
18 Jahre 65 Jahre

Meine jährlichen Beiträge

1 600 CHF
1 200 CHF 10 000 CHF

Konservatives Szenario

48'077 CHF

Ausgewogenes Szenario

51'676 CHF

Wachstumsszenario

55'633 CHF

Hypothetische Performance, basierend auf historischen Durchschnittsrenditen, vergangene Performances garantieren keine zukünftigen Performances, Renditen nicht garantiert.

FAQ

Häufig gestellte Fragen

Antworten auf die häufigsten Fragen zu grenzüberschreitenden Dienstleistungen

Welche Krankenversicherung sollte ich wählen?

Sie können zwischen der Schweizer Krankenversicherung oder dem Beibehalten Ihrer französischen Abdeckung wählen. Jede Option hat Vorteile je nach Ihrer Familiensituation und Gesundheitsbedürfnissen.

Gesundheit Versicherung

Kann ich zur 3. Säule beitragen?

Ja, als Grenzgänger können Sie zur 3. Säule beitragen und von Steuerabzügen in der Schweiz und manchmal in Frankreich profitieren.

3. Säule Rente

Wie optimiere ich meine Steuersituation?

Es gibt verschiedene Strategien: Optimierung der Abzüge, Wahl des Regimes, Koordinierung der Erklärungen. Jede Situation ist einzigartig und erfordert eine personalisierte Analyse.

Optimierung Strategie

Haben Sie weitere Fragen?

Unsere Experten sind hier, um alle Ihre spezifischen Fragen zu beantworten

Kontaktieren Sie uns
document.addEventListener('DOMContentLoaded', function() { // Sprachenauswahl Dropdown const dropdown = document.querySelector('.dropdown-menu-container'); const btn = dropdown.querySelector('.dropdown-btn'); btn.addEventListener('click', function(e) { e.stopPropagation(); dropdown.classList.toggle('open'); }); document.addEventListener('click', function() { dropdown.classList.remove('open'); }); // Sprachauswahl speichern saveLanguageChoice(); // Manuelle Auswahl speichern wenn Benutzer auf Flagge klickt const flagLinks = dropdown.querySelectorAll('.dropdown-content a'); flagLinks.forEach(link => { link.addEventListener('click', function() { localStorage.setItem('swisskap_language_choice', 'manual'); }); }); // Verbesserte Radio-Button-Funktionalität const radioButtons = document.querySelectorAll('input[type="radio"]'); radioButtons.forEach(radio => { radio.addEventListener('change', function() { console.log('Radio button changed:', this.name, this.value); // Visuelle Rückmeldung const radioOption = this.closest('.radio-option'); if (radioOption) { // Alle Radio-Optionen zurücksetzen document.querySelectorAll('.radio-option').forEach(option => { option.classList.remove('selected'); }); // Aktuelle Option markieren radioOption.classList.add('selected'); } // Simulator neu berechnen - Direkte Aufrufe console.log('Triggering simulator update...'); // Manuell die Simulator-Funktionen aufrufen const ageSlider = document.getElementById('age-slider'); const versementsSlider = document.getElementById('versements-slider'); const ageDisplay = document.getElementById('age-value'); const versementsDisplay = document.getElementById('versements-value'); if (ageSlider && versementsSlider) { console.log('Found sliders, updating...'); // Update displays if (ageDisplay) { const age = parseInt(ageSlider.value); ageDisplay.textContent = age + ' Jahre'; } if (versementsDisplay) { const versements = parseInt(versementsSlider.value); versementsDisplay.textContent = new Intl.NumberFormat('de-CH', { style: 'currency', currency: 'CHF', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(versements); } // Update max versements based on situation const situation = document.querySelector('input[name="situation"]:checked')?.value || 'salarie'; const maxLabel = document.getElementById('versements-max-label-residents'); if (versementsSlider) { if (situation === 'independant') { versementsSlider.max = '36000'; if (maxLabel) maxLabel.textContent = '36 000 CHF'; if (parseInt(versementsSlider.value) > 36000) { versementsSlider.value = '36000'; } } else { versementsSlider.max = '10000'; if (maxLabel) maxLabel.textContent = '10 000 CHF'; if (parseInt(versementsSlider.value) > 10000) { versementsSlider.value = '10000'; } } } // Force chart update console.log('Forcing chart update...'); // Call manual chart update function if (typeof window.updateRetirementChart === 'function') { console.log('Calling manual chart update...'); window.updateRetirementChart(); } // Also try to trigger slider events const inputEvent = new Event('input', { bubbles: true }); ageSlider.dispatchEvent(inputEvent); versementsSlider.dispatchEvent(inputEvent); // Try to call the original simulator functions as backup if (typeof calculateAndUpdate === 'function') { console.log('Calling calculateAndUpdate as backup...'); calculateAndUpdate(); } // Manual chart update as fallback setTimeout(() => { console.log('Manual chart update...'); const chartCanvas = document.getElementById('retirement-chart-residents'); if (chartCanvas) { console.log('Chart canvas found, triggering update...'); // Force a resize event to trigger chart redraw window.dispatchEvent(new Event('resize')); } else { console.log('Chart canvas not found'); } }, 100); } else { console.log('Sliders not found:', {ageSlider, versementsSlider}); } }); }); // Debug: Log alle Radio-Buttons console.log('Found radio buttons:', radioButtons.length); radioButtons.forEach((radio, index) => { console.log(`Radio ${index}:`, radio.name, radio.value, radio.checked); }); // Initial Radio-Button-Status setzen const checkedRadios = document.querySelectorAll('input[type="radio"]:checked'); checkedRadios.forEach(radio => { const radioOption = radio.closest('.radio-option'); if (radioOption) { radioOption.classList.add('selected'); } }); // Klick-Events für Radio-Labels const radioLabels = document.querySelectorAll('.radio-label'); radioLabels.forEach(label => { label.addEventListener('click', function() { const radio = this.previousElementSibling.previousElementSibling; if (radio) { radio.checked = true; radio.dispatchEvent(new Event('change')); // Special handling for Dynamisch button if (radio.value === 'dynamisch') { console.log('Dynamisch button clicked, forcing update...'); setTimeout(() => { if (typeof window.updateRetirementChart === 'function') { window.updateRetirementChart(); } }, 50); } } }); }); // Force simulator initialization after a delay setTimeout(() => { console.log('Forcing simulator initialization...'); // Trigger initial calculation const ageSlider = document.getElementById('age-slider-residents'); if (ageSlider && typeof calculateAndUpdate === 'function') { console.log('Initializing simulator...'); calculateAndUpdate(); } else { console.log('Cannot initialize simulator:', {ageSlider, calculateAndUpdate: typeof calculateAndUpdate}); } // Set initial radio button states const checkedRadios = document.querySelectorAll('input[type="radio"]:checked'); checkedRadios.forEach(radio => { const radioOption = radio.closest('.radio-option'); if (radioOption) { radioOption.classList.add('selected'); } }); // Special event listener for Dynamisch button const dynamischRadio = document.getElementById('dynamisch'); if (dynamischRadio) { console.log('Adding special listener for Dynamisch button'); dynamischRadio.addEventListener('change', function() { console.log('Dynamisch radio changed, forcing chart update...'); setTimeout(() => { if (typeof window.updateRetirementChart === 'function') { window.updateRetirementChart(); } }, 100); }); } else { console.log('Dynamisch radio button not found'); } }, 1000); // Manual chart update function window.updateRetirementChart = function() { console.log('Manual chart update called...'); const ageSlider = document.getElementById('age-slider-residents'); const versementsSlider = document.getElementById('versements-slider-residents'); const chartCanvas = document.getElementById('retirement-chart-residents'); if (!ageSlider || !versementsSlider || !chartCanvas) { console.log('Required elements not found:', {ageSlider, versementsSlider, chartCanvas}); return; } const age = parseInt(ageSlider.value); const annualContribution = parseInt(versementsSlider.value); const situation = document.querySelector('input[name="situation-residents"]:checked')?.value || 'salarie'; const riskProfile = document.querySelector('input[name="risk-residents"]:checked')?.value || 'conservateur'; console.log('Chart update parameters:', {age, annualContribution, situation, riskProfile}); // Debug: Check all radio buttons const allRiskRadios = document.querySelectorAll('input[name="risk-residents"]'); console.log('All risk radio buttons:'); allRiskRadios.forEach((radio, index) => { console.log(`Radio ${index}:`, radio.value, radio.checked, radio.id); }); // Calculate retirement scenarios const yearsToRetirement = Math.max(1, 65 - age); // Risk profiles with different returns const riskProfiles = { conservateur: { pessimiste: 0.02, probable: 0.035, optimiste: 0.05 }, equilibre: { pessimiste: 0.035, probable: 0.055, optimiste: 0.075 }, agressif: { pessimiste: 0.05, probable: 0.08, optimiste: 0.12 } }; // Map German values to internal keys let mappedRiskProfile = riskProfile; if (riskProfile === 'dynamisch') { mappedRiskProfile = 'agressif'; console.log('Mapping dynamisch to agressif'); } console.log('Risk profile mapping:', {original: riskProfile, mapped: mappedRiskProfile}); const returns = riskProfiles[mappedRiskProfile]; // Calculate scenarios const scenarios = {}; Object.keys(returns).forEach(scenario => { const annualReturn = returns[scenario]; let totalValue = 0; for (let year = 1; year <= yearsToRetirement; year++) { totalValue += annualContribution * Math.pow(1 + annualReturn, yearsToRetirement - year + 1); } scenarios[scenario] = totalValue; }); // Update result displays const resultPessimiste = document.getElementById('result-pessimiste-residents'); const resultProbable = document.getElementById('result-probable-residents'); const resultOptimiste = document.getElementById('result-optimiste-residents'); if (resultPessimiste) { resultPessimiste.textContent = new Intl.NumberFormat('de-CH', { style: 'currency', currency: 'CHF', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(scenarios.pessimiste); } if (resultProbable) { resultProbable.textContent = new Intl.NumberFormat('de-CH', { style: 'currency', currency: 'CHF', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(scenarios.probable); } if (resultOptimiste) { resultOptimiste.textContent = new Intl.NumberFormat('de-CH', { style: 'currency', currency: 'CHF', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(scenarios.optimiste); } console.log('Chart update completed'); }; });