@jjlmoya/utils-forensic-science 1.12.0 → 1.14.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 +2 -1
- package/src/category/index.ts +63 -59
- package/src/category/seo.astro +1 -1
- package/src/components/PreviewNavSidebar.astro +1 -1
- package/src/components/PreviewToolbar.astro +1 -1
- package/src/data.ts +1 -1
- package/src/entries.ts +74 -68
- package/src/env.d.ts +1 -1
- package/src/index.ts +33 -31
- package/src/pages/[locale]/[slug].astro +161 -159
- package/src/pages/[locale].astro +8 -5
- package/src/pages/index.astro +1 -1
- package/src/tests/bibliography_wellformed_export.test.ts +46 -0
- package/src/tests/diacritics_density.test.ts +1 -1
- package/src/tests/faq_count.test.ts +19 -19
- package/src/tests/i18n_coverage.test.ts +36 -36
- package/src/tests/inverted_punctuation.test.ts +1 -1
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/mocks/astro_mock.js +1 -1
- package/src/tests/no_h1_in_components.test.ts +1 -1
- package/src/tests/script_density.test.ts +94 -94
- package/src/tests/seo_length.test.ts +46 -46
- package/src/tests/seo_parity.test.ts +2 -7
- package/src/tests/seo_translation_completeness.test.ts +68 -0
- package/src/tests/seo_wellformed_export.test.ts +65 -0
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tests/translation_copy.test.ts +23 -24
- package/src/tool/bloodstain-pattern-origin-analyzer/component.astro +9 -9
- package/src/tool/bloodstain-pattern-origin-analyzer/i18n/zh.ts +1 -1
- package/src/tool/dna-profile-match-probability-lab/bibliography.astro +14 -0
- package/src/tool/dna-profile-match-probability-lab/bibliography.ts +16 -0
- package/src/tool/dna-profile-match-probability-lab/component.astro +121 -0
- package/src/tool/dna-profile-match-probability-lab/controller.ts +159 -0
- package/src/tool/dna-profile-match-probability-lab/dna-profile-match-probability-lab.css +485 -0
- package/src/tool/dna-profile-match-probability-lab/dom-views.ts +93 -0
- package/src/tool/dna-profile-match-probability-lab/entry.ts +29 -0
- package/src/tool/dna-profile-match-probability-lab/evaluator.ts +19 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/de.ts +43 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/en.ts +196 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/es.ts +40 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/fr.ts +10 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/id.ts +41 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/it.ts +10 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/ja.ts +40 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/ko.ts +40 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/nl.ts +29 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/pl.ts +10 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/pt.ts +41 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/ru.ts +29 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/sv.ts +41 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/tr.ts +10 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/zh.ts +29 -0
- package/src/tool/dna-profile-match-probability-lab/index.ts +11 -0
- package/src/tool/dna-profile-match-probability-lab/localize.ts +107 -0
- package/src/tool/dna-profile-match-probability-lab/logic.test.ts +56 -0
- package/src/tool/dna-profile-match-probability-lab/logic.ts +139 -0
- package/src/tool/dna-profile-match-probability-lab/seo.astro +15 -0
- package/src/tool/dna-profile-match-probability-lab/storage.ts +26 -0
- package/src/tool/dna-profile-match-probability-lab/ui.ts +3 -0
- package/src/tool/fire-pattern-origin-analyzer/component.astro +1 -1
- package/src/tool/fire-pattern-origin-analyzer/i18n/zh.ts +5 -1
- package/src/tool/fire-pattern-origin-analyzer/logic.ts +9 -2
- package/src/tool/fire-pattern-origin-analyzer/view-bindings.ts +8 -4
- package/src/tool/fire-pattern-origin-analyzer/view-model.ts +6 -2
- package/src/tool/forensic-age-estimator/bibliography.astro +1 -1
- package/src/tool/forensic-age-estimator/component.astro +1 -1
- package/src/tool/forensic-age-estimator/entry.ts +17 -17
- package/src/tool/forensic-age-estimator/i18n/de.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/en.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/es.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/fr.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/id.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/it.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/nl.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/pl.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/pt.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/ru.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/sv.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/tr.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/zh.ts +245 -245
- package/src/tool/forensic-age-estimator/index.ts +1 -1
- package/src/tool/forensic-age-estimator/seo.astro +1 -1
- package/src/tool/forensic-blood-test-simulator/component.astro +1 -1
- package/src/tool/forensic-fiber-comparison-microscope/component.astro +1 -1
- package/src/tool/forensic-fiber-comparison-microscope/render.ts +1 -1
- package/src/tool/forensic-fiber-comparison-microscope/view.ts +1 -1
- package/src/tool/forensic-fingerprint-minutiae-identifier/component.astro +2 -2
- package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/ja.ts +2 -1
- package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/zh.ts +2 -0
- package/src/tool/forensic-fingerprint-minutiae-identifier/renderer.ts +9 -8
- package/src/tool/forensic-glass-becke-line-simulator/component.astro +1 -1
- package/src/tool/forensic-glass-becke-line-simulator/view.ts +8 -6
- package/src/tool/forensic-image-authenticity-analyzer/component.astro +1 -1
- package/src/tool/forensic-image-authenticity-analyzer/i18n/de.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/en.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/es.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/fr.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/id.ts +95 -90
- package/src/tool/forensic-image-authenticity-analyzer/i18n/it.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/ja.ts +7 -2
- package/src/tool/forensic-image-authenticity-analyzer/i18n/ko.ts +4 -1
- package/src/tool/forensic-image-authenticity-analyzer/i18n/nl.ts +95 -92
- package/src/tool/forensic-image-authenticity-analyzer/i18n/pl.ts +95 -92
- package/src/tool/forensic-image-authenticity-analyzer/i18n/pt.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/ru.ts +97 -92
- package/src/tool/forensic-image-authenticity-analyzer/i18n/sv.ts +97 -93
- package/src/tool/forensic-image-authenticity-analyzer/i18n/tr.ts +98 -93
- package/src/tool/forensic-image-authenticity-analyzer/i18n/zh.ts +11 -0
- package/src/tool/forensic-microcrystal-drug-simulator/component.astro +1 -1
- package/src/tool/forensic-sex-determinator/component.astro +3 -2
- package/src/tool/forensic-stature-estimator/component.astro +1 -1
- package/src/tool/forensic-stature-estimator/i18n/id.ts +4 -0
- package/src/tool/forensic-stature-estimator/i18n/nl.ts +4 -0
- package/src/tool/forensic-stature-estimator/i18n/ru.ts +4 -0
- package/src/tool/forensic-tlc-ink-simulator/component.astro +1 -1
- package/src/tool/forensic-tlc-ink-simulator/i18n/zh.ts +1 -0
- package/src/tool/forensic-toolmark-striation-matcher/component.astro +1 -1
- package/src/tool/forensic-toolmark-striation-matcher/logic.ts +1 -1
- package/src/tool/forensic-toolmark-striation-matcher/renderer.ts +7 -6
- package/src/tool/forensic-toolmark-striation-matcher/view.ts +19 -20
- package/src/tool/gsr-dispersion-calculator/component.astro +1 -1
- package/src/tool/gsr-dispersion-calculator/logic.ts +1 -1
- package/src/tool/time-of-death-algor-mortis-calculator/entry.ts +2 -0
- package/src/tool/voice-spectrogram-analyzer/audio-runtime.ts +75 -0
- package/src/tool/voice-spectrogram-analyzer/bibliography.astro +14 -0
- package/src/tool/voice-spectrogram-analyzer/bibliography.ts +16 -0
- package/src/tool/voice-spectrogram-analyzer/component.astro +116 -0
- package/src/tool/voice-spectrogram-analyzer/controller.ts +219 -0
- package/src/tool/voice-spectrogram-analyzer/dom-views.ts +204 -0
- package/src/tool/voice-spectrogram-analyzer/entry.ts +31 -0
- package/src/tool/voice-spectrogram-analyzer/evaluator.ts +13 -0
- package/src/tool/voice-spectrogram-analyzer/fft.ts +64 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/de.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/en.ts +122 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/es.ts +122 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/fr.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/id.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/it.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/ja.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/ko.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/nl.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/pl.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/pt.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/ru.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/sv.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/tr.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/zh.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/index.ts +11 -0
- package/src/tool/voice-spectrogram-analyzer/logic.test.ts +46 -0
- package/src/tool/voice-spectrogram-analyzer/logic.ts +163 -0
- package/src/tool/voice-spectrogram-analyzer/seo.astro +15 -0
- package/src/tool/voice-spectrogram-analyzer/storage.ts +33 -0
- package/src/tool/voice-spectrogram-analyzer/ui.ts +49 -0
- package/src/tool/voice-spectrogram-analyzer/voice-spectrogram-analyzer.css +547 -0
- package/src/tool/widmark-alcohol-simulator/component.astro +1 -1
- package/src/tool/widmark-alcohol-simulator/i18n/de.ts +5 -0
- package/src/tool/widmark-alcohol-simulator/i18n/fr.ts +2 -1
- package/src/tool/widmark-alcohol-simulator/i18n/id.ts +1 -0
- package/src/tool/widmark-alcohol-simulator/i18n/it.ts +4 -1
- package/src/tool/widmark-alcohol-simulator/i18n/ja.ts +4 -1
- package/src/tool/widmark-alcohol-simulator/i18n/nl.ts +5 -1
- package/src/tool/widmark-alcohol-simulator/i18n/pl.ts +5 -1
- package/src/tool/widmark-alcohol-simulator/i18n/pt.ts +5 -1
- package/src/tool/widmark-alcohol-simulator/i18n/ru.ts +4 -1
- package/src/tool/widmark-alcohol-simulator/i18n/sv.ts +5 -1
- package/src/tool/widmark-alcohol-simulator/i18n/tr.ts +4 -1
- package/src/tool/widmark-alcohol-simulator/i18n/zh.ts +4 -1
- package/src/tools.ts +39 -35
- package/src/types.ts +4 -4
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { DnaProfileMatchProbabilityUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'dna-profile-match-probability-lab';
|
|
6
|
+
const title = 'DNA Profile Match Probability Lab';
|
|
7
|
+
const description = 'Explore how allele frequencies and Hardy Weinberg genotype rules combine into an educational random match probability for a small STR profile.';
|
|
8
|
+
|
|
9
|
+
const ui: DnaProfileMatchProbabilityUI = {
|
|
10
|
+
controls: 'Profile controls',
|
|
11
|
+
controlKicker: 'Build a profile',
|
|
12
|
+
controlHelper: 'Use a classroom preset or open each locus to edit the alleles and their population frequencies.',
|
|
13
|
+
presets: 'Classroom presets',
|
|
14
|
+
presetbalanced: 'Balanced',
|
|
15
|
+
presethomozygote: 'Homozygotes',
|
|
16
|
+
presetclassroom: 'Simple class',
|
|
17
|
+
loci: 'loci',
|
|
18
|
+
locus: 'Locus',
|
|
19
|
+
locusName: 'Locus name',
|
|
20
|
+
alleleA: 'Allele A',
|
|
21
|
+
alleleB: 'Allele B',
|
|
22
|
+
frequencyA: 'Frequency A (%)',
|
|
23
|
+
frequencyB: 'Frequency B (%)',
|
|
24
|
+
removeLocus: 'Remove locus',
|
|
25
|
+
addLocus: 'Add locus',
|
|
26
|
+
disclaimer: 'Educational simulator. It does not identify a person, validate a case, or replace a laboratory calculation.',
|
|
27
|
+
sceneKicker: 'Signal trace',
|
|
28
|
+
electropherogram: 'Profile trace',
|
|
29
|
+
sceneNote: 'Two peaks show the two alleles entered for each locus. Peak height is a visual cue for frequency, not a lab signal.',
|
|
30
|
+
peakHeight: 'Peak height scales with entered frequency',
|
|
31
|
+
results: 'Probability results',
|
|
32
|
+
resultKicker: 'Random match probability',
|
|
33
|
+
locusBreakdown: 'Locus by locus calculation',
|
|
34
|
+
genotype: 'Genotype',
|
|
35
|
+
rule: 'Rule',
|
|
36
|
+
frequency: 'Genotype frequency',
|
|
37
|
+
badgeNeedsData: 'Needs data',
|
|
38
|
+
badgeExploratory: 'Exploratory',
|
|
39
|
+
badgeCalculated: 'Calculated model',
|
|
40
|
+
needsData: 'Complete every locus with two alleles, frequencies between 0 and 100 percent, and a frequency pair no greater than 100 percent.',
|
|
41
|
+
exploratoryResult: 'This small profile is useful for learning the method. More loci can make a profile rarer, but do not make the model a case conclusion.',
|
|
42
|
+
calculatedResult: 'The product is calculated from the entered frequencies under simplified independence assumptions.',
|
|
43
|
+
notCalculated: 'Not calculated',
|
|
44
|
+
completeFields: 'Complete the profile fields to see a result.',
|
|
45
|
+
ofRandomProfiles: 'of random profiles under this classroom model',
|
|
46
|
+
missingValue: 'Unnamed locus',
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const faq = [
|
|
50
|
+
{
|
|
51
|
+
question: 'What does random match probability mean?',
|
|
52
|
+
answer: 'It is the estimated probability that a randomly selected unrelated person would have the entered profile under the selected allele frequencies and assumptions. It is not the probability that a person is guilty or that a sample came from a particular person.',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
question: 'How is a genotype frequency calculated?',
|
|
56
|
+
answer: 'For a homozygote the simulator uses p squared. For a heterozygote it uses 2pq, where p and q are the entered allele frequencies. The locus frequencies are then multiplied across the profile.',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
question: 'Why are the preset frequencies synthetic?',
|
|
60
|
+
answer: 'The presets are deliberately small classroom examples. Real forensic work needs a validated, representative population database, documented sampling, uncertainty estimates, and laboratory review.',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
question: 'Can this tool compare two people or identify a DNA sample?',
|
|
64
|
+
answer: 'No. It does not accept biological samples, compare two profiles, search a database, or identify anyone. It only explores a mathematical model from values you enter.',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
question: 'Why is a very small probability not a verdict?',
|
|
68
|
+
answer: 'A random match probability depends on the population database, the independence assumptions, the quality of the profile, and how the person was selected. A forensic conclusion also needs propositions, validation, context, and qualified interpretation.',
|
|
69
|
+
},
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
const howTo = [
|
|
73
|
+
{
|
|
74
|
+
name: 'Choose a classroom preset',
|
|
75
|
+
text: 'Start with the balanced, homozygote, or simple class preset to see how different genotype patterns change the calculation.',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: 'Open a locus and edit its profile',
|
|
79
|
+
text: 'Enter a locus name, two alleles, and the frequency of each allele as a percentage. The two allele names can be the same for a homozygote.',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'Read the locus rule',
|
|
83
|
+
text: 'The table shows p squared for a homozygote and 2pq for a heterozygote, followed by the resulting genotype frequency.',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: 'Interpret the combined result carefully',
|
|
87
|
+
text: 'The large result is written as one in a power of ten. Treat it as an educational model and keep the assumptions visible when discussing it.',
|
|
88
|
+
},
|
|
89
|
+
];
|
|
90
|
+
|
|
91
|
+
export const content: ToolLocaleContent<DnaProfileMatchProbabilityUI> = {
|
|
92
|
+
slug,
|
|
93
|
+
title,
|
|
94
|
+
description,
|
|
95
|
+
ui,
|
|
96
|
+
seo: [
|
|
97
|
+
{
|
|
98
|
+
type: 'title',
|
|
99
|
+
text: 'DNA Profile Match Probability Calculator',
|
|
100
|
+
level: 2,
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
type: 'paragraph',
|
|
104
|
+
html: 'This DNA profile match probability lab helps students and curious readers explore how a small autosomal STR profile becomes a probability under a simplified population genetics model. Enter two alleles and their frequencies for each locus. The calculator applies the <strong>Hardy Weinberg genotype rule</strong> and multiplies the locus frequencies to show a classroom random match probability.',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: 'The interface keeps the calculation visible: the trace shows the entered alleles, the table shows each genotype frequency, and the final result is expressed as <strong>one in a power of ten</strong>. The frequencies in the presets are synthetic teaching values, not an official population database.',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: 'title',
|
|
112
|
+
text: 'How the Genotype Rule Works',
|
|
113
|
+
level: 3,
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'table',
|
|
117
|
+
headers: ['Profile pattern', 'Calculation', 'Meaning'],
|
|
118
|
+
rows: [
|
|
119
|
+
['Two copies of one allele', 'p²', 'The allele frequency is multiplied by itself.'],
|
|
120
|
+
['Two different alleles', '2pq', 'The two allele frequencies are multiplied and doubled.'],
|
|
121
|
+
['Several independent loci', 'Product of locus values', 'Each locus contributes to the combined profile frequency.'],
|
|
122
|
+
],
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
type: 'title',
|
|
126
|
+
text: 'Why Population Frequencies Matter',
|
|
127
|
+
level: 3,
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
type: 'paragraph',
|
|
131
|
+
html: 'Allele frequencies are estimates from population databases. The relevant population, sampling method, database size, substructure, relatedness, and validation all affect how confidently a genotype frequency can be used. A synthetic preset can demonstrate the arithmetic, but it cannot stand in for a validated forensic database.',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
type: 'paragraph',
|
|
135
|
+
html: 'The result is best understood as a conditional statement: if the entered frequencies describe the relevant population, if the profile is a clean single source, and if the loci are treated as independent, then the product estimates how often that profile could appear in unrelated random people. Changing any of those assumptions can change the interpretation. The tool intentionally keeps the data editable so that this dependency is visible rather than hidden behind a single authoritative looking number.',
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
type: 'paragraph',
|
|
139
|
+
html: 'In a real case, analysts also document how a profile was selected, whether a database search influenced the investigation, whether the sample is a mixture, and whether relatives or population substructure need special treatment. Those questions are outside this small laboratory. Use the trace and table to explain the arithmetic, then use the limitations to explain why arithmetic alone is not a forensic opinion.',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: 'list',
|
|
143
|
+
items: [
|
|
144
|
+
'<strong>Use one population context:</strong> Do not mix frequencies from unrelated databases.',
|
|
145
|
+
'<strong>Keep assumptions visible:</strong> This lab assumes unrelated contributors and simplified independence between loci.',
|
|
146
|
+
'<strong>Separate probability from identity:</strong> A rare profile is not a statement about guilt, source, or legal certainty.',
|
|
147
|
+
'<strong>Document the data:</strong> A formal report needs the source, population, method, uncertainty, and interpretation.',
|
|
148
|
+
],
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
type: 'title',
|
|
152
|
+
text: 'Educational Limits',
|
|
153
|
+
level: 3,
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
type: 'tip',
|
|
157
|
+
title: 'Use this as a model, not a verdict',
|
|
158
|
+
html: 'This calculator does not analyse electropherograms, model mixtures, correct for population substructure, apply theta corrections, estimate likelihood ratios, or search a DNA database. It is for learning how simple genotype frequencies combine.',
|
|
159
|
+
},
|
|
160
|
+
],
|
|
161
|
+
faq,
|
|
162
|
+
bibliography,
|
|
163
|
+
howTo,
|
|
164
|
+
schemas: [
|
|
165
|
+
{
|
|
166
|
+
'@context': 'https://schema.org',
|
|
167
|
+
'@type': 'SoftwareApplication',
|
|
168
|
+
name: title,
|
|
169
|
+
description,
|
|
170
|
+
applicationCategory: 'EducationalApplication',
|
|
171
|
+
operatingSystem: 'Any',
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
'@context': 'https://schema.org',
|
|
175
|
+
'@type': 'FAQPage',
|
|
176
|
+
mainEntity: faq.map((item) => ({
|
|
177
|
+
'@type': 'Question',
|
|
178
|
+
name: item.question,
|
|
179
|
+
acceptedAnswer: {
|
|
180
|
+
'@type': 'Answer',
|
|
181
|
+
text: item.answer,
|
|
182
|
+
},
|
|
183
|
+
})),
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
'@context': 'https://schema.org',
|
|
187
|
+
'@type': 'HowTo',
|
|
188
|
+
name: title,
|
|
189
|
+
step: howTo.map((step) => ({
|
|
190
|
+
'@type': 'HowToStep',
|
|
191
|
+
name: step.name,
|
|
192
|
+
text: step.text,
|
|
193
|
+
})),
|
|
194
|
+
},
|
|
195
|
+
],
|
|
196
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { content as enContent } from './en';
|
|
2
|
+
import { createDnaLocale } from '../localize';
|
|
3
|
+
|
|
4
|
+
export const content = createDnaLocale({
|
|
5
|
+
locale: 'es',
|
|
6
|
+
slug: 'laboratorio-probabilidad-coincidencia-perfil-adn',
|
|
7
|
+
title: 'Laboratorio de probabilidad de coincidencia de perfiles de ADN',
|
|
8
|
+
description: 'Explora cómo las frecuencias alélicas y las reglas de Hardy-Weinberg forman una probabilidad educativa de coincidencia aleatoria de un perfil de ADN.',
|
|
9
|
+
ui: {
|
|
10
|
+
...enContent.ui,
|
|
11
|
+
controls: 'Controles del perfil', controlKicker: 'Construir un perfil', controlHelper: 'Empieza con un preset didáctico o abre cada locus para editar los alelos y sus frecuencias poblacionales.', presets: 'Presets didácticos', presetbalanced: 'Equilibrado', presethomozygote: 'Homocigotos', presetclassroom: 'Clase sencilla', loci: 'loci', locus: 'Locus', locusName: 'Nombre del locus', alleleA: 'Alelo A', alleleB: 'Alelo B', frequencyA: 'Frecuencia A (%)', frequencyB: 'Frecuencia B (%)', removeLocus: 'Eliminar locus', addLocus: 'Añadir locus', disclaimer: 'Simulador educativo. No identifica personas, valida casos ni sustituye un cálculo de laboratorio.', sceneKicker: 'Traza de señal', electropherogram: 'Traza del perfil', sceneNote: 'Dos picos muestran los dos alelos introducidos en cada locus. La altura es una pista visual de frecuencia, no una señal de laboratorio.', peakHeight: 'La altura del pico escala con la frecuencia', results: 'Resultados de probabilidad', resultKicker: 'Probabilidad de coincidencia aleatoria', locusBreakdown: 'Cálculo locus por locus', genotype: 'Genotipo', rule: 'Regla', frequency: 'Frecuencia del genotipo', badgeNeedsData: 'Faltan datos', badgeExploratory: 'Exploratorio', badgeCalculated: 'Modelo calculado', needsData: 'Completa cada locus con dos alelos y frecuencias entre 0 y 100 %; la suma de cada pareja no puede superar el 100 %.', exploratoryResult: 'Este perfil pequeño sirve para aprender el método. Más loci pueden hacerlo más raro, pero no convierten el modelo en una conclusión de caso.', calculatedResult: 'El producto se calcula con las frecuencias introducidas y supuestos simplificados de independencia.', notCalculated: 'No calculado', completeFields: 'Completa los campos del perfil para ver un resultado.', ofRandomProfiles: 'de perfiles aleatorios bajo este modelo didáctico', missingValue: 'Locus sin nombre', pattern: 'Patrón del perfil', calculation: 'Cálculo', meaning: 'Significado', homozygote: 'Dos alelos iguales', heterozygote: 'Dos alelos distintos', independentLoci: 'Varios loci independientes', homozygoteMeaning: 'La frecuencia del alelo se multiplica por sí misma.', heterozygoteMeaning: 'Las dos frecuencias alélicas se multiplican y se duplican.', independentLociMeaning: 'Cada locus contribuye a la frecuencia combinada del perfil',
|
|
12
|
+
},
|
|
13
|
+
seo: {
|
|
14
|
+
calculatorTitle: 'Calculadora de probabilidad de coincidencia de un perfil de ADN',
|
|
15
|
+
intro: 'Este laboratorio de probabilidad de perfiles de ADN ayuda a estudiantes y lectores curiosos a explorar cómo un pequeño perfil STR autosómico se convierte en una probabilidad bajo un modelo simplificado de genética de poblaciones. Introduce dos alelos y sus frecuencias para cada locus. La calculadora aplica la regla de Hardy-Weinberg y multiplica las frecuencias de los loci para mostrar una coincidencia aleatoria educativa.',
|
|
16
|
+
methodTitle: 'Cómo funciona la regla del genotipo',
|
|
17
|
+
method: 'La interfaz mantiene visible el razonamiento: la traza muestra los alelos introducidos, la tabla muestra cada frecuencia de genotipo y el resultado final se expresa como uno entre una potencia de diez. Un homocigoto usa p² y un heterocigoto usa 2pq. Los presets contienen valores sintéticos para enseñar, no una base poblacional oficial.',
|
|
18
|
+
populationTitle: 'Por qué importan las frecuencias poblacionales',
|
|
19
|
+
population: 'Las frecuencias alélicas son estimaciones obtenidas de bases de datos poblacionales. La población de referencia, el muestreo, el tamaño de la base, el parentesco, la subestructura y la validación afectan a la interpretación. Si las frecuencias describen la población relevante, el perfil es una fuente única limpia y los loci se tratan como independientes, el producto estima con qué frecuencia aparecería en personas aleatorias no emparentadas. Si cambia un supuesto, cambia la interpretación.',
|
|
20
|
+
interpretation: 'El resultado es una afirmación condicional sobre los valores introducidos. No tiene en cuenta la selección de una persona, el parentesco, los perfiles mezclados ni el efecto de una búsqueda en una base de datos. Por eso, un ejemplo didáctico debe leerse junto con su población, método e incertidumbre.',
|
|
21
|
+
limitsTitle: 'Límites educativos',
|
|
22
|
+
limits: 'En un caso real también deben documentarse la selección de la persona, la base poblacional, las mezclas, la subestructura y la interpretación experta. Esta aplicación no analiza electroferogramas, no corrige subestructura, no calcula razones de verosimilitud y no busca en bases de datos de ADN.',
|
|
23
|
+
tipTitle: 'Úsalo como modelo, no como veredicto',
|
|
24
|
+
tip: 'Una probabilidad de coincidencia aleatoria pequeña no es una afirmación de culpabilidad ni de identidad. Usa la herramienta para explicar la aritmética y mantén visibles la fuente de datos, la población, los supuestos y la incertidumbre.',
|
|
25
|
+
list: ['<strong>Una población:</strong> No mezcles frecuencias de bases de datos que no sean comparables.', '<strong>Supuestos visibles:</strong> El laboratorio supone personas no emparentadas e independencia simplificada entre loci.', '<strong>Separa probabilidad e identidad:</strong> Un perfil raro no prueba el origen ni la culpabilidad.', '<strong>Documenta los datos:</strong> Un informe formal necesita fuente, método, incertidumbre e interpretación.'],
|
|
26
|
+
},
|
|
27
|
+
faq: [
|
|
28
|
+
{ question: '¿Qué significa la probabilidad de coincidencia aleatoria?', answer: 'Estima la probabilidad de que una persona no emparentada elegida al azar tenga el perfil introducido bajo las frecuencias y supuestos seleccionados. No es la probabilidad de culpabilidad ni de que una muestra proceda de alguien concreto.' },
|
|
29
|
+
{ question: '¿Cómo se calcula la frecuencia de un genotipo?', answer: 'Para un homocigoto se usa p². Para un heterocigoto se usa 2pq; después se multiplican las frecuencias de los loci.' },
|
|
30
|
+
{ question: '¿Por qué las frecuencias de los presets son sintéticas?', answer: 'Son ejemplos pequeños para clase. El trabajo forense necesita una base poblacional validada, representativa y documentada.' },
|
|
31
|
+
{ question: '¿Puede comparar dos personas o identificar una muestra?', answer: 'No. No recibe muestras, no compara dos perfiles, no busca en bases de datos y no identifica a nadie. Solo explora un modelo matemático.' },
|
|
32
|
+
{ question: '¿Por qué una probabilidad muy pequeña no es un veredicto?', answer: 'La interpretación depende de la base de datos, la selección, la calidad del perfil, los supuestos y la valoración profesional.' },
|
|
33
|
+
],
|
|
34
|
+
howTo: [
|
|
35
|
+
{ name: 'Elige un preset didáctico', text: 'Empieza con el preset equilibrado, de homocigotos o de clase sencilla.' },
|
|
36
|
+
{ name: 'Edita un locus', text: 'Introduce el nombre, dos alelos y la frecuencia de cada alelo como porcentaje.' },
|
|
37
|
+
{ name: 'Lee la regla del locus', text: 'La tabla muestra p² para homocigotos y 2pq para heterocigotos.' },
|
|
38
|
+
{ name: 'Interpreta el resultado con cuidado', text: 'Trátalo como un modelo educativo y conserva visibles sus supuestos.' },
|
|
39
|
+
],
|
|
40
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { content as enContent } from './en';
|
|
2
|
+
import { createDnaLocale } from '../localize';
|
|
3
|
+
|
|
4
|
+
export const content = createDnaLocale({
|
|
5
|
+
locale: 'fr', slug: 'laboratoire-probabilite-correspondance-profil-adn', title: "Laboratoire de probabilité de correspondance de profils ADN", description: "Explorez comment les fréquences alléliques et les règles de Hardy Weinberg produisent une probabilité pédagogique de correspondance aléatoire d un profil ADN.",
|
|
6
|
+
ui: { ...enContent.ui, controls: "Commandes du profil", controlKicker: "Construire un profil", controlHelper: "Commencez avec un préréglage pédagogique ou ouvrez chaque locus pour modifier les allèles et leurs fréquences.", presets: "Préréglages pédagogiques", presetbalanced: "Équilibré", presethomozygote: "Homozygotes", presetclassroom: "Classe simple", disclaimer: "Simulateur pédagogique. Il n identifie personne et ne remplace pas un calcul de laboratoire.", results: "Résultats de probabilité", resultKicker: "Probabilité de correspondance aléatoire", locusBreakdown: "Calcul locus par locus", badgeNeedsData: "Données manquantes", badgeExploratory: "Exploratoire", badgeCalculated: "Modèle calculé", needsData: "Complétez chaque locus avec deux allèles et des fréquences entre 0 et 100 pour cent.", completeFields: "Complétez les champs du profil pour afficher un résultat.", pattern: "Type de profil", calculation: "Calcul", meaning: "Signification", homozygote: "Deux allèles identiques", heterozygote: "Deux allèles différents", independentLoci: "Plusieurs loci indépendants", homozygoteMeaning: "La fréquence de l allèle est multipliée par elle même.", heterozygoteMeaning: "Les deux fréquences alléliques sont multipliées puis doublées.", independentLociMeaning: "Chaque locus contribue à la fréquence combinée du profil." },
|
|
7
|
+
seo: { calculatorTitle: "Calculateur de probabilité de correspondance d un profil ADN", intro: "Ce laboratoire de probabilité de profil ADN aide les étudiants et les lecteurs curieux à comprendre comment un petit profil STR autosomal devient une probabilité dans un modèle simplifié de génétique des populations. Saisissez deux allèles et leurs fréquences pour chaque locus. Le calculateur applique la règle de Hardy Weinberg et multiplie les fréquences des loci pour montrer une correspondance aléatoire pédagogique.", methodTitle: "Fonctionnement de la règle du génotype", method: "L interface rend le raisonnement visible: la trace montre les allèles saisis, le tableau affiche chaque fréquence de génotype et le résultat final prend la forme de un sur une puissance de dix. Un homozygote utilise p² et un hétérozygote 2pq. Les préréglages utilisent des valeurs synthétiques destinées à l apprentissage et non une base officielle.", populationTitle: "Pourquoi les fréquences de population comptent", population: "Les fréquences alléliques sont des estimations issues de bases de populations. La population de référence, l échantillonnage, la taille de la base, la parenté, la sous structure et la validation influencent l interprétation. Si les fréquences décrivent la population pertinente, si le profil provient d une seule source et si les loci sont considérés indépendants, le produit estime la fréquence du profil chez des personnes aléatoires non apparentées. Une hypothèse différente modifie le sens du résultat.", interpretation: "Le résultat est une affirmation conditionnelle dépendant des valeurs saisies. Le modèle ne tient pas compte de la sélection d une personne, de la parenté, des mélanges ni de l effet d une recherche dans une base. Un exemple pédagogique doit donc être lu avec sa population, sa méthode et son incertitude.", application: "Pour un exercice utile, choisissez un préréglage, modifiez ensuite un seul locus et observez le tableau ainsi que la probabilité finale. Notez les valeurs, la source des fréquences et l hypothèse d indépendance. Cette interface sert à apprendre et à expliquer un calcul transparent, pas à produire un avis médico légal ou une conclusion de dossier.", limitsTitle: "Limites pédagogiques", limits: "Dans un dossier réel, il faut aussi documenter la sélection, la base, les mélanges, la sous structure et l interprétation par un spécialiste. Cette application n analyse pas les électrophérogrammes, ne corrige pas la sous structure, ne calcule pas les rapports de vraisemblance et ne cherche pas dans une base ADN.", tipTitle: "Un modèle, pas un verdict", tip: "Une faible probabilité de correspondance aléatoire ne constitue ni une preuve d identité ni une déclaration de culpabilité. Utilisez l outil pour expliquer le calcul et laissez visibles les données, la population, les hypothèses et l incertitude.", list: ["<strong>Un contexte de population:</strong> Ne mélangez pas des fréquences issues de bases incomparables.", "<strong>Hypothèses visibles:</strong> Le laboratoire suppose des personnes non apparentées et une indépendance simplifiée entre les loci.", "<strong>Séparer probabilité et identité:</strong> Un profil rare ne prouve ni une source ni une culpabilité.", "<strong>Documenter les données:</strong> Un rapport formel demande la source, la méthode, l incertitude et l interprétation."] },
|
|
8
|
+
faq: [ { question: "Que signifie la probabilité de correspondance aléatoire?", answer: "Elle estime la probabilité qu une personne non apparentée choisie au hasard possède le profil saisi selon les fréquences et les hypothèses retenues. Ce n est pas la probabilité de culpabilité ni l origine d un prélèvement." }, { question: "Comment calcule t on la fréquence d un génotype?", answer: "Pour un homozygote, le laboratoire utilise p². Pour un hétérozygote, il utilise 2pq, puis multiplie les fréquences des loci." }, { question: "Pourquoi les fréquences des préréglages sont elles synthétiques?", answer: "Ce sont de petits exemples pédagogiques. Le travail forensique exige une base validée, représentative et documentée." }, { question: "L outil peut il comparer deux personnes?", answer: "Non. Il ne reçoit pas de prélèvement, ne compare pas deux profils et n identifie personne; il explore seulement un modèle mathématique." }, { question: "Pourquoi une très faible probabilité n est elle pas un verdict?", answer: "Son interprétation dépend de la base, de la sélection, de la qualité du profil, des hypothèses et de l expertise." } ],
|
|
9
|
+
howTo: [ { name: "Choisir un préréglage pédagogique", text: "Commencez avec le profil équilibré, homozygote ou de classe simple." }, { name: "Modifier un locus", text: "Saisissez un nom, deux allèles et la fréquence de chaque allèle en pourcentage." }, { name: "Lire la règle du locus", text: "Le tableau affiche p² pour un homozygote et 2pq pour un hétérozygote." }, { name: "Interpréter prudemment", text: "Considérez le résultat comme un modèle pédagogique et gardez les hypothèses visibles." } ],
|
|
10
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { content as enContent } from './en';
|
|
2
|
+
import { createDnaLocale } from '../localize';
|
|
3
|
+
|
|
4
|
+
export const content = createDnaLocale({
|
|
5
|
+
locale: 'id',
|
|
6
|
+
slug: 'lab-probabilitas-kecocokan-profil-dna',
|
|
7
|
+
title: 'Lab Probabilitas Kecocokan Profil DNA',
|
|
8
|
+
description: 'Pelajari bagaimana frekuensi alel dan aturan Hardy-Weinberg membentuk probabilitas kecocokan acak profil DNA untuk pembelajaran.',
|
|
9
|
+
ui: {
|
|
10
|
+
...enContent.ui,
|
|
11
|
+
controls: 'Kontrol profil', controlKicker: 'Susun profil', controlHelper: 'Gunakan preset pembelajaran atau buka setiap lokus untuk mengubah alel dan frekuensi populasinya.', presets: 'Preset pembelajaran', presetbalanced: 'Seimbang', presethomozygote: 'Homozigot', presetclassroom: 'Kelas sederhana', loci: 'lokus', locus: 'Lokus', locusName: 'Nama lokus', alleleA: 'Alel A', alleleB: 'Alel B', frequencyA: 'Frekuensi A (%)', frequencyB: 'Frekuensi B (%)', removeLocus: 'Hapus lokus', addLocus: 'Tambah lokus', disclaimer: 'Simulator pendidikan. Tidak mengidentifikasi orang, memvalidasi kasus, atau menggantikan perhitungan laboratorium.', sceneKicker: 'Jejak sinyal', electropherogram: 'Jejak profil', sceneNote: 'Dua puncak menunjukkan dua alel yang dimasukkan pada setiap lokus. Tingginya hanya petunjuk visual frekuensi, bukan sinyal laboratorium.', peakHeight: 'Tinggi puncak mengikuti frekuensi', results: 'Hasil probabilitas', resultKicker: 'Probabilitas kecocokan acak', locusBreakdown: 'Perhitungan tiap lokus', genotype: 'Genotipe', rule: 'Aturan', frequency: 'Frekuensi genotipe', badgeNeedsData: 'Data diperlukan', badgeExploratory: 'Eksploratif', badgeCalculated: 'Model terhitung', needsData: 'Lengkapi setiap lokus dengan dua alel dan frekuensi 0 hingga 100%; jumlah sepasang frekuensi tidak boleh lebih dari 100%.', exploratoryResult: 'Profil kecil ini berguna untuk belajar. Lokus tambahan dapat membuat profil lebih jarang, tetapi tidak menjadikan model ini kesimpulan kasus.', calculatedResult: 'Produk dihitung dari frekuensi yang dimasukkan dengan asumsi independensi yang disederhanakan.', notCalculated: 'Belum dihitung', completeFields: 'Lengkapi bidang profil untuk melihat hasil.', ofRandomProfiles: 'profil acak dalam model pembelajaran ini', missingValue: 'Lokus tanpa nama', pattern: 'Pola profil', calculation: 'Perhitungan', meaning: 'Makna', homozygote: 'Dua alel sama', heterozygote: 'Dua alel berbeda', independentLoci: 'Beberapa lokus independen', homozygoteMeaning: 'Frekuensi alel dikalikan dengan dirinya sendiri.', heterozygoteMeaning: 'Kedua frekuensi alel dikalikan lalu digandakan.', independentLociMeaning: 'Setiap lokus menyumbang frekuensi gabungan profil.',
|
|
12
|
+
},
|
|
13
|
+
seo: {
|
|
14
|
+
calculatorTitle: 'Kalkulator probabilitas kecocokan profil DNA',
|
|
15
|
+
intro: 'Lab probabilitas profil DNA ini membantu pelajar dan pembaca umum memahami bagaimana profil STR autosomal kecil menjadi probabilitas dalam model genetika populasi yang disederhanakan. Masukkan dua alel dan frekuensinya untuk setiap lokus. Kalkulator menerapkan aturan Hardy-Weinberg lalu mengalikan frekuensi lokus untuk menampilkan kecocokan acak sebagai contoh pembelajaran.',
|
|
16
|
+
methodTitle: 'Cara kerja aturan genotipe',
|
|
17
|
+
method: 'Antarmuka menjaga proses tetap terlihat: jejak menunjukkan alel yang dimasukkan, tabel menunjukkan setiap frekuensi genotipe, dan hasil akhir ditulis sebagai satu banding pangkat sepuluh. Homozigot menggunakan p², sedangkan heterozigot menggunakan 2pq. Preset sengaja memakai nilai sintetis untuk belajar, bukan basis data populasi resmi.',
|
|
18
|
+
populationTitle: 'Mengapa frekuensi populasi penting',
|
|
19
|
+
population: 'Frekuensi alel adalah perkiraan dari basis data populasi. Populasi rujukan, cara pengambilan sampel, ukuran basis data, kekerabatan, substruktur populasi, dan validasi memengaruhi tafsir. Jika frekuensi menggambarkan populasi yang relevan, profil merupakan sumber tunggal yang bersih, dan lokus dianggap independen, produk ini memperkirakan frekuensi profil pada orang acak yang tidak berkerabat. Perubahan asumsi mengubah makna hasil.',
|
|
20
|
+
interpretation: 'Hasil ini adalah pernyataan bersyarat berdasarkan nilai yang dimasukkan. Model tidak mempertimbangkan pemilihan tersangka, orang yang berkerabat, campuran, atau pengaruh pencarian basis data. Karena itu, contoh pembelajaran harus selalu dibaca bersama populasi, metode, dan ketidakpastiannya.',
|
|
21
|
+
application: 'Untuk latihan yang baik, pilih satu preset terlebih dahulu, ubah hanya satu lokus, lalu amati perubahan pada tabel dan probabilitas akhir. Dengan cara ini terlihat bahwa alel langka dapat mengubah kontribusi sebuah lokus secara besar. Catat nilai yang dimasukkan, asal frekuensi, dan asumsi independensi yang disederhanakan. Tampilan ini cocok untuk kelas, belajar mandiri, dan penjelasan transparan tentang langkah perhitungan, bukan untuk pendapat forensik.',
|
|
22
|
+
limitsTitle: 'Batasan pendidikan',
|
|
23
|
+
limits: 'Dalam kasus nyata, pemilihan orang, basis data, campuran profil, substruktur populasi, dan interpretasi ahli juga harus didokumentasikan. Aplikasi kecil ini tidak menganalisis elektroferogram, tidak memperbaiki substruktur, tidak menghitung rasio kemungkinan, dan tidak mencari basis data DNA.',
|
|
24
|
+
tipTitle: 'Gunakan sebagai model, bukan putusan',
|
|
25
|
+
tip: 'Probabilitas kecocokan acak yang kecil bukan bukti identitas atau kesalahan. Gunakan alat ini untuk menjelaskan aritmetika dan tampilkan sumber data, populasi, asumsi, serta ketidakpastiannya.',
|
|
26
|
+
list: ['<strong>Satu populasi:</strong> Jangan mencampur frekuensi dari basis data yang tidak sebanding.', '<strong>Asumsi terlihat:</strong> Lab ini mengasumsikan orang tidak berkerabat dan lokus independen secara sederhana.', '<strong>Pisahkan probabilitas dan identitas:</strong> Profil langka bukan bukti sumber atau kesalahan.', '<strong>Dokumentasikan data:</strong> Laporan formal memerlukan sumber, metode, ketidakpastian, dan tafsir.'],
|
|
27
|
+
},
|
|
28
|
+
faq: [
|
|
29
|
+
{ question: 'Apa arti probabilitas kecocokan acak?', answer: 'Ini memperkirakan peluang orang tidak berkerabat yang dipilih secara acak memiliki profil yang dimasukkan menurut frekuensi dan asumsi terpilih. Ini bukan probabilitas kesalahan atau asal sampel tertentu.' },
|
|
30
|
+
{ question: 'Bagaimana frekuensi genotipe dihitung?', answer: 'Untuk homozigot digunakan p². Untuk heterozigot digunakan 2pq, lalu frekuensi setiap lokus dikalikan.' },
|
|
31
|
+
{ question: 'Mengapa frekuensi preset bersifat sintetis?', answer: 'Preset adalah contoh kecil untuk belajar. Pekerjaan forensik memerlukan basis data populasi yang tervalidasi, representatif, dan terdokumentasi.' },
|
|
32
|
+
{ question: 'Apakah alat ini membandingkan dua orang?', answer: 'Tidak. Alat ini tidak menerima sampel biologis, tidak membandingkan profil, dan tidak mengidentifikasi siapa pun; alat ini hanya mengeksplorasi model matematika.' },
|
|
33
|
+
{ question: 'Mengapa probabilitas kecil bukan putusan?', answer: 'Tafsir bergantung pada basis data, pemilihan, kualitas profil, asumsi, dan penilaian profesional.' },
|
|
34
|
+
],
|
|
35
|
+
howTo: [
|
|
36
|
+
{ name: 'Pilih preset pembelajaran', text: 'Mulai dengan preset seimbang, homozigot, atau kelas sederhana.' },
|
|
37
|
+
{ name: 'Edit sebuah lokus', text: 'Masukkan nama, dua alel, dan frekuensi tiap alel sebagai persentase.' },
|
|
38
|
+
{ name: 'Baca aturan lokus', text: 'Tabel menampilkan p² untuk homozigot dan 2pq untuk heterozigot.' },
|
|
39
|
+
{ name: 'Tafsirkan dengan hati-hati', text: 'Anggap hasil sebagai model pendidikan dan pertahankan asumsi tetap terlihat.' },
|
|
40
|
+
],
|
|
41
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { content as enContent } from './en';
|
|
2
|
+
import { createDnaLocale } from '../localize';
|
|
3
|
+
|
|
4
|
+
export const content = createDnaLocale({
|
|
5
|
+
locale: 'it', slug: 'laboratorio-probabilita-corrispondenza-profilo-dna', title: "Laboratorio della probabilità di corrispondenza dei profili DNA", description: "Scopri come le frequenze alleliche e le regole di Hardy Weinberg producono una probabilità didattica di corrispondenza casuale di un profilo DNA.",
|
|
6
|
+
ui: { ...enContent.ui, controls: "Controlli del profilo", controlKicker: "Costruisci un profilo", controlHelper: "Inizia con un preset didattico oppure apri ogni locus per modificare gli alleli e le frequenze della popolazione.", presets: "Preset didattici", presetbalanced: "Bilanciato", presethomozygote: "Omozigoti", presetclassroom: "Classe semplice", disclaimer: "Simulatore didattico. Non identifica persone, non valida casi e non sostituisce un calcolo di laboratorio.", results: "Risultati della probabilità", resultKicker: "Probabilità di corrispondenza casuale", locusBreakdown: "Calcolo locus per locus", badgeNeedsData: "Dati mancanti", badgeExploratory: "Esplorativo", badgeCalculated: "Modello calcolato", needsData: "Completa ogni locus con due alleli e frequenze tra 0 e 100 per cento.", completeFields: "Completa i campi del profilo per vedere un risultato.", pattern: "Schema del profilo", calculation: "Calcolo", meaning: "Significato", homozygote: "Due alleli uguali", heterozygote: "Due alleli diversi", independentLoci: "Più loci indipendenti", homozygoteMeaning: "La frequenza dell allele viene moltiplicata per sé stessa.", heterozygoteMeaning: "Le due frequenze alleliche vengono moltiplicate e raddoppiate.", independentLociMeaning: "Ogni locus contribuisce alla frequenza combinata del profilo." },
|
|
7
|
+
seo: { calculatorTitle: "Calcolatore della probabilità di corrispondenza di un profilo DNA", intro: "Questo laboratorio sulla probabilità dei profili DNA aiuta studenti e lettori curiosi a capire come un piccolo profilo STR autosomico diventa una probabilità in un modello semplificato di genetica delle popolazioni. Inserisci due alleli e le loro frequenze per ogni locus. Il calcolatore applica la regola di Hardy Weinberg e moltiplica le frequenze dei loci per mostrare una corrispondenza casuale didattica.", methodTitle: "Come funziona la regola del genotipo", method: "L interfaccia rende visibile il ragionamento: la traccia mostra gli alleli inseriti, la tabella mostra ogni frequenza genotipica e il risultato finale è espresso come uno su una potenza di dieci. Per un omozigote si usa p² e per un eterozigote 2pq. I preset contengono valori sintetici per l insegnamento, non una banca dati ufficiale.", populationTitle: "Perché contano le frequenze della popolazione", population: "Le frequenze alleliche sono stime ricavate da banche dati di popolazione. Popolazione di riferimento, campionamento, dimensione della banca dati, parentela, struttura e validazione influenzano l interpretazione. Se le frequenze descrivono la popolazione pertinente, il profilo è di fonte singola e i loci sono trattati come indipendenti, il prodotto stima la frequenza del profilo in persone casuali non imparentate. Cambiare un ipotesi cambia il significato.", interpretation: "Il risultato è un affermazione condizionata dai valori inseriti. Il modello non considera la selezione di una persona, la parentela, i profili misti o l effetto di una ricerca nel database. Un esempio didattico deve quindi essere letto insieme a popolazione, metodo e incertezza.", application: "Per un esercizio utile, scegli un preset, modifica un solo locus e osserva la tabella e la probabilità finale. Annota i valori inseriti, la fonte delle frequenze e l ipotesi di indipendenza. Questa interfaccia serve per imparare e spiegare il calcolo, non per formulare un parere forense.", limitsTitle: "Limiti didattici", limits: "In un caso reale occorre documentare anche selezione, banca dati, profili misti, struttura della popolazione e interpretazione qualificata. Questa applicazione non analizza elettroferogrammi, non corregge la struttura, non calcola rapporti di verosimiglianza e non cerca in banche dati DNA.", tipTitle: "Usalo come modello, non come verdetto", tip: "Una piccola probabilità di corrispondenza casuale non prova identità o colpevolezza. Usa lo strumento per spiegare l aritmetica e mantieni visibili dati, popolazione, ipotesi e incertezza.", list: ["<strong>Un contesto di popolazione:</strong> Non mescolare frequenze da banche dati non confrontabili.", "<strong>Ipotesi visibili:</strong> Il laboratorio assume persone non imparentate e indipendenza semplificata tra loci.", "<strong>Separare probabilità e identità:</strong> Un profilo raro non prova origine o colpevolezza.", "<strong>Documentare i dati:</strong> Una relazione formale richiede fonte, metodo, incertezza e interpretazione."] },
|
|
8
|
+
faq: [ { question: "Cosa significa probabilità di corrispondenza casuale?", answer: "Stima la probabilità che una persona non imparentata scelta a caso abbia il profilo inserito secondo frequenze e ipotesi selezionate. Non è la probabilità di colpevolezza né della provenienza di un campione." }, { question: "Come si calcola la frequenza di un genotipo?", answer: "Per un omozigote si usa p². Per un eterozigote si usa 2pq, poi si moltiplicano le frequenze dei loci." }, { question: "Perché le frequenze dei preset sono sintetiche?", answer: "Sono piccoli esempi per imparare. Il lavoro forense richiede una banca dati validata, rappresentativa e documentata." }, { question: "Lo strumento può confrontare due persone?", answer: "No. Non riceve campioni, non confronta profili, non cerca banche dati e non identifica nessuno; esplora solo un modello matematico." }, { question: "Perché una probabilità molto bassa non è un verdetto?", answer: "L interpretazione dipende da database, selezione, qualità del profilo, ipotesi e valutazione professionale." } ],
|
|
9
|
+
howTo: [ { name: "Scegli un preset didattico", text: "Inizia dal profilo bilanciato, omozigote o dalla classe semplice." }, { name: "Modifica un locus", text: "Inserisci nome, due alleli e frequenza di ogni allele in percentuale." }, { name: "Leggi la regola del locus", text: "La tabella mostra p² per un omozigote e 2pq per un eterozigote." }, { name: "Interpreta con prudenza", text: "Considera il risultato un modello didattico e lascia visibili le ipotesi." } ],
|
|
10
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { content as enContent } from './en';
|
|
2
|
+
import { createDnaLocale } from '../localize';
|
|
3
|
+
|
|
4
|
+
export const content = createDnaLocale({
|
|
5
|
+
locale: 'ja',
|
|
6
|
+
slug: 'dna-profile-match-probability-lab',
|
|
7
|
+
title: 'DNAプロファイル一致確率ラボ',
|
|
8
|
+
description: 'アレル頻度とハーディ・ワインベルグの規則が、DNAプロファイルの偶然一致確率をどのように作るかを学習できます。',
|
|
9
|
+
ui: {
|
|
10
|
+
...enContent.ui,
|
|
11
|
+
controls: 'プロファイル設定', controlKicker: 'プロファイルを作成', controlHelper: '学習用プリセットを選ぶか、各ローカスを開いてアレルと集団頻度を編集します。', presets: '学習用プリセット', presetbalanced: 'バランス型', presethomozygote: 'ホモ接合体', presetclassroom: '簡単なクラス', loci: 'ローカス', locus: 'ローカス', locusName: 'ローカス名', alleleA: 'アレルA', alleleB: 'アレルB', frequencyA: '頻度A(%)', frequencyB: '頻度B(%)', removeLocus: 'ローカスを削除', addLocus: 'ローカスを追加', disclaimer: '教育用シミュレーターです。個人の識別や事件の判定を行わず、検査室の計算に代わるものでもありません。', sceneKicker: 'シグナル波形', electropherogram: 'プロファイル波形', sceneNote: '各ローカスの入力アレルを2本のピークで表示します。高さは頻度の視覚的な目安で、検査室の信号ではありません。', peakHeight: 'ピークの高さは入力頻度に比例', results: '確率の結果', resultKicker: '偶然一致確率', locusBreakdown: 'ローカスごとの計算', genotype: '遺伝子型', rule: '規則', frequency: '遺伝子型頻度', badgeNeedsData: 'データが必要', badgeExploratory: '探索的', badgeCalculated: '計算モデル', needsData: '各ローカスに2つのアレルと0〜100%の頻度を入力してください。1組の頻度の合計は100%以下にします。', exploratoryResult: 'この小さなプロファイルは学習に役立ちます。ローカスを増やすとまれになりますが、事件の結論になるわけではありません。', calculatedResult: '入力頻度と、簡略化した独立性の仮定から積を計算しています。', notCalculated: '未計算', completeFields: '結果を見るにはプロファイルの項目を入力してください。', ofRandomProfiles: 'この学習モデルでのランダムなプロファイルの割合', missingValue: '名前のないローカス', pattern: 'プロファイルの型', calculation: '計算', meaning: '意味', homozygote: '同じアレル2つ', heterozygote: '異なるアレル2つ', independentLoci: '複数の独立ローカス', homozygoteMeaning: 'アレル頻度を自分自身に掛けます。', heterozygoteMeaning: '2つのアレル頻度を掛けて2倍にします。', independentLociMeaning: '各ローカスがプロファイル全体の頻度に寄与します。',
|
|
12
|
+
},
|
|
13
|
+
seo: {
|
|
14
|
+
calculatorTitle: 'DNAプロファイル偶然一致確率計算機',
|
|
15
|
+
intro: 'このDNAプロファイル確率ラボは、学生や関心のある読者が、小さな常染色体STRプロファイルから確率が生まれる仕組みを、簡略化した集団遺伝学モデルで学ぶためのものです。各ローカスに2つのアレルと頻度を入力します。ハーディ・ワインベルグの規則を適用し、ローカスの頻度を掛け合わせて学習用の偶然一致確率を表示します。',
|
|
16
|
+
methodTitle: '遺伝子型の規則',
|
|
17
|
+
method: '入力したアレルは波形に、各遺伝子型の頻度は表に表示されるため、計算過程を確認できます。ホモ接合体はp²、ヘテロ接合体は2pqを使い、最後にローカスの値を掛け合わせます。プリセットは公式の集団データベースではなく、学習のための合成値です。',
|
|
18
|
+
populationTitle: '集団頻度が重要な理由',
|
|
19
|
+
population: 'アレル頻度は集団データベースから得られる推定値です。参照集団、サンプル方法、データベースの規模、血縁関係、集団構造、検証状況によって解釈は変わります。入力頻度が対象集団を表し、プロファイルが単一由来で、ローカスを独立とみなせる場合に限り、積は血縁のない人々に現れる頻度を推定します。',
|
|
20
|
+
interpretation: 'この結果は入力値に基づく条件付きの説明です。人物の選択、血縁関係、混合プロファイル、データベース検索の影響は考慮しません。したがって学習例は、対象集団、方法、不確実性と合わせて読み、単独の結論として扱わないでください。',
|
|
21
|
+
limitsTitle: '教育上の限界',
|
|
22
|
+
limits: '実際の事件では、人物の選択方法、データベース、混合プロファイル、集団構造、専門家による解釈も記録します。このアプリは電気泳動図を解析せず、尤度比を計算せず、DNAデータベースも検索しません。',
|
|
23
|
+
tipTitle: '判定ではなくモデルとして使う',
|
|
24
|
+
tip: '小さな偶然一致確率は、個人の同一性や有罪を示すものではありません。計算を学ぶために使い、データの出典、集団、仮定、不確実性を表示したままにしてください。',
|
|
25
|
+
list: ['<strong>1つの集団:</strong> 比較できないデータベースの頻度を混ぜないでください。', '<strong>仮定を表示:</strong> 血縁のない人とローカスの簡略化された独立性を仮定します。', '<strong>確率と身元を分ける:</strong> まれなプロファイルは出所や有罪の証明ではありません。', '<strong>データを記録:</strong> 正式な報告には出典、方法、不確実性、解釈が必要です。'],
|
|
26
|
+
},
|
|
27
|
+
faq: [
|
|
28
|
+
{ question: '偶然一致確率とは何ですか?', answer: '選択した頻度と仮定の下で、無作為に選んだ血縁のない人が入力プロファイルを持つ確率の推定です。有罪や特定の試料の出所の確率ではありません。' },
|
|
29
|
+
{ question: '遺伝子型頻度はどう計算しますか?', answer: 'ホモ接合体にはp²、ヘテロ接合体には2pqを使い、各ローカスの頻度を掛け合わせます。' },
|
|
30
|
+
{ question: 'プリセットの頻度が合成値なのはなぜですか?', answer: '学習用の小さな例だからです。実務では検証済みで代表性のある集団データベースが必要です。' },
|
|
31
|
+
{ question: '2人を比較したり試料を識別したりできますか?', answer: 'できません。生物試料を受け付けず、プロファイル比較やデータベース検索も行わず、数学モデルだけを扱います。' },
|
|
32
|
+
{ question: 'なぜ小さな確率が判定にならないのですか?', answer: 'データベース、人物の選択、プロファイルの品質、仮定、専門家の解釈によって意味が変わるためです。' },
|
|
33
|
+
],
|
|
34
|
+
howTo: [
|
|
35
|
+
{ name: '学習用プリセットを選ぶ', text: 'バランス型、ホモ接合体、簡単なクラスから始めます。' },
|
|
36
|
+
{ name: 'ローカスを編集する', text: '名前、2つのアレル、各アレルの頻度をパーセントで入力します。' },
|
|
37
|
+
{ name: 'ローカスの規則を読む', text: '表にはホモ接合体のp²とヘテロ接合体の2pqが表示されます。' },
|
|
38
|
+
{ name: '結果を慎重に解釈する', text: '学習用モデルとして扱い、仮定を見える状態にしておきます。' },
|
|
39
|
+
],
|
|
40
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { content as enContent } from './en';
|
|
2
|
+
import { createDnaLocale } from '../localize';
|
|
3
|
+
|
|
4
|
+
export const content = createDnaLocale({
|
|
5
|
+
locale: 'ko',
|
|
6
|
+
slug: 'dna-profile-match-probability-lab',
|
|
7
|
+
title: 'DNA 프로필 일치 확률 실험실',
|
|
8
|
+
description: '대립유전자 빈도와 하디-바인베르크 규칙이 DNA 프로필의 무작위 일치 확률을 어떻게 만드는지 학습합니다.',
|
|
9
|
+
ui: {
|
|
10
|
+
...enContent.ui,
|
|
11
|
+
controls: '프로필 설정', controlKicker: '프로필 만들기', controlHelper: '학습용 프리셋을 사용하거나 각 로커스를 열어 대립유전자와 집단 빈도를 수정하세요.', presets: '학습용 프리셋', presetbalanced: '균형형', presethomozygote: '동형접합', presetclassroom: '간단한 수업', loci: '로커스', locus: '로커스', locusName: '로커스 이름', alleleA: '대립유전자 A', alleleB: '대립유전자 B', frequencyA: '빈도 A(%)', frequencyB: '빈도 B(%)', removeLocus: '로커스 삭제', addLocus: '로커스 추가', disclaimer: '교육용 시뮬레이터입니다. 사람을 식별하거나 사건을 검증하지 않으며 검사실 계산을 대신하지 않습니다.', sceneKicker: '신호 트레이스', electropherogram: '프로필 트레이스', sceneNote: '각 로커스에 입력한 두 대립유전자를 두 개의 피크로 표시합니다. 높이는 빈도의 시각적 단서일 뿐 검사실 신호가 아닙니다.', peakHeight: '피크 높이는 입력 빈도에 비례', results: '확률 결과', resultKicker: '무작위 일치 확률', locusBreakdown: '로커스별 계산', genotype: '유전자형', rule: '규칙', frequency: '유전자형 빈도', badgeNeedsData: '데이터 필요', badgeExploratory: '탐색적', badgeCalculated: '계산된 모델', needsData: '각 로커스에 두 대립유전자와 0~100%의 빈도를 입력하세요. 한 쌍의 빈도 합은 100%를 넘을 수 없습니다.', exploratoryResult: '이 작은 프로필은 방법을 배우는 데 유용합니다. 로커스를 늘리면 더 희귀해질 수 있지만 사건 결론이 되지는 않습니다.', calculatedResult: '입력한 빈도와 단순화된 독립성 가정으로 곱을 계산합니다.', notCalculated: '계산되지 않음', completeFields: '결과를 보려면 프로필 필드를 완성하세요.', ofRandomProfiles: '이 학습 모델에서 무작위 프로필 중', missingValue: '이름 없는 로커스', pattern: '프로필 패턴', calculation: '계산', meaning: '의미', homozygote: '같은 대립유전자 2개', heterozygote: '서로 다른 대립유전자 2개', independentLoci: '여러 독립 로커스', homozygoteMeaning: '대립유전자 빈도를 자기 자신과 곱합니다.', heterozygoteMeaning: '두 대립유전자 빈도를 곱한 뒤 두 배로 합니다.', independentLociMeaning: '각 로커스가 결합 프로필 빈도에 기여합니다.',
|
|
12
|
+
},
|
|
13
|
+
seo: {
|
|
14
|
+
calculatorTitle: 'DNA 프로필 무작위 일치 확률 계산기',
|
|
15
|
+
intro: '이 DNA 프로필 확률 실험실은 학생과 관심 있는 독자가 단순화된 집단 유전학 모델에서 작은 상염색체 STR 프로필이 확률로 바뀌는 과정을 살펴보도록 돕습니다. 각 로커스에 두 대립유전자와 빈도를 입력하면 하디-바인베르크 규칙을 적용하고 로커스 빈도를 곱해 학습용 무작위 일치 확률을 보여 줍니다.',
|
|
16
|
+
methodTitle: '유전자형 규칙의 작동 방식',
|
|
17
|
+
method: '입력한 대립유전자는 트레이스에, 각 유전자형 빈도는 표에 표시되어 계산 과정을 확인할 수 있습니다. 동형접합은 p², 이형접합은 2pq를 사용한 뒤 로커스 값을 곱합니다. 프리셋은 공식 집단 데이터베이스가 아니라 학습을 위한 합성 값입니다.',
|
|
18
|
+
populationTitle: '집단 빈도가 중요한 이유',
|
|
19
|
+
population: '대립유전자 빈도는 집단 데이터베이스에서 얻은 추정치입니다. 참조 집단, 표본 추출, 데이터베이스 규모, 친족 관계, 집단 하위구조와 검증이 해석에 영향을 줍니다. 입력 빈도가 관련 집단을 나타내고 프로필이 단일 출처이며 로커스가 독립이라는 가정이 모두 맞을 때만 곱셈 결과를 무관한 무작위 사람들에서의 빈도로 해석할 수 있습니다.',
|
|
20
|
+
interpretation: '이 결과는 입력한 값에 따른 조건부 설명입니다. 특정 인물의 선택, 친족 관계, 혼합 프로필 또는 데이터베이스 검색의 영향은 고려하지 않습니다. 따라서 학습 예시는 집단, 방법과 불확실성을 함께 보아야 하며 단독 결론으로 사용해서는 안 됩니다.',
|
|
21
|
+
limitsTitle: '교육적 한계',
|
|
22
|
+
limits: '실제 사건에서는 사람을 선택한 방법, 데이터베이스, 혼합 프로필, 집단 하위구조와 전문가 해석도 기록해야 합니다. 이 도구는 전기영동도를 분석하거나 하위구조를 보정하거나 우도비를 계산하거나 DNA 데이터베이스를 검색하지 않습니다.',
|
|
23
|
+
tipTitle: '판정이 아닌 모델로 사용하세요',
|
|
24
|
+
tip: '작은 무작위 일치 확률은 신원이나 유죄를 의미하지 않습니다. 산술을 설명하는 데 사용하고 데이터 출처, 집단, 가정과 불확실성을 계속 표시하세요.',
|
|
25
|
+
list: ['<strong>하나의 집단:</strong> 비교할 수 없는 데이터베이스의 빈도를 섞지 마세요.', '<strong>가정 표시:</strong> 무관한 사람과 로커스 간 단순화된 독립성을 가정합니다.', '<strong>확률과 신원 분리:</strong> 희귀한 프로필은 출처나 유죄의 증거가 아닙니다.', '<strong>데이터 기록:</strong> 공식 보고서에는 출처, 방법, 불확실성과 해석이 필요합니다.'],
|
|
26
|
+
},
|
|
27
|
+
faq: [
|
|
28
|
+
{ question: '무작위 일치 확률은 무엇을 의미하나요?', answer: '선택한 빈도와 가정에 따라 무작위로 선택한 비친족이 입력 프로필을 가질 확률을 추정합니다. 유죄 확률이나 특정 시료의 출처 확률이 아닙니다.' },
|
|
29
|
+
{ question: '유전자형 빈도는 어떻게 계산하나요?', answer: '동형접합에는 p², 이형접합에는 2pq를 사용하고 각 로커스의 빈도를 곱합니다.' },
|
|
30
|
+
{ question: '프리셋 빈도가 합성 값인 이유는 무엇인가요?', answer: '학습용 작은 예시이기 때문입니다. 실제 법과학 작업에는 검증되고 대표성 있는 집단 데이터베이스가 필요합니다.' },
|
|
31
|
+
{ question: '두 사람을 비교하거나 시료를 식별할 수 있나요?', answer: '아니요. 생물학적 시료를 받거나 프로필을 비교하거나 데이터베이스를 검색하지 않고 수학적 모델만 다룹니다.' },
|
|
32
|
+
{ question: '작은 확률이 왜 판정이 아닌가요?', answer: '데이터베이스, 선택 방법, 프로필 품질, 가정과 전문가 해석에 따라 의미가 달라지기 때문입니다.' },
|
|
33
|
+
],
|
|
34
|
+
howTo: [
|
|
35
|
+
{ name: '학습용 프리셋 선택', text: '균형형, 동형접합 또는 간단한 수업 프리셋으로 시작하세요.' },
|
|
36
|
+
{ name: '로커스 편집', text: '이름, 두 대립유전자와 각 빈도를 백분율로 입력하세요.' },
|
|
37
|
+
{ name: '로커스 규칙 읽기', text: '표에서 동형접합은 p², 이형접합은 2pq로 표시됩니다.' },
|
|
38
|
+
{ name: '결과를 신중하게 해석', text: '교육용 모델로 보고 가정을 계속 확인하세요.' },
|
|
39
|
+
],
|
|
40
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { content as enContent } from './en';
|
|
2
|
+
import { createDnaLocale } from '../localize';
|
|
3
|
+
|
|
4
|
+
export const content = createDnaLocale({
|
|
5
|
+
locale: 'nl',
|
|
6
|
+
slug: 'dna-profiel-toevalsovereenkomst-kans-lab',
|
|
7
|
+
title: 'Lab voor de kans op een toevallige DNA profielmatch',
|
|
8
|
+
description: 'Ontdek hoe allelfrequenties en de Hardy Weinberg regels samen een educatieve kans op een toevallige DNA profielmatch vormen.',
|
|
9
|
+
ui: {
|
|
10
|
+
...enContent.ui,
|
|
11
|
+
controls: 'Profielinstellingen', controlKicker: 'Bouw een profiel', controlHelper: 'Gebruik een onderwijsvoorinstelling of open elke locus om allelen en populatiefrequenties te bewerken.', presets: 'Onderwijsvoorinstellingen', presetbalanced: 'Gebalanceerd', presethomozygote: 'Homozygoten', presetclassroom: 'Eenvoudige klas', loci: 'loci', locus: 'Locus', locusName: 'Naam van locus', alleleA: 'Allel A', alleleB: 'Allel B', frequencyA: 'Frequentie A (%)', frequencyB: 'Frequentie B (%)', removeLocus: 'Locus verwijderen', addLocus: 'Locus toevoegen', disclaimer: 'Educatieve simulator. Identificeert geen persoon, valideert geen zaak en vervangt geen laboratoriumberekening.', sceneKicker: 'Signaalspoor', electropherogram: 'Profielspoor', sceneNote: 'Twee pieken tonen de ingevoerde allelen per locus. De hoogte is een visuele aanwijzing voor frequentie, geen laboratoriumsignaal.', peakHeight: 'Piekhoogte schaalt met de ingevoerde frequentie', results: 'Kansresultaten', resultKicker: 'Kans op toevallige match', locusBreakdown: 'Berekening per locus', genotype: 'Genotype', rule: 'Regel', frequency: 'Genotypefrequentie', badgeNeedsData: 'Gegevens nodig', badgeExploratory: 'Verkennend', badgeCalculated: 'Berekend model', needsData: 'Vul elke locus in met twee allelen en frequenties tussen 0 en 100 procent; een frequentiepaar mag samen niet boven 100 procent komen.', exploratoryResult: 'Dit kleine profiel is geschikt om de methode te leren. Meer loci kunnen een profiel zeldzamer maken, maar maken het model niet tot een zaakconclusie.', calculatedResult: 'Het product wordt berekend met de ingevoerde frequenties en vereenvoudigde onafhankelijkheidsaannames.', notCalculated: 'Niet berekend', completeFields: 'Vul de profielvelden in om een resultaat te zien.', ofRandomProfiles: 'van willekeurige profielen volgens dit onderwijsmodel', missingValue: 'Naamloze locus', pattern: 'Profielpatroon', calculation: 'Berekening', meaning: 'Betekenis', homozygote: 'Twee gelijke allelen', heterozygote: 'Twee verschillende allelen', independentLoci: 'Meerdere onafhankelijke loci', homozygoteMeaning: 'De allelfrequentie wordt met zichzelf vermenigvuldigd.', heterozygoteMeaning: 'De twee allelfrequenties worden vermenigvuldigd en verdubbeld.', independentLociMeaning: 'Elke locus draagt bij aan de gecombineerde profielfrequentie.',
|
|
12
|
+
},
|
|
13
|
+
seo: {
|
|
14
|
+
calculatorTitle: 'Calculator voor de kans op een toevallige DNA profielmatch', intro: 'Dit laboratorium voor DNA profielkansen helpt studenten en nieuwsgierige lezers te begrijpen hoe een klein autosomaal STR profiel een kans wordt binnen een vereenvoudigd populatiegenetisch model. Voer twee allelen en hun frequenties per locus in. De calculator past de Hardy Weinberg regel toe en vermenigvuldigt de locusfrequenties tot een educatieve toevallige match.', methodTitle: 'Hoe de genotype regel werkt', method: 'De interface houdt de berekening zichtbaar: het spoor toont de ingevoerde allelen, de tabel toont elke genotypefrequentie en het eindresultaat wordt weergegeven als een op een macht van tien. Een homozygoot gebruikt p² en een heterozygoot 2pq. De voorinstellingen gebruiken synthetische onderwijswaarden, geen officiele populatiedatabase.', populationTitle: 'Waarom populatiefrequenties belangrijk zijn', population: 'Allelfrequenties zijn schattingen uit populatiedatabases. Referentiepopulatie, steekproef, databasegrootte, verwantschap, populatiestructuur en validatie beïnvloeden de interpretatie. Als de frequenties de relevante populatie beschrijven, het profiel een zuivere enkele bron is en loci als onafhankelijk worden behandeld, schat het product hoe vaak het profiel bij willekeurige onverwante personen voorkomt. Een andere aanname verandert de betekenis.', interpretation: 'Het resultaat is een voorwaardelijke uitspraak over de ingevoerde waarden. Het model houdt geen rekening met persoonsselectie, verwante personen, mengprofielen of het effect van een databankzoekactie. Lees een onderwijsvoorbeeld daarom altijd samen met populatie, methode en onzekerheid.', application: 'Kies voor een goede oefening eerst een voorinstelling, verander daarna slechts één locus en bekijk hoe de tabel en de eindkans reageren. Noteer de ingevoerde waarden, de herkomst van de frequenties en de vereenvoudigde onafhankelijkheidsaanname. Deze weergave is bedoeld voor onderwijs en zelfstudie, niet voor een forensisch oordeel.', limitsTitle: 'Educatieve grenzen', limits: 'In een echte zaak moeten ook persoonsselectie, database, mengprofielen, populatiestructuur en deskundige interpretatie worden vastgelegd. Deze toepassing analyseert geen elektroferogrammen, corrigeert geen populatiestructuur, berekent geen likelihood ratios en doorzoekt geen DNA database.', tipTitle: 'Gebruik als model, niet als oordeel', tip: 'Een kleine kans op een toevallige match is geen uitspraak over identiteit of schuld. Gebruik de tool om de rekenstappen uit te leggen en houd bron, populatie, aannames en onzekerheid zichtbaar.', list: ['<strong>Een populatie:</strong> Meng geen frequenties uit onvergelijkbare databases.', '<strong>Aannames zichtbaar:</strong> Het lab veronderstelt onverwante personen en vereenvoudigde onafhankelijkheid tussen loci.', '<strong>Scheid kans en identiteit:</strong> Een zeldzaam profiel bewijst geen bron of schuld.', '<strong>Documenteer gegevens:</strong> Een formeel rapport heeft bron, methode, onzekerheid en interpretatie nodig.'],
|
|
15
|
+
},
|
|
16
|
+
faq: [
|
|
17
|
+
{ question: 'Wat betekent de kans op een toevallige match?', answer: 'Het is een schatting van de kans dat een willekeurig gekozen onverwant persoon het ingevoerde profiel heeft volgens de gekozen frequenties en aannames. Het is niet de kans op schuld of op de herkomst van een monster.' },
|
|
18
|
+
{ question: 'Hoe wordt een genotypefrequentie berekend?', answer: 'Voor een homozygoot gebruikt het lab p². Voor een heterozygoot gebruikt het 2pq; daarna worden de locusfrequenties vermenigvuldigd.' },
|
|
19
|
+
{ question: 'Waarom zijn de frequenties in de voorinstellingen synthetisch?', answer: 'Het zijn kleine voorbeelden voor onderwijs. Forensisch werk vereist een gevalideerde, representatieve en gedocumenteerde populatiedatabase.' },
|
|
20
|
+
{ question: 'Kan de tool twee personen vergelijken?', answer: 'Nee. Hij neemt geen biologische monsters aan, vergelijkt geen profielen en identificeert niemand; hij verkent alleen een wiskundig model.' },
|
|
21
|
+
{ question: 'Waarom is een zeer kleine kans geen oordeel?', answer: 'De interpretatie hangt af van database, selectie, profielkwaliteit, aannames en deskundige beoordeling.' },
|
|
22
|
+
],
|
|
23
|
+
howTo: [
|
|
24
|
+
{ name: 'Kies een onderwijsvoorinstelling', text: 'Begin met het gebalanceerde, homozygote of eenvoudige klasprofiel.' },
|
|
25
|
+
{ name: 'Bewerk een locus', text: 'Voer een naam, twee allelen en de frequentie van elk allel als percentage in.' },
|
|
26
|
+
{ name: 'Lees de locusregel', text: 'De tabel toont p² voor homozygoten en 2pq voor heterozygoten.' },
|
|
27
|
+
{ name: 'Interpreteer voorzichtig', text: 'Behandel het resultaat als onderwijsmodel en houd de aannames zichtbaar.' },
|
|
28
|
+
],
|
|
29
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { content as enContent } from './en';
|
|
2
|
+
import { createDnaLocale } from '../localize';
|
|
3
|
+
|
|
4
|
+
export const content = createDnaLocale({
|
|
5
|
+
locale: 'pl', slug: 'laboratorium-prawdopodobienstwa-zgodnosci-profilu-dna', title: "Laboratorium prawdopodobieństwa zgodności profilu DNA", description: "Sprawdź, jak częstości alleli i reguły Hardy Weinberga tworzą edukacyjne prawdopodobieństwo losowej zgodności profilu DNA.",
|
|
6
|
+
ui: { ...enContent.ui, controls: "Ustawienia profilu", controlKicker: "Zbuduj profil", controlHelper: "Wybierz preset edukacyjny albo otwórz każdy locus, aby zmienić allele i częstości populacyjne.", presets: "Presety edukacyjne", presetbalanced: "Zrównoważony", presethomozygote: "Homozygoty", presetclassroom: "Prosta klasa", disclaimer: "Symulator edukacyjny. Nie identyfikuje osób, nie weryfikuje spraw i nie zastępuje obliczeń laboratoryjnych.", results: "Wyniki prawdopodobieństwa", resultKicker: "Prawdopodobieństwo losowej zgodności", locusBreakdown: "Obliczenie dla każdego locus", badgeNeedsData: "Potrzebne dane", badgeExploratory: "Eksploracyjne", badgeCalculated: "Model obliczony", needsData: "Uzupełnij każdy locus dwoma allelami i częstościami od 0 do 100 procent.", completeFields: "Uzupełnij pola profilu, aby zobaczyć wynik.", pattern: "Wzorzec profilu", calculation: "Obliczenie", meaning: "Znaczenie", homozygote: "Dwa takie same allele", heterozygote: "Dwa różne allele", independentLoci: "Kilka niezależnych loci", homozygoteMeaning: "Częstość allelu mnoży się przez siebie.", heterozygoteMeaning: "Dwie częstości alleli mnoży się i podwaja.", independentLociMeaning: "Każdy locus wpływa na łączną częstość profilu." },
|
|
7
|
+
seo: { calculatorTitle: "Kalkulator prawdopodobieństwa losowej zgodności profilu DNA", intro: "To laboratorium prawdopodobieństwa profilu DNA pomaga studentom i ciekawym czytelnikom zrozumieć, jak mały autosomalny profil STR staje się prawdopodobieństwem w uproszczonym modelu genetyki populacji. Wpisz dwa allele i ich częstości dla każdego locus. Kalkulator stosuje regułę Hardy Weinberga i mnoży częstości loci, aby pokazać edukacyjny przykład losowej zgodności.", methodTitle: "Jak działa reguła genotypu", method: "Interfejs pokazuje cały tok obliczeń: ślad przedstawia wpisane allele, tabela pokazuje każdą częstość genotypu, a wynik jest zapisany jako jeden do potęgi dziesięciu. Dla homozygoty używane jest p², a dla heterozygoty 2pq. Presety zawierają syntetyczne wartości edukacyjne, a nie oficjalną bazę populacyjną.", populationTitle: "Dlaczego częstości populacyjne mają znaczenie", population: "Częstości alleli są szacunkami z baz populacyjnych. Populacja referencyjna, sposób doboru próby, rozmiar bazy, pokrewieństwo, struktura populacji i walidacja wpływają na interpretację. Jeśli częstości opisują właściwą populację, profil pochodzi z jednego źródła, a loci traktuje się jako niezależne, iloczyn szacuje częstość profilu wśród losowych osób niespokrewnionych. Zmiana założenia zmienia znaczenie wyniku.", interpretation: "Wynik jest warunkowym stwierdzeniem zależnym od wpisanych wartości. Model nie uwzględnia wyboru osoby, pokrewieństwa, profili mieszanych ani wpływu przeszukania bazy. Przykład edukacyjny trzeba więc czytać razem z populacją, metodą i niepewnością.", application: "Dobre ćwiczenie zaczyna się od wybrania presetu, zmiany tylko jednego locus i obserwacji tabeli oraz końcowego prawdopodobieństwa. Zapisz wartości, źródło częstości i uproszczone założenie niezależności. Ten ekran służy nauce i przejrzystemu wyjaśnianiu obliczeń, a nie opinii kryminalistycznej. Porównaj kilka ustawień i sprawdź, jak zmiana jednego allelu wpływa na cały iloczyn.", limitsTitle: "Ograniczenia edukacyjne", limits: "W prawdziwej sprawie trzeba też udokumentować dobór osoby, bazę danych, profile mieszane, strukturę populacji i interpretację eksperta. Aplikacja nie analizuje elektroferogramów, nie koryguje struktury populacji, nie oblicza ilorazów wiarygodności i nie przeszukuje bazy DNA.", tipTitle: "Używaj jako modelu, nie werdyktu", tip: "Małe prawdopodobieństwo losowej zgodności nie dowodzi tożsamości ani winy. Używaj narzędzia do wyjaśniania arytmetyki i zachowaj widoczne dane, populację, założenia oraz niepewność.", list: ["<strong>Jeden kontekst populacji:</strong> Nie mieszaj częstości z nieporównywalnych baz.", "<strong>Widoczne założenia:</strong> Laboratorium zakłada osoby niespokrewnione i uproszczoną niezależność loci.", "<strong>Oddziel prawdopodobieństwo od tożsamości:</strong> Rzadki profil nie dowodzi źródła ani winy.", "<strong>Dokumentuj dane:</strong> Raport formalny wymaga źródła, metody, niepewności i interpretacji."] },
|
|
8
|
+
faq: [ { question: "Co oznacza prawdopodobieństwo losowej zgodności?", answer: "To szacunek, że losowo wybrana, niespokrewniona osoba ma wpisany profil przy wybranych częstościach i założeniach. Nie jest to prawdopodobieństwo winy ani pochodzenia próbki." }, { question: "Jak oblicza się częstość genotypu?", answer: "Dla homozygoty używa się p², dla heterozygoty 2pq, a następnie mnoży się częstości loci." }, { question: "Dlaczego częstości presetów są syntetyczne?", answer: "To małe przykłady do nauki. Praktyka kryminalistyczna wymaga zwalidowanej, reprezentatywnej i udokumentowanej bazy populacji." }, { question: "Czy narzędzie porównuje dwie osoby?", answer: "Nie. Nie przyjmuje próbek, nie porównuje profili i nikogo nie identyfikuje; pokazuje tylko model matematyczny." }, { question: "Dlaczego małe prawdopodobieństwo nie jest werdyktem?", answer: "Znaczenie zależy od bazy, doboru osoby, jakości profilu, założeń i oceny eksperta." } ],
|
|
9
|
+
howTo: [ { name: "Wybierz preset edukacyjny", text: "Zacznij od profilu zrównoważonego, homozygotycznego lub prostej klasy." }, { name: "Edytuj locus", text: "Wpisz nazwę, dwa allele i częstość każdego allelu w procentach." }, { name: "Przeczytaj regułę locus", text: "Tabela pokazuje p² dla homozygoty i 2pq dla heterozygoty." }, { name: "Interpretuj ostrożnie", text: "Traktuj wynik jako model edukacyjny i zachowaj widoczne założenia." } ],
|
|
10
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { content as enContent } from './en';
|
|
2
|
+
import { createDnaLocale } from '../localize';
|
|
3
|
+
|
|
4
|
+
export const content = createDnaLocale({
|
|
5
|
+
locale: 'pt',
|
|
6
|
+
slug: 'laboratorio-probabilidade-correspondencia-perfil-dna',
|
|
7
|
+
title: 'Laboratório de probabilidade de correspondência de perfis de DNA',
|
|
8
|
+
description: 'Veja como as frequências alélicas e as regras de Hardy-Weinberg formam uma probabilidade educativa de correspondência aleatória de um perfil de DNA.',
|
|
9
|
+
ui: {
|
|
10
|
+
...enContent.ui,
|
|
11
|
+
controls: 'Controles do perfil', controlKicker: 'Construir um perfil', controlHelper: 'Comece com um preset educativo ou abra cada locus para editar os alelos e as frequências populacionais.', presets: 'Presets educativos', presetbalanced: 'Equilibrado', presethomozygote: 'Homozigotos', presetclassroom: 'Classe simples', loci: 'loci', locus: 'Locus', locusName: 'Nome do locus', alleleA: 'Alelo A', alleleB: 'Alelo B', frequencyA: 'Frequência A (%)', frequencyB: 'Frequência B (%)', removeLocus: 'Remover locus', addLocus: 'Adicionar locus', disclaimer: 'Simulador educativo. Não identifica pessoas, valida casos nem substitui um cálculo laboratorial.', sceneKicker: 'Traço do sinal', electropherogram: 'Traço do perfil', sceneNote: 'Dois picos mostram os dois alelos inseridos em cada locus. A altura é uma pista visual da frequência, não um sinal laboratorial.', peakHeight: 'A altura do pico acompanha a frequência', results: 'Resultados de probabilidade', resultKicker: 'Probabilidade de correspondência aleatória', locusBreakdown: 'Cálculo locus a locus', genotype: 'Genótipo', rule: 'Regra', frequency: 'Frequência do genótipo', badgeNeedsData: 'Dados necessários', badgeExploratory: 'Exploratório', badgeCalculated: 'Modelo calculado', needsData: 'Preencha cada locus com dois alelos e frequências entre 0 e 100%; a soma de cada par não pode ultrapassar 100%.', exploratoryResult: 'Este perfil pequeno ajuda a aprender o método. Mais loci podem torná-lo mais raro, mas não transformam o modelo numa conclusão de caso.', calculatedResult: 'O produto é calculado com as frequências inseridas e pressupostos simplificados de independência.', notCalculated: 'Não calculado', completeFields: 'Preencha os campos do perfil para ver um resultado.', ofRandomProfiles: 'de perfis aleatórios neste modelo educativo', missingValue: 'Locus sem nome', pattern: 'Padrão do perfil', calculation: 'Cálculo', meaning: 'Significado', homozygote: 'Dois alelos iguais', heterozygote: 'Dois alelos diferentes', independentLoci: 'Vários loci independentes', homozygoteMeaning: 'A frequência do alelo é multiplicada por si mesma.', heterozygoteMeaning: 'As duas frequências alélicas são multiplicadas e duplicadas.', independentLociMeaning: 'Cada locus contribui para a frequência combinada do perfil.',
|
|
12
|
+
},
|
|
13
|
+
seo: {
|
|
14
|
+
calculatorTitle: 'Calculadora de probabilidade de correspondência de um perfil de DNA',
|
|
15
|
+
intro: 'Este laboratório de probabilidade de perfis de DNA ajuda estudantes e leitores curiosos a explorar como um pequeno perfil STR autossômico se torna uma probabilidade num modelo simplificado de genética populacional. Insira dois alelos e as suas frequências para cada locus. A calculadora aplica a regra de Hardy-Weinberg e multiplica as frequências dos loci para mostrar uma correspondência aleatória educativa.',
|
|
16
|
+
methodTitle: 'Como funciona a regra do genótipo',
|
|
17
|
+
method: 'A interface mantém o raciocínio visível: o traço mostra os alelos inseridos, a tabela mostra cada frequência de genótipo e o resultado final aparece como um em uma potência de dez. Um homozigoto usa p² e um heterozigoto usa 2pq. Os presets usam valores sintéticos para ensino, não uma base populacional oficial.',
|
|
18
|
+
populationTitle: 'Por que as frequências populacionais importam',
|
|
19
|
+
population: 'As frequências alélicas são estimativas de bases de dados populacionais. A população de referência, a amostragem, o tamanho da base, o parentesco, a subestrutura e a validação influenciam a interpretação. Se as frequências descrevem a população relevante, o perfil é de fonte única e os loci são tratados como independentes, o produto estima a frequência entre pessoas aleatórias não aparentadas. Alterar um pressuposto altera a interpretação.',
|
|
20
|
+
interpretation: 'O resultado é uma afirmação condicional baseada nos valores inseridos. O modelo não considera a seleção de uma pessoa, parentesco, perfis mistos ou o efeito de uma pesquisa numa base de dados. Por isso, um exemplo educativo deve ser lido com a população, o método e a incerteza apresentados.',
|
|
21
|
+
application: 'Para praticar, escolha um preset, altere apenas um locus e observe a tabela e a probabilidade total. Assim fica claro que alelos raros podem mudar bastante a contribuição de um locus. Registre os valores, a fonte das frequências e o pressuposto de independência; a tela serve para ensino e não para uma opinião forense.',
|
|
22
|
+
limitsTitle: 'Limites educativos',
|
|
23
|
+
limits: 'Num caso real, também é preciso documentar a seleção da pessoa, a base de dados, os perfis mistos, a subestrutura e a interpretação especializada. Esta aplicação não analisa eletroferogramas, não corrige subestrutura, não calcula razões de verossimilhança e não pesquisa bases de DNA.',
|
|
24
|
+
tipTitle: 'Use como modelo, não como veredito',
|
|
25
|
+
tip: 'Uma probabilidade pequena de correspondência aleatória não é uma afirmação de identidade ou culpa. Use a ferramenta para explicar a aritmética e mantenha visíveis a fonte dos dados, a população, os pressupostos e a incerteza.',
|
|
26
|
+
list: ['<strong>Uma população:</strong> Não misture frequências de bases incomparáveis.', '<strong>Pressupostos visíveis:</strong> O laboratório assume pessoas não aparentadas e independência simplificada entre loci.', '<strong>Separe probabilidade e identidade:</strong> Um perfil raro não prova origem nem culpa.', '<strong>Documente os dados:</strong> Um relatório formal precisa de fonte, método, incerteza e interpretação.'],
|
|
27
|
+
},
|
|
28
|
+
faq: [
|
|
29
|
+
{ question: 'O que significa a probabilidade de correspondência aleatória?', answer: 'É uma estimativa da probabilidade de uma pessoa não aparentada escolhida ao acaso ter o perfil inserido sob as frequências e pressupostos selecionados. Não é a probabilidade de culpa nem da origem de uma amostra.' },
|
|
30
|
+
{ question: 'Como se calcula a frequência de um genótipo?', answer: 'Para um homozigoto usa-se p². Para um heterozigoto usa-se 2pq; depois multiplicam-se as frequências dos loci.' },
|
|
31
|
+
{ question: 'Por que as frequências dos presets são sintéticas?', answer: 'São pequenos exemplos educativos. O trabalho forense precisa de uma base populacional validada, representativa e documentada.' },
|
|
32
|
+
{ question: 'A ferramenta compara duas pessoas?', answer: 'Não. Não recebe amostras, não compara perfis e não identifica ninguém; apenas explora um modelo matemático.' },
|
|
33
|
+
{ question: 'Por que uma probabilidade muito pequena não é um veredito?', answer: 'A interpretação depende da base, seleção, qualidade do perfil, pressupostos e avaliação profissional.' },
|
|
34
|
+
],
|
|
35
|
+
howTo: [
|
|
36
|
+
{ name: 'Escolha um preset educativo', text: 'Comece pelo preset equilibrado, homozigoto ou de classe simples.' },
|
|
37
|
+
{ name: 'Edite um locus', text: 'Insira o nome, dois alelos e a frequência de cada alelo em percentagem.' },
|
|
38
|
+
{ name: 'Leia a regra do locus', text: 'A tabela mostra p² para homozigotos e 2pq para heterozigotos.' },
|
|
39
|
+
{ name: 'Interprete com cuidado', text: 'Trate o resultado como um modelo educativo e mantenha os pressupostos visíveis.' },
|
|
40
|
+
],
|
|
41
|
+
});
|