@jjlmoya/utils-forensic-science 1.1.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 +69 -0
- package/scripts/crystal-lattice-catalog-translations.mjs +459 -0
- package/scripts/postinstall.mjs +27 -0
- package/scripts/sync-crystal-lattice-i18n.mjs +50 -0
- package/src/category/i18n/de.ts +55 -0
- package/src/category/i18n/en.ts +55 -0
- package/src/category/i18n/es.ts +55 -0
- package/src/category/i18n/fr.ts +55 -0
- package/src/category/i18n/id.ts +55 -0
- package/src/category/i18n/it.ts +55 -0
- package/src/category/i18n/ja.ts +56 -0
- package/src/category/i18n/ko.ts +56 -0
- package/src/category/i18n/nl.ts +55 -0
- package/src/category/i18n/pl.ts +55 -0
- package/src/category/i18n/pt.ts +55 -0
- package/src/category/i18n/ru.ts +55 -0
- package/src/category/i18n/sv.ts +55 -0
- package/src/category/i18n/tr.ts +55 -0
- package/src/category/i18n/zh.ts +56 -0
- package/src/category/index.ts +48 -0
- package/src/category/seo.astro +15 -0
- package/src/components/PreviewNavSidebar.astro +116 -0
- package/src/components/PreviewToolbar.astro +143 -0
- package/src/data.ts +10 -0
- package/src/entries.ts +48 -0
- package/src/env.d.ts +5 -0
- package/src/index.ts +29 -0
- package/src/layouts/PreviewLayout.astro +117 -0
- package/src/pages/[locale]/[slug].astro +162 -0
- package/src/pages/[locale].astro +261 -0
- package/src/pages/index.astro +3 -0
- package/src/tests/diacritics_density.test.ts +140 -0
- package/src/tests/faq_count.test.ts +19 -0
- package/src/tests/i18n_coverage.test.ts +36 -0
- package/src/tests/inverted_punctuation.test.ts +84 -0
- package/src/tests/locale_completeness.test.ts +24 -0
- package/src/tests/mocks/astro_mock.js +2 -0
- package/src/tests/no_en_dash.test.ts +70 -0
- package/src/tests/no_h1_in_components.test.ts +48 -0
- package/src/tests/schemas_fulfillment.test.ts +23 -0
- package/src/tests/script_density.test.ts +94 -0
- package/src/tests/seo_length.test.ts +46 -0
- package/src/tests/shared-test-helpers.ts +56 -0
- package/src/tests/slug_language_code_format.test.ts +23 -0
- package/src/tests/slug_uniqueness.test.ts +81 -0
- package/src/tests/title_quality.test.ts +55 -0
- package/src/tests/tool_exports.test.ts +34 -0
- package/src/tests/tool_validation.test.ts +16 -0
- package/src/tests/widmark.test.ts +28 -0
- package/src/tool/forensic-age-estimator/bibliography.astro +14 -0
- package/src/tool/forensic-age-estimator/bibliography.ts +16 -0
- package/src/tool/forensic-age-estimator/component.astro +321 -0
- package/src/tool/forensic-age-estimator/dental-skeletal-third-molar-age-estimator.css +634 -0
- package/src/tool/forensic-age-estimator/entry.ts +32 -0
- package/src/tool/forensic-age-estimator/i18n/de.ts +245 -0
- package/src/tool/forensic-age-estimator/i18n/en.ts +245 -0
- package/src/tool/forensic-age-estimator/i18n/es.ts +245 -0
- package/src/tool/forensic-age-estimator/i18n/fr.ts +245 -0
- package/src/tool/forensic-age-estimator/i18n/id.ts +245 -0
- package/src/tool/forensic-age-estimator/i18n/it.ts +245 -0
- package/src/tool/forensic-age-estimator/i18n/ja.ts +245 -0
- package/src/tool/forensic-age-estimator/i18n/ko.ts +245 -0
- package/src/tool/forensic-age-estimator/i18n/nl.ts +245 -0
- package/src/tool/forensic-age-estimator/i18n/pl.ts +245 -0
- package/src/tool/forensic-age-estimator/i18n/pt.ts +245 -0
- package/src/tool/forensic-age-estimator/i18n/ru.ts +245 -0
- package/src/tool/forensic-age-estimator/i18n/sv.ts +245 -0
- package/src/tool/forensic-age-estimator/i18n/tr.ts +245 -0
- package/src/tool/forensic-age-estimator/i18n/zh.ts +246 -0
- package/src/tool/forensic-age-estimator/index.ts +11 -0
- package/src/tool/forensic-age-estimator/logic.ts +81 -0
- package/src/tool/forensic-age-estimator/seo.astro +15 -0
- package/src/tool/forensic-blood-test-simulator/bibliography.astro +6 -0
- package/src/tool/forensic-blood-test-simulator/bibliography.ts +12 -0
- package/src/tool/forensic-blood-test-simulator/component.astro +168 -0
- package/src/tool/forensic-blood-test-simulator/dom-utils.ts +40 -0
- package/src/tool/forensic-blood-test-simulator/entry.ts +32 -0
- package/src/tool/forensic-blood-test-simulator/forensic-presumptive-blood-testing-luminol-kastle-meyer-simulator.css +532 -0
- package/src/tool/forensic-blood-test-simulator/helpers.ts +16 -0
- package/src/tool/forensic-blood-test-simulator/i18n/de.ts +185 -0
- package/src/tool/forensic-blood-test-simulator/i18n/en.ts +185 -0
- package/src/tool/forensic-blood-test-simulator/i18n/es.ts +185 -0
- package/src/tool/forensic-blood-test-simulator/i18n/fr.ts +220 -0
- package/src/tool/forensic-blood-test-simulator/i18n/id.ts +220 -0
- package/src/tool/forensic-blood-test-simulator/i18n/it.ts +220 -0
- package/src/tool/forensic-blood-test-simulator/i18n/ja.ts +220 -0
- package/src/tool/forensic-blood-test-simulator/i18n/ko.ts +220 -0
- package/src/tool/forensic-blood-test-simulator/i18n/nl.ts +220 -0
- package/src/tool/forensic-blood-test-simulator/i18n/pl.ts +220 -0
- package/src/tool/forensic-blood-test-simulator/i18n/pt.ts +220 -0
- package/src/tool/forensic-blood-test-simulator/i18n/ru.ts +220 -0
- package/src/tool/forensic-blood-test-simulator/i18n/sv.ts +220 -0
- package/src/tool/forensic-blood-test-simulator/i18n/tr.ts +220 -0
- package/src/tool/forensic-blood-test-simulator/i18n/zh.ts +220 -0
- package/src/tool/forensic-blood-test-simulator/index.ts +11 -0
- package/src/tool/forensic-blood-test-simulator/logic.ts +174 -0
- package/src/tool/forensic-blood-test-simulator/script.ts +192 -0
- package/src/tool/forensic-blood-test-simulator/seo.astro +15 -0
- package/src/tool/forensic-fiber-comparison-microscope/bibliography.astro +6 -0
- package/src/tool/forensic-fiber-comparison-microscope/bibliography.ts +16 -0
- package/src/tool/forensic-fiber-comparison-microscope/component.astro +146 -0
- package/src/tool/forensic-fiber-comparison-microscope/entry.ts +32 -0
- package/src/tool/forensic-fiber-comparison-microscope/forensic-fiber-comparison-microscope.css +629 -0
- package/src/tool/forensic-fiber-comparison-microscope/i18n/de.ts +250 -0
- package/src/tool/forensic-fiber-comparison-microscope/i18n/en.ts +246 -0
- package/src/tool/forensic-fiber-comparison-microscope/i18n/es.ts +246 -0
- package/src/tool/forensic-fiber-comparison-microscope/i18n/fr.ts +246 -0
- package/src/tool/forensic-fiber-comparison-microscope/i18n/id.ts +250 -0
- package/src/tool/forensic-fiber-comparison-microscope/i18n/it.ts +246 -0
- package/src/tool/forensic-fiber-comparison-microscope/i18n/ja.ts +250 -0
- package/src/tool/forensic-fiber-comparison-microscope/i18n/ko.ts +246 -0
- package/src/tool/forensic-fiber-comparison-microscope/i18n/nl.ts +246 -0
- package/src/tool/forensic-fiber-comparison-microscope/i18n/pl.ts +250 -0
- package/src/tool/forensic-fiber-comparison-microscope/i18n/pt.ts +250 -0
- package/src/tool/forensic-fiber-comparison-microscope/i18n/ru.ts +250 -0
- package/src/tool/forensic-fiber-comparison-microscope/i18n/sv.ts +250 -0
- package/src/tool/forensic-fiber-comparison-microscope/i18n/tr.ts +246 -0
- package/src/tool/forensic-fiber-comparison-microscope/i18n/zh.ts +250 -0
- package/src/tool/forensic-fiber-comparison-microscope/index.ts +11 -0
- package/src/tool/forensic-fiber-comparison-microscope/logic.ts +244 -0
- package/src/tool/forensic-fiber-comparison-microscope/render.ts +265 -0
- package/src/tool/forensic-fiber-comparison-microscope/seo.astro +15 -0
- package/src/tool/forensic-fiber-comparison-microscope/view.ts +267 -0
- package/src/tool/forensic-glass-becke-line-simulator/bibliography.astro +6 -0
- package/src/tool/forensic-glass-becke-line-simulator/bibliography.ts +16 -0
- package/src/tool/forensic-glass-becke-line-simulator/component.astro +81 -0
- package/src/tool/forensic-glass-becke-line-simulator/entry.ts +32 -0
- package/src/tool/forensic-glass-becke-line-simulator/forensic-glass-becke-line-simulator.css +392 -0
- package/src/tool/forensic-glass-becke-line-simulator/i18n/de.ts +231 -0
- package/src/tool/forensic-glass-becke-line-simulator/i18n/en.ts +231 -0
- package/src/tool/forensic-glass-becke-line-simulator/i18n/es.ts +231 -0
- package/src/tool/forensic-glass-becke-line-simulator/i18n/fr.ts +231 -0
- package/src/tool/forensic-glass-becke-line-simulator/i18n/id.ts +231 -0
- package/src/tool/forensic-glass-becke-line-simulator/i18n/it.ts +231 -0
- package/src/tool/forensic-glass-becke-line-simulator/i18n/ja.ts +231 -0
- package/src/tool/forensic-glass-becke-line-simulator/i18n/ko.ts +231 -0
- package/src/tool/forensic-glass-becke-line-simulator/i18n/nl.ts +231 -0
- package/src/tool/forensic-glass-becke-line-simulator/i18n/pl.ts +231 -0
- package/src/tool/forensic-glass-becke-line-simulator/i18n/pt.ts +231 -0
- package/src/tool/forensic-glass-becke-line-simulator/i18n/ru.ts +231 -0
- package/src/tool/forensic-glass-becke-line-simulator/i18n/sv.ts +231 -0
- package/src/tool/forensic-glass-becke-line-simulator/i18n/tr.ts +231 -0
- package/src/tool/forensic-glass-becke-line-simulator/i18n/zh.ts +231 -0
- package/src/tool/forensic-glass-becke-line-simulator/index.ts +11 -0
- package/src/tool/forensic-glass-becke-line-simulator/logic.ts +100 -0
- package/src/tool/forensic-glass-becke-line-simulator/seo.astro +15 -0
- package/src/tool/forensic-glass-becke-line-simulator/view.ts +281 -0
- package/src/tool/forensic-image-authenticity-analyzer/bibliography.astro +9 -0
- package/src/tool/forensic-image-authenticity-analyzer/bibliography.ts +7 -0
- package/src/tool/forensic-image-authenticity-analyzer/component.astro +250 -0
- package/src/tool/forensic-image-authenticity-analyzer/entry.ts +29 -0
- package/src/tool/forensic-image-authenticity-analyzer/forensic-image-metadata-authenticity-analyzer.css +679 -0
- package/src/tool/forensic-image-authenticity-analyzer/i18n/de.ts +105 -0
- package/src/tool/forensic-image-authenticity-analyzer/i18n/en.ts +105 -0
- package/src/tool/forensic-image-authenticity-analyzer/i18n/es.ts +105 -0
- package/src/tool/forensic-image-authenticity-analyzer/i18n/fr.ts +105 -0
- package/src/tool/forensic-image-authenticity-analyzer/i18n/id.ts +76 -0
- package/src/tool/forensic-image-authenticity-analyzer/i18n/it.ts +105 -0
- package/src/tool/forensic-image-authenticity-analyzer/i18n/ja.ts +72 -0
- package/src/tool/forensic-image-authenticity-analyzer/i18n/ko.ts +72 -0
- package/src/tool/forensic-image-authenticity-analyzer/i18n/nl.ts +75 -0
- package/src/tool/forensic-image-authenticity-analyzer/i18n/pl.ts +75 -0
- package/src/tool/forensic-image-authenticity-analyzer/i18n/pt.ts +105 -0
- package/src/tool/forensic-image-authenticity-analyzer/i18n/ru.ts +75 -0
- package/src/tool/forensic-image-authenticity-analyzer/i18n/sv.ts +76 -0
- package/src/tool/forensic-image-authenticity-analyzer/i18n/tr.ts +76 -0
- package/src/tool/forensic-image-authenticity-analyzer/i18n/zh.ts +71 -0
- package/src/tool/forensic-image-authenticity-analyzer/index.ts +11 -0
- package/src/tool/forensic-image-authenticity-analyzer/logic.ts +283 -0
- package/src/tool/forensic-image-authenticity-analyzer/seo.astro +10 -0
- package/src/tool/forensic-microcrystal-drug-simulator/bibliography.astro +6 -0
- package/src/tool/forensic-microcrystal-drug-simulator/bibliography.ts +12 -0
- package/src/tool/forensic-microcrystal-drug-simulator/component.astro +240 -0
- package/src/tool/forensic-microcrystal-drug-simulator/entry.ts +32 -0
- package/src/tool/forensic-microcrystal-drug-simulator/forensic-microcrystal-drug-simulator.css +430 -0
- package/src/tool/forensic-microcrystal-drug-simulator/i18n/de.ts +244 -0
- package/src/tool/forensic-microcrystal-drug-simulator/i18n/en.ts +244 -0
- package/src/tool/forensic-microcrystal-drug-simulator/i18n/es.ts +244 -0
- package/src/tool/forensic-microcrystal-drug-simulator/i18n/fr.ts +244 -0
- package/src/tool/forensic-microcrystal-drug-simulator/i18n/id.ts +244 -0
- package/src/tool/forensic-microcrystal-drug-simulator/i18n/it.ts +244 -0
- package/src/tool/forensic-microcrystal-drug-simulator/i18n/ja.ts +244 -0
- package/src/tool/forensic-microcrystal-drug-simulator/i18n/ko.ts +244 -0
- package/src/tool/forensic-microcrystal-drug-simulator/i18n/nl.ts +244 -0
- package/src/tool/forensic-microcrystal-drug-simulator/i18n/pl.ts +244 -0
- package/src/tool/forensic-microcrystal-drug-simulator/i18n/pt.ts +244 -0
- package/src/tool/forensic-microcrystal-drug-simulator/i18n/ru.ts +244 -0
- package/src/tool/forensic-microcrystal-drug-simulator/i18n/sv.ts +244 -0
- package/src/tool/forensic-microcrystal-drug-simulator/i18n/tr.ts +244 -0
- package/src/tool/forensic-microcrystal-drug-simulator/i18n/zh.ts +244 -0
- package/src/tool/forensic-microcrystal-drug-simulator/index.ts +11 -0
- package/src/tool/forensic-microcrystal-drug-simulator/logic.ts +189 -0
- package/src/tool/forensic-microcrystal-drug-simulator/seo.astro +15 -0
- package/src/tool/forensic-sex-determinator/bibliography.astro +14 -0
- package/src/tool/forensic-sex-determinator/bibliography.ts +12 -0
- package/src/tool/forensic-sex-determinator/component.astro +463 -0
- package/src/tool/forensic-sex-determinator/entry.ts +32 -0
- package/src/tool/forensic-sex-determinator/forensic-sex-determinator.css +413 -0
- package/src/tool/forensic-sex-determinator/i18n/de.ts +211 -0
- package/src/tool/forensic-sex-determinator/i18n/en.ts +211 -0
- package/src/tool/forensic-sex-determinator/i18n/es.ts +211 -0
- package/src/tool/forensic-sex-determinator/i18n/fr.ts +211 -0
- package/src/tool/forensic-sex-determinator/i18n/id.ts +211 -0
- package/src/tool/forensic-sex-determinator/i18n/it.ts +211 -0
- package/src/tool/forensic-sex-determinator/i18n/ja.ts +211 -0
- package/src/tool/forensic-sex-determinator/i18n/ko.ts +211 -0
- package/src/tool/forensic-sex-determinator/i18n/nl.ts +211 -0
- package/src/tool/forensic-sex-determinator/i18n/pl.ts +211 -0
- package/src/tool/forensic-sex-determinator/i18n/pt.ts +211 -0
- package/src/tool/forensic-sex-determinator/i18n/ru.ts +211 -0
- package/src/tool/forensic-sex-determinator/i18n/sv.ts +211 -0
- package/src/tool/forensic-sex-determinator/i18n/tr.ts +211 -0
- package/src/tool/forensic-sex-determinator/i18n/zh.ts +211 -0
- package/src/tool/forensic-sex-determinator/index.ts +11 -0
- package/src/tool/forensic-sex-determinator/logic.ts +89 -0
- package/src/tool/forensic-sex-determinator/seo.astro +15 -0
- package/src/tool/forensic-stature-estimator/bibliography.astro +14 -0
- package/src/tool/forensic-stature-estimator/bibliography.ts +12 -0
- package/src/tool/forensic-stature-estimator/component.astro +49 -0
- package/src/tool/forensic-stature-estimator/components/EstimationPanel.astro +65 -0
- package/src/tool/forensic-stature-estimator/components/OsteometricBoard.astro +39 -0
- package/src/tool/forensic-stature-estimator/components/OsteometricSelector.astro +109 -0
- package/src/tool/forensic-stature-estimator/dom-utils.ts +71 -0
- package/src/tool/forensic-stature-estimator/entry.ts +32 -0
- package/src/tool/forensic-stature-estimator/forensic-stature-estimator.css +689 -0
- package/src/tool/forensic-stature-estimator/helpers.ts +51 -0
- package/src/tool/forensic-stature-estimator/i18n/de.ts +196 -0
- package/src/tool/forensic-stature-estimator/i18n/en.ts +196 -0
- package/src/tool/forensic-stature-estimator/i18n/es.ts +196 -0
- package/src/tool/forensic-stature-estimator/i18n/fr.ts +196 -0
- package/src/tool/forensic-stature-estimator/i18n/id.ts +196 -0
- package/src/tool/forensic-stature-estimator/i18n/it.ts +196 -0
- package/src/tool/forensic-stature-estimator/i18n/ja.ts +196 -0
- package/src/tool/forensic-stature-estimator/i18n/ko.ts +196 -0
- package/src/tool/forensic-stature-estimator/i18n/nl.ts +196 -0
- package/src/tool/forensic-stature-estimator/i18n/pl.ts +196 -0
- package/src/tool/forensic-stature-estimator/i18n/pt.ts +196 -0
- package/src/tool/forensic-stature-estimator/i18n/ru.ts +196 -0
- package/src/tool/forensic-stature-estimator/i18n/sv.ts +196 -0
- package/src/tool/forensic-stature-estimator/i18n/tr.ts +196 -0
- package/src/tool/forensic-stature-estimator/i18n/zh.ts +196 -0
- package/src/tool/forensic-stature-estimator/index.ts +11 -0
- package/src/tool/forensic-stature-estimator/logic.ts +119 -0
- package/src/tool/forensic-stature-estimator/script.ts +288 -0
- package/src/tool/forensic-stature-estimator/seo.astro +15 -0
- package/src/tool/forensic-tlc-ink-simulator/bibliography.astro +6 -0
- package/src/tool/forensic-tlc-ink-simulator/bibliography.ts +16 -0
- package/src/tool/forensic-tlc-ink-simulator/component.astro +245 -0
- package/src/tool/forensic-tlc-ink-simulator/entry.ts +32 -0
- package/src/tool/forensic-tlc-ink-simulator/forensic-tlc-ink-simulator.css +462 -0
- package/src/tool/forensic-tlc-ink-simulator/i18n/de.ts +243 -0
- package/src/tool/forensic-tlc-ink-simulator/i18n/en.ts +243 -0
- package/src/tool/forensic-tlc-ink-simulator/i18n/es.ts +243 -0
- package/src/tool/forensic-tlc-ink-simulator/i18n/fr.ts +243 -0
- package/src/tool/forensic-tlc-ink-simulator/i18n/id.ts +243 -0
- package/src/tool/forensic-tlc-ink-simulator/i18n/it.ts +243 -0
- package/src/tool/forensic-tlc-ink-simulator/i18n/ja.ts +235 -0
- package/src/tool/forensic-tlc-ink-simulator/i18n/ko.ts +235 -0
- package/src/tool/forensic-tlc-ink-simulator/i18n/nl.ts +243 -0
- package/src/tool/forensic-tlc-ink-simulator/i18n/pl.ts +243 -0
- package/src/tool/forensic-tlc-ink-simulator/i18n/pt.ts +243 -0
- package/src/tool/forensic-tlc-ink-simulator/i18n/ru.ts +243 -0
- package/src/tool/forensic-tlc-ink-simulator/i18n/sv.ts +243 -0
- package/src/tool/forensic-tlc-ink-simulator/i18n/tr.ts +243 -0
- package/src/tool/forensic-tlc-ink-simulator/i18n/zh.ts +235 -0
- package/src/tool/forensic-tlc-ink-simulator/index.ts +11 -0
- package/src/tool/forensic-tlc-ink-simulator/logic.ts +152 -0
- package/src/tool/forensic-tlc-ink-simulator/seo.astro +15 -0
- package/src/tool/gsr-dispersion-calculator/bibliography.astro +6 -0
- package/src/tool/gsr-dispersion-calculator/bibliography.ts +16 -0
- package/src/tool/gsr-dispersion-calculator/component.astro +294 -0
- package/src/tool/gsr-dispersion-calculator/entry.ts +32 -0
- package/src/tool/gsr-dispersion-calculator/gsr-dispersion-calculator.css +305 -0
- package/src/tool/gsr-dispersion-calculator/i18n/de.ts +272 -0
- package/src/tool/gsr-dispersion-calculator/i18n/en.ts +272 -0
- package/src/tool/gsr-dispersion-calculator/i18n/es.ts +272 -0
- package/src/tool/gsr-dispersion-calculator/i18n/fr.ts +272 -0
- package/src/tool/gsr-dispersion-calculator/i18n/id.ts +272 -0
- package/src/tool/gsr-dispersion-calculator/i18n/it.ts +272 -0
- package/src/tool/gsr-dispersion-calculator/i18n/ja.ts +272 -0
- package/src/tool/gsr-dispersion-calculator/i18n/ko.ts +272 -0
- package/src/tool/gsr-dispersion-calculator/i18n/nl.ts +272 -0
- package/src/tool/gsr-dispersion-calculator/i18n/pl.ts +272 -0
- package/src/tool/gsr-dispersion-calculator/i18n/pt.ts +272 -0
- package/src/tool/gsr-dispersion-calculator/i18n/ru.ts +272 -0
- package/src/tool/gsr-dispersion-calculator/i18n/sv.ts +272 -0
- package/src/tool/gsr-dispersion-calculator/i18n/tr.ts +272 -0
- package/src/tool/gsr-dispersion-calculator/i18n/zh.ts +272 -0
- package/src/tool/gsr-dispersion-calculator/index.ts +11 -0
- package/src/tool/gsr-dispersion-calculator/logic.ts +148 -0
- package/src/tool/gsr-dispersion-calculator/seo.astro +15 -0
- package/src/tool/widmark-alcohol-simulator/bibliography.astro +14 -0
- package/src/tool/widmark-alcohol-simulator/bibliography.ts +12 -0
- package/src/tool/widmark-alcohol-simulator/component.astro +453 -0
- package/src/tool/widmark-alcohol-simulator/entry.ts +32 -0
- package/src/tool/widmark-alcohol-simulator/i18n/de.ts +193 -0
- package/src/tool/widmark-alcohol-simulator/i18n/en.ts +206 -0
- package/src/tool/widmark-alcohol-simulator/i18n/es.ts +193 -0
- package/src/tool/widmark-alcohol-simulator/i18n/fr.ts +193 -0
- package/src/tool/widmark-alcohol-simulator/i18n/id.ts +193 -0
- package/src/tool/widmark-alcohol-simulator/i18n/it.ts +193 -0
- package/src/tool/widmark-alcohol-simulator/i18n/ja.ts +193 -0
- package/src/tool/widmark-alcohol-simulator/i18n/ko.ts +193 -0
- package/src/tool/widmark-alcohol-simulator/i18n/nl.ts +193 -0
- package/src/tool/widmark-alcohol-simulator/i18n/pl.ts +193 -0
- package/src/tool/widmark-alcohol-simulator/i18n/pt.ts +193 -0
- package/src/tool/widmark-alcohol-simulator/i18n/ru.ts +193 -0
- package/src/tool/widmark-alcohol-simulator/i18n/sv.ts +193 -0
- package/src/tool/widmark-alcohol-simulator/i18n/tr.ts +193 -0
- package/src/tool/widmark-alcohol-simulator/i18n/zh.ts +193 -0
- package/src/tool/widmark-alcohol-simulator/index.ts +11 -0
- package/src/tool/widmark-alcohol-simulator/logic.ts +97 -0
- package/src/tool/widmark-alcohol-simulator/seo.astro +15 -0
- package/src/tool/widmark-alcohol-simulator/widmark-alcohol-simulator.css +386 -0
- package/src/tools.ts +27 -0
- package/src/types.ts +70 -0
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
|
|
4
|
+
const slug = 'schiessrueckstand-verteilung-abstand-rechner-gsr';
|
|
5
|
+
const title = 'GSR Schiessrückstand Abstandsrechner';
|
|
6
|
+
const description = 'Simulieren Sie didaktische Verteilungsmuster von Schiessrückständen auf einer Zieloberfläche basierend auf Schussdistanz, Munitionstyp, Partikelstreuung und Sengwirkung.';
|
|
7
|
+
|
|
8
|
+
const howTo = [
|
|
9
|
+
{
|
|
10
|
+
name: 'Schussdistanz einstellen',
|
|
11
|
+
text: 'Verschieben Sie den Distanzregler von direktem Kontakt bis auf drei Meter und beobachten Sie, wie sich die Ablagerung von einem kompakten, thermisch veränderten Bereich in ein breites, loses Partikelfeld verwandelt.',
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: 'Aktivieren Sie ein Munitionsprofil',
|
|
15
|
+
text: 'Wählen Sie ein Profil für 9-mm-Pistole, .38-Revolver oder 12-Gauge-Schrotflinte. Jedes Profil ändert die Partikelanzahl, den Streukoeffizienten und die geschätzte thermische Reichweite.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
name: 'Zielscheibe und Ausbreitungskegel prüfen',
|
|
19
|
+
text: 'Nutzen Sie die Gewebedarstellung, um Partikeldichte und radiale Verteilung zu vergleichen, und den Seitenkegel, um die physikalische Ausdehnung der Partikelwolke vor dem Aufprall zu verstehen.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'Ergebnis der Distanzkategorie deuten',
|
|
23
|
+
text: 'Prüfen Sie die ermittelte Bereichskategorie und die typischen Befunde. Das Ergebnis beschreibt die didaktische Bedeutung von Kontakt-, Nahkontakt-, Nahbereichs- und Fernschussmustern.',
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const faq = [
|
|
28
|
+
{
|
|
29
|
+
key: 'faq-1',
|
|
30
|
+
question: 'Kann die Verteilung von Schiessrückständen die exakte Schussentfernung beweisen?',
|
|
31
|
+
answer: 'Nein. GSR-Muster unterstützen eine Schätzung des Entfernungsbereichs, keine zentimetergenaue Distanz. Reale Rückschlüsse erfordern die Untersuchung der spezifischen Waffe, der Munition, des Zielmaterials, des Winkels und vergleichende Testschüsse unter kontrollierten Bedingungen.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
key: 'faq-2',
|
|
35
|
+
question: 'Warum zeigen Kontaktschüsse stärkere Verrußungen und Verbrennungen?',
|
|
36
|
+
answer: 'Bei sehr kurzen Distanzen treffen heiße Gase, Ruß, unverbranntes Pulver und metallische Zündsatzpartikel auf das Ziel, bevor sich die Wolke ausdehnen und abkühlen kann. Dies führt zu Schwärzung, Verschmorung, Geweberissen und Mündungsabdrücken.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
key: 'faq-3',
|
|
40
|
+
question: 'Welche Elemente werden typischerweise mit Zündmittel-GSR assoziiert?',
|
|
41
|
+
answer: 'Die klassische GSR-Analyse konzentriert sich auf Partikel, die Blei, Barium und Antimon enthalten, obwohl moderne bleifreie Munition dieses Profil verändern kann. REM-EDS-Verfahren bewerten die Partikelmorphologie und -chemie gemeinsam.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
key: 'faq-4',
|
|
45
|
+
question: 'Warum verwendet der Simulator ein Gaußsches Radialmodell?',
|
|
46
|
+
answer: 'Ein Gaußsches Modell ist eine nützliche didaktische Annäherung, da sich die meisten Partikel nahe dem Zentrum konzentrieren. Tatsächliche Muster können durch Wind, Schusswinkel, Waffenkonstruktion oder Gewebebeschaffenheit asymmetrisch sein.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
key: 'faq-5',
|
|
50
|
+
question: 'Eignet sich dieser Rechner für forensische Gutachten?',
|
|
51
|
+
answer: 'Nein. Es handelt sich um ein rein pädagogisches Modell. Ein forensisches Gutachten muss sich auf validierte Laborprotokolle, Qualitätskontrollen, Original-Testmuster und die Bewertung durch qualifizierte Sachverständige stützen.',
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
export const content: ToolLocaleContent = {
|
|
56
|
+
slug,
|
|
57
|
+
title,
|
|
58
|
+
description,
|
|
59
|
+
ui: {
|
|
60
|
+
distance: 'Schussdistanz',
|
|
61
|
+
units: 'Einheitensystem',
|
|
62
|
+
metric: 'Metrisch',
|
|
63
|
+
imperial: 'Imperial',
|
|
64
|
+
unitMeter: 'm',
|
|
65
|
+
unitCentimeter: 'cm',
|
|
66
|
+
unitFoot: 'ft',
|
|
67
|
+
unitInch: 'in',
|
|
68
|
+
ammo: 'Munitionsprofil',
|
|
69
|
+
ammoPistol9mm: '9-mm-Pistole',
|
|
70
|
+
ammoRevolver38: '.38-Revolver',
|
|
71
|
+
ammoShotgun12: '12-Gauge-Schrotflinte',
|
|
72
|
+
target: 'Zielgewebe',
|
|
73
|
+
cone: 'Rückstandswolke',
|
|
74
|
+
canvasAria: 'Partikelverteilung der Schiessrückstände auf dem Zielgewebe',
|
|
75
|
+
rangeStripAria: 'Entfernungskategorien',
|
|
76
|
+
category: 'Distanzinterpretation',
|
|
77
|
+
categoryContactLabel: 'Aufgesetzter Schuss / Kontaktbereich',
|
|
78
|
+
categoryNearContactLabel: 'Nahezu aufgesetzt / Verbrennungsbereich',
|
|
79
|
+
categoryCloseRangeLabel: 'Nahschuss / Pulvertätowierungsbereich',
|
|
80
|
+
categoryDistantLabel: 'Fernschuss oder unbestimmte Distanz',
|
|
81
|
+
density: 'Partikeldichte',
|
|
82
|
+
thermal: 'Thermischer Effekt',
|
|
83
|
+
radius: 'Geschätzter Musterradius',
|
|
84
|
+
radiusSuffix: 'Radius',
|
|
85
|
+
expected: 'Erwarteter Befund',
|
|
86
|
+
expectedContact: 'Es werden eine dichte zentrale Ablagerung, das Risiko eines Mündungsabdrucks, Rußschwärzung, Geweberisse und thermische Veränderungen im Zielbereich erwartet.',
|
|
87
|
+
expectedNearContact: 'Starker Ruß und Schmauchpartikel bleiben um den Einschussbereich konzentriert, mit einem sichtbaren, aber noch kompakten radialen Hof.',
|
|
88
|
+
expectedCloseRange: 'Die Pulvertätowierung und metallische Rückstände weiten sich zu einem messbaren Ring aus; thermische Effekte und Ruß lassen spürbar nach.',
|
|
89
|
+
expectedDistant: 'Die Partikel sind spärlich und weit verstreut. Eine Entfernungsbestimmung erfordert chemische Analysen und Vergleichsschüsse unter gleichen Bedingungen.',
|
|
90
|
+
contact: 'Kontakt',
|
|
91
|
+
near: 'Nahkontakt',
|
|
92
|
+
close: 'Nahbereich',
|
|
93
|
+
distant: 'Fernschuss',
|
|
94
|
+
disclaimer: 'Pädagogisches Modell. Die GSR-Entfernungsbestimmung erfordert kontrollierte Testschüsse, den Vergleich von Zielmaterialien und validierte chemische Nachweise.',
|
|
95
|
+
},
|
|
96
|
+
seo: [
|
|
97
|
+
{
|
|
98
|
+
type: 'title',
|
|
99
|
+
text: 'Schussentfernungsbestimmung anhand von GSR-Schiessrückstandsmustern',
|
|
100
|
+
level: 2,
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
type: 'diagnostic',
|
|
104
|
+
variant: 'info',
|
|
105
|
+
icon: 'mdi:target-variant',
|
|
106
|
+
badge: 'Didaktisches Modell',
|
|
107
|
+
title: 'Was dieser Rechner beantwortet',
|
|
108
|
+
html: 'Dieser GSR-Distanzrechner veranschaulicht, ob ein Schmauchmuster einem Kontaktschuss, einem Nahkontakt, einem Nahschuss oder einem Fernschuss entspricht. Er dient dem Verständnis der <strong>Schussentfernungsbestimmung</strong> und ersetzt kein forensisches Gutachten.',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: 'stats',
|
|
112
|
+
columns: 4,
|
|
113
|
+
items: [
|
|
114
|
+
{ value: '0-3 m', label: 'simulierte Mündungs-Ziel-Distanz', icon: 'mdi:ruler' },
|
|
115
|
+
{ value: '4', label: 'erklärte Entfernungskategorien', icon: 'mdi:crosshairs-question' },
|
|
116
|
+
{ value: '3', label: 'verglichene Munitionsprofile', icon: 'mdi:ammunition' },
|
|
117
|
+
{ value: '2', label: 'Einheitensysteme: Metrisch und Imperial', icon: 'mdi:swap-horizontal' },
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
type: 'title',
|
|
122
|
+
text: 'So interpretieren Sie das simulierte Muster',
|
|
123
|
+
level: 3,
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
type: 'summary',
|
|
127
|
+
title: 'Checkliste zur Schnellentwertung',
|
|
128
|
+
items: [
|
|
129
|
+
'Dichter zentraler Ruß, Verbrennungen, Risse oder ein Mündungsabdruck deuten auf einen aufgesetzten oder nahezu aufgesetzten Schuss hin.',
|
|
130
|
+
'Ein kompakter dunkler Kern mit umgebenden Pulverkörnern spricht für eine sehr kurze Distanz; Testschüsse sind zur Eingrenzung nötig.',
|
|
131
|
+
'Verstreute Pulvertätowierung ohne Ruß passt meist zu einem Nahschuss außerhalb der thermischen Reichweite.',
|
|
132
|
+
'Spärliche sichtbare Rückstände beweisen nicht das Fehlen von GSR; chemische Analysen oder Mikroskopie können Partikel dennoch nachweisen.',
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'comparative',
|
|
137
|
+
columns: 2,
|
|
138
|
+
items: [
|
|
139
|
+
{
|
|
140
|
+
title: 'Wobei das Tool hilft',
|
|
141
|
+
icon: 'mdi:check-circle-outline',
|
|
142
|
+
highlight: true,
|
|
143
|
+
description: 'Es veranschaulicht den Zusammenhang zwischen Schussdistanz, Schmauchdichte, Partikelverteilung und Hitzeeffekten.',
|
|
144
|
+
points: ['Unterrichts-Demonstration', 'Erklärung der Suchintention', 'Fachbegriffe der Forensik', 'Vergleich von Einheiten'],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
title: 'Was es nicht beweisen kann',
|
|
148
|
+
icon: 'mdi:alert-circle-outline',
|
|
149
|
+
description: 'Es kann die tatsächliche Schussdistanz in einem echten Fall nicht ohne physische Spuren und Validierung bestimmen.',
|
|
150
|
+
points: ['Keine Beweismittel-Uploads', 'Kein chemischer Nachweis', 'Kein waffenspezifisches Testmuster', 'Keine rechtliche Beweiskraft'],
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
type: 'table',
|
|
156
|
+
headers: ['Häufige Frage', 'Schlüsselmerkmal im Muster', 'Fachliche Antwort'],
|
|
157
|
+
rows: [
|
|
158
|
+
['Wie sieht ein aufgesetzter Schuss aus?', 'Dichter Ruß, Verbrennung, Risse, Gewebeverschmelzung oder Mündungsabdruck.', 'Ein Kontaktschuss ist plausibel, aber Gasausdehnung und Gewebespannung beeinflussen das Erscheinungsbild stark.'],
|
|
159
|
+
['Wie nah war die Waffe?', 'Dichte Rückstände nahe dem Einschuss mit einem kompakten Pulverhof.', 'Das Muster stützt eine Entfernungshypothese, erfordert jedoch den Abgleich mit Testschüssen.'],
|
|
160
|
+
['Was ist eine Pulvertätowierung?', 'Punktförmige Spuren durch unverbrannte Pulverkörner mit wenig Ruß.', 'Die Verteilung variiert je nach Munition, Textilart, Schusswinkel und Zwischenbarrieren.'],
|
|
161
|
+
['Verschwindet GSR bei größerer Distanz?', 'Sehr spärliche oder keine sichtbaren Rückstände, weite Verteilung.', 'Sichtbare Spuren nehmen ab, Zündsatzpartikel können jedoch mikroskopisch nachgewiesen werden.'],
|
|
162
|
+
],
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
type: 'title',
|
|
166
|
+
text: 'Physikalische Berechnung des Modells',
|
|
167
|
+
level: 3,
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
type: 'paragraph',
|
|
171
|
+
html: 'Der Simulator nutzt eine mathematisch präzise radiale Gauß-Verteilung, um die Schmauchpartikel und Rückstände um das Einschusszentrum herum auf eine realistische und zufällige Weise zu platzieren. Sehr kurze Mündungs-Ziel-Distanzen erzeugen eine äußerst enge, konzentrierte und hochdichte Ablagerung der Schiessrückstände im unmittelbaren Zentrum; größere Entfernungen vergrößern die radiale Streuung der Partikel im Raum signifikant und verringern dadurch die durchschnittliche Dichte pro Quadratzentimeter auf der Gewebeoberfläche. Das Berechnungsmodell trennt zudem feine Rußablagerungen systematisch von den schwereren, metallischen Partikeln des Zündsatzes, da die thermische Sengwirkung und das Rußfeld eine wesentlich geringere physikalische Reichweite besitzen als die mikroskopisch nachweisbaren metallischen Rückstände. Diese visuelle Simulation bietet somit eine wertvolle didaktische Grundlage für das Verständnis forensischer Spurenanalysen.',
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
type: 'glossary',
|
|
175
|
+
items: [
|
|
176
|
+
{ term: 'GSR', definition: 'Schiessrückstände (Gunshot Residue): Partikel aus Zündsatz, Treibladungspulver, Projektil und heißen Gasen.' },
|
|
177
|
+
{ term: 'Rußschwärzung', definition: 'Dunkler Kohlenstoffniederschlag, der meist nur bei aufgesetzten und sehr nahen Schüssen sichtbar ist.' },
|
|
178
|
+
{ term: 'Pulvertätowierung', definition: 'Kleine, punktförmige Hauteinschläge oder Schmauchspuren durch unverbranntes Pulver.' },
|
|
179
|
+
{ term: 'Mündungsabdruck', definition: 'Abdruck der Mündung auf der Zieloberfläche durch den Druck und die Hitze beim aufgesetzten Schuss.' },
|
|
180
|
+
{ term: 'Vergleichsschuss', definition: 'Kontrollierte Schüsse aus bekannter Distanz mit Tatwaffe und Originalmunition zur Spurenbewertung.' },
|
|
181
|
+
],
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
type: 'title',
|
|
185
|
+
text: 'Entfernungsklassen und typische Befunde',
|
|
186
|
+
level: 3,
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
type: 'table',
|
|
190
|
+
headers: ['Bereichsklasse', 'Typische Befunde', 'Einschränkung der Interpretation'],
|
|
191
|
+
rows: [
|
|
192
|
+
['Kontakt', 'Massive zentrale Ablagerung, Ruß, Verbrennung, Risse oder Mündungsabdruck.', 'Gewebeart und Gasausdehnung können den Defekt stark verändern.'],
|
|
193
|
+
['Nahkontakt', 'Kompakter Ruß- und Pulverhof um die Einschussstelle.', 'Lockere Kleidung oder Zwischenobjekte können das Verteilungsmuster beeinflussen.'],
|
|
194
|
+
['Nahbereich', 'Pulvertätowierung, Schmauchpartikel ohne wesentliche Rußbildung.', 'Dieselbe Distanz zeigt auf Baumwolle, Denim, Haut oder Papier unterschiedliche Muster.'],
|
|
195
|
+
['Fernschuss', 'Vereinzelte Partikel, weite Streuung oder keine makroskopischen Spuren.', 'Mikroskopische und chemische Nachweise gewinnen bei schwindenden sichtbaren Spuren an Bedeutung.'],
|
|
196
|
+
],
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
type: 'tip',
|
|
200
|
+
title: 'Praktischer Auswertungskurs',
|
|
201
|
+
html: 'Betrachten Sie GSR-Spuren stets als ein <strong>Vergleichsproblem von Entfernungsbereichen</strong> und nicht als absoluten Zahlenwert. Eine wissenschaftliche Aussage erfordert stets den Abgleich mit Testmustern unter identischen Bedingungen.',
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
type: 'title',
|
|
205
|
+
text: 'Dokumentations-Checkliste vor der Musterbewertung',
|
|
206
|
+
level: 3,
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
type: 'list',
|
|
210
|
+
icon: 'mdi:clipboard-check-outline',
|
|
211
|
+
items: [
|
|
212
|
+
'Zielmaterial, Webart, Farbe, Dicke und eventuelle Gewebespannungen oder Falten dokumentieren.',
|
|
213
|
+
'Waffenmodell, Lauflänge, Munitionsmarke, Pulverart und Mündungsaufsätze erfassen.',
|
|
214
|
+
'Muster mit Maßstab, Ausrichtung, Lichtverhältnissen und Angaben zur Asservatenkette fotografieren.',
|
|
215
|
+
'Separat nach Ruß, Verschmorung, unverbranntem Pulver, Abstreifring und Geweberissen suchen.',
|
|
216
|
+
'Vor einer gutachterlichen Distanzzuordnung stets kontrollierte Vergleichsschüsse durchführen.',
|
|
217
|
+
],
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
type: 'proscons',
|
|
221
|
+
title: 'Digitale Simulation vs. forensische Laboranalyse',
|
|
222
|
+
items: [
|
|
223
|
+
{ pro: 'Veranschaulicht die Zunahme der Partikelstreuung mit wachsender Schussdistanz.', con: 'Berücksichtigt keine waffen-, munitions- oder materialspezifischen Abweichungen.' },
|
|
224
|
+
{ pro: 'Verdeutlicht die Unterschiede der etablierten Distanzkategorien.', con: 'Ersetzt keine chemischen Nachweisverfahren oder Rasterelektronenmikroskopie (REM-EDS).' },
|
|
225
|
+
{ pro: 'Schärft das Verständnis für die Grenzen der rein visuellen Musteranalyse.', con: 'Besitzt ohne laborübliche Validierung und Sachverständigenprüfung keine Beweiskraft.' },
|
|
226
|
+
],
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
type: 'diagnostic',
|
|
230
|
+
variant: 'warning',
|
|
231
|
+
icon: 'mdi:scale-balance',
|
|
232
|
+
badge: 'Forensische Warnung',
|
|
233
|
+
title: 'Ausschluss der gutachterlichen Verwendung',
|
|
234
|
+
html: 'Ein Webmodell kann die physikalischen Beweise eines echten Falls nicht ersetzen. Es kann weder den Waffenzustand, die Pulverchemie, Zwischenhindernisse noch die Qualität der Spurensicherung bewerten. Nutzen Sie diese Seite ausschließlich zu Lehrzwecken und wenden Sie sich für echte Untersuchungen an akkreditierte Labore.',
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
faq,
|
|
238
|
+
bibliography,
|
|
239
|
+
howTo,
|
|
240
|
+
schemas: [
|
|
241
|
+
{
|
|
242
|
+
'@context': 'https://schema.org',
|
|
243
|
+
'@type': 'SoftwareApplication',
|
|
244
|
+
name: title,
|
|
245
|
+
description,
|
|
246
|
+
applicationCategory: 'ForensicApplication',
|
|
247
|
+
operatingSystem: 'Any',
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
'@context': 'https://schema.org',
|
|
251
|
+
'@type': 'FAQPage',
|
|
252
|
+
mainEntity: faq.map((item) => ({
|
|
253
|
+
'@type': 'Question',
|
|
254
|
+
name: item.question,
|
|
255
|
+
acceptedAnswer: {
|
|
256
|
+
'@type': 'Answer',
|
|
257
|
+
text: item.answer,
|
|
258
|
+
},
|
|
259
|
+
})),
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
'@context': 'https://schema.org',
|
|
263
|
+
'@type': 'HowTo',
|
|
264
|
+
name: title,
|
|
265
|
+
step: howTo.map((step) => ({
|
|
266
|
+
'@type': 'HowToStep',
|
|
267
|
+
name: step.name,
|
|
268
|
+
text: step.text,
|
|
269
|
+
})),
|
|
270
|
+
},
|
|
271
|
+
],
|
|
272
|
+
};
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
|
|
4
|
+
const slug = 'gsr-dispersion-calculator';
|
|
5
|
+
const title = 'GSR Dispersion Distance Calculator';
|
|
6
|
+
const description = 'Simulate educational gunshot residue dispersion patterns across a target surface using firing distance, ammunition type, density decay, soot deposition, and radial particle spread.';
|
|
7
|
+
|
|
8
|
+
const howTo = [
|
|
9
|
+
{
|
|
10
|
+
name: 'Set the muzzle-to-target distance',
|
|
11
|
+
text: 'Move the distance control from contact range to three meters and watch how the same discharge changes from a compact, thermally altered deposit into a broad, sparse residue field.',
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: 'Choose an ammunition profile',
|
|
15
|
+
text: 'Select a 9 mm pistol, .38 revolver, or 12 gauge shotgun profile. Each profile changes the particle count, spread multiplier, residue strength, and estimated thermal reach used by the simulation.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
name: 'Read the visual target and cone display',
|
|
19
|
+
text: 'Use the cloth target to compare particle density, central soot, and radial dispersion, then use the side cone to understand how the discharge plume expands before reaching the target plane.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'Interpret the range category',
|
|
23
|
+
text: 'Review the category label and expected findings. The result describes the educational meaning of contact, near-contact, close-range, and distant patterns without claiming a case-specific conclusion.',
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const faq = [
|
|
28
|
+
{
|
|
29
|
+
key: 'faq-1',
|
|
30
|
+
question: 'Can gunshot residue dispersion prove the exact shooting distance?',
|
|
31
|
+
answer: 'No. GSR patterns support a distance range estimate, not an exact distance. Real conclusions require the firearm, ammunition, target material, angle, environmental conditions, chemical testing, and comparison test shots under controlled conditions.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
key: 'faq-2',
|
|
35
|
+
question: 'Why do close shots show more soot and burning?',
|
|
36
|
+
answer: 'At very short distances, hot gases, soot, unburned powder, and metallic primer particles reach the target before the plume has expanded and cooled. This can create blackening, searing, tearing, muzzle imprinting, and dense central deposition.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
key: 'faq-3',
|
|
40
|
+
question: 'What elements are commonly associated with primer GSR?',
|
|
41
|
+
answer: 'Traditional primer residue analysis often focuses on particles containing lead, barium, and antimony, although lead-free and modern ammunition can alter the expected elemental profile. SEM-EDS methods evaluate particle morphology and chemistry together.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
key: 'faq-4',
|
|
45
|
+
question: 'Why does the simulator use a Gaussian radial model?',
|
|
46
|
+
answer: 'A Gaussian-like radial model is a useful teaching approximation because many particles cluster near the center of the plume while fewer reach the outer field. Actual discharge patterns can be asymmetric due to weapon design, ammunition, target angle, fabric weave, and intermediate barriers.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
key: 'faq-5',
|
|
50
|
+
question: 'Is this calculator suitable for legal reporting?',
|
|
51
|
+
answer: 'No. It is an educational visualization. A forensic report should rely on validated laboratory protocols, quality controls, reference test patterns, documented uncertainty, and review by qualified examiners.',
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
export const content: ToolLocaleContent = {
|
|
56
|
+
slug,
|
|
57
|
+
title,
|
|
58
|
+
description,
|
|
59
|
+
ui: {
|
|
60
|
+
distance: 'Distance',
|
|
61
|
+
units: 'Unit system',
|
|
62
|
+
metric: 'Metric',
|
|
63
|
+
imperial: 'Imperial',
|
|
64
|
+
unitMeter: 'm',
|
|
65
|
+
unitCentimeter: 'cm',
|
|
66
|
+
unitFoot: 'ft',
|
|
67
|
+
unitInch: 'in',
|
|
68
|
+
ammo: 'Ammunition profile',
|
|
69
|
+
ammoPistol9mm: '9 mm pistol',
|
|
70
|
+
ammoRevolver38: '.38 revolver',
|
|
71
|
+
ammoShotgun12: '12 gauge shotgun',
|
|
72
|
+
target: 'Target cloth',
|
|
73
|
+
cone: 'Residue plume',
|
|
74
|
+
canvasAria: 'Gunshot residue particle dispersion on target cloth',
|
|
75
|
+
rangeStripAria: 'Distance categories',
|
|
76
|
+
category: 'Range interpretation',
|
|
77
|
+
categoryContactLabel: 'Contact / muzzle-to-target',
|
|
78
|
+
categoryNearContactLabel: 'Near-contact / close burn range',
|
|
79
|
+
categoryCloseRangeLabel: 'Close-range stippling field',
|
|
80
|
+
categoryDistantLabel: 'Distant or indeterminate range',
|
|
81
|
+
density: 'Particle density',
|
|
82
|
+
thermal: 'Thermal effect',
|
|
83
|
+
radius: 'Estimated pattern radius',
|
|
84
|
+
radiusSuffix: 'radius',
|
|
85
|
+
expected: 'Expected finding',
|
|
86
|
+
expectedContact: 'Dense central deposit, muzzle imprint risk, soot blackening, tearing, and thermal alteration are expected in the target zone.',
|
|
87
|
+
expectedNearContact: 'Heavy soot and stippling remain concentrated around the entry area, with a visible but still compact radial halo.',
|
|
88
|
+
expectedCloseRange: 'Powder tattooing and metallic residues widen into a measurable ring; soot and burning become progressively less reliable.',
|
|
89
|
+
expectedDistant: 'Particles are sparse and broadly dispersed; distance conclusions require chemical recovery, controls, and test firing under similar conditions.',
|
|
90
|
+
contact: 'Contact',
|
|
91
|
+
near: 'Near-contact',
|
|
92
|
+
close: 'Close range',
|
|
93
|
+
distant: 'Distant',
|
|
94
|
+
disclaimer: 'Educational model only. GSR distance determination requires controlled test firing, target material comparison, validated chemical methods, and expert interpretation.',
|
|
95
|
+
},
|
|
96
|
+
seo: [
|
|
97
|
+
{
|
|
98
|
+
type: 'title',
|
|
99
|
+
text: 'Gunshot Residue Distance Estimation from GSR Patterns',
|
|
100
|
+
level: 2,
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
type: 'diagnostic',
|
|
104
|
+
variant: 'info',
|
|
105
|
+
icon: 'mdi:target-variant',
|
|
106
|
+
badge: 'Educational model',
|
|
107
|
+
title: 'What this calculator answers',
|
|
108
|
+
html: 'This GSR distance calculator helps explain whether a residue pattern looks more like a contact shot, near-contact shot, close-range discharge, or distant/indeterminate pattern. It is built for learning and search intent around <strong>gunshot residue distance determination</strong>, not for issuing a case-specific forensic opinion.',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: 'stats',
|
|
112
|
+
columns: 4,
|
|
113
|
+
items: [
|
|
114
|
+
{ value: '0-3 m', label: 'simulated muzzle-to-target distance', icon: 'mdi:ruler' },
|
|
115
|
+
{ value: '4', label: 'range categories explained', icon: 'mdi:crosshairs-question' },
|
|
116
|
+
{ value: '3', label: 'ammunition profiles compared', icon: 'mdi:ammunition' },
|
|
117
|
+
{ value: '2', label: 'unit systems: metric and imperial', icon: 'mdi:swap-horizontal' },
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
type: 'title',
|
|
122
|
+
text: 'How to Read the Simulated Pattern',
|
|
123
|
+
level: 3,
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
type: 'summary',
|
|
127
|
+
title: 'Fast interpretation checklist',
|
|
128
|
+
items: [
|
|
129
|
+
'Dense central soot, burning, tearing, or a muzzle imprint points toward contact or near-contact range.',
|
|
130
|
+
'A compact dark center with surrounding powder grains suggests a short distance, but test shots are needed to narrow it.',
|
|
131
|
+
'Scattered stippling with little soot often fits close-range discharge after heat effects have faded.',
|
|
132
|
+
'Sparse visible residue does not prove no GSR is present; chemical recovery or microscopy may still matter.',
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'comparative',
|
|
137
|
+
columns: 2,
|
|
138
|
+
items: [
|
|
139
|
+
{
|
|
140
|
+
title: 'What the tool can help with',
|
|
141
|
+
icon: 'mdi:check-circle-outline',
|
|
142
|
+
highlight: true,
|
|
143
|
+
description: 'It visualizes the relationship between firing distance, residue density, particle spread, and thermal effects.',
|
|
144
|
+
points: ['Classroom demonstration', 'Search-intent explanation', 'Pattern vocabulary', 'Metric and imperial comparison'],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
title: 'What it cannot prove',
|
|
148
|
+
icon: 'mdi:alert-circle-outline',
|
|
149
|
+
description: 'It cannot identify the true firing distance in a real case without physical evidence and validation.',
|
|
150
|
+
points: ['No evidence upload', 'No chemical confirmation', 'No firearm-specific test pattern', 'No legal conclusion'],
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
type: 'table',
|
|
156
|
+
headers: ['Search question', 'Useful pattern clue', 'Careful answer'],
|
|
157
|
+
rows: [
|
|
158
|
+
['What does a contact gunshot look like?', 'Heavy soot, burning, tearing, searing, or possible muzzle imprint.', 'A contact interpretation may be plausible, but gas expansion and target material can dominate the appearance.'],
|
|
159
|
+
['How close was the gun?', 'Dense residue near the entry with a compact powder halo.', 'The pattern can support a range hypothesis, but comparison test firing is needed.'],
|
|
160
|
+
['What is close-range GSR?', 'Powder tattooing or stippling with less soot and weaker heat alteration.', 'Close-range signs vary with ammunition, fabric, angle, and intermediate barriers.'],
|
|
161
|
+
['Can GSR disappear at distance?', 'Little or no visible residue, with broad particle dispersion.', 'Visible signs may fade, but particles can still be detected by validated methods.'],
|
|
162
|
+
],
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
type: 'title',
|
|
166
|
+
text: 'What the Model Calculates',
|
|
167
|
+
level: 3,
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
type: 'paragraph',
|
|
171
|
+
html: 'The simulator uses a Gaussian-style radial distribution to place particles around the impact center. Short distances produce a narrow, dense deposit; longer distances increase the spread and reduce average density. The model also separates metallic primer-like particles from soot-like deposits because blackening and burning are usually more distance-limited than microscopic residue recovery.',
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
type: 'glossary',
|
|
175
|
+
items: [
|
|
176
|
+
{ term: 'GSR', definition: 'Gunshot residue: particles and deposits produced by primer, powder, projectile, lubricant, and hot gases during discharge.' },
|
|
177
|
+
{ term: 'Soot blackening', definition: 'Dark carbon-rich deposit that is usually most visible at contact and short ranges.' },
|
|
178
|
+
{ term: 'Stippling', definition: 'Small punctate marks or powder impacts caused by unburned or partially burned powder particles.' },
|
|
179
|
+
{ term: 'Muzzle imprint', definition: 'A mark that can occur when the firearm muzzle contacts or nearly contacts the target surface.' },
|
|
180
|
+
{ term: 'Test firing', definition: 'Controlled firing with known distances, firearm, ammunition, and target material to compare against questioned evidence.' },
|
|
181
|
+
],
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
type: 'title',
|
|
185
|
+
text: 'Range Categories and Expected Findings',
|
|
186
|
+
level: 3,
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
type: 'table',
|
|
190
|
+
headers: ['Range class', 'Common findings', 'Interpretation limit'],
|
|
191
|
+
rows: [
|
|
192
|
+
['Contact', 'Dense central deposit, soot blackening, burning, tearing, muzzle imprint, or gas effects.', 'Target construction and gas expansion can strongly alter the wound or material defect.'],
|
|
193
|
+
['Near-contact', 'Compact soot and powder halo around the entry area.', 'Loose clothing or an intermediate object can change the final residue pattern.'],
|
|
194
|
+
['Close range', 'Powder tattooing, stippling, or scattered particles with reduced soot.', 'The same distance can look different on cotton, denim, skin, paper, and synthetics.'],
|
|
195
|
+
['Distant', 'Sparse visible residue, broad dispersion, or no obvious surface pattern.', 'Microscopy and chemical collection become more important as visible signs weaken.'],
|
|
196
|
+
],
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
type: 'tip',
|
|
200
|
+
title: 'Practical interpretation tip',
|
|
201
|
+
html: 'Read GSR distance evidence as a <strong>range comparison problem</strong>, not a single-number calculator. A useful conclusion usually comes from comparing the questioned target with test patterns made under similar firearm, ammunition, target material, distance, and angle conditions.',
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
type: 'title',
|
|
205
|
+
text: 'Evidence Checklist Before Interpreting a Real Pattern',
|
|
206
|
+
level: 3,
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
type: 'list',
|
|
210
|
+
icon: 'mdi:clipboard-check-outline',
|
|
211
|
+
items: [
|
|
212
|
+
'Document the target material, weave, color, thickness, contamination risk, and whether the surface was folded or stretched.',
|
|
213
|
+
'Record firearm model, barrel length, ammunition brand, primer type, powder load, and any muzzle device or revolver cylinder gap.',
|
|
214
|
+
'Photograph the pattern with scale, orientation, lighting notes, and chain-of-custody context.',
|
|
215
|
+
'Look separately for soot, scorching, unburned powder, wipe rings, tearing, bullet defects, and intermediate-target effects.',
|
|
216
|
+
'Use controlled test firing before assigning a distance interval in evidentiary work.',
|
|
217
|
+
],
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
type: 'proscons',
|
|
221
|
+
title: 'Simulation vs. laboratory distance determination',
|
|
222
|
+
items: [
|
|
223
|
+
{ pro: 'Fast way to learn why residue spreads as distance increases.', con: 'Cannot account for the exact firearm, ammunition lot, target fabric, or impact angle.' },
|
|
224
|
+
{ pro: 'Shows why contact, near-contact, close-range, and distant categories are useful.', con: 'Does not replace microscopy, chemical analysis, or validated comparison patterns.' },
|
|
225
|
+
{ pro: 'Helps users understand the limits before over-reading a visual pattern.', con: 'Real reports require qualified examiners, controls, uncertainty, and documentation.' },
|
|
226
|
+
],
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
type: 'diagnostic',
|
|
230
|
+
variant: 'warning',
|
|
231
|
+
icon: 'mdi:scale-balance',
|
|
232
|
+
badge: 'Forensic caution',
|
|
233
|
+
title: 'Do not use this as a legal distance estimate',
|
|
234
|
+
html: 'A browser model cannot know the physical evidence. It cannot inspect clothing, skin, weapon design, ammunition chemistry, environmental conditions, intermediate barriers, or collection quality. Use this page to understand the science and vocabulary, then rely on validated laboratory procedures for real cases.',
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
faq,
|
|
238
|
+
bibliography,
|
|
239
|
+
howTo,
|
|
240
|
+
schemas: [
|
|
241
|
+
{
|
|
242
|
+
'@context': 'https://schema.org',
|
|
243
|
+
'@type': 'SoftwareApplication',
|
|
244
|
+
name: title,
|
|
245
|
+
description,
|
|
246
|
+
applicationCategory: 'ForensicApplication',
|
|
247
|
+
operatingSystem: 'Any',
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
'@context': 'https://schema.org',
|
|
251
|
+
'@type': 'FAQPage',
|
|
252
|
+
mainEntity: faq.map((item) => ({
|
|
253
|
+
'@type': 'Question',
|
|
254
|
+
name: item.question,
|
|
255
|
+
acceptedAnswer: {
|
|
256
|
+
'@type': 'Answer',
|
|
257
|
+
text: item.answer,
|
|
258
|
+
},
|
|
259
|
+
})),
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
'@context': 'https://schema.org',
|
|
263
|
+
'@type': 'HowTo',
|
|
264
|
+
name: title,
|
|
265
|
+
step: howTo.map((step) => ({
|
|
266
|
+
'@type': 'HowToStep',
|
|
267
|
+
name: step.name,
|
|
268
|
+
text: step.text,
|
|
269
|
+
})),
|
|
270
|
+
},
|
|
271
|
+
],
|
|
272
|
+
};
|