@ansvar/ch-farm-grants-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/check-freshness.yml +18 -0
- package/.github/workflows/ci.yml +21 -0
- package/.github/workflows/codeql.yml +25 -0
- package/.github/workflows/ghcr-build.yml +45 -0
- package/.github/workflows/gitleaks.yml +18 -0
- package/.github/workflows/ingest.yml +28 -0
- package/.github/workflows/publish.yml +24 -0
- package/CHANGELOG.md +22 -0
- package/CODEOWNERS +1 -0
- package/COVERAGE.md +45 -0
- package/DISCLAIMER.md +39 -0
- package/Dockerfile +26 -0
- package/LICENSE +17 -0
- package/PRIVACY.md +36 -0
- package/README.md +80 -0
- package/SECURITY.md +31 -0
- package/TOOLS.md +154 -0
- package/data/coverage.json +19 -0
- package/data/database.db +0 -0
- package/data/sources.yml +29 -0
- package/dist/db.d.ts +25 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +167 -0
- package/dist/db.js.map +1 -0
- package/dist/http-server.d.ts +2 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +261 -0
- package/dist/http-server.js.map +1 -0
- package/dist/jurisdiction.d.ts +18 -0
- package/dist/jurisdiction.d.ts.map +1 -0
- package/dist/jurisdiction.js +16 -0
- package/dist/jurisdiction.js.map +1 -0
- package/dist/metadata.d.ts +10 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +22 -0
- package/dist/metadata.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +207 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/about.d.ts +15 -0
- package/dist/tools/about.d.ts.map +1 -0
- package/dist/tools/about.js +28 -0
- package/dist/tools/about.js.map +1 -0
- package/dist/tools/check-eligibility.d.ts +31 -0
- package/dist/tools/check-eligibility.d.ts.map +1 -0
- package/dist/tools/check-eligibility.js +57 -0
- package/dist/tools/check-eligibility.js.map +1 -0
- package/dist/tools/check-freshness.d.ts +15 -0
- package/dist/tools/check-freshness.d.ts.map +1 -0
- package/dist/tools/check-freshness.js +26 -0
- package/dist/tools/check-freshness.js.map +1 -0
- package/dist/tools/get-application-deadlines.d.ts +27 -0
- package/dist/tools/get-application-deadlines.d.ts.map +1 -0
- package/dist/tools/get-application-deadlines.js +40 -0
- package/dist/tools/get-application-deadlines.js.map +1 -0
- package/dist/tools/get-grant-details.d.ts +42 -0
- package/dist/tools/get-grant-details.d.ts.map +1 -0
- package/dist/tools/get-grant-details.js +24 -0
- package/dist/tools/get-grant-details.js.map +1 -0
- package/dist/tools/get-payment-rates.d.ts +49 -0
- package/dist/tools/get-payment-rates.d.ts.map +1 -0
- package/dist/tools/get-payment-rates.js +37 -0
- package/dist/tools/get-payment-rates.js.map +1 -0
- package/dist/tools/list-grant-options.d.ts +56 -0
- package/dist/tools/list-grant-options.d.ts.map +1 -0
- package/dist/tools/list-grant-options.js +39 -0
- package/dist/tools/list-grant-options.js.map +1 -0
- package/dist/tools/list-sources.d.ts +18 -0
- package/dist/tools/list-sources.d.ts.map +1 -0
- package/dist/tools/list-sources.js +51 -0
- package/dist/tools/list-sources.js.map +1 -0
- package/dist/tools/search-application-guidance.d.ts +36 -0
- package/dist/tools/search-application-guidance.d.ts.map +1 -0
- package/dist/tools/search-application-guidance.js +52 -0
- package/dist/tools/search-application-guidance.js.map +1 -0
- package/dist/tools/search-grants.d.ts +25 -0
- package/dist/tools/search-grants.d.ts.map +1 -0
- package/dist/tools/search-grants.js +26 -0
- package/dist/tools/search-grants.js.map +1 -0
- package/docker-compose.yml +12 -0
- package/eslint.config.js +26 -0
- package/package.json +54 -0
- package/scripts/ingest.ts +742 -0
- package/server.json +41 -0
- package/src/db.ts +208 -0
- package/src/http-server.ts +293 -0
- package/src/jurisdiction.ts +30 -0
- package/src/metadata.ts +32 -0
- package/src/server.ts +230 -0
- package/src/tools/about.ts +29 -0
- package/src/tools/check-eligibility.ts +81 -0
- package/src/tools/check-freshness.ts +42 -0
- package/src/tools/get-application-deadlines.ts +55 -0
- package/src/tools/get-grant-details.ts +51 -0
- package/src/tools/get-payment-rates.ts +60 -0
- package/src/tools/list-grant-options.ts +63 -0
- package/src/tools/list-sources.ts +65 -0
- package/src/tools/search-application-guidance.ts +59 -0
- package/src/tools/search-grants.ts +35 -0
- package/tests/db.test.ts +69 -0
- package/tests/helpers/seed-db.ts +188 -0
- package/tests/jurisdiction.test.ts +35 -0
- package/tests/tools/about.test.ts +23 -0
- package/tests/tools/check-freshness.test.ts +53 -0
- package/tests/tools/list-sources.test.ts +47 -0
- package/tests/tools/search-grants.test.ts +57 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,742 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Switzerland Farm Grants MCP — Data Ingestion Script
|
|
3
|
+
*
|
|
4
|
+
* Populates the database with Swiss structural improvement grant data from:
|
|
5
|
+
* - Strukturverbesserungsverordnung (SVV, SR 913.1)
|
|
6
|
+
* - BLW Weisungen Investitionskredite und Beitraege
|
|
7
|
+
* - Kantonale Landwirtschaftsaemter — kantonale Beitragssaetze
|
|
8
|
+
* - AGRIDEA — Beratungsunterlagen, Merkblaetter
|
|
9
|
+
* - Schweizer Berghilfe — ergaenzende private Foerderung
|
|
10
|
+
*
|
|
11
|
+
* All data in German, amounts in CHF.
|
|
12
|
+
*
|
|
13
|
+
* Usage: npm run ingest
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { createDatabase } from '../src/db.js';
|
|
17
|
+
import { mkdirSync, writeFileSync } from 'fs';
|
|
18
|
+
|
|
19
|
+
mkdirSync('data', { recursive: true });
|
|
20
|
+
const db = createDatabase('data/database.db');
|
|
21
|
+
|
|
22
|
+
const now = new Date().toISOString().split('T')[0];
|
|
23
|
+
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// 1. Grants — Swiss structural improvement programmes
|
|
26
|
+
// Sources: SVV (SR 913.1), BLW Weisungen, LwG Art. 77a/77b, GSchG Art. 62a
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
|
|
29
|
+
interface Grant {
|
|
30
|
+
id: string;
|
|
31
|
+
name: string;
|
|
32
|
+
grant_type: string;
|
|
33
|
+
description: string;
|
|
34
|
+
federal_rate_pct: number | null;
|
|
35
|
+
max_amount: number | null;
|
|
36
|
+
duration_years: number | null;
|
|
37
|
+
zone_bonus: Record<string, string> | null;
|
|
38
|
+
legal_basis: string;
|
|
39
|
+
language: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const grants: Grant[] = [
|
|
43
|
+
// --- Investitionskredite (zinslose Darlehen) ---
|
|
44
|
+
{
|
|
45
|
+
id: 'ik-oekonomiegebaeude',
|
|
46
|
+
name: 'Investitionskredit Oekonomiegebaeude',
|
|
47
|
+
grant_type: 'investitionskredit',
|
|
48
|
+
description: 'Zinsloses Darlehen des Bundes fuer den Bau oder Umbau von Oekonomiegebaeuden (Staelle, Scheunen, Remisen). Laufzeit 20 Jahre, Rueckzahlung in gleichen Jahresraten. Projekt muss vor Baubeginn bewilligt werden. BTS-konforme Staelle werden bevorzugt behandelt.',
|
|
49
|
+
federal_rate_pct: null,
|
|
50
|
+
max_amount: null,
|
|
51
|
+
duration_years: 20,
|
|
52
|
+
zone_bonus: JSON.parse(JSON.stringify({
|
|
53
|
+
bergzone_i: 'Erhoehter Kreditrahmen moeglich',
|
|
54
|
+
bergzone_ii: 'Erhoehter Kreditrahmen moeglich',
|
|
55
|
+
bergzone_iii: 'Erhoehter Kreditrahmen + vereinfachtes Verfahren',
|
|
56
|
+
bergzone_iv: 'Erhoehter Kreditrahmen + vereinfachtes Verfahren',
|
|
57
|
+
soemmerungsgebiet: 'Alpgebaeude — separates Programm',
|
|
58
|
+
})),
|
|
59
|
+
legal_basis: 'SVV Art. 18-20, LwG Art. 106',
|
|
60
|
+
language: 'DE',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: 'ik-wohnhaus',
|
|
64
|
+
name: 'Investitionskredit Wohnhaus',
|
|
65
|
+
grant_type: 'investitionskredit',
|
|
66
|
+
description: 'Zinsloses Darlehen fuer den Bau oder die Renovation des Betriebsleiterwohnhauses. Nur fuer Betriebsleiter mit Haupterwerb Landwirtschaft. Max. Wohnflaeche gemaess SVV. Laufzeit 20 Jahre.',
|
|
67
|
+
federal_rate_pct: null,
|
|
68
|
+
max_amount: null,
|
|
69
|
+
duration_years: 20,
|
|
70
|
+
zone_bonus: JSON.parse(JSON.stringify({
|
|
71
|
+
bergzone_i: 'Hoeherer Kreditrahmen als Talzone',
|
|
72
|
+
bergzone_ii: 'Hoeherer Kreditrahmen als Talzone',
|
|
73
|
+
bergzone_iii: 'Hoeherer Kreditrahmen als Talzone',
|
|
74
|
+
bergzone_iv: 'Hoeherer Kreditrahmen als Talzone',
|
|
75
|
+
})),
|
|
76
|
+
legal_basis: 'SVV Art. 21, LwG Art. 106',
|
|
77
|
+
language: 'DE',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: 'ik-diversifikation',
|
|
81
|
+
name: 'Investitionskredit Diversifikation',
|
|
82
|
+
grant_type: 'investitionskredit',
|
|
83
|
+
description: 'Zinsloses Darlehen fuer Diversifikationsprojekte: Agrotourismus (Ferienwohnungen, Schlafen im Stroh), Hofladen, Hofverarbeitung (Kaeserei, Metzgerei, Brennerei, Baeuerliche Speisewirtschaft). Projekt muss betrieblich verknuepft sein. Laufzeit 20 Jahre.',
|
|
84
|
+
federal_rate_pct: null,
|
|
85
|
+
max_amount: null,
|
|
86
|
+
duration_years: 20,
|
|
87
|
+
zone_bonus: null,
|
|
88
|
+
legal_basis: 'SVV Art. 22, LwG Art. 106',
|
|
89
|
+
language: 'DE',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
id: 'ik-alpgebaeude',
|
|
93
|
+
name: 'Investitionskredit Alpgebaeude',
|
|
94
|
+
grant_type: 'investitionskredit',
|
|
95
|
+
description: 'Zinsloses Darlehen fuer den Bau oder Umbau von Alpgebaeuden (Sennhuetten, Alphirtenunterkuenfte, Alpkaesereien, Alpstaelle). Erhoehte Beitraege moeglich, da Baukosten im Alp- und Soemmerungsgebiet wesentlich hoeher. Laufzeit 20 Jahre.',
|
|
96
|
+
federal_rate_pct: null,
|
|
97
|
+
max_amount: null,
|
|
98
|
+
duration_years: 20,
|
|
99
|
+
zone_bonus: JSON.parse(JSON.stringify({
|
|
100
|
+
soemmerungsgebiet: 'Hoehere Kreditlimite fuer Alpgebaeude (bis 50% der anrechenbaren Kosten als Beitrag moeglich)',
|
|
101
|
+
})),
|
|
102
|
+
legal_basis: 'SVV Art. 18-20, Art. 40-44, LwG Art. 106',
|
|
103
|
+
language: 'DE',
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
// --- Beitraege (Bund + Kanton) ---
|
|
107
|
+
{
|
|
108
|
+
id: 'beitrag-stallbau',
|
|
109
|
+
name: 'Beitrag Stallbau (einzelbetrieblich)',
|
|
110
|
+
grant_type: 'beitrag',
|
|
111
|
+
description: 'Bundesbeitrag fuer den Neu- oder Umbau von Staellen. Bund uebernimmt max. 20-30% der anrechenbaren Kosten, Kanton ergaenzt mit variablem Anteil. BTS-konforme Bauten (Laufstall, Liegebereich, Einstreu) werden bevorzugt. RAUS-Ausgestaltung wird positiv bewertet.',
|
|
112
|
+
federal_rate_pct: 25,
|
|
113
|
+
max_amount: null,
|
|
114
|
+
duration_years: null,
|
|
115
|
+
zone_bonus: JSON.parse(JSON.stringify({
|
|
116
|
+
huegelzone: 'Erhoehter Bundesbeitrag (bis 30%)',
|
|
117
|
+
bergzone_i: 'Erhoehter Bundesbeitrag (bis 35%)',
|
|
118
|
+
bergzone_ii: 'Erhoehter Bundesbeitrag (bis 35%)',
|
|
119
|
+
bergzone_iii: 'Erhoehter Bundesbeitrag (bis 40%)',
|
|
120
|
+
bergzone_iv: 'Erhoehter Bundesbeitrag (bis 40%)',
|
|
121
|
+
})),
|
|
122
|
+
legal_basis: 'SVV Art. 18-20, LwG Art. 87-89',
|
|
123
|
+
language: 'DE',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
id: 'beitrag-hofduengerlager',
|
|
127
|
+
name: 'Beitrag Hofduengerlager',
|
|
128
|
+
grant_type: 'beitrag',
|
|
129
|
+
description: 'Bundesbeitrag fuer den Bau oder die Vergroesserung von Hofduengerlagern (Guellegruben, Mistplaetze) und fuer die Abdeckung bestehender Guellegruben. Ziel: Reduktion von Ammoniakemissionen und Gewaesserschutz. Mindestlagerkapazitaet 5 Monate (Talzone) bis 6 Monate (Bergzone).',
|
|
130
|
+
federal_rate_pct: 30,
|
|
131
|
+
max_amount: null,
|
|
132
|
+
duration_years: null,
|
|
133
|
+
zone_bonus: JSON.parse(JSON.stringify({
|
|
134
|
+
bergzone_i: 'Erhoehter Bundesbeitrag moeglich',
|
|
135
|
+
bergzone_ii: 'Erhoehter Bundesbeitrag moeglich',
|
|
136
|
+
bergzone_iii: 'Erhoehter Bundesbeitrag moeglich',
|
|
137
|
+
bergzone_iv: 'Erhoehter Bundesbeitrag moeglich',
|
|
138
|
+
})),
|
|
139
|
+
legal_basis: 'SVV Art. 18-20, LRV, LwG Art. 87-89',
|
|
140
|
+
language: 'DE',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
id: 'beitrag-guelleseparierung',
|
|
144
|
+
name: 'Beitrag Guelleseparierung',
|
|
145
|
+
grant_type: 'beitrag',
|
|
146
|
+
description: 'Bundesbeitrag fuer die Anschaffung von Guelleseparierungsanlagen. Trennung von Guelle in Duenn- und Dickphase verbessert die Naehrstoffeffizienz und reduziert Ammoniakemissionen bei der Ausbringung. Gemeinschaftliche Anlagen werden hoeher unterstuetzt.',
|
|
147
|
+
federal_rate_pct: 25,
|
|
148
|
+
max_amount: null,
|
|
149
|
+
duration_years: null,
|
|
150
|
+
zone_bonus: null,
|
|
151
|
+
legal_basis: 'SVV Art. 18-20, LRV, LwG Art. 87-89',
|
|
152
|
+
language: 'DE',
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
// --- Gemeinschaftliche Massnahmen ---
|
|
156
|
+
{
|
|
157
|
+
id: 'gemeinschaft-biogasanlage',
|
|
158
|
+
name: 'Gemeinschaftliche Biogasanlage',
|
|
159
|
+
grant_type: 'beitrag',
|
|
160
|
+
description: 'Erhoehter Bundesbeitrag fuer gemeinschaftliche Biogasanlagen (mehrere Betriebe). Verwertung von Hofduenger, Ernterueckstaenden und biogenen Abfaellen. Waermenutzung oder Stromeinspeisung. Gemeinschaftsprojekte erhalten hoehere Beitragssaetze als Einzelanlagen.',
|
|
161
|
+
federal_rate_pct: 35,
|
|
162
|
+
max_amount: null,
|
|
163
|
+
duration_years: null,
|
|
164
|
+
zone_bonus: null,
|
|
165
|
+
legal_basis: 'SVV Art. 26-30, LwG Art. 87-89, Art. 95',
|
|
166
|
+
language: 'DE',
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
id: 'gemeinschaft-schleppschlauch',
|
|
170
|
+
name: 'Regionale Schleppschlauchgemeinschaft',
|
|
171
|
+
grant_type: 'beitrag',
|
|
172
|
+
description: 'Bundesbeitrag fuer die Gruendung regionaler Schleppschlauchgemeinschaften. Schleppschlauchtechnik ist seit 2024 obligatorisch (LRV). Gemeinschaftliche Anschaffung reduziert Kosten pro Betrieb. Auch Schleppschuh- und Injektionstechnik foerderfaehig.',
|
|
173
|
+
federal_rate_pct: 30,
|
|
174
|
+
max_amount: null,
|
|
175
|
+
duration_years: null,
|
|
176
|
+
zone_bonus: null,
|
|
177
|
+
legal_basis: 'SVV Art. 26-30, LRV Art. 3c, LwG Art. 87-89',
|
|
178
|
+
language: 'DE',
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
id: 'gemeinschaft-kaeserei',
|
|
182
|
+
name: 'Gemeinschaftliche Kaeserei',
|
|
183
|
+
grant_type: 'beitrag',
|
|
184
|
+
description: 'Bundesbeitrag fuer den Bau oder die Modernisierung von Dorf-/Talkaesereien und Alpkaesereien. Gemeinschaftsprojekte mehrerer Milchlieferanten werden bevorzugt. Hygienestandards gemaess LMG/HyV muessen eingehalten werden.',
|
|
185
|
+
federal_rate_pct: 30,
|
|
186
|
+
max_amount: null,
|
|
187
|
+
duration_years: null,
|
|
188
|
+
zone_bonus: JSON.parse(JSON.stringify({
|
|
189
|
+
bergzone_i: 'Erhoehter Beitragssatz fuer Bergkaesereien',
|
|
190
|
+
bergzone_ii: 'Erhoehter Beitragssatz fuer Bergkaesereien',
|
|
191
|
+
bergzone_iii: 'Erhoehter Beitragssatz fuer Bergkaesereien',
|
|
192
|
+
bergzone_iv: 'Erhoehter Beitragssatz fuer Bergkaesereien',
|
|
193
|
+
soemmerungsgebiet: 'Erhoehter Beitragssatz fuer Alpkaesereien (bis 50%)',
|
|
194
|
+
})),
|
|
195
|
+
legal_basis: 'SVV Art. 26-30, LwG Art. 87-89, Art. 95',
|
|
196
|
+
language: 'DE',
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
id: 'gemeinschaft-mistplatz',
|
|
200
|
+
name: 'Gemeinsamer Mistplatz',
|
|
201
|
+
grant_type: 'beitrag',
|
|
202
|
+
description: 'Bundesbeitrag fuer gemeinsame Mistplaetze mehrerer Betriebe. Fachgerechte Kompostierung und Zwischenlagerung. Reduziert Naehrstoffverluste und Geruchsemissionen.',
|
|
203
|
+
federal_rate_pct: 30,
|
|
204
|
+
max_amount: null,
|
|
205
|
+
duration_years: null,
|
|
206
|
+
zone_bonus: null,
|
|
207
|
+
legal_basis: 'SVV Art. 26-30, LwG Art. 87-89',
|
|
208
|
+
language: 'DE',
|
|
209
|
+
},
|
|
210
|
+
|
|
211
|
+
// --- Meliorationen ---
|
|
212
|
+
{
|
|
213
|
+
id: 'melioration-wegebau',
|
|
214
|
+
name: 'Melioration Wegebau',
|
|
215
|
+
grant_type: 'meliorationsbeitrag',
|
|
216
|
+
description: 'Bundesbeitrag fuer den Bau und die Sanierung von landwirtschaftlichen Gueterwegen und Erschliessungsstrassen. Im Berggebiet hoehere Beitragssaetze. Gesamtmeliorationen (Gueterzusammenlegung + Erschliessung) werden koordiniert geplant.',
|
|
217
|
+
federal_rate_pct: 30,
|
|
218
|
+
max_amount: null,
|
|
219
|
+
duration_years: null,
|
|
220
|
+
zone_bonus: JSON.parse(JSON.stringify({
|
|
221
|
+
huegelzone: 'Erhoehter Bundesbeitrag (bis 40%)',
|
|
222
|
+
bergzone_i: 'Erhoehter Bundesbeitrag (bis 45%)',
|
|
223
|
+
bergzone_ii: 'Erhoehter Bundesbeitrag (bis 45%)',
|
|
224
|
+
bergzone_iii: 'Erhoehter Bundesbeitrag (bis 50%)',
|
|
225
|
+
bergzone_iv: 'Erhoehter Bundesbeitrag (bis 50%)',
|
|
226
|
+
soemmerungsgebiet: 'Erhoehter Bundesbeitrag (bis 50%)',
|
|
227
|
+
})),
|
|
228
|
+
legal_basis: 'SVV Art. 11-17, LwG Art. 87-93',
|
|
229
|
+
language: 'DE',
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
id: 'melioration-wasserversorgung',
|
|
233
|
+
name: 'Melioration Wasserversorgung',
|
|
234
|
+
grant_type: 'meliorationsbeitrag',
|
|
235
|
+
description: 'Bundesbeitrag fuer landwirtschaftliche Wasserversorgungsprojekte: Quellfassungen, Brunnenstuben, Zuleitungen, Viehtranken auf Alpweiden. Im Berggebiet und auf Alpen besonders wichtig.',
|
|
236
|
+
federal_rate_pct: 30,
|
|
237
|
+
max_amount: null,
|
|
238
|
+
duration_years: null,
|
|
239
|
+
zone_bonus: JSON.parse(JSON.stringify({
|
|
240
|
+
bergzone_i: 'Erhoehter Bundesbeitrag (bis 45%)',
|
|
241
|
+
bergzone_ii: 'Erhoehter Bundesbeitrag (bis 45%)',
|
|
242
|
+
bergzone_iii: 'Erhoehter Bundesbeitrag (bis 50%)',
|
|
243
|
+
bergzone_iv: 'Erhoehter Bundesbeitrag (bis 50%)',
|
|
244
|
+
soemmerungsgebiet: 'Erhoehter Bundesbeitrag (bis 50%)',
|
|
245
|
+
})),
|
|
246
|
+
legal_basis: 'SVV Art. 11-17, LwG Art. 87-93',
|
|
247
|
+
language: 'DE',
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
id: 'melioration-entwaesserung',
|
|
251
|
+
name: 'Melioration Entwaesserung',
|
|
252
|
+
grant_type: 'meliorationsbeitrag',
|
|
253
|
+
description: 'Bundesbeitrag fuer Drainagen und Entwaesserungsprojekte auf landwirtschaftlichen Nutzflaechen. Voraussetzung: Nachweis der Notwendigkeit und Vertraeglichkeit mit Gewaesserschutzauflagen. Nicht in Grundwasserschutzzonen S1/S2.',
|
|
254
|
+
federal_rate_pct: 25,
|
|
255
|
+
max_amount: null,
|
|
256
|
+
duration_years: null,
|
|
257
|
+
zone_bonus: JSON.parse(JSON.stringify({
|
|
258
|
+
bergzone_i: 'Erhoehter Bundesbeitrag moeglich',
|
|
259
|
+
bergzone_ii: 'Erhoehter Bundesbeitrag moeglich',
|
|
260
|
+
})),
|
|
261
|
+
legal_basis: 'SVV Art. 11-17, LwG Art. 87-93, GSchG',
|
|
262
|
+
language: 'DE',
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
id: 'melioration-alpverbesserung',
|
|
266
|
+
name: 'Alpverbesserung',
|
|
267
|
+
grant_type: 'meliorationsbeitrag',
|
|
268
|
+
description: 'Bundesbeitrag fuer Alpverbesserungsprojekte: Alpgebaeude (Sennhuetten, Alphirtenunterkuenfte), Zufahrtswege, Wasserversorgung, Alpkaesereien, Weidepflege. Hoehere Beitragssaetze als im Talgebiet (bis 50% der anrechenbaren Kosten).',
|
|
269
|
+
federal_rate_pct: 40,
|
|
270
|
+
max_amount: null,
|
|
271
|
+
duration_years: null,
|
|
272
|
+
zone_bonus: JSON.parse(JSON.stringify({
|
|
273
|
+
soemmerungsgebiet: 'Bis 50% der anrechenbaren Kosten',
|
|
274
|
+
})),
|
|
275
|
+
legal_basis: 'SVV Art. 40-44, LwG Art. 87-93',
|
|
276
|
+
language: 'DE',
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
id: 'melioration-gesamtmelioration',
|
|
280
|
+
name: 'Gesamtmelioration (Gueterzusammenlegung)',
|
|
281
|
+
grant_type: 'meliorationsbeitrag',
|
|
282
|
+
description: 'Bundesbeitrag fuer Gesamtmeliorationen: Gueterzusammenlegung (Arrondierung), kombiniert mit Erschliessung (Wege), Entwaesserung und Landschaftsgestaltung. Kantonal durchgefuehrt, Bund beteiligt sich an anrechenbaren Kosten. Dauer mehrere Jahre.',
|
|
283
|
+
federal_rate_pct: 35,
|
|
284
|
+
max_amount: null,
|
|
285
|
+
duration_years: null,
|
|
286
|
+
zone_bonus: JSON.parse(JSON.stringify({
|
|
287
|
+
bergzone_i: 'Erhoehter Bundesbeitrag (bis 45%)',
|
|
288
|
+
bergzone_ii: 'Erhoehter Bundesbeitrag (bis 45%)',
|
|
289
|
+
bergzone_iii: 'Erhoehter Bundesbeitrag (bis 50%)',
|
|
290
|
+
bergzone_iv: 'Erhoehter Bundesbeitrag (bis 50%)',
|
|
291
|
+
})),
|
|
292
|
+
legal_basis: 'SVV Art. 11-17, LwG Art. 87-93',
|
|
293
|
+
language: 'DE',
|
|
294
|
+
},
|
|
295
|
+
|
|
296
|
+
// --- PRE (Projekte zur regionalen Entwicklung) ---
|
|
297
|
+
{
|
|
298
|
+
id: 'pre-wertschoepfungskette',
|
|
299
|
+
name: 'PRE Wertschoepfungskette',
|
|
300
|
+
grant_type: 'pre',
|
|
301
|
+
description: 'Bundesbeitrag fuer Projekte zur regionalen Entwicklung (PRE) mit Schwerpunkt regionale Wertschoepfungsketten. Verarbeitung, Vermarktung und Vertrieb regionaler Agrarprodukte. Zusammenarbeit mehrerer Betriebe und Partner entlang der Wertschoepfungskette.',
|
|
302
|
+
federal_rate_pct: 30,
|
|
303
|
+
max_amount: null,
|
|
304
|
+
duration_years: null,
|
|
305
|
+
zone_bonus: null,
|
|
306
|
+
legal_basis: 'SVV Art. 93a-93f, LwG Art. 93 Abs. 1 Bst. c',
|
|
307
|
+
language: 'DE',
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
id: 'pre-agrotourismus',
|
|
311
|
+
name: 'PRE Agrotourismus',
|
|
312
|
+
grant_type: 'pre',
|
|
313
|
+
description: 'Bundesbeitrag fuer Agrotourismus-Projekte im Rahmen von PRE: Ferienwohnungen auf dem Bauernhof, Schlafen im Stroh, Erlebnisbauernhof, Hofladen mit Eventcharakter. Muss regionale Wertschoepfung generieren und mehrere Betriebe einbeziehen.',
|
|
314
|
+
federal_rate_pct: 25,
|
|
315
|
+
max_amount: null,
|
|
316
|
+
duration_years: null,
|
|
317
|
+
zone_bonus: JSON.parse(JSON.stringify({
|
|
318
|
+
bergzone_i: 'Berggebiet bevorzugt',
|
|
319
|
+
bergzone_ii: 'Berggebiet bevorzugt',
|
|
320
|
+
bergzone_iii: 'Berggebiet bevorzugt',
|
|
321
|
+
bergzone_iv: 'Berggebiet bevorzugt',
|
|
322
|
+
})),
|
|
323
|
+
legal_basis: 'SVV Art. 93a-93f, LwG Art. 93 Abs. 1 Bst. c',
|
|
324
|
+
language: 'DE',
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
id: 'pre-verarbeitungsinfrastruktur',
|
|
328
|
+
name: 'PRE Verarbeitungsinfrastruktur',
|
|
329
|
+
grant_type: 'pre',
|
|
330
|
+
description: 'Bundesbeitrag fuer regionale Verarbeitungsinfrastruktur: Gemeinschaftskuechen, regionale Trocknungsanlagen, Obstverarbeitung, Fleischverarbeitung. PRE-Projekte muessen regionalen Charakter haben und mehrere Akteure verbinden.',
|
|
331
|
+
federal_rate_pct: 30,
|
|
332
|
+
max_amount: null,
|
|
333
|
+
duration_years: null,
|
|
334
|
+
zone_bonus: null,
|
|
335
|
+
legal_basis: 'SVV Art. 93a-93f, LwG Art. 93 Abs. 1 Bst. c',
|
|
336
|
+
language: 'DE',
|
|
337
|
+
},
|
|
338
|
+
|
|
339
|
+
// --- Ressourcenprogramme ---
|
|
340
|
+
{
|
|
341
|
+
id: 'ressourcenprogramm-ammoniak',
|
|
342
|
+
name: 'Ressourcenprogramm Ammoniakreduzierung (Art. 77a/77b)',
|
|
343
|
+
grant_type: 'ressourcenprogramm',
|
|
344
|
+
description: 'Kantonale Programme zur Reduktion von Ammoniakemissionen, kofinanziert durch den Bund (Art. 77a/77b LwG). Massnahmen: Abdeckung Guellegruben, Schleppschlauchtechnik, emissionsarme Stallbauten, N-reduzierte Fuetterung. Beitraege pro Massnahme und Jahr.',
|
|
345
|
+
federal_rate_pct: null,
|
|
346
|
+
max_amount: null,
|
|
347
|
+
duration_years: 6,
|
|
348
|
+
zone_bonus: null,
|
|
349
|
+
legal_basis: 'LwG Art. 77a, 77b',
|
|
350
|
+
language: 'DE',
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
id: 'ressourcenprogramm-psm',
|
|
354
|
+
name: 'Ressourcenprogramm PSM-Reduktion (Art. 77a/77b)',
|
|
355
|
+
grant_type: 'ressourcenprogramm',
|
|
356
|
+
description: 'Kantonale Programme zur Reduktion des Pflanzenschutzmitteleinsatzes. Massnahmen: mechanische Unkrautbekaempfung, Nützlingsfoerderung, praezise Spritztechnik (Sensorspritzen, Dropleg), Verzicht auf bestimmte Wirkstoffe. Kofinanzierung Bund/Kanton.',
|
|
357
|
+
federal_rate_pct: null,
|
|
358
|
+
max_amount: null,
|
|
359
|
+
duration_years: 6,
|
|
360
|
+
zone_bonus: null,
|
|
361
|
+
legal_basis: 'LwG Art. 77a, 77b',
|
|
362
|
+
language: 'DE',
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
id: 'ressourcenprogramm-boden',
|
|
366
|
+
name: 'Ressourcenprogramm Bodenschutz (Art. 77a/77b)',
|
|
367
|
+
grant_type: 'ressourcenprogramm',
|
|
368
|
+
description: 'Kantonale Programme zur Verbesserung der Bodenqualitaet. Massnahmen: konservierende Bodenbearbeitung (Direktsaat, Mulchsaat), Untersaaten, Zwischenfruechte, Kompostapplikation, Reduktion Verdichtungsrisiko (Reifendruckregelung). Kofinanzierung Bund/Kanton.',
|
|
369
|
+
federal_rate_pct: null,
|
|
370
|
+
max_amount: null,
|
|
371
|
+
duration_years: 6,
|
|
372
|
+
zone_bonus: null,
|
|
373
|
+
legal_basis: 'LwG Art. 77a, 77b',
|
|
374
|
+
language: 'DE',
|
|
375
|
+
},
|
|
376
|
+
|
|
377
|
+
// --- Gewaesserschutzprojekte ---
|
|
378
|
+
{
|
|
379
|
+
id: 'gewaesserschutz-nitrat',
|
|
380
|
+
name: 'Gewaesserschutzprojekt Nitratreduktion (Art. 62a)',
|
|
381
|
+
grant_type: 'gewaesserschutz',
|
|
382
|
+
description: 'Beitraege fuer Massnahmen zur Nitratreduktion in Zustroembereichen von Trinkwasserfassungen (Art. 62a GSchG). Massnahmen: extensivere Bewirtschaftung, Verzicht auf Herbstduengung, Winterbegruenung, reduzierte Stickstoffduengung. Beitraege je nach Massnahme und Einschraenkung.',
|
|
383
|
+
federal_rate_pct: null,
|
|
384
|
+
max_amount: null,
|
|
385
|
+
duration_years: 6,
|
|
386
|
+
zone_bonus: null,
|
|
387
|
+
legal_basis: 'GSchG Art. 62a, GSchV Art. 27a',
|
|
388
|
+
language: 'DE',
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
id: 'gewaesserschutz-psm',
|
|
392
|
+
name: 'Gewaesserschutzprojekt PSM-Reduktion (Art. 62a)',
|
|
393
|
+
grant_type: 'gewaesserschutz',
|
|
394
|
+
description: 'Beitraege fuer Massnahmen zur Reduktion von Pflanzenschutzmitteleintraegen in Zustroembereichen von Trinkwasserfassungen. Massnahmen: Verzicht auf bestimmte PSM, breite Pufferstreifen, extensive Bewirtschaftung. Beitraege je nach Massnahmenintensitaet.',
|
|
395
|
+
federal_rate_pct: null,
|
|
396
|
+
max_amount: null,
|
|
397
|
+
duration_years: 6,
|
|
398
|
+
zone_bonus: null,
|
|
399
|
+
legal_basis: 'GSchG Art. 62a, GSchV Art. 27a',
|
|
400
|
+
language: 'DE',
|
|
401
|
+
},
|
|
402
|
+
|
|
403
|
+
// --- Starthilfe Junglandwirte ---
|
|
404
|
+
{
|
|
405
|
+
id: 'starthilfe-junglandwirte',
|
|
406
|
+
name: 'Starthilfe Junglandwirte',
|
|
407
|
+
grant_type: 'starthilfe',
|
|
408
|
+
description: 'Einmaliger Beitrag (max. 100,000 CHF) fuer Junglandwirte bei der Erstuebernahme eines landwirtschaftlichen Betriebs. Bedingungen: Alter unter 35 bei Uebernahme, abgeschlossene landwirtschaftliche Ausbildung (mindestens EFZ), Erstuebernahme (kein zweiter Betrieb), Betrieb muss mindestens 1.0 SAK erreichen.',
|
|
409
|
+
federal_rate_pct: null,
|
|
410
|
+
max_amount: 100000,
|
|
411
|
+
duration_years: null,
|
|
412
|
+
zone_bonus: null,
|
|
413
|
+
legal_basis: 'SVV Art. 3-5, LwG Art. 86 Abs. 2',
|
|
414
|
+
language: 'DE',
|
|
415
|
+
},
|
|
416
|
+
];
|
|
417
|
+
|
|
418
|
+
// ---------------------------------------------------------------------------
|
|
419
|
+
// 2. Grant Options (Massnahmen innerhalb von Programmen)
|
|
420
|
+
// ---------------------------------------------------------------------------
|
|
421
|
+
|
|
422
|
+
interface GrantOption {
|
|
423
|
+
grant_id: string;
|
|
424
|
+
option_name: string;
|
|
425
|
+
description: string;
|
|
426
|
+
rate: string;
|
|
427
|
+
conditions: string;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
const grantOptions: GrantOption[] = [
|
|
431
|
+
// Investitionskredit Oekonomiegebaeude
|
|
432
|
+
{ grant_id: 'ik-oekonomiegebaeude', option_name: 'Neubau Laufstall (BTS)', description: 'Neubau eines BTS-konformen Laufstalls mit Liegebereich und Laufhof', rate: 'Zinsloses Darlehen, 20 Jahre Laufzeit', conditions: 'BTS-Anforderungen muessen erfuellt sein (Laufstall, Liegebereich, Einstreu)' },
|
|
433
|
+
{ grant_id: 'ik-oekonomiegebaeude', option_name: 'Umbau Anbindestall zu Laufstall', description: 'Umbau eines bestehenden Anbindestalls zum Laufstall', rate: 'Zinsloses Darlehen, 20 Jahre Laufzeit', conditions: 'Umstellung auf Laufstall wird politisch stark gefoerdert (Anbindehaltung langfristig auslaufend)' },
|
|
434
|
+
{ grant_id: 'ik-oekonomiegebaeude', option_name: 'Schweinestall (Gruppenhaltung)', description: 'Neubau oder Umbau Schweinestall fuer Gruppenhaltung traegender Sauen', rate: 'Zinsloses Darlehen, 20 Jahre Laufzeit', conditions: 'Gruppenhaltung traechtiger Sauen obligatorisch (TSchV)' },
|
|
435
|
+
{ grant_id: 'ik-oekonomiegebaeude', option_name: 'Remise / Maschinenhalle', description: 'Bau einer Remise oder Maschinenhalle', rate: 'Zinsloses Darlehen, 20 Jahre Laufzeit', conditions: 'Bedarfsnachweis erforderlich (vorhandener Maschinenbestand)' },
|
|
436
|
+
|
|
437
|
+
// Beitrag Stallbau
|
|
438
|
+
{ grant_id: 'beitrag-stallbau', option_name: 'Milchviehstall Talzone', description: 'Neubau Milchvieh-Laufstall in der Talzone', rate: 'Bund 20-25% + Kanton variabel (total ca. 30-40%)', conditions: 'OELN-Konformitaet, SAK >= 1.0, Investitionskredit ergaenzend moeglich' },
|
|
439
|
+
{ grant_id: 'beitrag-stallbau', option_name: 'Milchviehstall Berggebiet', description: 'Neubau Milchvieh-Laufstall im Berggebiet', rate: 'Bund 25-40% + Kanton variabel (total ca. 40-55%)', conditions: 'Hoehere Beitragssaetze im Berggebiet, erschwerter Bau' },
|
|
440
|
+
{ grant_id: 'beitrag-stallbau', option_name: 'Mutterkuhstall', description: 'Stall fuer Mutterkuhhaltung (extensivere Bauweise)', rate: 'Bund 20-25% + Kanton variabel', conditions: 'Mutterkuhhaltung gemaess DZV Anforderungen' },
|
|
441
|
+
|
|
442
|
+
// Beitrag Hofduengerlager
|
|
443
|
+
{ grant_id: 'beitrag-hofduengerlager', option_name: 'Guellegruben-Abdeckung', description: 'Abdeckung bestehender offener Guellegruben (Schwimmfolie, Betondecke)', rate: 'Bund 30% + Kanton variabel', conditions: 'Reduziert NH3-Verluste um bis zu 80%. Pflicht bei Neubau.' },
|
|
444
|
+
{ grant_id: 'beitrag-hofduengerlager', option_name: 'Guellegruben-Vergroesserung', description: 'Erweiterung der Guellelagerkapazitaet auf min. 5-6 Monate', rate: 'Bund 30% + Kanton variabel', conditions: 'Min. 5 Monate Lagerkapazitaet (Talzone), 6 Monate (Bergzone)' },
|
|
445
|
+
{ grant_id: 'beitrag-hofduengerlager', option_name: 'Neubau Mistplatz (befestigt)', description: 'Befestigter Mistlagerplatz mit Sickerwasserauffang', rate: 'Bund 30% + Kanton variabel', conditions: 'Sickerwasser muss aufgefangen und in Guelleanlage geleitet werden' },
|
|
446
|
+
|
|
447
|
+
// Melioration Alpverbesserung
|
|
448
|
+
{ grant_id: 'melioration-alpverbesserung', option_name: 'Alphuette / Sennhuette', description: 'Neubau oder Renovation einer Alphuette / Sennhuette', rate: 'Bund bis 50% im Soemmerungsgebiet', conditions: 'Abgelegene Lage, erschwerte Bauverhaeltnisse, Tradition' },
|
|
449
|
+
{ grant_id: 'melioration-alpverbesserung', option_name: 'Alpkaeserei', description: 'Bau oder Modernisierung einer Alpkaeserei', rate: 'Bund bis 50% im Soemmerungsgebiet', conditions: 'Hygienestandards LMG/HyV, Milchverarbeitungskapazitaet' },
|
|
450
|
+
{ grant_id: 'melioration-alpverbesserung', option_name: 'Alpwege / Zufahrten', description: 'Bau oder Instandsetzung von Alpwegen', rate: 'Bund 40-50%', conditions: 'Nur landwirtschaftliche Nutzung, kein Ausbau zu Tourismusstrassen' },
|
|
451
|
+
{ grant_id: 'melioration-alpverbesserung', option_name: 'Wasserversorgung Alp', description: 'Quellfassungen, Leitungen, Viehtranken auf Alpweiden', rate: 'Bund bis 50% im Soemmerungsgebiet', conditions: 'Trinkwasserqualitaet fuer Vieh, ausreichende Kapazitaet' },
|
|
452
|
+
|
|
453
|
+
// PRE
|
|
454
|
+
{ grant_id: 'pre-wertschoepfungskette', option_name: 'Regionaler Hofladen-Verbund', description: 'Gemeinsame Vermarktung regionaler Produkte ueber Hofladen-Netzwerk', rate: 'Bund bis 30%', conditions: 'Mindestens 3 Betriebe, regionale Wertschoepfung nachweisen' },
|
|
455
|
+
{ grant_id: 'pre-wertschoepfungskette', option_name: 'Regionale Marke / Label', description: 'Aufbau einer regionalen Produktmarke (Branding, Verpackung, Vertrieb)', rate: 'Bund bis 30%', conditions: 'Regionale Verankerung, Marktpotenzial nachweisen' },
|
|
456
|
+
|
|
457
|
+
// Ressourcenprogramme
|
|
458
|
+
{ grant_id: 'ressourcenprogramm-ammoniak', option_name: 'Schleppschlauch-Ausbringung', description: 'Beitrag pro ha fuer bodennahe Guelleausbringung mit Schleppschlauch', rate: 'Ca. 30-60 CHF/ha/Jahr (kantonal)', conditions: 'Schleppschlauch seit 2024 obligatorisch (LRV), Beitrag fuer Uebergangsphase' },
|
|
459
|
+
{ grant_id: 'ressourcenprogramm-ammoniak', option_name: 'N-reduzierte Phasenfuetterung', description: 'Beitrag fuer stickstoffreduzierte Fuetterung (Schweine, Gefluegel)', rate: 'Ca. 20-40 CHF/GVE/Jahr (kantonal)', conditions: 'Nachweis durch Futterberechnung, NPr-konform' },
|
|
460
|
+
{ grant_id: 'ressourcenprogramm-psm', option_name: 'Mechanische Unkrautbekaempfung', description: 'Beitrag fuer Einsatz von Hackgeraet, Striegel statt Herbizid', rate: 'Ca. 200-400 CHF/ha/Jahr (kantonal)', conditions: 'Dokumentierter Verzicht auf Herbizid auf Teilflaechen' },
|
|
461
|
+
{ grant_id: 'ressourcenprogramm-boden', option_name: 'Direktsaat / Mulchsaat', description: 'Beitrag fuer konservierende Bodenbearbeitung (Direktsaat, Strip-Till)', rate: 'Ca. 200-400 CHF/ha/Jahr (kantonal)', conditions: 'Koernerleguminosen oder Zwischenfruechte als Vorfrucht' },
|
|
462
|
+
|
|
463
|
+
// Gewaesserschutz
|
|
464
|
+
{ grant_id: 'gewaesserschutz-nitrat', option_name: 'Winterbegruenung im Zustroembereich', description: 'Obligatorische Winterbegruenung auf Ackerflaechen im Zustroembereich', rate: 'Ca. 400-800 CHF/ha/Jahr', conditions: 'Betrieb liegt ganz oder teilweise im definierten Zustroembereich' },
|
|
465
|
+
{ grant_id: 'gewaesserschutz-nitrat', option_name: 'Reduzierte N-Duengung', description: 'Reduktion der Stickstoffduengung um 20-30% unter GRUD-Norm', rate: 'Ca. 500-1200 CHF/ha/Jahr', conditions: 'Ertragseinbusse wird ueber Beitrag kompensiert' },
|
|
466
|
+
{ grant_id: 'gewaesserschutz-psm', option_name: 'Verzicht auf kritische Herbizide', description: 'Verzicht auf Metolachlor, Terbuthylazin, Chloridazon im Zustroembereich', rate: 'Ca. 300-600 CHF/ha/Jahr', conditions: 'Betrieb liegt im definierten Zustroembereich einer Trinkwasserfassung' },
|
|
467
|
+
];
|
|
468
|
+
|
|
469
|
+
// ---------------------------------------------------------------------------
|
|
470
|
+
// 3. Eligibility Rules
|
|
471
|
+
// ---------------------------------------------------------------------------
|
|
472
|
+
|
|
473
|
+
interface EligibilityRule {
|
|
474
|
+
grant_id: string;
|
|
475
|
+
farm_type: string;
|
|
476
|
+
investment_type: string;
|
|
477
|
+
zone: string;
|
|
478
|
+
requirement: string;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
const eligibilityRules: EligibilityRule[] = [
|
|
482
|
+
// Investitionskredite — general
|
|
483
|
+
{ grant_id: 'ik-oekonomiegebaeude', farm_type: 'alle', investment_type: 'stallbau', zone: 'alle', requirement: 'OELN-Konformitaet (Oekologischer Leistungsnachweis), SAK >= 1.0, Betriebsleiter mit landwirtschaftlicher Ausbildung' },
|
|
484
|
+
{ grant_id: 'ik-oekonomiegebaeude', farm_type: 'milchwirtschaft', investment_type: 'stallbau', zone: 'alle', requirement: 'BTS-konforme Bauweise bevorzugt, Laufstall empfohlen, RAUS-faehig' },
|
|
485
|
+
{ grant_id: 'ik-oekonomiegebaeude', farm_type: 'mutterkuhhaltung', investment_type: 'stallbau', zone: 'alle', requirement: 'Stall fuer Mutterkuhhaltung gemaess DZV, geeignete Auslaufmoeglichkeit' },
|
|
486
|
+
{ grant_id: 'ik-oekonomiegebaeude', farm_type: 'bergbetrieb', investment_type: 'stallbau', zone: 'bergzone_i', requirement: 'Erhoehter Kreditrahmen im Berggebiet, vereinfachtes Verfahren moeglich' },
|
|
487
|
+
{ grant_id: 'ik-oekonomiegebaeude', farm_type: 'bergbetrieb', investment_type: 'stallbau', zone: 'bergzone_ii', requirement: 'Erhoehter Kreditrahmen im Berggebiet, vereinfachtes Verfahren moeglich' },
|
|
488
|
+
|
|
489
|
+
{ grant_id: 'ik-wohnhaus', farm_type: 'alle', investment_type: 'wohnhaus', zone: 'alle', requirement: 'Betriebsleiter mit Haupterwerb Landwirtschaft, Wohnflaeche gemaess SVV-Limiten' },
|
|
490
|
+
{ grant_id: 'ik-diversifikation', farm_type: 'alle', investment_type: 'diversifikation', zone: 'alle', requirement: 'Projekt betrieblich verknuepft, Wertschoepfung auf Betrieb, Businessplan' },
|
|
491
|
+
{ grant_id: 'ik-alpgebaeude', farm_type: 'alpwirtschaft', investment_type: 'alpgebaeude', zone: 'soemmerungsgebiet', requirement: 'Alpgenossenschaft oder Einzelbetrieb mit Soemmerungsrecht, Normalbesatz einhalten' },
|
|
492
|
+
|
|
493
|
+
// Beitraege
|
|
494
|
+
{ grant_id: 'beitrag-stallbau', farm_type: 'alle', investment_type: 'stallbau', zone: 'alle', requirement: 'OELN, SAK >= 1.0, Baubewilligung vorliegend, Projekt vor Baubeginn eingereicht' },
|
|
495
|
+
{ grant_id: 'beitrag-hofduengerlager', farm_type: 'alle', investment_type: 'hofduengerlager', zone: 'alle', requirement: 'OELN, Lagerkapazitaet mindestens 5 Monate (Tal) / 6 Monate (Berg), Gewaesserschutzauflagen erfuellen' },
|
|
496
|
+
{ grant_id: 'beitrag-guelleseparierung', farm_type: 'alle', investment_type: 'alle', zone: 'alle', requirement: 'Viehbestand vorhanden, technische Machbarkeit, Beitrag zur Ammoniakreduzierung' },
|
|
497
|
+
|
|
498
|
+
// Gemeinschaft
|
|
499
|
+
{ grant_id: 'gemeinschaft-biogasanlage', farm_type: 'gemeinschaft', investment_type: 'biogasanlage', zone: 'alle', requirement: 'Mindestens 2 Betriebe, genuegend Substrat (Hofduenger + Co-Substrate), Waermenutzungskonzept' },
|
|
500
|
+
{ grant_id: 'gemeinschaft-schleppschlauch', farm_type: 'gemeinschaft', investment_type: 'alle', zone: 'alle', requirement: 'Mindestens 3 Betriebe, gemeinsame Organisationsform (Verein/Genossenschaft), Einsatzplanung' },
|
|
501
|
+
{ grant_id: 'gemeinschaft-kaeserei', farm_type: 'gemeinschaft', investment_type: 'kaeserei', zone: 'alle', requirement: 'Mindestens 3 Milchlieferanten, Hygienekonzept (HACCP), Milchverwertungsvertrag' },
|
|
502
|
+
{ grant_id: 'gemeinschaft-mistplatz', farm_type: 'gemeinschaft', investment_type: 'alle', zone: 'alle', requirement: 'Mindestens 2 Betriebe, befestigter Platz mit Sickerwasserauffang' },
|
|
503
|
+
|
|
504
|
+
// Meliorationen
|
|
505
|
+
{ grant_id: 'melioration-wegebau', farm_type: 'alle', investment_type: 'wegebau', zone: 'alle', requirement: 'Oeffentliches Interesse nachgewiesen, Projektgenehmigung durch Kanton' },
|
|
506
|
+
{ grant_id: 'melioration-wasserversorgung', farm_type: 'alle', investment_type: 'wasserversorgung', zone: 'alle', requirement: 'Nachweis Bedarf (Viehtraenke, Bewirtschaftung), keine Alternative vorhanden' },
|
|
507
|
+
{ grant_id: 'melioration-alpverbesserung', farm_type: 'alpwirtschaft', investment_type: 'alpgebaeude', zone: 'soemmerungsgebiet', requirement: 'Alprecht / Soemmerungsberechtigung, Normalbesatz GVE/ha einhalten, Bewirtschaftungsplan' },
|
|
508
|
+
{ grant_id: 'melioration-gesamtmelioration', farm_type: 'alle', investment_type: 'alle', zone: 'alle', requirement: 'Kantonale Durchfuehrung, Zustimmung Grundeigentuemer (Mehrheitsprinzip), UVP bei Bedarf' },
|
|
509
|
+
|
|
510
|
+
// PRE
|
|
511
|
+
{ grant_id: 'pre-wertschoepfungskette', farm_type: 'gemeinschaft', investment_type: 'alle', zone: 'alle', requirement: 'Regionaler Charakter, Zusammenarbeit mehrerer Akteure, Wertschoepfung nachweisen, Businessplan' },
|
|
512
|
+
{ grant_id: 'pre-agrotourismus', farm_type: 'alle', investment_type: 'diversifikation', zone: 'alle', requirement: 'Regionaler Charakter, Einbindung Tourismus/Gastronomie, Businessplan, Baubewilligung (RPG Art. 24b/c)' },
|
|
513
|
+
|
|
514
|
+
// Starthilfe
|
|
515
|
+
{ grant_id: 'starthilfe-junglandwirte', farm_type: 'junglandwirt', investment_type: 'alle', zone: 'alle', requirement: 'Alter unter 35 bei Uebernahme, landwirtschaftliche Ausbildung (mind. EFZ), Erstuebernahme, SAK >= 1.0' },
|
|
516
|
+
{ grant_id: 'starthilfe-junglandwirte', farm_type: 'junglandwirt', investment_type: 'alle', zone: 'bergzone_i', requirement: 'Alter unter 35 bei Uebernahme, landwirtschaftliche Ausbildung (mind. EFZ), Erstuebernahme, SAK >= 0.75 (reduziert im Berggebiet)' },
|
|
517
|
+
{ grant_id: 'starthilfe-junglandwirte', farm_type: 'junglandwirt', investment_type: 'alle', zone: 'bergzone_ii', requirement: 'Alter unter 35 bei Uebernahme, landwirtschaftliche Ausbildung (mind. EFZ), Erstuebernahme, SAK >= 0.75 (reduziert im Berggebiet)' },
|
|
518
|
+
|
|
519
|
+
// Ressourcenprogramme
|
|
520
|
+
{ grant_id: 'ressourcenprogramm-ammoniak', farm_type: 'alle', investment_type: 'alle', zone: 'alle', requirement: 'Betrieb in teilnehmendem Kanton, OELN-Konformitaet, Teilnahme an kantonalem Programm' },
|
|
521
|
+
{ grant_id: 'ressourcenprogramm-psm', farm_type: 'alle', investment_type: 'alle', zone: 'alle', requirement: 'Betrieb in teilnehmendem Kanton, OELN, Dokumentation Pflanzenschutzmassnahmen' },
|
|
522
|
+
{ grant_id: 'ressourcenprogramm-boden', farm_type: 'ackerbau', investment_type: 'alle', zone: 'alle', requirement: 'Ackerflaeche vorhanden, Betrieb in teilnehmendem Kanton, Dokumentation Bodenbearbeitung' },
|
|
523
|
+
|
|
524
|
+
// Gewaesserschutz
|
|
525
|
+
{ grant_id: 'gewaesserschutz-nitrat', farm_type: 'alle', investment_type: 'alle', zone: 'alle', requirement: 'Betrieb liegt im Zustroembereich einer Trinkwasserfassung, Vertrag mit Kanton' },
|
|
526
|
+
{ grant_id: 'gewaesserschutz-psm', farm_type: 'alle', investment_type: 'alle', zone: 'alle', requirement: 'Betrieb liegt im Zustroembereich einer Trinkwasserfassung, Nachweis PSM-Reduktion' },
|
|
527
|
+
];
|
|
528
|
+
|
|
529
|
+
// ---------------------------------------------------------------------------
|
|
530
|
+
// 4. Application Deadlines
|
|
531
|
+
// ---------------------------------------------------------------------------
|
|
532
|
+
|
|
533
|
+
interface Deadline {
|
|
534
|
+
grant_id: string;
|
|
535
|
+
canton: string;
|
|
536
|
+
deadline_date: string;
|
|
537
|
+
notes: string;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
const applicationDeadlines: Deadline[] = [
|
|
541
|
+
// General federal deadlines
|
|
542
|
+
{ grant_id: 'ik-oekonomiegebaeude', canton: 'alle', deadline_date: 'laufend', notes: 'Gesuchseinreichung beim kantonalen Landwirtschaftsamt jederzeit moeglich. Bearbeitung innerhalb 3-6 Monaten.' },
|
|
543
|
+
{ grant_id: 'ik-wohnhaus', canton: 'alle', deadline_date: 'laufend', notes: 'Gesuchseinreichung beim kantonalen Landwirtschaftsamt jederzeit moeglich.' },
|
|
544
|
+
{ grant_id: 'ik-diversifikation', canton: 'alle', deadline_date: 'laufend', notes: 'Gesuchseinreichung beim kantonalen Landwirtschaftsamt jederzeit moeglich. Businessplan beilegen.' },
|
|
545
|
+
{ grant_id: 'starthilfe-junglandwirte', canton: 'alle', deadline_date: 'laufend', notes: 'Innerhalb von 2 Jahren nach Betriebsuebernahme einzureichen.' },
|
|
546
|
+
|
|
547
|
+
// Cantonal examples
|
|
548
|
+
{ grant_id: 'beitrag-stallbau', canton: 'ZH', deadline_date: 'laufend', notes: 'Kanton Zuerich: Gesuch an ALN (Amt fuer Landschaft und Natur), Vorabklaerung empfohlen.' },
|
|
549
|
+
{ grant_id: 'beitrag-stallbau', canton: 'BE', deadline_date: 'laufend', notes: 'Kanton Bern: Gesuch an LANAT (Amt fuer Landwirtschaft und Natur), Kostenvoranschlag beilegen.' },
|
|
550
|
+
{ grant_id: 'beitrag-stallbau', canton: 'LU', deadline_date: 'laufend', notes: 'Kanton Luzern: Gesuch an lawa (Dienststelle Landwirtschaft und Wald), Beratung durch BBZN.' },
|
|
551
|
+
{ grant_id: 'beitrag-stallbau', canton: 'SG', deadline_date: 'laufend', notes: 'Kanton St. Gallen: Gesuch an LZSG (Landwirtschaftliches Zentrum SG), Plaene und Kostenvoranschlag.' },
|
|
552
|
+
{ grant_id: 'beitrag-stallbau', canton: 'GR', deadline_date: 'laufend', notes: 'Kanton Graubuenden: Gesuch an ALG (Amt fuer Landwirtschaft und Geoinformation), Berggebiet hoehere Saetze.' },
|
|
553
|
+
{ grant_id: 'beitrag-stallbau', canton: 'VS', deadline_date: 'laufend', notes: 'Kanton Wallis: Gesuch an Dienststelle fuer Landwirtschaft, spezielle Programme fuer Alpwirtschaft.' },
|
|
554
|
+
{ grant_id: 'beitrag-stallbau', canton: 'TI', deadline_date: 'laufend', notes: 'Kanton Tessin: Gesuch an Sezione dell\'agricoltura, Formulare auch auf Italienisch.' },
|
|
555
|
+
|
|
556
|
+
// Meliorationen
|
|
557
|
+
{ grant_id: 'melioration-wegebau', canton: 'alle', deadline_date: 'laufend', notes: 'Kantonale Planung, oft mehrjaehrige Projekte. Fruehzeitige Anmeldung beim kantonalen Meliorationsamt.' },
|
|
558
|
+
{ grant_id: 'melioration-alpverbesserung', canton: 'alle', deadline_date: 'laufend', notes: 'Gesuch vor Bausaison einreichen (Alpsaison Mai-Oktober). Planung 1-2 Jahre im Voraus.' },
|
|
559
|
+
|
|
560
|
+
// PRE
|
|
561
|
+
{ grant_id: 'pre-wertschoepfungskette', canton: 'alle', deadline_date: 'laufend', notes: 'PRE-Projektskizze beim BLW einreichen. Bewilligungsverfahren 6-12 Monate. Vorabklaerung mit Kanton und BLW empfohlen.' },
|
|
562
|
+
{ grant_id: 'pre-agrotourismus', canton: 'alle', deadline_date: 'laufend', notes: 'PRE-Projektskizze beim BLW einreichen. Baubewilligung separat (RPG Art. 24b/c pruefen).' },
|
|
563
|
+
|
|
564
|
+
// Ressourcenprogramme
|
|
565
|
+
{ grant_id: 'ressourcenprogramm-ammoniak', canton: 'alle', deadline_date: 'kantonal', notes: 'Teilnahme nur wenn Kanton ein laufendes Programm hat. Anmeldung beim kantonalen Landwirtschaftsamt.' },
|
|
566
|
+
{ grant_id: 'ressourcenprogramm-psm', canton: 'alle', deadline_date: 'kantonal', notes: 'Teilnahme nur wenn Kanton ein laufendes Programm hat. Anmeldung bei kantonaler Fachstelle.' },
|
|
567
|
+
{ grant_id: 'ressourcenprogramm-boden', canton: 'alle', deadline_date: 'kantonal', notes: 'Teilnahme nur wenn Kanton ein laufendes Programm hat.' },
|
|
568
|
+
|
|
569
|
+
// Gewaesserschutz
|
|
570
|
+
{ grant_id: 'gewaesserschutz-nitrat', canton: 'alle', deadline_date: 'kantonal', notes: 'Nur in definierten Zustroembereichen. Vertrag mit Kanton, Anmeldung bei kantonaler Gewaesserschutzfachstelle.' },
|
|
571
|
+
{ grant_id: 'gewaesserschutz-psm', canton: 'alle', deadline_date: 'kantonal', notes: 'Nur in definierten Zustroembereichen. Anmeldung bei kantonaler Gewaesserschutzfachstelle.' },
|
|
572
|
+
];
|
|
573
|
+
|
|
574
|
+
// ---------------------------------------------------------------------------
|
|
575
|
+
// 5. Insert all data
|
|
576
|
+
// ---------------------------------------------------------------------------
|
|
577
|
+
|
|
578
|
+
console.log('Ingesting Swiss farm grant data...');
|
|
579
|
+
|
|
580
|
+
// Clear existing data
|
|
581
|
+
db.run('DELETE FROM application_deadlines');
|
|
582
|
+
db.run('DELETE FROM eligibility_rules');
|
|
583
|
+
db.run('DELETE FROM grant_options');
|
|
584
|
+
db.run('DELETE FROM grants');
|
|
585
|
+
db.run('DELETE FROM search_index');
|
|
586
|
+
|
|
587
|
+
// Insert grants
|
|
588
|
+
const insertGrant = db.instance.prepare(
|
|
589
|
+
`INSERT INTO grants (id, name, grant_type, description, federal_rate_pct, max_amount, duration_years, zone_bonus, legal_basis, language, jurisdiction)
|
|
590
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'CH')`
|
|
591
|
+
);
|
|
592
|
+
|
|
593
|
+
for (const g of grants) {
|
|
594
|
+
insertGrant.run(
|
|
595
|
+
g.id, g.name, g.grant_type, g.description,
|
|
596
|
+
g.federal_rate_pct, g.max_amount, g.duration_years,
|
|
597
|
+
g.zone_bonus ? JSON.stringify(g.zone_bonus) : null,
|
|
598
|
+
g.legal_basis, g.language
|
|
599
|
+
);
|
|
600
|
+
}
|
|
601
|
+
console.log(` Inserted ${grants.length} grants`);
|
|
602
|
+
|
|
603
|
+
// Insert grant options
|
|
604
|
+
const insertOption = db.instance.prepare(
|
|
605
|
+
`INSERT INTO grant_options (grant_id, option_name, description, rate, conditions)
|
|
606
|
+
VALUES (?, ?, ?, ?, ?)`
|
|
607
|
+
);
|
|
608
|
+
|
|
609
|
+
for (const o of grantOptions) {
|
|
610
|
+
insertOption.run(o.grant_id, o.option_name, o.description, o.rate, o.conditions);
|
|
611
|
+
}
|
|
612
|
+
console.log(` Inserted ${grantOptions.length} grant options`);
|
|
613
|
+
|
|
614
|
+
// Insert eligibility rules
|
|
615
|
+
const insertEligibility = db.instance.prepare(
|
|
616
|
+
`INSERT INTO eligibility_rules (grant_id, farm_type, investment_type, zone, requirement)
|
|
617
|
+
VALUES (?, ?, ?, ?, ?)`
|
|
618
|
+
);
|
|
619
|
+
|
|
620
|
+
for (const e of eligibilityRules) {
|
|
621
|
+
insertEligibility.run(e.grant_id, e.farm_type, e.investment_type, e.zone, e.requirement);
|
|
622
|
+
}
|
|
623
|
+
console.log(` Inserted ${eligibilityRules.length} eligibility rules`);
|
|
624
|
+
|
|
625
|
+
// Insert deadlines
|
|
626
|
+
const insertDeadline = db.instance.prepare(
|
|
627
|
+
`INSERT INTO application_deadlines (grant_id, canton, deadline_date, notes)
|
|
628
|
+
VALUES (?, ?, ?, ?)`
|
|
629
|
+
);
|
|
630
|
+
|
|
631
|
+
for (const d of applicationDeadlines) {
|
|
632
|
+
insertDeadline.run(d.grant_id, d.canton, d.deadline_date, d.notes);
|
|
633
|
+
}
|
|
634
|
+
console.log(` Inserted ${applicationDeadlines.length} application deadlines`);
|
|
635
|
+
|
|
636
|
+
// ---------------------------------------------------------------------------
|
|
637
|
+
// 6. Build FTS5 search index
|
|
638
|
+
// ---------------------------------------------------------------------------
|
|
639
|
+
|
|
640
|
+
console.log('Building FTS5 search index...');
|
|
641
|
+
|
|
642
|
+
const insertFts = db.instance.prepare(
|
|
643
|
+
`INSERT INTO search_index (title, body, grant_type, jurisdiction) VALUES (?, ?, ?, 'CH')`
|
|
644
|
+
);
|
|
645
|
+
|
|
646
|
+
for (const g of grants) {
|
|
647
|
+
const body = [
|
|
648
|
+
g.description,
|
|
649
|
+
g.legal_basis,
|
|
650
|
+
g.zone_bonus ? `Zonenzuschlaege: ${JSON.stringify(g.zone_bonus)}` : '',
|
|
651
|
+
g.max_amount ? `Maximalbetrag: ${g.max_amount} CHF` : '',
|
|
652
|
+
g.duration_years ? `Laufzeit: ${g.duration_years} Jahre` : '',
|
|
653
|
+
g.federal_rate_pct ? `Bundesbeitrag: ${g.federal_rate_pct}%` : '',
|
|
654
|
+
].filter(Boolean).join(' | ');
|
|
655
|
+
|
|
656
|
+
insertFts.run(g.name, body, g.grant_type);
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
// Also index grant options
|
|
660
|
+
for (const o of grantOptions) {
|
|
661
|
+
const grant = grants.find(g => g.id === o.grant_id);
|
|
662
|
+
const grantType = grant?.grant_type ?? 'beitrag';
|
|
663
|
+
const body = [o.description, o.rate, o.conditions].filter(Boolean).join(' | ');
|
|
664
|
+
insertFts.run(o.option_name, body, grantType);
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
console.log(` Indexed ${grants.length + grantOptions.length} FTS entries`);
|
|
668
|
+
|
|
669
|
+
// ---------------------------------------------------------------------------
|
|
670
|
+
// 7. Update metadata
|
|
671
|
+
// ---------------------------------------------------------------------------
|
|
672
|
+
|
|
673
|
+
db.run(`INSERT OR REPLACE INTO db_metadata (key, value) VALUES ('last_ingest', ?)`, [now]);
|
|
674
|
+
db.run(`INSERT OR REPLACE INTO db_metadata (key, value) VALUES ('build_date', ?)`, [now]);
|
|
675
|
+
|
|
676
|
+
// ---------------------------------------------------------------------------
|
|
677
|
+
// 8. Write coverage.json
|
|
678
|
+
// ---------------------------------------------------------------------------
|
|
679
|
+
|
|
680
|
+
const coverage = {
|
|
681
|
+
server: 'ch-farm-grants-mcp',
|
|
682
|
+
jurisdiction: 'CH',
|
|
683
|
+
version: '0.1.0',
|
|
684
|
+
last_ingest: now,
|
|
685
|
+
data: {
|
|
686
|
+
grants: grants.length,
|
|
687
|
+
grant_options: grantOptions.length,
|
|
688
|
+
eligibility_rules: eligibilityRules.length,
|
|
689
|
+
application_deadlines: applicationDeadlines.length,
|
|
690
|
+
},
|
|
691
|
+
tools: 10,
|
|
692
|
+
sources: [
|
|
693
|
+
'Strukturverbesserungsverordnung (SVV, SR 913.1)',
|
|
694
|
+
'BLW Weisungen Investitionskredite und Beitraege',
|
|
695
|
+
'Kantonale Landwirtschaftsaemter',
|
|
696
|
+
'AGRIDEA Beratungsunterlagen',
|
|
697
|
+
],
|
|
698
|
+
};
|
|
699
|
+
|
|
700
|
+
writeFileSync('data/coverage.json', JSON.stringify(coverage, null, 2) + '\n');
|
|
701
|
+
console.log(' Wrote data/coverage.json');
|
|
702
|
+
|
|
703
|
+
// ---------------------------------------------------------------------------
|
|
704
|
+
// 9. Write sources.yml
|
|
705
|
+
// ---------------------------------------------------------------------------
|
|
706
|
+
|
|
707
|
+
const sourcesYml = `# Data sources for ch-farm-grants-mcp
|
|
708
|
+
sources:
|
|
709
|
+
- name: Strukturverbesserungsverordnung (SVV, SR 913.1)
|
|
710
|
+
authority: Bundesamt fuer Landwirtschaft (BLW)
|
|
711
|
+
url: https://www.blw.admin.ch/blw/de/home/instrumente/strukturverbesserungen.html
|
|
712
|
+
license: Swiss Federal Administration — free reuse
|
|
713
|
+
update_frequency: annual (with ordinance updates)
|
|
714
|
+
last_retrieved: "${now}"
|
|
715
|
+
|
|
716
|
+
- name: BLW Weisungen Investitionskredite und Beitraege
|
|
717
|
+
authority: Bundesamt fuer Landwirtschaft (BLW)
|
|
718
|
+
url: https://www.blw.admin.ch/blw/de/home/instrumente/strukturverbesserungen/investitionskredite.html
|
|
719
|
+
license: Swiss Federal Administration — free reuse
|
|
720
|
+
update_frequency: annual
|
|
721
|
+
last_retrieved: "${now}"
|
|
722
|
+
|
|
723
|
+
- name: Kantonale Landwirtschaftsaemter
|
|
724
|
+
authority: 26 kantonale Landwirtschaftsaemter
|
|
725
|
+
url: https://www.agridea.ch
|
|
726
|
+
license: Cantonal public information
|
|
727
|
+
update_frequency: variable (per canton)
|
|
728
|
+
last_retrieved: "${now}"
|
|
729
|
+
|
|
730
|
+
- name: AGRIDEA Beratungsunterlagen
|
|
731
|
+
authority: AGRIDEA
|
|
732
|
+
url: https://www.agridea.ch
|
|
733
|
+
license: AGRIDEA — educational use
|
|
734
|
+
update_frequency: periodic
|
|
735
|
+
last_retrieved: "${now}"
|
|
736
|
+
`;
|
|
737
|
+
|
|
738
|
+
writeFileSync('data/sources.yml', sourcesYml);
|
|
739
|
+
console.log(' Wrote data/sources.yml');
|
|
740
|
+
|
|
741
|
+
db.close();
|
|
742
|
+
console.log('Ingestion complete.');
|