deped-entity 0.1.0__tar.gz
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.
- deped_entity-0.1.0/.cache/.gitignore +1 -0
- deped_entity-0.1.0/.cache/14804280189322764681 +4 -0
- deped_entity-0.1.0/.cache/15213489598760314030 +103 -0
- deped_entity-0.1.0/.cache/18015476762399707077 +164 -0
- deped_entity-0.1.0/.cache/3439116533652558517 +4 -0
- deped_entity-0.1.0/.cache/3476900567878811119 +4 -0
- deped_entity-0.1.0/.cache/7402831588586356091 +103 -0
- deped_entity-0.1.0/.cache/8945243497648010822 +118 -0
- deped_entity-0.1.0/.cache/9876085844515948168 +4 -0
- deped_entity-0.1.0/.github/workflows/ci.yml +35 -0
- deped_entity-0.1.0/.gitignore +12 -0
- deped_entity-0.1.0/.pre-commit-config.yaml +22 -0
- deped_entity-0.1.0/PKG-INFO +86 -0
- deped_entity-0.1.0/README.md +76 -0
- deped_entity-0.1.0/docs/build.md +77 -0
- deped_entity-0.1.0/docs/data-contract.md +111 -0
- deped_entity-0.1.0/docs/development.md +70 -0
- deped_entity-0.1.0/docs/index.md +56 -0
- deped_entity-0.1.0/env.example +1 -0
- deped_entity-0.1.0/justfile +32 -0
- deped_entity-0.1.0/pyproject.toml +40 -0
- deped_entity-0.1.0/src/deped_entity/__init__.py +1 -0
- deped_entity-0.1.0/src/deped_entity/catalog.py +113 -0
- deped_entity-0.1.0/src/deped_entity/cli.py +43 -0
- deped_entity-0.1.0/src/deped_entity/entities.py +511 -0
- deped_entity-0.1.0/src/deped_entity/schema.py +153 -0
- deped_entity-0.1.0/src/deped_entity/sql/__init__.py +0 -0
- deped_entity-0.1.0/src/deped_entity/sql/indexes/entities.sql +6 -0
- deped_entity-0.1.0/src/deped_entity/sql/pragmas.sql +3 -0
- deped_entity-0.1.0/src/deped_entity/sql/tables/build_runs.sql +12 -0
- deped_entity-0.1.0/src/deped_entity/sql/tables/entities.sql +23 -0
- deped_entity-0.1.0/src/deped_entity/sql/tables/entity_community.sql +7 -0
- deped_entity-0.1.0/src/deped_entity/sql/tables/entity_location_profiles.sql +8 -0
- deped_entity-0.1.0/src/deped_entity/sql/tables/entity_nearby_institutions.sql +5 -0
- deped_entity-0.1.0/src/deped_entity/sql/tables/entity_remoteness.sql +8 -0
- deped_entity-0.1.0/src/deped_entity/sql/tables/entity_road_conditions.sql +5 -0
- deped_entity-0.1.0/src/deped_entity/sql/tables/entity_transportation_modes.sql +5 -0
- deped_entity-0.1.0/src/deped_entity/sql/tables/institution_types.sql +5 -0
- deped_entity-0.1.0/src/deped_entity/sql/tables/road_condition_types.sql +5 -0
- deped_entity-0.1.0/src/deped_entity/sql/tables/transportation_mode_types.sql +5 -0
- deped_entity-0.1.0/src/deped_entity/types.py +6 -0
- deped_entity-0.1.0/tests/__init__.py +0 -0
- deped_entity-0.1.0/tests/conftest.py +151 -0
- deped_entity-0.1.0/tests/test_cli.py +28 -0
- deped_entity-0.1.0/tests/test_entities_build_integration.py +74 -0
- deped_entity-0.1.0/tests/test_entities_helpers.py +92 -0
- deped_entity-0.1.0/uv.lock +346 -0
- deped_entity-0.1.0/zensical.toml +34 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": "\n<!doctype html>\n<html lang=\"en\" class=\"no-js\">\n <head>\n \n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n \n <meta name=\"description\" content=\"Build and audit the canonical DepEd stakeholder entity SQLite artifact from StakeholderProfile workbooks.\">\n \n \n <meta name=\"author\" content=\"DepEd Entity maintainers\">\n \n \n \n <link rel=\"prev\" href=\"./..\">\n \n \n <link rel=\"next\" href=\"../data-contract/\">\n \n \n \n \n \n <link rel=\"icon\" href=\"../assets/images/favicon.png\">\n <meta name=\"generator\" content=\"zensical-0.0.31\">\n \n \n \n <title>Build Guide - DepEd Entity</title>\n \n \n \n \n \n \n <link rel=\"stylesheet\" href=\"../assets/stylesheets/modern/main.53a7feaf.min.css\">\n \n \n\n\n \n \n \n \n \n \n \n \n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Inter:300,300i,400,400i,500,500i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback\">\n <style>:root{--md-text-font:\"Inter\";--md-code-font:\"JetBrains Mono\"}</style>\n \n \n \n <script>__md_scope=new URL(\"..\",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+\".\"+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+\".\"+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute(\"data-platform\",navigator.platform)</script>\n \n \n\n \n \n </head>\n \n \n <body dir=\"ltr\">\n \n \n <input class=\"md-toggle\" data-md-toggle=\"drawer\" type=\"checkbox\" id=\"__drawer\" autocomplete=\"off\">\n <input class=\"md-toggle\" data-md-toggle=\"search\" type=\"checkbox\" id=\"__search\" autocomplete=\"off\">\n <label class=\"md-overlay\" for=\"__drawer\" aria-label=\"Navigation\"></label>\n <div data-md-component=\"skip\">\n \n \n <a href=\"#build-guide\" class=\"md-skip\">\n Skip to content\n </a>\n \n </div>\n <div data-md-component=\"announce\">\n \n </div>\n \n \n \n\n \n\n<header class=\"md-header md-header--shadow\" data-md-component=\"header\">\n <nav class=\"md-header__inner md-grid\" aria-label=\"Header\">\n <a href=\"./..\" title=\"DepEd Entity\" class=\"md-header__button md-logo\" aria-label=\"DepEd Entity\" data-md-component=\"logo\">\n \n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\n\n </a>\n <label class=\"md-header__button md-icon\" for=\"__drawer\" aria-label=\"Navigation\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-menu\" viewBox=\"0 0 24 24\"><path d=\"M4 5h16M4 12h16M4 19h16\"/></svg>\n </label>\n <div class=\"md-header__title\" data-md-component=\"header-title\">\n <div class=\"md-header__ellipsis\">\n <div class=\"md-header__topic\">\n <span class=\"md-ellipsis\">\n DepEd Entity\n </span>\n </div>\n <div class=\"md-header__topic\" data-md-component=\"header-topic\">\n <span class=\"md-ellipsis\">\n \n Build Guide\n \n </span>\n </div>\n </div>\n </div>\n \n \n <script>var palette=__md_get(\"__palette\");if(palette&&palette.color){if(\"(prefers-color-scheme)\"===palette.color.media){var media=matchMedia(\"(prefers-color-scheme: light)\"),input=document.querySelector(media.matches?\"[data-md-color-media='(prefers-color-scheme: light)']\":\"[data-md-color-media='(prefers-color-scheme: dark)']\");palette.color.media=input.getAttribute(\"data-md-color-media\"),palette.color.scheme=input.getAttribute(\"data-md-color-scheme\"),palette.color.primary=input.getAttribute(\"data-md-color-primary\"),palette.color.accent=input.getAttribute(\"data-md-color-accent\")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute(\"data-md-color-\"+key,value)}</script>\n \n \n \n \n \n <label class=\"md-header__button md-icon\" for=\"__search\" aria-label=\"Search\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-search\" viewBox=\"0 0 24 24\"><path d=\"m21 21-4.34-4.34\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/></svg>\n </label>\n <div class=\"md-search\" data-md-component=\"search\" role=\"dialog\" aria-label=\"Search\">\n <button type=\"button\" class=\"md-search__button\">\n Search\n </button>\n</div>\n \n \n <div class=\"md-header__source\">\n \n </div>\n </nav>\n \n</header>\n \n <div class=\"md-container\" data-md-component=\"container\">\n \n \n \n \n \n \n <main class=\"md-main\" data-md-component=\"main\">\n <div class=\"md-main__inner md-grid\">\n \n \n \n <div class=\"md-sidebar md-sidebar--primary\" data-md-component=\"sidebar\" data-md-type=\"navigation\" >\n <div class=\"md-sidebar__scrollwrap\">\n <div class=\"md-sidebar__inner\">\n \n\n\n\n<nav class=\"md-nav md-nav--primary\" aria-label=\"Navigation\" data-md-level=\"0\">\n <label class=\"md-nav__title\" for=\"__drawer\">\n <a href=\"./..\" title=\"DepEd Entity\" class=\"md-nav__button md-logo\" aria-label=\"DepEd Entity\" data-md-component=\"logo\">\n \n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\n\n </a>\n DepEd Entity\n </label>\n \n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"./..\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Overview\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--active\">\n \n \n \n \n \n \n \n <label class=\"md-nav__link md-nav__link--active\" for=\"__toc\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Build Guide\n \n\n \n </span>\n \n \n\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n <a href=\"././\" class=\"md-nav__link md-nav__link--active\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Build Guide\n \n\n \n </span>\n \n \n\n </a>\n \n \n\n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"On this page\">\n \n \n \n \n \n \n <label class=\"md-nav__title\" for=\"__toc\">\n <span class=\"md-nav__icon md-icon\"></span>\n On this page\n </label>\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\n \n <li class=\"md-nav__item\">\n <a href=\"#prerequisites\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Prerequisites\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#1-build-the-entity-database\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n 1. Build The Entity Database\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#2-audit-the-result\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n 2. Audit The Result\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#generated-files\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Generated Files\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#normalization-performed-during-build\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Normalization Performed During Build\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#failure-modes\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Failure Modes\n \n </span>\n </a>\n \n</li>\n \n </ul>\n \n</nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../data-contract/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Data Contract\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../development/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Development\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n </ul>\n</nav>\n </div>\n </div>\n </div>\n \n \n \n <div class=\"md-sidebar md-sidebar--secondary\" data-md-component=\"sidebar\" data-md-type=\"toc\" >\n <div class=\"md-sidebar__scrollwrap\">\n \n \n \n \n \n \n \n <input class=\"md-nav__toggle md-toggle\" type=\"checkbox\" id=\"__toc\">\n <div class=\"md-sidebar-button__wrapper\">\n <label class=\"md-sidebar-button\" for=\"__toc\"></label>\n </div>\n \n \n <div class=\"md-sidebar__inner\">\n \n\n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"On this page\">\n \n \n \n \n \n \n <label class=\"md-nav__title\" for=\"__toc\">\n <span class=\"md-nav__icon md-icon\"></span>\n On this page\n </label>\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\n \n <li class=\"md-nav__item\">\n <a href=\"#prerequisites\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Prerequisites\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#1-build-the-entity-database\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n 1. Build The Entity Database\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#2-audit-the-result\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n 2. Audit The Result\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#generated-files\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Generated Files\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#normalization-performed-during-build\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Normalization Performed During Build\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#failure-modes\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Failure Modes\n \n </span>\n </a>\n \n</li>\n \n </ul>\n \n</nav>\n </div>\n </div>\n </div>\n \n \n \n <div class=\"md-content\" data-md-component=\"content\">\n \n \n\n\n\n \n\n\n \n <article class=\"md-content__inner md-typeset\">\n \n \n\n<h1 id=\"build-guide\">Build Guide<a class=\"headerlink\" href=\"#build-guide\" title=\"Permanent link\">¶</a></h1>\n<p>This page covers the expected workflow for producing the entity artifact.</p>\n<h2 id=\"prerequisites\">Prerequisites<a class=\"headerlink\" href=\"#prerequisites\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li>Python 3.14+</li>\n<li><code>uv</code></li>\n<li>A stakeholder workbook with the expected <code>StakeholderProfile</code> headers</li>\n</ul>\n<h2 id=\"1-build-the-entity-database\">1. Build The Entity Database<a class=\"headerlink\" href=\"#1-build-the-entity-database\" title=\"Permanent link\">¶</a></h2>\n<p>Run the build from the repository root:</p>\n<div class=\"language-sh highlight\"><pre><span></span><code><span id=\"__span-0-1\"><a id=\"__codelineno-0-1\" name=\"__codelineno-0-1\" href=\"#__codelineno-0-1\"></a>uv<span class=\"w\"> </span>run<span class=\"w\"> </span>entity<span class=\"w\"> </span>build<span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-0-2\"><a id=\"__codelineno-0-2\" name=\"__codelineno-0-2\" href=\"#__codelineno-0-2\"></a><span class=\"w\"> </span>--input<span class=\"w\"> </span>data/2026-04-02-entities.xlsx<span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-0-3\"><a id=\"__codelineno-0-3\" name=\"__codelineno-0-3\" href=\"#__codelineno-0-3\"></a><span class=\"w\"> </span>--db<span class=\"w\"> </span>artifacts/entities.db\n</span></code></pre></div>\n<p>Arguments:</p>\n<ul>\n<li><code>--input</code>: source workbook path</li>\n<li><code>--db</code>: destination SQLite database path</li>\n</ul>\n<p>The command prints the output database path on success.</p>\n<h2 id=\"2-audit-the-result\">2. Audit The Result<a class=\"headerlink\" href=\"#2-audit-the-result\" title=\"Permanent link\">¶</a></h2>\n<p>Run the audit command after the build:</p>\n<div class=\"language-sh highlight\"><pre><span></span><code><span id=\"__span-1-1\"><a id=\"__codelineno-1-1\" name=\"__codelineno-1-1\" href=\"#__codelineno-1-1\"></a>uv<span class=\"w\"> </span>run<span class=\"w\"> </span>entity<span class=\"w\"> </span>audit<span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-1-2\"><a id=\"__codelineno-1-2\" name=\"__codelineno-1-2\" href=\"#__codelineno-1-2\"></a><span class=\"w\"> </span>--db<span class=\"w\"> </span>artifacts/entities.db\n</span></code></pre></div>\n<p>Current audit output includes:</p>\n<ul>\n<li><code>entities</code></li>\n<li><code>distinct_natural_keys</code></li>\n<li><code>rows_with_coordinates</code></li>\n<li><code>travel_time_parse_failures</code></li>\n<li><code>build_runs</code></li>\n</ul>\n<h2 id=\"generated-files\">Generated Files<a class=\"headerlink\" href=\"#generated-files\" title=\"Permanent link\">¶</a></h2>\n<p>The build produces:</p>\n<ul>\n<li><code>artifacts/entities.db</code></li>\n</ul>\n<p>The output database includes canonical entity rows, supporting detail tables,\nreference/junction tables, and build provenance.</p>\n<h2 id=\"normalization-performed-during-build\">Normalization Performed During Build<a class=\"headerlink\" href=\"#normalization-performed-during-build\" title=\"Permanent link\">¶</a></h2>\n<p>The build does more than copy workbook values verbatim. It also:</p>\n<ul>\n<li>resolves workbook columns by header text</li>\n<li>skips fully blank business-key rows</li>\n<li>derives <code>entity_type</code> and <code>natural_key</code> with shared helpers</li>\n<li>parses and normalizes coordinates conservatively</li>\n<li>normalizes travel time into minutes while retaining source text</li>\n<li>normalizes transportation aliases and backfills canonical transport modes</li>\n<li>records provenance and counts in <code>build_runs</code></li>\n</ul>\n<h2 id=\"failure-modes\">Failure Modes<a class=\"headerlink\" href=\"#failure-modes\" title=\"Permanent link\">¶</a></h2>\n<p>Common causes of build failure:</p>\n<ul>\n<li>Missing input files</li>\n<li>Missing or malformed required workbook headers</li>\n<li>Source rows without a valid <code>ID</code></li>\n<li>Environment issues that prevent <code>uv</code> from resolving dependencies</li>\n</ul>\n<p>If <code>uv run entity ...</code> fails before Python starts, verify the package entry\npoint in <code>pyproject.toml</code> and confirm your local environment can build the\nproject.</p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n </article>\n </div>\n \n \n <script>var tabs=__md_get(\"__tabs\");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(\".tabbed-set\")){var labels=set.querySelector(\".tabbed-labels\");for(var tab of tabs)for(var label of labels.getElementsByTagName(\"label\"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>\n\n<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith(\"__tabbed_\"))</script>\n </div>\n \n <button type=\"button\" class=\"md-top md-icon\" data-md-component=\"top\" hidden>\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-circle-arrow-up\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m16 12-4-4-4 4M12 16V8\"/></svg>\n Back to top\n</button>\n \n </main>\n \n <footer class=\"md-footer\">\n \n \n \n <nav class=\"md-footer__inner md-grid\" aria-label=\"Footer\" >\n \n \n <a href=\"./..\" class=\"md-footer__link md-footer__link--prev\" aria-label=\"Previous: Overview\">\n <div class=\"md-footer__button md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-arrow-left\" viewBox=\"0 0 24 24\"><path d=\"m12 19-7-7 7-7M19 12H5\"/></svg>\n </div>\n <div class=\"md-footer__title\">\n <span class=\"md-footer__direction\">\n Previous\n </span>\n <div class=\"md-ellipsis\">\n Overview\n </div>\n </div>\n </a>\n \n \n \n <a href=\"../data-contract/\" class=\"md-footer__link md-footer__link--next\" aria-label=\"Next: Data Contract\">\n <div class=\"md-footer__title\">\n <span class=\"md-footer__direction\">\n Next\n </span>\n <div class=\"md-ellipsis\">\n Data Contract\n </div>\n </div>\n <div class=\"md-footer__button md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-arrow-right\" viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"/></svg>\n </div>\n </a>\n \n </nav>\n \n \n <div class=\"md-footer-meta md-typeset\">\n <div class=\"md-footer-meta__inner md-grid\">\n <div class=\"md-copyright\">\n \n <div class=\"md-copyright__highlight\">\n Copyright © 2026 DepEd Entity maintainers\n\n </div>\n \n \n Made with\n <a href=\"https://zensical.org/\" target=\"_blank\" rel=\"noopener\">\n Zensical\n </a>\n \n</div>\n \n </div>\n </div>\n</footer>\n \n </div>\n <div class=\"md-dialog\" data-md-component=\"dialog\">\n <div class=\"md-dialog__inner md-typeset\"></div>\n </div>\n \n \n \n \n \n <script id=\"__config\" type=\"application/json\">{\"annotate\":null,\"base\":\"..\",\"features\":[\"announce.dismiss\",\"content.code.annotate\",\"content.code.copy\",\"content.code.select\",\"content.footnote.tooltips\",\"content.tabs.link\",\"content.tooltips\",\"navigation.footer\",\"navigation.indexes\",\"navigation.instant\",\"navigation.instant.prefetch\",\"navigation.path\",\"navigation.sections\",\"navigation.top\",\"navigation.tracking\",\"search.highlight\"],\"search\":\"../assets/javascripts/workers/search.e2d2d235.min.js\",\"tags\":null,\"translations\":{\"clipboard.copied\":\"Copied to clipboard\",\"clipboard.copy\":\"Copy to clipboard\",\"search.result.more.one\":\"1 more on this page\",\"search.result.more.other\":\"# more on this page\",\"search.result.none\":\"No matching documents\",\"search.result.one\":\"1 matching document\",\"search.result.other\":\"# matching documents\",\"search.result.placeholder\":\"Type to start searching\",\"search.result.term.missing\":\"Missing\",\"select.version\":\"Select version\"},\"version\":null}</script>\n \n \n <script src=\"../assets/javascripts/bundle.91a19a9e.min.js\"></script>\n \n \n </body>\n</html>",
|
|
3
|
+
"hash": 4730135583120297618
|
|
4
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": {
|
|
3
|
+
"meta": {},
|
|
4
|
+
"content": "<h1 id=\"deped-entity\">DepEd Entity<a class=\"headerlink\" href=\"#deped-entity\" title=\"Permanent link\">¶</a></h1>\n<p>Builds the canonical stakeholder entity SQLite artifact from the\n<code>StakeholderProfile</code> workbook. The package is the source of truth for entity\nidentity across schools, division offices, and regional offices.</p>\n<h2 id=\"what-this-package-owns\">What This Package Owns<a class=\"headerlink\" href=\"#what-this-package-owns\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li>Header-driven extraction from <code>StakeholderProfile</code></li>\n<li>Canonical <code>entities.db</code> artifact creation</li>\n<li>Normalization for travel time, coordinates, and transportation aliases</li>\n<li>Reference and junction tables for nearby institutions, road conditions, and transportation modes</li>\n<li>Build provenance through <code>build_runs</code></li>\n</ul>\n<p>This package owns the entity artifact only. Consumer-specific reporting surfaces\nbelong in downstream packages.</p>\n<h2 id=\"inputs\">Inputs<a class=\"headerlink\" href=\"#inputs\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li>A stakeholder workbook under <code>data/</code> with the expected <code>StakeholderProfile</code>\n headers</li>\n</ul>\n<h2 id=\"outputs\">Outputs<a class=\"headerlink\" href=\"#outputs\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li><code>artifacts/entities.db</code></li>\n</ul>\n<p>The output database contains row-level provenance, canonical entity identity,\nlocation and remoteness details, community metadata, and build-run provenance.</p>\n<h2 id=\"main-commands\">Main Commands<a class=\"headerlink\" href=\"#main-commands\" title=\"Permanent link\">¶</a></h2>\n<p>Build the artifact:</p>\n<div class=\"language-sh highlight\"><pre><span></span><code><span id=\"__span-0-1\"><a id=\"__codelineno-0-1\" name=\"__codelineno-0-1\" href=\"#__codelineno-0-1\"></a>uv<span class=\"w\"> </span>run<span class=\"w\"> </span>entity<span class=\"w\"> </span>build<span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-0-2\"><a id=\"__codelineno-0-2\" name=\"__codelineno-0-2\" href=\"#__codelineno-0-2\"></a><span class=\"w\"> </span>--input<span class=\"w\"> </span>data/2026-04-02-entities.xlsx<span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-0-3\"><a id=\"__codelineno-0-3\" name=\"__codelineno-0-3\" href=\"#__codelineno-0-3\"></a><span class=\"w\"> </span>--db<span class=\"w\"> </span>artifacts/entities.db\n</span></code></pre></div>\n<p>Audit the artifact:</p>\n<div class=\"language-sh highlight\"><pre><span></span><code><span id=\"__span-1-1\"><a id=\"__codelineno-1-1\" name=\"__codelineno-1-1\" href=\"#__codelineno-1-1\"></a>uv<span class=\"w\"> </span>run<span class=\"w\"> </span>entity<span class=\"w\"> </span>audit<span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-1-2\"><a id=\"__codelineno-1-2\" name=\"__codelineno-1-2\" href=\"#__codelineno-1-2\"></a><span class=\"w\"> </span>--db<span class=\"w\"> </span>artifacts/entities.db\n</span></code></pre></div>\n<h2 id=\"behavioral-notes\">Behavioral Notes<a class=\"headerlink\" href=\"#behavioral-notes\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li>Header mapping is by text, not Excel column letter.</li>\n<li>Rows with blank business-key fields are skipped.</li>\n<li>All remaining stakeholder rows are retained, regardless of\n <code>Type Of Transaction</code>.</li>\n<li><code>natural_key</code> semantics match the shared helpers from\n <code>deped-dcp-template</code>.</li>\n<li>Multiple source rows may share the same <code>natural_key</code>; row provenance and\n canonical identity are both preserved.</li>\n</ul>",
|
|
5
|
+
"search": [
|
|
6
|
+
{
|
|
7
|
+
"location": null,
|
|
8
|
+
"level": 1,
|
|
9
|
+
"title": "DepEd Entity",
|
|
10
|
+
"text": "<p>Builds the canonical stakeholder entity SQLite artifact from the <code>StakeholderProfile</code> workbook. The package is the source of truth for entity identity across schools, division offices, and regional offices.</p>",
|
|
11
|
+
"path": [],
|
|
12
|
+
"tags": []
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"location": "what-this-package-owns",
|
|
16
|
+
"level": 2,
|
|
17
|
+
"title": "What This Package Owns",
|
|
18
|
+
"text": "<ul> <li>Header-driven extraction from <code>StakeholderProfile</code></li> <li>Canonical <code>entities.db</code> artifact creation</li> <li>Normalization for travel time, coordinates, and transportation aliases</li> <li>Reference and junction tables for nearby institutions, road conditions, and transportation modes</li> <li>Build provenance through <code>build_runs</code></li> </ul> <p>This package owns the entity artifact only. Consumer-specific reporting surfaces belong in downstream packages.</p>",
|
|
19
|
+
"path": [],
|
|
20
|
+
"tags": []
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"location": "inputs",
|
|
24
|
+
"level": 2,
|
|
25
|
+
"title": "Inputs",
|
|
26
|
+
"text": "<ul> <li>A stakeholder workbook under <code>data/</code> with the expected <code>StakeholderProfile</code> headers</li> </ul>",
|
|
27
|
+
"path": [],
|
|
28
|
+
"tags": []
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"location": "outputs",
|
|
32
|
+
"level": 2,
|
|
33
|
+
"title": "Outputs",
|
|
34
|
+
"text": "<ul> <li><code>artifacts/entities.db</code></li> </ul> <p>The output database contains row-level provenance, canonical entity identity, location and remoteness details, community metadata, and build-run provenance.</p>",
|
|
35
|
+
"path": [],
|
|
36
|
+
"tags": []
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"location": "main-commands",
|
|
40
|
+
"level": 2,
|
|
41
|
+
"title": "Main Commands",
|
|
42
|
+
"text": "<p>Build the artifact:</p> <pre><code>uv run entity build \\\n --input data/2026-04-02-entities.xlsx \\\n --db artifacts/entities.db\n</code></pre> <p>Audit the artifact:</p> <pre><code>uv run entity audit \\\n --db artifacts/entities.db\n</code></pre>",
|
|
43
|
+
"path": [],
|
|
44
|
+
"tags": []
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"location": "behavioral-notes",
|
|
48
|
+
"level": 2,
|
|
49
|
+
"title": "Behavioral Notes",
|
|
50
|
+
"text": "<ul> <li>Header mapping is by text, not Excel column letter.</li> <li>Rows with blank business-key fields are skipped.</li> <li>All remaining stakeholder rows are retained, regardless of <code>Type Of Transaction</code>.</li> <li><code>natural_key</code> semantics match the shared helpers from <code>deped-dcp-template</code>.</li> <li>Multiple source rows may share the same <code>natural_key</code>; row provenance and canonical identity are both preserved.</li> </ul>",
|
|
51
|
+
"path": [],
|
|
52
|
+
"tags": []
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
"title": "DepEd Entity",
|
|
56
|
+
"toc": [
|
|
57
|
+
{
|
|
58
|
+
"title": "DepEd Entity",
|
|
59
|
+
"id": "deped-entity",
|
|
60
|
+
"url": "#deped-entity",
|
|
61
|
+
"children": [
|
|
62
|
+
{
|
|
63
|
+
"title": "What This Package Owns",
|
|
64
|
+
"id": "what-this-package-owns",
|
|
65
|
+
"url": "#what-this-package-owns",
|
|
66
|
+
"children": [],
|
|
67
|
+
"level": 2
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"title": "Inputs",
|
|
71
|
+
"id": "inputs",
|
|
72
|
+
"url": "#inputs",
|
|
73
|
+
"children": [],
|
|
74
|
+
"level": 2
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"title": "Outputs",
|
|
78
|
+
"id": "outputs",
|
|
79
|
+
"url": "#outputs",
|
|
80
|
+
"children": [],
|
|
81
|
+
"level": 2
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"title": "Main Commands",
|
|
85
|
+
"id": "main-commands",
|
|
86
|
+
"url": "#main-commands",
|
|
87
|
+
"children": [],
|
|
88
|
+
"level": 2
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"title": "Behavioral Notes",
|
|
92
|
+
"id": "behavioral-notes",
|
|
93
|
+
"url": "#behavioral-notes",
|
|
94
|
+
"children": [],
|
|
95
|
+
"level": 2
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
"level": 1
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
"hash": 11635476754114505842
|
|
103
|
+
}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": {
|
|
3
|
+
"meta": {},
|
|
4
|
+
"content": "<h1 id=\"data-contract\">Data Contract<a class=\"headerlink\" href=\"#data-contract\" title=\"Permanent link\">¶</a></h1>\n<p><code>deped-entity</code> owns the canonical entity artifact for stakeholder profile data.\nThe SQLite database is intended to be consumed by downstream packages that need\nstable entity identity for schools, division offices, and regional offices.</p>\n<h2 id=\"core-tables\">Core Tables<a class=\"headerlink\" href=\"#core-tables\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li><code>entities</code></li>\n<li><code>institution_types</code></li>\n<li><code>road_condition_types</code></li>\n<li><code>transportation_mode_types</code></li>\n<li><code>entity_nearby_institutions</code></li>\n<li><code>entity_road_conditions</code></li>\n<li><code>entity_transportation_modes</code></li>\n<li><code>entity_location_profiles</code></li>\n<li><code>entity_remoteness</code></li>\n<li><code>entity_community</code></li>\n<li><code>build_runs</code></li>\n</ul>\n<h2 id=\"entity-semantics\">Entity Semantics<a class=\"headerlink\" href=\"#entity-semantics\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li><code>entities</code> is the canonical row-level fact table for stakeholder profile rows.</li>\n<li><code>source_row_id</code> is the unique workbook row identifier from column <code>ID</code>.</li>\n<li><code>natural_key</code> is the canonical entity identity shared across packages.</li>\n<li>Multiple rows may share the same <code>natural_key</code>; this is expected when the\n workbook contains multiple records for the same school or office.</li>\n</ul>\n<h3 id=\"important-entities-columns\">Important <code>entities</code> Columns<a class=\"headerlink\" href=\"#important-entities-columns\" title=\"Permanent link\">¶</a></h3>\n<ul>\n<li><code>entity_type</code></li>\n<li><code>natural_key</code></li>\n<li><code>governance_level</code></li>\n<li><code>regional_office</code></li>\n<li><code>school_division_office</code></li>\n<li><code>school_district</code></li>\n<li><code>school_name</code></li>\n<li><code>school_id</code></li>\n<li><code>province</code></li>\n<li><code>city_municipality</code></li>\n<li><code>barangay</code></li>\n<li><code>street</code></li>\n<li><code>psgc_code</code></li>\n<li><code>longitude</code></li>\n<li><code>latitude</code></li>\n<li><code>longitude_raw</code></li>\n<li><code>latitude_raw</code></li>\n<li><code>date_time_submitted</code></li>\n<li><code>type_of_transaction</code></li>\n</ul>\n<h2 id=\"identity-model\">Identity Model<a class=\"headerlink\" href=\"#identity-model\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li><code>source_row_id</code> is unique per source row.</li>\n<li><code>natural_key</code> is stable per canonical entity.</li>\n<li>Multiple rows may map to one <code>natural_key</code> when the workbook contains more\n than one row for the same school or office.</li>\n<li>Downstream consumers should join on <code>natural_key</code> when they want canonical\n entity identity and keep <code>source_row_id</code> when they need exact source-row\n provenance.</li>\n</ul>\n<h2 id=\"reference-and-junction-tables\">Reference and Junction Tables<a class=\"headerlink\" href=\"#reference-and-junction-tables\" title=\"Permanent link\">¶</a></h2>\n<p>The three reference tables define the canonical closed sets used by the\njunction tables:</p>\n<ul>\n<li>nearby institutions</li>\n<li>road conditions</li>\n<li>transportation modes</li>\n</ul>\n<p>The corresponding junction tables model checked workbook columns as wide-to-long\nrelations so consumers can query them without hard-coding workbook headers.</p>\n<h2 id=\"detail-tables\">Detail Tables<a class=\"headerlink\" href=\"#detail-tables\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li><code>entity_location_profiles</code> stores free-text and normalized location-related\n fields such as travel time and other transportation aliases.</li>\n<li><code>entity_remoteness</code> stores remoteness and access flags.</li>\n<li><code>entity_community</code> stores community participation flags and remarks.</li>\n</ul>\n<h2 id=\"provenance\">Provenance<a class=\"headerlink\" href=\"#provenance\" title=\"Permanent link\">¶</a></h2>\n<p><code>build_runs</code> records:</p>\n<ul>\n<li>build type</li>\n<li>schema version</li>\n<li>source filename</li>\n<li>source file hash</li>\n<li>source row count</li>\n<li>kept row count</li>\n<li>final entity count</li>\n<li>completion timestamp</li>\n</ul>\n<h2 id=\"cleaning-rules\">Cleaning Rules<a class=\"headerlink\" href=\"#cleaning-rules\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li>Header mapping is by header text, not column position.</li>\n<li>Rows with empty business-key fields are skipped.</li>\n<li><code>travel_time_minutes</code> is normalized from numeric or common text formats and\n <code>travel_time_raw</code> preserves the source value.</li>\n<li>Coordinates are parsed conservatively. When parsing is uncertain or invalid,\n normalized coordinates remain null and the raw text is retained.</li>\n<li><code>other_transportations_normalized</code> stores alias-normalized values and may also\n populate <code>entity_transportation_modes</code> when the alias resolves to an existing\n canonical transport mode.</li>\n</ul>\n<h2 id=\"downstream-use\">Downstream Use<a class=\"headerlink\" href=\"#downstream-use\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li>Use <code>entities</code> as the canonical join surface for schools, division offices,\n and regional offices.</li>\n<li>Use the junction tables when filtering on nearby institutions, road\n conditions, or transportation modes.</li>\n<li>Use <code>build_runs</code> to validate provenance before depending on a built artifact.</li>\n</ul>",
|
|
5
|
+
"search": [
|
|
6
|
+
{
|
|
7
|
+
"location": null,
|
|
8
|
+
"level": 1,
|
|
9
|
+
"title": "Data Contract",
|
|
10
|
+
"text": "<p><code>deped-entity</code> owns the canonical entity artifact for stakeholder profile data. The SQLite database is intended to be consumed by downstream packages that need stable entity identity for schools, division offices, and regional offices.</p>",
|
|
11
|
+
"path": [],
|
|
12
|
+
"tags": []
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"location": "core-tables",
|
|
16
|
+
"level": 2,
|
|
17
|
+
"title": "Core Tables",
|
|
18
|
+
"text": "<ul> <li><code>entities</code></li> <li><code>institution_types</code></li> <li><code>road_condition_types</code></li> <li><code>transportation_mode_types</code></li> <li><code>entity_nearby_institutions</code></li> <li><code>entity_road_conditions</code></li> <li><code>entity_transportation_modes</code></li> <li><code>entity_location_profiles</code></li> <li><code>entity_remoteness</code></li> <li><code>entity_community</code></li> <li><code>build_runs</code></li> </ul>",
|
|
19
|
+
"path": [],
|
|
20
|
+
"tags": []
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"location": "entity-semantics",
|
|
24
|
+
"level": 2,
|
|
25
|
+
"title": "Entity Semantics",
|
|
26
|
+
"text": "<ul> <li><code>entities</code> is the canonical row-level fact table for stakeholder profile rows.</li> <li><code>source_row_id</code> is the unique workbook row identifier from column <code>ID</code>.</li> <li><code>natural_key</code> is the canonical entity identity shared across packages.</li> <li>Multiple rows may share the same <code>natural_key</code>; this is expected when the workbook contains multiple records for the same school or office.</li> </ul>",
|
|
27
|
+
"path": [],
|
|
28
|
+
"tags": []
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"location": "important-entities-columns",
|
|
32
|
+
"level": 3,
|
|
33
|
+
"title": "Important <code>entities</code> Columns",
|
|
34
|
+
"text": "<ul> <li><code>entity_type</code></li> <li><code>natural_key</code></li> <li><code>governance_level</code></li> <li><code>regional_office</code></li> <li><code>school_division_office</code></li> <li><code>school_district</code></li> <li><code>school_name</code></li> <li><code>school_id</code></li> <li><code>province</code></li> <li><code>city_municipality</code></li> <li><code>barangay</code></li> <li><code>street</code></li> <li><code>psgc_code</code></li> <li><code>longitude</code></li> <li><code>latitude</code></li> <li><code>longitude_raw</code></li> <li><code>latitude_raw</code></li> <li><code>date_time_submitted</code></li> <li><code>type_of_transaction</code></li> </ul>",
|
|
35
|
+
"path": [],
|
|
36
|
+
"tags": []
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"location": "identity-model",
|
|
40
|
+
"level": 2,
|
|
41
|
+
"title": "Identity Model",
|
|
42
|
+
"text": "<ul> <li><code>source_row_id</code> is unique per source row.</li> <li><code>natural_key</code> is stable per canonical entity.</li> <li>Multiple rows may map to one <code>natural_key</code> when the workbook contains more than one row for the same school or office.</li> <li>Downstream consumers should join on <code>natural_key</code> when they want canonical entity identity and keep <code>source_row_id</code> when they need exact source-row provenance.</li> </ul>",
|
|
43
|
+
"path": [],
|
|
44
|
+
"tags": []
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"location": "reference-and-junction-tables",
|
|
48
|
+
"level": 2,
|
|
49
|
+
"title": "Reference and Junction Tables",
|
|
50
|
+
"text": "<p>The three reference tables define the canonical closed sets used by the junction tables:</p> <ul> <li>nearby institutions</li> <li>road conditions</li> <li>transportation modes</li> </ul> <p>The corresponding junction tables model checked workbook columns as wide-to-long relations so consumers can query them without hard-coding workbook headers.</p>",
|
|
51
|
+
"path": [],
|
|
52
|
+
"tags": []
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"location": "detail-tables",
|
|
56
|
+
"level": 2,
|
|
57
|
+
"title": "Detail Tables",
|
|
58
|
+
"text": "<ul> <li><code>entity_location_profiles</code> stores free-text and normalized location-related fields such as travel time and other transportation aliases.</li> <li><code>entity_remoteness</code> stores remoteness and access flags.</li> <li><code>entity_community</code> stores community participation flags and remarks.</li> </ul>",
|
|
59
|
+
"path": [],
|
|
60
|
+
"tags": []
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"location": "provenance",
|
|
64
|
+
"level": 2,
|
|
65
|
+
"title": "Provenance",
|
|
66
|
+
"text": "<p><code>build_runs</code> records:</p> <ul> <li>build type</li> <li>schema version</li> <li>source filename</li> <li>source file hash</li> <li>source row count</li> <li>kept row count</li> <li>final entity count</li> <li>completion timestamp</li> </ul>",
|
|
67
|
+
"path": [],
|
|
68
|
+
"tags": []
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"location": "cleaning-rules",
|
|
72
|
+
"level": 2,
|
|
73
|
+
"title": "Cleaning Rules",
|
|
74
|
+
"text": "<ul> <li>Header mapping is by header text, not column position.</li> <li>Rows with empty business-key fields are skipped.</li> <li><code>travel_time_minutes</code> is normalized from numeric or common text formats and <code>travel_time_raw</code> preserves the source value.</li> <li>Coordinates are parsed conservatively. When parsing is uncertain or invalid, normalized coordinates remain null and the raw text is retained.</li> <li><code>other_transportations_normalized</code> stores alias-normalized values and may also populate <code>entity_transportation_modes</code> when the alias resolves to an existing canonical transport mode.</li> </ul>",
|
|
75
|
+
"path": [],
|
|
76
|
+
"tags": []
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"location": "downstream-use",
|
|
80
|
+
"level": 2,
|
|
81
|
+
"title": "Downstream Use",
|
|
82
|
+
"text": "<ul> <li>Use <code>entities</code> as the canonical join surface for schools, division offices, and regional offices.</li> <li>Use the junction tables when filtering on nearby institutions, road conditions, or transportation modes.</li> <li>Use <code>build_runs</code> to validate provenance before depending on a built artifact.</li> </ul>",
|
|
83
|
+
"path": [],
|
|
84
|
+
"tags": []
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"title": "Data Contract",
|
|
88
|
+
"toc": [
|
|
89
|
+
{
|
|
90
|
+
"title": "Data Contract",
|
|
91
|
+
"id": "data-contract",
|
|
92
|
+
"url": "#data-contract",
|
|
93
|
+
"children": [
|
|
94
|
+
{
|
|
95
|
+
"title": "Core Tables",
|
|
96
|
+
"id": "core-tables",
|
|
97
|
+
"url": "#core-tables",
|
|
98
|
+
"children": [],
|
|
99
|
+
"level": 2
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"title": "Entity Semantics",
|
|
103
|
+
"id": "entity-semantics",
|
|
104
|
+
"url": "#entity-semantics",
|
|
105
|
+
"children": [
|
|
106
|
+
{
|
|
107
|
+
"title": "Important entities Columns",
|
|
108
|
+
"id": "important-entities-columns",
|
|
109
|
+
"url": "#important-entities-columns",
|
|
110
|
+
"children": [],
|
|
111
|
+
"level": 3
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
"level": 2
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"title": "Identity Model",
|
|
118
|
+
"id": "identity-model",
|
|
119
|
+
"url": "#identity-model",
|
|
120
|
+
"children": [],
|
|
121
|
+
"level": 2
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"title": "Reference and Junction Tables",
|
|
125
|
+
"id": "reference-and-junction-tables",
|
|
126
|
+
"url": "#reference-and-junction-tables",
|
|
127
|
+
"children": [],
|
|
128
|
+
"level": 2
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"title": "Detail Tables",
|
|
132
|
+
"id": "detail-tables",
|
|
133
|
+
"url": "#detail-tables",
|
|
134
|
+
"children": [],
|
|
135
|
+
"level": 2
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"title": "Provenance",
|
|
139
|
+
"id": "provenance",
|
|
140
|
+
"url": "#provenance",
|
|
141
|
+
"children": [],
|
|
142
|
+
"level": 2
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"title": "Cleaning Rules",
|
|
146
|
+
"id": "cleaning-rules",
|
|
147
|
+
"url": "#cleaning-rules",
|
|
148
|
+
"children": [],
|
|
149
|
+
"level": 2
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"title": "Downstream Use",
|
|
153
|
+
"id": "downstream-use",
|
|
154
|
+
"url": "#downstream-use",
|
|
155
|
+
"children": [],
|
|
156
|
+
"level": 2
|
|
157
|
+
}
|
|
158
|
+
],
|
|
159
|
+
"level": 1
|
|
160
|
+
}
|
|
161
|
+
]
|
|
162
|
+
},
|
|
163
|
+
"hash": 13838872927813900390
|
|
164
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": "\n<!doctype html>\n<html lang=\"en\" class=\"no-js\">\n <head>\n \n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n \n <meta name=\"description\" content=\"Build and audit the canonical DepEd stakeholder entity SQLite artifact from StakeholderProfile workbooks.\">\n \n \n <meta name=\"author\" content=\"DepEd Entity maintainers\">\n \n \n \n <link rel=\"prev\" href=\"../build/\">\n \n \n <link rel=\"next\" href=\"../development/\">\n \n \n \n \n \n <link rel=\"icon\" href=\"../assets/images/favicon.png\">\n <meta name=\"generator\" content=\"zensical-0.0.31\">\n \n \n \n <title>Data Contract - DepEd Entity</title>\n \n \n \n \n \n \n <link rel=\"stylesheet\" href=\"../assets/stylesheets/modern/main.53a7feaf.min.css\">\n \n \n\n\n \n \n \n \n \n \n \n \n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Inter:300,300i,400,400i,500,500i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback\">\n <style>:root{--md-text-font:\"Inter\";--md-code-font:\"JetBrains Mono\"}</style>\n \n \n \n <script>__md_scope=new URL(\"..\",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+\".\"+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+\".\"+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute(\"data-platform\",navigator.platform)</script>\n \n \n\n \n \n </head>\n \n \n <body dir=\"ltr\">\n \n \n <input class=\"md-toggle\" data-md-toggle=\"drawer\" type=\"checkbox\" id=\"__drawer\" autocomplete=\"off\">\n <input class=\"md-toggle\" data-md-toggle=\"search\" type=\"checkbox\" id=\"__search\" autocomplete=\"off\">\n <label class=\"md-overlay\" for=\"__drawer\" aria-label=\"Navigation\"></label>\n <div data-md-component=\"skip\">\n \n \n <a href=\"#data-contract\" class=\"md-skip\">\n Skip to content\n </a>\n \n </div>\n <div data-md-component=\"announce\">\n \n </div>\n \n \n \n\n \n\n<header class=\"md-header md-header--shadow\" data-md-component=\"header\">\n <nav class=\"md-header__inner md-grid\" aria-label=\"Header\">\n <a href=\"./..\" title=\"DepEd Entity\" class=\"md-header__button md-logo\" aria-label=\"DepEd Entity\" data-md-component=\"logo\">\n \n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\n\n </a>\n <label class=\"md-header__button md-icon\" for=\"__drawer\" aria-label=\"Navigation\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-menu\" viewBox=\"0 0 24 24\"><path d=\"M4 5h16M4 12h16M4 19h16\"/></svg>\n </label>\n <div class=\"md-header__title\" data-md-component=\"header-title\">\n <div class=\"md-header__ellipsis\">\n <div class=\"md-header__topic\">\n <span class=\"md-ellipsis\">\n DepEd Entity\n </span>\n </div>\n <div class=\"md-header__topic\" data-md-component=\"header-topic\">\n <span class=\"md-ellipsis\">\n \n Data Contract\n \n </span>\n </div>\n </div>\n </div>\n \n \n <script>var palette=__md_get(\"__palette\");if(palette&&palette.color){if(\"(prefers-color-scheme)\"===palette.color.media){var media=matchMedia(\"(prefers-color-scheme: light)\"),input=document.querySelector(media.matches?\"[data-md-color-media='(prefers-color-scheme: light)']\":\"[data-md-color-media='(prefers-color-scheme: dark)']\");palette.color.media=input.getAttribute(\"data-md-color-media\"),palette.color.scheme=input.getAttribute(\"data-md-color-scheme\"),palette.color.primary=input.getAttribute(\"data-md-color-primary\"),palette.color.accent=input.getAttribute(\"data-md-color-accent\")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute(\"data-md-color-\"+key,value)}</script>\n \n \n \n \n \n <label class=\"md-header__button md-icon\" for=\"__search\" aria-label=\"Search\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-search\" viewBox=\"0 0 24 24\"><path d=\"m21 21-4.34-4.34\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/></svg>\n </label>\n <div class=\"md-search\" data-md-component=\"search\" role=\"dialog\" aria-label=\"Search\">\n <button type=\"button\" class=\"md-search__button\">\n Search\n </button>\n</div>\n \n \n <div class=\"md-header__source\">\n \n </div>\n </nav>\n \n</header>\n \n <div class=\"md-container\" data-md-component=\"container\">\n \n \n \n \n \n \n <main class=\"md-main\" data-md-component=\"main\">\n <div class=\"md-main__inner md-grid\">\n \n \n \n <div class=\"md-sidebar md-sidebar--primary\" data-md-component=\"sidebar\" data-md-type=\"navigation\" >\n <div class=\"md-sidebar__scrollwrap\">\n <div class=\"md-sidebar__inner\">\n \n\n\n\n<nav class=\"md-nav md-nav--primary\" aria-label=\"Navigation\" data-md-level=\"0\">\n <label class=\"md-nav__title\" for=\"__drawer\">\n <a href=\"./..\" title=\"DepEd Entity\" class=\"md-nav__button md-logo\" aria-label=\"DepEd Entity\" data-md-component=\"logo\">\n \n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\n\n </a>\n DepEd Entity\n </label>\n \n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"./..\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Overview\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../build/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Build Guide\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--active\">\n \n \n \n \n \n \n \n <label class=\"md-nav__link md-nav__link--active\" for=\"__toc\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Data Contract\n \n\n \n </span>\n \n \n\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n <a href=\"././\" class=\"md-nav__link md-nav__link--active\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Data Contract\n \n\n \n </span>\n \n \n\n </a>\n \n \n\n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"On this page\">\n \n \n \n \n \n \n <label class=\"md-nav__title\" for=\"__toc\">\n <span class=\"md-nav__icon md-icon\"></span>\n On this page\n </label>\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\n \n <li class=\"md-nav__item\">\n <a href=\"#core-tables\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Core Tables\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#entity-semantics\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Entity Semantics\n \n </span>\n </a>\n \n <nav class=\"md-nav\" aria-label=\"Entity Semantics\">\n <ul class=\"md-nav__list\">\n \n <li class=\"md-nav__item\">\n <a href=\"#important-entities-columns\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Important entities Columns\n \n </span>\n </a>\n \n</li>\n \n </ul>\n </nav>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#identity-model\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Identity Model\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#reference-and-junction-tables\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Reference and Junction Tables\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#detail-tables\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Detail Tables\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#provenance\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Provenance\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#cleaning-rules\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Cleaning Rules\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#downstream-use\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Downstream Use\n \n </span>\n </a>\n \n</li>\n \n </ul>\n \n</nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../development/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Development\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n </ul>\n</nav>\n </div>\n </div>\n </div>\n \n \n \n <div class=\"md-sidebar md-sidebar--secondary\" data-md-component=\"sidebar\" data-md-type=\"toc\" >\n <div class=\"md-sidebar__scrollwrap\">\n \n \n \n \n \n \n \n <input class=\"md-nav__toggle md-toggle\" type=\"checkbox\" id=\"__toc\">\n <div class=\"md-sidebar-button__wrapper\">\n <label class=\"md-sidebar-button\" for=\"__toc\"></label>\n </div>\n \n \n <div class=\"md-sidebar__inner\">\n \n\n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"On this page\">\n \n \n \n \n \n \n <label class=\"md-nav__title\" for=\"__toc\">\n <span class=\"md-nav__icon md-icon\"></span>\n On this page\n </label>\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\n \n <li class=\"md-nav__item\">\n <a href=\"#core-tables\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Core Tables\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#entity-semantics\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Entity Semantics\n \n </span>\n </a>\n \n <nav class=\"md-nav\" aria-label=\"Entity Semantics\">\n <ul class=\"md-nav__list\">\n \n <li class=\"md-nav__item\">\n <a href=\"#important-entities-columns\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Important entities Columns\n \n </span>\n </a>\n \n</li>\n \n </ul>\n </nav>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#identity-model\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Identity Model\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#reference-and-junction-tables\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Reference and Junction Tables\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#detail-tables\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Detail Tables\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#provenance\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Provenance\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#cleaning-rules\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Cleaning Rules\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#downstream-use\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Downstream Use\n \n </span>\n </a>\n \n</li>\n \n </ul>\n \n</nav>\n </div>\n </div>\n </div>\n \n \n \n <div class=\"md-content\" data-md-component=\"content\">\n \n \n\n\n\n \n\n\n \n <article class=\"md-content__inner md-typeset\">\n \n \n\n<h1 id=\"data-contract\">Data Contract<a class=\"headerlink\" href=\"#data-contract\" title=\"Permanent link\">¶</a></h1>\n<p><code>deped-entity</code> owns the canonical entity artifact for stakeholder profile data.\nThe SQLite database is intended to be consumed by downstream packages that need\nstable entity identity for schools, division offices, and regional offices.</p>\n<h2 id=\"core-tables\">Core Tables<a class=\"headerlink\" href=\"#core-tables\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li><code>entities</code></li>\n<li><code>institution_types</code></li>\n<li><code>road_condition_types</code></li>\n<li><code>transportation_mode_types</code></li>\n<li><code>entity_nearby_institutions</code></li>\n<li><code>entity_road_conditions</code></li>\n<li><code>entity_transportation_modes</code></li>\n<li><code>entity_location_profiles</code></li>\n<li><code>entity_remoteness</code></li>\n<li><code>entity_community</code></li>\n<li><code>build_runs</code></li>\n</ul>\n<h2 id=\"entity-semantics\">Entity Semantics<a class=\"headerlink\" href=\"#entity-semantics\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li><code>entities</code> is the canonical row-level fact table for stakeholder profile rows.</li>\n<li><code>source_row_id</code> is the unique workbook row identifier from column <code>ID</code>.</li>\n<li><code>natural_key</code> is the canonical entity identity shared across packages.</li>\n<li>Multiple rows may share the same <code>natural_key</code>; this is expected when the\n workbook contains multiple records for the same school or office.</li>\n</ul>\n<h3 id=\"important-entities-columns\">Important <code>entities</code> Columns<a class=\"headerlink\" href=\"#important-entities-columns\" title=\"Permanent link\">¶</a></h3>\n<ul>\n<li><code>entity_type</code></li>\n<li><code>natural_key</code></li>\n<li><code>governance_level</code></li>\n<li><code>regional_office</code></li>\n<li><code>school_division_office</code></li>\n<li><code>school_district</code></li>\n<li><code>school_name</code></li>\n<li><code>school_id</code></li>\n<li><code>province</code></li>\n<li><code>city_municipality</code></li>\n<li><code>barangay</code></li>\n<li><code>street</code></li>\n<li><code>psgc_code</code></li>\n<li><code>longitude</code></li>\n<li><code>latitude</code></li>\n<li><code>longitude_raw</code></li>\n<li><code>latitude_raw</code></li>\n<li><code>date_time_submitted</code></li>\n<li><code>type_of_transaction</code></li>\n</ul>\n<h2 id=\"identity-model\">Identity Model<a class=\"headerlink\" href=\"#identity-model\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li><code>source_row_id</code> is unique per source row.</li>\n<li><code>natural_key</code> is stable per canonical entity.</li>\n<li>Multiple rows may map to one <code>natural_key</code> when the workbook contains more\n than one row for the same school or office.</li>\n<li>Downstream consumers should join on <code>natural_key</code> when they want canonical\n entity identity and keep <code>source_row_id</code> when they need exact source-row\n provenance.</li>\n</ul>\n<h2 id=\"reference-and-junction-tables\">Reference and Junction Tables<a class=\"headerlink\" href=\"#reference-and-junction-tables\" title=\"Permanent link\">¶</a></h2>\n<p>The three reference tables define the canonical closed sets used by the\njunction tables:</p>\n<ul>\n<li>nearby institutions</li>\n<li>road conditions</li>\n<li>transportation modes</li>\n</ul>\n<p>The corresponding junction tables model checked workbook columns as wide-to-long\nrelations so consumers can query them without hard-coding workbook headers.</p>\n<h2 id=\"detail-tables\">Detail Tables<a class=\"headerlink\" href=\"#detail-tables\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li><code>entity_location_profiles</code> stores free-text and normalized location-related\n fields such as travel time and other transportation aliases.</li>\n<li><code>entity_remoteness</code> stores remoteness and access flags.</li>\n<li><code>entity_community</code> stores community participation flags and remarks.</li>\n</ul>\n<h2 id=\"provenance\">Provenance<a class=\"headerlink\" href=\"#provenance\" title=\"Permanent link\">¶</a></h2>\n<p><code>build_runs</code> records:</p>\n<ul>\n<li>build type</li>\n<li>schema version</li>\n<li>source filename</li>\n<li>source file hash</li>\n<li>source row count</li>\n<li>kept row count</li>\n<li>final entity count</li>\n<li>completion timestamp</li>\n</ul>\n<h2 id=\"cleaning-rules\">Cleaning Rules<a class=\"headerlink\" href=\"#cleaning-rules\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li>Header mapping is by header text, not column position.</li>\n<li>Rows with empty business-key fields are skipped.</li>\n<li><code>travel_time_minutes</code> is normalized from numeric or common text formats and\n <code>travel_time_raw</code> preserves the source value.</li>\n<li>Coordinates are parsed conservatively. When parsing is uncertain or invalid,\n normalized coordinates remain null and the raw text is retained.</li>\n<li><code>other_transportations_normalized</code> stores alias-normalized values and may also\n populate <code>entity_transportation_modes</code> when the alias resolves to an existing\n canonical transport mode.</li>\n</ul>\n<h2 id=\"downstream-use\">Downstream Use<a class=\"headerlink\" href=\"#downstream-use\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li>Use <code>entities</code> as the canonical join surface for schools, division offices,\n and regional offices.</li>\n<li>Use the junction tables when filtering on nearby institutions, road\n conditions, or transportation modes.</li>\n<li>Use <code>build_runs</code> to validate provenance before depending on a built artifact.</li>\n</ul>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n </article>\n </div>\n \n \n <script>var tabs=__md_get(\"__tabs\");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(\".tabbed-set\")){var labels=set.querySelector(\".tabbed-labels\");for(var tab of tabs)for(var label of labels.getElementsByTagName(\"label\"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>\n\n<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith(\"__tabbed_\"))</script>\n </div>\n \n <button type=\"button\" class=\"md-top md-icon\" data-md-component=\"top\" hidden>\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-circle-arrow-up\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m16 12-4-4-4 4M12 16V8\"/></svg>\n Back to top\n</button>\n \n </main>\n \n <footer class=\"md-footer\">\n \n \n \n <nav class=\"md-footer__inner md-grid\" aria-label=\"Footer\" >\n \n \n <a href=\"../build/\" class=\"md-footer__link md-footer__link--prev\" aria-label=\"Previous: Build Guide\">\n <div class=\"md-footer__button md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-arrow-left\" viewBox=\"0 0 24 24\"><path d=\"m12 19-7-7 7-7M19 12H5\"/></svg>\n </div>\n <div class=\"md-footer__title\">\n <span class=\"md-footer__direction\">\n Previous\n </span>\n <div class=\"md-ellipsis\">\n Build Guide\n </div>\n </div>\n </a>\n \n \n \n <a href=\"../development/\" class=\"md-footer__link md-footer__link--next\" aria-label=\"Next: Development\">\n <div class=\"md-footer__title\">\n <span class=\"md-footer__direction\">\n Next\n </span>\n <div class=\"md-ellipsis\">\n Development\n </div>\n </div>\n <div class=\"md-footer__button md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-arrow-right\" viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"/></svg>\n </div>\n </a>\n \n </nav>\n \n \n <div class=\"md-footer-meta md-typeset\">\n <div class=\"md-footer-meta__inner md-grid\">\n <div class=\"md-copyright\">\n \n <div class=\"md-copyright__highlight\">\n Copyright © 2026 DepEd Entity maintainers\n\n </div>\n \n \n Made with\n <a href=\"https://zensical.org/\" target=\"_blank\" rel=\"noopener\">\n Zensical\n </a>\n \n</div>\n \n </div>\n </div>\n</footer>\n \n </div>\n <div class=\"md-dialog\" data-md-component=\"dialog\">\n <div class=\"md-dialog__inner md-typeset\"></div>\n </div>\n \n \n \n \n \n <script id=\"__config\" type=\"application/json\">{\"annotate\":null,\"base\":\"..\",\"features\":[\"announce.dismiss\",\"content.code.annotate\",\"content.code.copy\",\"content.code.select\",\"content.footnote.tooltips\",\"content.tabs.link\",\"content.tooltips\",\"navigation.footer\",\"navigation.indexes\",\"navigation.instant\",\"navigation.instant.prefetch\",\"navigation.path\",\"navigation.sections\",\"navigation.top\",\"navigation.tracking\",\"search.highlight\"],\"search\":\"../assets/javascripts/workers/search.e2d2d235.min.js\",\"tags\":null,\"translations\":{\"clipboard.copied\":\"Copied to clipboard\",\"clipboard.copy\":\"Copy to clipboard\",\"search.result.more.one\":\"1 more on this page\",\"search.result.more.other\":\"# more on this page\",\"search.result.none\":\"No matching documents\",\"search.result.one\":\"1 matching document\",\"search.result.other\":\"# matching documents\",\"search.result.placeholder\":\"Type to start searching\",\"search.result.term.missing\":\"Missing\",\"select.version\":\"Select version\"},\"version\":null}</script>\n \n \n <script src=\"../assets/javascripts/bundle.91a19a9e.min.js\"></script>\n \n \n </body>\n</html>",
|
|
3
|
+
"hash": 1891876556343870374
|
|
4
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": "\n<!doctype html>\n<html lang=\"en\" class=\"no-js\">\n <head>\n \n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n \n <meta name=\"description\" content=\"Build and audit the canonical DepEd stakeholder entity SQLite artifact from StakeholderProfile workbooks.\">\n \n \n <meta name=\"author\" content=\"DepEd Entity maintainers\">\n \n \n \n \n <link rel=\"next\" href=\"./build/\">\n \n \n \n \n \n <link rel=\"icon\" href=\"./assets/images/favicon.png\">\n <meta name=\"generator\" content=\"zensical-0.0.31\">\n \n \n \n <title>DepEd Entity - DepEd Entity</title>\n \n \n \n \n \n \n <link rel=\"stylesheet\" href=\"./assets/stylesheets/modern/main.53a7feaf.min.css\">\n \n \n\n\n \n \n \n \n \n \n \n \n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Inter:300,300i,400,400i,500,500i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback\">\n <style>:root{--md-text-font:\"Inter\";--md-code-font:\"JetBrains Mono\"}</style>\n \n \n \n <script>__md_scope=new URL(\".\",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+\".\"+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+\".\"+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute(\"data-platform\",navigator.platform)</script>\n \n \n\n \n \n </head>\n \n \n <body dir=\"ltr\">\n \n \n <input class=\"md-toggle\" data-md-toggle=\"drawer\" type=\"checkbox\" id=\"__drawer\" autocomplete=\"off\">\n <input class=\"md-toggle\" data-md-toggle=\"search\" type=\"checkbox\" id=\"__search\" autocomplete=\"off\">\n <label class=\"md-overlay\" for=\"__drawer\" aria-label=\"Navigation\"></label>\n <div data-md-component=\"skip\">\n \n \n <a href=\"#deped-entity\" class=\"md-skip\">\n Skip to content\n </a>\n \n </div>\n <div data-md-component=\"announce\">\n \n </div>\n \n \n \n\n \n\n<header class=\"md-header md-header--shadow\" data-md-component=\"header\">\n <nav class=\"md-header__inner md-grid\" aria-label=\"Header\">\n <a href=\"\" title=\"DepEd Entity\" class=\"md-header__button md-logo\" aria-label=\"DepEd Entity\" data-md-component=\"logo\">\n \n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\n\n </a>\n <label class=\"md-header__button md-icon\" for=\"__drawer\" aria-label=\"Navigation\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-menu\" viewBox=\"0 0 24 24\"><path d=\"M4 5h16M4 12h16M4 19h16\"/></svg>\n </label>\n <div class=\"md-header__title\" data-md-component=\"header-title\">\n <div class=\"md-header__ellipsis\">\n <div class=\"md-header__topic\">\n <span class=\"md-ellipsis\">\n DepEd Entity\n </span>\n </div>\n <div class=\"md-header__topic\" data-md-component=\"header-topic\">\n <span class=\"md-ellipsis\">\n \n DepEd Entity\n \n </span>\n </div>\n </div>\n </div>\n \n \n <script>var palette=__md_get(\"__palette\");if(palette&&palette.color){if(\"(prefers-color-scheme)\"===palette.color.media){var media=matchMedia(\"(prefers-color-scheme: light)\"),input=document.querySelector(media.matches?\"[data-md-color-media='(prefers-color-scheme: light)']\":\"[data-md-color-media='(prefers-color-scheme: dark)']\");palette.color.media=input.getAttribute(\"data-md-color-media\"),palette.color.scheme=input.getAttribute(\"data-md-color-scheme\"),palette.color.primary=input.getAttribute(\"data-md-color-primary\"),palette.color.accent=input.getAttribute(\"data-md-color-accent\")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute(\"data-md-color-\"+key,value)}</script>\n \n \n \n \n \n <label class=\"md-header__button md-icon\" for=\"__search\" aria-label=\"Search\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-search\" viewBox=\"0 0 24 24\"><path d=\"m21 21-4.34-4.34\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/></svg>\n </label>\n <div class=\"md-search\" data-md-component=\"search\" role=\"dialog\" aria-label=\"Search\">\n <button type=\"button\" class=\"md-search__button\">\n Search\n </button>\n</div>\n \n \n <div class=\"md-header__source\">\n \n </div>\n </nav>\n \n</header>\n \n <div class=\"md-container\" data-md-component=\"container\">\n \n \n \n \n \n \n <main class=\"md-main\" data-md-component=\"main\">\n <div class=\"md-main__inner md-grid\">\n \n \n \n <div class=\"md-sidebar md-sidebar--primary\" data-md-component=\"sidebar\" data-md-type=\"navigation\" >\n <div class=\"md-sidebar__scrollwrap\">\n <div class=\"md-sidebar__inner\">\n \n\n\n\n<nav class=\"md-nav md-nav--primary\" aria-label=\"Navigation\" data-md-level=\"0\">\n <label class=\"md-nav__title\" for=\"__drawer\">\n <a href=\"\" title=\"DepEd Entity\" class=\"md-nav__button md-logo\" aria-label=\"DepEd Entity\" data-md-component=\"logo\">\n \n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\n\n </a>\n DepEd Entity\n </label>\n \n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--active\">\n \n \n \n \n \n \n \n <label class=\"md-nav__link md-nav__link--active\" for=\"__toc\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Overview\n \n\n \n </span>\n \n \n\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n <a href=\"\" class=\"md-nav__link md-nav__link--active\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Overview\n \n\n \n </span>\n \n \n\n </a>\n \n \n\n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"On this page\">\n \n \n \n \n \n \n <label class=\"md-nav__title\" for=\"__toc\">\n <span class=\"md-nav__icon md-icon\"></span>\n On this page\n </label>\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\n \n <li class=\"md-nav__item\">\n <a href=\"#what-this-package-owns\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n What This Package Owns\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#inputs\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Inputs\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#outputs\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Outputs\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#main-commands\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Main Commands\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#behavioral-notes\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Behavioral Notes\n \n </span>\n </a>\n \n</li>\n \n </ul>\n \n</nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"./build/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Build Guide\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"./data-contract/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Data Contract\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"./development/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Development\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n </ul>\n</nav>\n </div>\n </div>\n </div>\n \n \n \n <div class=\"md-sidebar md-sidebar--secondary\" data-md-component=\"sidebar\" data-md-type=\"toc\" >\n <div class=\"md-sidebar__scrollwrap\">\n \n \n \n \n \n \n \n <input class=\"md-nav__toggle md-toggle\" type=\"checkbox\" id=\"__toc\">\n <div class=\"md-sidebar-button__wrapper\">\n <label class=\"md-sidebar-button\" for=\"__toc\"></label>\n </div>\n \n \n <div class=\"md-sidebar__inner\">\n \n\n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"On this page\">\n \n \n \n \n \n \n <label class=\"md-nav__title\" for=\"__toc\">\n <span class=\"md-nav__icon md-icon\"></span>\n On this page\n </label>\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\n \n <li class=\"md-nav__item\">\n <a href=\"#what-this-package-owns\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n What This Package Owns\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#inputs\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Inputs\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#outputs\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Outputs\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#main-commands\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Main Commands\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#behavioral-notes\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Behavioral Notes\n \n </span>\n </a>\n \n</li>\n \n </ul>\n \n</nav>\n </div>\n </div>\n </div>\n \n \n \n <div class=\"md-content\" data-md-component=\"content\">\n \n \n\n\n\n \n\n\n \n <article class=\"md-content__inner md-typeset\">\n \n \n\n<h1 id=\"deped-entity\">DepEd Entity<a class=\"headerlink\" href=\"#deped-entity\" title=\"Permanent link\">¶</a></h1>\n<p>Builds the canonical stakeholder entity SQLite artifact from the\n<code>StakeholderProfile</code> workbook. The package is the source of truth for entity\nidentity across schools, division offices, and regional offices.</p>\n<h2 id=\"what-this-package-owns\">What This Package Owns<a class=\"headerlink\" href=\"#what-this-package-owns\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li>Header-driven extraction from <code>StakeholderProfile</code></li>\n<li>Canonical <code>entities.db</code> artifact creation</li>\n<li>Normalization for travel time, coordinates, and transportation aliases</li>\n<li>Reference and junction tables for nearby institutions, road conditions, and transportation modes</li>\n<li>Build provenance through <code>build_runs</code></li>\n</ul>\n<p>This package owns the entity artifact only. Consumer-specific reporting surfaces\nbelong in downstream packages.</p>\n<h2 id=\"inputs\">Inputs<a class=\"headerlink\" href=\"#inputs\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li>A stakeholder workbook under <code>data/</code> with the expected <code>StakeholderProfile</code>\n headers</li>\n</ul>\n<h2 id=\"outputs\">Outputs<a class=\"headerlink\" href=\"#outputs\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li><code>artifacts/entities.db</code></li>\n</ul>\n<p>The output database contains row-level provenance, canonical entity identity,\nlocation and remoteness details, community metadata, and build-run provenance.</p>\n<h2 id=\"main-commands\">Main Commands<a class=\"headerlink\" href=\"#main-commands\" title=\"Permanent link\">¶</a></h2>\n<p>Build the artifact:</p>\n<div class=\"language-sh highlight\"><pre><span></span><code><span id=\"__span-0-1\"><a id=\"__codelineno-0-1\" name=\"__codelineno-0-1\" href=\"#__codelineno-0-1\"></a>uv<span class=\"w\"> </span>run<span class=\"w\"> </span>entity<span class=\"w\"> </span>build<span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-0-2\"><a id=\"__codelineno-0-2\" name=\"__codelineno-0-2\" href=\"#__codelineno-0-2\"></a><span class=\"w\"> </span>--input<span class=\"w\"> </span>data/2026-04-02-entities.xlsx<span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-0-3\"><a id=\"__codelineno-0-3\" name=\"__codelineno-0-3\" href=\"#__codelineno-0-3\"></a><span class=\"w\"> </span>--db<span class=\"w\"> </span>artifacts/entities.db\n</span></code></pre></div>\n<p>Audit the artifact:</p>\n<div class=\"language-sh highlight\"><pre><span></span><code><span id=\"__span-1-1\"><a id=\"__codelineno-1-1\" name=\"__codelineno-1-1\" href=\"#__codelineno-1-1\"></a>uv<span class=\"w\"> </span>run<span class=\"w\"> </span>entity<span class=\"w\"> </span>audit<span class=\"w\"> </span><span class=\"se\">\\</span>\n</span><span id=\"__span-1-2\"><a id=\"__codelineno-1-2\" name=\"__codelineno-1-2\" href=\"#__codelineno-1-2\"></a><span class=\"w\"> </span>--db<span class=\"w\"> </span>artifacts/entities.db\n</span></code></pre></div>\n<h2 id=\"behavioral-notes\">Behavioral Notes<a class=\"headerlink\" href=\"#behavioral-notes\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li>Header mapping is by text, not Excel column letter.</li>\n<li>Rows with blank business-key fields are skipped.</li>\n<li>All remaining stakeholder rows are retained, regardless of\n <code>Type Of Transaction</code>.</li>\n<li><code>natural_key</code> semantics match the shared helpers from\n <code>deped-dcp-template</code>.</li>\n<li>Multiple source rows may share the same <code>natural_key</code>; row provenance and\n canonical identity are both preserved.</li>\n</ul>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n </article>\n </div>\n \n \n <script>var tabs=__md_get(\"__tabs\");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(\".tabbed-set\")){var labels=set.querySelector(\".tabbed-labels\");for(var tab of tabs)for(var label of labels.getElementsByTagName(\"label\"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>\n\n<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith(\"__tabbed_\"))</script>\n </div>\n \n <button type=\"button\" class=\"md-top md-icon\" data-md-component=\"top\" hidden>\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-circle-arrow-up\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m16 12-4-4-4 4M12 16V8\"/></svg>\n Back to top\n</button>\n \n </main>\n \n <footer class=\"md-footer\">\n \n \n \n <nav class=\"md-footer__inner md-grid\" aria-label=\"Footer\" >\n \n \n \n <a href=\"./build/\" class=\"md-footer__link md-footer__link--next\" aria-label=\"Next: Build Guide\">\n <div class=\"md-footer__title\">\n <span class=\"md-footer__direction\">\n Next\n </span>\n <div class=\"md-ellipsis\">\n Build Guide\n </div>\n </div>\n <div class=\"md-footer__button md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-arrow-right\" viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"/></svg>\n </div>\n </a>\n \n </nav>\n \n \n <div class=\"md-footer-meta md-typeset\">\n <div class=\"md-footer-meta__inner md-grid\">\n <div class=\"md-copyright\">\n \n <div class=\"md-copyright__highlight\">\n Copyright © 2026 DepEd Entity maintainers\n\n </div>\n \n \n Made with\n <a href=\"https://zensical.org/\" target=\"_blank\" rel=\"noopener\">\n Zensical\n </a>\n \n</div>\n \n </div>\n </div>\n</footer>\n \n </div>\n <div class=\"md-dialog\" data-md-component=\"dialog\">\n <div class=\"md-dialog__inner md-typeset\"></div>\n </div>\n \n \n \n \n \n <script id=\"__config\" type=\"application/json\">{\"annotate\":null,\"base\":\".\",\"features\":[\"announce.dismiss\",\"content.code.annotate\",\"content.code.copy\",\"content.code.select\",\"content.footnote.tooltips\",\"content.tabs.link\",\"content.tooltips\",\"navigation.footer\",\"navigation.indexes\",\"navigation.instant\",\"navigation.instant.prefetch\",\"navigation.path\",\"navigation.sections\",\"navigation.top\",\"navigation.tracking\",\"search.highlight\"],\"search\":\"./assets/javascripts/workers/search.e2d2d235.min.js\",\"tags\":null,\"translations\":{\"clipboard.copied\":\"Copied to clipboard\",\"clipboard.copy\":\"Copy to clipboard\",\"search.result.more.one\":\"1 more on this page\",\"search.result.more.other\":\"# more on this page\",\"search.result.none\":\"No matching documents\",\"search.result.one\":\"1 matching document\",\"search.result.other\":\"# matching documents\",\"search.result.placeholder\":\"Type to start searching\",\"search.result.term.missing\":\"Missing\",\"select.version\":\"Select version\"},\"version\":null}</script>\n \n \n <script src=\"./assets/javascripts/bundle.91a19a9e.min.js\"></script>\n \n \n </body>\n</html>",
|
|
3
|
+
"hash": 7257551086527383776
|
|
4
|
+
}
|