@jjlmoya/utils-civic 1.6.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.
Files changed (35) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -1
  3. package/src/entries.ts +2 -0
  4. package/src/tests/locale_completeness.test.ts +1 -1
  5. package/src/tests/tool_validation.test.ts +1 -1
  6. package/src/tool/public-budget-analyzer/bibliography.astro +15 -0
  7. package/src/tool/public-budget-analyzer/bibliography.ts +7 -0
  8. package/src/tool/public-budget-analyzer/component.astro +52 -0
  9. package/src/tool/public-budget-analyzer/controller.ts +84 -0
  10. package/src/tool/public-budget-analyzer/dom-views.ts +52 -0
  11. package/src/tool/public-budget-analyzer/entry.ts +27 -0
  12. package/src/tool/public-budget-analyzer/evaluator.ts +15 -0
  13. package/src/tool/public-budget-analyzer/i18n/de.ts +115 -0
  14. package/src/tool/public-budget-analyzer/i18n/en.ts +78 -0
  15. package/src/tool/public-budget-analyzer/i18n/es.ts +115 -0
  16. package/src/tool/public-budget-analyzer/i18n/fr.ts +115 -0
  17. package/src/tool/public-budget-analyzer/i18n/id.ts +115 -0
  18. package/src/tool/public-budget-analyzer/i18n/it.ts +115 -0
  19. package/src/tool/public-budget-analyzer/i18n/ja.ts +115 -0
  20. package/src/tool/public-budget-analyzer/i18n/ko.ts +115 -0
  21. package/src/tool/public-budget-analyzer/i18n/nl.ts +115 -0
  22. package/src/tool/public-budget-analyzer/i18n/pl.ts +115 -0
  23. package/src/tool/public-budget-analyzer/i18n/pt.ts +115 -0
  24. package/src/tool/public-budget-analyzer/i18n/ru.ts +115 -0
  25. package/src/tool/public-budget-analyzer/i18n/sv.ts +115 -0
  26. package/src/tool/public-budget-analyzer/i18n/tr.ts +115 -0
  27. package/src/tool/public-budget-analyzer/i18n/zh.ts +115 -0
  28. package/src/tool/public-budget-analyzer/index.ts +11 -0
  29. package/src/tool/public-budget-analyzer/logic.test.ts +81 -0
  30. package/src/tool/public-budget-analyzer/logic.ts +249 -0
  31. package/src/tool/public-budget-analyzer/public-budget-analyzer.css +461 -0
  32. package/src/tool/public-budget-analyzer/seo.astro +15 -0
  33. package/src/tool/public-budget-analyzer/storage.ts +28 -0
  34. package/src/tool/public-budget-analyzer/ui.ts +78 -0
  35. package/src/tools.ts +2 -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: '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
+ };
@@ -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/ru/analiz-publichnogo-byudzheta-raskhody',
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: 'analiz-publichnogo-byudzheta-raskhody',
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
+ };
@@ -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: 'Släpp en CSV eller JSON budgetfil här',
8
+ uploadHelp: 'Obligatoriska fält: kategori och belopp. Valfria fält: befolkning, period, priorAmount, valuta och överordnad kategori.',
9
+ loadExample: 'Ladda exempelbudget',
10
+ supportedFormat: 'CSV eller JSON, behandlas bara i den här webbläsaren',
11
+ tableHeading: 'Källrader och kategorisummor',
12
+ categoryLabel: 'Kategori',
13
+ amountLabel: 'Belopp',
14
+ populationLabel: 'Befolkning',
15
+ sourceRowsLabel: 'Källrader',
16
+ analyzeEmpty: 'Välj en fil eller ladda exemplet för att granska en budget.',
17
+ resultHeading: 'Budgetlandskap',
18
+ totalLabel: 'Totala utgifter',
19
+ perCapitaLabel: 'Utgifter per person',
20
+ variationLabel: 'Förändring från föregående period',
21
+ topCategoryLabel: 'Största kategori',
22
+ shareLabel: 'Andel av totalen',
23
+ sourceLabel: 'Källrader',
24
+ noData: 'Det finns ännu inga giltiga budgetrader.',
25
+ warningsHeading: 'Varningar att granska',
26
+ errorsHeading: 'Rader som inte togs med',
27
+ methodHeading: 'Använd metod',
28
+ methodText: 'Verktyget validerar obligatoriska fält, behåller varje källrad, grupperar identiska kategorisökvägar och räknar summor från normaliserade belopp. En kategoris andel är beloppet delat med totalen när totalen är positiv. Utgifter per person delar totalen med det första konsekventa positiva befolkningstalet. Periodförändringen är skillnaden delad med det föregående beloppets absoluta värde.',
29
+ limitsHeading: 'Vad verktyget inte gör',
30
+ limitsText: 'Det bevisar inte att en budget är fullständig, jämförbar, laglig, effektiv, rättvis, opartisk eller korrekt klassificerad. Det granskar inte källan, bedömer inte politik, växlar inte valutor och avgör inte om en rad är ett anslag, åtagande, en betalning eller en prognos.',
31
+ edgeCasesHeading: 'Specialfall och datavarningar',
32
+ edgeCasesText: 'Blandade valutor, skiftande befolkningstal, dubbla kategorier, negativa justeringar, överordnade rader bredvid underordnade rader, lokala talformat och föregående belopp på noll kräver mänsklig kontroll. Webbläsaren sparar det ursprungliga radnumret så att varje aggregat kan spåras till indata.',
33
+ downloadCsv: 'Ladda ner granskad tabell',
34
+ printAction: 'Skriv ut analys',
35
+ rowsLabel: 'giltiga rader',
36
+ categoriesLabel: 'kategorier',
37
+ positiveTotalLabel: 'visualiserade positiva belopp',
38
+ previousTotalLabel: 'Föregående total',
39
+ invalidFile: 'Filen kunde inte tolkas som en icke tom CSV eller JSON tabell.',
40
+ fileReadError: 'Filen kunde inte läsas i den här webbläsaren.',
41
+ exampleName: 'Exempel på kommunal budget',
42
+ noPreviousData: 'Inget jämförbart belopp från föregående period angavs.',
43
+ };
44
+
45
+ const softwareApplication: SoftwareApplication = {
46
+ '@type': 'SoftwareApplication',
47
+ name: 'Analys av offentlig budget',
48
+ applicationCategory: 'EducationalApplication',
49
+ operatingSystem: 'Any',
50
+ description: 'Granska offentliga utgifter, kategoriandelar, belopp per person och förändringar mellan perioder lokalt.',
51
+ url: 'https://gamebob.dev/sv/analys-offentlig-budget-utgifter',
52
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
53
+ };
54
+
55
+ const faqPage: FAQPage = {
56
+ '@type': 'FAQPage',
57
+ mainEntity: [
58
+ { '@type': 'Question', name: 'Vilka kolumner behöver analysverktyget?', acceptedAnswer: { '@type': 'Answer', text: 'Varje rad behöver en kategori och ett numeriskt belopp. Befolkning, period, priorAmount, valuta och överordnad kategori är valfria.' } },
59
+ { '@type': 'Question', name: 'Hur beräknas utgifter per person?', acceptedAnswer: { '@type': 'Answer', text: 'Totalbeloppet delas med det första konsekventa positiva befolkningstalet. Olika nämnare visas och ger en varning.' } },
60
+ { '@type': 'Question', name: 'Vad händer med dubbla kategorier?', acceptedAnswer: { '@type': 'Answer', text: 'Rader med samma kategorisökväg summeras och deras källradnummer visas så att verklig uppdelning kan skiljas från dubbelräkning.' } },
61
+ { '@type': 'Question', name: 'Kan detta bevisa att en budget är bra eller rättvis?', acceptedAnswer: { '@type': 'Answer', text: 'Nej. Verktyget beskriver de angivna siffrorna och fastställer inte fullständighet, laglighet, effektivitet, rättvisa, klassificering eller resultat.' } },
62
+ ],
63
+ };
64
+
65
+ const howTo: HowTo = {
66
+ '@type': 'HowTo',
67
+ name: 'Analysera en offentlig budgettabell',
68
+ step: [
69
+ { '@type': 'HowToStep', name: 'Förbered en tabell', text: 'Skapa en CSV eller JSON tabell med en kategori och ett belopp per rad. Använd samma valuta och redovisningsgrund.' },
70
+ { '@type': 'HowToStep', name: 'Lägg till sammanhang', text: 'Lägg bara till befolkning, period, priorAmount, valuta eller överordnad kategori när betydelsen är konsekvent.' },
71
+ { '@type': 'HowToStep', name: 'Ladda filen', text: 'Släpp filen i analysverktyget eller ladda exemplet för att se förväntad struktur och lokal validering.' },
72
+ { '@type': 'HowToStep', name: 'Läs landskapet', text: 'Använd proportionella staplar för sammansättningen och den tillgängliga tabellen för exakta belopp, ändringar och källrader.' },
73
+ { '@type': 'HowToStep', name: 'Granska varningar', text: 'Klargör blandade valutor, dubbla sökvägar, negativa justeringar, nollnämnare och överordnade rader innan du drar slutsatser.' },
74
+ ],
75
+ };
76
+
77
+ export const content: PublicBudgetLocaleContent = {
78
+ slug: 'analys-offentlig-budget-utgifter',
79
+ title: 'Analys av offentlig budget',
80
+ description: 'Granska en offentlig budgettabell lokalt för att se totala utgifter, kategoriandelar, utgifter per person, förändringar och källraderna bakom varje aggregat.',
81
+ ui,
82
+ seo: [
83
+ { type: 'title', text: 'Gör en offentlig budgettabell till en granskningsbar vy', level: 2 },
84
+ { type: 'paragraph', html: 'Offentliga budgetfiler blandar ofta kategorietiketter, redovisningsperioder, befolkningsnämnare och justeringar i en tabell som är svår att läsa snabbt. Det här verktyget behåller källraderna, kontrollerar de obligatoriska fälten och omvandlar samma normaliserade data till totaler, proportioner, utgifter per person och förändringar mellan perioder.' },
85
+ { type: 'paragraph', html: 'Resultatet är beskrivande och inte ett politiskt omdöme. En stor kategori kan spegla ett lagstadgat ansvar, en engångsinvestering, en överföring eller en annan redovisningsgräns. Vyn synliggör dessa mönster så att källdokumentet kan granskas med en bättre fråga.' },
86
+ { type: 'title', text: 'Vad beräkningarna betyder', level: 2 },
87
+ { type: 'paragraph', html: 'Totalen är summan av alla giltiga numeriska belopp, inklusive negativa justeringar. En kategoriandel är dess grupperade belopp delat med totalen när totalen är positiv. Positiva belopp får proportionella staplar; negativa belopp ligger kvar i tabellen eftersom en positiv yta skulle ändra betydelsen.' },
88
+ { type: 'table', headers: ['Resultat', 'Beräkning', 'Kontrollfråga'], rows: [['Totala utgifter', 'Summa av normaliserade belopp', 'Använder alla rader samma redovisningsgrund?'], ['Kategoriandel', 'Kategoribelopp delat med positiv total', 'Är kategorierna ömsesidigt uteslutande eller överlappar föräldrar och barn?'], ['Utgifter per person', 'Total delad med positiv befolkningsnämnare', 'Beskriver befolkningen samma plats och period?'], ['Periodförändring', 'Aktuellt belopp minus föregående delat med föregående belopps absoluta värde', 'Är perioderna jämförbara och undviks en nollbas?']] },
89
+ { type: 'title', text: 'Förbered jämförbara data', level: 2 },
90
+ { type: 'paragraph', html: 'Använd en valuta och en tydlig betydelse för beloppet i varje rad. Ett anslag, ett åtagande, en betalning och en prognos kan alla vara giltiga siffror men besvara olika frågor. Anteckna betydelsen vid källan eftersom analysverktyget inte kan härleda den från kolumnnamnet.' },
91
+ { type: 'list', items: ['Använd en rad per kategori eller ange en överordnad kategori för en avsiktlig hierarki.', 'Håll befolkningstalen konsekventa och blanda inte invånare, röstberättigade, hushåll eller tjänsteanvändare.', 'Ta med priorAmount bara när föregående period använder samma kategorier och grund.', 'Kontrollera dubbla kategorisökvägar och överordnade rader för oavsiktlig dubbelräkning.', 'Spara den granskade tabellen med originalkällan och de antaganden som användes.'] },
92
+ { type: 'tip', title: 'En andel är inte ett prioriteringsvärde', html: 'Kategorin med störst belopp är inte automatiskt viktigast, mest slösaktig eller mest framgångsrik. Använd vyn för skala och förändring och läs sedan källans noter och tjänstens resultat.' },
93
+ { type: 'title', text: 'Läs varningar innan du drar slutsatser', level: 2 },
94
+ { type: 'paragraph', html: 'Dubbla sökvägar grupperas så att aggregatet inte tyst underskattas, men listan över källrader visar om grupperingen var avsiktlig. Blandade valutor räknas aldrig om. En befolkning på noll tar bort resultatet per person och ett föregående belopp på noll tar bort förändringsprocenten eftersom division med noll saknar meningsfull tolkning.' },
95
+ { type: 'paragraph', html: 'Kapslade kategorier kräver särskild försiktighet. Om en tabell innehåller både Utbildning och Utbildning > Skolor som belopp kan en addition räkna samma utgift två gånger. Verktyget varnar för kapslade sökvägar, men bara källans metod kan visa om föräldraraden är en delsumma eller en fristående post.' },
96
+ { type: 'title', text: 'Gör så efter den första analysen', level: 2 },
97
+ { type: 'paragraph', html: 'Använd radnumren för att gå tillbaka till den officiella filen och dokumentera varje korrigering eller tolkning. Jämför likvärdiga perioder, behåll negativa justeringar som justeringar och kör analysen igen efter att ha tagit bort delsummerader när källan bekräftar att de redan ingår.' },
98
+ { type: 'tip', title: 'Håll datagränsen synlig', html: 'Detta är en lokal beskrivande analys. Den verifierar inte att filen är komplett, klassificerar inte utgifter enligt en officiell standard, stämmer inte av valutor och bevisar inte ett orsakssamband mellan utgifter och resultat.' },
99
+ ],
100
+ faq: [
101
+ { question: 'Vilka kolumner behöver analysverktyget?', answer: 'Varje rad behöver kategori och numeriskt belopp. Befolkning, period, priorAmount, valuta och överordnad kategori är valfria.' },
102
+ { question: 'Hur beräknas utgifter per person?', answer: 'Totalen delas med det första konsekventa positiva befolkningstalet. Olika nämnare ger en varning.' },
103
+ { question: 'Vad händer med dubbla kategorier?', answer: 'Samma kategorisökvägar summeras och deras källrader visas för granskning.' },
104
+ { question: 'Kan detta bevisa att en budget är bra eller rättvis?', answer: 'Nej. Det beskriver angivna siffror och kan inte fastställa fullständighet, laglighet, effektivitet, rättvisa eller resultat.' },
105
+ ],
106
+ bibliography,
107
+ howTo: [
108
+ { name: 'Förbered en tabell', text: 'Skapa en CSV eller JSON tabell med kategori och belopp per rad, i samma valuta och redovisningsgrund.' },
109
+ { name: 'Lägg till sammanhang', text: 'Lägg till befolkning, period, priorAmount, valuta eller överordnad kategori bara när betydelsen är konsekvent.' },
110
+ { name: 'Ladda filen', text: 'Släpp filen eller ladda exemplet för att se den förväntade strukturen.' },
111
+ { name: 'Läs landskapet', text: 'Använd proportionella staplar för sammansättning och tabellen för värden, ändringar och källrader.' },
112
+ { name: 'Granska varningar', text: 'Klargör blandade valutor, dubbletter, negativa justeringar, nollnämnare och överordnade rader innan du drar slutsatser.' },
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: 'Bir bütçe CSV veya JSON dosyasını buraya bırakın',
8
+ uploadHelp: 'Gerekli alanlar: kategori ve tutar. İsteğe bağlı: nüfus, dönem, priorAmount, para birimi ve üst kategori.',
9
+ loadExample: 'Örnek bütçeyi yükle',
10
+ supportedFormat: 'CSV veya JSON, yalnızca bu tarayıcıda işlenir',
11
+ tableHeading: 'Kaynak satırları ve kategori toplamları',
12
+ categoryLabel: 'Kategori',
13
+ amountLabel: 'Tutar',
14
+ populationLabel: 'Nüfus',
15
+ sourceRowsLabel: 'Kaynak satırları',
16
+ analyzeEmpty: 'Bir bütçeyi incelemek için dosya seçin veya örneği yükleyin.',
17
+ resultHeading: 'Bütçe manzarası',
18
+ totalLabel: 'Toplam harcama',
19
+ perCapitaLabel: 'Kişi başına harcama',
20
+ variationLabel: 'Önceki döneme göre değişim',
21
+ topCategoryLabel: 'En büyük kategori',
22
+ shareLabel: 'Toplam içindeki pay',
23
+ sourceLabel: 'Kaynak satırları',
24
+ noData: 'Henüz geçerli bütçe satırı bulunmuyor.',
25
+ warningsHeading: 'İncelenecek uyarılar',
26
+ errorsHeading: 'Dahil edilmeyen satırlar',
27
+ methodHeading: 'Uygulanan yöntem',
28
+ methodText: 'Araç gerekli alanları doğrular, her kaynak satırını korur, aynı kategori yollarını gruplar ve toplamları normalleştirilmiş tutarlardan hesaplar. Kategori payı, toplam pozitif olduğunda kategori tutarının toplama bölünmesidir. Kişi başına harcama, toplamı ilk tutarlı pozitif nüfus paydasına böler. Dönem değişimi, farkın önceki tutarın mutlak değerine bölünmesiyle bulunur.',
29
+ limitsHeading: 'Bu araç ne yapmaz',
30
+ limitsText: 'Bir bütçenin eksiksiz, karşılaştırılabilir, yasal, verimli, adil, tarafsız veya doğru sınıflandırılmış olduğunu kanıtlamaz. Kaynağı denetlemez, politika kalitesini değerlendirmez, para birimlerini dönüştürmez ve bir satırın ödenek, yükümlülük, ödeme veya tahmin olup olmadığını belirlemez.',
31
+ edgeCasesHeading: 'Sınır durumları ve veri uyarıları',
32
+ edgeCasesText: 'Karışık para birimleri, değişen nüfuslar, yinelenen kategoriler, negatif düzeltmeler, alt satırlarla birlikte üst satırlar, yerel sayı biçimleri ve sıfır önceki tutarlar insan incelemesi gerektirir. Tarayıcı, her toplamın girdiye kadar izlenebilmesi için özgün satır numarasını korur.',
33
+ downloadCsv: 'İncelenen tabloyu indir',
34
+ printAction: 'Analizi yazdır',
35
+ rowsLabel: 'geçerli satır',
36
+ categoriesLabel: 'kategori',
37
+ positiveTotalLabel: 'görselleştirilen pozitif tutarlar',
38
+ previousTotalLabel: 'Önceki toplam',
39
+ invalidFile: 'Dosya boş olmayan bir CSV veya JSON tablosu olarak okunamadı.',
40
+ fileReadError: 'Dosya bu tarayıcıda okunamadı.',
41
+ exampleName: 'Belediye bütçesi örneği',
42
+ noPreviousData: 'Karşılaştırılabilir bir önceki dönem tutarı verilmedi.',
43
+ };
44
+
45
+ const softwareApplication: SoftwareApplication = {
46
+ '@type': 'SoftwareApplication',
47
+ name: 'Kamu bütçesi analiz aracı',
48
+ applicationCategory: 'EducationalApplication',
49
+ operatingSystem: 'Any',
50
+ description: 'Kamu harcamalarını, kategori paylarını, kişi başına tutarları ve dönem değişikliklerini yerel olarak inceleyin.',
51
+ url: 'https://gamebob.dev/tr/kamu-butcesi-harcama-analizi',
52
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
53
+ };
54
+
55
+ const faqPage: FAQPage = {
56
+ '@type': 'FAQPage',
57
+ mainEntity: [
58
+ { '@type': 'Question', name: 'Analiz için hangi sütunlar gerekir?', acceptedAnswer: { '@type': 'Answer', text: 'Her satırda kategori ve sayısal tutar bulunmalıdır. Nüfus, dönem, priorAmount, para birimi ve üst kategori isteğe bağlıdır.' } },
59
+ { '@type': 'Question', name: 'Kişi başına harcama nasıl hesaplanır?', acceptedAnswer: { '@type': 'Answer', text: 'Toplam tutar, bulunan ilk tutarlı pozitif nüfus değerine bölünür. Farklı paydalar korunur ve uyarı oluşturur.' } },
60
+ { '@type': 'Question', name: 'Yinelenen kategorilere ne olur?', acceptedAnswer: { '@type': 'Answer', text: 'Aynı kategori yoluna sahip satırlar toplanır ve kaynak satır numaraları görünür kalır. Böylece gerçek bir bölünme ile iki kez sayma ayrılabilir.' } },
61
+ { '@type': 'Question', name: 'Bu araç bütçenin iyi veya adil olduğunu kanıtlar mı?', acceptedAnswer: { '@type': 'Answer', text: 'Hayır. Verilen sayıları betimler; bütünlük, yasallık, verimlilik, adalet, sınıflandırma veya sonuçları belirlemez.' } },
62
+ ],
63
+ };
64
+
65
+ const howTo: HowTo = {
66
+ '@type': 'HowTo',
67
+ name: 'Kamu bütçesi tablosunu analiz etme',
68
+ step: [
69
+ { '@type': 'HowToStep', name: 'Tabloyu hazırlayın', text: 'Her satırda bir kategori ve tutar bulunan CSV veya JSON tablosu oluşturun. Para birimini ve muhasebe temelini aynı tutun.' },
70
+ { '@type': 'HowToStep', name: 'Bağlam ekleyin', text: 'Nüfus, dönem, priorAmount, para birimi veya üst kategoriyi yalnızca anlamları tutarlıysa ekleyin.' },
71
+ { '@type': 'HowToStep', name: 'Dosyayı yükleyin', text: 'Beklenen yapıyı ve yerel doğrulama sonucunu görmek için dosyayı araca bırakın veya örneği yükleyin.' },
72
+ { '@type': 'HowToStep', name: 'Manzarayı okuyun', text: 'Bütçe bileşimi için orantılı çubukları, kesin tutarlar, değişimler ve kaynak satırları için erişilebilir tabloyu kullanın.' },
73
+ { '@type': 'HowToStep', name: 'Uyarıları inceleyin', text: 'Sonuç çıkarmadan önce karışık para birimlerini, yinelenen yolları, negatif düzeltmeleri, sıfır paydaları ve üst satırları açıklığa kavuşturun.' },
74
+ ],
75
+ };
76
+
77
+ export const content: PublicBudgetLocaleContent = {
78
+ slug: 'kamu-butcesi-harcama-analizi',
79
+ title: 'Kamu bütçesi analiz aracı',
80
+ description: 'Toplam harcamayı, kategori paylarını, kişi başına harcamayı, değişimleri ve her toplamın kaynak satırlarını görmek için kamu bütçesi tablosunu yerel olarak inceleyin.',
81
+ ui,
82
+ seo: [
83
+ { type: 'title', text: 'Kamu bütçesi tablosunu denetlenebilir bir görünüme dönüştürün', level: 2 },
84
+ { type: 'paragraph', html: 'Kamu bütçesi dosyaları kategori etiketlerini, muhasebe dönemlerini, nüfus paydalarını ve düzeltmeleri çoğu zaman hızlı okunamayan tek bir tabloda birleştirir. Bu araç kaynak satırlarını korur, gerekli alanları doğrular ve aynı normalleştirilmiş verilerden toplamları, oranları, kişi başına harcamayı ve dönem değişimlerini üretir.' },
85
+ { type: 'paragraph', html: 'Sonuç betimleyicidir ve siyasi bir hüküm değildir. Büyük bir kategori yasal bir sorumluluğu, tek seferlik yatırımı, transferi veya farklı bir muhasebe sınırını yansıtabilir. Görünüm bu kalıpları açığa çıkarır ve kaynağın daha iyi bir soruyla incelenmesini sağlar.' },
86
+ { type: 'title', text: 'Hesaplamalar ne anlama gelir', level: 2 },
87
+ { type: 'paragraph', html: 'Toplam, negatif düzeltmeler dahil geçerli sayısal tutarların toplamıdır. Kategori payı, toplam pozitif olduğunda gruplanmış kategori tutarının toplama bölünmesidir. Pozitif tutarlar orantılı çubuklarla gösterilir; negatif tutarlar tabloda kalır, çünkü pozitif alan kullanmak anlamlarını değiştirir.' },
88
+ { type: 'table', headers: ['Çıktı', 'Hesaplama', 'Kontrol sorusu'], rows: [['Toplam harcama', 'Normalleştirilmiş tutarların toplamı', 'Tüm satırlar aynı muhasebe temelini mi kullanıyor?'], ['Kategori payı', 'Kategori tutarının pozitif toplama bölümü', 'Kategoriler birbirini dışlıyor mu, yoksa üst ve alt kategoriler örtüşüyor mu?'], ['Kişi başına harcama', 'Toplamın pozitif nüfus paydasına bölümü', 'Nüfus aynı yeri ve dönemi mi anlatıyor?'], ['Dönem değişimi', 'Güncel tutar eksi önceki tutarın mutlak önceki değere bölümü', 'Dönemler karşılaştırılabilir mi ve sıfır tabandan kaçınılıyor mu?']] },
89
+ { type: 'title', text: 'Karşılaştırılabilir verileri hazırlayın', level: 2 },
90
+ { type: 'paragraph', html: 'Her satır için tek bir para birimi ve tutarın açık bir anlamını kullanın. Ödenek, yükümlülük, ödeme ve tahmin geçerli sayılar olabilir, ancak farklı sorulara yanıt verir. Bu anlamı kaynağın yanında kaydedin; analiz aracı bunu sütun adından çıkaramaz.' },
91
+ { type: 'list', items: ['Her kategori için bir satır kullanın veya bilinçli bir hiyerarşi için üst kategori belirtin.', 'Nüfus değerlerini tutarlı tutun; sakinleri, seçmenleri, haneleri veya hizmet kullanıcılarını karıştırmayın.', 'priorAmount alanını yalnızca önceki dönem aynı kategorileri ve temeli kullanıyorsa ekleyin.', 'Kazara iki kez saymayı önlemek için yinelenen kategori yollarını ve üst satırları kontrol edin.', 'İncelenen tabloyu özgün kaynak ve kullanılan varsayımlarla birlikte saklayın.'] },
92
+ { type: 'tip', title: 'Oran bir öncelik puanı değildir', html: 'En yüksek tutarlı kategori otomatik olarak en önemli, en israfçı veya en başarılı kategori değildir. Ölçeği ve değişimleri bulmak için görünümü kullanın, sonra kaynak notlarını ve hizmet sonuçlarını okuyun.' },
93
+ { type: 'title', text: 'Sonuç çıkarmadan önce uyarıları okuyun', level: 2 },
94
+ { type: 'paragraph', html: 'Yinelenen yollar, toplamın sessizce düşük kalmaması için gruplanır; ancak kaynak satırı listesi bu gruplamanın bilinçli olup olmadığını gösterir. Karışık para birimleri hiçbir zaman dönüştürülmez. Sıfır nüfus kişi başına sonucu, sıfır önceki tutar ise değişim yüzdesini kaldırır, çünkü sıfıra bölmenin anlamlı bir yorumu yoktur.' },
95
+ { type: 'paragraph', html: 'İç içe kategoriler özel dikkat ister. Bir tabloda hem Eğitim hem de Eğitim > Okullar tutar olarak bulunuyorsa, bunları toplamak aynı harcamayı iki kez sayabilir. Araç iç içe yolları bildirir, ancak üst satırın ara toplam mı yoksa bağımsız bir kalem mi olduğunu yalnızca kaynak yöntemi açıklayabilir.' },
96
+ { type: 'title', text: 'İlk incelemeden sonra ne yapmalı', level: 2 },
97
+ { type: 'paragraph', html: 'Her düzeltmeyi veya yorumu belgelemek için satır numaralarıyla resmî dosyaya dönün. Benzer dönemleri karşılaştırın, negatif düzeltmeleri düzeltme olarak koruyun ve kaynak bunların zaten dahil olduğunu doğruladığında ara toplamları kaldırıp analizi yeniden çalıştırın.' },
98
+ { type: 'tip', title: 'Veri sınırını görünür tutun', html: 'Bu yerel ve betimleyici bir analizdir. Dosyanın eksiksiz olduğunu doğrulamaz, harcamayı resmî bir standarda göre sınıflandırmaz, para birimlerini uzlaştırmaz ve harcama ile sonuçlar arasında nedensel bağ kanıtlamaz.' },
99
+ ],
100
+ faq: [
101
+ { question: 'Analiz için hangi sütunlar gerekir?', answer: 'Her satırda kategori ve sayısal tutar bulunmalıdır. Nüfus, dönem, priorAmount, para birimi ve üst kategori isteğe bağlıdır.' },
102
+ { question: 'Kişi başına harcama nasıl hesaplanır?', answer: 'Toplam, ilk tutarlı pozitif nüfus değerine bölünür. Farklı paydalar uyarı oluşturur.' },
103
+ { question: 'Yinelenen kategorilere ne olur?', answer: 'Aynı kategori yolları toplanır ve kaynak satırları inceleme için görünür kalır.' },
104
+ { question: 'Bu araç bütçenin iyi veya adil olduğunu kanıtlar mı?', answer: 'Hayır. Verilen sayıları betimler ve bütünlük, yasallık, verimlilik, adalet veya sonuçları belirleyemez.' },
105
+ ],
106
+ bibliography,
107
+ howTo: [
108
+ { name: 'Tabloyu hazırlayın', text: 'Aynı para birimi ve muhasebe temeliyle, her satırda kategori ve tutar bulunan CSV veya JSON tablosu oluşturun.' },
109
+ { name: 'Bağlam ekleyin', text: 'Nüfus, dönem, priorAmount, para birimi veya üst kategoriyi yalnızca anlamları tutarlıysa ekleyin.' },
110
+ { name: 'Dosyayı yükleyin', text: 'Beklenen yapıyı görmek için dosyayı bırakın veya örneği yükleyin.' },
111
+ { name: 'Manzarayı okuyun', text: 'Bileşim için orantılı çubukları, değerler, değişimler ve kaynak satırları için tabloyu kullanın.' },
112
+ { name: 'Uyarıları inceleyin', text: 'Sonuç çıkarmadan önce karışık para birimlerini, tekrarları, negatif düzeltmeleri, sıfır paydaları ve üst satırları açıklayın.' },
113
+ ],
114
+ schemas: [softwareApplication, faqPage, howTo] as unknown as Record<string, unknown>[],
115
+ };