@jjlmoya/utils-civic 1.3.0 → 1.5.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.
Files changed (69) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +3 -1
  3. package/src/entries.ts +6 -0
  4. package/src/index.ts +2 -0
  5. package/src/pages/[locale]/[slug].astro +7 -4
  6. package/src/tests/locale_completeness.test.ts +1 -1
  7. package/src/tests/tool_validation.test.ts +1 -1
  8. package/src/tool/civic-priority-matrix/bibliography.astro +6 -0
  9. package/src/tool/civic-priority-matrix/bibliography.ts +12 -0
  10. package/src/tool/civic-priority-matrix/civic-priority-matrix.css +531 -0
  11. package/src/tool/civic-priority-matrix/component.astro +108 -0
  12. package/src/tool/civic-priority-matrix/contract.test.ts +16 -0
  13. package/src/tool/civic-priority-matrix/controller.ts +168 -0
  14. package/src/tool/civic-priority-matrix/dom-views.ts +123 -0
  15. package/src/tool/civic-priority-matrix/entry.ts +28 -0
  16. package/src/tool/civic-priority-matrix/evaluator.ts +13 -0
  17. package/src/tool/civic-priority-matrix/i18n/de.ts +52 -0
  18. package/src/tool/civic-priority-matrix/i18n/en.ts +73 -0
  19. package/src/tool/civic-priority-matrix/i18n/es.ts +52 -0
  20. package/src/tool/civic-priority-matrix/i18n/fr.ts +50 -0
  21. package/src/tool/civic-priority-matrix/i18n/id.ts +50 -0
  22. package/src/tool/civic-priority-matrix/i18n/it.ts +50 -0
  23. package/src/tool/civic-priority-matrix/i18n/ja.ts +121 -0
  24. package/src/tool/civic-priority-matrix/i18n/ko.ts +121 -0
  25. package/src/tool/civic-priority-matrix/i18n/nl.ts +45 -0
  26. package/src/tool/civic-priority-matrix/i18n/pl.ts +35 -0
  27. package/src/tool/civic-priority-matrix/i18n/pt.ts +32 -0
  28. package/src/tool/civic-priority-matrix/i18n/ru.ts +32 -0
  29. package/src/tool/civic-priority-matrix/i18n/sv.ts +32 -0
  30. package/src/tool/civic-priority-matrix/i18n/tr.ts +32 -0
  31. package/src/tool/civic-priority-matrix/i18n/zh.ts +121 -0
  32. package/src/tool/civic-priority-matrix/index.ts +11 -0
  33. package/src/tool/civic-priority-matrix/logic.test.ts +68 -0
  34. package/src/tool/civic-priority-matrix/logic.ts +124 -0
  35. package/src/tool/civic-priority-matrix/seo.astro +12 -0
  36. package/src/tool/civic-priority-matrix/storage.ts +50 -0
  37. package/src/tool/civic-priority-matrix/ui.ts +96 -0
  38. package/src/tool/referendum-threshold-calculator/bibliography.astro +6 -0
  39. package/src/tool/referendum-threshold-calculator/bibliography.ts +6 -0
  40. package/src/tool/referendum-threshold-calculator/component.astro +117 -0
  41. package/src/tool/referendum-threshold-calculator/controller.ts +141 -0
  42. package/src/tool/referendum-threshold-calculator/dom-views.ts +71 -0
  43. package/src/tool/referendum-threshold-calculator/entry.ts +27 -0
  44. package/src/tool/referendum-threshold-calculator/evaluator.ts +19 -0
  45. package/src/tool/referendum-threshold-calculator/i18n/de.ts +56 -0
  46. package/src/tool/referendum-threshold-calculator/i18n/en.ts +79 -0
  47. package/src/tool/referendum-threshold-calculator/i18n/es.ts +56 -0
  48. package/src/tool/referendum-threshold-calculator/i18n/fr.ts +56 -0
  49. package/src/tool/referendum-threshold-calculator/i18n/id.ts +56 -0
  50. package/src/tool/referendum-threshold-calculator/i18n/it.ts +56 -0
  51. package/src/tool/referendum-threshold-calculator/i18n/ja.ts +56 -0
  52. package/src/tool/referendum-threshold-calculator/i18n/ko.ts +56 -0
  53. package/src/tool/referendum-threshold-calculator/i18n/nl.ts +56 -0
  54. package/src/tool/referendum-threshold-calculator/i18n/pl.ts +56 -0
  55. package/src/tool/referendum-threshold-calculator/i18n/pt.ts +56 -0
  56. package/src/tool/referendum-threshold-calculator/i18n/ru.ts +56 -0
  57. package/src/tool/referendum-threshold-calculator/i18n/sv.ts +56 -0
  58. package/src/tool/referendum-threshold-calculator/i18n/tr.ts +56 -0
  59. package/src/tool/referendum-threshold-calculator/i18n/zh.ts +56 -0
  60. package/src/tool/referendum-threshold-calculator/index.ts +11 -0
  61. package/src/tool/referendum-threshold-calculator/logic.test.ts +69 -0
  62. package/src/tool/referendum-threshold-calculator/logic.ts +120 -0
  63. package/src/tool/referendum-threshold-calculator/referendum-threshold-calculator.css +640 -0
  64. package/src/tool/referendum-threshold-calculator/seo.astro +14 -0
  65. package/src/tool/referendum-threshold-calculator/sharing.test.ts +23 -0
  66. package/src/tool/referendum-threshold-calculator/sharing.ts +42 -0
  67. package/src/tool/referendum-threshold-calculator/storage.ts +39 -0
  68. package/src/tool/referendum-threshold-calculator/ui.ts +126 -0
  69. package/src/tools.ts +4 -0
@@ -0,0 +1,56 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { ReferendumThresholdLocaleContent } from '../entry';
5
+ import type { ReferendumThresholdUI } from '../ui';
6
+
7
+ const ui: ReferendumThresholdUI = {
8
+ countsHeading: '공표된 투표 수 입력', eligibleLabel: '투표권자 또는 등록 유권자', eligibleHelp: '확인하려는 규칙이 지정한 유권자 수를 사용하세요.', yesLabel: '찬성표', noLabel: '반대표', blankLabel: '기권 또는 백지표', invalidLabel: '무효표', participationHeading: '참여 정족수', participationHelp: '참여로 계산할 표와 도달해야 할 기준을 선택하세요.', approvalHeading: '승인 정족수', approvalHelp: '찬성표의 분모를 선택하세요. 각 규칙은 결과에 표시됩니다.', thresholdModeLabel: '기준 유형', comparisonLabel: '비교', atLeastOption: '이상', moreThanOption: '초과', percentageOption: '백분율', absoluteOption: '절대 수', thresholdValueLabel: '기준값', denominatorLabel: '사용할 수', allBallotsOption: '모든 투표용지', validVotesOption: '유효표만', eligibleVotersOption: '투표권자', presetsLabel: '승인 프리셋', simpleMajorityPreset: '단순 과반수', electorateMajorityPreset: '유권자 과반수', qualified55Preset: '55% 특별 다수', qualified60Preset: '60% 특별 다수', loadExample: '예시 불러오기', shareAction: '퍼머링크 복사', shareSuccess: '퍼머링크를 복사했습니다. 투표 수와 두 규칙이 포함됩니다.', shareFailure: '퍼머링크가 주소 표시줄에 있습니다.', resultHeading: '공표된 규칙에 따른 판정', emptyResult: '두 정족수 검사를 보려면 투표 수와 기준을 입력하세요.', passed: '두 기준 모두 충족', participationFailed: '참여 정족수 미달', approvalFailed: '승인 정족수 미달', bothFailed: '두 기준 모두 미달', invalidResult: '공표된 투표 수를 확인하세요', participationMetric: '참여 검사', approvalMetric: '승인 검사', observedLabel: '관측값', thresholdLabel: '필요 기준', decisionPathLabel: '판정 경로', methodHeading: '적용한 방법', methodText: '참여율은 선택한 참여 수를 유권자 수로 나눈 값입니다. 승인율은 찬성표를 선택한 분모로 나눈 값입니다. 비교 방식에 따라 정확히 같은 값이 허용되는지 기준을 초과해야 하는지가 결정됩니다. 절대 기준은 수를 직접 비교합니다.', limitsHeading: '이 도구가 하지 않는 일', limitsText: '관할 기관을 정하거나 개표를 인증하거나 기한을 판단하거나 법률 자문을 제공하지 않습니다. 결과는 입력한 전제에 달려 있습니다.', warningsHeading: '경계 사례 및 데이터 주의', warningsText: '백지표와 무효표가 참여에 포함되는지, 유권자 수가 최신인지, 승인이 유효표와 전체 투표용지 또는 유권자 중 무엇을 사용하는지 확인하세요.', invalidInput: '음수가 아닌 정수를 사용하세요. 유권자 수는 0보다 커야 하며 투표용지 수가 이를 초과할 수 없습니다.', ballotsExceedEligible: '공표된 투표용지 수가 유권자 수를 초과합니다.', noValidVotes: '찬성표나 반대표가 없어 유효표 분모가 없습니다.', noBallots: '투표용지가 입력되지 않았습니다.', peopleSuffix: '명', yesShareLabel: '찬성표 비율', allBallotsLabel: '모든 투표용지', validVotesLabel: '유효표', eligibleVotersLabel: '유권자', whatNextLabel: '결과를 사용하기 전에', whatNextText: '적용되는 규칙의 정확한 문구를 복사하고 표시된 설정과 비교하세요.',
9
+ };
10
+
11
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: '국민투표 기준 계산기', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: '분자와 분모를 표시하여 참여 및 승인 정족수를 확인합니다.', url: 'https://gamebob.dev/ko/gukmin-tupyo-chamyeoyul-gyesan', offers: { '@type': 'Offer', price: '0', priceCurrency: 'KRW' } };
12
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [
13
+ { '@type': 'Question', name: '이 계산기는 무엇을 판정하나요?', acceptedAnswer: { '@type': 'Answer', text: '입력한 참여 및 승인 기준과 투표 수를 비교합니다. 어떤 법 규정이 적용되는지는 결정하지 않습니다.' } },
14
+ { '@type': 'Question', name: '참여와 승인의 차이는 무엇인가요?', acceptedAnswer: { '@type': 'Answer', text: '참여는 충분한 사람 또는 투표용지가 기준에 도달했는지 확인합니다. 승인은 찬성표가 필요한 수나 비율에 도달했는지 확인합니다.' } },
15
+ { '@type': 'Question', name: '백지표와 무효표가 결과를 바꿀 수 있는 이유는 무엇인가요?', acceptedAnswer: { '@type': 'Answer', text: '참여에는 포함되지만 유효표에서는 제외될 수 있습니다. 이 도구는 분모를 따로 표시합니다.' } },
16
+ { '@type': 'Question', name: '통과 결과가 법적 유효성을 증명하나요?', acceptedAnswer: { '@type': 'Answer', text: '아니요. 헌법, 법률, 공식 지침, 투표용지 정의와 개표 기관을 확인하세요.' } },
17
+ ] };
18
+ const howTo: HowTo = { '@type': 'HowTo', name: '국민투표 기준 확인하기', step: [
19
+ { '@type': 'HowToStep', name: '유권자 수 입력', text: '규칙에서 사용하는 등록 유권자 또는 투표권자를 입력합니다.' },
20
+ { '@type': 'HowToStep', name: '투표용지 분리', text: '같은 결과의 찬성, 반대, 백지, 무효 수를 입력합니다.' },
21
+ { '@type': 'HowToStep', name: '참여 정의', text: '계산할 수와 백분율 또는 절대 참여 기준을 선택합니다.' },
22
+ { '@type': 'HowToStep', name: '승인 정의', text: '분모와 필요한 찬성표 조건을 선택합니다.' },
23
+ { '@type': 'HowToStep', name: '두 검사 읽기', text: '분자, 분모, 비율, 기준과 주의사항을 확인합니다.' },
24
+ ] };
25
+
26
+ export const content: ToolLocaleContent<ReferendumThresholdLocaleContent['ui']> = {
27
+ slug: 'referendum-threshold-calculator', title: '국민투표 기준 계산기', description: '분자와 분모, 참여와 승인 규칙을 분명하게 표시하여 국민투표 정족수를 확인합니다.', ui, seo: [
28
+ { type: 'title', text: '분모를 확인하며 국민투표 규칙 계산하기', level: 2 },
29
+ { type: 'paragraph', html: '국민투표 결과는 간단해 보이지만 분모에 따라 해석이 달라집니다. 이 계산기는 유권자 수와 투표용지 종류, 참여와 승인 정족수를 한 화면에서 확인하게 합니다.' },
30
+ { type: 'paragraph', html: '참여와 승인은 서로 다른 검사입니다. 백지표와 무효표는 참여에는 포함되면서 유효표에는 포함되지 않을 수 있습니다. 도구는 이 선택을 임의로 가정하지 않습니다.' },
31
+ { type: 'title', text: '두 정족수의 작동 방식', level: 2 },
32
+ { type: 'paragraph', html: '참여율은 선택한 참여 수를 유권자 수로 나눕니다. 승인율은 찬성표를 선택한 분모로 나눕니다. 비교 방식은 동일한 값도 인정할지 기준 초과를 요구할지 보여 줍니다.' },
33
+ { type: 'table', headers: ['검사', '관측값', '확인할 질문'], rows: [['참여', '선택한 투표용지 / 유권자', '유권자의 충분한 비율이 참여했나요?'], ['승인', '찬성 / 선택한 분모', '찬성표가 필요한 기준에 도달했나요?']] },
34
+ { type: 'title', text: '정의를 섞지 않고 투표 수 준비하기', level: 2 },
35
+ { type: 'paragraph', html: '같은 투표와 같은 유권자 명부 버전의 수치를 사용하세요. 분모를 고르기 전에 찬성, 반대, 백지, 무효를 분리하면 각 수치를 다시 확인하기 쉽습니다.' },
36
+ { type: 'list', items: ['규칙이 등록 유권자와 투표권자 중 무엇을 말하는지 확인합니다.', '네 가지 투표용지 범주를 따로 기록합니다.', '전체 투표용지가 유권자 수를 넘지 않는지 확인합니다.', '각 백분율의 분모를 적어 둡니다.', '공식 규칙 문구를 계산 결과와 함께 보관합니다.'] },
37
+ { type: 'tip', title: '분모는 규칙의 일부입니다', html: '유효표의 50%와 모든 투표용지 또는 유권자의 50%는 같은 검사가 아닙니다. 백지표와 무효표가 판정을 바꿀 수 있습니다.' },
38
+ { type: 'title', text: '통과와 실패 상태 해석하기', level: 2 },
39
+ { type: 'paragraph', html: '결과는 참여 실패와 승인 실패를 구분합니다. 참여는 통과했지만 승인이 실패했다면 찬성표와 분모를 확인하세요. 반대의 경우에는 참여 조건이 부족합니다.' },
40
+ { type: 'paragraph', html: '계산상 통과는 법적 결론이 아닙니다. 관할 지역에 따라 특별 조건, 지역 조건 또는 백지표와 무효표의 공식 처리 방식이 다를 수 있습니다. 도구는 입력한 구성만 평가합니다.' },
41
+ { type: 'tip', title: '결과를 확인표로 사용하기', html: '결론을 공개하기 전에 모든 분자, 분모, 방식과 비교를 최신 규칙과 맞춰 보세요. 정의가 불확실하면 주의 표시를 유지하세요.' },
42
+ { type: 'title', text: '자료와 한계', level: 2 },
43
+ { type: 'paragraph', html: 'International IDEA는 참여와 승인 규칙을 명확히 해야 하는 이유를 설명합니다. 베니스위원회는 정족수의 영향을 검토합니다. 이 자료는 확인 방법을 뒷받침하지만 모든 국가에 적용되는 기준을 제시하지는 않습니다.' },
44
+ ], faq: [
45
+ { question: '이 계산기는 무엇을 판정하나요?', answer: '입력한 참여 및 승인 기준과 투표 수를 비교합니다. 어떤 법 규정이 적용되는지는 결정하지 않습니다.' },
46
+ { question: '참여와 승인의 차이는 무엇인가요?', answer: '참여는 충분한 사람 또는 투표용지가 기준에 도달했는지 확인합니다. 승인은 찬성표가 필요한 수나 비율에 도달했는지 확인합니다.' },
47
+ { question: '백지표와 무효표가 결과를 바꿀 수 있는 이유는 무엇인가요?', answer: '참여에는 포함되지만 유효표에서는 제외될 수 있습니다. 이 도구는 분모를 따로 표시합니다.' },
48
+ { question: '통과 결과가 법적 유효성을 증명하나요?', answer: '아니요. 헌법, 법률, 공식 지침, 투표용지 정의와 개표 기관을 확인하세요.' },
49
+ ], bibliography, howTo: [
50
+ { name: '유권자 수 입력', text: '규칙에서 사용하는 등록 유권자 또는 투표권자를 입력합니다.' },
51
+ { name: '투표용지 분리', text: '같은 결과의 찬성, 반대, 백지, 무효 수를 입력합니다.' },
52
+ { name: '참여 정의', text: '계산할 수와 백분율 또는 절대 참여 기준을 선택합니다.' },
53
+ { name: '승인 정의', text: '분모와 필요한 찬성표 조건을 선택합니다.' },
54
+ { name: '두 검사 읽기', text: '분자, 분모, 비율, 기준과 주의사항을 확인합니다.' },
55
+ ], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[]
56
+ };
@@ -0,0 +1,56 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { ReferendumThresholdLocaleContent } from '../entry';
5
+ import type { ReferendumThresholdUI } from '../ui';
6
+
7
+ const ui: ReferendumThresholdUI = {
8
+ countsHeading: 'Voer de bekendgemaakte aantallen in', eligibleLabel: 'Kiesgerechtigde of geregistreerde kiezers', eligibleHelp: 'Gebruik het kiespubliek dat de gecontroleerde regel noemt.', yesLabel: 'Ja stemmen', noLabel: 'Nee stemmen', blankLabel: 'Blanco stembiljetten', invalidLabel: 'Ongeldige stembiljetten', participationHeading: 'Participatiequorum', participationHelp: 'Kies wat als deelname telt en welke drempel moet worden gehaald.', approvalHeading: 'Goedkeuringsquorum', approvalHelp: 'Kies de noemer voor ja stemmen. Elke regel blijft zichtbaar in het resultaat.', thresholdModeLabel: 'Drempeltype', comparisonLabel: 'Vergelijking', atLeastOption: 'Minstens', moreThanOption: 'Meer dan', percentageOption: 'Percentage', absoluteOption: 'Absoluut aantal', thresholdValueLabel: 'Drempelwaarde', denominatorLabel: 'Gebruikte telling', allBallotsOption: 'Alle stembiljetten', validVotesOption: 'Alleen geldige stemmen', eligibleVotersOption: 'Kiesgerechtigde kiezers', presetsLabel: 'Goedkeuringsvoorinstellingen', simpleMajorityPreset: 'Eenvoudige meerderheid', electorateMajorityPreset: 'Meerderheid van kiezers', qualified55Preset: 'Gekwalificeerd 55%', qualified60Preset: 'Gekwalificeerd 60%', loadExample: 'Voorbeeld laden', shareAction: 'Permalink kopiëren', shareSuccess: 'Permalink gekopieerd. Het bevat aantallen en regels.', shareFailure: 'De permalink staat in de adresbalk en kan worden gekopieerd.', resultHeading: 'Beslissing volgens de opgegeven regel', emptyResult: 'Voer aantallen en drempels in om beide quorumtests te zien.', passed: 'Beide drempels worden gehaald', participationFailed: 'Participatiequorum wordt niet gehaald', approvalFailed: 'Goedkeuringsquorum wordt niet gehaald', bothFailed: 'Geen van beide drempels wordt gehaald', invalidResult: 'Controleer de opgegeven aantallen', participationMetric: 'Participatietest', approvalMetric: 'Goedkeuringstest', observedLabel: 'Waargenomen', thresholdLabel: 'Vereist', decisionPathLabel: 'Beslispad', methodHeading: 'Toegepaste methode', methodText: 'Participatie is de gekozen telling gedeeld door het aantal kiezers. Goedkeuring is ja gedeeld door de gekozen noemer. De vergelijking bepaalt of een exacte waarde volstaat of moet worden overschreden. Absolute drempels vergelijken aantallen rechtstreeks.', limitsHeading: 'Wat deze tool niet doet', limitsText: 'De tool bepaalt geen bevoegde instantie, certificeert geen telling, stelt geen termijnen vast en geeft geen juridisch advies. Het resultaat hangt af van de ingevoerde aannames.', warningsHeading: 'Randgevallen en gegevenswaarschuwingen', warningsText: 'Controleer of blanco en ongeldige biljetten meetellen voor participatie, of het kiespubliek actueel is en of goedkeuring geldige stemmen, alle biljetten of kiezers gebruikt.', invalidInput: 'Gebruik gehele, niet-negatieve aantallen. Het aantal kiezers moet groter zijn dan nul en het aantal biljetten mag dit niet overschrijden.', ballotsExceedEligible: 'De opgegeven stembiljetten zijn talrijker dan de kiezers.', noValidVotes: 'Er zijn geen ja- of nee-stemmen, dus de noemer van geldige stemmen ontbreekt.', noBallots: 'Er zijn geen stembiljetten opgegeven.', peopleSuffix: 'personen', yesShareLabel: 'Aandeel ja', allBallotsLabel: 'alle stembiljetten', validVotesLabel: 'geldige stemmen', eligibleVotersLabel: 'kiezers', whatNextLabel: 'Voordat je het resultaat gebruikt', whatNextText: 'Kopieer de exacte tekst van de toepasselijke regel en vergelijk die met de getoonde configuratie.',
9
+ };
10
+
11
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Referendumdrempel calculator', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: 'Controleer participatie- en goedkeuringsquorums met zichtbare tellers en noemers.', url: 'https://gamebob.dev/nl/referendum-drempel-calculator', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' } };
12
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [
13
+ { '@type': 'Question', name: 'Wat beslist deze calculator?', acceptedAnswer: { '@type': 'Answer', text: 'De calculator vergelijkt de opgegeven aantallen met de ingevoerde participatie- en goedkeuringsdrempels. Hij bepaalt niet welke rechtsregel geldt.' } },
14
+ { '@type': 'Question', name: 'Wat is het verschil tussen participatie en goedkeuring?', acceptedAnswer: { '@type': 'Answer', text: 'Participatie vraagt of voldoende personen of biljetten de drempel bereiken. Goedkeuring vraagt of ja de vereiste hoeveelheid of verhouding bereikt.' } },
15
+ { '@type': 'Question', name: 'Waarom kunnen blanco en ongeldige biljetten het resultaat veranderen?', acceptedAnswer: { '@type': 'Answer', text: 'Ze kunnen meetellen voor participatie maar buiten geldige stemmen vallen. De tool maakt elke noemer afzonderlijk zichtbaar.' } },
16
+ { '@type': 'Question', name: 'Bewijst een positief resultaat juridische geldigheid?', acceptedAnswer: { '@type': 'Answer', text: 'Nee. Controleer grondwet, wet, officiële richtlijnen, definities van biljetten en de telautoriteit.' } },
17
+ ] };
18
+ const howTo: HowTo = { '@type': 'HowTo', name: 'Referendumdrempels controleren', step: [
19
+ { '@type': 'HowToStep', name: 'Voer het kiespubliek in', text: 'Vul de geregistreerde of kiesgerechtigde kiezers uit de regel in.' },
20
+ { '@type': 'HowToStep', name: 'Scheid de biljetten', text: 'Voeg ja, nee, blanco en ongeldig uit dezelfde uitslag toe.' },
21
+ { '@type': 'HowToStep', name: 'Definieer participatie', text: 'Kies de telling en een procentuele of absolute drempel.' },
22
+ { '@type': 'HowToStep', name: 'Definieer goedkeuring', text: 'Kies de noemer en de vereiste voor ja stemmen.' },
23
+ { '@type': 'HowToStep', name: 'Lees beide tests', text: 'Controleer teller, noemer, percentage, drempel en waarschuwingen.' },
24
+ ] };
25
+
26
+ export const content: ToolLocaleContent<ReferendumThresholdLocaleContent['ui']> = {
27
+ slug: 'referendum-drempel-calculator', title: 'Referendumdrempel calculator', description: 'Controleer participatie- en goedkeuringsquorums met elke teller, noemer en regel duidelijk in beeld.', ui, seo: [
28
+ { type: 'title', text: 'Controleer een referendumregel met zichtbare noemers', level: 2 },
29
+ { type: 'paragraph', html: 'Een referendumuitslag lijkt soms vanzelfsprekend terwijl de noemer de uitkomst bepaalt. Deze calculator toont kiespubliek, biljetcategorieën en beide quorums in één controleerbare weergave.' },
30
+ { type: 'paragraph', html: 'Participatie en goedkeuring zijn verschillende tests. Blanco en ongeldige biljetten kunnen participatie verhogen zonder geldige stemmen te worden. De tool kiest die definitie niet stilzwijgend.' },
31
+ { type: 'title', text: 'Zo werken de twee quorumtests', level: 2 },
32
+ { type: 'paragraph', html: 'Het participatiepercentage deelt de gekozen telling door de kiezers. Het goedkeuringspercentage deelt ja door de gekozen noemer. Je kunt gelijkheid toestaan of eisen dat de waarde de drempel overschrijdt.' },
33
+ { type: 'table', headers: ['Test', 'Waargenomen waarde', 'Vraag'], rows: [['Participatie', 'Gekozen biljetten / kiezers', 'Nam een voldoende deel van het kiespubliek deel?'], ['Goedkeuring', 'Ja / gekozen noemer', 'Bereikt ja de vereiste drempel?']] },
34
+ { type: 'title', text: 'Bereid aantallen voor zonder definities te mengen', level: 2 },
35
+ { type: 'paragraph', html: 'Gebruik cijfers uit dezelfde stemming en dezelfde versie van het kiezersregister. Houd ja, nee, blanco en ongeldig gescheiden voordat je een noemer kiest. Zo blijft elke waarde terug te vinden.' },
36
+ { type: 'list', items: ['Controleer of de regel geregistreerde of kiesgerechtigde kiezers noemt.', 'Registreer de vier biljetcategorieën afzonderlijk.', 'Controleer dat het aantal biljetten niet boven het kiespubliek uitkomt.', 'Noteer de noemer van elk percentage.', 'Bewaar de officiële formulering naast de uitkomst.'] },
37
+ { type: 'tip', title: 'De noemer is onderdeel van de regel', html: '50% goedkeuring onder geldige stemmen is niet dezelfde test als 50% onder alle biljetten of kiezers. Blanco en ongeldige stemmen kunnen de beslissing verschuiven.' },
38
+ { type: 'title', text: 'Interpreteer geslaagde en mislukte tests', level: 2 },
39
+ { type: 'paragraph', html: 'De uitkomst onderscheidt participatiefalen van goedkeuringsfalen. Als participatie slaagt maar goedkeuring niet, kijk dan naar ja en de gekozen noemer. In het omgekeerde geval ontbreekt de participatievoorwaarde.' },
40
+ { type: 'paragraph', html: 'Een positieve berekening is geen juridische conclusie. Een rechtsgebied kan bijzondere, territoriale of officiële regels voor blanco en ongeldige biljetten hebben. De tool beoordeelt alleen de ingevoerde configuratie.' },
41
+ { type: 'tip', title: 'Gebruik de uitkomst als controleblad', html: 'Vergelijk voor publicatie elke teller, noemer, modus en vergelijking met de actuele regel. Laat bij twijfel de waarschuwing staan.' },
42
+ { type: 'title', text: 'Bronnen en grenzen', level: 2 },
43
+ { type: 'paragraph', html: 'International IDEA beschrijft waarom participatie- en goedkeuringsregels vooraf duidelijk moeten zijn. De Commissie van Venetië bespreekt de effecten van quorums. Deze bronnen geven geen universele drempel.' },
44
+ ], faq: [
45
+ { question: 'Wat beslist deze calculator?', answer: 'De calculator vergelijkt de opgegeven aantallen met de ingevoerde participatie- en goedkeuringsdrempels. Hij bepaalt niet welke rechtsregel geldt.' },
46
+ { question: 'Wat is het verschil tussen participatie en goedkeuring?', answer: 'Participatie vraagt of voldoende personen of biljetten de drempel bereiken. Goedkeuring vraagt of ja de vereiste hoeveelheid of verhouding bereikt.' },
47
+ { question: 'Waarom kunnen blanco en ongeldige biljetten het resultaat veranderen?', answer: 'Ze kunnen meetellen voor participatie maar buiten geldige stemmen vallen. De tool maakt elke noemer afzonderlijk zichtbaar.' },
48
+ { question: 'Bewijst een positief resultaat juridische geldigheid?', answer: 'Nee. Controleer grondwet, wet, officiële richtlijnen, definities van biljetten en de telautoriteit.' },
49
+ ], bibliography, howTo: [
50
+ { name: 'Voer het kiespubliek in', text: 'Vul de geregistreerde of kiesgerechtigde kiezers uit de regel in.' },
51
+ { name: 'Scheid de biljetten', text: 'Voeg ja, nee, blanco en ongeldig uit dezelfde uitslag toe.' },
52
+ { name: 'Definieer participatie', text: 'Kies de telling en een procentuele of absolute drempel.' },
53
+ { name: 'Definieer goedkeuring', text: 'Kies de noemer en de vereiste voor ja stemmen.' },
54
+ { name: 'Lees beide tests', text: 'Controleer teller, noemer, percentage, drempel en waarschuwingen.' },
55
+ ], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[]
56
+ };
@@ -0,0 +1,56 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { ReferendumThresholdLocaleContent } from '../entry';
5
+ import type { ReferendumThresholdUI } from '../ui';
6
+
7
+ const ui: ReferendumThresholdUI = {
8
+ countsHeading: 'Wpisz zadeklarowane wyniki', eligibleLabel: 'Wyborcy uprawnieni lub zarejestrowani', eligibleHelp: 'Użyj elektoratu wskazanego w sprawdzanej regule.', yesLabel: 'Głosy za', noLabel: 'Głosy przeciw', blankLabel: 'Głosy nieważne puste', invalidLabel: 'Głosy nieważne', participationHeading: 'Kworum uczestnictwa', participationHelp: 'Wybierz, co liczy się jako uczestnictwo i jaki próg musi zostać osiągnięty.', approvalHeading: 'Kworum poparcia', approvalHelp: 'Wybierz mianownik dla głosów za. Każda reguła pozostaje widoczna w wyniku.', thresholdModeLabel: 'Typ progu', comparisonLabel: 'Porównanie', atLeastOption: 'Co najmniej', moreThanOption: 'Więcej niż', percentageOption: 'Procent', absoluteOption: 'Liczba bezwzględna', thresholdValueLabel: 'Wartość progu', denominatorLabel: 'Użyty licznik', allBallotsOption: 'Wszystkie karty', validVotesOption: 'Tylko ważne głosy', eligibleVotersOption: 'Wyborcy uprawnieni', presetsLabel: 'Gotowe progi poparcia', simpleMajorityPreset: 'Zwykła większość', electorateMajorityPreset: 'Większość elektoratu', qualified55Preset: 'Kwalifikowane 55%', qualified60Preset: 'Kwalifikowane 60%', loadExample: 'Wczytaj przykład', shareAction: 'Kopiuj permalink', shareSuccess: 'Permalink skopiowany. Zawiera wyniki i obie reguły.', shareFailure: 'Permalink jest w pasku adresu i można go skopiować.', resultHeading: 'Decyzja według zadeklarowanej reguły', emptyResult: 'Wpisz wyniki i progi, aby zobaczyć oba testy kworum.', passed: 'Oba progi są spełnione', participationFailed: 'Kworum uczestnictwa nie jest spełnione', approvalFailed: 'Kworum poparcia nie jest spełnione', bothFailed: 'Żaden próg nie jest spełniony', invalidResult: 'Sprawdź zadeklarowane wyniki', participationMetric: 'Test uczestnictwa', approvalMetric: 'Test poparcia', observedLabel: 'Zaobserwowano', thresholdLabel: 'Wymagane', decisionPathLabel: 'Ścieżka decyzji', methodHeading: 'Zastosowana metoda', methodText: 'Uczestnictwo to wybrany licznik podzielony przez liczbę wyborców. Poparcie to głosy za podzielone przez wybrany mianownik. Porównanie wskazuje, czy wystarczy dokładna wartość, czy trzeba ją przekroczyć. Progi bezwzględne porównują liczby bezpośrednio.', limitsHeading: 'Czego to narzędzie nie robi', limitsText: 'Nie wskazuje właściwego organu, nie zatwierdza liczenia, nie ustala terminów i nie udziela porady prawnej. Wynik zależy od przyjętych założeń.', warningsHeading: 'Przypadki graniczne i ostrzeżenia', warningsText: 'Sprawdź, czy puste i nieważne karty liczą się do uczestnictwa, czy elektorat jest aktualny oraz czy poparcie używa ważnych głosów, wszystkich kart czy wyborców.', invalidInput: 'Użyj całkowitych, nieujemnych liczb. Liczba wyborców musi być większa od zera, a kart nie może być więcej.', ballotsExceedEligible: 'Zadeklarowanych kart jest więcej niż wyborców.', noValidVotes: 'Brak głosów za i przeciw, więc nie ma mianownika ważnych głosów.', noBallots: 'Nie zadeklarowano żadnych kart.', peopleSuffix: 'osób', yesShareLabel: 'Udział głosów za', allBallotsLabel: 'wszystkie karty', validVotesLabel: 'ważne głosy', eligibleVotersLabel: 'wyborcy', whatNextLabel: 'Przed użyciem wyniku', whatNextText: 'Skopiuj dokładne brzmienie obowiązującej reguły i porównaj je z pokazaną konfiguracją.',
9
+ };
10
+
11
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Kalkulator progów referendum', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: 'Sprawdza kwora uczestnictwa i poparcia, pokazując liczniki oraz mianowniki.', url: 'https://gamebob.dev/pl/kalkulator-progow-referendum', offers: { '@type': 'Offer', price: '0', priceCurrency: 'PLN' } };
12
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [
13
+ { '@type': 'Question', name: 'Co rozstrzyga ten kalkulator?', acceptedAnswer: { '@type': 'Answer', text: 'Porównuje wyniki z wpisanymi progami uczestnictwa i poparcia. Nie rozstrzyga, która norma prawna obowiązuje.' } },
14
+ { '@type': 'Question', name: 'Czym różni się uczestnictwo od poparcia?', acceptedAnswer: { '@type': 'Answer', text: 'Uczestnictwo sprawdza, czy wystarczająca liczba osób lub kart została uwzględniona. Poparcie sprawdza, czy głosy za osiągają wymaganą liczbę lub udział.' } },
15
+ { '@type': 'Question', name: 'Dlaczego puste i nieważne karty mogą zmienić wynik?', acceptedAnswer: { '@type': 'Answer', text: 'Mogą liczyć się do uczestnictwa, ale nie wejść do ważnych głosów. Narzędzie pokazuje te mianowniki osobno.' } },
16
+ { '@type': 'Question', name: 'Czy pozytywny wynik dowodzi ważności prawnej?', acceptedAnswer: { '@type': 'Answer', text: 'Nie. Sprawdź konstytucję, ustawę, oficjalne wytyczne, definicje kart i organ liczący.' } },
17
+ ] };
18
+ const howTo: HowTo = { '@type': 'HowTo', name: 'Sprawdzić progi referendum', step: [
19
+ { '@type': 'HowToStep', name: 'Wpisz elektorat', text: 'Podaj zarejestrowanych lub uprawnionych wyborców użytych w regule.' },
20
+ { '@type': 'HowToStep', name: 'Rozdziel karty', text: 'Dodaj głosy za, przeciw, puste i nieważne z tego samego głosowania.' },
21
+ { '@type': 'HowToStep', name: 'Ustal uczestnictwo', text: 'Wybierz licznik oraz próg procentowy albo bezwzględny.' },
22
+ { '@type': 'HowToStep', name: 'Ustal poparcie', text: 'Wybierz mianownik i wymagany warunek dla głosów za.' },
23
+ { '@type': 'HowToStep', name: 'Odczytaj testy', text: 'Sprawdź licznik, mianownik, wskaźnik, próg i ostrzeżenia.' },
24
+ ] };
25
+
26
+ export const content: ToolLocaleContent<ReferendumThresholdLocaleContent['ui']> = {
27
+ slug: 'kalkulator-progow-referendum', title: 'Kalkulator progów referendum', description: 'Sprawdź kwora uczestnictwa i poparcia, widząc każdy licznik, mianownik oraz zadeklarowaną regułę.', ui, seo: [
28
+ { type: 'title', text: 'Sprawdź regułę referendum z widocznymi mianownikami', level: 2 },
29
+ { type: 'paragraph', html: 'Wynik referendum może wyglądać jasno, choć mianownik zmienia jego znaczenie. Ten kalkulator pokazuje elektorat, kategorie kart i oba kwora w jednym przejrzystym zestawieniu.' },
30
+ { type: 'paragraph', html: 'Uczestnictwo i poparcie to osobne testy. Puste i nieważne karty mogą zwiększać uczestnictwo, nie należąc do ważnych głosów. Narzędzie nie wybiera tej definicji za użytkownika.' },
31
+ { type: 'title', text: 'Jak działają oba kwora', level: 2 },
32
+ { type: 'paragraph', html: 'Wskaźnik uczestnictwa dzieli wybraną liczbę kart przez liczbę wyborców. Wskaźnik poparcia dzieli głosy za przez wybrany mianownik. Porównanie może dopuścić równość albo wymagać przekroczenia progu.' },
33
+ { type: 'table', headers: ['Test', 'Wartość obserwowana', 'Pytanie'], rows: [['Uczestnictwo', 'Wybrane karty / wyborcy', 'Czy uczestniczyła wystarczająca część elektoratu?'], ['Poparcie', 'Za / wybrany mianownik', 'Czy głosy za osiągają wymagany próg?']] },
34
+ { type: 'title', text: 'Przygotuj wyniki bez mieszania definicji', level: 2 },
35
+ { type: 'paragraph', html: 'Korzystaj z danych z tego samego głosowania i tej samej wersji spisu wyborców. Zapisz osobno głosy za, przeciw, puste i nieważne przed wybraniem mianownika, aby każdą wartość można było sprawdzić.' },
36
+ { type: 'list', items: ['Ustal, czy reguła mówi o wyborcach zarejestrowanych czy uprawnionych.', 'Zapisz osobno wszystkie cztery kategorie kart.', 'Sprawdź, czy suma kart nie przekracza elektoratu.', 'Zanotuj mianownik każdej wartości procentowej.', 'Zachowaj oficjalne brzmienie reguły przy wyniku.'] },
37
+ { type: 'tip', title: 'Mianownik jest częścią reguły', html: '50% poparcia wśród ważnych głosów to inny test niż 50% wśród wszystkich kart lub całego elektoratu. Puste i nieważne karty mogą zmienić decyzję.' },
38
+ { type: 'title', text: 'Odczytaj stany spełnienia i porażki', level: 2 },
39
+ { type: 'paragraph', html: 'Wynik rozróżnia porażkę uczestnictwa od porażki poparcia. Jeśli uczestnictwo przechodzi, a poparcie nie, sprawdź głosy za i ich mianownik. W odwrotnej sytuacji brakuje warunku uczestnictwa.' },
40
+ { type: 'paragraph', html: 'Pozytywny wynik obliczenia nie jest wnioskiem prawnym. Państwo może przewidywać warunki szczególne, terytorialne albo własne zasady traktowania pustych i nieważnych kart. Kalkulator ocenia tylko wpisaną konfigurację.' },
41
+ { type: 'tip', title: 'Traktuj wynik jak arkusz kontroli', html: 'Przed przekazaniem wniosku porównaj każdy licznik, mianownik, tryb i operator z aktualną regułą. Jeśli definicja jest niepewna, zostaw ostrzeżenie widoczne.' },
42
+ { type: 'title', text: 'Źródła i ograniczenia', level: 2 },
43
+ { type: 'paragraph', html: 'International IDEA wyjaśnia, dlaczego reguły uczestnictwa i poparcia powinny być jasne. Komisja Wenecka analizuje skutki kworów. Źródła porządkują metodę, ale nie ustanawiają uniwersalnego progu.' },
44
+ ], faq: [
45
+ { question: 'Co rozstrzyga ten kalkulator?', answer: 'Porównuje wyniki z wpisanymi progami uczestnictwa i poparcia. Nie rozstrzyga, która norma prawna obowiązuje.' },
46
+ { question: 'Czym różni się uczestnictwo od poparcia?', answer: 'Uczestnictwo sprawdza, czy wystarczająca liczba osób lub kart została uwzględniona. Poparcie sprawdza, czy głosy za osiągają wymaganą liczbę lub udział.' },
47
+ { question: 'Dlaczego puste i nieważne karty mogą zmienić wynik?', answer: 'Mogą liczyć się do uczestnictwa, ale nie wejść do ważnych głosów. Narzędzie pokazuje te mianowniki osobno.' },
48
+ { question: 'Czy pozytywny wynik dowodzi ważności prawnej?', answer: 'Nie. Sprawdź konstytucję, ustawę, oficjalne wytyczne, definicje kart i organ liczący.' },
49
+ ], bibliography, howTo: [
50
+ { name: 'Wpisz elektorat', text: 'Podaj zarejestrowanych lub uprawnionych wyborców użytych w regule.' },
51
+ { name: 'Rozdziel karty', text: 'Dodaj głosy za, przeciw, puste i nieważne z tego samego głosowania.' },
52
+ { name: 'Ustal uczestnictwo', text: 'Wybierz licznik oraz próg procentowy albo bezwzględny.' },
53
+ { name: 'Ustal poparcie', text: 'Wybierz mianownik i wymagany warunek dla głosów za.' },
54
+ { name: 'Odczytaj testy', text: 'Sprawdź licznik, mianownik, wskaźnik, próg i ostrzeżenia.' },
55
+ ], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[]
56
+ };
@@ -0,0 +1,56 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { ReferendumThresholdLocaleContent } from '../entry';
5
+ import type { ReferendumThresholdUI } from '../ui';
6
+
7
+ const ui: ReferendumThresholdUI = {
8
+ countsHeading: 'Introduza as contagens declaradas', eligibleLabel: 'Eleitores inscritos ou com direito de voto', eligibleHelp: 'Use o eleitorado indicado pela regra que pretende verificar.', yesLabel: 'Votos sim', noLabel: 'Votos não', blankLabel: 'Votos em branco', invalidLabel: 'Votos nulos', participationHeading: 'Quórum de participação', participationHelp: 'Escolha o que conta como participação e o limiar que deve alcançar.', approvalHeading: 'Quórum de aprovação', approvalHelp: 'Escolha o denominador dos votos sim. Cada regra permanece visível no resultado.', thresholdModeLabel: 'Tipo de limiar', comparisonLabel: 'Comparação', atLeastOption: 'Pelo menos', moreThanOption: 'Mais de', percentageOption: 'Percentagem', absoluteOption: 'Número absoluto', thresholdValueLabel: 'Valor do limiar', denominatorLabel: 'Contagem usada', allBallotsOption: 'Todos os boletins', validVotesOption: 'Apenas votos válidos', eligibleVotersOption: 'Eleitores inscritos', presetsLabel: 'Predefinições de aprovação', simpleMajorityPreset: 'Maioria simples', electorateMajorityPreset: 'Maioria do eleitorado', qualified55Preset: 'Qualificada de 55%', qualified60Preset: 'Qualificada de 60%', loadExample: 'Carregar exemplo', shareAction: 'Copiar permalink', shareSuccess: 'Permalink copiado. Inclui contagens e regras.', shareFailure: 'O permalink está na barra de endereço para ser copiado.', resultHeading: 'Decisão segundo a regra declarada', emptyResult: 'Introduza contagens e limiares para ver os dois testes.', passed: 'Os dois limiares são cumpridos', participationFailed: 'O quórum de participação não é cumprido', approvalFailed: 'O quórum de aprovação não é cumprido', bothFailed: 'Nenhum dos limiares é cumprido', invalidResult: 'Verifique as contagens declaradas', participationMetric: 'Teste de participação', approvalMetric: 'Teste de aprovação', observedLabel: 'Observado', thresholdLabel: 'Exigido', decisionPathLabel: 'Percurso da decisão', methodHeading: 'Método aplicado', methodText: 'A participação é a contagem escolhida dividida pelos eleitores. A aprovação é o número de sim dividido pelo denominador escolhido. A comparação indica se um valor exato basta ou se precisa de ser ultrapassado. Os limiares absolutos comparam contagens diretamente.', limitsHeading: 'O que esta ferramenta não faz', limitsText: 'Não identifica a autoridade competente, não certifica a contagem, não define prazos e não presta aconselhamento jurídico. O resultado depende das hipóteses introduzidas.', warningsHeading: 'Casos-limite e avisos de dados', warningsText: 'Verifique se votos em branco e nulos contam para a participação, se o eleitorado está atualizado e se a aprovação usa votos válidos, todos os boletins ou eleitores.', invalidInput: 'Use números inteiros não negativos. Os eleitores devem ser superiores a zero e os boletins não podem ultrapassá-los.', ballotsExceedEligible: 'Os boletins declarados ultrapassam o eleitorado.', noValidVotes: 'Não existem votos sim ou não, por isso falta o denominador de votos válidos.', noBallots: 'Não foram declarados boletins.', peopleSuffix: 'pessoas', yesShareLabel: 'Parte de sim', allBallotsLabel: 'todos os boletins', validVotesLabel: 'votos válidos', eligibleVotersLabel: 'eleitores', whatNextLabel: 'Antes de usar o resultado', whatNextText: 'Copie o texto exato da regra aplicável e compare-o com a configuração apresentada.',
9
+ };
10
+
11
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Calculadora de limiares de referendo', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: 'Verifica quóruns de participação e aprovação com numeradores e denominadores visíveis.', url: 'https://gamebob.dev/pt/calculadora-limiares-referendo', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' } };
12
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [
13
+ { '@type': 'Question', name: 'O que decide esta calculadora?', acceptedAnswer: { '@type': 'Answer', text: 'Compara as contagens com os limiares de participação e aprovação que introduz. Não decide qual é a norma jurídica aplicável.' } },
14
+ { '@type': 'Question', name: 'Qual é a diferença entre participação e aprovação?', acceptedAnswer: { '@type': 'Answer', text: 'A participação verifica se chegaram pessoas ou boletins suficientes ao limiar. A aprovação verifica se os votos sim atingem o número ou a proporção exigida.' } },
15
+ { '@type': 'Question', name: 'Por que motivo votos brancos e nulos podem alterar o resultado?', acceptedAnswer: { '@type': 'Answer', text: 'Podem contar para a participação e ficar fora dos votos válidos. A ferramenta deixa cada denominador explícito.' } },
16
+ { '@type': 'Question', name: 'Um resultado positivo prova a validade legal?', acceptedAnswer: { '@type': 'Answer', text: 'Não. Consulte a Constituição, a lei, as instruções oficiais, as definições dos boletins e a autoridade de contagem.' } },
17
+ ] };
18
+ const howTo: HowTo = { '@type': 'HowTo', name: 'Verificar limiares de um referendo', step: [
19
+ { '@type': 'HowToStep', name: 'Introduzir o eleitorado', text: 'Indique os eleitores inscritos ou com direito de voto usados pela regra.' },
20
+ { '@type': 'HowToStep', name: 'Separar os boletins', text: 'Adicione sim, não, brancos e nulos do mesmo referendo.' },
21
+ { '@type': 'HowToStep', name: 'Definir a participação', text: 'Escolha a contagem e um limiar percentual ou absoluto.' },
22
+ { '@type': 'HowToStep', name: 'Definir a aprovação', text: 'Escolha o denominador e o requisito dos votos sim.' },
23
+ { '@type': 'HowToStep', name: 'Ler os dois testes', text: 'Reveja numerador, denominador, taxa, limiar e avisos.' },
24
+ ] };
25
+
26
+ export const content: ToolLocaleContent<ReferendumThresholdLocaleContent['ui']> = {
27
+ slug: 'calculadora-limiares-referendo', title: 'Calculadora de limiares de referendo', description: 'Verifique quóruns de participação e aprovação com cada numerador, denominador e regra claramente identificados.', ui, seo: [
28
+ { type: 'title', text: 'Verifique uma regra de referendo com denominadores visíveis', level: 2 },
29
+ { type: 'paragraph', html: 'Um resultado de referendo pode parecer direto, embora o denominador mude a sua leitura. Esta calculadora mostra o eleitorado, as quatro categorias de boletins e os dois quóruns numa única análise.' },
30
+ { type: 'paragraph', html: 'Participação e aprovação são testes separados. Boletins brancos e nulos podem contar para a participação sem fazer parte dos votos válidos. A ferramenta não esconde nem presume essa escolha.' },
31
+ { type: 'title', text: 'Como funcionam os dois quóruns', level: 2 },
32
+ { type: 'paragraph', html: 'A taxa de participação divide a contagem escolhida pelos eleitores. A taxa de aprovação divide os votos sim pelo denominador selecionado. O comparador aceita igualdade ou exige que o valor seja ultrapassado.' },
33
+ { type: 'table', headers: ['Teste', 'Valor observado', 'Pergunta'], rows: [['Participação', 'Boletins escolhidos / eleitores', 'Participou uma parte suficiente do eleitorado?'], ['Aprovação', 'Sim / denominador escolhido', 'Os votos sim atingem o limiar exigido?']] },
34
+ { type: 'title', text: 'Prepare as contagens sem misturar definições', level: 2 },
35
+ { type: 'paragraph', html: 'Use números do mesmo escrutínio e da mesma versão do recenseamento. Mantenha sim, não, branco e nulo separados antes de escolher o denominador, para que cada valor possa ser conferido.' },
36
+ { type: 'list', items: ['Confirme se a regra menciona eleitores inscritos ou com direito de voto.', 'Registe separadamente as quatro categorias de boletins.', 'Confirme que o total de boletins não ultrapassa o eleitorado.', 'Anote o denominador de cada percentagem.', 'Guarde o texto oficial junto do resultado calculado.'] },
37
+ { type: 'tip', title: 'O denominador faz parte da regra', html: '50% de aprovação entre votos válidos não é o mesmo que 50% entre todos os boletins ou entre o eleitorado. Brancos e nulos podem alterar a decisão.' },
38
+ { type: 'title', text: 'Interprete os estados de aprovação e falha', level: 2 },
39
+ { type: 'paragraph', html: 'A saída distingue falha de participação e falha de aprovação. Se a participação passa mas a aprovação falha, reveja os votos sim e o seu denominador. Se acontece o contrário, falta a condição de participação.' },
40
+ { type: 'paragraph', html: 'Um resultado favorável não é uma conclusão jurídica. A jurisdição pode acrescentar regras especiais, condições territoriais ou tratamento oficial de votos brancos e nulos. O cálculo avalia apenas a configuração introduzida.' },
41
+ { type: 'tip', title: 'Use a saída como folha de conferência', html: 'Antes de publicar uma conclusão, compare cada numerador, denominador, modo e comparador com a regra em vigor. Se uma definição for incerta, mantenha o aviso visível.' },
42
+ { type: 'title', text: 'Fontes e limites', level: 2 },
43
+ { type: 'paragraph', html: 'A International IDEA explica por que regras de participação e aprovação devem ser claras. A Comissão de Veneza analisa os efeitos dos quóruns. As fontes ajudam a estruturar a conferência, mas não dão um limiar universal.' },
44
+ ], faq: [
45
+ { question: 'O que decide esta calculadora?', answer: 'Compara as contagens com os limiares de participação e aprovação que introduz. Não decide qual é a norma jurídica aplicável.' },
46
+ { question: 'Qual é a diferença entre participação e aprovação?', answer: 'A participação verifica se chegaram pessoas ou boletins suficientes ao limiar. A aprovação verifica se os votos sim atingem o número ou a proporção exigida.' },
47
+ { question: 'Por que motivo votos brancos e nulos podem alterar o resultado?', answer: 'Podem contar para a participação e ficar fora dos votos válidos. A ferramenta deixa cada denominador explícito.' },
48
+ { question: 'Um resultado positivo prova a validade legal?', answer: 'Não. Consulte a Constituição, a lei, as instruções oficiais, as definições dos boletins e a autoridade de contagem.' },
49
+ ], bibliography, howTo: [
50
+ { name: 'Introduzir o eleitorado', text: 'Indique os eleitores inscritos ou com direito de voto usados pela regra.' },
51
+ { name: 'Separar os boletins', text: 'Adicione sim, não, brancos e nulos do mesmo referendo.' },
52
+ { name: 'Definir a participação', text: 'Escolha a contagem e um limiar percentual ou absoluto.' },
53
+ { name: 'Definir a aprovação', text: 'Escolha o denominador e o requisito dos votos sim.' },
54
+ { name: 'Ler os dois testes', text: 'Reveja numerador, denominador, taxa, limiar e avisos.' },
55
+ ], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[]
56
+ };
@@ -0,0 +1,56 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { ReferendumThresholdLocaleContent } from '../entry';
5
+ import type { ReferendumThresholdUI } from '../ui';
6
+
7
+ const ui: ReferendumThresholdUI = {
8
+ countsHeading: 'Введите объявленные результаты', eligibleLabel: 'Избиратели с правом голоса или зарегистрированные избиратели', eligibleHelp: 'Укажите электорат, названный в проверяемом правиле.', yesLabel: 'Голоса за', noLabel: 'Голоса против', blankLabel: 'Пустые бюллетени', invalidLabel: 'Недействительные бюллетени', participationHeading: 'Кворум участия', participationHelp: 'Выберите, что считается участием, и какой порог нужно достичь.', approvalHeading: 'Кворум одобрения', approvalHelp: 'Выберите знаменатель для голосов за. Каждое правило остаётся видимым в результате.', thresholdModeLabel: 'Тип порога', comparisonLabel: 'Сравнение', atLeastOption: 'Не менее', moreThanOption: 'Больше чем', percentageOption: 'Процент', absoluteOption: 'Абсолютное число', thresholdValueLabel: 'Значение порога', denominatorLabel: 'Используемый подсчёт', allBallotsOption: 'Все бюллетени', validVotesOption: 'Только действительные голоса', eligibleVotersOption: 'Избиратели с правом голоса', presetsLabel: 'Готовые правила одобрения', simpleMajorityPreset: 'Простое большинство', electorateMajorityPreset: 'Большинство электората', qualified55Preset: 'Квалифицированное 55%', qualified60Preset: 'Квалифицированное 60%', loadExample: 'Загрузить пример', shareAction: 'Скопировать постоянную ссылку', shareSuccess: 'Ссылка скопирована. Она содержит числа и оба правила.', shareFailure: 'Постоянная ссылка находится в адресной строке.', resultHeading: 'Решение по объявленному правилу', emptyResult: 'Введите числа и пороги, чтобы увидеть обе проверки кворума.', passed: 'Оба порога достигнуты', participationFailed: 'Кворум участия не достигнут', approvalFailed: 'Кворум одобрения не достигнут', bothFailed: 'Ни один порог не достигнут', invalidResult: 'Проверьте объявленные результаты', participationMetric: 'Проверка участия', approvalMetric: 'Проверка одобрения', observedLabel: 'Наблюдаемое', thresholdLabel: 'Требуется', decisionPathLabel: 'Ход решения', methodHeading: 'Применённый метод', methodText: 'Участие равно выбранному числу бюллетеней, делённому на число избирателей. Одобрение равно голосам за, делённым на выбранный знаменатель. Сравнение определяет, достаточно ли точного значения или его нужно превысить. Абсолютные пороги сравнивают числа напрямую.', limitsHeading: 'Чего этот инструмент не делает', limitsText: 'Он не определяет компетентный орган, не удостоверяет подсчёт, не устанавливает сроки и не даёт юридических советов. Результат зависит от введённых предположений.', warningsHeading: 'Пограничные случаи и предупреждения о данных', warningsText: 'Проверьте, учитываются ли пустые и недействительные бюллетени в участии, актуален ли электорат и использует ли одобрение действительные голоса, все бюллетени или избирателей.', invalidInput: 'Используйте целые неотрицательные числа. Число избирателей должно быть больше нуля, а бюллетеней не может быть больше.', ballotsExceedEligible: 'Объявленных бюллетеней больше, чем избирателей.', noValidVotes: 'Нет голосов за или против, поэтому знаменатель действительных голосов отсутствует.', noBallots: 'Бюллетени не указаны.', peopleSuffix: 'человек', yesShareLabel: 'Доля голосов за', allBallotsLabel: 'все бюллетени', validVotesLabel: 'действительные голоса', eligibleVotersLabel: 'избиратели', whatNextLabel: 'Перед использованием результата', whatNextText: 'Скопируйте точную формулировку действующего правила и сравните её с показанной конфигурацией.',
9
+ };
10
+
11
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Калькулятор порогов референдума', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: 'Проверяет кворумы участия и одобрения с видимыми числителями и знаменателями.', url: 'https://gamebob.dev/ru/kalkulyator-porogov-referenduma', offers: { '@type': 'Offer', price: '0', priceCurrency: 'RUB' } };
12
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [
13
+ { '@type': 'Question', name: 'Что решает этот калькулятор?', acceptedAnswer: { '@type': 'Answer', text: 'Он сравнивает результаты с введёнными порогами участия и одобрения. Он не определяет применимое правовое правило.' } },
14
+ { '@type': 'Question', name: 'Чем отличаются участие и одобрение?', acceptedAnswer: { '@type': 'Answer', text: 'Участие проверяет, достигло ли порога достаточное число людей или бюллетеней. Одобрение проверяет, достигли ли голоса за требуемого числа или доли.' } },
15
+ { '@type': 'Question', name: 'Почему пустые и недействительные бюллетени могут изменить результат?', acceptedAnswer: { '@type': 'Answer', text: 'Они могут учитываться в участии, но исключаться из действительных голосов. Инструмент показывает знаменатели отдельно.' } },
16
+ { '@type': 'Question', name: 'Доказывает ли положительный результат юридическую силу?', acceptedAnswer: { '@type': 'Answer', text: 'Нет. Проверьте конституцию, закон, официальные указания, определения бюллетеней и орган подсчёта.' } },
17
+ ] };
18
+ const howTo: HowTo = { '@type': 'HowTo', name: 'Проверка порогов референдума', step: [
19
+ { '@type': 'HowToStep', name: 'Введите электорат', text: 'Укажите зарегистрированных избирателей или избирателей с правом голоса.' },
20
+ { '@type': 'HowToStep', name: 'Разделите бюллетени', text: 'Добавьте голоса за, против, пустые и недействительные из одного результата.' },
21
+ { '@type': 'HowToStep', name: 'Определите участие', text: 'Выберите подсчёт и процентный или абсолютный порог участия.' },
22
+ { '@type': 'HowToStep', name: 'Определите одобрение', text: 'Выберите знаменатель и условие для голосов за.' },
23
+ { '@type': 'HowToStep', name: 'Прочитайте проверки', text: 'Сравните числитель, знаменатель, долю, порог и предупреждения.' },
24
+ ] };
25
+
26
+ export const content: ToolLocaleContent<ReferendumThresholdLocaleContent['ui']> = {
27
+ slug: 'kalkulyator-porogov-referenduma', title: 'Калькулятор порогов референдума', description: 'Проверяйте кворумы участия и одобрения, видя каждый числитель, знаменатель и объявленное правило.', ui, seo: [
28
+ { type: 'title', text: 'Проверьте правило референдума с видимыми знаменателями', level: 2 },
29
+ { type: 'paragraph', html: 'Результат референдума может выглядеть очевидным, хотя знаменатель меняет его смысл. Калькулятор показывает электорат, категории бюллетеней и оба кворума в одной проверке.' },
30
+ { type: 'paragraph', html: 'Участие и одобрение являются разными тестами. Пустые и недействительные бюллетени могут увеличить участие, не становясь действительными голосами. Инструмент не делает такой выбор молча.' },
31
+ { type: 'title', text: 'Как работают два кворума', level: 2 },
32
+ { type: 'paragraph', html: 'Доля участия делит выбранное число бюллетеней на число избирателей. Доля одобрения делит голоса за на выбранный знаменатель. Сравнение допускает равенство или требует превышения порога.' },
33
+ { type: 'table', headers: ['Тест', 'Наблюдаемое значение', 'Вопрос'], rows: [['Участие', 'Выбранные бюллетени / избиратели', 'Приняла ли участие достаточная часть электората?'], ['Одобрение', 'За / выбранный знаменатель', 'Достигли ли голоса за требуемого порога?']] },
34
+ { type: 'title', text: 'Подготовьте результаты без смешения определений', level: 2 },
35
+ { type: 'paragraph', html: 'Используйте данные одного голосования и одной версии списка избирателей. Разделите голоса за, против, пустые и недействительные до выбора знаменателя, чтобы каждое число можно было проверить.' },
36
+ { type: 'list', items: ['Уточните, говорит ли правило о зарегистрированных избирателях или о праве голоса.', 'Запишите четыре категории бюллетеней отдельно.', 'Проверьте, что число бюллетеней не превышает электорат.', 'Отметьте знаменатель каждого процента.', 'Сохраните официальный текст рядом с результатом.'] },
37
+ { type: 'tip', title: 'Знаменатель является частью правила', html: '50% одобрения среди действительных голосов не равно 50% среди всех бюллетеней или избирателей. Пустые и недействительные голоса могут изменить решение.' },
38
+ { type: 'title', text: 'Правильно прочитайте успех и отказ', level: 2 },
39
+ { type: 'paragraph', html: 'Результат отличает отказ по участию от отказа по одобрению. Если участие прошло, а одобрение нет, проверьте голоса за и их знаменатель. В обратном случае не выполнено условие участия.' },
40
+ { type: 'paragraph', html: 'Положительный расчёт не является юридическим выводом. В разных юрисдикциях могут быть особые условия, территориальные требования и официальные правила для пустых и недействительных бюллетеней. Инструмент оценивает только введённую конфигурацию.' },
41
+ { type: 'tip', title: 'Используйте результат как лист проверки', html: 'Перед публикацией сопоставьте каждый числитель, знаменатель, режим и сравнение с действующим правилом. Если определение неясно, оставьте предупреждение.' },
42
+ { type: 'title', text: 'Источники и ограничения', level: 2 },
43
+ { type: 'paragraph', html: 'International IDEA объясняет, почему правила участия и одобрения должны быть ясными. Венецианская комиссия анализирует последствия кворумов. Эти источники поддерживают метод, но не задают универсальный порог.' },
44
+ ], faq: [
45
+ { question: 'Что решает этот калькулятор?', answer: 'Он сравнивает результаты с введёнными порогами участия и одобрения. Он не определяет применимое правовое правило.' },
46
+ { question: 'Чем отличаются участие и одобрение?', answer: 'Участие проверяет, достигло ли порога достаточное число людей или бюллетеней. Одобрение проверяет, достигли ли голоса за требуемого числа или доли.' },
47
+ { question: 'Почему пустые и недействительные бюллетени могут изменить результат?', answer: 'Они могут учитываться в участии, но исключаться из действительных голосов. Инструмент показывает знаменатели отдельно.' },
48
+ { question: 'Доказывает ли положительный результат юридическую силу?', answer: 'Нет. Проверьте конституцию, закон, официальные указания, определения бюллетеней и орган подсчёта.' },
49
+ ], bibliography, howTo: [
50
+ { name: 'Введите электорат', text: 'Укажите зарегистрированных избирателей или избирателей с правом голоса.' },
51
+ { name: 'Разделите бюллетени', text: 'Добавьте голоса за, против, пустые и недействительные из одного результата.' },
52
+ { name: 'Определите участие', text: 'Выберите подсчёт и процентный или абсолютный порог участия.' },
53
+ { name: 'Определите одобрение', text: 'Выберите знаменатель и условие для голосов за.' },
54
+ { name: 'Прочитайте проверки', text: 'Сравните числитель, знаменатель, долю, порог и предупреждения.' },
55
+ ], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[]
56
+ };
@@ -0,0 +1,56 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { ReferendumThresholdLocaleContent } from '../entry';
5
+ import type { ReferendumThresholdUI } from '../ui';
6
+
7
+ const ui: ReferendumThresholdUI = {
8
+ countsHeading: 'Ange de redovisade röstsiffrorna', eligibleLabel: 'Röstberättigade eller registrerade väljare', eligibleHelp: 'Använd det väljarunderlag som den granskade regeln anger.', yesLabel: 'Ja röster', noLabel: 'Nej röster', blankLabel: 'Blanka valsedlar', invalidLabel: 'Ogiltiga valsedlar', participationHeading: 'Deltagandekvorum', participationHelp: 'Välj vad som räknas som deltagande och vilken tröskel som måste nås.', approvalHeading: 'Godkännandekvorum', approvalHelp: 'Välj nämnare för ja röster. Varje regel visas i resultatet.', thresholdModeLabel: 'Tröskeltyp', comparisonLabel: 'Jämförelse', atLeastOption: 'Minst', moreThanOption: 'Mer än', percentageOption: 'Procent', absoluteOption: 'Absolut antal', thresholdValueLabel: 'Tröskelvärde', denominatorLabel: 'Använd räkning', allBallotsOption: 'Alla valsedlar', validVotesOption: 'Endast giltiga röster', eligibleVotersOption: 'Röstberättigade väljare', presetsLabel: 'Förval för godkännande', simpleMajorityPreset: 'Enkel majoritet', electorateMajorityPreset: 'Majoritet av väljarna', qualified55Preset: 'Kvalificerad 55 procent', qualified60Preset: 'Kvalificerad 60 procent', loadExample: 'Ladda exempel', shareAction: 'Kopiera permalänk', shareSuccess: 'Permalänk kopierad. Den innehåller siffror och regler.', shareFailure: 'Permalänken finns i adressfältet och kan kopieras.', resultHeading: 'Beslut enligt den angivna regeln', emptyResult: 'Ange röstsiffror och trösklar för att se de två kvorumtesterna.', passed: 'Båda trösklarna klaras', participationFailed: 'Deltagandekvorum klaras inte', approvalFailed: 'Godkännandekvorum klaras inte', bothFailed: 'Ingen av trösklarna klaras', invalidResult: 'Kontrollera de angivna siffrorna', participationMetric: 'Deltagandetest', approvalMetric: 'Godkännandetest', observedLabel: 'Observerat', thresholdLabel: 'Krävs', decisionPathLabel: 'Beslutsväg', methodHeading: 'Använd metod', methodText: 'Deltagande är den valda räkningen delad med antalet väljare. Godkännande är ja delat med den valda nämnaren. Jämförelsen avgör om ett exakt värde räcker eller måste överskridas. Absoluta trösklar jämför antal direkt.', limitsHeading: 'Det här gör verktyget inte', limitsText: 'Det fastställer inte behörig myndighet, godkänner ingen räkning, bestämmer inga tidsfrister och ger ingen juridisk rådgivning. Resultatet beror på dina antaganden.', warningsHeading: 'Gränsfall och dataanmärkningar', warningsText: 'Kontrollera om blanka och ogiltiga valsedlar räknas som deltagande, om väljarunderlaget är aktuellt och om godkännande använder giltiga röster, alla valsedlar eller väljare.', invalidInput: 'Använd heltal som inte är negativa. Antalet väljare måste vara större än noll och valsedlarna får inte överstiga det.', ballotsExceedEligible: 'De angivna valsedlarna överstiger antalet väljare.', noValidVotes: 'Det finns inga ja- eller nejröster, så nämnaren för giltiga röster saknas.', noBallots: 'Inga valsedlar har angetts.', peopleSuffix: 'personer', yesShareLabel: 'Andel ja', allBallotsLabel: 'alla valsedlar', validVotesLabel: 'giltiga röster', eligibleVotersLabel: 'väljare', whatNextLabel: 'Innan resultatet används', whatNextText: 'Kopiera den exakta lydelsen i den gällande regeln och jämför med konfigurationen som visas.',
9
+ };
10
+
11
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Kalkylator för folkomröstningströskel', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: 'Kontrollerar deltagande- och godkännandekvorum med synliga täljare och nämnare.', url: 'https://gamebob.dev/sv/kalkylator-referendumstroeskel', offers: { '@type': 'Offer', price: '0', priceCurrency: 'SEK' } };
12
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [
13
+ { '@type': 'Question', name: 'Vad avgör den här kalkylatorn?', acceptedAnswer: { '@type': 'Answer', text: 'Den jämför röstsiffrorna med de deltagande och godkännande trösklar du anger. Den avgör inte vilken juridisk regel som gäller.' } },
14
+ { '@type': 'Question', name: 'Vad är skillnaden mellan deltagande och godkännande?', acceptedAnswer: { '@type': 'Answer', text: 'Deltagande frågar om tillräckligt många personer eller valsedlar nådde tröskeln. Godkännande frågar om ja nådde den krävda andelen eller mängden.' } },
15
+ { '@type': 'Question', name: 'Varför kan blanka och ogiltiga valsedlar ändra resultatet?', acceptedAnswer: { '@type': 'Answer', text: 'De kan räknas som deltagande men uteslutas från giltiga röster. Verktyget visar nämnarna separat.' } },
16
+ { '@type': 'Question', name: 'Bevisar ett godkänt resultat juridisk giltighet?', acceptedAnswer: { '@type': 'Answer', text: 'Nej. Kontrollera grundlag, lag, officiella anvisningar, valsedelsdefinitioner och räknande myndighet.' } },
17
+ ] };
18
+ const howTo: HowTo = { '@type': 'HowTo', name: 'Kontrollera trösklar för en folkomröstning', step: [
19
+ { '@type': 'HowToStep', name: 'Ange väljarunderlaget', text: 'Skriv in registrerade eller röstberättigade väljare enligt regeln.' },
20
+ { '@type': 'HowToStep', name: 'Separera valsedlarna', text: 'Lägg till ja, nej, blanka och ogiltiga från samma omröstning.' },
21
+ { '@type': 'HowToStep', name: 'Ange deltagande', text: 'Välj räkning och en procentuell eller absolut deltagandetröskel.' },
22
+ { '@type': 'HowToStep', name: 'Ange godkännande', text: 'Välj nämnare och kravet för ja röster.' },
23
+ { '@type': 'HowToStep', name: 'Läs testerna', text: 'Kontrollera täljare, nämnare, andel, tröskel och varningar.' },
24
+ ] };
25
+
26
+ export const content: ToolLocaleContent<ReferendumThresholdLocaleContent['ui']> = {
27
+ slug: 'kalkylator-referendumstroeskel', title: 'Kalkylator för folkomröstningströskel', description: 'Kontrollera deltagande och godkännande med varje täljare, nämnare och regel tydligt synlig.', ui, seo: [
28
+ { type: 'title', text: 'Kontrollera en folkomröstningsregel med synliga nämnare', level: 2 },
29
+ { type: 'paragraph', html: 'Ett resultat från en folkomröstning kan verka tydligt trots att nämnaren ändrar innebörden. Kalkylatorn visar väljarunderlag, valsedelskategorier och båda kvorumen i samma granskning.' },
30
+ { type: 'paragraph', html: 'Deltagande och godkännande är separata tester. Blanka och ogiltiga valsedlar kan räknas som deltagande utan att vara giltiga röster. Verktyget gör därför valet synligt.' },
31
+ { type: 'title', text: 'Så fungerar de två kvorumen', level: 2 },
32
+ { type: 'paragraph', html: 'Deltagandeandelen delar den valda räkningen med antalet väljare. Godkännandeandelen delar ja med den valda nämnaren. Jämförelsen kan acceptera likhet eller kräva att tröskeln överskrids.' },
33
+ { type: 'table', headers: ['Test', 'Observerat värde', 'Fråga'], rows: [['Deltagande', 'Valda valsedlar / väljare', 'Deltog en tillräcklig del av väljarna?'], ['Godkännande', 'Ja / vald nämnare', 'Nådde ja den krävda tröskeln?']] },
34
+ { type: 'title', text: 'Förbered siffrorna utan att blanda definitioner', level: 2 },
35
+ { type: 'paragraph', html: 'Använd siffror från samma omröstning och samma version av röstlängden. Håll ja, nej, blank och ogiltig åtskilda innan du väljer nämnare, så går varje uppgift att spåra.' },
36
+ { type: 'list', items: ['Kontrollera om regeln avser registrerade eller röstberättigade väljare.', 'Registrera de fyra valsedelskategorierna separat.', 'Säkerställ att valsedlarna inte överstiger väljarunderlaget.', 'Anteckna nämnaren för varje procenttal.', 'Spara den officiella lydelsen bredvid resultatet.'] },
37
+ { type: 'tip', title: 'Nämnaren är en del av regeln', html: '50 procent godkännande bland giltiga röster är inte samma test som 50 procent bland alla valsedlar eller väljare. Blanka och ogiltiga röster kan ändra beslutet.' },
38
+ { type: 'title', text: 'Tolka godkända och underkända tester', level: 2 },
39
+ { type: 'paragraph', html: 'Resultatet skiljer mellan misslyckat deltagande och misslyckat godkännande. Om deltagandet klaras men godkännandet inte gör det, granskar du ja och nämnaren. I motsatt fall saknas deltagandevillkoret.' },
40
+ { type: 'paragraph', html: 'Ett positivt räkneresultat är inte ett juridiskt besked. Jurisdiktionen kan ha särskilda villkor, territoriella krav eller egna regler för blanka och ogiltiga valsedlar. Verktyget bedömer bara din konfiguration.' },
41
+ { type: 'tip', title: 'Använd resultatet som kontrollblad', html: 'Jämför varje täljare, nämnare, läge och jämförelse med den aktuella regeln innan du publicerar en slutsats. Behåll varningen om en definition är oklar.' },
42
+ { type: 'title', text: 'Källor och begränsningar', level: 2 },
43
+ { type: 'paragraph', html: 'International IDEA förklarar varför regler för deltagande och godkännande ska vara tydliga. Venedigkommissionen analyserar quorumens effekter. Källorna ger ingen universell tröskel.' },
44
+ ], faq: [
45
+ { question: 'Vad avgör den här kalkylatorn?', answer: 'Den jämför röstsiffrorna med de deltagande och godkännande trösklar du anger. Den avgör inte vilken juridisk regel som gäller.' },
46
+ { question: 'Vad är skillnaden mellan deltagande och godkännande?', answer: 'Deltagande frågar om tillräckligt många personer eller valsedlar nådde tröskeln. Godkännande frågar om ja nådde den krävda andelen eller mängden.' },
47
+ { question: 'Varför kan blanka och ogiltiga valsedlar ändra resultatet?', answer: 'De kan räknas som deltagande men uteslutas från giltiga röster. Verktyget visar nämnarna separat.' },
48
+ { question: 'Bevisar ett godkänt resultat juridisk giltighet?', answer: 'Nej. Kontrollera grundlag, lag, officiella anvisningar, valsedelsdefinitioner och räknande myndighet.' },
49
+ ], bibliography, howTo: [
50
+ { name: 'Ange väljarunderlaget', text: 'Skriv in registrerade eller röstberättigade väljare enligt regeln.' },
51
+ { name: 'Separera valsedlarna', text: 'Lägg till ja, nej, blanka och ogiltiga från samma omröstning.' },
52
+ { name: 'Ange deltagande', text: 'Välj räkning och en procentuell eller absolut deltagandetröskel.' },
53
+ { name: 'Ange godkännande', text: 'Välj nämnare och kravet för ja röster.' },
54
+ { name: 'Läs testerna', text: 'Kontrollera täljare, nämnare, andel, tröskel och varningar.' },
55
+ ], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[]
56
+ };
@@ -0,0 +1,56 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { ReferendumThresholdLocaleContent } from '../entry';
5
+ import type { ReferendumThresholdUI } from '../ui';
6
+
7
+ const ui: ReferendumThresholdUI = {
8
+ countsHeading: 'Bildirilen oy sayılarını girin', eligibleLabel: 'Kayıtlı veya oy kullanma hakkı olan seçmenler', eligibleHelp: 'İncelediğiniz kuralın belirttiği seçmen kitlesini kullanın.', yesLabel: 'Evet oyları', noLabel: 'Hayır oyları', blankLabel: 'Boş oy pusulaları', invalidLabel: 'Geçersiz oy pusulaları', participationHeading: 'Katılım nisabı', participationHelp: 'Katılım sayımını ve ulaşılması gereken eşiği seçin.', approvalHeading: 'Onay nisabı', approvalHelp: 'Evet oyları için paydayı seçin. Her kural sonuçta görünür kalır.', thresholdModeLabel: 'Eşik türü', comparisonLabel: 'Karşılaştırma', atLeastOption: 'En az', moreThanOption: 'Daha fazla', percentageOption: 'Yüzde', absoluteOption: 'Mutlak sayı', thresholdValueLabel: 'Eşik değeri', denominatorLabel: 'Kullanılan sayım', allBallotsOption: 'Tüm oy pusulaları', validVotesOption: 'Yalnızca geçerli oylar', eligibleVotersOption: 'Oy kullanma hakkı olan seçmenler', presetsLabel: 'Onay hazır ayarları', simpleMajorityPreset: 'Basit çoğunluk', electorateMajorityPreset: 'Seçmen çoğunluğu', qualified55Preset: 'Nitelikli yüzde 55', qualified60Preset: 'Nitelikli yüzde 60', loadExample: 'Örneği yükle', shareAction: 'Permalink kopyala', shareSuccess: 'Permalink kopyalandı. Sayıları ve iki kuralı içerir.', shareFailure: 'Permalink adres çubuğunda bulunuyor ve kopyalanabilir.', resultHeading: 'Bildirilen kurala göre karar', emptyResult: 'İki nisap testini görmek için sayıları ve eşikleri girin.', passed: 'İki eşik de sağlandı', participationFailed: 'Katılım nisabı sağlanmadı', approvalFailed: 'Onay nisabı sağlanmadı', bothFailed: 'İki eşik de sağlanmadı', invalidResult: 'Bildirilen sayıları kontrol edin', participationMetric: 'Katılım testi', approvalMetric: 'Onay testi', observedLabel: 'Gözlenen', thresholdLabel: 'Gerekli', decisionPathLabel: 'Karar yolu', methodHeading: 'Uygulanan yöntem', methodText: 'Katılım, seçilen sayımın seçmenlere bölünmesidir. Onay, evet oylarının seçilen paydaya bölünmesidir. Karşılaştırma, tam değerin yeterli olup olmadığını veya aşılması gerekip gerekmediğini belirler. Mutlak eşikler sayıları doğrudan karşılaştırır.', limitsHeading: 'Bu araç ne yapmaz', limitsText: 'Yetkili kurumu belirlemez, sayımı onaylamaz, süre belirlemez ve hukuk danışmanlığı vermez. Sonuç girdiğiniz varsayımlara bağlıdır.', warningsHeading: 'Sınır durumları ve veri uyarıları', warningsText: 'Boş ve geçersiz pusulaların katılıma dahil olup olmadığını, seçmen listesinin güncel olup olmadığını ve onayın geçerli oyları, tüm pusulaları veya seçmenleri kullanıp kullanmadığını kontrol edin.', invalidInput: 'Negatif olmayan tam sayılar kullanın. Seçmen sayısı sıfırdan büyük olmalı ve pusula sayısı bunu aşmamalıdır.', ballotsExceedEligible: 'Bildirilen pusulalar seçmen sayısını aşıyor.', noValidVotes: 'Evet veya hayır oyu yok, bu nedenle geçerli oy paydası bulunmuyor.', noBallots: 'Hiçbir oy pusulası bildirilmedi.', peopleSuffix: 'kişi', yesShareLabel: 'Evet payı', allBallotsLabel: 'tüm oy pusulaları', validVotesLabel: 'geçerli oylar', eligibleVotersLabel: 'seçmenler', whatNextLabel: 'Sonucu kullanmadan önce', whatNextText: 'Uygulanan kuralın tam metnini kopyalayın ve gösterilen yapılandırmayla karşılaştırın.',
9
+ };
10
+
11
+ const softwareApplication: SoftwareApplication = { '@type': 'SoftwareApplication', name: 'Referandum eşik hesaplayıcısı', applicationCategory: 'EducationalApplication', operatingSystem: 'Any', description: 'Pay ve paydaları göstererek katılım ve onay nisaplarını kontrol eder.', url: 'https://gamebob.dev/tr/referandum-esik-hesaplayici', offers: { '@type': 'Offer', price: '0', priceCurrency: 'TRY' } };
12
+ const faqPage: FAQPage = { '@type': 'FAQPage', mainEntity: [
13
+ { '@type': 'Question', name: 'Bu hesaplayıcı neye karar verir?', acceptedAnswer: { '@type': 'Answer', text: 'Girdiğiniz oy sayılarını katılım ve onay eşikleriyle karşılaştırır. Hangi hukuk kuralının geçerli olduğunu belirlemez.' } },
14
+ { '@type': 'Question', name: 'Katılım ve onay arasındaki fark nedir?', acceptedAnswer: { '@type': 'Answer', text: 'Katılım, yeterli kişi veya pusulanın eşiğe ulaşıp ulaşmadığını sorar. Onay, evet oylarının gereken sayıya veya orana ulaşıp ulaşmadığını sorar.' } },
15
+ { '@type': 'Question', name: 'Boş ve geçersiz pusulalar sonucu neden değiştirebilir?', acceptedAnswer: { '@type': 'Answer', text: 'Katılımda sayılabilir ancak geçerli oylara dahil edilmeyebilirler. Araç her paydayı ayrı olarak görünür kılar.' } },
16
+ { '@type': 'Question', name: 'Olumlu sonuç hukuki geçerliliği kanıtlar mı?', acceptedAnswer: { '@type': 'Answer', text: 'Hayır. Anayasayı, kanunu, resmî talimatları, pusula tanımlarını ve sayım makamını kontrol edin.' } },
17
+ ] };
18
+ const howTo: HowTo = { '@type': 'HowTo', name: 'Referandum eşiklerini kontrol etme', step: [
19
+ { '@type': 'HowToStep', name: 'Seçmenleri girin', text: 'Kuralın kullandığı kayıtlı veya oy hakkı olan seçmenleri yazın.' },
20
+ { '@type': 'HowToStep', name: 'Pusulaları ayırın', text: 'Aynı oylamadaki evet, hayır, boş ve geçersiz sayıları ekleyin.' },
21
+ { '@type': 'HowToStep', name: 'Katılımı belirleyin', text: 'Sayımı ve yüzde veya mutlak katılım eşiğini seçin.' },
22
+ { '@type': 'HowToStep', name: 'Onayı belirleyin', text: 'Paydayı ve gereken evet oyları koşulunu seçin.' },
23
+ { '@type': 'HowToStep', name: 'İki testi okuyun', text: 'Payı, paydayı, oranı, eşiği ve uyarıları kontrol edin.' },
24
+ ] };
25
+
26
+ export const content: ToolLocaleContent<ReferendumThresholdLocaleContent['ui']> = {
27
+ slug: 'referandum-esik-hesaplayici', title: 'Referandum eşik hesaplayıcısı', description: 'Her payı, paydayı ve bildirilen kuralı görünür kılarak katılım ve onay nisaplarını kontrol edin.', ui, seo: [
28
+ { type: 'title', text: 'Paydaları görünür bir referandum kuralını kontrol edin', level: 2 },
29
+ { type: 'paragraph', html: 'Bir referandum sonucu basit görünebilir, ancak payda yorumun kendisini değiştirebilir. Bu hesaplayıcı seçmenleri, pusula kategorilerini ve iki nisabı aynı incelemede gösterir.' },
30
+ { type: 'paragraph', html: 'Katılım ve onay ayrı testlerdir. Boş ve geçersiz pusulalar katılımı artırabilir ancak geçerli oy sayılmayabilir. Araç bu seçimi gizlice yapmaz.' },
31
+ { type: 'title', text: 'İki nisap testi nasıl çalışır', level: 2 },
32
+ { type: 'paragraph', html: 'Katılım oranı seçilen katılım sayısını seçmenlere böler. Onay oranı evet oylarını seçilen paydaya böler. Karşılaştırma eşitliği kabul edebilir veya eşiğin aşılmasını isteyebilir.' },
33
+ { type: 'table', headers: ['Test', 'Gözlenen değer', 'Soru'], rows: [['Katılım', 'Seçilen pusulalar / seçmenler', 'Seçmenlerin yeterli bölümü katıldı mı?'], ['Onay', 'Evet / seçilen payda', 'Evet oyları gerekli eşiğe ulaştı mı?']] },
34
+ { type: 'title', text: 'Tanımları karıştırmadan sayıları hazırlayın', level: 2 },
35
+ { type: 'paragraph', html: 'Aynı oylamadan ve aynı seçmen listesi sürümünden gelen sayıları kullanın. Paydayı seçmeden önce evet, hayır, boş ve geçersiz pusulaları ayrı tutun; böylece her sayı denetlenebilir.' },
36
+ { type: 'list', items: ['Kuralın kayıtlı veya oy hakkı olan seçmenleri belirtip belirtmediğini doğrulayın.', 'Dört pusula kategorisini ayrı ayrı kaydedin.', 'Toplam pusulanın seçmen sayısını aşmadığını kontrol edin.', 'Her yüzde için paydayı not edin.', 'Resmî kural metnini sonuçla birlikte saklayın.'] },
37
+ { type: 'tip', title: 'Payda kuralın bir parçasıdır', html: 'Geçerli oyların yüzde 50 si, tüm pusulaların veya seçmenlerin yüzde 50 siyle aynı test değildir. Boş ve geçersiz oylar kararı değiştirebilir.' },
38
+ { type: 'title', text: 'Başarılı ve başarısız durumları yorumlayın', level: 2 },
39
+ { type: 'paragraph', html: 'Sonuç katılım başarısızlığını onay başarısızlığından ayırır. Katılım geçip onay kalırsa evet oylarını ve paydayı inceleyin. Tersi durumda katılım koşulu sağlanmamıştır.' },
40
+ { type: 'paragraph', html: 'Olumlu hesaplama hukuki bir sonuç değildir. Yargı alanı özel, bölgesel veya boş ve geçersiz pusulalara ilişkin resmî kurallar uygulayabilir. Araç yalnızca girdiğiniz yapıyı değerlendirir.' },
41
+ { type: 'tip', title: 'Sonucu kontrol formu olarak kullanın', html: 'Bir sonuç yayımlamadan önce her payı, paydayı, modu ve karşılaştırmayı güncel kuralla eşleştirin. Tanım belirsizse uyarıyı görünür bırakın.' },
42
+ { type: 'title', text: 'Kaynaklar ve sınırlar', level: 2 },
43
+ { type: 'paragraph', html: 'International IDEA katılım ve onay kurallarının açık olması gerektiğini açıklar. Venedik Komisyonu nisapların etkilerini inceler. Bu kaynaklar yöntemi destekler, bütün ülkeler için evrensel bir eşik vermez.' },
44
+ ], faq: [
45
+ { question: 'Bu hesaplayıcı neye karar verir?', answer: 'Girdiğiniz oy sayılarını katılım ve onay eşikleriyle karşılaştırır. Hangi hukuk kuralının geçerli olduğunu belirlemez.' },
46
+ { question: 'Katılım ve onay arasındaki fark nedir?', answer: 'Katılım, yeterli kişi veya pusulanın eşiğe ulaşıp ulaşmadığını sorar. Onay, evet oylarının gereken sayıya veya orana ulaşıp ulaşmadığını sorar.' },
47
+ { question: 'Boş ve geçersiz pusulalar sonucu neden değiştirebilir?', answer: 'Katılımda sayılabilir ancak geçerli oylara dahil edilmeyebilirler. Araç her paydayı ayrı olarak görünür kılar.' },
48
+ { question: 'Olumlu sonuç hukuki geçerliliği kanıtlar mı?', answer: 'Hayır. Anayasayı, kanunu, resmî talimatları, pusula tanımlarını ve sayım makamını kontrol edin.' },
49
+ ], bibliography, howTo: [
50
+ { name: 'Seçmenleri girin', text: 'Kuralın kullandığı kayıtlı veya oy hakkı olan seçmenleri yazın.' },
51
+ { name: 'Pusulaları ayırın', text: 'Aynı oylamadaki evet, hayır, boş ve geçersiz sayıları ekleyin.' },
52
+ { name: 'Katılımı belirleyin', text: 'Sayımı ve yüzde veya mutlak katılım eşiğini seçin.' },
53
+ { name: 'Onayı belirleyin', text: 'Paydayı ve gereken evet oyları koşulunu seçin.' },
54
+ { name: 'İki testi okuyun', text: 'Payı, paydayı, oranı, eşiği ve uyarıları kontrol edin.' },
55
+ ], schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[]
56
+ };