@jjlmoya/utils-civic 1.5.0 → 1.7.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/index.ts +1 -0
- package/src/tests/locale_completeness.test.ts +1 -1
- package/src/tests/tool_validation.test.ts +1 -1
- package/src/tool/participatory-budget-allocator/bibliography.astro +6 -0
- package/src/tool/participatory-budget-allocator/bibliography.ts +8 -0
- package/src/tool/participatory-budget-allocator/component.astro +61 -0
- package/src/tool/participatory-budget-allocator/contract.test.ts +13 -0
- package/src/tool/participatory-budget-allocator/controller.ts +108 -0
- package/src/tool/participatory-budget-allocator/dom-views.test.ts +14 -0
- package/src/tool/participatory-budget-allocator/dom-views.ts +58 -0
- package/src/tool/participatory-budget-allocator/entry.ts +27 -0
- package/src/tool/participatory-budget-allocator/evaluator.ts +24 -0
- package/src/tool/participatory-budget-allocator/i18n/de.ts +44 -0
- package/src/tool/participatory-budget-allocator/i18n/en.ts +79 -0
- package/src/tool/participatory-budget-allocator/i18n/es.ts +43 -0
- package/src/tool/participatory-budget-allocator/i18n/fr.ts +43 -0
- package/src/tool/participatory-budget-allocator/i18n/id.ts +43 -0
- package/src/tool/participatory-budget-allocator/i18n/it.ts +43 -0
- package/src/tool/participatory-budget-allocator/i18n/ja.ts +43 -0
- package/src/tool/participatory-budget-allocator/i18n/ko.ts +43 -0
- package/src/tool/participatory-budget-allocator/i18n/nl.ts +43 -0
- package/src/tool/participatory-budget-allocator/i18n/pl.ts +43 -0
- package/src/tool/participatory-budget-allocator/i18n/pt.ts +43 -0
- package/src/tool/participatory-budget-allocator/i18n/ru.ts +43 -0
- package/src/tool/participatory-budget-allocator/i18n/sv.ts +43 -0
- package/src/tool/participatory-budget-allocator/i18n/tr.ts +43 -0
- package/src/tool/participatory-budget-allocator/i18n/zh.ts +43 -0
- package/src/tool/participatory-budget-allocator/index.ts +11 -0
- package/src/tool/participatory-budget-allocator/logic.test.ts +48 -0
- package/src/tool/participatory-budget-allocator/logic.ts +146 -0
- package/src/tool/participatory-budget-allocator/participatory-budget-allocator.css +426 -0
- package/src/tool/participatory-budget-allocator/seo.astro +14 -0
- package/src/tool/participatory-budget-allocator/storage.ts +32 -0
- package/src/tool/participatory-budget-allocator/ui.ts +88 -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: 'Déposez ici un CSV ou JSON budgétaire',
|
|
8
|
+
uploadHelp: 'Champs requis: catégorie et montant. Facultatifs: population, période, priorAmount, devise et catégorie parente.',
|
|
9
|
+
loadExample: "Charger l'exemple de budget",
|
|
10
|
+
supportedFormat: 'CSV ou JSON, traité uniquement dans ce navigateur',
|
|
11
|
+
tableHeading: 'Lignes sources et totaux par catégorie',
|
|
12
|
+
categoryLabel: 'Catégorie',
|
|
13
|
+
amountLabel: 'Montant',
|
|
14
|
+
populationLabel: 'Population',
|
|
15
|
+
sourceRowsLabel: 'Lignes sources',
|
|
16
|
+
analyzeEmpty: "Choisissez un fichier ou chargez l'exemple pour examiner un budget.",
|
|
17
|
+
resultHeading: 'Paysage budgétaire',
|
|
18
|
+
totalLabel: 'Dépenses totales',
|
|
19
|
+
perCapitaLabel: 'Dépenses par personne',
|
|
20
|
+
variationLabel: 'Évolution par rapport à la période précédente',
|
|
21
|
+
topCategoryLabel: 'Catégorie principale',
|
|
22
|
+
shareLabel: 'Part du total',
|
|
23
|
+
sourceLabel: 'Lignes sources',
|
|
24
|
+
noData: "Aucune ligne budgétaire valide n'est encore disponible.",
|
|
25
|
+
warningsHeading: 'Avertissements à vérifier',
|
|
26
|
+
errorsHeading: 'Lignes non incluses',
|
|
27
|
+
methodHeading: 'Méthode appliquée',
|
|
28
|
+
methodText: "L'outil vérifie les champs requis, conserve chaque ligne source, regroupe les chemins de catégorie identiques et calcule les totaux à partir des montants normalisés. La part d'une catégorie correspond à son montant divisé par le total lorsque celui-ci est positif. La dépense par personne divise le total par le premier dénominateur de population positif et cohérent. L'évolution correspond à la différence divisée par la valeur absolue du montant précédent.",
|
|
29
|
+
limitsHeading: 'Ce que cet outil ne fait pas',
|
|
30
|
+
limitsText: "Il ne prouve pas qu'un budget est complet, comparable, légal, efficace, équitable, impartial ou correctement classé. Il n'audite pas la source, n'évalue pas une politique, ne convertit pas les devises et ne détermine pas si une ligne est une autorisation, une obligation, un paiement ou une prévision.",
|
|
31
|
+
edgeCasesHeading: 'Cas limites et alertes de données',
|
|
32
|
+
edgeCasesText: "Les devises mélangées, populations variables, catégories dupliquées, ajustements négatifs, lignes parentes avec leurs enfants, formats numériques locaux et montants précédents nuls demandent une vérification humaine. Le navigateur conserve le numéro de ligne original pour relier chaque agrégat à son entrée.",
|
|
33
|
+
downloadCsv: 'Télécharger la table vérifiée',
|
|
34
|
+
printAction: "Imprimer l'analyse",
|
|
35
|
+
rowsLabel: 'lignes valides',
|
|
36
|
+
categoriesLabel: 'catégories',
|
|
37
|
+
positiveTotalLabel: 'montants positifs visualisés',
|
|
38
|
+
previousTotalLabel: 'Total précédent',
|
|
39
|
+
invalidFile: "Le fichier n'a pas pu être compris comme une table CSV ou JSON non vide.",
|
|
40
|
+
fileReadError: "Le fichier n'a pas pu être lu dans ce navigateur.",
|
|
41
|
+
exampleName: 'Exemple de budget communal',
|
|
42
|
+
noPreviousData: 'Aucun montant comparable de la période précédente.',
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const softwareApplication: SoftwareApplication = {
|
|
46
|
+
'@type': 'SoftwareApplication',
|
|
47
|
+
name: "Analyseur de budget public",
|
|
48
|
+
applicationCategory: 'EducationalApplication',
|
|
49
|
+
operatingSystem: 'Any',
|
|
50
|
+
description: 'Examinez localement les dépenses publiques, les parts par catégorie, les montants par personne et les évolutions.',
|
|
51
|
+
url: 'https://gamebob.dev/fr/analyse-budget-public-depenses',
|
|
52
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const faqPage: FAQPage = {
|
|
56
|
+
'@type': 'FAQPage',
|
|
57
|
+
mainEntity: [
|
|
58
|
+
{ '@type': 'Question', name: "Quelles colonnes l'analyseur nécessite-t-il?", acceptedAnswer: { '@type': 'Answer', text: 'Chaque ligne nécessite une catégorie et un montant numérique. La population, la période, priorAmount, la devise et la catégorie parente sont facultatifs.' } },
|
|
59
|
+
{ '@type': 'Question', name: 'Comment les dépenses par personne sont-elles calculées?', acceptedAnswer: { '@type': 'Answer', text: 'Le montant total est divisé par la première valeur de population positive et cohérente. Des dénominateurs différents sont conservés et signalés.' } },
|
|
60
|
+
{ '@type': 'Question', name: 'Que deviennent les catégories en double?', acceptedAnswer: { '@type': 'Answer', text: 'Les lignes ayant le même chemin de catégorie sont additionnées et leurs numéros de lignes sources restent visibles pour distinguer un découpage réel d un double comptage.' } },
|
|
61
|
+
{ '@type': 'Question', name: 'L analyse peut-elle prouver qu un budget est bon ou juste?', acceptedAnswer: { '@type': 'Answer', text: "Non. Elle décrit les nombres fournis et ne peut pas établir leur exhaustivité, leur légalité, leur efficacité, leur équité, leur classement ou leurs résultats." } },
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const howTo: HowTo = {
|
|
66
|
+
'@type': 'HowTo',
|
|
67
|
+
name: 'Analyser un tableau de budget public',
|
|
68
|
+
step: [
|
|
69
|
+
{ '@type': 'HowToStep', name: 'Préparer un tableau', text: 'Créez un tableau CSV ou JSON avec une catégorie et un montant par ligne. Gardez la même devise et la même base comptable.' },
|
|
70
|
+
{ '@type': 'HowToStep', name: 'Ajouter le contexte', text: 'Ajoutez population, période, priorAmount, devise ou catégorie parente seulement si leur sens reste cohérent.' },
|
|
71
|
+
{ '@type': 'HowToStep', name: 'Charger le fichier', text: "Déposez le fichier dans l'analyseur ou chargez l'exemple pour voir la structure attendue et le résultat de la validation locale." },
|
|
72
|
+
{ '@type': 'HowToStep', name: 'Lire le paysage', text: 'Utilisez les barres proportionnelles pour la composition, puis le tableau accessible pour les montants, évolutions et lignes sources exacts.' },
|
|
73
|
+
{ '@type': 'HowToStep', name: 'Examiner les alertes', text: 'Clarifiez les devises mélangées, chemins en double, ajustements négatifs, dénominateurs nuls et lignes parentes avant de conclure.' },
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const content: PublicBudgetLocaleContent = {
|
|
78
|
+
slug: 'analyse-budget-public-depenses',
|
|
79
|
+
title: "Analyseur de budget public",
|
|
80
|
+
description: "Examinez localement un tableau de budget public pour voir les dépenses totales, les parts par catégorie, les dépenses par personne, les évolutions et les lignes sources derrière chaque agrégat.",
|
|
81
|
+
ui,
|
|
82
|
+
seo: [
|
|
83
|
+
{ type: 'title', text: 'Transformer un tableau de budget public en vue vérifiable', level: 2 },
|
|
84
|
+
{ type: 'paragraph', html: "Les fichiers de budget public mélangent souvent libellés de catégories, périodes comptables, dénominateurs de population et ajustements dans un tableau difficile à lire rapidement. Cet analyseur conserve les lignes sources, vérifie les champs requis et transforme les mêmes données normalisées en totaux, proportions, dépenses par personne et évolutions." },
|
|
85
|
+
{ type: 'paragraph', html: "Le résultat est descriptif et ne constitue pas un jugement politique. Une catégorie importante peut refléter une compétence légale, un investissement ponctuel, un transfert ou une autre limite comptable. La vue rend ces motifs visibles afin de permettre une question plus précise dans le document source." },
|
|
86
|
+
{ type: 'title', text: 'Comprendre les calculs', level: 2 },
|
|
87
|
+
{ type: 'paragraph', html: "Le total additionne tous les montants numériques valides, y compris les ajustements négatifs. La part d'une catégorie est son montant regroupé divisé par le total lorsque celui-ci est positif. Les montants positifs reçoivent des barres proportionnelles; les montants négatifs restent dans le tableau et sont signalés, car une surface positive changerait leur sens." },
|
|
88
|
+
{ type: 'table', headers: ['Résultat', 'Calcul', 'Question de vérification'], rows: [['Dépenses totales', 'Somme des montants normalisés', 'Toutes les lignes ont-elles la même base comptable?'], ['Part de catégorie', 'Montant de la catégorie divisé par le total positif', 'Les catégories sont-elles exclusives ou les parents recouvrent-ils les enfants?'], ['Dépenses par personne', 'Total divisé par un dénominateur de population positif', 'La population décrit-elle le même lieu et la même période?'], ['Évolution', 'Montant actuel moins montant précédent divisé par la valeur absolue du précédent', 'Les périodes sont-elles comparables et la base zéro est-elle évitée?']] },
|
|
89
|
+
{ type: 'title', text: 'Préparer des données comparables', level: 2 },
|
|
90
|
+
{ type: 'paragraph', html: "Utilisez une seule devise et une définition explicite du montant pour chaque ligne. Une autorisation budgétaire, une obligation, un paiement et une prévision peuvent être des chiffres valides tout en répondant à des questions différentes. Notez ce sens près de la source, car l'analyseur ne le déduit pas du nom de colonne." },
|
|
91
|
+
{ type: 'list', items: ['Utilisez une ligne par catégorie ou indiquez une catégorie parente pour une hiérarchie volontaire.', 'Gardez les valeurs de population cohérentes et ne mélangez pas habitants, électeurs, ménages ou usagers.', 'Ajoutez priorAmount seulement si la période précédente utilise les mêmes catégories et la même base.', 'Vérifiez les chemins en double et les lignes parentes pour éviter un double comptage accidentel.', 'Conservez la table vérifiée avec la source et les hypothèses qui ont servi à la lire.'] },
|
|
92
|
+
{ type: 'tip', title: "Une proportion n'est pas une note de priorité", html: "La catégorie au montant le plus élevé n'est pas automatiquement la plus importante, la plus gaspilleuse ou la plus efficace. Utilisez la vue pour repérer l'échelle et les évolutions, puis lisez les notes de source et les résultats du service." },
|
|
93
|
+
{ type: 'title', text: 'Lire les alertes avant de conclure', level: 2 },
|
|
94
|
+
{ type: 'paragraph', html: "Les chemins en double sont regroupés afin que l'agrégat ne soit pas sous-estimé en silence, mais la liste des lignes sources permet de vérifier si ce regroupement est intentionnel. Les devises mélangées ne sont jamais converties. Une population nulle supprime le résultat par personne et un montant précédent nul supprime le pourcentage d'évolution, car une division par zéro n'a pas de sens." },
|
|
95
|
+
{ type: 'paragraph', html: "Les catégories imbriquées exigent une attention particulière. Si un tableau contient à la fois Éducation et Éducation > Écoles comme montants, les additionner peut compter deux fois la même dépense. L'outil signale les chemins imbriqués, mais seule la méthode de la source peut dire si la ligne parente est un sous-total ou une ligne indépendante." },
|
|
96
|
+
{ type: 'title', text: 'Agir après le premier passage', level: 2 },
|
|
97
|
+
{ type: 'paragraph', html: "Utilisez les numéros de lignes pour revenir au fichier officiel et documenter chaque correction ou interprétation. Comparez des périodes réellement comparables, conservez les ajustements négatifs comme ajustements et relancez l'analyse après avoir retiré les sous-totaux lorsque la source confirme qu'ils sont déjà inclus." },
|
|
98
|
+
{ type: 'tip', title: 'Garder la limite des données visible', html: "Il s'agit d'une analyse descriptive locale. Elle ne vérifie pas que le fichier est complet, ne classe pas les dépenses selon une norme officielle, ne rapproche pas les devises et ne prouve pas un lien de causalité entre dépenses et résultats." },
|
|
99
|
+
],
|
|
100
|
+
faq: [
|
|
101
|
+
{ question: "Quelles colonnes l'analyseur nécessite-t-il?", answer: 'Chaque ligne nécessite une catégorie et un montant numérique. Population, période, priorAmount, devise et catégorie parente sont facultatifs.' },
|
|
102
|
+
{ question: 'Comment les dépenses par personne sont-elles calculées?', answer: 'Le total est divisé par la première valeur de population positive et cohérente. Des dénominateurs différents produisent une alerte.' },
|
|
103
|
+
{ question: 'Que deviennent les catégories en double?', answer: 'Les mêmes chemins de catégorie sont additionnés et leurs lignes sources restent visibles pour la vérification.' },
|
|
104
|
+
{ question: "L'analyse peut-elle prouver qu'un budget est bon ou juste?", answer: "Non. Elle décrit les chiffres fournis et ne peut pas établir leur exhaustivité, légalité, efficacité, équité ou leurs résultats." },
|
|
105
|
+
],
|
|
106
|
+
bibliography,
|
|
107
|
+
howTo: [
|
|
108
|
+
{ name: 'Préparer un tableau', text: 'Créez une table CSV ou JSON avec catégorie et montant par ligne, dans la même devise et base comptable.' },
|
|
109
|
+
{ name: 'Ajouter le contexte', text: 'Ajoutez population, période, priorAmount, devise ou catégorie parente seulement si leur sens est cohérent.' },
|
|
110
|
+
{ name: 'Charger le fichier', text: "Déposez le fichier ou chargez l'exemple pour voir la structure attendue." },
|
|
111
|
+
{ name: 'Lire le paysage', text: 'Utilisez les barres proportionnelles pour la composition et le tableau pour les valeurs, évolutions et lignes sources.' },
|
|
112
|
+
{ name: 'Examiner les alertes', text: 'Clarifiez devises mélangées, doublons, ajustements négatifs, dénominateurs nuls et lignes parentes avant de conclure.' },
|
|
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: 'Letakkan CSV atau JSON anggaran di sini',
|
|
8
|
+
uploadHelp: 'Kolom wajib: kategori dan jumlah. Opsional: populasi, periode, priorAmount, mata uang, dan kategori induk.',
|
|
9
|
+
loadExample: 'Muat contoh anggaran',
|
|
10
|
+
supportedFormat: 'CSV atau JSON, diproses hanya di browser ini',
|
|
11
|
+
tableHeading: 'Baris sumber dan total kategori',
|
|
12
|
+
categoryLabel: 'Kategori',
|
|
13
|
+
amountLabel: 'Jumlah',
|
|
14
|
+
populationLabel: 'Populasi',
|
|
15
|
+
sourceRowsLabel: 'Baris sumber',
|
|
16
|
+
analyzeEmpty: 'Pilih berkas atau muat contoh untuk memeriksa anggaran.',
|
|
17
|
+
resultHeading: 'Lanskap anggaran',
|
|
18
|
+
totalLabel: 'Total belanja',
|
|
19
|
+
perCapitaLabel: 'Belanja per orang',
|
|
20
|
+
variationLabel: 'Perubahan dari periode sebelumnya',
|
|
21
|
+
topCategoryLabel: 'Kategori terbesar',
|
|
22
|
+
shareLabel: 'Bagian dari total',
|
|
23
|
+
sourceLabel: 'Baris sumber',
|
|
24
|
+
noData: 'Belum ada baris anggaran yang valid.',
|
|
25
|
+
warningsHeading: 'Peringatan untuk ditinjau',
|
|
26
|
+
errorsHeading: 'Baris yang tidak disertakan',
|
|
27
|
+
methodHeading: 'Metode yang digunakan',
|
|
28
|
+
methodText: 'Alat ini memeriksa kolom wajib, mempertahankan setiap baris sumber, mengelompokkan jalur kategori yang sama, dan menghitung total dari jumlah yang dinormalisasi. Bagian kategori adalah jumlah kategori dibagi total ketika totalnya positif. Belanja per orang membagi total dengan nilai populasi positif pertama yang konsisten. Perubahan periode adalah selisih dibagi nilai absolut jumlah sebelumnya.',
|
|
29
|
+
limitsHeading: 'Yang tidak dilakukan alat ini',
|
|
30
|
+
limitsText: 'Alat ini tidak membuktikan bahwa anggaran lengkap, dapat dibandingkan, sah, efisien, adil, tidak bias, atau diklasifikasikan dengan benar. Alat ini tidak mengaudit sumber, menilai mutu kebijakan, mengonversi mata uang, atau menentukan apakah baris merupakan alokasi, kewajiban, pembayaran, atau prakiraan.',
|
|
31
|
+
edgeCasesHeading: 'Kasus khusus dan peringatan data',
|
|
32
|
+
edgeCasesText: 'Mata uang campuran, populasi yang berubah, kategori ganda, penyesuaian negatif, baris induk bersama baris anak, format angka lokal, dan jumlah periode sebelumnya yang nol memerlukan pemeriksaan manusia. Browser menyimpan nomor baris asli agar setiap agregat dapat ditelusuri ke inputnya.',
|
|
33
|
+
downloadCsv: 'Unduh tabel yang ditinjau',
|
|
34
|
+
printAction: 'Cetak analisis',
|
|
35
|
+
rowsLabel: 'baris valid',
|
|
36
|
+
categoriesLabel: 'kategori',
|
|
37
|
+
positiveTotalLabel: 'jumlah positif yang divisualisasikan',
|
|
38
|
+
previousTotalLabel: 'Total sebelumnya',
|
|
39
|
+
invalidFile: 'Berkas tidak dapat dipahami sebagai tabel CSV atau JSON yang tidak kosong.',
|
|
40
|
+
fileReadError: 'Berkas tidak dapat dibaca di browser ini.',
|
|
41
|
+
exampleName: 'Contoh anggaran kota',
|
|
42
|
+
noPreviousData: 'Jumlah periode sebelumnya yang dapat dibandingkan tidak diberikan.',
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const softwareApplication: SoftwareApplication = {
|
|
46
|
+
'@type': 'SoftwareApplication',
|
|
47
|
+
name: 'Penganalisis anggaran publik',
|
|
48
|
+
applicationCategory: 'EducationalApplication',
|
|
49
|
+
operatingSystem: 'Any',
|
|
50
|
+
description: 'Periksa belanja publik, bagian kategori, jumlah per orang, dan perubahan antarperiode secara lokal.',
|
|
51
|
+
url: 'https://gamebob.dev/id/analisis-anggaran-publik-pengeluaran',
|
|
52
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const faqPage: FAQPage = {
|
|
56
|
+
'@type': 'FAQPage',
|
|
57
|
+
mainEntity: [
|
|
58
|
+
{ '@type': 'Question', name: 'Kolom apa yang diperlukan?', acceptedAnswer: { '@type': 'Answer', text: 'Setiap baris memerlukan kategori dan jumlah numerik. Populasi, periode, priorAmount, mata uang, dan kategori induk bersifat opsional.' } },
|
|
59
|
+
{ '@type': 'Question', name: 'Bagaimana belanja per orang dihitung?', acceptedAnswer: { '@type': 'Answer', text: 'Jumlah total dibagi dengan nilai populasi positif pertama yang konsisten. Penyebut yang berbeda tetap terlihat dan menimbulkan peringatan.' } },
|
|
60
|
+
{ '@type': 'Question', name: 'Apa yang terjadi pada kategori ganda?', acceptedAnswer: { '@type': 'Answer', text: 'Baris dengan jalur kategori yang sama dijumlahkan dan nomor baris sumbernya tetap terlihat untuk membedakan pembagian nyata dari penghitungan ganda.' } },
|
|
61
|
+
{ '@type': 'Question', name: 'Apakah alat ini membuktikan anggaran baik atau adil?', acceptedAnswer: { '@type': 'Answer', text: 'Tidak. Alat ini menggambarkan angka yang diberikan dan tidak menetapkan kelengkapan, legalitas, efisiensi, keadilan, klasifikasi, atau hasilnya.' } },
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const howTo: HowTo = {
|
|
66
|
+
'@type': 'HowTo',
|
|
67
|
+
name: 'Menganalisis tabel anggaran publik',
|
|
68
|
+
step: [
|
|
69
|
+
{ '@type': 'HowToStep', name: 'Siapkan tabel', text: 'Buat tabel CSV atau JSON dengan satu kategori dan jumlah per baris. Gunakan mata uang dan dasar akuntansi yang sama.' },
|
|
70
|
+
{ '@type': 'HowToStep', name: 'Tambahkan konteks', text: 'Tambahkan populasi, periode, priorAmount, mata uang, atau kategori induk hanya jika maknanya konsisten.' },
|
|
71
|
+
{ '@type': 'HowToStep', name: 'Muat berkas', text: 'Letakkan berkas di alat atau muat contoh untuk melihat bentuk data dan hasil validasi lokal.' },
|
|
72
|
+
{ '@type': 'HowToStep', name: 'Baca lanskap', text: 'Gunakan batang proporsional untuk komposisi dan tabel yang dapat diakses untuk jumlah, perubahan, dan baris sumber.' },
|
|
73
|
+
{ '@type': 'HowToStep', name: 'Tinjau peringatan', text: 'Periksa mata uang campuran, jalur ganda, penyesuaian negatif, penyebut nol, dan baris induk sebelum mengambil kesimpulan.' },
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const content: PublicBudgetLocaleContent = {
|
|
78
|
+
slug: 'analisis-anggaran-publik-pengeluaran',
|
|
79
|
+
title: 'Penganalisis anggaran publik',
|
|
80
|
+
description: 'Periksa tabel anggaran publik secara lokal untuk melihat total belanja, bagian kategori, belanja per orang, perubahan, dan baris sumber di balik setiap agregat.',
|
|
81
|
+
ui,
|
|
82
|
+
seo: [
|
|
83
|
+
{ type: 'title', text: 'Ubah tabel anggaran publik menjadi tampilan yang dapat diaudit', level: 2 },
|
|
84
|
+
{ type: 'paragraph', html: 'Berkas anggaran publik sering mencampur label kategori, periode akuntansi, penyebut populasi, dan penyesuaian dalam tabel yang sulit dibaca sekilas. Alat ini mempertahankan baris sumber, memeriksa kolom wajib, lalu mengubah data yang sama menjadi total, proporsi kategori, belanja per orang, dan perubahan periode.' },
|
|
85
|
+
{ type: 'paragraph', html: 'Hasilnya bersifat deskriptif, bukan penilaian politik. Kategori besar dapat mencerminkan tanggung jawab hukum, investasi satu kali, transfer, atau batas akuntansi yang berbeda. Tampilan ini membuat pola tersebut terlihat agar sumber dapat diperiksa dengan pertanyaan yang lebih tepat.' },
|
|
86
|
+
{ type: 'title', text: 'Arti perhitungannya', level: 2 },
|
|
87
|
+
{ type: 'paragraph', html: 'Total adalah jumlah semua angka yang valid, termasuk penyesuaian negatif. Bagian kategori adalah jumlah kategori yang dikelompokkan dibagi total ketika totalnya positif. Jumlah positif diberi batang proporsional, sedangkan jumlah negatif tetap berada di tabel karena area positif akan mengubah maknanya.' },
|
|
88
|
+
{ type: 'table', headers: ['Hasil', 'Perhitungan', 'Pertanyaan pemeriksaan'], rows: [['Total belanja', 'Jumlah nilai yang dinormalisasi', 'Apakah semua baris memakai dasar akuntansi yang sama?'], ['Bagian kategori', 'Jumlah kategori dibagi total positif', 'Apakah kategori saling terpisah atau induk tumpang tindih dengan anak?'], ['Belanja per orang', 'Total dibagi penyebut populasi positif', 'Apakah populasi menggambarkan tempat dan periode yang sama?'], ['Perubahan periode', 'Jumlah kini dikurangi sebelumnya dibagi nilai absolut sebelumnya', 'Apakah periode dapat dibandingkan dan dasar nol dihindari?']] },
|
|
89
|
+
{ type: 'title', text: 'Siapkan data yang dapat dibandingkan', level: 2 },
|
|
90
|
+
{ type: 'paragraph', html: 'Gunakan satu mata uang dan makna jumlah yang jelas untuk setiap baris. Alokasi anggaran, kewajiban, pembayaran, dan prakiraan dapat menjadi angka yang valid tetapi menjawab pertanyaan berbeda. Catat makna itu di dekat sumber karena alat tidak dapat menebaknya dari nama kolom.' },
|
|
91
|
+
{ type: 'list', items: ['Gunakan satu baris untuk setiap kategori atau berikan kategori induk untuk hierarki yang disengaja.', 'Jaga nilai populasi tetap konsisten dan jangan mencampur penduduk, pemilih, rumah tangga, atau pengguna layanan.', 'Sertakan priorAmount hanya jika periode sebelumnya memakai kategori dan dasar yang sama.', 'Periksa jalur kategori ganda dan baris induk untuk menghindari penghitungan ganda.', 'Simpan tabel yang ditinjau bersama sumber asli dan asumsi yang digunakan.'] },
|
|
92
|
+
{ type: 'tip', title: 'Proporsi bukan skor prioritas', html: 'Kategori dengan jumlah terbesar tidak otomatis paling penting, paling boros, atau paling berhasil. Gunakan tampilan untuk menemukan skala dan perubahan, lalu baca catatan sumber dan hasil layanan.' },
|
|
93
|
+
{ type: 'title', text: 'Baca peringatan sebelum mengambil kesimpulan', level: 2 },
|
|
94
|
+
{ type: 'paragraph', html: 'Jalur ganda dikelompokkan agar agregat tidak diam diam terlalu rendah, tetapi daftar baris sumber menunjukkan apakah pengelompokan itu disengaja. Mata uang campuran tidak pernah dikonversi. Populasi nol menghapus hasil per orang dan jumlah sebelumnya nol menghapus persentase perubahan karena pembagian dengan nol tidak memiliki arti yang dapat diandalkan.' },
|
|
95
|
+
{ type: 'paragraph', html: 'Kategori bertingkat memerlukan perhatian khusus. Jika tabel berisi Pendidikan dan Pendidikan > Sekolah sebagai jumlah, menjumlahkannya dapat menghitung belanja yang sama dua kali. Alat memberi peringatan tentang jalur bertingkat, tetapi hanya metode sumber yang dapat menjelaskan apakah baris induk adalah subtotal atau pos mandiri.' },
|
|
96
|
+
{ type: 'title', text: 'Tindakan setelah analisis pertama', level: 2 },
|
|
97
|
+
{ type: 'paragraph', html: 'Gunakan nomor baris untuk kembali ke berkas resmi dan mencatat setiap koreksi atau tafsiran. Bandingkan periode yang setara, pertahankan penyesuaian negatif sebagai penyesuaian, dan jalankan kembali analisis setelah menghapus subtotal jika sumber memastikan subtotal tersebut sudah termasuk.' },
|
|
98
|
+
{ type: 'tip', title: 'Pertahankan batas data tetap terlihat', html: 'Ini adalah analisis deskriptif lokal. Alat tidak memeriksa kelengkapan berkas, tidak mengklasifikasikan belanja menurut standar resmi, tidak menyelaraskan mata uang, dan tidak membuktikan hubungan sebab akibat antara belanja dan hasil.' },
|
|
99
|
+
],
|
|
100
|
+
faq: [
|
|
101
|
+
{ question: 'Kolom apa yang diperlukan?', answer: 'Setiap baris memerlukan kategori dan jumlah numerik. Populasi, periode, priorAmount, mata uang, dan kategori induk bersifat opsional.' },
|
|
102
|
+
{ question: 'Bagaimana belanja per orang dihitung?', answer: 'Total dibagi dengan nilai populasi positif pertama yang konsisten. Penyebut yang berbeda menghasilkan peringatan.' },
|
|
103
|
+
{ question: 'Apa yang terjadi pada kategori ganda?', answer: 'Jalur kategori yang sama dijumlahkan dan baris sumbernya tetap terlihat untuk ditinjau.' },
|
|
104
|
+
{ question: 'Apakah alat ini membuktikan anggaran baik atau adil?', answer: 'Tidak. Alat ini menggambarkan angka dan tidak dapat menetapkan kelengkapan, legalitas, efisiensi, keadilan, atau hasil.' },
|
|
105
|
+
],
|
|
106
|
+
bibliography,
|
|
107
|
+
howTo: [
|
|
108
|
+
{ name: 'Siapkan tabel', text: 'Buat tabel CSV atau JSON dengan kategori dan jumlah per baris menggunakan mata uang dan dasar akuntansi yang sama.' },
|
|
109
|
+
{ name: 'Tambahkan konteks', text: 'Tambahkan populasi, periode, priorAmount, mata uang, atau kategori induk hanya jika maknanya konsisten.' },
|
|
110
|
+
{ name: 'Muat berkas', text: 'Letakkan berkas atau muat contoh untuk melihat bentuk data yang diharapkan.' },
|
|
111
|
+
{ name: 'Baca lanskap', text: 'Gunakan batang proporsional untuk komposisi dan tabel untuk nilai, perubahan, serta baris sumber.' },
|
|
112
|
+
{ name: 'Tinjau peringatan', text: 'Periksa mata uang campuran, duplikat, penyesuaian negatif, penyebut nol, dan baris induk sebelum menyimpulkan.' },
|
|
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: 'Trascina qui un CSV o JSON di bilancio',
|
|
8
|
+
uploadHelp: 'Campi obbligatori: categoria e importo. Facoltativi: popolazione, periodo, priorAmount, valuta e categoria padre.',
|
|
9
|
+
loadExample: 'Carica il bilancio di esempio',
|
|
10
|
+
supportedFormat: 'CSV o JSON, elaborato solo in questo browser',
|
|
11
|
+
tableHeading: 'Righe fonte e totali per categoria',
|
|
12
|
+
categoryLabel: 'Categoria',
|
|
13
|
+
amountLabel: 'Importo',
|
|
14
|
+
populationLabel: 'Popolazione',
|
|
15
|
+
sourceRowsLabel: 'Righe fonte',
|
|
16
|
+
analyzeEmpty: 'Scegli un file o carica l esempio per esaminare un bilancio.',
|
|
17
|
+
resultHeading: 'Paesaggio del bilancio',
|
|
18
|
+
totalLabel: 'Spesa totale',
|
|
19
|
+
perCapitaLabel: 'Spesa per persona',
|
|
20
|
+
variationLabel: 'Variazione rispetto al periodo precedente',
|
|
21
|
+
topCategoryLabel: 'Categoria principale',
|
|
22
|
+
shareLabel: 'Quota del totale',
|
|
23
|
+
sourceLabel: 'Righe fonte',
|
|
24
|
+
noData: 'Non ci sono ancora righe di bilancio valide.',
|
|
25
|
+
warningsHeading: 'Avvisi da controllare',
|
|
26
|
+
errorsHeading: 'Righe non incluse',
|
|
27
|
+
methodHeading: 'Metodo applicato',
|
|
28
|
+
methodText: 'Lo strumento verifica i campi obbligatori, conserva ogni riga fonte, raggruppa i percorsi di categoria identici e calcola i totali dagli importi normalizzati. La quota di una categoria è il suo importo diviso per il totale quando il totale è positivo. La spesa per persona divide il totale per il primo denominatore di popolazione positivo e coerente. La variazione del periodo è la differenza divisa per il valore assoluto dell importo precedente.',
|
|
29
|
+
limitsHeading: 'Cosa non fa questo strumento',
|
|
30
|
+
limitsText: 'Non dimostra che un bilancio sia completo, comparabile, legale, efficiente, equo, imparziale o classificato correttamente. Non controlla la fonte, non valuta la qualità di una politica, non converte le valute e non stabilisce se una riga sia uno stanziamento, un impegno, un pagamento o una previsione.',
|
|
31
|
+
edgeCasesHeading: 'Casi limite e avvisi sui dati',
|
|
32
|
+
edgeCasesText: 'Valute miste, popolazioni variabili, categorie duplicate, rettifiche negative, righe padre insieme alle figlie, formati numerici locali e importi precedenti pari a zero richiedono una verifica umana. Il browser conserva il numero della riga originale per collegare ogni aggregato al dato inserito.',
|
|
33
|
+
downloadCsv: 'Scarica la tabella verificata',
|
|
34
|
+
printAction: 'Stampa l analisi',
|
|
35
|
+
rowsLabel: 'righe valide',
|
|
36
|
+
categoriesLabel: 'categorie',
|
|
37
|
+
positiveTotalLabel: 'importi positivi visualizzati',
|
|
38
|
+
previousTotalLabel: 'Totale precedente',
|
|
39
|
+
invalidFile: 'Il file non è stato riconosciuto come una tabella CSV o JSON non vuota.',
|
|
40
|
+
fileReadError: 'Il file non può essere letto in questo browser.',
|
|
41
|
+
exampleName: 'Esempio di bilancio comunale',
|
|
42
|
+
noPreviousData: 'Non è stato fornito un importo precedente comparabile.',
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const softwareApplication: SoftwareApplication = {
|
|
46
|
+
'@type': 'SoftwareApplication',
|
|
47
|
+
name: 'Analizzatore di bilancio pubblico',
|
|
48
|
+
applicationCategory: 'EducationalApplication',
|
|
49
|
+
operatingSystem: 'Any',
|
|
50
|
+
description: 'Esamina localmente la spesa pubblica, le quote per categoria, gli importi per persona e le variazioni tra periodi.',
|
|
51
|
+
url: 'https://gamebob.dev/it/analizzatore-bilancio-pubblico-spesa',
|
|
52
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const faqPage: FAQPage = {
|
|
56
|
+
'@type': 'FAQPage',
|
|
57
|
+
mainEntity: [
|
|
58
|
+
{ '@type': 'Question', name: 'Quali colonne servono all analizzatore?', acceptedAnswer: { '@type': 'Answer', text: 'Ogni riga richiede una categoria e un importo numerico. Popolazione, periodo, priorAmount, valuta e categoria padre sono facoltativi.' } },
|
|
59
|
+
{ '@type': 'Question', name: 'Come si calcola la spesa per persona?', acceptedAnswer: { '@type': 'Answer', text: 'L importo totale viene diviso per il primo valore di popolazione positivo e coerente. Denominatori diversi restano visibili e producono un avviso.' } },
|
|
60
|
+
{ '@type': 'Question', name: 'Cosa succede alle categorie duplicate?', acceptedAnswer: { '@type': 'Answer', text: 'Le righe con lo stesso percorso di categoria vengono sommate e i numeri delle righe fonte restano visibili per distinguere una divisione reale da un doppio conteggio.' } },
|
|
61
|
+
{ '@type': 'Question', name: 'Può dimostrare che un bilancio è buono o equo?', acceptedAnswer: { '@type': 'Answer', text: 'No. Descrive i numeri forniti e non stabilisce completezza, legalità, efficienza, equità, classificazione o risultati.' } },
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const howTo: HowTo = {
|
|
66
|
+
'@type': 'HowTo',
|
|
67
|
+
name: 'Analizzare una tabella di bilancio pubblico',
|
|
68
|
+
step: [
|
|
69
|
+
{ '@type': 'HowToStep', name: 'Prepara una tabella', text: 'Crea una tabella CSV o JSON con una categoria e un importo per riga. Mantieni la stessa valuta e base contabile.' },
|
|
70
|
+
{ '@type': 'HowToStep', name: 'Aggiungi il contesto', text: 'Aggiungi popolazione, periodo, priorAmount, valuta o categoria padre solo quando il loro significato è coerente.' },
|
|
71
|
+
{ '@type': 'HowToStep', name: 'Carica il file', text: 'Trascina il file nell analizzatore o carica l esempio per vedere la struttura prevista e la validazione locale.' },
|
|
72
|
+
{ '@type': 'HowToStep', name: 'Leggi il paesaggio', text: 'Usa le barre proporzionali per la composizione e la tabella accessibile per importi, variazioni e righe fonte esatti.' },
|
|
73
|
+
{ '@type': 'HowToStep', name: 'Controlla gli avvisi', text: 'Chiarisci valute miste, percorsi duplicati, rettifiche negative, denominatori nulli e righe padre prima di concludere.' },
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const content: PublicBudgetLocaleContent = {
|
|
78
|
+
slug: 'analizzatore-bilancio-pubblico-spesa',
|
|
79
|
+
title: 'Analizzatore di bilancio pubblico',
|
|
80
|
+
description: 'Esamina localmente una tabella di bilancio pubblico per vedere spesa totale, quote per categoria, spesa per persona, variazioni e righe fonte dietro ogni aggregato.',
|
|
81
|
+
ui,
|
|
82
|
+
seo: [
|
|
83
|
+
{ type: 'title', text: 'Trasforma una tabella di bilancio pubblico in una vista verificabile', level: 2 },
|
|
84
|
+
{ type: 'paragraph', html: 'I file di bilancio pubblico spesso mescolano etichette di categoria, periodi contabili, denominatori della popolazione e rettifiche in una tabella difficile da leggere rapidamente. Questo analizzatore conserva le righe fonte, verifica i campi richiesti e trasforma gli stessi dati normalizzati in totali, proporzioni, spesa per persona e variazioni tra periodi.' },
|
|
85
|
+
{ type: 'paragraph', html: 'Il risultato è descrittivo e non esprime un giudizio politico. Una categoria grande può riflettere una responsabilità prevista dalla legge, un investimento una tantum, un trasferimento o un diverso confine contabile. La vista rende visibili questi schemi così chi esamina la fonte può porre una domanda più precisa.' },
|
|
86
|
+
{ type: 'title', text: 'Cosa significano i calcoli', level: 2 },
|
|
87
|
+
{ type: 'paragraph', html: 'Il totale è la somma degli importi numerici validi, comprese le rettifiche negative. La quota di una categoria è il suo importo raggruppato diviso per il totale quando il totale è positivo. Gli importi positivi ricevono barre proporzionali; gli importi negativi restano nella tabella e vengono segnalati perché una superficie positiva ne cambierebbe il significato.' },
|
|
88
|
+
{ type: 'table', headers: ['Risultato', 'Calcolo', 'Domanda di verifica'], rows: [['Spesa totale', 'Somma degli importi normalizzati', 'Tutte le righe hanno la stessa base contabile?'], ['Quota di categoria', 'Importo della categoria diviso per il totale positivo', 'Le categorie sono esclusive o i padri si sovrappongono alle figlie?'], ['Spesa per persona', 'Totale diviso per un denominatore positivo di popolazione', 'La popolazione descrive lo stesso luogo e periodo?'], ['Variazione', 'Importo attuale meno precedente diviso per il valore assoluto del precedente', 'I periodi sono comparabili e si evita una base pari a zero?']] },
|
|
89
|
+
{ type: 'title', text: 'Preparare dati confrontabili', level: 2 },
|
|
90
|
+
{ type: 'paragraph', html: 'Usa una sola valuta e un significato esplicito dell importo per ogni riga. Uno stanziamento, un impegno, un pagamento e una previsione possono essere numeri validi ma rispondere a domande diverse. Registra questo significato accanto alla fonte perché l analizzatore non lo deduce dal nome della colonna.' },
|
|
91
|
+
{ type: 'list', items: ['Usa una riga per categoria oppure indica una categoria padre per una gerarchia intenzionale.', 'Mantieni coerenti i valori della popolazione e non mescolare residenti, elettori, famiglie o utenti del servizio.', 'Includi priorAmount solo quando il periodo precedente usa le stesse categorie e la stessa base.', 'Controlla i percorsi duplicati e le righe padre per evitare doppi conteggi accidentali.', 'Conserva la tabella verificata con la fonte originale e le ipotesi utilizzate.'] },
|
|
92
|
+
{ type: 'tip', title: 'Una proporzione non è un punteggio di priorità', html: 'La categoria con l importo maggiore non è automaticamente la più importante, sprecona o efficace. Usa la vista per individuare scala e cambiamenti, poi leggi le note della fonte e i risultati del servizio.' },
|
|
93
|
+
{ type: 'title', text: 'Leggere gli avvisi prima di concludere', level: 2 },
|
|
94
|
+
{ type: 'paragraph', html: 'I percorsi duplicati vengono raggruppati affinché l aggregato non sia ridotto senza avviso, ma l elenco delle righe fonte permette di controllare se il raggruppamento è intenzionale. Le valute miste non vengono mai convertite. Una popolazione nulla rimuove il risultato per persona e un importo precedente nullo rimuove la variazione percentuale, perché la divisione per zero non ha un interpretazione utile.' },
|
|
95
|
+
{ type: 'paragraph', html: 'Le categorie annidate richiedono particolare attenzione. Se una tabella contiene sia Istruzione sia Istruzione > Scuole come importi, sommarle può contare due volte la stessa spesa. Lo strumento avvisa dei percorsi annidati, ma solo la metodologia della fonte può stabilire se la riga padre è un subtotale oppure una voce indipendente.' },
|
|
96
|
+
{ type: 'title', text: 'Cosa fare dopo la prima analisi', level: 2 },
|
|
97
|
+
{ type: 'paragraph', html: 'Usa i numeri delle righe per tornare al file ufficiale e documentare ogni correzione o interpretazione. Confronta periodi equivalenti, conserva le rettifiche negative come rettifiche e ripeti l analisi dopo aver rimosso i subtotali quando la fonte conferma che sono già inclusi.' },
|
|
98
|
+
{ type: 'tip', title: 'Mantieni visibile il confine dei dati', html: 'Questa è un analisi descrittiva locale. Non verifica che il file sia completo, non classifica la spesa secondo uno standard ufficiale, non riconcilia le valute e non dimostra un rapporto causale tra spesa e risultati.' },
|
|
99
|
+
],
|
|
100
|
+
faq: [
|
|
101
|
+
{ question: 'Quali colonne servono all analizzatore?', answer: 'Ogni riga richiede categoria e importo numerico. Popolazione, periodo, priorAmount, valuta e categoria padre sono facoltativi.' },
|
|
102
|
+
{ question: 'Come si calcola la spesa per persona?', answer: 'Il totale viene diviso per il primo valore di popolazione positivo e coerente. Denominatori diversi producono un avviso.' },
|
|
103
|
+
{ question: 'Cosa succede alle categorie duplicate?', answer: 'Gli stessi percorsi di categoria vengono sommati e le righe fonte restano visibili per la verifica.' },
|
|
104
|
+
{ question: 'Può dimostrare che un bilancio è buono o equo?', answer: 'No. Descrive i numeri forniti e non può stabilire completezza, legalità, efficienza, equità o risultati.' },
|
|
105
|
+
],
|
|
106
|
+
bibliography,
|
|
107
|
+
howTo: [
|
|
108
|
+
{ name: 'Preparare una tabella', text: 'Crea una tabella CSV o JSON con categoria e importo per riga, usando la stessa valuta e base contabile.' },
|
|
109
|
+
{ name: 'Aggiungere il contesto', text: 'Aggiungi popolazione, periodo, priorAmount, valuta o categoria padre solo quando il significato è coerente.' },
|
|
110
|
+
{ name: 'Caricare il file', text: 'Trascina il file o carica l esempio per vedere la struttura prevista.' },
|
|
111
|
+
{ name: 'Leggere il paesaggio', text: 'Usa le barre proporzionali per la composizione e la tabella per valori, variazioni e righe fonte.' },
|
|
112
|
+
{ name: 'Controllare gli avvisi', text: 'Chiarisci valute miste, duplicati, rettifiche negative, denominatori nulli e righe padre prima di concludere.' },
|
|
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: '予算の 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: '一人あたりの支出',
|
|
20
|
+
variationLabel: '前の期間からの変化',
|
|
21
|
+
topCategoryLabel: '最大のカテゴリ',
|
|
22
|
+
shareLabel: '合計に占める割合',
|
|
23
|
+
sourceLabel: '元データの行',
|
|
24
|
+
noData: '有効な予算行はまだありません。',
|
|
25
|
+
warningsHeading: '確認が必要な警告',
|
|
26
|
+
errorsHeading: '含まれなかった行',
|
|
27
|
+
methodHeading: '適用した方法',
|
|
28
|
+
methodText: '必須項目を検証し、元データの各行を保持し、同じカテゴリパスをまとめ、正規化した金額から合計を計算します。カテゴリの割合は、合計が正の場合にカテゴリ金額を合計で割ったものです。一人あたりの支出は、最初に見つかった一貫した正の人口を分母にします。期間の変化は、現在と前の金額の差を前の金額の絶対値で割ります。',
|
|
29
|
+
limitsHeading: 'このツールで分からないこと',
|
|
30
|
+
limitsText: '予算が完全、比較可能、合法、効率的、公平、中立、正しく分類されていることは証明しません。元資料を監査せず、政策の質を評価せず、通貨を換算せず、行が予算配分、債務、支払い、予測のどれかも判定しません。',
|
|
31
|
+
edgeCasesHeading: '特殊なデータと警告',
|
|
32
|
+
edgeCasesText: '複数の通貨、異なる人口、重複カテゴリ、負の調整、親行と子行の併記、地域ごとの数値形式、前期間の金額がゼロの場合は人による確認が必要です。元の行番号を保持するため、各集計を入力データまで追跡できます。',
|
|
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: '公共支出、カテゴリ割合、一人あたりの金額、期間ごとの変化をローカルで確認します。',
|
|
51
|
+
url: 'https://gamebob.dev/ja/koukyou-yosan-shishutsu-bunseki',
|
|
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: '一人あたりの支出はどう計算しますか', 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: '結論を出す前に、通貨の混在、重複パス、負の調整、ゼロの分母、親行を確認します。' },
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const content: PublicBudgetLocaleContent = {
|
|
78
|
+
slug: 'public-budget-analyzer',
|
|
79
|
+
title: '公共予算分析ツール',
|
|
80
|
+
description: '公共予算テーブルをローカルで確認し、支出合計、カテゴリ割合、一人あたりの支出、変化、各集計の元データ行を表示します。',
|
|
81
|
+
ui,
|
|
82
|
+
seo: [
|
|
83
|
+
{ type: 'title', text: '公共予算テーブルを検証できるビューに変える', level: 2 },
|
|
84
|
+
{ type: 'paragraph', html: '公共予算のファイルには、カテゴリ名、会計期間、人口の分母、調整額が一つの読みづらい表に混在していることがあります。このツールは元データの行を残し、必須項目を確認し、同じ正規化データから合計、割合、一人あたりの支出、期間の変化を作ります。' },
|
|
85
|
+
{ type: 'paragraph', html: '結果は数値の説明であり、政策への評価ではありません。大きなカテゴリは法定の責任、一度だけの投資、移転、異なる会計範囲を表すことがあります。このビューはその違いを見えるようにし、元資料へ戻るための問いを具体的にします。' },
|
|
86
|
+
{ type: 'title', text: '計算結果の意味', level: 2 },
|
|
87
|
+
{ type: 'paragraph', html: '合計は負の調整を含む有効な数値の合算です。合計が正の場合、カテゴリ割合はカテゴリの集計額を合計で割った値です。正の金額は比例バーで表示し、負の金額は表に残します。正の面積で表示すると意味が変わるためです。' },
|
|
88
|
+
{ type: 'table', headers: ['出力', '計算', '確認する質問'], rows: [['支出合計', '正規化した金額の合計', 'すべての行は同じ会計基準ですか'], ['カテゴリ割合', 'カテゴリ金額を正の合計で割る', 'カテゴリは排他的ですか。親と子が重なっていませんか'], ['一人あたりの支出', '合計を正の人口分母で割る', '人口は同じ場所と期間を表していますか'], ['期間の変化', '現在額から前額を引き絶対値の前額で割る', '期間は比較可能で、ゼロの基準を避けていますか']] },
|
|
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: '重複パスは集計を小さく見せないようにまとめますが、元データの行一覧で意図したグループ化か確認できます。通貨は変換しません。人口がゼロなら一人あたりの結果を、前期間の金額がゼロなら変化率を表示しません。ゼロ除算には意味のある解釈がないためです。' },
|
|
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: '一人あたりの支出はどう計算しますか', 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: '結論の前に、通貨の混在、重複、負の調整、ゼロの分母、親行を確認します。' },
|
|
113
|
+
],
|
|
114
|
+
schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[],
|
|
115
|
+
};
|