@jjlmoya/utils-civic 1.6.0 → 1.8.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/package.json +1 -1
- package/src/category/index.ts +3 -1
- package/src/entries.ts +4 -0
- package/src/tests/locale_completeness.test.ts +1 -1
- package/src/tests/tool_validation.test.ts +1 -1
- package/src/tests/translation_copy.test.ts +1 -1
- package/src/tool/parliamentary-voting-analyzer/bibliography.astro +14 -0
- package/src/tool/parliamentary-voting-analyzer/bibliography.ts +6 -0
- package/src/tool/parliamentary-voting-analyzer/component.astro +63 -0
- package/src/tool/parliamentary-voting-analyzer/contract.test.ts +16 -0
- package/src/tool/parliamentary-voting-analyzer/controller.ts +65 -0
- package/src/tool/parliamentary-voting-analyzer/dom-views.ts +63 -0
- package/src/tool/parliamentary-voting-analyzer/entry.ts +27 -0
- package/src/tool/parliamentary-voting-analyzer/evaluator.ts +12 -0
- package/src/tool/parliamentary-voting-analyzer/i18n/de.ts +45 -0
- package/src/tool/parliamentary-voting-analyzer/i18n/en.ts +79 -0
- package/src/tool/parliamentary-voting-analyzer/i18n/es.ts +49 -0
- package/src/tool/parliamentary-voting-analyzer/i18n/fr.ts +43 -0
- package/src/tool/parliamentary-voting-analyzer/i18n/id.ts +45 -0
- package/src/tool/parliamentary-voting-analyzer/i18n/it.ts +45 -0
- package/src/tool/parliamentary-voting-analyzer/i18n/ja.ts +45 -0
- package/src/tool/parliamentary-voting-analyzer/i18n/ko.ts +45 -0
- package/src/tool/parliamentary-voting-analyzer/i18n/nl.ts +45 -0
- package/src/tool/parliamentary-voting-analyzer/i18n/pl.ts +45 -0
- package/src/tool/parliamentary-voting-analyzer/i18n/pt.ts +45 -0
- package/src/tool/parliamentary-voting-analyzer/i18n/ru.ts +45 -0
- package/src/tool/parliamentary-voting-analyzer/i18n/sv.ts +45 -0
- package/src/tool/parliamentary-voting-analyzer/i18n/tr.ts +45 -0
- package/src/tool/parliamentary-voting-analyzer/i18n/zh.ts +45 -0
- package/src/tool/parliamentary-voting-analyzer/index.ts +11 -0
- package/src/tool/parliamentary-voting-analyzer/logic.test.ts +52 -0
- package/src/tool/parliamentary-voting-analyzer/logic.ts +279 -0
- package/src/tool/parliamentary-voting-analyzer/parliamentary-voting-analyzer.css +491 -0
- package/src/tool/parliamentary-voting-analyzer/seo.astro +14 -0
- package/src/tool/parliamentary-voting-analyzer/storage.ts +25 -0
- package/src/tool/parliamentary-voting-analyzer/ui.ts +98 -0
- package/src/tool/public-budget-analyzer/bibliography.astro +15 -0
- package/src/tool/public-budget-analyzer/bibliography.ts +7 -0
- package/src/tool/public-budget-analyzer/component.astro +52 -0
- package/src/tool/public-budget-analyzer/controller.ts +84 -0
- package/src/tool/public-budget-analyzer/dom-views.ts +52 -0
- package/src/tool/public-budget-analyzer/entry.ts +27 -0
- package/src/tool/public-budget-analyzer/evaluator.ts +15 -0
- package/src/tool/public-budget-analyzer/i18n/de.ts +115 -0
- package/src/tool/public-budget-analyzer/i18n/en.ts +78 -0
- package/src/tool/public-budget-analyzer/i18n/es.ts +115 -0
- package/src/tool/public-budget-analyzer/i18n/fr.ts +115 -0
- package/src/tool/public-budget-analyzer/i18n/id.ts +115 -0
- package/src/tool/public-budget-analyzer/i18n/it.ts +115 -0
- package/src/tool/public-budget-analyzer/i18n/ja.ts +115 -0
- package/src/tool/public-budget-analyzer/i18n/ko.ts +115 -0
- package/src/tool/public-budget-analyzer/i18n/nl.ts +115 -0
- package/src/tool/public-budget-analyzer/i18n/pl.ts +115 -0
- package/src/tool/public-budget-analyzer/i18n/pt.ts +115 -0
- package/src/tool/public-budget-analyzer/i18n/ru.ts +115 -0
- package/src/tool/public-budget-analyzer/i18n/sv.ts +115 -0
- package/src/tool/public-budget-analyzer/i18n/tr.ts +115 -0
- package/src/tool/public-budget-analyzer/i18n/zh.ts +115 -0
- package/src/tool/public-budget-analyzer/index.ts +11 -0
- package/src/tool/public-budget-analyzer/logic.test.ts +81 -0
- package/src/tool/public-budget-analyzer/logic.ts +249 -0
- package/src/tool/public-budget-analyzer/public-budget-analyzer.css +461 -0
- package/src/tool/public-budget-analyzer/seo.astro +15 -0
- package/src/tool/public-budget-analyzer/storage.ts +28 -0
- package/src/tool/public-budget-analyzer/ui.ts +78 -0
- package/src/tools.ts +4 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { PublicBudgetLocaleContent } from '../entry';
|
|
4
|
+
import type { PublicBudgetUI } from '../ui';
|
|
5
|
+
|
|
6
|
+
const ui: PublicBudgetUI = {
|
|
7
|
+
uploadLabel: '예산 CSV 또는 JSON 파일을 여기에 놓으세요',
|
|
8
|
+
uploadHelp: '필수 항목: 카테고리와 금액. 선택 항목: 인구, 기간, priorAmount, 통화, 상위 카테고리.',
|
|
9
|
+
loadExample: '예시 예산 불러오기',
|
|
10
|
+
supportedFormat: 'CSV 또는 JSON, 이 브라우저에서만 처리',
|
|
11
|
+
tableHeading: '원본 행과 카테고리 합계',
|
|
12
|
+
categoryLabel: '카테고리',
|
|
13
|
+
amountLabel: '금액',
|
|
14
|
+
populationLabel: '인구',
|
|
15
|
+
sourceRowsLabel: '원본 행',
|
|
16
|
+
analyzeEmpty: '예산을 확인하려면 파일을 선택하거나 예시를 불러오세요.',
|
|
17
|
+
resultHeading: '예산 풍경',
|
|
18
|
+
totalLabel: '총지출',
|
|
19
|
+
perCapitaLabel: '1인당 지출',
|
|
20
|
+
variationLabel: '이전 기간 대비 변화',
|
|
21
|
+
topCategoryLabel: '가장 큰 카테고리',
|
|
22
|
+
shareLabel: '전체 비중',
|
|
23
|
+
sourceLabel: '원본 행',
|
|
24
|
+
noData: '아직 유효한 예산 행이 없습니다.',
|
|
25
|
+
warningsHeading: '확인할 경고',
|
|
26
|
+
errorsHeading: '포함되지 않은 행',
|
|
27
|
+
methodHeading: '적용한 방법',
|
|
28
|
+
methodText: '필수 항목을 확인하고 각 원본 행을 보존하며 동일한 카테고리 경로를 묶어 정규화된 금액으로 합계를 계산합니다. 전체 합계가 양수일 때 카테고리 비중은 카테고리 금액을 전체 합계로 나눈 값입니다. 1인당 지출은 일관된 양의 인구 값을 분모로 사용합니다. 기간 변화는 현재 금액과 이전 금액의 차이를 이전 금액의 절댓값으로 나눈 값입니다.',
|
|
29
|
+
limitsHeading: '이 도구가 하지 않는 일',
|
|
30
|
+
limitsText: '예산이 완전하거나 비교 가능하거나 합법적이거나 효율적이거나 공정하거나 편향이 없거나 올바르게 분류되었다고 증명하지 않습니다. 원본을 감사하지 않고 정책의 질을 평가하지 않으며 통화를 환산하지 않고 각 행이 배정액, 의무액, 지급액 또는 전망치인지 판단하지 않습니다.',
|
|
31
|
+
edgeCasesHeading: '예외 상황과 데이터 경고',
|
|
32
|
+
edgeCasesText: '통화 혼합, 변하는 인구, 중복 카테고리, 음수 조정, 상위 행과 하위 행의 동시 사용, 지역별 숫자 형식, 이전 금액이 0인 경우에는 사람이 확인해야 합니다. 원래 행 번호를 보존하므로 모든 집계의 원본을 추적할 수 있습니다.',
|
|
33
|
+
downloadCsv: '검토한 표 다운로드',
|
|
34
|
+
printAction: '분석 인쇄',
|
|
35
|
+
rowsLabel: '유효한 행',
|
|
36
|
+
categoriesLabel: '카테고리',
|
|
37
|
+
positiveTotalLabel: '시각화한 양의 금액',
|
|
38
|
+
previousTotalLabel: '이전 합계',
|
|
39
|
+
invalidFile: '비어 있지 않은 CSV 또는 JSON 표로 파일을 읽을 수 없습니다.',
|
|
40
|
+
fileReadError: '이 브라우저에서 파일을 읽을 수 없습니다.',
|
|
41
|
+
exampleName: '지방자치단체 예산 예시',
|
|
42
|
+
noPreviousData: '비교할 수 있는 이전 기간 금액이 없습니다.',
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const softwareApplication: SoftwareApplication = {
|
|
46
|
+
'@type': 'SoftwareApplication',
|
|
47
|
+
name: '공공 예산 분석 도구',
|
|
48
|
+
applicationCategory: 'EducationalApplication',
|
|
49
|
+
operatingSystem: 'Any',
|
|
50
|
+
description: '공공 지출, 카테고리 비중, 1인당 금액, 기간별 변화를 로컬에서 확인합니다.',
|
|
51
|
+
url: 'https://gamebob.dev/ko/gonggong-yosan-jichul-bunseok',
|
|
52
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const faqPage: FAQPage = {
|
|
56
|
+
'@type': 'FAQPage',
|
|
57
|
+
mainEntity: [
|
|
58
|
+
{ '@type': 'Question', name: '어떤 열이 필요한가요?', acceptedAnswer: { '@type': 'Answer', text: '각 행에는 카테고리와 숫자 금액이 필요합니다. 인구, 기간, priorAmount, 통화, 상위 카테고리는 선택 사항입니다.' } },
|
|
59
|
+
{ '@type': 'Question', name: '1인당 지출은 어떻게 계산하나요?', acceptedAnswer: { '@type': 'Answer', text: '총액을 처음 발견한 일관된 양의 인구 값으로 나눕니다. 분모가 다르면 경고가 표시됩니다.' } },
|
|
60
|
+
{ '@type': 'Question', name: '중복 카테고리는 어떻게 되나요?', acceptedAnswer: { '@type': 'Answer', text: '같은 카테고리 경로를 가진 행을 더하고 원본 행 번호를 표시하여 실제 분할과 중복 계산을 구분할 수 있게 합니다.' } },
|
|
61
|
+
{ '@type': 'Question', name: '예산이 좋거나 공정하다는 것을 증명하나요?', acceptedAnswer: { '@type': 'Answer', text: '아니요. 입력된 숫자를 설명할 뿐이며 완전성, 합법성, 효율성, 공정성, 분류 또는 결과를 판단하지 않습니다.' } },
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const howTo: HowTo = {
|
|
66
|
+
'@type': 'HowTo',
|
|
67
|
+
name: '공공 예산 표 분석하기',
|
|
68
|
+
step: [
|
|
69
|
+
{ '@type': 'HowToStep', name: '표 준비하기', text: '행마다 카테고리와 금액이 있는 CSV 또는 JSON 표를 만드세요. 통화와 회계 기준을 동일하게 유지하세요.' },
|
|
70
|
+
{ '@type': 'HowToStep', name: '맥락 추가하기', text: '인구, 기간, priorAmount, 통화, 상위 카테고리는 의미가 일관될 때만 추가하세요.' },
|
|
71
|
+
{ '@type': 'HowToStep', name: '파일 불러오기', text: '파일을 도구에 놓거나 예시를 불러와 예상 구조와 로컬 검증 결과를 확인하세요.' },
|
|
72
|
+
{ '@type': 'HowToStep', name: '풍경 읽기', text: '구성은 비례 막대로 보고 정확한 금액, 변화, 원본 행은 접근 가능한 표에서 확인하세요.' },
|
|
73
|
+
{ '@type': 'HowToStep', name: '경고 검토하기', text: '결론을 내리기 전에 통화 혼합, 중복 경로, 음수 조정, 0인 분모, 상위 행을 확인하세요.' },
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const content: PublicBudgetLocaleContent = {
|
|
78
|
+
slug: 'public-budget-analyzer',
|
|
79
|
+
title: '공공 예산 분석 도구',
|
|
80
|
+
description: '공공 예산 표를 로컬에서 확인하여 총지출, 카테고리 비중, 1인당 지출, 변화, 각 집계의 원본 행을 살펴보세요.',
|
|
81
|
+
ui,
|
|
82
|
+
seo: [
|
|
83
|
+
{ type: 'title', text: '공공 예산 표를 검증 가능한 화면으로 바꾸기', level: 2 },
|
|
84
|
+
{ type: 'paragraph', html: '공공 예산 파일은 카테고리 이름, 회계 기간, 인구 분모, 조정액을 한눈에 읽기 어려운 표에 함께 담는 경우가 많습니다. 이 도구는 원본 행을 보존하고 필수 항목을 확인한 뒤 같은 정규화 데이터에서 합계, 비중, 1인당 지출, 기간 변화를 계산합니다.' },
|
|
85
|
+
{ type: 'paragraph', html: '결과는 숫자를 설명할 뿐 정책을 평가하지 않습니다. 큰 카테고리는 법적 책임, 일회성 투자, 이전 지출 또는 다른 회계 범위를 나타낼 수 있습니다. 화면은 이런 차이를 드러내므로 원본 자료를 더 정확한 질문으로 다시 확인할 수 있습니다.' },
|
|
86
|
+
{ type: 'title', text: '계산 결과의 의미', level: 2 },
|
|
87
|
+
{ type: 'paragraph', html: '합계는 음수 조정을 포함한 유효한 숫자 금액의 합입니다. 전체 합계가 양수일 때 카테고리 비중은 묶인 카테고리 금액을 합계로 나눈 값입니다. 양의 금액은 비례 막대로 표시하고 음의 금액은 표에 남깁니다. 양의 면적으로 바꾸면 의미가 달라지기 때문입니다.' },
|
|
88
|
+
{ type: 'table', headers: ['결과', '계산', '확인할 질문'], rows: [['총지출', '정규화된 금액의 합', '모든 행이 같은 회계 기준을 사용하나요?'], ['카테고리 비중', '카테고리 금액을 양의 합계로 나눔', '카테고리가 서로 배타적인가요, 상위와 하위가 겹치나요?'], ['1인당 지출', '양의 인구 분모로 합계를 나눔', '인구가 같은 장소와 기간을 나타내나요?'], ['기간 변화', '현재 금액에서 이전 금액을 빼고 이전 절댓값으로 나눔', '기간을 비교할 수 있고 0인 기준을 피했나요?']] },
|
|
89
|
+
{ type: 'title', text: '비교 가능한 데이터 준비하기', level: 2 },
|
|
90
|
+
{ type: 'paragraph', html: '모든 행에 하나의 통화와 금액의 명확한 의미를 사용하세요. 예산 승인액, 의무액, 지급액, 전망치는 모두 유효한 숫자일 수 있지만 서로 다른 질문에 답합니다. 열 이름만으로 의미를 판단할 수 없으므로 원본 옆에 그 의미를 기록하세요.' },
|
|
91
|
+
{ type: 'list', items: ['카테고리마다 한 행을 사용하거나 의도한 계층을 위해 상위 카테고리를 입력하세요.', '인구 값을 일관되게 유지하고 주민, 유권자, 가구, 서비스 이용자를 섞지 마세요.', '이전 기간이 같은 카테고리와 기준을 사용할 때만 priorAmount를 넣으세요.', '우발적인 중복 계산을 막기 위해 중복 경로와 상위 행을 확인하세요.', '검토한 표를 원본과 해석에 사용한 가정과 함께 보관하세요.'] },
|
|
92
|
+
{ type: 'tip', title: '비중은 우선순위 점수가 아닙니다', html: '금액이 가장 큰 카테고리가 자동으로 가장 중요하거나 낭비가 많거나 성공적인 것은 아닙니다. 규모와 변화를 찾는 데 사용한 뒤 원본 주석과 서비스 결과를 읽으세요.' },
|
|
93
|
+
{ type: 'title', text: '결론 전에 경고 읽기', level: 2 },
|
|
94
|
+
{ type: 'paragraph', html: '중복 경로는 합계가 조용히 작아지지 않도록 묶지만 원본 행 목록에서 그 묶음이 의도된 것인지 확인할 수 있습니다. 통화는 변환하지 않습니다. 인구가 0이면 1인당 결과가 사라지고 이전 금액이 0이면 변화율이 사라집니다. 0으로 나누는 것은 의미 있는 해석이 없기 때문입니다.' },
|
|
95
|
+
{ type: 'paragraph', html: '중첩된 카테고리는 특히 주의해야 합니다. 표에 교육과 교육 > 학교가 모두 금액으로 들어 있으면 같은 지출을 두 번 계산할 수 있습니다. 상위 행이 소계인지 독립 항목인지는 원본의 방법론을 확인해야 합니다.' },
|
|
96
|
+
{ type: 'title', text: '첫 분석 후 할 일', level: 2 },
|
|
97
|
+
{ type: 'paragraph', html: '행 번호를 사용해 공식 파일로 돌아가 각 수정이나 해석을 기록하세요. 같은 의미의 기간끼리 비교하고 음수 조정은 조정으로 보존하며 원본이 소계를 이미 포함한다고 확인할 때 소계를 제거한 뒤 다시 분석하세요.' },
|
|
98
|
+
{ type: 'tip', title: '데이터의 경계를 보이게 유지하기', html: '이 도구는 로컬 설명 분석입니다. 파일의 완전성, 공식 분류, 통화 조정, 지출과 결과 사이의 인과 관계를 검증하지 않습니다.' },
|
|
99
|
+
],
|
|
100
|
+
faq: [
|
|
101
|
+
{ question: '어떤 열이 필요한가요?', answer: '각 행에는 카테고리와 숫자 금액이 필요합니다. 인구, 기간, priorAmount, 통화, 상위 카테고리는 선택 사항입니다.' },
|
|
102
|
+
{ question: '1인당 지출은 어떻게 계산하나요?', answer: '합계를 처음 발견한 일관된 양의 인구로 나눕니다. 분모가 다르면 경고가 표시됩니다.' },
|
|
103
|
+
{ question: '중복 카테고리는 어떻게 되나요?', answer: '같은 카테고리 경로를 합산하고 원본 행을 검토할 수 있게 표시합니다.' },
|
|
104
|
+
{ question: '예산이 좋거나 공정하다는 것을 증명하나요?', answer: '아니요. 숫자를 설명할 뿐 완전성, 합법성, 효율성, 공정성 또는 결과를 판단할 수 없습니다.' },
|
|
105
|
+
],
|
|
106
|
+
bibliography,
|
|
107
|
+
howTo: [
|
|
108
|
+
{ name: '표 준비하기', text: '같은 통화와 회계 기준으로 카테고리와 금액이 있는 CSV 또는 JSON 표를 만드세요.' },
|
|
109
|
+
{ name: '맥락 추가하기', text: '인구, 기간, priorAmount, 통화, 상위 카테고리는 의미가 일관될 때만 추가하세요.' },
|
|
110
|
+
{ name: '파일 불러오기', text: '파일을 놓거나 예시를 불러와 예상 데이터 구조를 확인하세요.' },
|
|
111
|
+
{ name: '풍경 읽기', text: '구성은 비례 막대로, 값과 변화와 원본 행은 표로 확인하세요.' },
|
|
112
|
+
{ name: '경고 검토하기', text: '결론 전에 통화 혼합, 중복, 음수 조정, 0인 분모, 상위 행을 확인하세요.' },
|
|
113
|
+
],
|
|
114
|
+
schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[],
|
|
115
|
+
};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { PublicBudgetLocaleContent } from '../entry';
|
|
4
|
+
import type { PublicBudgetUI } from '../ui';
|
|
5
|
+
|
|
6
|
+
const ui: PublicBudgetUI = {
|
|
7
|
+
uploadLabel: 'Zet hier een CSV of JSON begrotingsbestand neer',
|
|
8
|
+
uploadHelp: 'Verplichte velden: categorie en bedrag. Optioneel: bevolking, periode, priorAmount, valuta en bovenliggende categorie.',
|
|
9
|
+
loadExample: 'Voorbeeldbegroting laden',
|
|
10
|
+
supportedFormat: 'CSV of JSON, alleen in deze browser verwerkt',
|
|
11
|
+
tableHeading: 'Bronregels en categorietotalen',
|
|
12
|
+
categoryLabel: 'Categorie',
|
|
13
|
+
amountLabel: 'Bedrag',
|
|
14
|
+
populationLabel: 'Bevolking',
|
|
15
|
+
sourceRowsLabel: 'Bronregels',
|
|
16
|
+
analyzeEmpty: 'Kies een bestand of laad het voorbeeld om een begroting te bekijken.',
|
|
17
|
+
resultHeading: 'Begrotingslandschap',
|
|
18
|
+
totalLabel: 'Totale uitgaven',
|
|
19
|
+
perCapitaLabel: 'Uitgaven per persoon',
|
|
20
|
+
variationLabel: 'Verandering ten opzichte van de vorige periode',
|
|
21
|
+
topCategoryLabel: 'Grootste categorie',
|
|
22
|
+
shareLabel: 'Aandeel van totaal',
|
|
23
|
+
sourceLabel: 'Bronregels',
|
|
24
|
+
noData: 'Er zijn nog geen geldige begrotingsregels beschikbaar.',
|
|
25
|
+
warningsHeading: 'Te controleren waarschuwingen',
|
|
26
|
+
errorsHeading: 'Niet opgenomen regels',
|
|
27
|
+
methodHeading: 'Toegepaste methode',
|
|
28
|
+
methodText: 'De tool controleert verplichte velden, bewaart elke bronregel, groepeert exacte categoriepaden en berekent totalen uit genormaliseerde bedragen. Het categoriedeel is het bedrag gedeeld door het totaal wanneer dat positief is. Uitgaven per persoon delen het totaal door de eerste consistente positieve bevolkingsnoemer. De periodeverandering is het verschil gedeeld door de absolute vorige waarde.',
|
|
29
|
+
limitsHeading: 'Wat deze tool niet doet',
|
|
30
|
+
limitsText: 'De tool bewijst niet dat een begroting volledig, vergelijkbaar, wettig, efficiënt, eerlijk, onbevooroordeeld of juist geclassificeerd is. De bron wordt niet gecontroleerd, beleid wordt niet beoordeeld, valuta worden niet omgerekend en de tool bepaalt niet of een regel een begrotingsmachtiging, verplichting, betaling of prognose is.',
|
|
31
|
+
edgeCasesHeading: 'Randgevallen en datameldingen',
|
|
32
|
+
edgeCasesText: 'Gemengde valuta, veranderende bevolkingen, dubbele categorieën, negatieve correcties, bovenliggende regels naast onderliggende regels, lokale getalnotatie en vorige bedragen van nul vragen menselijke controle. De browser bewaart het oorspronkelijke regelnummer zodat elk totaal naar de invoer kan worden teruggevolgd.',
|
|
33
|
+
downloadCsv: 'Gecontroleerde tabel downloaden',
|
|
34
|
+
printAction: 'Analyse afdrukken',
|
|
35
|
+
rowsLabel: 'geldige regels',
|
|
36
|
+
categoriesLabel: 'categorieën',
|
|
37
|
+
positiveTotalLabel: 'gevisualiseerde positieve bedragen',
|
|
38
|
+
previousTotalLabel: 'Vorig totaal',
|
|
39
|
+
invalidFile: 'Het bestand kon niet als een niet-lege CSV of JSON tabel worden gelezen.',
|
|
40
|
+
fileReadError: 'Het bestand kon in deze browser niet worden gelezen.',
|
|
41
|
+
exampleName: 'Voorbeeld van een gemeentebegroting',
|
|
42
|
+
noPreviousData: 'Er is geen vergelijkbaar bedrag uit de vorige periode opgegeven.',
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const softwareApplication: SoftwareApplication = {
|
|
46
|
+
'@type': 'SoftwareApplication',
|
|
47
|
+
name: 'Analysator voor openbare begrotingen',
|
|
48
|
+
applicationCategory: 'EducationalApplication',
|
|
49
|
+
operatingSystem: 'Any',
|
|
50
|
+
description: 'Bekijk openbare uitgaven, categorieaandelen, bedragen per persoon en veranderingen tussen perioden lokaal.',
|
|
51
|
+
url: 'https://gamebob.dev/nl/analyse-openbare-begroting-uitgaven',
|
|
52
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const faqPage: FAQPage = {
|
|
56
|
+
'@type': 'FAQPage',
|
|
57
|
+
mainEntity: [
|
|
58
|
+
{ '@type': 'Question', name: 'Welke kolommen heeft de analysator nodig?', acceptedAnswer: { '@type': 'Answer', text: 'Elke regel heeft een categorie en een numeriek bedrag nodig. Bevolking, periode, priorAmount, valuta en bovenliggende categorie zijn optioneel.' } },
|
|
59
|
+
{ '@type': 'Question', name: 'Hoe worden uitgaven per persoon berekend?', acceptedAnswer: { '@type': 'Answer', text: 'Het totale bedrag wordt gedeeld door de eerste consistente positieve bevolkingswaarde. Verschillende noemers blijven zichtbaar en veroorzaken een waarschuwing.' } },
|
|
60
|
+
{ '@type': 'Question', name: 'Wat gebeurt er met dubbele categorieën?', acceptedAnswer: { '@type': 'Answer', text: 'Regels met hetzelfde categoriepad worden opgeteld en hun bronregelnummers blijven zichtbaar om een echte verdeling van een dubbele telling te onderscheiden.' } },
|
|
61
|
+
{ '@type': 'Question', name: 'Kan dit bewijzen dat een begroting goed of eerlijk is?', acceptedAnswer: { '@type': 'Answer', text: 'Nee. De tool beschrijft de aangeleverde cijfers en stelt volledigheid, wettigheid, efficiëntie, eerlijkheid, classificatie of resultaten niet vast.' } },
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const howTo: HowTo = {
|
|
66
|
+
'@type': 'HowTo',
|
|
67
|
+
name: 'Een openbare begrotingstabel analyseren',
|
|
68
|
+
step: [
|
|
69
|
+
{ '@type': 'HowToStep', name: 'Tabel voorbereiden', text: 'Maak een CSV of JSON tabel met per regel een categorie en bedrag. Gebruik dezelfde valuta en boekhoudkundige basis.' },
|
|
70
|
+
{ '@type': 'HowToStep', name: 'Context toevoegen', text: 'Voeg bevolking, periode, priorAmount, valuta of bovenliggende categorie alleen toe wanneer de betekenis consistent is.' },
|
|
71
|
+
{ '@type': 'HowToStep', name: 'Bestand laden', text: 'Zet het bestand in de analysator of laad het voorbeeld om de verwachte structuur en lokale controle te zien.' },
|
|
72
|
+
{ '@type': 'HowToStep', name: 'Het landschap lezen', text: 'Gebruik proportionele balken voor de samenstelling en de toegankelijke tabel voor exacte bedragen, veranderingen en bronregels.' },
|
|
73
|
+
{ '@type': 'HowToStep', name: 'Waarschuwingen bekijken', text: 'Verduidelijk gemengde valuta, dubbele paden, negatieve correcties, nulnoemers en bovenliggende regels voordat je conclusies trekt.' },
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const content: PublicBudgetLocaleContent = {
|
|
78
|
+
slug: 'analyse-openbare-begroting-uitgaven',
|
|
79
|
+
title: 'Analysator voor openbare begrotingen',
|
|
80
|
+
description: 'Bekijk een openbare begrotingstabel lokaal voor totale uitgaven, categorieaandelen, uitgaven per persoon, veranderingen en de bronregels achter elk totaal.',
|
|
81
|
+
ui,
|
|
82
|
+
seo: [
|
|
83
|
+
{ type: 'title', text: 'Maak van een openbare begrotingstabel een controleerbaar overzicht', level: 2 },
|
|
84
|
+
{ type: 'paragraph', html: 'Openbare begrotingsbestanden combineren vaak categorielabels, boekhoudperioden, bevolkingsnoemers en correcties in een tabel die moeilijk snel te lezen is. Deze analysator bewaart de bronregels, controleert de vereiste velden en zet dezelfde genormaliseerde gegevens om in totalen, verhoudingen, uitgaven per persoon en veranderingen per periode.' },
|
|
85
|
+
{ type: 'paragraph', html: 'Het resultaat is beschrijvend en geen politiek oordeel. Een grote categorie kan wijzen op een wettelijke taak, een eenmalige investering, een overdracht of een andere boekhoudkundige afbakening. Het overzicht maakt zulke patronen zichtbaar zodat je de bron met een preciezere vraag kunt onderzoeken.' },
|
|
86
|
+
{ type: 'title', text: 'Wat de berekeningen betekenen', level: 2 },
|
|
87
|
+
{ type: 'paragraph', html: 'Het totaal is de som van alle geldige numerieke bedragen, inclusief negatieve correcties. Een categorieaandeel is het gegroepeerde bedrag gedeeld door het totaal wanneer dat positief is. Positieve bedragen krijgen proportionele balken; negatieve bedragen blijven in de tabel omdat een positieve oppervlakte hun betekenis zou veranderen.' },
|
|
88
|
+
{ type: 'table', headers: ['Uitkomst', 'Berekening', 'Controle vraag'], rows: [['Totale uitgaven', 'Som van genormaliseerde bedragen', 'Gebruiken alle regels dezelfde boekhoudkundige basis?'], ['Categorieaandeel', 'Categoriebetrag gedeeld door positief totaal', 'Zijn categorieën exclusief of overlappen ouders en kinderen?'], ['Uitgaven per persoon', 'Totaal gedeeld door positieve bevolkingsnoemer', 'Beschrijft de bevolking dezelfde plaats en periode?'], ['Periodeverandering', 'Huidig bedrag min vorig bedrag gedeeld door absolute vorige waarde', 'Zijn perioden vergelijkbaar en wordt een basis van nul vermeden?']] },
|
|
89
|
+
{ type: 'title', text: 'Vergelijkbare gegevens voorbereiden', level: 2 },
|
|
90
|
+
{ type: 'paragraph', html: 'Gebruik één valuta en leg de betekenis van het bedrag voor elke regel vast. Een begrotingsmachtiging, verplichting, betaling en prognose kunnen allemaal geldige cijfers zijn maar verschillende vragen beantwoorden. Noteer die betekenis naast de bron, want de analysator leidt haar niet af uit een kolomnaam.' },
|
|
91
|
+
{ type: 'list', items: ['Gebruik één regel per categorie of geef een bovenliggende categorie voor een bewuste hiërarchie.', 'Houd bevolkingswaarden consistent en meng geen inwoners, kiesgerechtigden, huishoudens of gebruikers.', 'Gebruik priorAmount alleen als de vorige periode dezelfde categorieën en grondslag heeft.', 'Controleer dubbele categoriepaden en bovenliggende regels op onbedoelde dubbeltelling.', 'Bewaar de gecontroleerde tabel samen met de bron en de gebruikte aannames.'] },
|
|
92
|
+
{ type: 'tip', title: 'Een verhouding is geen prioriteitsscore', html: 'De categorie met het grootste bedrag is niet automatisch het belangrijkst, verspillendst of succesvolst. Gebruik het overzicht voor schaal en verandering en lees daarna de bronnotities en dienstresultaten.' },
|
|
93
|
+
{ type: 'title', text: 'Lees waarschuwingen vóór je conclusies trekt', level: 2 },
|
|
94
|
+
{ type: 'paragraph', html: 'Dubbele paden worden gegroepeerd zodat het totaal niet stilzwijgend te laag wordt, maar de lijst met bronregels laat zien of die groepering bewust was. Gemengde valuta worden nooit omgerekend. Een bevolking van nul verwijdert het resultaat per persoon en een vorige waarde van nul verwijdert het veranderingspercentage omdat delen door nul geen betekenisvolle interpretatie heeft.' },
|
|
95
|
+
{ type: 'paragraph', html: 'Geneste categorieën vragen extra aandacht. Als een tabel zowel Onderwijs als Onderwijs > Scholen als bedrag bevat, kan optellen dezelfde uitgaven tweemaal tellen. De tool waarschuwt voor geneste paden, maar alleen de methode van de bron kan aangeven of de ouderregel een subtotaal of een zelfstandige post is.' },
|
|
96
|
+
{ type: 'title', text: 'Wat te doen na de eerste analyse', level: 2 },
|
|
97
|
+
{ type: 'paragraph', html: 'Gebruik de regelnummers om terug te gaan naar het officiële bestand en elke correctie of interpretatie te documenteren. Vergelijk gelijke perioden, behoud negatieve correcties als correcties en voer de analyse opnieuw uit nadat je subtotalen verwijdert wanneer de bron bevestigt dat ze al zijn opgenomen.' },
|
|
98
|
+
{ type: 'tip', title: 'Houd de gegevensgrens zichtbaar', html: 'Dit is een lokale beschrijvende analyse. Ze controleert niet of het bestand volledig is, classificeert uitgaven niet volgens een officiële standaard, verzoent valuta niet en bewijst geen oorzakelijk verband tussen uitgaven en resultaten.' },
|
|
99
|
+
],
|
|
100
|
+
faq: [
|
|
101
|
+
{ question: 'Welke kolommen heeft de analysator nodig?', answer: 'Elke regel heeft een categorie en numeriek bedrag nodig. Bevolking, periode, priorAmount, valuta en bovenliggende categorie zijn optioneel.' },
|
|
102
|
+
{ question: 'Hoe worden uitgaven per persoon berekend?', answer: 'Het totaal wordt gedeeld door de eerste consistente positieve bevolkingswaarde. Verschillende noemers geven een waarschuwing.' },
|
|
103
|
+
{ question: 'Wat gebeurt er met dubbele categorieën?', answer: 'Dezelfde categoriepaden worden opgeteld en hun bronregels blijven zichtbaar voor controle.' },
|
|
104
|
+
{ question: 'Kan dit bewijzen dat een begroting goed of eerlijk is?', answer: 'Nee. Het beschrijft de aangeleverde cijfers en kan volledigheid, wettigheid, efficiëntie, eerlijkheid of resultaten niet vaststellen.' },
|
|
105
|
+
],
|
|
106
|
+
bibliography,
|
|
107
|
+
howTo: [
|
|
108
|
+
{ name: 'Tabel voorbereiden', text: 'Maak een CSV of JSON tabel met categorie en bedrag per regel, met dezelfde valuta en boekhoudkundige basis.' },
|
|
109
|
+
{ name: 'Context toevoegen', text: 'Voeg bevolking, periode, priorAmount, valuta of bovenliggende categorie alleen toe als de betekenis consistent is.' },
|
|
110
|
+
{ name: 'Bestand laden', text: 'Zet het bestand neer of laad het voorbeeld om de verwachte structuur te zien.' },
|
|
111
|
+
{ name: 'Het landschap lezen', text: 'Gebruik proportionele balken voor samenstelling en de tabel voor waarden, veranderingen en bronregels.' },
|
|
112
|
+
{ name: 'Waarschuwingen bekijken', text: 'Verduidelijk gemengde valuta, duplicaten, negatieve correcties, nulnoemers en ouderregels vóór je conclusies trekt.' },
|
|
113
|
+
],
|
|
114
|
+
schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[],
|
|
115
|
+
};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { PublicBudgetLocaleContent } from '../entry';
|
|
4
|
+
import type { PublicBudgetUI } from '../ui';
|
|
5
|
+
|
|
6
|
+
const ui: PublicBudgetUI = {
|
|
7
|
+
uploadLabel: 'Upuść tutaj plik CSV lub JSON z budżetem',
|
|
8
|
+
uploadHelp: 'Pola wymagane: kategoria i kwota. Opcjonalne: ludność, okres, priorAmount, waluta i kategoria nadrzędna.',
|
|
9
|
+
loadExample: 'Wczytaj przykładowy budżet',
|
|
10
|
+
supportedFormat: 'CSV lub JSON, przetwarzany tylko w tej przeglądarce',
|
|
11
|
+
tableHeading: 'Wiersze źródłowe i sumy kategorii',
|
|
12
|
+
categoryLabel: 'Kategoria',
|
|
13
|
+
amountLabel: 'Kwota',
|
|
14
|
+
populationLabel: 'Ludność',
|
|
15
|
+
sourceRowsLabel: 'Wiersze źródłowe',
|
|
16
|
+
analyzeEmpty: 'Wybierz plik lub wczytaj przykład, aby przeanalizować budżet.',
|
|
17
|
+
resultHeading: 'Krajobraz budżetu',
|
|
18
|
+
totalLabel: 'Wydatki ogółem',
|
|
19
|
+
perCapitaLabel: 'Wydatki na osobę',
|
|
20
|
+
variationLabel: 'Zmiana względem poprzedniego okresu',
|
|
21
|
+
topCategoryLabel: 'Największa kategoria',
|
|
22
|
+
shareLabel: 'Udział w sumie',
|
|
23
|
+
sourceLabel: 'Wiersze źródłowe',
|
|
24
|
+
noData: 'Nie ma jeszcze prawidłowych wierszy budżetu.',
|
|
25
|
+
warningsHeading: 'Ostrzeżenia do sprawdzenia',
|
|
26
|
+
errorsHeading: 'Wiersze nieuwzględnione',
|
|
27
|
+
methodHeading: 'Zastosowana metoda',
|
|
28
|
+
methodText: 'Narzędzie sprawdza wymagane pola, zachowuje każdy wiersz źródłowy, grupuje identyczne ścieżki kategorii i oblicza sumy ze znormalizowanych kwot. Udział kategorii to jej kwota podzielona przez sumę, gdy suma jest dodatnia. Wydatki na osobę dzielą sumę przez pierwszą zgodną dodatnią wartość ludności. Zmiana okresu to różnica podzielona przez wartość bezwzględną poprzedniej kwoty.',
|
|
29
|
+
limitsHeading: 'Czego to narzędzie nie robi',
|
|
30
|
+
limitsText: 'Nie dowodzi, że budżet jest kompletny, porównywalny, legalny, wydajny, sprawiedliwy, bezstronny ani poprawnie sklasyfikowany. Nie audytuje źródła, nie ocenia polityki, nie przelicza walut i nie rozpoznaje, czy wiersz oznacza przyznane środki, zobowiązanie, płatność lub prognozę.',
|
|
31
|
+
edgeCasesHeading: 'Przypadki brzegowe i ostrzeżenia danych',
|
|
32
|
+
edgeCasesText: 'Mieszane waluty, zmienna ludność, zduplikowane kategorie, ujemne korekty, wiersze nadrzędne obok podrzędnych, lokalne formaty liczb i poprzednie kwoty równe zero wymagają kontroli człowieka. Przeglądarka zachowuje oryginalny numer wiersza, aby każdy agregat można było prześledzić do danych wejściowych.',
|
|
33
|
+
downloadCsv: 'Pobierz sprawdzoną tabelę',
|
|
34
|
+
printAction: 'Drukuj analizę',
|
|
35
|
+
rowsLabel: 'prawidłowych wierszy',
|
|
36
|
+
categoriesLabel: 'kategorii',
|
|
37
|
+
positiveTotalLabel: 'zwizualizowane kwoty dodatnie',
|
|
38
|
+
previousTotalLabel: 'Poprzednia suma',
|
|
39
|
+
invalidFile: 'Nie udało się odczytać pliku jako niepustej tabeli CSV lub JSON.',
|
|
40
|
+
fileReadError: 'Nie udało się odczytać pliku w tej przeglądarce.',
|
|
41
|
+
exampleName: 'Przykładowy budżet gminy',
|
|
42
|
+
noPreviousData: 'Nie podano porównywalnej kwoty z poprzedniego okresu.',
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const softwareApplication: SoftwareApplication = {
|
|
46
|
+
'@type': 'SoftwareApplication',
|
|
47
|
+
name: 'Analizator budżetu publicznego',
|
|
48
|
+
applicationCategory: 'EducationalApplication',
|
|
49
|
+
operatingSystem: 'Any',
|
|
50
|
+
description: 'Lokalnie analizuj wydatki publiczne, udziały kategorii, kwoty na osobę i zmiany między okresami.',
|
|
51
|
+
url: 'https://gamebob.dev/pl/analizator-budzetu-publicznego-wydatki',
|
|
52
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const faqPage: FAQPage = {
|
|
56
|
+
'@type': 'FAQPage',
|
|
57
|
+
mainEntity: [
|
|
58
|
+
{ '@type': 'Question', name: 'Jakich kolumn potrzebuje analizator?', acceptedAnswer: { '@type': 'Answer', text: 'Każdy wiersz potrzebuje kategorii i liczbowej kwoty. Ludność, okres, priorAmount, waluta i kategoria nadrzędna są opcjonalne.' } },
|
|
59
|
+
{ '@type': 'Question', name: 'Jak obliczane są wydatki na osobę?', acceptedAnswer: { '@type': 'Answer', text: 'Suma jest dzielona przez pierwszą zgodną dodatnią wartość ludności. Różne mianowniki pozostają widoczne i powodują ostrzeżenie.' } },
|
|
60
|
+
{ '@type': 'Question', name: 'Co dzieje się ze zduplikowanymi kategoriami?', acceptedAnswer: { '@type': 'Answer', text: 'Wiersze z tą samą ścieżką kategorii są dodawane, a numery wierszy źródłowych pozostają widoczne, aby rozróżnić podział od podwójnego liczenia.' } },
|
|
61
|
+
{ '@type': 'Question', name: 'Czy narzędzie dowodzi, że budżet jest dobry lub sprawiedliwy?', acceptedAnswer: { '@type': 'Answer', text: 'Nie. Opisuje podane liczby i nie ustala kompletności, legalności, wydajności, sprawiedliwości, klasyfikacji ani wyników.' } },
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const howTo: HowTo = {
|
|
66
|
+
'@type': 'HowTo',
|
|
67
|
+
name: 'Analizowanie tabeli budżetu publicznego',
|
|
68
|
+
step: [
|
|
69
|
+
{ '@type': 'HowToStep', name: 'Przygotuj tabelę', text: 'Utwórz tabelę CSV lub JSON z jedną kategorią i kwotą w każdym wierszu. Zachowaj tę samą walutę i podstawę księgową.' },
|
|
70
|
+
{ '@type': 'HowToStep', name: 'Dodaj kontekst', text: 'Dodaj ludność, okres, priorAmount, walutę lub kategorię nadrzędną tylko wtedy, gdy ich znaczenie jest spójne.' },
|
|
71
|
+
{ '@type': 'HowToStep', name: 'Wczytaj plik', text: 'Upuść plik w analizatorze lub wczytaj przykład, aby zobaczyć oczekiwany układ i lokalny wynik kontroli.' },
|
|
72
|
+
{ '@type': 'HowToStep', name: 'Odczytaj krajobraz', text: 'Użyj proporcjonalnych pasków do składu budżetu, a dostępnej tabeli do dokładnych kwot, zmian i wierszy źródłowych.' },
|
|
73
|
+
{ '@type': 'HowToStep', name: 'Sprawdź ostrzeżenia', text: 'Wyjaśnij mieszane waluty, zduplikowane ścieżki, ujemne korekty, zerowe mianowniki i wiersze nadrzędne przed wyciągnięciem wniosków.' },
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const content: PublicBudgetLocaleContent = {
|
|
78
|
+
slug: 'analizator-budzetu-publicznego-wydatki',
|
|
79
|
+
title: 'Analizator budżetu publicznego',
|
|
80
|
+
description: 'Analizuj lokalnie tabelę budżetu publicznego, aby zobaczyć wydatki ogółem, udziały kategorii, wydatki na osobę, zmiany i wiersze źródłowe za każdym agregatem.',
|
|
81
|
+
ui,
|
|
82
|
+
seo: [
|
|
83
|
+
{ type: 'title', text: 'Zamień tabelę budżetu publicznego w sprawdzalny widok', level: 2 },
|
|
84
|
+
{ type: 'paragraph', html: 'Pliki budżetów publicznych często łączą etykiety kategorii, okresy księgowe, mianowniki ludności i korekty w tabeli trudnej do szybkiego odczytania. Ten analizator zachowuje wiersze źródłowe, sprawdza wymagane pola i tworzy z tych samych znormalizowanych danych sumy, proporcje, wydatki na osobę oraz zmiany między okresami.' },
|
|
85
|
+
{ type: 'paragraph', html: 'Wynik jest opisowy, a nie polityczny. Duża kategoria może odzwierciedlać ustawowe zadanie, jednorazową inwestycję, transfer albo inną granicę księgową. Widok uwidacznia te wzorce, aby osoba sprawdzająca mogła wrócić do źródła z lepiej postawionym pytaniem.' },
|
|
86
|
+
{ type: 'title', text: 'Znaczenie obliczeń', level: 2 },
|
|
87
|
+
{ type: 'paragraph', html: 'Suma obejmuje wszystkie prawidłowe kwoty liczbowe, w tym ujemne korekty. Udział kategorii to jej zgrupowana kwota podzielona przez sumę, gdy suma jest dodatnia. Dodatnie kwoty otrzymują proporcjonalne paski, a ujemne pozostają w tabeli i są oznaczane, ponieważ dodatnia powierzchnia zmieniłaby ich znaczenie.' },
|
|
88
|
+
{ type: 'table', headers: ['Wynik', 'Obliczenie', 'Pytanie kontrolne'], rows: [['Wydatki ogółem', 'Suma znormalizowanych kwot', 'Czy wszystkie wiersze mają tę samą podstawę księgową?'], ['Udział kategorii', 'Kwota kategorii podzielona przez sumę dodatnią', 'Czy kategorie są rozłączne, czy rodzice nakładają się na dzieci?'], ['Wydatki na osobę', 'Suma podzielona przez dodatni mianownik ludności', 'Czy ludność opisuje to samo miejsce i okres?'], ['Zmiana okresu', 'Bieżąca kwota minus poprzednia podzielone przez bezwzględną poprzednią', 'Czy okresy są porównywalne i unikamy podstawy równej zero?']] },
|
|
89
|
+
{ type: 'title', text: 'Przygotuj porównywalne dane', level: 2 },
|
|
90
|
+
{ type: 'paragraph', html: 'Użyj jednej waluty i jasno określ znaczenie kwoty w każdym wierszu. Przyznane środki, zobowiązanie, płatność i prognoza mogą być prawidłowymi liczbami, ale odpowiadają na różne pytania. Zapisz to znaczenie obok źródła, ponieważ analizator nie odgaduje go z nazwy kolumny.' },
|
|
91
|
+
{ type: 'list', items: ['Użyj jednego wiersza na kategorię albo podaj kategorię nadrzędną dla zamierzonej hierarchii.', 'Zachowaj spójne wartości ludności i nie mieszaj mieszkańców, wyborców, gospodarstw ani użytkowników usług.', 'Dodaj priorAmount tylko wtedy, gdy poprzedni okres ma te same kategorie i podstawę.', 'Sprawdź zduplikowane ścieżki i wiersze nadrzędne pod kątem przypadkowego podwójnego liczenia.', 'Zachowaj sprawdzoną tabelę razem ze źródłem i przyjętymi założeniami.'] },
|
|
92
|
+
{ type: 'tip', title: 'Udział nie jest oceną priorytetu', html: 'Kategoria z największą kwotą nie jest automatycznie najważniejsza, najbardziej rozrzutna ani najskuteczniejsza. Użyj widoku, aby znaleźć skalę i zmiany, a następnie przeczytaj noty źródłowe i wyniki usługi.' },
|
|
93
|
+
{ type: 'title', text: 'Czytaj ostrzeżenia przed wnioskami', level: 2 },
|
|
94
|
+
{ type: 'paragraph', html: 'Zduplikowane ścieżki są grupowane, aby agregat nie został po cichu zaniżony, ale lista wierszy źródłowych pozwala sprawdzić, czy grupowanie było zamierzone. Mieszane waluty nigdy nie są przeliczane. Ludność równa zero usuwa wynik na osobę, a poprzednia kwota równa zero usuwa zmianę procentową, ponieważ dzielenie przez zero nie ma sensownej interpretacji.' },
|
|
95
|
+
{ type: 'paragraph', html: 'Kategorie zagnieżdżone wymagają szczególnej uwagi. Jeśli tabela zawiera jednocześnie Edukację i Edukację > Szkoły jako kwoty, ich dodanie może policzyć te same wydatki dwa razy. Narzędzie ostrzega o zagnieżdżonych ścieżkach, ale tylko metodyka źródła może wskazać, czy wiersz nadrzędny jest sumą częściową, czy niezależną pozycją.' },
|
|
96
|
+
{ type: 'title', text: 'Co zrobić po pierwszym przejściu', level: 2 },
|
|
97
|
+
{ type: 'paragraph', html: 'Użyj numerów wierszy, aby wrócić do oficjalnego pliku i udokumentować każdą korektę lub interpretację. Porównuj podobne okresy, zachowuj ujemne korekty jako korekty i uruchom analizę ponownie po usunięciu sum częściowych, gdy źródło potwierdza, że są już zawarte.' },
|
|
98
|
+
{ type: 'tip', title: 'Zachowaj widoczną granicę danych', html: 'To lokalna analiza opisowa. Nie sprawdza kompletności pliku, nie klasyfikuje wydatków według oficjalnego standardu, nie uzgadnia walut i nie dowodzi związku przyczynowego między wydatkami a wynikami.' },
|
|
99
|
+
],
|
|
100
|
+
faq: [
|
|
101
|
+
{ question: 'Jakich kolumn potrzebuje analizator?', answer: 'Każdy wiersz potrzebuje kategorii i kwoty liczbowej. Ludność, okres, priorAmount, waluta i kategoria nadrzędna są opcjonalne.' },
|
|
102
|
+
{ question: 'Jak obliczane są wydatki na osobę?', answer: 'Suma jest dzielona przez pierwszą zgodną dodatnią wartość ludności. Różne mianowniki wywołują ostrzeżenie.' },
|
|
103
|
+
{ question: 'Co dzieje się ze zduplikowanymi kategoriami?', answer: 'Te same ścieżki kategorii są sumowane, a ich wiersze źródłowe pozostają widoczne do kontroli.' },
|
|
104
|
+
{ question: 'Czy narzędzie dowodzi, że budżet jest dobry lub sprawiedliwy?', answer: 'Nie. Opisuje podane liczby i nie może ustalić kompletności, legalności, wydajności, sprawiedliwości ani wyników.' },
|
|
105
|
+
],
|
|
106
|
+
bibliography,
|
|
107
|
+
howTo: [
|
|
108
|
+
{ name: 'Przygotuj tabelę', text: 'Utwórz tabelę CSV lub JSON z kategorią i kwotą w każdym wierszu, przy tej samej walucie i podstawie księgowej.' },
|
|
109
|
+
{ name: 'Dodaj kontekst', text: 'Dodaj ludność, okres, priorAmount, walutę lub kategorię nadrzędną tylko przy spójnym znaczeniu.' },
|
|
110
|
+
{ name: 'Wczytaj plik', text: 'Upuść plik lub wczytaj przykład, aby zobaczyć oczekiwany układ.' },
|
|
111
|
+
{ name: 'Odczytaj krajobraz', text: 'Użyj proporcjonalnych pasków do składu i tabeli do wartości, zmian oraz wierszy źródłowych.' },
|
|
112
|
+
{ name: 'Sprawdź ostrzeżenia', text: 'Wyjaśnij mieszane waluty, duplikaty, ujemne korekty, zerowe mianowniki i wiersze nadrzędne przed wnioskami.' },
|
|
113
|
+
],
|
|
114
|
+
schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[],
|
|
115
|
+
};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { PublicBudgetLocaleContent } from '../entry';
|
|
4
|
+
import type { PublicBudgetUI } from '../ui';
|
|
5
|
+
|
|
6
|
+
const ui: PublicBudgetUI = {
|
|
7
|
+
uploadLabel: 'Solte aqui um CSV ou JSON de orçamento',
|
|
8
|
+
uploadHelp: 'Campos obrigatórios: categoria e valor. Opcionais: população, período, priorAmount, moeda e categoria pai.',
|
|
9
|
+
loadExample: 'Carregar orçamento de exemplo',
|
|
10
|
+
supportedFormat: 'CSV ou JSON, processado apenas neste navegador',
|
|
11
|
+
tableHeading: 'Linhas de origem e totais por categoria',
|
|
12
|
+
categoryLabel: 'Categoria',
|
|
13
|
+
amountLabel: 'Valor',
|
|
14
|
+
populationLabel: 'População',
|
|
15
|
+
sourceRowsLabel: 'Linhas de origem',
|
|
16
|
+
analyzeEmpty: 'Escolha um arquivo ou carregue o exemplo para examinar um orçamento.',
|
|
17
|
+
resultHeading: 'Paisagem orçamental',
|
|
18
|
+
totalLabel: 'Despesa total',
|
|
19
|
+
perCapitaLabel: 'Despesa por pessoa',
|
|
20
|
+
variationLabel: 'Variação em relação ao período anterior',
|
|
21
|
+
topCategoryLabel: 'Maior categoria',
|
|
22
|
+
shareLabel: 'Parte do total',
|
|
23
|
+
sourceLabel: 'Linhas de origem',
|
|
24
|
+
noData: 'Ainda não há linhas orçamentais válidas disponíveis.',
|
|
25
|
+
warningsHeading: 'Avisos a rever',
|
|
26
|
+
errorsHeading: 'Linhas não incluídas',
|
|
27
|
+
methodHeading: 'Método aplicado',
|
|
28
|
+
methodText: 'A ferramenta valida os campos obrigatórios, preserva cada linha de origem, agrupa caminhos exatos de categoria e calcula totais a partir dos valores normalizados. A parte da categoria é o seu valor dividido pelo total quando este é positivo. A despesa por pessoa divide o total pelo primeiro denominador de população positivo e consistente. A variação do período é a diferença dividida pelo valor absoluto do valor anterior.',
|
|
29
|
+
limitsHeading: 'O que esta ferramenta não faz',
|
|
30
|
+
limitsText: 'Não prova que um orçamento seja completo, comparável, legal, eficiente, justo, imparcial ou corretamente classificado. Não audita a fonte, não avalia a qualidade de uma política, não converte moedas e não identifica se uma linha é uma autorização, obrigação, pagamento ou previsão.',
|
|
31
|
+
edgeCasesHeading: 'Casos limite e avisos sobre os dados',
|
|
32
|
+
edgeCasesText: 'Moedas misturadas, populações diferentes, categorias duplicadas, ajustes negativos, linhas pai junto de linhas filhas, formatos numéricos locais e valores anteriores iguais a zero precisam de revisão humana. O navegador conserva o número original da linha para rastrear cada agregado até à entrada.',
|
|
33
|
+
downloadCsv: 'Descarregar tabela revista',
|
|
34
|
+
printAction: 'Imprimir análise',
|
|
35
|
+
rowsLabel: 'linhas válidas',
|
|
36
|
+
categoriesLabel: 'categorias',
|
|
37
|
+
positiveTotalLabel: 'valores positivos visualizados',
|
|
38
|
+
previousTotalLabel: 'Total anterior',
|
|
39
|
+
invalidFile: 'O ficheiro não pôde ser entendido como uma tabela CSV ou JSON não vazia.',
|
|
40
|
+
fileReadError: 'O ficheiro não pôde ser lido neste navegador.',
|
|
41
|
+
exampleName: 'Exemplo de orçamento municipal',
|
|
42
|
+
noPreviousData: 'Não foi fornecido um valor anterior comparável.',
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const softwareApplication: SoftwareApplication = {
|
|
46
|
+
'@type': 'SoftwareApplication',
|
|
47
|
+
name: 'Analisador de orçamento público',
|
|
48
|
+
applicationCategory: 'EducationalApplication',
|
|
49
|
+
operatingSystem: 'Any',
|
|
50
|
+
description: 'Examine localmente despesas públicas, partes por categoria, valores por pessoa e alterações entre períodos.',
|
|
51
|
+
url: 'https://gamebob.dev/pt/analisador-orcamento-publico-despesa',
|
|
52
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const faqPage: FAQPage = {
|
|
56
|
+
'@type': 'FAQPage',
|
|
57
|
+
mainEntity: [
|
|
58
|
+
{ '@type': 'Question', name: 'Que colunas são necessárias?', acceptedAnswer: { '@type': 'Answer', text: 'Cada linha precisa de uma categoria e de um valor numérico. População, período, priorAmount, moeda e categoria pai são opcionais.' } },
|
|
59
|
+
{ '@type': 'Question', name: 'Como é calculada a despesa por pessoa?', acceptedAnswer: { '@type': 'Answer', text: 'O valor total é dividido pelo primeiro valor de população positivo e consistente. Denominadores diferentes permanecem visíveis e geram um aviso.' } },
|
|
60
|
+
{ '@type': 'Question', name: 'O que acontece às categorias duplicadas?', acceptedAnswer: { '@type': 'Answer', text: 'As linhas com o mesmo caminho de categoria são somadas e os números das linhas de origem permanecem visíveis para distinguir uma divisão real de uma contagem dupla.' } },
|
|
61
|
+
{ '@type': 'Question', name: 'Isto prova que um orçamento é bom ou justo?', acceptedAnswer: { '@type': 'Answer', text: 'Não. A ferramenta descreve os números fornecidos e não estabelece integridade, legalidade, eficiência, justiça, classificação ou resultados.' } },
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const howTo: HowTo = {
|
|
66
|
+
'@type': 'HowTo',
|
|
67
|
+
name: 'Analisar uma tabela de orçamento público',
|
|
68
|
+
step: [
|
|
69
|
+
{ '@type': 'HowToStep', name: 'Preparar uma tabela', text: 'Crie uma tabela CSV ou JSON com uma categoria e um valor por linha. Mantenha a mesma moeda e base contabilística.' },
|
|
70
|
+
{ '@type': 'HowToStep', name: 'Adicionar contexto', text: 'Adicione população, período, priorAmount, moeda ou categoria pai apenas quando o seu significado for consistente.' },
|
|
71
|
+
{ '@type': 'HowToStep', name: 'Carregar o ficheiro', text: 'Solte o ficheiro no analisador ou carregue o exemplo para ver a estrutura esperada e a validação local.' },
|
|
72
|
+
{ '@type': 'HowToStep', name: 'Ler a paisagem', text: 'Use as barras proporcionais para a composição e a tabela acessível para valores, alterações e linhas de origem exatos.' },
|
|
73
|
+
{ '@type': 'HowToStep', name: 'Rever avisos', text: 'Esclareça moedas misturadas, caminhos duplicados, ajustes negativos, denominadores nulos e linhas pai antes de concluir.' },
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const content: PublicBudgetLocaleContent = {
|
|
78
|
+
slug: 'analisador-orcamento-publico-despesa',
|
|
79
|
+
title: 'Analisador de orçamento público',
|
|
80
|
+
description: 'Examine localmente uma tabela de orçamento público para ver despesa total, partes por categoria, despesa por pessoa, alterações e as linhas de origem por trás de cada agregado.',
|
|
81
|
+
ui,
|
|
82
|
+
seo: [
|
|
83
|
+
{ type: 'title', text: 'Transforme uma tabela de orçamento público numa vista verificável', level: 2 },
|
|
84
|
+
{ type: 'paragraph', html: 'Os ficheiros de orçamento público misturam muitas vezes rótulos de categoria, períodos contabilísticos, denominadores de população e ajustes numa tabela difícil de ler rapidamente. Este analisador conserva as linhas de origem, valida os campos necessários e transforma os mesmos dados normalizados em totais, proporções, despesa por pessoa e alterações entre períodos.' },
|
|
85
|
+
{ type: 'paragraph', html: 'O resultado é descritivo, não um julgamento político. Uma categoria grande pode refletir uma competência legal, um investimento excecional, uma transferência ou uma fronteira contabilística diferente. A vista torna estes padrões visíveis para que a fonte possa ser consultada com uma pergunta mais precisa.' },
|
|
86
|
+
{ type: 'title', text: 'O significado dos cálculos', level: 2 },
|
|
87
|
+
{ type: 'paragraph', html: 'O total soma todos os valores numéricos válidos, incluindo ajustes negativos. A parte de uma categoria é o seu valor agrupado dividido pelo total quando este é positivo. Os valores positivos recebem barras proporcionais; os negativos permanecem na tabela e são assinalados porque uma área positiva mudaria o seu significado.' },
|
|
88
|
+
{ type: 'table', headers: ['Resultado', 'Cálculo', 'Pergunta de revisão'], rows: [['Despesa total', 'Soma dos valores normalizados', 'Todas as linhas usam a mesma base contabilística?'], ['Parte da categoria', 'Valor da categoria dividido pelo total positivo', 'As categorias são exclusivas ou os pais sobrepõem-se às filhas?'], ['Despesa por pessoa', 'Total dividido por um denominador de população positivo', 'A população descreve o mesmo local e período?'], ['Alteração do período', 'Valor atual menos anterior dividido pelo valor anterior absoluto', 'Os períodos são comparáveis e evita-se uma base zero?']] },
|
|
89
|
+
{ type: 'title', text: 'Preparar dados comparáveis', level: 2 },
|
|
90
|
+
{ type: 'paragraph', html: 'Use uma única moeda e um significado explícito do valor em cada linha. Uma autorização orçamental, uma obrigação, um pagamento e uma previsão podem ser números válidos e responder a perguntas diferentes. Registe esse significado junto da fonte porque o analisador não o infere do nome da coluna.' },
|
|
91
|
+
{ type: 'list', items: ['Use uma linha por categoria ou forneça uma categoria pai para uma hierarquia intencional.', 'Mantenha a população consistente e não misture residentes, eleitores, agregados familiares ou utilizadores.', 'Inclua priorAmount apenas quando o período anterior usar as mesmas categorias e base.', 'Verifique caminhos duplicados e linhas pai para evitar contagens duplas acidentais.', 'Guarde a tabela revista com a fonte original e as hipóteses utilizadas.'] },
|
|
92
|
+
{ type: 'tip', title: 'Uma proporção não é uma prioridade', html: 'A categoria com maior valor não é automaticamente a mais importante, desperdiçadora ou eficaz. Use a vista para localizar escala e alterações e leia depois as notas da fonte e os resultados do serviço.' },
|
|
93
|
+
{ type: 'title', text: 'Leia os avisos antes de concluir', level: 2 },
|
|
94
|
+
{ type: 'paragraph', html: 'Os caminhos duplicados são agrupados para que o agregado não fique subestimado sem aviso, mas a lista de linhas de origem permite verificar se o agrupamento foi intencional. As moedas misturadas nunca são convertidas. Uma população zero remove a despesa por pessoa e um valor anterior zero remove a percentagem de alteração porque a divisão por zero não tem interpretação útil.' },
|
|
95
|
+
{ type: 'paragraph', html: 'As categorias aninhadas exigem atenção especial. Se uma tabela contém Educação e Educação > Escolas como valores, somá-las pode contar duas vezes a mesma despesa. A ferramenta avisa sobre caminhos aninhados, mas apenas a metodologia da fonte pode indicar se a linha pai é um subtotal ou uma rubrica independente.' },
|
|
96
|
+
{ type: 'title', text: 'O que fazer depois da primeira análise', level: 2 },
|
|
97
|
+
{ type: 'paragraph', html: 'Use os números das linhas para voltar ao ficheiro oficial e documentar cada correção ou interpretação. Compare períodos equivalentes, mantenha ajustes negativos como ajustes e repita a análise depois de remover subtotais quando a fonte confirmar que já estão incluídos.' },
|
|
98
|
+
{ type: 'tip', title: 'Mantenha visível o limite dos dados', html: 'Esta é uma análise descritiva local. Não verifica que o ficheiro esteja completo, não classifica a despesa segundo uma norma oficial, não reconcilia moedas e não prova uma relação causal entre despesa e resultados.' },
|
|
99
|
+
],
|
|
100
|
+
faq: [
|
|
101
|
+
{ question: 'Que colunas são necessárias?', answer: 'Cada linha precisa de categoria e valor numérico. População, período, priorAmount, moeda e categoria pai são opcionais.' },
|
|
102
|
+
{ question: 'Como é calculada a despesa por pessoa?', answer: 'O total é dividido pelo primeiro valor de população positivo e consistente. Denominadores diferentes geram um aviso.' },
|
|
103
|
+
{ question: 'O que acontece às categorias duplicadas?', answer: 'Os mesmos caminhos de categoria são somados e as linhas de origem permanecem visíveis para revisão.' },
|
|
104
|
+
{ question: 'Isto prova que um orçamento é bom ou justo?', answer: 'Não. Descreve os números fornecidos e não pode estabelecer integridade, legalidade, eficiência, justiça ou resultados.' },
|
|
105
|
+
],
|
|
106
|
+
bibliography,
|
|
107
|
+
howTo: [
|
|
108
|
+
{ name: 'Preparar uma tabela', text: 'Crie uma tabela CSV ou JSON com categoria e valor por linha, usando a mesma moeda e base contabilística.' },
|
|
109
|
+
{ name: 'Adicionar contexto', text: 'Adicione população, período, priorAmount, moeda ou categoria pai apenas quando o significado for consistente.' },
|
|
110
|
+
{ name: 'Carregar o ficheiro', text: 'Solte o ficheiro ou carregue o exemplo para ver a estrutura esperada.' },
|
|
111
|
+
{ name: 'Ler a paisagem', text: 'Use barras proporcionais para a composição e a tabela para valores, alterações e linhas de origem.' },
|
|
112
|
+
{ name: 'Rever avisos', text: 'Esclareça moedas misturadas, duplicados, ajustes negativos, denominadores nulos e linhas pai antes de concluir.' },
|
|
113
|
+
],
|
|
114
|
+
schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[],
|
|
115
|
+
};
|